summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xconfigure138
-rw-r--r--demos/declarative/calculator/CalcButton.qml41
-rw-r--r--demos/declarative/calculator/Core/Button.qml39
-rw-r--r--demos/declarative/calculator/Core/Display.qml27
-rw-r--r--demos/declarative/calculator/Core/calculator.js91
-rw-r--r--demos/declarative/calculator/Core/images/button-.pngbin0 -> 1288 bytes
-rw-r--r--demos/declarative/calculator/Core/images/button-blue.pngbin0 -> 1565 bytes
-rw-r--r--demos/declarative/calculator/Core/images/button-green.pngbin0 -> 1543 bytes
-rw-r--r--demos/declarative/calculator/Core/images/button-purple.pngbin0 -> 1566 bytes
-rw-r--r--demos/declarative/calculator/Core/images/button-red.pngbin0 -> 1586 bytes
-rw-r--r--demos/declarative/calculator/Core/images/display.pngbin0 -> 998 bytes
-rw-r--r--demos/declarative/calculator/Core/qmldir2
-rw-r--r--demos/declarative/calculator/calculator.js87
-rw-r--r--demos/declarative/calculator/calculator.qml178
-rw-r--r--doc/src/declarative/advtutorial.qdoc33
-rw-r--r--doc/src/declarative/codingconventions.qdoc2
-rw-r--r--doc/src/declarative/integrating.qdoc148
-rw-r--r--doc/src/declarative/qmlruntime.qdoc2
-rw-r--r--doc/src/declarative/snippets/integrating/graphicswidgets/bluecircle.h58
-rw-r--r--doc/src/declarative/snippets/integrating/graphicswidgets/graphicswidgets.pro13
-rw-r--r--doc/src/declarative/snippets/integrating/graphicswidgets/main.qml32
-rw-r--r--doc/src/declarative/snippets/integrating/graphicswidgets/qmldir1
-rw-r--r--doc/src/declarative/snippets/integrating/graphicswidgets/redsquare.h57
-rw-r--r--doc/src/declarative/snippets/integrating/graphicswidgets/shapesplugin.cpp61
-rw-r--r--doc/src/images/declarative-integrating-graphicswidgets.pngbin0 -> 1061 bytes
-rw-r--r--doc/src/images/declarative-samegame.pngbin0 -> 124904 bytes
-rw-r--r--doc/src/snippets/code/src_corelib_kernel_qobject.cpp5
-rw-r--r--examples/declarative/fonts/fonts.qml4
-rw-r--r--examples/script/script.pro2
-rw-r--r--qmake/generators/symbian/symbiancommon.cpp4
-rw-r--r--src/corelib/kernel/qobject.cpp8
-rw-r--r--src/corelib/kernel/qobject_p.h8
-rw-r--r--src/corelib/thread/qthread.cpp15
-rw-r--r--src/corelib/thread/qthread_p.h3
-rw-r--r--src/corelib/thread/qthread_unix.cpp2
-rw-r--r--src/corelib/thread/qthread_win.cpp2
-rw-r--r--src/corelib/tools/qeasingcurve.cpp4
-rw-r--r--src/declarative/graphicsitems/qdeclarativeborderimage.cpp26
-rw-r--r--src/declarative/graphicsitems/qdeclarativeimagebase.cpp10
-rw-r--r--src/declarative/graphicsitems/qdeclarativelistview.cpp5
-rw-r--r--src/declarative/graphicsitems/qdeclarativepositioners.cpp138
-rw-r--r--src/declarative/graphicsitems/qdeclarativepositioners_p.h17
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext.cpp109
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext_p.h5
-rw-r--r--src/declarative/graphicsitems/qdeclarativetext_p_p.h5
-rw-r--r--src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp18
-rw-r--r--src/declarative/qml/qdeclarativebinding.cpp6
-rw-r--r--src/declarative/qml/qdeclarativebinding_p.h2
-rw-r--r--src/declarative/qml/qdeclarativecompiler.cpp37
-rw-r--r--src/declarative/qml/qdeclarativecompiler_p.h6
-rw-r--r--src/declarative/qml/qdeclarativecomponent.cpp71
-rw-r--r--src/declarative/qml/qdeclarativecomponent_p.h19
-rw-r--r--src/declarative/qml/qdeclarativecontext.cpp61
-rw-r--r--src/declarative/qml/qdeclarativecontext_p.h11
-rw-r--r--src/declarative/qml/qdeclarativedata_p.h (renamed from src/declarative/qml/qdeclarativedeclarativedata_p.h)36
-rw-r--r--src/declarative/qml/qdeclarativeengine.cpp57
-rw-r--r--src/declarative/qml/qdeclarativeengine_p.h2
-rw-r--r--src/declarative/qml/qdeclarativeenginedebug.cpp2
-rw-r--r--src/declarative/qml/qdeclarativeguard_p.h4
-rw-r--r--src/declarative/qml/qdeclarativeinfo.cpp4
-rw-r--r--src/declarative/qml/qdeclarativeobjectscriptclass.cpp14
-rw-r--r--src/declarative/qml/qdeclarativeprivate.h11
-rw-r--r--src/declarative/qml/qdeclarativeproperty.cpp40
-rw-r--r--src/declarative/qml/qdeclarativeproperty_p.h3
-rw-r--r--src/declarative/qml/qdeclarativepropertycache.cpp10
-rw-r--r--src/declarative/qml/qdeclarativevaluetype.cpp6
-rw-r--r--src/declarative/qml/qdeclarativevaluetype_p.h5
-rw-r--r--src/declarative/qml/qdeclarativevaluetypescriptclass.cpp123
-rw-r--r--src/declarative/qml/qdeclarativevaluetypescriptclass_p.h1
-rw-r--r--src/declarative/qml/qdeclarativevme.cpp26
-rw-r--r--src/declarative/qml/qdeclarativevmemetaobject.cpp2
-rw-r--r--src/declarative/qml/qml.pri2
-rw-r--r--src/declarative/util/qdeclarativeanimation.cpp7
-rw-r--r--src/declarative/util/qdeclarativelistmodelworkeragent.cpp2
-rw-r--r--src/declarative/util/qdeclarativeopenmetaobject.cpp4
-rw-r--r--src/declarative/util/qdeclarativepixmapcache.cpp34
-rw-r--r--src/declarative/util/qdeclarativepixmapcache_p.h5
-rw-r--r--src/declarative/util/qdeclarativestateoperations.cpp6
-rw-r--r--src/gui/dialogs/qpagesetupdialog_mac.mm5
-rw-r--r--src/gui/egl/qegl.cpp52
-rw-r--r--src/gui/egl/qegl_p.h18
-rw-r--r--src/gui/egl/qegl_x11.cpp10
-rw-r--r--src/gui/egl/qeglproperties.cpp27
-rw-r--r--src/gui/graphicsview/qgraphicsitem.cpp2
-rw-r--r--src/gui/itemviews/qlistview.cpp14
-rw-r--r--src/gui/kernel/qapplication.cpp6
-rw-r--r--src/gui/kernel/qapplication_p.h2
-rw-r--r--src/gui/kernel/qwidget.cpp2
-rw-r--r--src/gui/painting/qpaintbuffer.cpp2
-rw-r--r--src/gui/painting/qpaintbuffer_p.h2
-rw-r--r--src/gui/painting/qprintengine_mac.mm5
-rw-r--r--src/gui/text/qfontengine_ft.cpp2
-rw-r--r--src/gui/text/qstatictext.cpp4
-rw-r--r--src/imports/particles/qdeclarativeparticles.cpp10
-rw-r--r--src/multimedia/base/qgraphicsvideoitem.cpp5
-rw-r--r--src/multimedia/base/qgraphicsvideoitem.h3
-rw-r--r--src/multimedia/playback/qmediaplayer.cpp16
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp8
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h4
-rw-r--r--src/opengl/opengl.pro2
-rw-r--r--src/opengl/qgl.cpp33
-rw-r--r--src/opengl/qgl.h2
-rw-r--r--src/opengl/qgl_p.h10
-rw-r--r--src/opengl/qgl_x11egl.cpp8
-rw-r--r--src/opengl/qglpixelbuffer.cpp6
-rw-r--r--src/opengl/qglpixelbuffer_p.h12
-rw-r--r--src/openvg/qpixmapdata_vg.cpp14
-rw-r--r--src/script/api/qscriptengine.cpp14
-rw-r--r--src/script/api/qscriptengine_p.h7
-rw-r--r--tests/auto/declarative/.gitignore1
-rw-r--r--tests/auto/declarative/declarative.pro2
-rw-r--r--tests/auto/declarative/examples/examples.pro2
-rw-r--r--tests/auto/declarative/examples/tst_examples.cpp103
-rw-r--r--tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp4
-rw-r--r--tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp10
-rw-r--r--tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp1
-rw-r--r--tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp9
-rw-r--r--tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp8
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/OnDestructionType.qml8
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/destroyedSignal.errors.txt1
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/destroyedSignal.qml5
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/data/onDestruction.qml17
-rw-r--r--tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp16
-rw-r--r--tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp1
-rw-r--r--tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp23
-rw-r--r--tests/auto/declarative/qdeclarativepositioners/data/grid-toptobottom.qml41
-rw-r--r--tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp32
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/README (renamed from tests/auto/declarative/sql/data/README)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/changeversion.js (renamed from tests/auto/declarative/sql/data/changeversion.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/creation-a.js (renamed from tests/auto/declarative/sql/data/creation-a.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/creation.js (renamed from tests/auto/declarative/sql/data/creation.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/error-a.js (renamed from tests/auto/declarative/sql/data/error-a.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/error-b.js (renamed from tests/auto/declarative/sql/data/error-b.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/error-creation.js (renamed from tests/auto/declarative/sql/data/error-creation.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/error-notransaction.js (renamed from tests/auto/declarative/sql/data/error-notransaction.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/error-outsidetransaction.js (renamed from tests/auto/declarative/sql/data/error-outsidetransaction.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/iteration-forwardonly.js (renamed from tests/auto/declarative/sql/data/iteration-forwardonly.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/iteration.js (renamed from tests/auto/declarative/sql/data/iteration.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/readonly-error.js (renamed from tests/auto/declarative/sql/data/readonly-error.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/readonly.js (renamed from tests/auto/declarative/sql/data/readonly.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/reopen1.js (renamed from tests/auto/declarative/sql/data/reopen1.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/reopen2.js (renamed from tests/auto/declarative/sql/data/reopen2.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/selection-bindnames.js (renamed from tests/auto/declarative/sql/data/selection-bindnames.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/data/selection.js (renamed from tests/auto/declarative/sql/data/selection.js)0
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro (renamed from tests/auto/declarative/sql/sql.pro)2
-rw-r--r--tests/auto/declarative/qdeclarativesqldatabase/tst_qdeclarativesqldatabase.cpp (renamed from tests/auto/declarative/sql/tst_sql.cpp)36
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/embeddedImagesLocal.qml5
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/embeddedImagesLocalError.qml5
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/embeddedImagesRemote.qml5
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/embeddedImagesRemoteError.qml5
-rw-r--r--tests/auto/declarative/qdeclarativetext/data/http/exists.pngbin0 -> 2738 bytes
-rw-r--r--tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro7
-rw-r--r--tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp69
-rw-r--r--tests/auto/declarative/qdeclarativevaluetypes/data/returnValues.qml17
-rw-r--r--tests/auto/declarative/qdeclarativevaluetypes/testtypes.h3
-rw-r--r--tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp14
-rw-r--r--tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml5
-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.0.png (renamed from tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.0.png)bin627 -> 627 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.1.png (renamed from tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.1.png)bin626 -> 626 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.2.png (renamed from tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.2.png)bin625 -> 625 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.qml14
-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png (renamed from tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.0.png)bin1418 -> 1418 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png (renamed from tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.1.png)bin1430 -> 1430 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png (renamed from tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.2.png)bin1431 -> 1431 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml8
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.pngbin98912 -> 98927 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml110
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.1.pngbin23029 -> 0 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.2.pngbin23029 -> 0 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.3.pngbin23029 -> 0 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.4.pngbin23029 -> 0 bytes
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml1350
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml1
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml (renamed from tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.qml)0
-rw-r--r--tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml (renamed from tests/auto/declarative/qmlvisual/qdeclarativepositioners/repeater.qml)0
-rw-r--r--tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp25
-rw-r--r--tests/auto/qlistview/tst_qlistview.cpp30
-rw-r--r--tests/auto/qthread/tst_qthread.cpp32
-rw-r--r--tools/qdoc3/test/qt-build-docs.qdocconf14
-rw-r--r--tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf13
-rw-r--r--tools/qdoc3/test/qt-defines.qdocconf4
-rw-r--r--tools/qdoc3/test/qt.qdocconf13
-rw-r--r--tools/qdoc3/test/qt_zh_CN.qdocconf13
-rw-r--r--tools/qml/qdeclarativetester.cpp18
-rw-r--r--tools/qml/qml.pri29
-rw-r--r--tools/qml/qml.pro35
-rw-r--r--tools/qml/qmlruntime.cpp140
-rw-r--r--tools/qml/qmlruntime.h7
188 files changed, 2151 insertions, 2488 deletions
diff --git a/configure b/configure
index 634f0a2..0bfa880 100755
--- a/configure
+++ b/configure
@@ -937,7 +937,7 @@ while [ "$#" -gt 0 ]; do
VAL=no
;;
#Qt style yes options
- -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-mediaservice|-audio-backend|-svg|-declarative|-webkit|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles)
+ -incremental|-qvfb|-profile|-shared|-static|-sm|-xinerama|-xshape|-xsync|-xinput|-egl|-reduce-exports|-pch|-separate-debug-info|-stl|-freetype|-xcursor|-xfixes|-xrandr|-xrender|-mitshm|-fontconfig|-xkb|-nis|-qdbus|-dbus|-dbus-linked|-glib|-gstreamer|-gtkstyle|-cups|-iconv|-largefile|-h|-help|-v|-verbose|-debug|-release|-fast|-accessibility|-confirm-license|-gnumake|-framework|-qt3support|-debug-and-release|-exceptions|-cocoa|-carbon|-universal|-prefix-install|-silent|-armfpa|-optimized-qmake|-dwarf2|-reduce-relocations|-sse|-openssl|-openssl-linked|-ptmalloc|-xmlpatterns|-phonon|-phonon-backend|-multimedia|-mediaservice|-audio-backend|-svg|-declarative|-webkit|-javascript-jit|-script|-scripttools|-rpath|-force-pkg-config|-s60|-usedeffiles)
VAR=`echo $1 | sed "s,^-\(.*\),\1,"`
VAL=yes
;;
@@ -1246,6 +1246,9 @@ while [ "$#" -gt 0 ]; do
[ "$VAL" = "yes" ] || [ "$VAL" = "no" ] ||
[ "$VAL" = "es1" ] || [ "$VAL" = "es2" ]; then
CFG_OPENGL="$VAL"
+ if [ "$VAL" = "es1" ] || [ "$VAL" = "es2" ]; then
+ CFG_EGL="yes"
+ fi
else
UNKNOWN_OPT=yes
fi
@@ -1253,6 +1256,7 @@ while [ "$#" -gt 0 ]; do
openvg)
if [ "$VAL" = "auto" ] || [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
CFG_OPENVG="$VAL"
+ CFG_EGL="auto"
else
UNKNOWN_OPT=yes
fi
@@ -1569,6 +1573,13 @@ while [ "$#" -gt 0 ]; do
UNKNOWN_OPT=yes
fi
;;
+ egl)
+ if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
+ CFG_EGL="$VAL"
+ else
+ UNKNOWN_OPT=yes
+ fi
+ ;;
stl)
if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then
CFG_STL="$VAL"
@@ -3810,6 +3821,12 @@ Qt/X11 only:
-system-nas-sound .. Use NAS libaudio from the operating system.
See http://radscan.com/nas.html
+ -egl ............... Use EGL instead of GLX to manage contexts.
+ When building for desktop OpenGL, this option will
+ make Qt use EGL to manage contexts rather than the
+ GLX, which is the default. Note: For OpenGL ES, EGL
+ is always used.
+
-no-opengl ......... Do not support OpenGL.
+ -opengl <api> ...... Enable OpenGL support.
With no parameter, this will auto-detect the "best"
@@ -3817,8 +3834,6 @@ Qt/X11 only:
will be used. Use desktop, es1, or es2 for <api>
to force the use of the Desktop (OpenGL 1.x or 2.x),
OpenGL ES 1.x Common profile, or 2.x APIs instead.
- On X11, the EGL API will be used to manage GL
- contexts in the case of OpenGL ES
-no-openvg ........ Do not support OpenVG.
+ -openvg ........... Enable OpenVG support.
@@ -5121,26 +5136,6 @@ fi
if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
- # detect EGL support
- if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/unix/egl" "EGL (EGL/egl.h)" $L_FLAGS $I_FLAGS $l_FLAGS; then
- # EGL specified by QMAKE_*_EGL, included with <EGL/egl.h>
- CFG_EGL=yes
- CFG_EGL_GLES_INCLUDES=no
- elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/unix/egl4gles1" "EGL (GLES/egl.h)" $L_FLAGS $I_FLAGS $l_FLAGS; then
- # EGL specified by QMAKE_*_EGL, included with <GLES/egl.h>
- CFG_EGL=yes
- CFG_EGL_GLES_INCLUDES=yes
- fi
- if ( [ "$CFG_OPENGL" = "es1" ] || [ "$CFG_OPENGL" = "es2" ] ) && [ "$CFG_EGL" != "yes" ]; then
- echo "The EGL functionality test failed!"
- echo " EGL is required for OpenGL ES to manage contexts & surfaces."
- echo " You might need to modify the include and library search paths by editing"
- echo " QMAKE_INCDIR_EGL, QMAKE_LIBDIR_EGL and QMAKE_LIBS_EGL in"
- echo " ${XQMAKESPEC}."
- exit 1
- fi
-
-
# auto-detect Glib support
if [ "$CFG_GLIB" != "no" ]; then
if [ -n "$PKG_CONFIG" ]; then
@@ -5354,8 +5349,14 @@ if [ "$PLATFORM_X11" = "yes" ]; 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
+ if [ "$CFG_EGL" = "no" ]; then
+ CFG_EGL=auto
+ fi
+ 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
+ if [ "$CFG_EGL" = "no" ]; then
+ CFG_EGL=auto
+ fi
else
if [ "$CFG_OPENGL" = "yes" ]; then
echo "All the OpenGL functionality tests failed!"
@@ -5366,24 +5367,24 @@ if [ "$PLATFORM_X11" = "yes" ]; then
fi
CFG_OPENGL=no
fi
- case "$PLATFORM" in
- hpux*)
- # HP-UX have buggy glx headers; check if we really need to define the GLXFBConfig struct.
- if [ "$CFG_OPENGL" = "desktop" ]; then
- "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/glxfbconfig "OpenGL" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS
- if [ $? != "0" ]; then
- QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT
- fi
- fi
- ;;
- *)
- ;;
- esac
+ case "$PLATFORM" in
+ hpux*)
+ # HP-UX have buggy glx headers; check if we really need to define the GLXFBConfig struct.
+ if [ "$CFG_OPENGL" = "desktop" ]; then
+ "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/glxfbconfig "OpenGL" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS
+ if [ $? != "0" ]; then
+ QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT
+ fi
+ fi
+ ;;
+ *)
+ ;;
+ esac
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
+ "$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 "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}."
@@ -5391,9 +5392,9 @@ if [ "$PLATFORM_X11" = "yes" ]; then
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
+ "$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 "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}."
@@ -5403,7 +5404,7 @@ if [ "$PLATFORM_X11" = "yes" ]; then
# Desktop OpenGL support
"$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/opengl "OpenGL" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS
if [ $? != "0" ]; then
- echo "The OpenGL functionality test failed!"
+ 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}."
@@ -5416,7 +5417,7 @@ if [ "$PLATFORM_X11" = "yes" ]; then
if [ $? != "0" ]; then
QMakeVar add DEFINES QT_DEFINE_GLXFBCONFIG_STRUCT
fi
- ;;
+ ;;
*)
;;
esac
@@ -5725,9 +5726,10 @@ if [ "$PLATFORM_QWS" = "yes" ]; then
fi
fi
if [ "$CFG_OPENGL" = "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!"
@@ -5738,24 +5740,26 @@ if [ "$PLATFORM_QWS" = "yes" ]; then
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
+ "$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 "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, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in"
- echo " ${XQMAKESPEC}."
+ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in"
+ echo " ${XQMAKESPEC}."
exit 1
fi
+ CFG_EGL=yes
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
+ "$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 "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, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in"
- echo " ${XQMAKESPEC}."
+ echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in"
+ echo " ${XQMAKESPEC}."
exit 1
fi
+ CFG_EGL=yes
elif [ "$CFG_OPENGL" = "desktop" ]; then
# Desktop OpenGL support
echo "Desktop OpenGL support is not avaliable on Qt for Embedded Linux"
@@ -5842,6 +5846,36 @@ if [ "$PLATFORM_QWS" = "yes" ]; then
fi # QWS
+# EGL Support
+if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then
+ if [ "$CFG_EGL" != "no" ]; then
+ # detect EGL support
+ if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/unix/egl" "EGL (EGL/egl.h)" $L_FLAGS $I_FLAGS $l_FLAGS; then
+ # EGL specified by QMAKE_*_EGL, included with <EGL/egl.h>
+ CFG_EGL=yes
+ CFG_EGL_GLES_INCLUDES=no
+ elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" "config.tests/unix/egl4gles1" "EGL (GLES/egl.h)" $L_FLAGS $I_FLAGS $l_FLAGS; then
+ # EGL specified by QMAKE_*_EGL, included with <GLES/egl.h>
+ CFG_EGL=yes
+ CFG_EGL_GLES_INCLUDES=yes
+ else
+ if [ "$CFG_EGL" = "yes" ]; then
+ echo "The EGL functionality test failed!"
+ echo " EGL is required for OpenGL ES to manage contexts & surfaces."
+ echo " You might need to modify the include and library search paths by editing"
+ echo " QMAKE_INCDIR_EGL, QMAKE_LIBDIR_EGL and QMAKE_LIBS_EGL in"
+ echo " ${XQMAKESPEC}."
+ exit 1
+ fi
+ CFG_EGL=no
+ # If QtOpenGL would be built against OpenGL ES, disable it as we can't to that if EGL is missing
+ if [ "$CFG_OPENGL" = "es1" || "$CFG_OPENGL" = "es2" ]; then
+ CFG_OPENGL=no
+ fi
+ fi
+ fi
+fi
+
# freetype support
[ "x$CFG_EMBEDDED" != "xno" ] && CFG_LIBFREETYPE="$CFG_QWS_FREETYPE"
[ "x$PLATFORM_MAC" = "xyes" ] && CFG_LIBFREETYPE=no
diff --git a/demos/declarative/calculator/CalcButton.qml b/demos/declarative/calculator/CalcButton.qml
deleted file mode 100644
index a125346..0000000
--- a/demos/declarative/calculator/CalcButton.qml
+++ /dev/null
@@ -1,41 +0,0 @@
-import Qt 4.7
-
-Rectangle {
- property alias operation: label.text
- property bool toggable: false
- property bool toggled: false
- signal clicked
-
- id: button; width: 50; height: 30
- border.color: palette.mid; radius: 6
- gradient: Gradient {
- GradientStop { id: gradientStop1; position: 0.0; color: Qt.lighter(palette.button) }
- GradientStop { id: gradientStop2; position: 1.0; color: palette.button }
- }
-
- Text { id: label; anchors.centerIn: parent; color: palette.buttonText }
-
- MouseArea {
- id: clickRegion
- anchors.fill: parent
- onClicked: {
- doOp(operation);
- button.clicked();
- if (!button.toggable) return;
- button.toggled ? button.toggled = false : button.toggled = true
- }
- }
-
- states: [
- State {
- name: "Pressed"; when: clickRegion.pressed == true
- PropertyChanges { target: gradientStop1; color: palette.dark }
- PropertyChanges { target: gradientStop2; color: palette.button }
- },
- State {
- name: "Toggled"; when: button.toggled == true
- PropertyChanges { target: gradientStop1; color: palette.dark }
- PropertyChanges { target: gradientStop2; color: palette.button }
- }
- ]
-}
diff --git a/demos/declarative/calculator/Core/Button.qml b/demos/declarative/calculator/Core/Button.qml
new file mode 100644
index 0000000..8948adc
--- /dev/null
+++ b/demos/declarative/calculator/Core/Button.qml
@@ -0,0 +1,39 @@
+import Qt 4.7
+
+BorderImage {
+ id: button
+
+ property alias operation: buttonText.text
+ property string color: ""
+
+ signal clicked
+
+ source: "images/button-" + color + ".png"; clip: true
+ border { left: 10; top: 10; right: 10; bottom: 10 }
+
+ Rectangle {
+ id: shade
+ anchors.fill: button; radius: 10; color: "black"; opacity: 0
+ }
+
+ Text {
+ id: buttonText
+ anchors.centerIn: parent; anchors.verticalCenterOffset: -1
+ font.pixelSize: parent.width > parent.height ? parent.height * .5 : parent.width * .5
+ style: Text.Sunken; color: "white"; styleColor: "black"; smooth: true
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ onClicked: {
+ doOp(operation)
+ button.clicked()
+ }
+ }
+
+ states: State {
+ name: "pressed"; when: mouseArea.pressed == true
+ PropertyChanges { target: shade; opacity: .4 }
+ }
+}
diff --git a/demos/declarative/calculator/Core/Display.qml b/demos/declarative/calculator/Core/Display.qml
new file mode 100644
index 0000000..b98c44b
--- /dev/null
+++ b/demos/declarative/calculator/Core/Display.qml
@@ -0,0 +1,27 @@
+import Qt 4.7
+
+BorderImage {
+ id: image
+
+ property alias text : displayText.text
+ property alias currentOperation : operationText
+
+ source: "images/display.png"
+ border { left: 10; top: 10; right: 10; bottom: 10 }
+
+ Text {
+ id: displayText
+ anchors {
+ right: parent.right; verticalCenter: parent.verticalCenter; verticalCenterOffset: -1
+ rightMargin: 6; left: operationText.right
+ }
+ font.pixelSize: parent.height * .6; text: "0"; horizontalAlignment: Text.AlignRight; elide: Text.ElideRight
+ color: "#343434"; smooth: true; font.bold: true
+ }
+ Text {
+ id: operationText
+ font.bold: true; font.pixelSize: parent.height * .7
+ color: "#343434"; smooth: true
+ anchors { left: parent.left; leftMargin: 6; verticalCenterOffset: -3; verticalCenter: parent.verticalCenter }
+ }
+}
diff --git a/demos/declarative/calculator/Core/calculator.js b/demos/declarative/calculator/Core/calculator.js
new file mode 100644
index 0000000..51b3dd3
--- /dev/null
+++ b/demos/declarative/calculator/Core/calculator.js
@@ -0,0 +1,91 @@
+
+var curVal = 0
+var memory = 0
+var lastOp = ""
+var timer = 0
+
+function disabled(op) {
+ if (op == "." && display.text.toString().search(/\./) != -1) {
+ return true
+ } else if (op == squareRoot && display.text.toString().search(/-/) != -1) {
+ return true
+ } else {
+ return false
+ }
+}
+
+function doOperation(op) {
+ if (disabled(op)) {
+ return
+ }
+
+ if (op.toString().length==1 && ((op >= "0" && op <= "9") || op==".") ) {
+ if (display.text.toString().length >= 14)
+ return; // No arbitrary length numbers
+ if (lastOp.toString().length == 1 && ((lastOp >= "0" && lastOp <= "9") || lastOp == ".") ) {
+ display.text = display.text + op.toString()
+ } else {
+ display.text = op
+ }
+ lastOp = op
+ return
+ }
+ lastOp = op
+
+ if (display.currentOperation.text == "+") {
+ display.text = Number(display.text.valueOf()) + Number(curVal.valueOf())
+ } else if (display.currentOperation.text == "-") {
+ display.text = Number(curVal) - Number(display.text.valueOf())
+ } else if (display.currentOperation.text == multiplication) {
+ display.text = Number(curVal) * Number(display.text.valueOf())
+ } else if (display.currentOperation.text == division) {
+ display.text = Number(Number(curVal) / Number(display.text.valueOf())).toString()
+ } else if (display.currentOperation.text == "=") {
+ }
+
+ if (op == "+" || op == "-" || op == multiplication || op == division) {
+ display.currentOperation.text = op
+ curVal = display.text.valueOf()
+ return
+ }
+
+ curVal = 0
+ display.currentOperation.text = ""
+
+ if (op == "1/x") {
+ display.text = (1 / display.text.valueOf()).toString()
+ } else if (op == "x^2") {
+ display.text = (display.text.valueOf() * display.text.valueOf()).toString()
+ } else if (op == "Abs") {
+ display.text = (Math.abs(display.text.valueOf())).toString()
+ } else if (op == "Int") {
+ display.text = (Math.floor(display.text.valueOf())).toString()
+ } else if (op == plusminus) {
+ display.text = (display.text.valueOf() * -1).toString()
+ } else if (op == squareRoot) {
+ display.text = (Math.sqrt(display.text.valueOf())).toString()
+ } else if (op == "mc") {
+ memory = 0;
+ } else if (op == "m+") {
+ memory += display.text.valueOf()
+ } else if (op == "mr") {
+ display.text = memory.toString()
+ } else if (op == "m-") {
+ memory = display.text.valueOf()
+ } else if (op == leftArrow) {
+ display.text = display.text.toString().slice(0, -1)
+ } else if (op == "C") {
+ display.text = "0"
+ } else if (op == "AC") {
+ curVal = 0
+ memory = 0
+ lastOp = ""
+ display.text ="0"
+ }
+
+ if (op == rotateLeft)
+ main.state = 'rotated'
+ if (op == rotateRight)
+ main.state = ''
+}
+
diff --git a/demos/declarative/calculator/Core/images/button-.png b/demos/declarative/calculator/Core/images/button-.png
new file mode 100644
index 0000000..544e514
--- /dev/null
+++ b/demos/declarative/calculator/Core/images/button-.png
Binary files differ
diff --git a/demos/declarative/calculator/Core/images/button-blue.png b/demos/declarative/calculator/Core/images/button-blue.png
new file mode 100644
index 0000000..5f92de3
--- /dev/null
+++ b/demos/declarative/calculator/Core/images/button-blue.png
Binary files differ
diff --git a/demos/declarative/calculator/Core/images/button-green.png b/demos/declarative/calculator/Core/images/button-green.png
new file mode 100644
index 0000000..36c9391
--- /dev/null
+++ b/demos/declarative/calculator/Core/images/button-green.png
Binary files differ
diff --git a/demos/declarative/calculator/Core/images/button-purple.png b/demos/declarative/calculator/Core/images/button-purple.png
new file mode 100644
index 0000000..347cbbe
--- /dev/null
+++ b/demos/declarative/calculator/Core/images/button-purple.png
Binary files differ
diff --git a/demos/declarative/calculator/Core/images/button-red.png b/demos/declarative/calculator/Core/images/button-red.png
new file mode 100644
index 0000000..3b33589
--- /dev/null
+++ b/demos/declarative/calculator/Core/images/button-red.png
Binary files differ
diff --git a/demos/declarative/calculator/Core/images/display.png b/demos/declarative/calculator/Core/images/display.png
new file mode 100644
index 0000000..9507f43
--- /dev/null
+++ b/demos/declarative/calculator/Core/images/display.png
Binary files differ
diff --git a/demos/declarative/calculator/Core/qmldir b/demos/declarative/calculator/Core/qmldir
new file mode 100644
index 0000000..a926b93
--- /dev/null
+++ b/demos/declarative/calculator/Core/qmldir
@@ -0,0 +1,2 @@
+Button Button.qml
+Display Display.qml
diff --git a/demos/declarative/calculator/calculator.js b/demos/declarative/calculator/calculator.js
deleted file mode 100644
index f172daf..0000000
--- a/demos/declarative/calculator/calculator.js
+++ /dev/null
@@ -1,87 +0,0 @@
-
-var curVal = 0;
-var memory = 0;
-var lastOp = "";
-var timer = 0;
-
-function disabled(op) {
- if (op == "." && curNum.text.toString().search(/\./) != -1) {
- return true;
- } else if (op == "Sqrt" && curNum.text.toString().search(/-/) != -1) {
- return true;
- } else {
- return false;
- }
-}
-
-function doOperation(op) {
- if (disabled(op)) {
- return;
- }
-
- if (op.toString().length==1 && ((op >= "0" && op <= "9") || op==".") ) {
- if (curNum.text.toString().length >= 14)
- return; // No arbitrary length numbers
- if (lastOp.toString().length == 1 && ((lastOp >= "0" && lastOp <= "9") || lastOp==".") ) {
- curNum.text = curNum.text + op.toString();
- } else {
- curNum.text = op;
- }
- lastOp = op;
- return;
- }
- lastOp = op;
-
- // Pending operations
- if (currentOperation.text == "+") {
- curNum.text = Number(curNum.text.valueOf()) + Number(curVal.valueOf());
- } else if (currentOperation.text == "-") {
- curNum.text = Number(curVal) - Number(curNum.text.valueOf());
- } else if (currentOperation.text == "x") {
- curNum.text = Number(curVal) * Number(curNum.text.valueOf());
- } else if (currentOperation.text == "/") {
- curNum.text = Number(Number(curVal) / Number(curNum.text.valueOf())).toString();
- } else if (currentOperation.text == "=") {
- }
-
- if (op == "+" || op == "-" || op == "x" || op == "/") {
- currentOperation.text = op;
- curVal = curNum.text.valueOf();
- return;
- }
- curVal = 0;
- currentOperation.text = "";
-
- // Immediate operations
- if (op == "1/x") { // reciprocal
- curNum.text = (1 / curNum.text.valueOf()).toString();
- } else if (op == "^2") { // squared
- curNum.text = (curNum.text.valueOf() * curNum.text.valueOf()).toString();
- } else if (op == "Abs") {
- curNum.text = (Math.abs(curNum.text.valueOf())).toString();
- } else if (op == "Int") {
- curNum.text = (Math.floor(curNum.text.valueOf())).toString();
- } else if (op == "+/-") { // plus/minus
- curNum.text = (curNum.text.valueOf() * -1).toString();
- } else if (op == "Sqrt") { // square root
- curNum.text = (Math.sqrt(curNum.text.valueOf())).toString();
- } else if (op == "MC") { // memory clear
- memory = 0;
- } else if (op == "M+") { // memory increment
- memory += curNum.text.valueOf();
- } else if (op == "MR") { // memory recall
- curNum.text = memory.toString();
- } else if (op == "MS") { // memory set
- memory = curNum.text.valueOf();
- } else if (op == "Bksp") {
- curNum.text = curNum.text.toString().slice(0, -1);
- } else if (op == "C") {
- curNum.text = "0";
- } else if (op == "AC") {
- curVal = 0;
- memory = 0;
- lastOp = "";
- curNum.text ="0";
- }
-}
-
diff --git a/demos/declarative/calculator/calculator.qml b/demos/declarative/calculator/calculator.qml
index b8e506e..286a4d1 100644
--- a/demos/declarative/calculator/calculator.qml
+++ b/demos/declarative/calculator/calculator.qml
@@ -1,126 +1,106 @@
import Qt 4.7
-import "calculator.js" as CalcEngine
+import "Core"
+import "Core/calculator.js" as CalcEngine
Rectangle {
- width: 320; height: 270; color: palette.window
+ id: window
- function doOp(operation) { CalcEngine.doOperation(operation); }
+ width: 480; height: 360
+ color: "#282828"
- SystemPalette { id: palette }
+ property string rotateLeft: "\u2939"
+ property string rotateRight: "\u2935"
+ property string leftArrow: "\u2190"
+ property string division : "\u00f7"
+ property string multiplication : "\u00d7"
+ property string squareRoot : "\u221a"
+ property string plusminus : "\u00b1"
- Column {
- x: 2; spacing: 10;
+ function doOp(operation) { CalcEngine.doOperation(operation) }
- Rectangle {
- id: container
- width: 316; height: 50
- border.color: palette.dark; color: palette.base
+ Item {
+ id: main
+ state: (runtime.orientation == Orientation.Portrait) ? '' : 'rotated'
+ width: parent.width; height: parent.height; anchors.centerIn: parent
- Text {
- id: curNum
- font.bold: true; font.pointSize: 16
- color: palette.text
- anchors.right: container.right
- anchors.rightMargin: 5
- anchors.verticalCenter: container.verticalCenter
- }
+ Column {
+ id: box; spacing: 8
- Text {
- id: currentOperation
- color: palette.text
- font.bold: true; font.pointSize: 16
- anchors.left: container.left
- anchors.leftMargin: 5
- anchors.verticalCenter: container.verticalCenter
- }
- }
+ anchors { fill: parent; topMargin: 6; bottomMargin: 6; leftMargin: 6; rightMargin: 6 }
- Item {
- width: 320; height: 30
-
- CalcButton {
- id: advancedCheckBox
- x: 55; width: 206
- operation: "Advanced Mode"
- toggable: true
+ Row {
+ Display { id: display; width: box.width; height: 64 }
}
- }
- Item {
- width: 320; height: 160
+ Column {
+ id: column; spacing: 6
- Item {
- id: basicButtons
- x: 55; width: 160; height: 160
+ property real h: ((box.height - 72) / 6) - ((spacing * (6 - 1)) / 6)
+ property real w: (box.width / 4) - ((spacing * (4 - 1)) / 4)
- CalcButton { operation: "Bksp"; id: bksp; width: 67; opacity: 0 }
- CalcButton { operation: "C"; id: c; width: 76 }
- CalcButton { operation: "AC"; id: ac; x: 78; width: 76 }
-
- Grid {
- id: numKeypad; y: 32; spacing: 2; columns: 3
-
- CalcButton { operation: "7" }
- CalcButton { operation: "8" }
- CalcButton { operation: "9" }
- CalcButton { operation: "4" }
- CalcButton { operation: "5" }
- CalcButton { operation: "6" }
- CalcButton { operation: "1" }
- CalcButton { operation: "2" }
- CalcButton { operation: "3" }
+ Row {
+ spacing: 6
+
+ Button {
+ id: rotateButton
+ width: column.w; height: column.h; color: 'purple'; operation: rotateLeft
+ }
+ Button { width: column.w; height: column.h; color: 'purple'; operation: leftArrow }
+ Button { width: column.w; height: column.h; color: 'purple'; operation: "C" }
+ Button { width: column.w; height: column.h; color: 'purple'; operation: "AC" }
}
Row {
- y: 128; spacing: 2
+ spacing: 6
+ property real w: (box.width / 4) - ((spacing * (4 - 1)) / 4)
- CalcButton { operation: "0"; width: 50 }
- CalcButton { operation: "."; x: 77; width: 50 }
- CalcButton { operation: "="; id: equals; x: 77; width: 102 }
+ Button { width: column.w; height: column.h; color: 'green'; operation: "mc" }
+ Button { width: column.w; height: column.h; color: 'green'; operation: "m+" }
+ Button { width: column.w; height: column.h; color: 'green'; operation: "m-" }
+ Button { width: column.w; height: column.h; color: 'green'; operation: "mr" }
}
- Column {
- id: simpleOperations
- x: 156; y: 0; spacing: 2
-
- CalcButton { operation: "x" }
- CalcButton { operation: "/" }
- CalcButton { operation: "-" }
- CalcButton { operation: "+" }
+ Grid {
+ id: grid; rows: 4; columns: 5; spacing: 6
+
+ property real w: (box.width / columns) - ((spacing * (columns - 1)) / columns)
+
+ Button { width: grid.w; height: column.h; operation: "7"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: "8"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: "9"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: division }
+ Button { width: grid.w; height: column.h; operation: squareRoot }
+ Button { width: grid.w; height: column.h; operation: "4"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: "5"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: "6"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: multiplication }
+ Button { width: grid.w; height: column.h; operation: "x^2" }
+ Button { width: grid.w; height: column.h; operation: "1"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: "2"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: "3"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: "-" }
+ Button { width: grid.w; height: column.h; operation: "1/x" }
+ Button { width: grid.w; height: column.h; operation: "0"; color: 'blue' }
+ Button { width: grid.w; height: column.h; operation: "." }
+ Button { width: grid.w; height: column.h; operation: plusminus }
+ Button { width: grid.w; height: column.h; operation: "+" }
+ Button { width: grid.w; height: column.h; operation: "="; color: 'red' }
}
}
-
- Grid {
- id: advancedButtons
- x: 350; spacing: 2; columns: 2; opacity: 0
-
- CalcButton { operation: "Abs" }
- CalcButton { operation: "Int" }
- CalcButton { operation: "MC" }
- CalcButton { operation: "Sqrt" }
- CalcButton { operation: "MR" }
- CalcButton { operation: "^2" }
- CalcButton { operation: "MS" }
- CalcButton { operation: "1/x" }
- CalcButton { operation: "M+" }
- CalcButton { operation: "+/-" }
- }
}
- }
- states: State {
- name: "Advanced"; when: advancedCheckBox.toggled == true
- PropertyChanges { target: basicButtons; x: 0 }
- PropertyChanges { target: simpleOperations; y: 32 }
- PropertyChanges { target: bksp; opacity: 1 }
- PropertyChanges { target: c; x: 69; width: 67 }
- PropertyChanges { target: ac; x: 138; width: 67 }
- PropertyChanges { target: equals; width: 50 }
- PropertyChanges { target: advancedButtons; x: 210; opacity: 1 }
- }
+ states: State {
+ name: 'rotated'
+ PropertyChanges { target: main; rotation: -90; width: window.height; height: window.width }
+ PropertyChanges { target: rotateButton; operation: rotateRight }
+ }
- transitions: Transition {
- NumberAnimation { properties: "x,y,width"; easing.type: "OutBounce"; duration: 500 }
- NumberAnimation { properties: "opacity"; easing.type: "InOutQuad"; duration: 500 }
+ transitions: Transition {
+ SequentialAnimation {
+ PropertyAction { target: rotateButton; property: "operation" }
+ NumberAnimation { properties: "rotation"; duration: 300; easing.type: "InOutQuint" }
+ NumberAnimation { properties: "x,y,width,height"; duration: 300; easing.type: "InOutQuint" }
+ }
+ }
}
}
diff --git a/doc/src/declarative/advtutorial.qdoc b/doc/src/declarative/advtutorial.qdoc
index 3a70eee..751bf00 100644
--- a/doc/src/declarative/advtutorial.qdoc
+++ b/doc/src/declarative/advtutorial.qdoc
@@ -46,27 +46,34 @@
\nextpage QML Advanced Tutorial 1 - Creating the Game Canvas and Blocks
This tutorial walks step-by-step through the creation of a full application using QML.
+It assumes that you already know the basics of QML (for example, from reading the
+\l{QML Tutorial}{simple tutorial}).
-It is assumed that you already know the basics of QML (for example, from reading the \l{QML Tutorial}{simple tutorial}) and this
-tutorial focuses on using that knowledge to produce a complete and functioning application.
+In this tutorial we write a game, \e {Same Game}, based on the Same Game application
+included in the declarative \c demos directory, which looks like this:
-The tutorial involves a significant amount of JavaScript to implement the game logic. An understanding of JavaScript is helpful to understand parts of this tutorial, but if you don't understand JavaScript you can still get a feel for how you can integrate backend logic to create and control QML elements. From the QML perspective, there is little difference between integrating QML with backend logic written in C++ and backend logic written in JavaScript.
+\image declarative-samegame.png
-In this tutorial we recreate, step by step, a version of the Same Game demo in $QTDIR/demos/declarative/samegame.qml.
-The results of the individual steps are in the $QTDIR/examples/declarative/tutorials/samegame directory.
+We will cover concepts for producing a fully functioning application, including
+JavaScript integration, using QML \l States and \l {Behavior}{Behaviors} to
+manage components and enhance your interface, and storing persistent application data.
+
+An understanding of JavaScript is helpful to understand parts of this tutorial, but if you don't
+know JavaScript you can still get a feel for how you can integrate backend logic to create and
+control QML elements.
-The Same Game demo has been extended since this tutorial was written. This tutorial only covers the version in
-the $QTDIR/examples/declarative/tutorials/samegame directory. However once you have completed the tutorial you should be able
-to understand the extensions in the most recent Same Game demo, and even extend it yourself.
Tutorial chapters:
-\list
-\o \l {QML Advanced Tutorial 1 - Creating the Game Canvas and Blocks}
-\o \l {QML Advanced Tutorial 2 - Populating the Game Canvas}
-\o \l {QML Advanced Tutorial 3 - Implementing the Game Logic}
-\o \l {QML Advanced Tutorial 4 - Finishing Touches}
+\list 1
+\o \l {QML Advanced Tutorial 1 - Creating the Game Canvas and Blocks}{Creating the Game Canvas and Blocks}
+\o \l {QML Advanced Tutorial 2 - Populating the Game Canvas}{Populating the Game Canvas}}
+\o \l {QML Advanced Tutorial 3 - Implementing the Game Logic}{Implementing the Game Logic}
+\o \l {QML Advanced Tutorial 4 - Finishing Touches}{Finishing Touches}
\endlist
+
+All the code in this tutorial can be found in the $QTDIR/examples/declarative/tutorials/samegame
+directory.
*/
/*!
diff --git a/doc/src/declarative/codingconventions.qdoc b/doc/src/declarative/codingconventions.qdoc
index e1e7871..7ae5cbd 100644
--- a/doc/src/declarative/codingconventions.qdoc
+++ b/doc/src/declarative/codingconventions.qdoc
@@ -101,7 +101,7 @@ we will write this:
\snippet doc/src/snippets/declarative/codingconventions/lists.qml 1
-\section1 Javascript
+\section1 Javascript code
If the script is a single expression, we recommend writing it inline:
diff --git a/doc/src/declarative/integrating.qdoc b/doc/src/declarative/integrating.qdoc
index 165a735..d4034fa 100644
--- a/doc/src/declarative/integrating.qdoc
+++ b/doc/src/declarative/integrating.qdoc
@@ -43,44 +43,56 @@
\page qml-integration.html
\title Integrating QML with existing Qt UI code
-If you have existing Qt UI code which does not use QML you can still
-add QML to your UI, without having to rewrite it.
-
-\section1 Adding QML to a \l{QWidget} based UI
-If you have an existing QWidget based UI you can simply write new custom
-widgets in QML. To integrate them into your application you can create a
-QDeclarativeView widget, and load the QML file into that. You'll then have a new widget
-containing your declarative UI, and you can interact with it through the
-QDeclarativeView interface. The one drawback of this approach is that QDeclarativeView is a lot
-heavier than a QWidget in terms of memory consumption and initialization speed,
-and so having large numbers of them may lead to performance degredation.
-
-For a smooth transition from a QWidget based UI to a QML based UI, simply
-rewrite your widgets in QML one at a time, using the above method. When
-all of your widgets are written in QML you can rewrite your main widget in
-QML, so as to load the other widgets in QML instead of using QDeclarativeViews. Then
-you just load the main QML file on startup.
-
-Keep in mind that QWidgets were designed for different sorts of UIs than QML
-was, and so it is not always a good idea to switch. QWidgets are a better
-choice if your UI is comprised of a small number of complex and static
-elements, and QML is a better choice if your UI is comprised of a large number
+There are a number of ways to integrate QML into QWidget-based UI applications,
+depending on the characteristics of your existing UI code.
+
+
+\section1 Integrating with a \l{QWidget}-based UI
+
+If you have an existing QWidget-based UI, QML widgets can be integrated into
+it using QDeclarativeView. QDeclarativeView is a subclass of QWidget so you
+can add it to your user interface like any other QWidget. Use
+QDeclarativeView::setSource() to load a QML file into the view, then add the
+view to your UI:
+
+\code
+QDeclarativeView *qmlView = new QDeclarativeView;
+qmlView->setSource(QUrl::fromLocalFile("myqml.qml"));
+
+QWidget *widget = myExistingWidget();
+QVBoxLayout *layout = new QVBoxLayout(widget);
+widget->addWidget(qmlView);
+\endcode
+
+The one drawback to this approach is that QDeclarativeView is slower to initialize
+and uses more memory than a QWidget, and creating large numbers of QDeclarativeView
+objects may lead to performance degradation. If this is the case, it may be
+better to rewrite your widgets in QML, and load the widgets from a main QML widget
+instead of using QDeclarativeView.
+
+Keep in mind that QWidgets were designed for a different type of user interface
+than QML, so it is not always a good idea to port a QWidget-based application to
+QML. QWidgets are a better choice if your UI is comprised of a small number of
+complex and static elements, and QML is a better choice if your UI is comprised of a large number
of simple and dynamic elements.
-\section1 Adding QML to a QGraphicsView based UI
-If you have an existing Graphics View based UI you can create new
-items in QML, and use \l{QDeclarativeComponent} to create \l{QGraphicsObject}s
-from the QML files. These \l{QGraphicsObject}s can then be placed into
-your \l{QGraphicsScene} using \l{QGraphicsScene::addItem()} or by
-reparenting them to an item already in the \l{QGraphicsScene}.
+\section1 Integrating with a QGraphicsView-based UI
+
+\section2 Adding QML widgets to a QGraphicsScene
-Example, for local QML files:
+If you have an existing UI based on the \l{The Graphics View Framework}{Graphics View Framework},
+you can integrate QML widgets directly into your QGraphicsScene. Use
+QDeclarativeComponent to create a QGraphicsObject from a QML file, and
+place the graphics object into your scene using \l{QGraphicsScene::addItem()}, or
+reparent it to an item already in the \l{QGraphicsScene}.
+
+For example:
\code
-QGraphicsScene* scene = new QGraphicsScene;
+QGraphicsScene* scene = myExistingGraphicsScene();
QDeclarativeEngine *engine = new QDeclarativeEngine;
-QDeclarativeComponent component(engine, QUrl::fromLocalFile(filename));
+QDeclarativeComponent component(engine, QUrl::fromLocalFile("myqml.qml"));
QGraphicsObject *object =
qobject_cast<QGraphicsObject *>(component.create());
scene->addItem(object);
@@ -90,26 +102,60 @@ The following QGraphicsView options are recommended for optimal performance
of QML UIs:
\list
-\o QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState);
-\o QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate);
-\o QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex);
+\o QGraphicsView::setOptimizationFlags(QGraphicsView::DontSavePainterState)
+\o QGraphicsView::setViewportUpdateMode(QGraphicsView::BoundingRectViewportUpdate)
+\o QGraphicsScene::setItemIndexMethod(QGraphicsScene::NoIndex)
\endlist
-\section1 Using existing QGraphicsWidgets in QML
-Another way of integrating with a QGraphicsView based UI is to expose your
-existing QGraphicsWidgets to QML, and constructing your scene in QML. Note that
-this approach will not work with QGraphicsItems which are not QGraphicsWidgets,
-and that this approach allows you to integrate new items written in QML
-without using the above method.
-
-You can make custom C++ types
-available in QML using the pair of macros listed in \l{Extending QML in C++}.
-While this is normally only useful for
-types that were designed for QML use, in conjunction with the
-\l{GraphicsObjectContainer} element QGraphicsWidget subclasses can also be
-used effectively (if they were designed, like QGraphicsWidget, to be controllable through Qt's property system).
-This way you can write your UI using QML, without having to rewrite your existing items.
-
-For details on implementing this approach see \l{Extending QML in C++} page for details on exposing your C++ types,
-and the \l{GraphicsObjectContainer} documentation for details about using it to wrap QGraphicsWidgets.
+\section2 Loading QGraphicsWidget objects in QML
+
+An alternative approach is to expose your existing QGraphicsWidget objects to
+QML and construct your scene in QML instead. To do this, you need to register
+any custom C++ types and create a plugin that registers the custom types
+so that they can be used from your QML file.
+
+Here is an example. Suppose you have two classes, \c RedSquare and \c BlueCircle,
+that both inherit from QGraphicsWidget. First, you need to register these two types
+using the \c QML_DECLARE_TYPE macro from \c <QtDeclarative/qdeclarative.h>, like this:
+
+\c [graphicswidgets/redsquare.h]
+\snippet doc/src/declarative/snippets/integrating/graphicswidgets/redsquare.h 0
+
+\c [graphicswidgets/bluecircle.h]
+\snippet doc/src/declarative/snippets/integrating/graphicswidgets/bluecircle.h 0
+
+Then, create a plugin by subclassing QDeclarativeExtensionPlugin, and register the
+types by calling qmlRegisterType(). Also export the plugin with Q_EXPORT_PLUGIN2.
+
+\c [graphicswidgets/shapesplugin.cpp]
+\snippet doc/src/declarative/snippets/integrating/graphicswidgets/shapesplugin.cpp 0
+
+Now write a project file that creates the plugin:
+
+\c [graphicswidgets/graphicswidgets.pro]
+\quotefile doc/src/declarative/snippets/integrating/graphicswidgets/graphicswidgets.pro
+
+And add a \c qmldir file that includes the \c graphicswidgets plugin from the \c lib
+subdirectory (as defined in the project file):
+
+\c [graphicswidgets/qmldir]
+\quotefile doc/src/declarative/snippets/integrating/graphicswidgets/qmldir
+
+Now, we can write a QML file that uses the \c RedSquare and \c BlueCircle widgets.
+(As an example, we can also create \c QGraphicsWidget items if we import the \c Qt.widgets
+module.)
+
+\c [main.qml]
+\quotefile doc/src/declarative/snippets/integrating/graphicswidgets/main.qml
+
+Here is a screenshot of the result:
+
+\image declarative-integrating-graphicswidgets.png
+
+
+Note this approach of creating your graphics widgets from QML does not work
+with QGraphicsItem objects that are not QGraphicsWidget-based, since they are not QObjects.
+
+See \l{Extending QML in C++} for further information on using C++ types.
+
*/
diff --git a/doc/src/declarative/qmlruntime.qdoc b/doc/src/declarative/qmlruntime.qdoc
index fbe82c6..9f7183a 100644
--- a/doc/src/declarative/qmlruntime.qdoc
+++ b/doc/src/declarative/qmlruntime.qdoc
@@ -164,7 +164,7 @@
The runtime.isActiveWindow property tells whether the main window of the qml runtime is currently active
or not. This is specially useful for embedded devices when you want to pause parts of your application,
- including animations, when your application looses focus or goes to the background.
+ including animations, when your application loses focus or goes to the background.
The example below, stops the animation when the application's window is deactivated and resumes on activation:
diff --git a/doc/src/declarative/snippets/integrating/graphicswidgets/bluecircle.h b/doc/src/declarative/snippets/integrating/graphicswidgets/bluecircle.h
new file mode 100644
index 0000000..028718f
--- /dev/null
+++ b/doc/src/declarative/snippets/integrating/graphicswidgets/bluecircle.h
@@ -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:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt 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]
+#include <QtDeclarative/qdeclarative.h>
+#include <QGraphicsWidget>
+#include <QPainter>
+
+class BlueCircle : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+ {
+ painter->setPen(QColor(Qt::blue));
+ painter->drawEllipse(0, 0, size().width(), size().height());
+ }
+};
+
+QML_DECLARE_TYPE(BlueCircle)
+//![0]
diff --git a/doc/src/declarative/snippets/integrating/graphicswidgets/graphicswidgets.pro b/doc/src/declarative/snippets/integrating/graphicswidgets/graphicswidgets.pro
new file mode 100644
index 0000000..21c8a37
--- /dev/null
+++ b/doc/src/declarative/snippets/integrating/graphicswidgets/graphicswidgets.pro
@@ -0,0 +1,13 @@
+TEMPLATE = lib
+CONFIG += qt plugin
+QT += declarative
+
+HEADERS += redsquare.h \
+ bluecircle.h
+
+SOURCES += shapesplugin.cpp
+
+DESTDIR = lib
+OBJECTS_DIR = tmp
+MOC_DIR = tmp
+
diff --git a/doc/src/declarative/snippets/integrating/graphicswidgets/main.qml b/doc/src/declarative/snippets/integrating/graphicswidgets/main.qml
new file mode 100644
index 0000000..ffcf79d
--- /dev/null
+++ b/doc/src/declarative/snippets/integrating/graphicswidgets/main.qml
@@ -0,0 +1,32 @@
+import Qt 4.7
+import Qt.widgets 4.7
+
+Rectangle {
+ width: 200
+ height: 200
+
+ RedSquare {
+ id: square
+ width: 80
+ height: 80
+ }
+
+ BlueCircle {
+ anchors.left: square.right
+ width: 80
+ height: 80
+ }
+
+ QGraphicsWidget {
+ anchors.top: square.bottom
+ size.width: 80
+ size.height: 80
+ layout: QGraphicsLinearLayout {
+ LayoutItem {
+ preferredSize: "100x100"
+ Rectangle { color: "yellow"; anchors.fill: parent }
+ }
+ }
+ }
+}
+
diff --git a/doc/src/declarative/snippets/integrating/graphicswidgets/qmldir b/doc/src/declarative/snippets/integrating/graphicswidgets/qmldir
new file mode 100644
index 0000000..f94dad2
--- /dev/null
+++ b/doc/src/declarative/snippets/integrating/graphicswidgets/qmldir
@@ -0,0 +1 @@
+plugin graphicswidgets lib
diff --git a/doc/src/declarative/snippets/integrating/graphicswidgets/redsquare.h b/doc/src/declarative/snippets/integrating/graphicswidgets/redsquare.h
new file mode 100644
index 0000000..76e7d11
--- /dev/null
+++ b/doc/src/declarative/snippets/integrating/graphicswidgets/redsquare.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:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt 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]
+#include <QtDeclarative/qdeclarative.h>
+#include <QGraphicsWidget>
+#include <QPainter>
+
+class RedSquare : public QGraphicsWidget
+{
+ Q_OBJECT
+public:
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *, QWidget *)
+ {
+ painter->fillRect(0, 0, size().width(), size().height(), QColor(Qt::red));
+ }
+};
+
+QML_DECLARE_TYPE(RedSquare)
+//![0]
diff --git a/doc/src/declarative/snippets/integrating/graphicswidgets/shapesplugin.cpp b/doc/src/declarative/snippets/integrating/graphicswidgets/shapesplugin.cpp
new file mode 100644
index 0000000..4c18ef3
--- /dev/null
+++ b/doc/src/declarative/snippets/integrating/graphicswidgets/shapesplugin.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:LGPL$
+** No Commercial Usage
+** This file contains pre-release code and may not be distributed.
+** You may use this file in accordance with the terms and conditions
+** contained in the Technology Preview License Agreement accompanying
+** this package.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt 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]
+#include "redsquare.h"
+#include "bluecircle.h"
+
+#include <QtDeclarative/QDeclarativeExtensionPlugin>
+#include <QtDeclarative/qdeclarative.h>
+
+class ShapesPlugin : public QDeclarativeExtensionPlugin
+{
+ Q_OBJECT
+public:
+ void registerTypes(const char *uri) {
+ qmlRegisterType<RedSquare>(uri, 1, 0, "RedSquare");
+ qmlRegisterType<BlueCircle>(uri, 1, 0, "BlueCircle");
+ }
+};
+
+#include "shapesplugin.moc"
+
+Q_EXPORT_PLUGIN2(shapesplugin, ShapesPlugin);
+//![0]
diff --git a/doc/src/images/declarative-integrating-graphicswidgets.png b/doc/src/images/declarative-integrating-graphicswidgets.png
new file mode 100644
index 0000000..d57f4b9
--- /dev/null
+++ b/doc/src/images/declarative-integrating-graphicswidgets.png
Binary files differ
diff --git a/doc/src/images/declarative-samegame.png b/doc/src/images/declarative-samegame.png
new file mode 100644
index 0000000..2232df2
--- /dev/null
+++ b/doc/src/images/declarative-samegame.png
Binary files differ
diff --git a/doc/src/snippets/code/src_corelib_kernel_qobject.cpp b/doc/src/snippets/code/src_corelib_kernel_qobject.cpp
index 2d86f8c..77c67ab 100644
--- a/doc/src/snippets/code/src_corelib_kernel_qobject.cpp
+++ b/doc/src/snippets/code/src_corelib_kernel_qobject.cpp
@@ -374,10 +374,13 @@ Q_PROPERTY(type name
READ getFunction
[WRITE setFunction]
[RESET resetFunction]
+ [NOTIFY notifySignal]
[DESIGNABLE bool]
[SCRIPTABLE bool]
[STORED bool]
- [USER bool])
+ [USER bool]
+ [CONSTANT]
+ [FINAL])
//! [36]
diff --git a/examples/declarative/fonts/fonts.qml b/examples/declarative/fonts/fonts.qml
index 97dd645..ae31b03 100644
--- a/examples/declarative/fonts/fonts.qml
+++ b/examples/declarative/fonts/fonts.qml
@@ -7,7 +7,7 @@ Rectangle {
color: "steelblue"
FontLoader { id: fixedFont; name: "Courier" }
- FontLoader { id: localFont; source: "fonts/tarzenau-ocr-a.ttf" }
+ FontLoader { id: localFont; source: "fonts/tarzeau_ocr_a.ttf" }
FontLoader { id: webFont; source: "http://www.princexml.com/fonts/steffmann/Starburst.ttf" }
Column {
@@ -19,7 +19,7 @@ Rectangle {
color: "lightsteelblue"
width: parent.width
elide: Text.ElideRight
- font.family: "Times"; font.pointSize: 42
+ font.family: "Times"; font.pointSize: 42
}
Text {
text: myText
diff --git a/examples/script/script.pro b/examples/script/script.pro
index 9d9d524..a95ad13 100644
--- a/examples/script/script.pro
+++ b/examples/script/script.pro
@@ -3,7 +3,7 @@ SUBDIRS = customclass
!contains(QT_CONFIG, no-gui):SUBDIRS += helloscript context2d defaultprototypes
!wince*:!contains(QT_CONFIG, no-gui):SUBDIRS += qscript marshal
-!wince*:SUBDIRS += marshal
+!wince*:SUBDIRS *= marshal
!wince*:!cross_compile:!contains(QT_CONFIG, no-gui):SUBDIRS += calculator qstetrix
symbian: SUBDIRS = context2d
diff --git a/qmake/generators/symbian/symbiancommon.cpp b/qmake/generators/symbian/symbiancommon.cpp
index 0df2d15..0802c01 100644
--- a/qmake/generators/symbian/symbiancommon.cpp
+++ b/qmake/generators/symbian/symbiancommon.cpp
@@ -362,8 +362,10 @@ void SymbianCommonGenerator::generatePkgFile(const QString &iconFile, bool epocB
// deploy any additional DEPLOYMENT files
QString remoteTestPath;
+ QString zDir;
remoteTestPath = QString("!:\\private\\%1").arg(privateDirUid);
- QString zDir = epocRoot() + QLatin1String("epoc32/data/z");
+ if (epocBuild)
+ zDir = epocRoot() + QLatin1String("epoc32/data/z");
DeploymentList depList;
initProjectDeploySymbian(project, depList, remoteTestPath, true, epocBuild, "$(PLATFORM)", "$(TARGET)", generatedDirs, generatedFiles);
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 411f22e..c13d829 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -125,8 +125,8 @@ extern "C" Q_CORE_EXPORT void qt_removeObject(QObject *)
}
}
-void (*QDeclarativeData::destroyed)(QDeclarativeData *, QObject *) = 0;
-void (*QDeclarativeData::parentChanged)(QDeclarativeData *, QObject *, QObject *) = 0;
+void (*QAbstractDeclarativeData::destroyed)(QAbstractDeclarativeData *, QObject *) = 0;
+void (*QAbstractDeclarativeData::parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *) = 0;
QObjectData::~QObjectData() {}
@@ -878,7 +878,7 @@ QObject::~QObject()
}
if (d->declarativeData)
- QDeclarativeData::destroyed(d->declarativeData, this);
+ QAbstractDeclarativeData::destroyed(d->declarativeData, this);
{
QMutex *signalSlotMutex = 0;
@@ -2027,7 +2027,7 @@ void QObjectPrivate::setParent_helper(QObject *o)
}
}
if (!wasDeleted && declarativeData)
- QDeclarativeData::parentChanged(declarativeData, q, o);
+ QAbstractDeclarativeData::parentChanged(declarativeData, q, o);
}
/*!
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index e5d904c..341b3e9 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -84,11 +84,11 @@ extern QSignalSpyCallbackSet Q_CORE_EXPORT qt_signal_spy_callback_set;
enum { QObjectPrivateVersion = QT_VERSION };
-class Q_CORE_EXPORT QDeclarativeData
+class Q_CORE_EXPORT QAbstractDeclarativeData
{
public:
- static void (*destroyed)(QDeclarativeData *, QObject *);
- static void (*parentChanged)(QDeclarativeData *, QObject *, QObject *);
+ static void (*destroyed)(QAbstractDeclarativeData *, QObject *);
+ static void (*parentChanged)(QAbstractDeclarativeData *, QObject *, QObject *);
};
class Q_CORE_EXPORT QObjectPrivate : public QObjectData
@@ -194,7 +194,7 @@ public:
QList<QPointer<QObject> > eventFilters;
union {
QObject *currentChildBeingDeleted;
- QDeclarativeData *declarativeData; //extra data used by the DeclarativeUI project.
+ QAbstractDeclarativeData *declarativeData; //extra data used by the declarative module
};
// these objects are all used to indicate that a QObject was deleted
diff --git a/src/corelib/thread/qthread.cpp b/src/corelib/thread/qthread.cpp
index cdcb65c..2c63dfc 100644
--- a/src/corelib/thread/qthread.cpp
+++ b/src/corelib/thread/qthread.cpp
@@ -173,7 +173,7 @@ void QAdoptedThread::run()
*/
QThreadPrivate::QThreadPrivate(QThreadData *d)
- : QObjectPrivate(), running(false), finished(false), terminated(false),
+ : QObjectPrivate(), running(false), finished(false), terminated(false), exited(false), returnCode(-1),
stackSize(0), priority(QThread::InheritPriority), data(d)
{
#if defined (Q_OS_UNIX)
@@ -480,11 +480,18 @@ uint QThread::stackSize() const
int QThread::exec()
{
Q_D(QThread);
+ QMutexLocker locker(&d->mutex);
+ d->data->quitNow = false;
+ if (d->exited)
+ return d->returnCode;
+ locker.unlock();
+
QEventLoop eventLoop;
int returnCode = eventLoop.exec();
- QMutexLocker locker(&d->mutex);
- d->data->quitNow = false;
+ locker.relock();
+ d->exited = false;
+ d->returnCode = -1;
return returnCode;
}
@@ -511,6 +518,8 @@ void QThread::exit(int returnCode)
{
Q_D(QThread);
QMutexLocker locker(&d->mutex);
+ d->exited = true;
+ d->returnCode = returnCode;
d->data->quitNow = true;
for (int i = 0; i < d->data->eventLoops.size(); ++i) {
QEventLoop *eventLoop = d->data->eventLoops.at(i);
diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h
index 44eb8f8..d816aef 100644
--- a/src/corelib/thread/qthread_p.h
+++ b/src/corelib/thread/qthread_p.h
@@ -127,6 +127,9 @@ public:
bool finished;
bool terminated;
+ bool exited;
+ int returnCode;
+
uint stackSize;
QThread::Priority priority;
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index bd31d9c..6b34b5f 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -253,6 +253,7 @@ void *QThreadPrivate::start(void *arg)
pthread_setspecific(current_thread_data_key, data);
data->ref();
+ data->quitNow = false;
// ### TODO: allow the user to create a custom event dispatcher
createEventDispatcher(data);
@@ -494,7 +495,6 @@ void QThread::start(Priority priority)
d->running = true;
d->finished = false;
d->terminated = false;
- d->data->quitNow = false;
pthread_attr_t attr;
pthread_attr_init(&attr);
diff --git a/src/corelib/thread/qthread_win.cpp b/src/corelib/thread/qthread_win.cpp
index 9826dcb..37d5b87 100644
--- a/src/corelib/thread/qthread_win.cpp
+++ b/src/corelib/thread/qthread_win.cpp
@@ -298,6 +298,7 @@ unsigned int __stdcall QThreadPrivate::start(void *arg)
QThread::setTerminationEnabled(false);
+ data->quitNow = false;
// ### TODO: allow the user to create a custom event dispatcher
createEventDispatcher(data);
@@ -404,7 +405,6 @@ void QThread::start(Priority priority)
d->running = true;
d->finished = false;
d->terminated = false;
- d->data->quitNow = false;
/*
NOTE: we create the thread in the suspended state, set the
diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp
index 9c65d5d..8fab963 100644
--- a/src/corelib/tools/qeasingcurve.cpp
+++ b/src/corelib/tools/qeasingcurve.cpp
@@ -304,6 +304,10 @@
#include <QtCore/qstring.h>
#endif
+#ifndef QT_NO_DATASTREAM
+#include <QtCore/qdatastream.h>
+#endif
+
QT_BEGIN_NAMESPACE
static bool isConfigFunction(QEasingCurve::Type type)
diff --git a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
index 420ed90..be9d8bd 100644
--- a/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeborderimage.cpp
@@ -43,6 +43,7 @@
#include "private/qdeclarativeborderimage_p_p.h"
#include <qdeclarativeengine.h>
+#include <qdeclarativeinfo.h>
#include <QNetworkRequest>
#include <QNetworkReply>
@@ -218,7 +219,8 @@ void QDeclarativeBorderImage::load()
}
} else {
QSize impsize;
- QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async);
+ QString errorString;
+ QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async);
if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) {
QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url);
d->pendingPixmapCache = true;
@@ -230,8 +232,10 @@ void QDeclarativeBorderImage::load()
setImplicitWidth(impsize.width());
setImplicitHeight(impsize.height());
- if (d->pix.isNull())
+ if (d->pix.isNull()) {
d->status = Error;
+ qmlInfo(this) << errorString;
+ }
if (d->status == Loading)
d->status = Ready;
d->progress = 1.0;
@@ -338,7 +342,8 @@ void QDeclarativeBorderImage::setGridScaledImage(const QDeclarativeGridScaledIma
d->sciurl = d->url.resolved(QUrl(sci.pixmapUrl()));
QSize impsize;
- QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->sciurl, &d->pix, &impsize, d->async);
+ QString errorString;
+ QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->sciurl, &d->pix, &errorString, &impsize, d->async);
if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) {
QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->sciurl);
d->sciPendingPixmapCache = true;
@@ -367,8 +372,10 @@ void QDeclarativeBorderImage::setGridScaledImage(const QDeclarativeGridScaledIma
setImplicitWidth(impsize.width());
setImplicitHeight(impsize.height());
- if (d->pix.isNull())
+ if (d->pix.isNull()) {
d->status = Error;
+ qmlInfo(this) << errorString;
+ }
if (d->status == Loading)
d->status = Ready;
d->progress = 1.0;
@@ -386,11 +393,18 @@ void QDeclarativeBorderImage::requestFinished()
QSize impsize;
if (d->url.path().endsWith(QLatin1String(".sci"))) {
d->sciPendingPixmapCache = false;
- QDeclarativePixmapCache::get(d->sciurl, &d->pix, &impsize, d->async);
+ QString errorString;
+ if (QDeclarativePixmapCache::get(d->sciurl, &d->pix, &errorString, &impsize, d->async) != QDeclarativePixmapReply::Ready) {
+ d->status = Error;
+ qmlInfo(this) << errorString;
+ }
} else {
d->pendingPixmapCache = false;
- if (QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async) != QDeclarativePixmapReply::Ready)
+ QString errorString;
+ if (QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async) != QDeclarativePixmapReply::Ready) {
d->status = Error;
+ qmlInfo(this) << errorString;
+ }
}
setImplicitWidth(impsize.width());
setImplicitHeight(impsize.height());
diff --git a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
index 3acafe8..c3f8195 100644
--- a/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
+++ b/src/declarative/graphicsitems/qdeclarativeimagebase.cpp
@@ -43,6 +43,7 @@
#include "private/qdeclarativeimagebase_p_p.h"
#include <qdeclarativeengine.h>
+#include <qdeclarativeinfo.h>
#include <qdeclarativepixmapcache_p.h>
#include <QFile>
@@ -154,7 +155,8 @@ void QDeclarativeImageBase::load()
int reqwidth = d->sourcesize.width();
int reqheight = d->sourcesize.height();
QSize impsize;
- QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async, reqwidth, reqheight);
+ QString errorString;
+ QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async, reqwidth, reqheight);
if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) {
QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url, reqwidth, reqheight);
d->pendingPixmapCache = true;
@@ -191,6 +193,7 @@ void QDeclarativeImageBase::load()
emit sourceSizeChanged();
} else {
d->status = Error;
+ qmlInfo(this) << errorString;
}
d->progress = 1.0;
emit statusChanged(d->status);
@@ -210,8 +213,11 @@ void QDeclarativeImageBase::requestFinished()
d->pendingPixmapCache = false;
QSize impsize;
- if (QDeclarativePixmapCache::get(d->url, &d->pix, &impsize, d->async, d->sourcesize.width(), d->sourcesize.height()) != QDeclarativePixmapReply::Ready)
+ QString errorString;
+ if (QDeclarativePixmapCache::get(d->url, &d->pix, &errorString, &impsize, d->async, d->sourcesize.width(), d->sourcesize.height()) != QDeclarativePixmapReply::Ready) {
d->status = Error;
+ qmlInfo(this) << errorString;
+ }
setImplicitWidth(impsize.width());
setImplicitHeight(impsize.height());
diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp
index cf7b96f..307c0a7 100644
--- a/src/declarative/graphicsitems/qdeclarativelistview.cpp
+++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp
@@ -521,7 +521,6 @@ void QDeclarativeListViewPrivate::clear()
trackedItem = 0;
minExtentDirty = true;
maxExtentDirty = true;
- setPosition(0);
itemCount = 0;
}
@@ -708,6 +707,7 @@ void QDeclarativeListViewPrivate::layout()
layoutScheduled = false;
if (!isValid()) {
clear();
+ setPosition(0);
return;
}
updateSections();
@@ -1416,6 +1416,7 @@ void QDeclarativeListView::setModel(const QVariant &model)
disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*)));
}
d->clear();
+ d->setPosition(0);
d->modelVariant = model;
QObject *object = qvariant_cast<QObject*>(model);
QDeclarativeVisualModel *vim = 0;
@@ -1770,6 +1771,7 @@ void QDeclarativeListView::setOrientation(QDeclarativeListView::Orientation orie
setFlickDirection(HorizontalFlick);
}
d->clear();
+ d->setPosition(0);
refill();
emit orientationChanged();
d->updateCurrent(d->currentIndex);
@@ -2791,6 +2793,7 @@ void QDeclarativeListView::modelReset()
{
Q_D(QDeclarativeListView);
d->clear();
+ d->setPosition(0);
refill();
d->moveReason = QDeclarativeListViewPrivate::SetIndex;
d->updateCurrent(d->currentIndex);
diff --git a/src/declarative/graphicsitems/qdeclarativepositioners.cpp b/src/declarative/graphicsitems/qdeclarativepositioners.cpp
index f436471..21c33e2 100644
--- a/src/declarative/graphicsitems/qdeclarativepositioners.cpp
+++ b/src/declarative/graphicsitems/qdeclarativepositioners.cpp
@@ -656,10 +656,8 @@ Grid {
*/
QDeclarativeGrid::QDeclarativeGrid(QDeclarativeItem *parent) :
- QDeclarativeBasePositioner(Both, parent)
+ QDeclarativeBasePositioner(Both, parent), m_rows(-1), m_columns(-1), m_flow(LeftToRight)
{
- _columns=-1;
- _rows=-1;
}
/*!
@@ -682,55 +680,101 @@ QDeclarativeGrid::QDeclarativeGrid(QDeclarativeItem *parent) :
void QDeclarativeGrid::setColumns(const int columns)
{
- if (columns == _columns)
+ if (columns == m_columns)
return;
- _columns = columns;
+ m_columns = columns;
prePositioning();
emit columnsChanged();
}
void QDeclarativeGrid::setRows(const int rows)
{
- if (rows == _rows)
+ if (rows == m_rows)
return;
- _rows = rows;
+ m_rows = rows;
prePositioning();
emit rowsChanged();
}
+/*!
+ \qmlproperty enumeration Flow::flow
+ This property holds the flow of the layout.
+
+ Possible values are \c LeftToRight (default) and \c TopToBottom.
+
+ If \a flow is \c LeftToRight, the items are positioned next to
+ to each other from left to right, then wrapped to the next line.
+ If \a flow is \c TopToBottom, the items are positioned next to each
+ other from top to bottom, then wrapped to the next column.
+*/
+QDeclarativeGrid::Flow QDeclarativeGrid::flow() const
+{
+ return m_flow;
+}
+
+void QDeclarativeGrid::setFlow(Flow flow)
+{
+ if (m_flow != flow) {
+ m_flow = flow;
+ prePositioning();
+ emit flowChanged();
+ }
+}
+
void QDeclarativeGrid::doPositioning(QSizeF *contentSize)
{
- int c = _columns;
- int r = _rows;
+ int c = m_columns;
+ int r = m_rows;
int numVisible = positionedItems.count();
- if (_columns <= 0 && _rows <= 0){
+ if (m_columns <= 0 && m_rows <= 0){
c = 4;
r = (numVisible+3)/4;
- } else if (_rows <= 0){
- r = (numVisible+(_columns-1))/_columns;
- } else if (_columns <= 0){
- c = (numVisible+(_rows-1))/_rows;
+ } else if (m_rows <= 0){
+ r = (numVisible+(m_columns-1))/m_columns;
+ } else if (m_columns <= 0){
+ c = (numVisible+(m_rows-1))/m_rows;
}
QList<int> maxColWidth;
QList<int> maxRowHeight;
int childIndex =0;
- for (int i=0; i<r; i++){
- for (int j=0; j<c; j++){
- if (j==0)
- maxRowHeight << 0;
- if (i==0)
- maxColWidth << 0;
-
- if (childIndex == positionedItems.count())
- continue;
- const PositionedItem &child = positionedItems.at(childIndex++);
- if (!child.item || isInvisible(child.item))
- continue;
- if (child.item->width() > maxColWidth[j])
- maxColWidth[j] = child.item->width();
- if (child.item->height() > maxRowHeight[i])
- maxRowHeight[i] = child.item->height();
+ if (m_flow == LeftToRight) {
+ for (int i=0; i < r; i++){
+ for (int j=0; j < c; j++){
+ if (j==0)
+ maxRowHeight << 0;
+ if (i==0)
+ maxColWidth << 0;
+
+ if (childIndex == positionedItems.count())
+ continue;
+ const PositionedItem &child = positionedItems.at(childIndex++);
+ if (!child.item || isInvisible(child.item))
+ continue;
+ if (child.item->width() > maxColWidth[j])
+ maxColWidth[j] = child.item->width();
+ if (child.item->height() > maxRowHeight[i])
+ maxRowHeight[i] = child.item->height();
+ }
+ }
+ } else {
+ for (int j=0; j < c; j++){
+ for (int i=0; i < r; i++){
+ if (j==0)
+ maxRowHeight << 0;
+ if (i==0)
+ maxColWidth << 0;
+
+ if (childIndex == positionedItems.count())
+ continue;
+ const PositionedItem &child = positionedItems.at(childIndex++);
+ if (!child.item || isInvisible(child.item))
+ continue;
+ if (child.item->width() > maxColWidth[j])
+ maxColWidth[j] = child.item->width();
+ if (child.item->height() > maxRowHeight[i])
+ maxRowHeight[i] = child.item->height();
+ }
}
}
@@ -747,18 +791,34 @@ void QDeclarativeGrid::doPositioning(QSizeF *contentSize)
positionY(yoffset, child);
}
- contentSize->setWidth(qMax(contentSize->width(), xoffset + child.item->width()));
- contentSize->setHeight(yoffset + maxRowHeight[curRow]);
+ if (m_flow == LeftToRight) {
+ contentSize->setWidth(qMax(contentSize->width(), xoffset + child.item->width()));
+ contentSize->setHeight(yoffset + maxRowHeight[curRow]);
+
+ xoffset+=maxColWidth[curCol]+spacing();
+ curCol++;
+ curCol%=c;
+ if (!curCol){
+ yoffset+=maxRowHeight[curRow]+spacing();
+ xoffset=0;
+ curRow++;
+ if (curRow>=r)
+ break;
+ }
+ } else {
+ contentSize->setHeight(qMax(contentSize->height(), yoffset + child.item->height()));
+ contentSize->setWidth(xoffset + maxColWidth[curCol]);
- xoffset+=maxColWidth[curCol]+spacing();
- curCol++;
- curCol%=c;
- if (!curCol){
yoffset+=maxRowHeight[curRow]+spacing();
- xoffset=0;
curRow++;
- if (curRow>=r)
- break;
+ curRow%=r;
+ if (!curRow){
+ xoffset+=maxColWidth[curCol]+spacing();
+ yoffset=0;
+ curCol++;
+ if (curCol>=c)
+ break;
+ }
}
}
}
diff --git a/src/declarative/graphicsitems/qdeclarativepositioners_p.h b/src/declarative/graphicsitems/qdeclarativepositioners_p.h
index c4414d1..24b65fa 100644
--- a/src/declarative/graphicsitems/qdeclarativepositioners_p.h
+++ b/src/declarative/graphicsitems/qdeclarativepositioners_p.h
@@ -138,25 +138,34 @@ class Q_DECLARATIVE_EXPORT QDeclarativeGrid : public QDeclarativeBasePositioner
Q_OBJECT
Q_PROPERTY(int rows READ rows WRITE setRows NOTIFY rowChanged)
Q_PROPERTY(int columns READ columns WRITE setColumns NOTIFY columnsChanged)
+ Q_PROPERTY(Flow flow READ flow WRITE setFlow NOTIFY flowChanged)
+
public:
QDeclarativeGrid(QDeclarativeItem *parent=0);
- int rows() const {return _rows;}
+ int rows() const {return m_rows;}
void setRows(const int rows);
- int columns() const {return _columns;}
+ int columns() const {return m_columns;}
void setColumns(const int columns);
+ Q_ENUMS(Flow)
+ enum Flow { LeftToRight, TopToBottom };
+ Flow flow() const;
+ void setFlow(Flow);
+
Q_SIGNALS:
void rowsChanged();
void columnsChanged();
+ void flowChanged();
protected:
virtual void doPositioning(QSizeF *contentSize);
private:
- int _rows;
- int _columns;
+ int m_rows;
+ int m_columns;
+ Flow m_flow;
Q_DISABLE_COPY(QDeclarativeGrid)
};
diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp
index b65212b..a95c930 100644
--- a/src/declarative/graphicsitems/qdeclarativetext.cpp
+++ b/src/declarative/graphicsitems/qdeclarativetext.cpp
@@ -43,7 +43,9 @@
#include "private/qdeclarativetext_p_p.h"
#include <qdeclarativestyledtext_p.h>
#include <qdeclarativeinfo.h>
+#include <qdeclarativepixmapcache_p.h>
+#include <QSet>
#include <QTextLayout>
#include <QTextLine>
#include <QTextDocument>
@@ -55,6 +57,59 @@
QT_BEGIN_NAMESPACE
+class QTextDocumentWithImageResources : public QTextDocument {
+ Q_OBJECT
+
+public:
+ QTextDocumentWithImageResources(QDeclarativeText *parent) :
+ QTextDocument(parent),
+ outstanding(0)
+ {
+ }
+
+ int resourcesLoading() const { return outstanding; }
+
+protected:
+ QVariant loadResource(int type, const QUrl &name)
+ {
+ QUrl url = qmlContext(parent())->resolvedUrl(name);
+
+ if (type == QTextDocument::ImageResource) {
+ QPixmap pm;
+ QString errorString;
+ QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(url, &pm, &errorString, 0, false, 0, 0);
+ if (status == QDeclarativePixmapReply::Ready)
+ return pm;
+ if (status == QDeclarativePixmapReply::Error) {
+ if (!errors.contains(url)) {
+ errors.insert(url);
+ qmlInfo(parent()) << errorString;
+ }
+ } else {
+ QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(parent()), url);
+ connect(reply, SIGNAL(finished()), this, SLOT(requestFinished()));
+ outstanding++;
+ }
+ }
+
+ return QTextDocument::loadResource(type,url); // The *resolved* URL
+ }
+
+private slots:
+ void requestFinished()
+ {
+ outstanding--;
+ if (outstanding == 0)
+ static_cast<QDeclarativeText*>(parent())->reloadWithResources();
+ }
+
+private:
+ int outstanding;
+ static QSet<QUrl> errors;
+};
+
+QSet<QUrl> QTextDocumentWithImageResources::errors;
+
/*!
\qmlclass Text QDeclarativeText
\since 4.7
@@ -77,6 +132,9 @@ QT_BEGIN_NAMESPACE
The \c elide property can alternatively be used to fit a single line of
plain text to a set width.
+ Note that the \l{Supported HTML Subset} is limited, and that if IMG tags
+ load remote images, the text reloads (see resourcesLoading).
+
Text provides read-only text. For editable text, see \l TextEdit.
*/
@@ -259,11 +317,10 @@ void QDeclarativeText::setText(const QString &n)
d->richText = d->format == RichText || (d->format == AutoText && Qt::mightBeRichText(n));
if (d->richText) {
- if (!d->doc) {
- d->doc = new QTextDocument(this);
- d->doc->setDocumentMargin(0);
+ if (isComponentComplete()) {
+ d->ensureDoc();
+ d->doc->setHtml(n);
}
- d->doc->setHtml(n);
}
d->text = n;
@@ -550,11 +607,10 @@ void QDeclarativeText::setTextFormat(TextFormat format)
d->updateLayout();
d->markImgDirty();
} else if (!wasRich && d->richText) {
- if (!d->doc) {
- d->doc = new QTextDocument(this);
- d->doc->setDocumentMargin(0);
+ if (isComponentComplete()) {
+ d->ensureDoc();
+ d->doc->setHtml(d->text);
}
- d->doc->setHtml(d->text);
d->updateLayout();
d->markImgDirty();
}
@@ -677,7 +733,7 @@ void QDeclarativeTextPrivate::updateSize()
QTextOption option((Qt::Alignment)int(hAlign | vAlign));
option.setWrapMode(QTextOption::WrapMode(wrapMode));
doc->setDefaultTextOption(option);
- if (wrapMode != QDeclarativeText::NoWrap && !q->heightValid() && q->widthValid())
+ 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)
@@ -898,6 +954,34 @@ void QDeclarativeTextPrivate::checkImgCache()
imgDirty = false;
}
+void QDeclarativeTextPrivate::ensureDoc()
+{
+ if (!doc) {
+ Q_Q(QDeclarativeText);
+ doc = new QTextDocumentWithImageResources(q);
+ doc->setDocumentMargin(0);
+ }
+}
+
+void QDeclarativeText::reloadWithResources()
+{
+ Q_D(QDeclarativeText);
+ if (!d->richText)
+ return;
+ d->doc->setHtml(d->text);
+ d->updateLayout();
+ d->markImgDirty();
+}
+
+/*!
+ Returns the number of resources (images) that are being loaded asynchronously.
+*/
+int QDeclarativeText::resourcesLoading() const
+{
+ Q_D(const QDeclarativeText);
+ return d->doc ? d->doc->resourcesLoading() : 0;
+}
+
void QDeclarativeText::paint(QPainter *p, const QStyleOptionGraphicsItem *, QWidget *)
{
Q_D(QDeclarativeText);
@@ -1011,6 +1095,10 @@ void QDeclarativeText::componentComplete()
Q_D(QDeclarativeText);
QDeclarativeItem::componentComplete();
if (d->dirty) {
+ if (d->richText) {
+ d->ensureDoc();
+ d->doc->setHtml(d->text);
+ }
d->updateLayout();
d->dirty = false;
}
@@ -1061,4 +1149,7 @@ void QDeclarativeText::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
if (!event->isAccepted())
QDeclarativeItem::mouseReleaseEvent(event);
}
+
QT_END_NAMESPACE
+
+#include "qdeclarativetext.moc"
diff --git a/src/declarative/graphicsitems/qdeclarativetext_p.h b/src/declarative/graphicsitems/qdeclarativetext_p.h
index 871c833..4fd5e3a 100644
--- a/src/declarative/graphicsitems/qdeclarativetext_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetext_p.h
@@ -138,6 +138,8 @@ public:
virtual void componentComplete();
+ int resourcesLoading() const; // mainly for testing
+
Q_SIGNALS:
void textChanged(const QString &text);
void linkActivated(const QString &link);
@@ -160,6 +162,9 @@ protected:
private:
Q_DISABLE_COPY(QDeclarativeText)
Q_DECLARE_PRIVATE_D(QGraphicsItem::d_ptr.data(), QDeclarativeText)
+
+ friend class QTextDocumentWithImageResources;
+ void reloadWithResources();
};
QT_END_NAMESPACE
diff --git a/src/declarative/graphicsitems/qdeclarativetext_p_p.h b/src/declarative/graphicsitems/qdeclarativetext_p_p.h
index cc5a9f2..332f99e 100644
--- a/src/declarative/graphicsitems/qdeclarativetext_p_p.h
+++ b/src/declarative/graphicsitems/qdeclarativetext_p_p.h
@@ -63,7 +63,7 @@
QT_BEGIN_NAMESPACE
class QTextLayout;
-class QTextDocument;
+class QTextDocumentWithImageResources;
class QDeclarativeTextPrivate : public QDeclarativeItemPrivate
{
@@ -84,6 +84,7 @@ public:
~QDeclarativeTextPrivate();
+ void ensureDoc();
void updateSize();
void updateLayout();
void markImgDirty() {
@@ -118,7 +119,7 @@ public:
bool richText:1;
bool singleline:1;
bool cache:1;
- QTextDocument *doc;
+ QTextDocumentWithImageResources *doc;
QTextLayout layout;
QSize cachedLayoutSize;
QDeclarativeText::TextFormat format;
diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
index 03e4703..751284d 100644
--- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
+++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp
@@ -50,7 +50,7 @@
#include <qdeclarativeopenmetaobject_p.h>
#include <qdeclarativelistaccessor_p.h>
#include <qdeclarativeinfo.h>
-#include <qdeclarativedeclarativedata_p.h>
+#include <qdeclarativedata_p.h>
#include <qdeclarativepropertycache_p.h>
#include <qdeclarativeguard_p.h>
#include <qdeclarativeglobal_p.h>
@@ -353,6 +353,7 @@ public:
friend class QDeclarativeVisualDataModelData;
bool m_metaDataCreated;
bool m_metaDataCacheable;
+ bool m_delegateValidated;
QDeclarativeVisualDataModelData *data(QObject *item);
@@ -560,7 +561,7 @@ QDeclarativeVisualDataModelParts::QDeclarativeVisualDataModelParts(QDeclarativeV
QDeclarativeVisualDataModelPrivate::QDeclarativeVisualDataModelPrivate(QDeclarativeContext *ctxt)
: m_listModelInterface(0), m_abstractItemModel(0), m_visualItemModel(0), m_delegate(0)
, m_context(ctxt), m_parts(0), m_delegateDataType(0), m_metaDataCreated(false)
-, m_metaDataCacheable(false), m_listAccessor(0)
+, m_metaDataCacheable(false), m_delegateValidated(false), m_listAccessor(0)
{
}
@@ -768,6 +769,7 @@ void QDeclarativeVisualDataModel::setDelegate(QDeclarativeComponent *delegate)
Q_D(QDeclarativeVisualDataModel);
bool wasValid = d->m_delegate != 0;
d->m_delegate = delegate;
+ d->m_delegateValidated = false;
if (!wasValid && d->modelCount() && d->m_delegate) {
emit itemsInserted(0, d->modelCount());
emit countChanged();
@@ -987,6 +989,7 @@ QDeclarativeItem *QDeclarativeVisualDataModel::item(int index, const QByteArray
if (d->modelCount() <= 0 || !d->m_delegate)
return 0;
QObject *nobj = d->m_cache.getItem(index);
+ bool needComplete = false;
if (!nobj) {
QDeclarativeContext *ccontext = d->m_context;
if (!ccontext) ccontext = qmlContext(this);
@@ -997,6 +1000,8 @@ QDeclarativeItem *QDeclarativeVisualDataModel::item(int index, const QByteArray
nobj = d->m_delegate->beginCreate(ctxt);
if (complete)
d->m_delegate->completeCreate();
+ else
+ needComplete = true;
if (nobj) {
QDeclarative_setParent_noEvent(ctxt, nobj);
QDeclarative_setParent_noEvent(data, nobj);
@@ -1020,8 +1025,13 @@ QDeclarativeItem *QDeclarativeVisualDataModel::item(int index, const QByteArray
}
}
if (!item) {
+ if (needComplete)
+ d->m_delegate->completeCreate();
d->m_cache.releaseItem(nobj);
- qmlInfo(d->m_delegate) << QDeclarativeVisualDataModel::tr("Delegate component must be Item type.");
+ if (!d->m_delegateValidated) {
+ qmlInfo(d->m_delegate) << QDeclarativeVisualDataModel::tr("Delegate component must be Item type.");
+ d->m_delegateValidated = true;
+ }
}
return item;
@@ -1058,7 +1068,7 @@ QString QDeclarativeVisualDataModel::stringValue(int index, const QString &name)
tempData = true;
}
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(data);
+ QDeclarativeData *ddata = QDeclarativeData::get(data);
if (ddata && ddata->propertyCache) {
QDeclarativePropertyCache::Data *prop = ddata->propertyCache->property(name);
if (prop) {
diff --git a/src/declarative/qml/qdeclarativebinding.cpp b/src/declarative/qml/qdeclarativebinding.cpp
index 664118d..25492ac 100644
--- a/src/declarative/qml/qdeclarativebinding.cpp
+++ b/src/declarative/qml/qdeclarativebinding.cpp
@@ -46,7 +46,7 @@
#include "qdeclarativecontext.h"
#include "qdeclarativeinfo.h"
#include "private/qdeclarativecontext_p.h"
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
#include "private/qdeclarativestringconverters_p.h"
#include <QVariant>
@@ -296,7 +296,7 @@ void QDeclarativeAbstractBinding::addToObject(QObject *object)
Q_ASSERT(!m_prevBinding);
m_object = object;
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(object, true);
+ QDeclarativeData *data = QDeclarativeData::get(object, true);
if (index & 0xFF000000) {
// Value type
@@ -348,7 +348,7 @@ void QDeclarativeAbstractBinding::removeFromObject()
// Value type - we don't remove the proxy from the object. It will sit their happily
// doing nothing for ever more.
} else {
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(m_object, false);
+ QDeclarativeData *data = QDeclarativeData::get(m_object, false);
if (data) data->clearBindingBit(index);
}
diff --git a/src/declarative/qml/qdeclarativebinding_p.h b/src/declarative/qml/qdeclarativebinding_p.h
index 2789738..2d3acf5 100644
--- a/src/declarative/qml/qdeclarativebinding_p.h
+++ b/src/declarative/qml/qdeclarativebinding_p.h
@@ -92,7 +92,7 @@ protected:
private:
- friend class QDeclarativeDeclarativeData;
+ friend class QDeclarativeData;
friend class QDeclarativeValueTypeProxyBinding;
friend class QDeclarativePropertyPrivate;
friend class QDeclarativeVME;
diff --git a/src/declarative/qml/qdeclarativecompiler.cpp b/src/declarative/qml/qdeclarativecompiler.cpp
index fad7779..065009a 100644
--- a/src/declarative/qml/qdeclarativecompiler.cpp
+++ b/src/declarative/qml/qdeclarativecompiler.cpp
@@ -67,7 +67,6 @@
#include "private/qdeclarativecompiledbindings_p.h"
#include "private/qdeclarativeglobalscriptclass_p.h"
-#include <QCoreApplication>
#include <QColor>
#include <QDebug>
#include <QPointF>
@@ -1364,35 +1363,6 @@ int QDeclarativeCompiler::componentTypeRef()
return output->types.count() - 1;
}
-QMetaMethod QDeclarativeCompiler::findSignalByName(const QMetaObject *mo, const QByteArray &name)
-{
- Q_ASSERT(mo);
- int methods = mo->methodCount();
- for (int ii = methods - 1; ii >= 0; --ii) {
- QMetaMethod method = mo->method(ii);
- QByteArray methodName = method.signature();
- int idx = methodName.indexOf('(');
- methodName = methodName.left(idx);
-
- if (methodName == name)
- return method;
- }
-
- // If no signal is found, but the signal is of the form "onBlahChanged",
- // return the notify signal for the property "Blah"
- if (name.endsWith("Changed")) {
- QByteArray propName = name.mid(0, name.length() - 7);
- int propIdx = mo->indexOfProperty(propName.constData());
- if (propIdx >= 0) {
- QMetaProperty prop = mo->property(propIdx);
- if (prop.hasNotifySignal())
- return prop.notifySignal();
- }
- }
-
- return QMetaMethod();
-}
-
bool QDeclarativeCompiler::buildSignal(QDeclarativeParser::Property *prop, QDeclarativeParser::Object *obj,
const BindingContext &ctxt)
{
@@ -1404,7 +1374,7 @@ bool QDeclarativeCompiler::buildSignal(QDeclarativeParser::Property *prop, QDecl
if(name[0] >= 'A' && name[0] <= 'Z')
name[0] = name[0] - 'A' + 'a';
- int sigIdx = findSignalByName(obj->metaObject(), name).methodIndex();
+ int sigIdx = QDeclarativePropertyPrivate::findSignalByName(obj->metaObject(), name).methodIndex();
if (sigIdx == -1) {
@@ -2976,9 +2946,4 @@ QStringList QDeclarativeCompiler::deferredProperties(QDeclarativeParser::Object
return rv;
}
-QString QDeclarativeCompiler::tr(const char *str)
-{
- return QCoreApplication::translate("QDeclarativeCompiler", str);
-}
-
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativecompiler_p.h b/src/declarative/qml/qdeclarativecompiler_p.h
index 0e47774..867db2c 100644
--- a/src/declarative/qml/qdeclarativecompiler_p.h
+++ b/src/declarative/qml/qdeclarativecompiler_p.h
@@ -66,6 +66,7 @@
#include <QtCore/qbytearray.h>
#include <QtCore/qset.h>
+#include <QtCore/QCoreApplication>
QT_BEGIN_NAMESPACE
@@ -148,6 +149,7 @@ private:
class QMetaObjectBuilder;
class Q_DECLARATIVE_EXPORT QDeclarativeCompiler
{
+ Q_DECLARE_TR_FUNCTIONS(QDeclarativeCompiler)
public:
QDeclarativeCompiler();
@@ -159,8 +161,6 @@ public:
static bool isAttachedPropertyName(const QByteArray &);
static bool isSignalPropertyName(const QByteArray &);
- static QMetaMethod findSignalByName(const QMetaObject *, const QByteArray &name);
-
int evaluateEnum(const QByteArray& script) const; // for QDeclarativeCustomParser::evaluateEnum
private:
@@ -281,8 +281,6 @@ private:
void addId(const QString &, QDeclarativeParser::Object *);
- QString tr(const char *);
-
void dumpStats();
struct BindingReference {
diff --git a/src/declarative/qml/qdeclarativecomponent.cpp b/src/declarative/qml/qdeclarativecomponent.cpp
index 5f26ad5..3e4651c 100644
--- a/src/declarative/qml/qdeclarativecomponent.cpp
+++ b/src/declarative/qml/qdeclarativecomponent.cpp
@@ -120,6 +120,26 @@ Item {
}
}
\endqml
+
+ \e onDestruction
+
+ Emitted as the component begins destruction. This can be used to undo
+ work done in the onCompleted signal, or other imperative code in your
+ application.
+
+ The \c {Component::onDestruction} attached property can be applied to
+ any element. However, it applies to the destruction of the component as
+ a whole, and not the destruction of the specific object. The order of
+ running the \c onDestruction scripts is undefined.
+
+ \qml
+ Rectangle {
+ Component.onDestruction: console.log("Destruction Beginning!")
+ Rectangle {
+ Component.onDestruction: console.log("Nested Destruction Beginning!")
+ }
+ }
+ \endqml
*/
/*!
@@ -518,7 +538,7 @@ QScriptValue QDeclarativeComponent::createObject()
if (!ret)
return QScriptValue();
QDeclarativeEnginePrivate *priv = QDeclarativeEnginePrivate::get(d->engine);
- QDeclarativeDeclarativeData::get(ret, true)->setImplicitDestructible();
+ QDeclarativeData::get(ret, true)->setImplicitDestructible();
return priv->objectClass->newQObject(ret, QMetaType::QObjectStar);
}
@@ -581,7 +601,7 @@ QObject *QDeclarativeComponent::beginCreate(QDeclarativeContext *context)
Q_D(QDeclarativeComponent);
QObject *rv = d->beginCreate(context?QDeclarativeContextData::get(context):0, QBitField());
if (rv) {
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(rv);
+ QDeclarativeData *ddata = QDeclarativeData::get(rv);
Q_ASSERT(ddata);
ddata->indestructible = true;
}
@@ -657,11 +677,11 @@ QObject * QDeclarativeComponentPrivate::begin(QDeclarativeContextData *ctxt, QDe
state->bindValues = enginePriv->bindValues;
state->parserStatus = enginePriv->parserStatus;
- state->componentAttacheds = enginePriv->componentAttacheds;
- if (state->componentAttacheds)
- state->componentAttacheds->prev = &state->componentAttacheds;
+ state->componentAttached = enginePriv->componentAttached;
+ if (state->componentAttached)
+ state->componentAttached->prev = &state->componentAttached;
- enginePriv->componentAttacheds = 0;
+ enginePriv->componentAttached = 0;
enginePriv->bindValues.clear();
enginePriv->parserStatus.clear();
state->completePending = true;
@@ -671,7 +691,7 @@ QObject * QDeclarativeComponentPrivate::begin(QDeclarativeContextData *ctxt, QDe
return rv;
}
-void QDeclarativeComponentPrivate::beginDeferred(QDeclarativeContextData *, QDeclarativeEnginePrivate *enginePriv,
+void QDeclarativeComponentPrivate::beginDeferred(QDeclarativeEnginePrivate *enginePriv,
QObject *object, ConstructionState *state)
{
bool isRoot = !enginePriv->inBeginCreate;
@@ -688,11 +708,11 @@ void QDeclarativeComponentPrivate::beginDeferred(QDeclarativeContextData *, QDec
state->bindValues = enginePriv->bindValues;
state->parserStatus = enginePriv->parserStatus;
- state->componentAttacheds = enginePriv->componentAttacheds;
- if (state->componentAttacheds)
- state->componentAttacheds->prev = &state->componentAttacheds;
+ state->componentAttached = enginePriv->componentAttached;
+ if (state->componentAttached)
+ state->componentAttached->prev = &state->componentAttached;
- enginePriv->componentAttacheds = 0;
+ enginePriv->componentAttached = 0;
enginePriv->bindValues.clear();
enginePriv->parserStatus.clear();
state->completePending = true;
@@ -729,11 +749,13 @@ void QDeclarativeComponentPrivate::complete(QDeclarativeEnginePrivate *enginePri
QDeclarativeEnginePrivate::clear(ps);
}
- while (state->componentAttacheds) {
- QDeclarativeComponentAttached *a = state->componentAttacheds;
- if (a->next) a->next->prev = &state->componentAttacheds;
- state->componentAttacheds = a->next;
- a->prev = 0; a->next = 0;
+ while (state->componentAttached) {
+ QDeclarativeComponentAttached *a = state->componentAttached;
+ a->rem();
+ QDeclarativeData *d = QDeclarativeData::get(a->parent());
+ Q_ASSERT(d);
+ Q_ASSERT(d->context);
+ a->add(&d->context->componentAttached);
emit a->completed();
}
@@ -793,15 +815,18 @@ QDeclarativeComponentAttached *QDeclarativeComponent::qmlAttachedProperties(QObj
QDeclarativeComponentAttached *a = new QDeclarativeComponentAttached(obj);
QDeclarativeEngine *engine = qmlEngine(obj);
- if (!engine || !QDeclarativeEnginePrivate::get(engine)->inBeginCreate)
+ if (!engine)
return a;
- QDeclarativeEnginePrivate *p = QDeclarativeEnginePrivate::get(engine);
-
- a->next = p->componentAttacheds;
- a->prev = &p->componentAttacheds;
- if (a->next) a->next->prev = &a->next;
- p->componentAttacheds = a;
+ if (QDeclarativeEnginePrivate::get(engine)->inBeginCreate) {
+ QDeclarativeEnginePrivate *p = QDeclarativeEnginePrivate::get(engine);
+ a->add(&p->componentAttached);
+ } else {
+ QDeclarativeData *d = QDeclarativeData::get(obj);
+ Q_ASSERT(d);
+ Q_ASSERT(d->context);
+ a->add(&d->context->componentAttached);
+ }
return a;
}
diff --git a/src/declarative/qml/qdeclarativecomponent_p.h b/src/declarative/qml/qdeclarativecomponent_p.h
index dfe327b..24e5386 100644
--- a/src/declarative/qml/qdeclarativecomponent_p.h
+++ b/src/declarative/qml/qdeclarativecomponent_p.h
@@ -99,10 +99,10 @@ public:
QDeclarativeCompiledData *cc;
struct ConstructionState {
- ConstructionState() : componentAttacheds(0), completePending(false) {}
+ ConstructionState() : componentAttached(0), completePending(false) {}
QList<QDeclarativeEnginePrivate::SimpleList<QDeclarativeAbstractBinding> > bindValues;
QList<QDeclarativeEnginePrivate::SimpleList<QDeclarativeParserStatus> > parserStatus;
- QDeclarativeComponentAttached *componentAttacheds;
+ QDeclarativeComponentAttached *componentAttached;
QList<QDeclarativeError> errors;
bool completePending;
};
@@ -111,8 +111,8 @@ public:
static QObject *begin(QDeclarativeContextData *ctxt, QDeclarativeEnginePrivate *enginePriv,
QDeclarativeCompiledData *component, int start, int count,
ConstructionState *state, const QBitField &bindings = QBitField());
- static void beginDeferred(QDeclarativeContextData *ctxt, QDeclarativeEnginePrivate *enginePriv,
- QObject *object, ConstructionState *state);
+ static void beginDeferred(QDeclarativeEnginePrivate *enginePriv, QObject *object,
+ ConstructionState *state);
static void complete(QDeclarativeEnginePrivate *enginePriv, ConstructionState *state);
QDeclarativeEngine *engine;
@@ -132,13 +132,24 @@ public:
QDeclarativeComponentAttached(QObject *parent = 0);
~QDeclarativeComponentAttached();
+ void add(QDeclarativeComponentAttached **a) {
+ prev = a; next = *a; *a = this;
+ if (next) next->prev = &next;
+ }
+ void rem() {
+ if (next) next->prev = prev;
+ *prev = next;
+ next = 0; prev = 0;
+ }
QDeclarativeComponentAttached **prev;
QDeclarativeComponentAttached *next;
Q_SIGNALS:
void completed();
+ void destruction();
private:
+ friend class QDeclarativeContextData;;
friend class QDeclarativeComponentPrivate;
};
diff --git a/src/declarative/qml/qdeclarativecontext.cpp b/src/declarative/qml/qdeclarativecontext.cpp
index ba4da95..6657fea 100644
--- a/src/declarative/qml/qdeclarativecontext.cpp
+++ b/src/declarative/qml/qdeclarativecontext.cpp
@@ -42,6 +42,7 @@
#include "qdeclarativecontext.h"
#include "private/qdeclarativecontext_p.h"
+#include "private/qdeclarativecomponent_p.h"
#include "private/qdeclarativeexpression_p.h"
#include "private/qdeclarativeengine_p.h"
#include "qdeclarativeengine.h"
@@ -476,21 +477,34 @@ QObject *QDeclarativeContextPrivate::context_at(QDeclarativeListProperty<QObject
QDeclarativeContextData::QDeclarativeContextData()
: parent(0), engine(0), isInternal(false), publicContext(0), propertyNames(0), contextObject(0),
imports(0), childContexts(0), nextChild(0), prevChild(0), expressions(0), contextObjects(0),
- contextGuards(0), idValues(0), idValueCount(0), optimizedBindings(0), linkedContext(0)
+ contextGuards(0), idValues(0), idValueCount(0), optimizedBindings(0), linkedContext(0),
+ componentAttached(0)
{
}
QDeclarativeContextData::QDeclarativeContextData(QDeclarativeContext *ctxt)
: parent(0), engine(0), isInternal(false), publicContext(ctxt), propertyNames(0), contextObject(0),
imports(0), childContexts(0), nextChild(0), prevChild(0), expressions(0), contextObjects(0),
- contextGuards(0), idValues(0), idValueCount(0), optimizedBindings(0), linkedContext(0)
+ contextGuards(0), idValues(0), idValueCount(0), optimizedBindings(0), linkedContext(0),
+ componentAttached(0)
{
}
-void QDeclarativeContextData::destroy()
+void QDeclarativeContextData::invalidate()
{
- if (linkedContext)
- linkedContext->destroy();
+ while (childContexts)
+ childContexts->invalidate();
+
+ while (componentAttached) {
+ QDeclarativeComponentAttached *a = componentAttached;
+ componentAttached = a->next;
+ if (componentAttached) componentAttached->prev = &componentAttached;
+
+ a->next = 0;
+ a->prev = 0;
+
+ emit a->destruction();
+ }
if (prevChild) {
*prevChild = nextChild;
@@ -498,19 +512,17 @@ void QDeclarativeContextData::destroy()
nextChild = 0;
prevChild = 0;
}
-
- QDeclarativeContextData *child = childContexts;
- while (child) {
- QDeclarativeContextData *next = child->nextChild;
- child->invalidateEngines();
- child->parent = 0;
- child->nextChild = 0;
- child->prevChild = 0;
+ engine = 0;
+ parent = 0;
+}
- child = next;
- }
- childContexts = 0;
+void QDeclarativeContextData::destroy()
+{
+ if (linkedContext)
+ linkedContext->destroy();
+
+ if (engine) invalidate();
QDeclarativeAbstractExpression *expression = expressions;
while (expression) {
@@ -525,7 +537,7 @@ void QDeclarativeContextData::destroy()
expressions = 0;
while (contextObjects) {
- QDeclarativeDeclarativeData *co = contextObjects;
+ QDeclarativeData *co = contextObjects;
contextObjects = contextObjects->nextContextObject;
co->context = 0;
@@ -573,19 +585,6 @@ void QDeclarativeContextData::setParent(QDeclarativeContextData *p)
}
}
-void QDeclarativeContextData::invalidateEngines()
-{
- if (!engine)
- return;
- engine = 0;
-
- QDeclarativeContextData *child = childContexts;
- while (child) {
- child->invalidateEngines();
- child = child->nextChild;
- }
-}
-
/*
Refreshes all expressions that could possibly depend on this context. Refreshing flushes all
context-tree dependent caches in the expressions, and should occur every time the context tree
@@ -608,7 +607,7 @@ void QDeclarativeContextData::refreshExpressions()
void QDeclarativeContextData::addObject(QObject *o)
{
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(o, true);
+ QDeclarativeData *data = QDeclarativeData::get(o, true);
Q_ASSERT(data->context == 0);
diff --git a/src/declarative/qml/qdeclarativecontext_p.h b/src/declarative/qml/qdeclarativecontext_p.h
index 7a16179..77a6d94 100644
--- a/src/declarative/qml/qdeclarativecontext_p.h
+++ b/src/declarative/qml/qdeclarativecontext_p.h
@@ -55,7 +55,7 @@
#include "qdeclarativecontext.h"
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
#include "private/qdeclarativeintegercache_p.h"
#include "private/qdeclarativetypenamecache_p.h"
#include "private/qdeclarativenotifier_p.h"
@@ -106,6 +106,7 @@ public:
static QObject *context_at(QDeclarativeListProperty<QObject> *, int);
};
+class QDeclarativeComponentAttached;
class QDeclarativeGuardedContextData;
class QDeclarativeContextData
{
@@ -113,6 +114,7 @@ public:
QDeclarativeContextData();
QDeclarativeContextData(QDeclarativeContext *);
void destroy();
+ void invalidate();
inline bool isValid() const {
return engine && (!isInternal || !contextObject || !QObjectPrivate::get(contextObject)->wasDeleted);
@@ -123,7 +125,6 @@ public:
QDeclarativeEngine *engine;
void setParent(QDeclarativeContextData *);
- void invalidateEngines();
void refreshExpressions();
void addObject(QObject *);
@@ -166,7 +167,7 @@ public:
QDeclarativeAbstractExpression *expressions;
// Doubly-linked list of objects that are owned by this context
- QDeclarativeDeclarativeData *contextObjects;
+ QDeclarativeData *contextObjects;
// Doubly-linked list of context guards (XXX merge with contextObjects)
QDeclarativeGuardedContextData *contextGuards;
@@ -194,6 +195,10 @@ public:
// Linked contexts. this owns linkedContext.
QDeclarativeContextData *linkedContext;
+ // Linked list of uses of the Component attached property in this
+ // context
+ QDeclarativeComponentAttached *componentAttached;
+
QString findObjectId(const QObject *obj) const;
static QDeclarativeContextData *get(QDeclarativeContext *context) {
diff --git a/src/declarative/qml/qdeclarativedeclarativedata_p.h b/src/declarative/qml/qdeclarativedata_p.h
index 5b12629..2ddd7e5 100644
--- a/src/declarative/qml/qdeclarativedeclarativedata_p.h
+++ b/src/declarative/qml/qdeclarativedata_p.h
@@ -39,8 +39,8 @@
**
****************************************************************************/
-#ifndef QDECLARATIVEDECLARATIVEDATA_P_H
-#define QDECLARATIVEDECLARATIVEDATA_P_H
+#ifndef QDECLARATIVEDATA_P_H
+#define QDECLARATIVEDATA_P_H
//
// W A R N I N G
@@ -68,10 +68,10 @@ class QDeclarativeContextData;
// default state for elemental object allocations. This is crucial in the
// workings of the QDeclarativeInstruction::CreateSimpleObject instruction.
// Don't change anything here without first considering that case!
-class Q_AUTOTEST_EXPORT QDeclarativeDeclarativeData : public QDeclarativeData
+class Q_AUTOTEST_EXPORT QDeclarativeData : public QAbstractDeclarativeData
{
public:
- QDeclarativeDeclarativeData()
+ QDeclarativeData()
: 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),
@@ -80,12 +80,12 @@ public:
}
static inline void init() {
- QDeclarativeData::destroyed = destroyed;
- QDeclarativeData::parentChanged = parentChanged;
+ QAbstractDeclarativeData::destroyed = destroyed;
+ QAbstractDeclarativeData::parentChanged = parentChanged;
}
- static void destroyed(QDeclarativeData *, QObject *);
- static void parentChanged(QDeclarativeData *, QObject *, QObject *);
+ static void destroyed(QAbstractDeclarativeData *, QObject *);
+ static void parentChanged(QAbstractDeclarativeData *, QObject *, QObject *);
void destroyed(QObject *);
void parentChanged(QObject *, QObject *);
@@ -100,14 +100,16 @@ public:
quint32 explicitIndestructibleSet:1;
quint32 dummy:28;
- QDeclarativeContextData *context;
+ // The context that created the C++ object
+ QDeclarativeContextData *context;
+ // The outermost context in which this object lives
QDeclarativeContextData *outerContext;
QDeclarativeAbstractBinding *bindings;
// Linked list for QDeclarativeContext::contextObjects
- QDeclarativeDeclarativeData *nextContextObject;
- QDeclarativeDeclarativeData**prevContextObject;
+ QDeclarativeData *nextContextObject;
+ QDeclarativeData**prevContextObject;
int bindingBitsSize;
quint32 *bindingBits;
@@ -130,16 +132,16 @@ public:
QDeclarativeGuard<QObject> *guards;
- static QDeclarativeDeclarativeData *get(const QObject *object, bool create = false) {
+ static QDeclarativeData *get(const QObject *object, bool create = false) {
QObjectPrivate *priv = QObjectPrivate::get(const_cast<QObject *>(object));
if (priv->wasDeleted) {
Q_ASSERT(!create);
return 0;
} else if (priv->declarativeData) {
- return static_cast<QDeclarativeDeclarativeData *>(priv->declarativeData);
+ return static_cast<QDeclarativeData *>(priv->declarativeData);
} else if (create) {
- priv->declarativeData = new QDeclarativeDeclarativeData;
- return static_cast<QDeclarativeDeclarativeData *>(priv->declarativeData);
+ priv->declarativeData = new QDeclarativeData;
+ return static_cast<QDeclarativeData *>(priv->declarativeData);
} else {
return 0;
}
@@ -154,7 +156,7 @@ void QDeclarativeGuard<T>::addGuard()
return;
}
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(o, true);
+ QDeclarativeData *data = QDeclarativeData::get(o, true);
next = data->guards;
if (next) reinterpret_cast<QDeclarativeGuard<T> *>(next)->prev = &next;
data->guards = reinterpret_cast<QDeclarativeGuard<QObject> *>(this);
@@ -172,4 +174,4 @@ void QDeclarativeGuard<T>::remGuard()
QT_END_NAMESPACE
-#endif // QDECLARATIVEDECLARATIVEDATA_P_H
+#endif // QDECLARATIVEDATA_P_H
diff --git a/src/declarative/qml/qdeclarativeengine.cpp b/src/declarative/qml/qdeclarativeengine.cpp
index c5afe92..96145fb 100644
--- a/src/declarative/qml/qdeclarativeengine.cpp
+++ b/src/declarative/qml/qdeclarativeengine.cpp
@@ -155,7 +155,7 @@ QDeclarativeEnginePrivate::QDeclarativeEnginePrivate(QDeclarativeEngine *e)
: captureProperties(false), rootContext(0), currentExpression(0), isDebugging(false),
contextClass(0), sharedContext(0), sharedScope(0), objectClass(0), valueTypeClass(0),
globalClass(0), cleanup(0), erroredBindings(0), inProgressCreations(0),
- scriptEngine(this), workerScriptEngine(0), componentAttacheds(0), inBeginCreate(false),
+ scriptEngine(this), workerScriptEngine(0), componentAttached(0), inBeginCreate(false),
networkAccessManager(0), networkAccessManagerFactory(0),
typeManager(e), uniqueId(1)
{
@@ -350,14 +350,23 @@ typedef QMap<QString, QString> StringStringMap;
Q_GLOBAL_STATIC(StringStringMap, qmlEnginePluginsWithRegisteredTypes); // stores the uri
-void QDeclarativeDeclarativeData::destroyed(QDeclarativeData *d, QObject *o)
+void QDeclarativePrivate::qdeclarativeelement_destructor(QObject *o)
{
- static_cast<QDeclarativeDeclarativeData *>(d)->destroyed(o);
+ QObjectPrivate *p = QObjectPrivate::get(o);
+ Q_ASSERT(p->declarativeData);
+ QDeclarativeData *d = static_cast<QDeclarativeData*>(p->declarativeData);
+ if (d->ownContext)
+ d->context->destroy();
}
-void QDeclarativeDeclarativeData::parentChanged(QDeclarativeData *d, QObject *o, QObject *p)
+void QDeclarativeData::destroyed(QAbstractDeclarativeData *d, QObject *o)
{
- static_cast<QDeclarativeDeclarativeData *>(d)->parentChanged(o, p);
+ static_cast<QDeclarativeData *>(d)->destroyed(o);
+}
+
+void QDeclarativeData::parentChanged(QAbstractDeclarativeData *d, QObject *o, QObject *p)
+{
+ static_cast<QDeclarativeData *>(d)->parentChanged(o, p);
}
void QDeclarativeEnginePrivate::init()
@@ -367,7 +376,7 @@ void QDeclarativeEnginePrivate::init()
qRegisterMetaType<QDeclarativeScriptString>("QDeclarativeScriptString");
qRegisterMetaType<QScriptValue>("QScriptValue");
- QDeclarativeDeclarativeData::init();
+ QDeclarativeData::init();
contextClass = new QDeclarativeContextScriptClass(q);
objectClass = new QDeclarativeObjectScriptClass(q);
@@ -659,8 +668,8 @@ QDeclarativeContext *QDeclarativeEngine::contextForObject(const QObject *object)
QObjectPrivate *priv = QObjectPrivate::get(const_cast<QObject *>(object));
- QDeclarativeDeclarativeData *data =
- static_cast<QDeclarativeDeclarativeData *>(priv->declarativeData);
+ QDeclarativeData *data =
+ static_cast<QDeclarativeData *>(priv->declarativeData);
if (!data)
return 0;
@@ -683,7 +692,7 @@ void QDeclarativeEngine::setContextForObject(QObject *object, QDeclarativeContex
if (!object || !context)
return;
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(object, true);
+ QDeclarativeData *data = QDeclarativeData::get(object, true);
if (data->context) {
qWarning("QDeclarativeEngine::setContextForObject(): Object already has a QDeclarativeContext");
return;
@@ -734,7 +743,7 @@ void QDeclarativeEngine::setContextForObject(QObject *object, QDeclarativeContex
*/
void QDeclarativeEngine::setObjectOwnership(QObject *object, ObjectOwnership ownership)
{
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(object, true);
+ QDeclarativeData *ddata = QDeclarativeData::get(object, true);
if (!ddata)
return;
@@ -747,7 +756,7 @@ void QDeclarativeEngine::setObjectOwnership(QObject *object, ObjectOwnership own
*/
QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(QObject *object)
{
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(object, false);
+ QDeclarativeData *ddata = QDeclarativeData::get(object, false);
if (!ddata)
return CppOwnership;
else
@@ -756,14 +765,14 @@ QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(QObject
void qmlExecuteDeferred(QObject *object)
{
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(object);
+ QDeclarativeData *data = QDeclarativeData::get(object);
if (data && data->deferredComponent) {
QDeclarativeEnginePrivate *ep = QDeclarativeEnginePrivate::get(data->context->engine);
QDeclarativeComponentPrivate::ConstructionState state;
- QDeclarativeComponentPrivate::beginDeferred(data->context, ep, object, &state);
+ QDeclarativeComponentPrivate::beginDeferred(ep, object, &state);
data->deferredComponent->release();
data->deferredComponent = 0;
@@ -789,7 +798,7 @@ QDeclarativeEngine *qmlEngine(const QObject *obj)
QObject *qmlAttachedPropertiesObjectById(int id, const QObject *object, bool create)
{
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(object);
+ QDeclarativeData *data = QDeclarativeData::get(object);
if (!data)
return 0; // Attached properties are only on objects created by QML
@@ -824,7 +833,7 @@ QObject *qmlAttachedPropertiesObject(int *idCache, const QObject *object,
return qmlAttachedPropertiesObjectById(*idCache, object, create);
}
-void QDeclarativeDeclarativeData::destroyed(QObject *object)
+void QDeclarativeData::destroyed(QObject *object)
{
if (deferredComponent)
deferredComponent->release();
@@ -851,7 +860,7 @@ void QDeclarativeDeclarativeData::destroyed(QObject *object)
if (propertyCache)
propertyCache->release();
- if (ownContext)
+ if (ownContext && context)
context->destroy();
QDeclarativeGuard<QObject> *guard = guards;
@@ -871,12 +880,12 @@ void QDeclarativeDeclarativeData::destroyed(QObject *object)
delete this;
}
-void QDeclarativeDeclarativeData::parentChanged(QObject *, QObject *parent)
+void QDeclarativeData::parentChanged(QObject *, QObject *parent)
{
if (!parent && scriptValue) { delete scriptValue; scriptValue = 0; }
}
-bool QDeclarativeDeclarativeData::hasBindingBit(int bit) const
+bool QDeclarativeData::hasBindingBit(int bit) const
{
if (bindingBitsSize > bit)
return bindingBits[bit / 32] & (1 << (bit % 32));
@@ -884,13 +893,13 @@ bool QDeclarativeDeclarativeData::hasBindingBit(int bit) const
return false;
}
-void QDeclarativeDeclarativeData::clearBindingBit(int bit)
+void QDeclarativeData::clearBindingBit(int bit)
{
if (bindingBitsSize > bit)
bindingBits[bit / 32] &= ~(1 << (bit % 32));
}
-void QDeclarativeDeclarativeData::setBindingBit(QObject *obj, int bit)
+void QDeclarativeData::setBindingBit(QObject *obj, int bit)
{
if (bindingBitsSize <= bit) {
int props = obj->metaObject()->propertyCount();
@@ -956,7 +965,7 @@ QScriptValue QDeclarativeEnginePrivate::createComponent(QScriptContext *ctxt, QS
QUrl url = QUrl(context->resolvedUrl(QUrl(arg)));
QDeclarativeComponent *c = new QDeclarativeComponent(activeEngine, url, activeEngine);
QDeclarativeComponentPrivate::get(c)->creationContext = context;
- QDeclarativeDeclarativeData::get(c, true)->setImplicitDestructible();
+ QDeclarativeData::get(c, true)->setImplicitDestructible();
return activeEnginePriv->objectClass->newQObject(c, qMetaTypeId<QDeclarativeComponent*>());
}
}
@@ -1027,7 +1036,7 @@ QScriptValue QDeclarativeEnginePrivate::createQmlObject(QScriptContext *ctxt, QS
if(gobj && gparent)
gobj->setParentItem(gparent);
- QDeclarativeDeclarativeData::get(obj, true)->setImplicitDestructible();
+ QDeclarativeData::get(obj, true)->setImplicitDestructible();
return activeEnginePriv->objectClass->newQObject(obj, QMetaType::QObjectStar);
}
@@ -1356,7 +1365,9 @@ QScriptValue QDeclarativeEnginePrivate::scriptValueFromVariant(const QVariant &v
rv.setProperty(ii, objectClass->newQObject(object));
}
return rv;
- }
+ } else if (QDeclarativeValueType *vt = valueTypes[val.userType()]) {
+ return valueTypeClass->newObject(val, vt);
+ }
bool objOk;
QObject *obj = QDeclarativeMetaType::toQObject(val, &objOk);
diff --git a/src/declarative/qml/qdeclarativeengine_p.h b/src/declarative/qml/qdeclarativeengine_p.h
index 7766ad6..b3bba43 100644
--- a/src/declarative/qml/qdeclarativeengine_p.h
+++ b/src/declarative/qml/qdeclarativeengine_p.h
@@ -215,7 +215,7 @@ public:
QList<SimpleList<QDeclarativeAbstractBinding> > bindValues;
QList<SimpleList<QDeclarativeParserStatus> > parserStatus;
- QDeclarativeComponentAttached *componentAttacheds;
+ QDeclarativeComponentAttached *componentAttached;
bool inBeginCreate;
diff --git a/src/declarative/qml/qdeclarativeenginedebug.cpp b/src/declarative/qml/qdeclarativeenginedebug.cpp
index 3455883..578733c 100644
--- a/src/declarative/qml/qdeclarativeenginedebug.cpp
+++ b/src/declarative/qml/qdeclarativeenginedebug.cpp
@@ -264,7 +264,7 @@ void QDeclarativeEngineDebugServer::buildObjectList(QDataStream &message, QDecla
QDeclarativeEngineDebugServer::QDeclarativeObjectData
QDeclarativeEngineDebugServer::objectData(QObject *object)
{
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(object);
+ QDeclarativeData *ddata = QDeclarativeData::get(object);
QDeclarativeObjectData rv;
if (ddata && ddata->outerContext) {
rv.url = ddata->outerContext->url;
diff --git a/src/declarative/qml/qdeclarativeguard_p.h b/src/declarative/qml/qdeclarativeguard_p.h
index 747d58f..be60ce4 100644
--- a/src/declarative/qml/qdeclarativeguard_p.h
+++ b/src/declarative/qml/qdeclarativeguard_p.h
@@ -65,7 +65,7 @@ class QDeclarativeGuard
QObject *o;
QDeclarativeGuard<QObject> *next;
QDeclarativeGuard<QObject> **prev;
- friend class QDeclarativeDeclarativeData;
+ friend class QDeclarativeData;
public:
inline QDeclarativeGuard();
inline QDeclarativeGuard(T *);
@@ -99,7 +99,7 @@ QT_END_NAMESPACE
Q_DECLARE_METATYPE(QDeclarativeGuard<QObject>);
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
QT_BEGIN_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeinfo.cpp b/src/declarative/qml/qdeclarativeinfo.cpp
index 6199aa9..0a4352f 100644
--- a/src/declarative/qml/qdeclarativeinfo.cpp
+++ b/src/declarative/qml/qdeclarativeinfo.cpp
@@ -41,7 +41,7 @@
#include "qdeclarativeinfo.h"
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
#include "qdeclarativecontext.h"
#include "private/qdeclarativecontext_p.h"
#include "private/qdeclarativemetatype_p.h"
@@ -100,7 +100,7 @@ QDeclarativeInfo::QDeclarativeInfo(const QObject *object)
pos += typeName;
}
- QDeclarativeDeclarativeData *ddata = object?QDeclarativeDeclarativeData::get(object):0;
+ QDeclarativeData *ddata = object?QDeclarativeData::get(object):0;
pos += QLatin1String(" (");
if (ddata) {
if (ddata->outerContext && !ddata->outerContext->url.isEmpty()) {
diff --git a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
index e1e33ab..5773fe6 100644
--- a/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
+++ b/src/declarative/qml/qdeclarativeobjectscriptclass.cpp
@@ -43,7 +43,7 @@
#include "private/qdeclarativeengine_p.h"
#include "private/qdeclarativecontext_p.h"
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
#include "private/qdeclarativetypenamescriptclass_p.h"
#include "private/qdeclarativelistscriptclass_p.h"
#include "private/qdeclarativebinding_p.h"
@@ -63,7 +63,7 @@ struct ObjectData : public QScriptDeclarativeClass::Object {
virtual ~ObjectData() {
if (object && !object->parent()) {
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(object, false);
+ QDeclarativeData *ddata = QDeclarativeData::get(object, false);
if (ddata && !ddata->indestructible)
object->deleteLater();
}
@@ -104,7 +104,7 @@ QScriptValue QDeclarativeObjectScriptClass::newQObject(QObject *object, int type
if (QObjectPrivate::get(object)->wasDeleted)
return scriptEngine->undefinedValue();
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(object, true);
+ QDeclarativeData *ddata = QDeclarativeData::get(object, true);
if (!ddata) {
return scriptEngine->undefinedValue();
@@ -428,7 +428,7 @@ QScriptValue QDeclarativeObjectScriptClass::destroy(QScriptContext *context, QSc
if (!data->object)
return engine->undefinedValue();
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(data->object, false);
+ QDeclarativeData *ddata = QDeclarativeData::get(data->object, false);
if (!ddata || ddata->indestructible)
return engine->currentContext()->throwError(QLatin1String("Invalid attempt to destroy() an indestructible object"));
@@ -453,7 +453,7 @@ QStringList QDeclarativeObjectScriptClass::propertyNames(Object *object)
QDeclarativeEnginePrivate *enginePrivate = QDeclarativeEnginePrivate::get(engine);
QDeclarativePropertyCache *cache = 0;
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(obj);
+ QDeclarativeData *ddata = QDeclarativeData::get(obj);
if (ddata)
cache = ddata->propertyCache;
if (!cache) {
@@ -752,7 +752,7 @@ QScriptDeclarativeClass::Value MetaCallArgument::toValue(QDeclarativeEngine *e)
return QScriptDeclarativeClass::Value(engine, *((QString *)&data));
} else if (type == QMetaType::QObjectStar) {
QObject *object = *((QObject **)&data);
- QDeclarativeDeclarativeData::get(object, true)->setImplicitDestructible();
+ QDeclarativeData::get(object, true)->setImplicitDestructible();
QDeclarativeEnginePrivate *priv = QDeclarativeEnginePrivate::get(e);
return QScriptDeclarativeClass::Value(engine, priv->objectClass->newQObject(object));
} else if (type == qMetaTypeId<QList<QObject *> >()) {
@@ -761,7 +761,7 @@ QScriptDeclarativeClass::Value MetaCallArgument::toValue(QDeclarativeEngine *e)
QDeclarativeEnginePrivate *priv = QDeclarativeEnginePrivate::get(e);
for (int ii = 0; ii < list.count(); ++ii) {
QObject *object = list.at(ii);
- QDeclarativeDeclarativeData::get(object, true)->setImplicitDestructible();
+ QDeclarativeData::get(object, true)->setImplicitDestructible();
rv.setProperty(ii, priv->objectClass->newQObject(object));
}
return QScriptDeclarativeClass::Value(engine, rv);
diff --git a/src/declarative/qml/qdeclarativeprivate.h b/src/declarative/qml/qdeclarativeprivate.h
index bebe82c..6e240d8 100644
--- a/src/declarative/qml/qdeclarativeprivate.h
+++ b/src/declarative/qml/qdeclarativeprivate.h
@@ -69,11 +69,18 @@ public:
class QDeclarativeCustomParser;
namespace QDeclarativePrivate
{
+ void Q_DECLARATIVE_EXPORT qdeclarativeelement_destructor(QObject *);
template<typename T>
- QObject *create() { return new T; }
+ class QDeclarativeElement : public T
+ {
+ public:
+ virtual ~QDeclarativeElement() {
+ QDeclarativePrivate::qdeclarativeelement_destructor(this);
+ }
+ };
template<typename T>
- void createInto(void *memory) { new (memory) T; }
+ void createInto(void *memory) { new (memory) QDeclarativeElement<T>; }
template<typename T>
QObject *createParent(QObject *p) { return new T(p); }
diff --git a/src/declarative/qml/qdeclarativeproperty.cpp b/src/declarative/qml/qdeclarativeproperty.cpp
index affb6b9..afd0d84 100644
--- a/src/declarative/qml/qdeclarativeproperty.cpp
+++ b/src/declarative/qml/qdeclarativeproperty.cpp
@@ -50,7 +50,7 @@
#include "private/qdeclarativeboundsignal_p.h"
#include "qdeclarativeengine.h"
#include "private/qdeclarativeengine_p.h"
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
#include "private/qdeclarativestringconverters_p.h"
#include "private/qdeclarativelist_p.h"
#include "private/qdeclarativecompiler_p.h"
@@ -286,7 +286,7 @@ void QDeclarativePropertyPrivate::initProperty(QObject *obj, const QString &name
QString signalName = terminal.mid(2);
signalName[0] = signalName.at(0).toLower();
- QMetaMethod method = QDeclarativeCompiler::findSignalByName(currentObject->metaObject(), signalName.toLatin1().constData());
+ QMetaMethod method = findSignalByName(currentObject->metaObject(), signalName.toLatin1().constData());
if (method.signature()) {
object = currentObject;
core.load(method);
@@ -606,7 +606,7 @@ QDeclarativePropertyPrivate::binding(const QDeclarativeProperty &that)
if (!that.isProperty() || !that.d->object)
return 0;
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(that.d->object);
+ QDeclarativeData *data = QDeclarativeData::get(that.d->object);
if (!data)
return 0;
@@ -660,7 +660,7 @@ QDeclarativeAbstractBinding *
QDeclarativePropertyPrivate::setBinding(QObject *object, int coreIndex, int valueTypeIndex,
QDeclarativeAbstractBinding *newBinding, WriteFlags flags)
{
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(object, 0 != newBinding);
+ QDeclarativeData *data = QDeclarativeData::get(object, 0 != newBinding);
QDeclarativeAbstractBinding *binding = 0;
if (data && data->hasBindingBit(coreIndex)) {
@@ -1353,4 +1353,36 @@ bool QDeclarativePropertyPrivate::canConvert(const QMetaObject *from, const QMet
return false;
}
+/*!
+ Return the signal corresponding to \a name
+*/
+QMetaMethod QDeclarativePropertyPrivate::findSignalByName(const QMetaObject *mo, const QByteArray &name)
+{
+ Q_ASSERT(mo);
+ int methods = mo->methodCount();
+ for (int ii = methods - 1; ii >= 2; --ii) { // >= 2 to block the destroyed signal
+ QMetaMethod method = mo->method(ii);
+ QByteArray methodName = method.signature();
+ int idx = methodName.indexOf('(');
+ methodName = methodName.left(idx);
+
+ if (methodName == name)
+ return method;
+ }
+
+ // If no signal is found, but the signal is of the form "onBlahChanged",
+ // return the notify signal for the property "Blah"
+ if (name.endsWith("Changed")) {
+ QByteArray propName = name.mid(0, name.length() - 7);
+ int propIdx = mo->indexOfProperty(propName.constData());
+ if (propIdx >= 0) {
+ QMetaProperty prop = mo->property(propIdx);
+ if (prop.hasNotifySignal())
+ return prop.notifySignal();
+ }
+ }
+
+ return QMetaMethod();
+}
+
QT_END_NAMESPACE
diff --git a/src/declarative/qml/qdeclarativeproperty_p.h b/src/declarative/qml/qdeclarativeproperty_p.h
index 420a1ba..8522561 100644
--- a/src/declarative/qml/qdeclarativeproperty_p.h
+++ b/src/declarative/qml/qdeclarativeproperty_p.h
@@ -96,8 +96,6 @@ public:
void initProperty(QObject *obj, const QString &name);
void initDefault(QObject *obj);
- QMetaMethod findSignal(QObject *, const QString &);
-
bool isValueType() const;
int propertyType() const;
QDeclarativeProperty::PropertyTypeCategory propertyTypeCategory() const;
@@ -134,6 +132,7 @@ public:
static bool write(const QDeclarativeProperty &that, const QVariant &, WriteFlags);
static int valueTypeCoreIndex(const QDeclarativeProperty &that);
static int bindingIndex(const QDeclarativeProperty &that);
+ static QMetaMethod findSignalByName(const QMetaObject *mo, const QByteArray &);
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QDeclarativePropertyPrivate::WriteFlags)
diff --git a/src/declarative/qml/qdeclarativepropertycache.cpp b/src/declarative/qml/qdeclarativepropertycache.cpp
index 111259d..888945b 100644
--- a/src/declarative/qml/qdeclarativepropertycache.cpp
+++ b/src/declarative/qml/qdeclarativepropertycache.cpp
@@ -147,7 +147,7 @@ QDeclarativePropertyCache::Data QDeclarativePropertyCache::create(const QMetaObj
}
int methodCount = metaObject->methodCount();
- for (int ii = methodCount - 1; ii >= 0; --ii) {
+ for (int ii = methodCount - 1; ii >= 2; --ii) { // >=2 to block the destroyed signal
QMetaMethod m = metaObject->method(ii);
if (m.access() == QMetaMethod::Private)
continue;
@@ -216,7 +216,7 @@ void QDeclarativePropertyCache::append(QDeclarativeEngine *engine, const QMetaOb
}
int methodCount = metaObject->methodCount();
- int methodOffset = metaObject->methodOffset();
+ int methodOffset = qMax(2, metaObject->methodOffset()); // 2 to block the destroyed signal
for (int ii = methodOffset; ii < methodCount; ++ii) {
QMetaMethod m = metaObject->method(ii);
if (m.access() == QMetaMethod::Private)
@@ -289,7 +289,7 @@ void QDeclarativePropertyCache::update(QDeclarativeEngine *engine, const QMetaOb
}
int methodCount = metaObject->methodCount();
- for (int ii = methodCount - 1; ii >= 0; --ii) {
+ for (int ii = methodCount - 1; ii >= 2; --ii) { // >=2 to block the destroyed signal
QMetaMethod m = metaObject->method(ii);
if (m.access() == QMetaMethod::Private)
continue;
@@ -368,7 +368,7 @@ QDeclarativePropertyCache::Data *QDeclarativePropertyCache::property(QDeclarativ
QDeclarativeEnginePrivate *enginePrivate = QDeclarativeEnginePrivate::get(engine);
QDeclarativePropertyCache *cache = 0;
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(obj);
+ QDeclarativeData *ddata = QDeclarativeData::get(obj);
if (ddata && ddata->propertyCache && ddata->propertyCache->qmlEngine() == engine)
cache = ddata->propertyCache;
if (!cache) {
@@ -400,7 +400,7 @@ QDeclarativePropertyCache::Data *QDeclarativePropertyCache::property(QDeclarativ
QDeclarativeEnginePrivate *enginePrivate = QDeclarativeEnginePrivate::get(engine);
QDeclarativePropertyCache *cache = 0;
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(obj);
+ QDeclarativeData *ddata = QDeclarativeData::get(obj);
if (ddata && ddata->propertyCache && ddata->propertyCache->qmlEngine() == engine)
cache = ddata->propertyCache;
if (!cache) {
diff --git a/src/declarative/qml/qdeclarativevaluetype.cpp b/src/declarative/qml/qdeclarativevaluetype.cpp
index 261c84a..352a6c0 100644
--- a/src/declarative/qml/qdeclarativevaluetype.cpp
+++ b/src/declarative/qml/qdeclarativevaluetype.cpp
@@ -99,12 +99,6 @@ void QDeclarativeValueTypeFactory::registerValueTypes()
qmlRegisterValueTypeEnums<QDeclarativeFontValueType>("Font");
}
-QDeclarativeValueType *QDeclarativeValueTypeFactory::operator[](int idx) const
-{
- return valueTypes[idx];
-}
-
-
QDeclarativeValueType *QDeclarativeValueTypeFactory::valueType(int t)
{
switch (t) {
diff --git a/src/declarative/qml/qdeclarativevaluetype_p.h b/src/declarative/qml/qdeclarativevaluetype_p.h
index 5bfc27d..d1833bb 100644
--- a/src/declarative/qml/qdeclarativevaluetype_p.h
+++ b/src/declarative/qml/qdeclarativevaluetype_p.h
@@ -86,7 +86,10 @@ public:
static void registerValueTypes();
- QDeclarativeValueType *operator[](int idx) const;
+ QDeclarativeValueType *operator[](int idx) const {
+ if (idx >= (int)QVariant::UserType) return 0;
+ else return valueTypes[idx];
+ }
private:
QDeclarativeValueType *valueTypes[QVariant::UserType - 1];
diff --git a/src/declarative/qml/qdeclarativevaluetypescriptclass.cpp b/src/declarative/qml/qdeclarativevaluetypescriptclass.cpp
index fdb71c6..cb1f27d 100644
--- a/src/declarative/qml/qdeclarativevaluetypescriptclass.cpp
+++ b/src/declarative/qml/qdeclarativevaluetypescriptclass.cpp
@@ -48,12 +48,24 @@
QT_BEGIN_NAMESPACE
-struct QDeclarativeValueTypeReference : public QScriptDeclarativeClass::Object {
+struct QDeclarativeValueTypeObject : public QScriptDeclarativeClass::Object {
+ enum Type { Reference, Copy };
+ QDeclarativeValueTypeObject(Type t) : objectType(t) {}
+ Type objectType;
QDeclarativeValueType *type;
+};
+
+struct QDeclarativeValueTypeReference : public QDeclarativeValueTypeObject {
+ QDeclarativeValueTypeReference() : QDeclarativeValueTypeObject(Reference) {}
QDeclarativeGuard<QObject> object;
int property;
};
+struct QDeclarativeValueTypeCopy : public QDeclarativeValueTypeObject {
+ QDeclarativeValueTypeCopy() : QDeclarativeValueTypeObject(Copy) {}
+ QVariant value;
+};
+
QDeclarativeValueTypeScriptClass::QDeclarativeValueTypeScriptClass(QDeclarativeEngine *bindEngine)
: QScriptDeclarativeClass(QDeclarativeEnginePrivate::getScriptEngine(bindEngine)), engine(bindEngine)
{
@@ -73,40 +85,67 @@ QScriptValue QDeclarativeValueTypeScriptClass::newObject(QObject *object, int co
return QScriptDeclarativeClass::newObject(scriptEngine, this, ref);
}
+QScriptValue QDeclarativeValueTypeScriptClass::newObject(const QVariant &v, QDeclarativeValueType *type)
+{
+ QDeclarativeValueTypeCopy *copy = new QDeclarativeValueTypeCopy;
+ copy->type = type;
+ copy->value = v;
+ QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine);
+ return QScriptDeclarativeClass::newObject(scriptEngine, this, copy);
+}
+
QScriptClass::QueryFlags
QDeclarativeValueTypeScriptClass::queryProperty(Object *obj, const Identifier &name,
- QScriptClass::QueryFlags)
+ QScriptClass::QueryFlags)
{
- QDeclarativeValueTypeReference *ref = static_cast<QDeclarativeValueTypeReference *>(obj);
+ QDeclarativeValueTypeObject *o = static_cast<QDeclarativeValueTypeObject *>(obj);
m_lastIndex = -1;
- if (!ref->object)
- return 0;
-
QByteArray propName = toString(name).toUtf8();
- m_lastIndex = ref->type->metaObject()->indexOfProperty(propName.constData());
+ m_lastIndex = o->type->metaObject()->indexOfProperty(propName.constData());
if (m_lastIndex == -1)
return 0;
- QMetaProperty prop = ref->object->metaObject()->property(m_lastIndex);
+ QScriptClass::QueryFlags rv = 0;
+
+ if (o->objectType == QDeclarativeValueTypeObject::Reference) {
+ QDeclarativeValueTypeReference *ref = static_cast<QDeclarativeValueTypeReference *>(o);
+
+ if (!ref->object)
+ return 0;
- QScriptClass::QueryFlags rv =
- QScriptClass::HandlesReadAccess;
- if (prop.isWritable())
- rv |= QScriptClass::HandlesWriteAccess;
+ QMetaProperty prop = ref->object->metaObject()->property(m_lastIndex);
+
+ rv = QScriptClass::HandlesReadAccess;
+ if (prop.isWritable())
+ rv |= QScriptClass::HandlesWriteAccess;
+ } else {
+ rv = QScriptClass::HandlesReadAccess | QScriptClass::HandlesWriteAccess;
+ }
return rv;
}
QDeclarativeValueTypeScriptClass::Value QDeclarativeValueTypeScriptClass::property(Object *obj, const Identifier &)
{
- QDeclarativeValueTypeReference *ref = static_cast<QDeclarativeValueTypeReference *>(obj);
+ QDeclarativeValueTypeObject *o = static_cast<QDeclarativeValueTypeObject *>(obj);
- QMetaProperty p = ref->type->metaObject()->property(m_lastIndex);
- ref->type->read(ref->object, ref->property);
- QVariant rv = p.read(ref->type);
+ QVariant rv;
+ if (o->objectType == QDeclarativeValueTypeObject::Reference) {
+ QDeclarativeValueTypeReference *ref = static_cast<QDeclarativeValueTypeReference *>(obj);
+
+ QMetaProperty p = ref->type->metaObject()->property(m_lastIndex);
+ ref->type->read(ref->object, ref->property);
+ rv = p.read(ref->type);
+ } else {
+ QDeclarativeValueTypeCopy *copy = static_cast<QDeclarativeValueTypeCopy *>(obj);
+
+ QMetaProperty p = copy->type->metaObject()->property(m_lastIndex);
+ copy->type->setValue(copy->value);
+ rv = p.read(copy->type);
+ }
QScriptEngine *scriptEngine = QDeclarativeEnginePrivate::getScriptEngine(engine);
return Value(scriptEngine, static_cast<QDeclarativeEnginePrivate *>(QObjectPrivate::get(engine))->scriptValueFromVariant(rv));
@@ -115,33 +154,53 @@ QDeclarativeValueTypeScriptClass::Value QDeclarativeValueTypeScriptClass::proper
void QDeclarativeValueTypeScriptClass::setProperty(Object *obj, const Identifier &,
const QScriptValue &value)
{
- QDeclarativeValueTypeReference *ref = static_cast<QDeclarativeValueTypeReference *>(obj);
-
- QDeclarativeAbstractBinding *delBinding =
- QDeclarativePropertyPrivate::setBinding(ref->object, ref->property, m_lastIndex, 0);
- if (delBinding)
- delBinding->destroy();
+ QDeclarativeValueTypeObject *o = static_cast<QDeclarativeValueTypeObject *>(obj);
QVariant v = QDeclarativeEnginePrivate::get(engine)->scriptValueToVariant(value);
- ref->type->read(ref->object, ref->property);
- QMetaProperty p = ref->type->metaObject()->property(m_lastIndex);
- p.write(ref->type, v);
- ref->type->write(ref->object, ref->property, 0);
+ if (o->objectType == QDeclarativeValueTypeObject::Reference) {
+ QDeclarativeValueTypeReference *ref = static_cast<QDeclarativeValueTypeReference *>(obj);
+
+ QDeclarativeAbstractBinding *delBinding =
+ QDeclarativePropertyPrivate::setBinding(ref->object, ref->property, m_lastIndex, 0);
+ if (delBinding)
+ delBinding->destroy();
+
+ ref->type->read(ref->object, ref->property);
+ QMetaProperty p = ref->type->metaObject()->property(m_lastIndex);
+ p.write(ref->type, v);
+ ref->type->write(ref->object, ref->property, 0);
+ } else {
+ QDeclarativeValueTypeCopy *copy = static_cast<QDeclarativeValueTypeCopy *>(obj);
+ copy->type->setValue(copy->value);
+ QMetaProperty p = copy->type->metaObject()->property(m_lastIndex);
+ p.write(copy->type, v);
+ copy->value = copy->type->value();
+ }
}
QVariant QDeclarativeValueTypeScriptClass::toVariant(Object *obj, bool *ok)
{
- QDeclarativeValueTypeReference *ref = static_cast<QDeclarativeValueTypeReference *>(obj);
+ QDeclarativeValueTypeObject *o = static_cast<QDeclarativeValueTypeObject *>(obj);
- if (ok) *ok = true;
+ if (o->objectType == QDeclarativeValueTypeObject::Reference) {
+ QDeclarativeValueTypeReference *ref = static_cast<QDeclarativeValueTypeReference *>(obj);
- if (ref->object) {
- ref->type->read(ref->object, ref->property);
- return ref->type->value();
+ if (ok) *ok = true;
+
+ if (ref->object) {
+ ref->type->read(ref->object, ref->property);
+ return ref->type->value();
+ }
} else {
- return QVariant();
+ QDeclarativeValueTypeCopy *copy = static_cast<QDeclarativeValueTypeCopy *>(obj);
+
+ if (ok) *ok = true;
+
+ return copy->value;
}
+
+ return QVariant();
}
QVariant QDeclarativeValueTypeScriptClass::toVariant(const QScriptValue &value)
diff --git a/src/declarative/qml/qdeclarativevaluetypescriptclass_p.h b/src/declarative/qml/qdeclarativevaluetypescriptclass_p.h
index 2bbb61f..9dafa99 100644
--- a/src/declarative/qml/qdeclarativevaluetypescriptclass_p.h
+++ b/src/declarative/qml/qdeclarativevaluetypescriptclass_p.h
@@ -67,6 +67,7 @@ public:
~QDeclarativeValueTypeScriptClass();
QScriptValue newObject(QObject *object, int coreIndex, QDeclarativeValueType *);
+ QScriptValue newObject(const QVariant &, QDeclarativeValueType *);
virtual QScriptClass::QueryFlags queryProperty(Object *, const Identifier &,
QScriptClass::QueryFlags flags);
diff --git a/src/declarative/qml/qdeclarativevme.cpp b/src/declarative/qml/qdeclarativevme.cpp
index 3575c17..fdcbeee 100644
--- a/src/declarative/qml/qdeclarativevme.cpp
+++ b/src/declarative/qml/qdeclarativevme.cpp
@@ -45,7 +45,7 @@
#include "private/qdeclarativeboundsignal_p.h"
#include "private/qdeclarativestringconverters_p.h"
#include "private/qmetaobjectbuilder_p.h"
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
#include "qdeclarative.h"
#include "private/qdeclarativecustomparser_p.h"
#include "qdeclarativeengine.h"
@@ -112,7 +112,7 @@ QObject *QDeclarativeVME::run(QDeclarativeContextData *ctxt, QDeclarativeCompile
void QDeclarativeVME::runDeferred(QObject *object)
{
- QDeclarativeDeclarativeData *data = QDeclarativeDeclarativeData::get(object);
+ QDeclarativeData *data = QDeclarativeData::get(object);
if (!data || !data->context || !data->deferredComponent)
return;
@@ -194,7 +194,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack,
VME_EXCEPTION(QCoreApplication::translate("QDeclarativeVME","Unable to create object of type %1").arg(QString::fromLatin1(types.at(instr.create.type).className)));
}
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(o);
+ QDeclarativeData *ddata = QDeclarativeData::get(o);
Q_ASSERT(ddata);
if (stack.isEmpty()) {
@@ -245,12 +245,12 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack,
case QDeclarativeInstruction::CreateSimpleObject:
{
QObject *o = (QObject *)operator new(instr.createSimple.typeSize +
- sizeof(QDeclarativeDeclarativeData));
- ::memset(o, 0, instr.createSimple.typeSize + sizeof(QDeclarativeDeclarativeData));
+ sizeof(QDeclarativeData));
+ ::memset(o, 0, instr.createSimple.typeSize + sizeof(QDeclarativeData));
instr.createSimple.create(o);
- QDeclarativeDeclarativeData *ddata =
- (QDeclarativeDeclarativeData *)(((const char *)o) + instr.createSimple.typeSize);
+ QDeclarativeData *ddata =
+ (QDeclarativeData *)(((const char *)o) + instr.createSimple.typeSize);
ddata->lineNumber = instr.line;
ddata->columnNumber = instr.createSimple.column;
@@ -289,7 +289,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack,
new QDeclarativeComponent(ctxt->engine, comp, ii + 1, instr.createComponent.count,
stack.isEmpty() ? 0 : stack.top());
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(qcomp, true);
+ QDeclarativeData *ddata = QDeclarativeData::get(qcomp, true);
Q_ASSERT(ddata);
ctxt->addObject(qcomp);
@@ -322,7 +322,7 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack,
(void)new QDeclarativeVMEMetaObject(target, &mo, data, comp);
- QDeclarativeDeclarativeData *ddata = QDeclarativeDeclarativeData::get(target, true);
+ QDeclarativeData *ddata = QDeclarativeData::get(target, true);
if (ddata->propertyCache) ddata->propertyCache->release();
ddata->propertyCache = propertyCaches.at(instr.storeMeta.propertyCache);
ddata->propertyCache->addref();
@@ -854,8 +854,8 @@ QObject *QDeclarativeVME::run(QDeclarativeVMEStack<QObject *> &stack,
{
if (instr.defer.deferCount) {
QObject *target = stack.top();
- QDeclarativeDeclarativeData *data =
- QDeclarativeDeclarativeData::get(target, true);
+ QDeclarativeData *data =
+ QDeclarativeData::get(target, true);
comp->addref();
data->deferredComponent = comp;
data->deferredIdx = ii;
@@ -935,8 +935,8 @@ QDeclarativeCompiledData::TypeReference::createInstance(QDeclarativeContextData
QObject *rv = 0;
void *memory = 0;
- type->create(&rv, &memory, sizeof(QDeclarativeDeclarativeData));
- QDeclarativeDeclarativeData *ddata = new (memory) QDeclarativeDeclarativeData;
+ type->create(&rv, &memory, sizeof(QDeclarativeData));
+ QDeclarativeData *ddata = new (memory) QDeclarativeData;
ddata->ownMemory = false;
QObjectPrivate::get(rv)->declarativeData = ddata;
diff --git a/src/declarative/qml/qdeclarativevmemetaobject.cpp b/src/declarative/qml/qdeclarativevmemetaobject.cpp
index 2e2a8e8..c4d47b3 100644
--- a/src/declarative/qml/qdeclarativevmemetaobject.cpp
+++ b/src/declarative/qml/qdeclarativevmemetaobject.cpp
@@ -379,7 +379,7 @@ QDeclarativeVMEMetaObject::QDeclarativeVMEMetaObject(QObject *obj,
const QMetaObject *other,
const QDeclarativeVMEMetaData *meta,
QDeclarativeCompiledData *cdata)
-: object(obj), compiledData(cdata), ctxt(QDeclarativeDeclarativeData::get(obj)->outerContext),
+: object(obj), compiledData(cdata), ctxt(QDeclarativeData::get(obj)->outerContext),
metaData(meta), data(0), methods(0), parent(0)
{
compiledData->addref();
diff --git a/src/declarative/qml/qml.pri b/src/declarative/qml/qml.pri
index 1087f44..c48662c 100644
--- a/src/declarative/qml/qml.pri
+++ b/src/declarative/qml/qml.pri
@@ -94,7 +94,7 @@ HEADERS += \
$$PWD/qdeclarativecompositetypemanager_p.h \
$$PWD/qdeclarativelist.h \
$$PWD/qdeclarativelist_p.h \
- $$PWD/qdeclarativedeclarativedata_p.h \
+ $$PWD/qdeclarativedata_p.h \
$$PWD/qdeclarativeerror.h \
$$PWD/qdeclarativescriptparser_p.h \
$$PWD/qdeclarativeenginedebug_p.h \
diff --git a/src/declarative/util/qdeclarativeanimation.cpp b/src/declarative/util/qdeclarativeanimation.cpp
index 33ddb46..7e20428 100644
--- a/src/declarative/util/qdeclarativeanimation.cpp
+++ b/src/declarative/util/qdeclarativeanimation.cpp
@@ -44,6 +44,7 @@
#include "private/qdeclarativebehavior_p.h"
#include "private/qdeclarativestateoperations_p.h"
+#include "private/qdeclarativecontext_p.h"
#include <qdeclarativepropertyvaluesource.h>
#include <qdeclarative.h>
@@ -767,6 +768,7 @@ void QDeclarativeScriptAction::setStateChangeScriptName(const QString &name)
void QDeclarativeScriptActionPrivate::execute()
{
+ Q_Q(QDeclarativeScriptAction);
if (hasRunScriptScript && reversing)
return;
@@ -775,7 +777,12 @@ void QDeclarativeScriptActionPrivate::execute()
const QString &str = scriptStr.script();
if (!str.isEmpty()) {
QDeclarativeExpression expr(scriptStr.context(), str, scriptStr.scopeObject());
+ QDeclarativeData *ddata = QDeclarativeData::get(q);
+ if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
+ expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
expr.value();
+ if (expr.hasError())
+ qWarning() << expr.error();
}
}
diff --git a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
index 3c0a086..d91b107 100644
--- a/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
+++ b/src/declarative/util/qdeclarativelistmodelworkeragent.cpp
@@ -41,7 +41,7 @@
#include "private/qdeclarativelistmodelworkeragent_p.h"
#include "private/qdeclarativelistmodel_p_p.h"
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
#include "private/qdeclarativeengine_p.h"
#include "qdeclarativeinfo.h"
diff --git a/src/declarative/util/qdeclarativeopenmetaobject.cpp b/src/declarative/util/qdeclarativeopenmetaobject.cpp
index 3d95125..0e5aaa6 100644
--- a/src/declarative/util/qdeclarativeopenmetaobject.cpp
+++ b/src/declarative/util/qdeclarativeopenmetaobject.cpp
@@ -41,7 +41,7 @@
#include "private/qdeclarativeopenmetaobject_p.h"
#include "private/qdeclarativepropertycache_p.h"
-#include "private/qdeclarativedeclarativedata_p.h"
+#include "private/qdeclarativedata_p.h"
#include <qmetaobjectbuilder_p.h>
#include <qdebug.h>
@@ -302,7 +302,7 @@ void QDeclarativeOpenMetaObject::setCached(bool c)
d->cacheProperties = c;
- QDeclarativeDeclarativeData *qmldata = QDeclarativeDeclarativeData::get(d->object, true);
+ QDeclarativeData *qmldata = QDeclarativeData::get(d->object, true);
if (d->cacheProperties) {
if (!d->type->d->cache)
d->type->d->cache = QDeclarativePropertyCache::create(d->type->d->engine, this);
diff --git a/src/declarative/util/qdeclarativepixmapcache.cpp b/src/declarative/util/qdeclarativepixmapcache.cpp
index 5e60819..dbca326 100644
--- a/src/declarative/util/qdeclarativepixmapcache.cpp
+++ b/src/declarative/util/qdeclarativepixmapcache.cpp
@@ -194,8 +194,8 @@ static bool readImage(const QUrl& url, QIODevice *dev, QImage *image, QString *e
return true;
} else {
if (errorString)
- *errorString = QLatin1String("Error decoding: ") + url.toString()
- + QLatin1String(" \"") + imgio.errorString() + QLatin1String("\"");
+ *errorString = QDeclarativePixmapCache::tr("Error decoding: %1: %2").arg(url.toString())
+ .arg(imgio.errorString());
return false;
}
}
@@ -264,7 +264,7 @@ bool QDeclarativeImageRequestHandler::event(QEvent *event)
QString errorStr;
if (image.isNull()) {
errorCode = QDeclarativeImageReaderEvent::Loading;
- errorStr = QLatin1String("Failed to get image from provider: ") + url.toString();
+ errorStr = QDeclarativePixmapCache::tr("Failed to get image from provider: %1").arg(url.toString());
}
QCoreApplication::postEvent(runningJob, new QDeclarativeImageReaderEvent(errorCode, errorStr, image));
} else {
@@ -283,7 +283,7 @@ bool QDeclarativeImageRequestHandler::event(QEvent *event)
errorCode = QDeclarativeImageReaderEvent::Loading;
}
} else {
- errorStr = QLatin1String("Cannot open: ") + url.toString();
+ errorStr = QDeclarativePixmapCache::tr("Cannot open: %1").arg(url.toString());
errorCode = QDeclarativeImageReaderEvent::Loading;
}
QCoreApplication::postEvent(runningJob, new QDeclarativeImageReaderEvent(errorCode, errorStr, image));
@@ -460,6 +460,7 @@ public:
bool loading;
QDeclarativeImageReader *reader;
int forced_width, forced_height;
+ QString errorString;
};
@@ -511,7 +512,7 @@ bool QDeclarativePixmapReply::event(QEvent *event)
if (d->status == Ready)
d->pixmap = QPixmap::fromImage(de->image);
else
- qWarning() << de->errorString;
+ d->errorString = de->errorString;
QByteArray key = d->url.toEncoded(QUrl::FormattingOption(0x100));
QString strKey = QString::fromLatin1(key.constData(), key.count());
QPixmapCache::insert(strKey, d->pixmap); // note: may fail (returns false)
@@ -523,6 +524,12 @@ bool QDeclarativePixmapReply::event(QEvent *event)
return QObject::event(event);
}
+QString QDeclarativePixmapReply::errorString() const
+{
+ Q_D(const QDeclarativePixmapReply);
+ return d->errorString;
+}
+
QDeclarativePixmapReply::Status QDeclarativePixmapReply::status() const
{
Q_D(const QDeclarativePixmapReply);
@@ -586,7 +593,7 @@ bool QDeclarativePixmapReply::release(bool defer)
Note that images sourced from the network will always be loaded and
decoded asynchonously.
*/
-QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QPixmap *pixmap, QSize *impsize, bool async, int req_width, int req_height)
+QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QPixmap *pixmap, QString *errorString, QSize *impsize, bool async, int req_width, int req_height)
{
QDeclarativePixmapReply::Status status = QDeclarativePixmapReply::Unrequested;
QByteArray key = url.toEncoded(QUrl::FormattingOption(0x100));
@@ -609,17 +616,16 @@ QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QP
QFile f(lf);
QSize read_impsize;
if (f.open(QIODevice::ReadOnly)) {
- QString errorString;
QImage image;
- if (readImage(url, &f, &image, &errorString, &read_impsize, req_width, req_height)) {
+ if (readImage(url, &f, &image, errorString, &read_impsize, req_width, req_height)) {
*pixmap = QPixmap::fromImage(image);
} else {
- qWarning() << errorString;
*pixmap = QPixmap();
status = QDeclarativePixmapReply::Error;
}
} else {
- qWarning() << "Cannot open" << url;
+ if (errorString)
+ *errorString = tr("Cannot open: %1").arg(url.toString());
*pixmap = QPixmap();
status = QDeclarativePixmapReply::Error;
}
@@ -650,9 +656,15 @@ QDeclarativePixmapReply::Status QDeclarativePixmapCache::get(const QUrl& url, QP
} else if (QPixmapCache::find(strKey, pixmap)) {
if (iter != qmlActivePixmapReplies()->end()) {
status = (*iter)->status();
+ if (errorString)
+ *errorString = (*iter)->errorString();
(*iter)->release();
+ } else if (pixmap->isNull()) {
+ status = QDeclarativePixmapReply::Error;
+ if (errorString)
+ *errorString = tr("Unknown Error loading %1").arg(url.toString());
} else {
- status = pixmap->isNull() ? QDeclarativePixmapReply::Error : QDeclarativePixmapReply::Ready;
+ status = QDeclarativePixmapReply::Ready;
}
} else if (iter != qmlActivePixmapReplies()->end()) {
status = QDeclarativePixmapReply::Loading;
diff --git a/src/declarative/util/qdeclarativepixmapcache_p.h b/src/declarative/util/qdeclarativepixmapcache_p.h
index df71d65..33d9de1 100644
--- a/src/declarative/util/qdeclarativepixmapcache_p.h
+++ b/src/declarative/util/qdeclarativepixmapcache_p.h
@@ -45,6 +45,7 @@
#include <QtCore/QString>
#include <QtGui/QPixmap>
#include <QtCore/qurl.h>
+#include <QtCore/QCoreApplication>
QT_BEGIN_HEADER
@@ -64,6 +65,7 @@ public:
enum Status { Ready, Error, Unrequested, Loading };
Status status() const;
+ QString errorString() const;
const QUrl &url() const;
int forcedWidth() const;
@@ -94,8 +96,9 @@ private:
class Q_DECLARATIVE_EXPORT QDeclarativePixmapCache
{
+ Q_DECLARE_TR_FUNCTIONS(QDeclarativePixmapCache)
public:
- static QDeclarativePixmapReply::Status get(const QUrl& url, QPixmap *pixmap, QSize *impsize=0, bool async=false, int req_width=0, int req_height=0);
+ static QDeclarativePixmapReply::Status get(const QUrl& url, QPixmap *pixmap, QString *errorString, QSize *impsize=0, bool async=false, int req_width=0, int req_height=0);
static QDeclarativePixmapReply *request(QDeclarativeEngine *, const QUrl& url, int req_width=0, int req_height=0);
static void cancel(const QUrl& url, QObject *obj);
static int pendingRequests();
diff --git a/src/declarative/util/qdeclarativestateoperations.cpp b/src/declarative/util/qdeclarativestateoperations.cpp
index 410a269..3854b10 100644
--- a/src/declarative/util/qdeclarativestateoperations.cpp
+++ b/src/declarative/util/qdeclarativestateoperations.cpp
@@ -49,6 +49,7 @@
#include <qdeclarativeitem_p.h>
#include <qdeclarativeguard_p.h>
#include <qdeclarativenullablevalue_p_p.h>
+#include "private/qdeclarativecontext_p.h"
#include <QtCore/qdebug.h>
#include <QtGui/qgraphicsitem.h>
@@ -571,7 +572,12 @@ void QDeclarativeStateChangeScript::execute()
const QString &script = d->script.script();
if (!script.isEmpty()) {
QDeclarativeExpression expr(d->script.context(), script, d->script.scopeObject());
+ QDeclarativeData *ddata = QDeclarativeData::get(this);
+ if (ddata && ddata->outerContext && !ddata->outerContext->url.isEmpty())
+ expr.setSourceLocation(ddata->outerContext->url.toString(), ddata->lineNumber);
expr.value();
+ if (expr.hasError())
+ qWarning() << expr.error();
}
}
diff --git a/src/gui/dialogs/qpagesetupdialog_mac.mm b/src/gui/dialogs/qpagesetupdialog_mac.mm
index 13ffa05..cfcde0f 100644
--- a/src/gui/dialogs/qpagesetupdialog_mac.mm
+++ b/src/gui/dialogs/qpagesetupdialog_mac.mm
@@ -232,6 +232,11 @@ void QPageSetupDialogPrivate::openCocoaPageLayout(Qt::WindowModality modality)
void QPageSetupDialogPrivate::closeCocoaPageLayout()
{
+ // NSPageLayout can change the session behind our back and then our
+ // d->ep->session object will become a dangling pointer. Update it
+ // based on the "current" session
+ ep->session = static_cast<PMPrintSession>([ep->printInfo PMPrintSession]);
+
[pageLayout release];
pageLayout = 0;
}
diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp
index 6f215cc..0fe5cbe 100644
--- a/src/gui/egl/qegl.cpp
+++ b/src/gui/egl/qegl.cpp
@@ -326,10 +326,17 @@ EGLSurface QEglContext::createSurface(QPaintDevice* device, const QEglProperties
bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties *properties)
{
// We need to select the correct API before calling eglCreateContext().
+#ifdef QT_OPENGL_ES
#ifdef EGL_OPENGL_ES_API
if (apiType == QEgl::OpenGL)
eglBindAPI(EGL_OPENGL_ES_API);
#endif
+#else
+#ifdef EGL_OPENGL_API
+ if (apiType == QEgl::OpenGL)
+ eglBindAPI(EGL_OPENGL_API);
+#endif
+#endif //defined(QT_OPENGL_ES)
#ifdef EGL_OPENVG_API
if (apiType == QEgl::OpenVG)
eglBindAPI(EGL_OPENVG_API);
@@ -339,7 +346,7 @@ bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties
QEglProperties contextProps;
if (properties)
contextProps = *properties;
-#if defined(QT_OPENGL_ES_2)
+#ifdef QT_OPENGL_ES_2
if (apiType == QEgl::OpenGL)
contextProps.setValue(EGL_CONTEXT_CLIENT_VERSION, 2);
#endif
@@ -528,10 +535,14 @@ QEglProperties QEglContext::configProperties() const
return QEglProperties(config());
}
-#if (defined(EGL_KHR_image) || defined(EGL_KHR_image_base)) && !defined(EGL_EGLEXT_PROTOTYPES)
-_eglCreateImageKHR eglCreateImageKHR = 0;
-_eglDestroyImageKHR eglDestroyImageKHR = 0;
-#endif
+
+typedef EGLImageKHR (EGLAPIENTRY *_eglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, const EGLint*);
+typedef EGLBoolean (EGLAPIENTRY *_eglDestroyImageKHR)(EGLDisplay, EGLImageKHR);
+
+// Defined in qegl.cpp:
+static _eglCreateImageKHR qt_eglCreateImageKHR = 0;
+static _eglDestroyImageKHR qt_eglDestroyImageKHR = 0;
+
EGLDisplay QEgl::display()
{
@@ -558,8 +569,8 @@ EGLDisplay QEgl::display()
// Resolve the egl extension function pointers:
#if (defined(EGL_KHR_image) || defined(EGL_KHR_image_base)) && !defined(EGL_EGLEXT_PROTOTYPES)
if (QEgl::hasExtension("EGL_KHR_image") || QEgl::hasExtension("EGL_KHR_image_base")) {
- eglCreateImageKHR = (_eglCreateImageKHR) eglGetProcAddress("eglCreateImageKHR");
- eglDestroyImageKHR = (_eglDestroyImageKHR) eglGetProcAddress("eglDestroyImageKHR");
+ qt_eglCreateImageKHR = (_eglCreateImageKHR) eglGetProcAddress("eglCreateImageKHR");
+ qt_eglDestroyImageKHR = (_eglDestroyImageKHR) eglGetProcAddress("eglDestroyImageKHR");
}
#endif
}
@@ -567,6 +578,33 @@ EGLDisplay QEgl::display()
return dpy;
}
+EGLImageKHR QEgl::eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list)
+{
+ if (qt_eglCreateImageKHR)
+ return qt_eglCreateImageKHR(dpy, ctx, target, buffer, attrib_list);
+
+ QEgl::display(); // Initialises function pointers
+ if (qt_eglCreateImageKHR)
+ return qt_eglCreateImageKHR(dpy, ctx, target, buffer, attrib_list);
+
+ qWarning("QEgl::eglCreateImageKHR() called but EGL_KHR_image(_base) extension not present");
+ return 0;
+}
+
+EGLBoolean QEgl::eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR img)
+{
+ if (qt_eglDestroyImageKHR)
+ return qt_eglDestroyImageKHR(dpy, img);
+
+ QEgl::display(); // Initialises function pointers
+ if (qt_eglDestroyImageKHR)
+ return qt_eglDestroyImageKHR(dpy, img);
+
+ qWarning("QEgl::eglDestroyImageKHR() called but EGL_KHR_image(_base) extension not present");
+ return 0;
+}
+
+
#ifndef Q_WS_X11
EGLSurface QEgl::createSurface(QPaintDevice *device, EGLConfig cfg, const QEglProperties *properties)
{
diff --git a/src/gui/egl/qegl_p.h b/src/gui/egl/qegl_p.h
index f81add6..6345d5d 100644
--- a/src/gui/egl/qegl_p.h
+++ b/src/gui/egl/qegl_p.h
@@ -147,20 +147,6 @@ typedef void *EGLImageKHR;
#define EGL_KHR_image_pixmap
#endif
-// It is possible that something has included eglext.h (like Symbian 10.1's broken egl.h), in
-// which case, EGL_KHR_image/EGL_KHR_image_base will be defined. They may have also defined
-// the actual function prototypes, but generally EGL_EGLEXT_PROTOTYPES will be defined in that
-// case and we shouldn't re-define them here.
-#if (defined(EGL_KHR_image) || defined(EGL_KHR_image_base)) && !defined(EGL_EGLEXT_PROTOTYPES)
-typedef EGLImageKHR (EGLAPIENTRY *_eglCreateImageKHR)(EGLDisplay, EGLContext, EGLenum, EGLClientBuffer, EGLint*);
-typedef EGLBoolean (EGLAPIENTRY *_eglDestroyImageKHR)(EGLDisplay, EGLImageKHR);
-
-// Defined in qegl.cpp:
-extern Q_GUI_EXPORT _eglCreateImageKHR eglCreateImageKHR;
-extern Q_GUI_EXPORT _eglDestroyImageKHR eglDestroyImageKHR;
-#endif // (defined(EGL_KHR_image) || defined(EGL_KHR_image_base)) && !defined(EGL_EGLEXT_PROTOTYPES)
-
-
class QEglProperties;
@@ -210,6 +196,10 @@ namespace QEgl {
Q_GUI_EXPORT EGLNativeWindowType nativeWindow(QWidget*);
Q_GUI_EXPORT EGLNativePixmapType nativePixmap(QPixmap*);
+ // Extension functions
+ Q_GUI_EXPORT EGLImageKHR eglCreateImageKHR(EGLDisplay dpy, EGLContext ctx, EGLenum target, EGLClientBuffer buffer, const EGLint *attrib_list);
+ Q_GUI_EXPORT EGLBoolean eglDestroyImageKHR(EGLDisplay dpy, EGLImageKHR img);
+
#ifdef Q_WS_X11
Q_GUI_EXPORT VisualID getCompatibleVisualId(EGLConfig config);
#endif
diff --git a/src/gui/egl/qegl_x11.cpp b/src/gui/egl/qegl_x11.cpp
index 5341ea1..cb8dcda 100644
--- a/src/gui/egl/qegl_x11.cpp
+++ b/src/gui/egl/qegl_x11.cpp
@@ -210,6 +210,11 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config)
}
XFree(chosenVisualInfo);
}
+#ifdef QT_DEBUG_X11_VISUAL_SELECTION
+ else
+ qDebug("EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId);
+#endif
+
if (visualId) {
#ifdef QT_DEBUG_X11_VISUAL_SELECTION
if (configAlphaSize > 0)
@@ -263,6 +268,11 @@ VisualID QEgl::getCompatibleVisualId(EGLConfig config)
# endif // QT_DEBUG_X11_VISUAL_SELECTION
return visualId;
}
+# ifdef QT_DEBUG_X11_VISUAL_SELECTION
+ else
+ qDebug("Failed to find an XVisual which matches EGL config %d using XRender", configId);
+# endif // QT_DEBUG_X11_VISUAL_SELECTION
+
#endif //!defined(QT_NO_XRENDER)
diff --git a/src/gui/egl/qeglproperties.cpp b/src/gui/egl/qeglproperties.cpp
index b5d3103..b34d2c3 100644
--- a/src/gui/egl/qeglproperties.cpp
+++ b/src/gui/egl/qeglproperties.cpp
@@ -80,19 +80,19 @@ int QEglProperties::value(int name) const
case EGL_GREEN_SIZE: return 0;
case EGL_BLUE_SIZE: return 0;
case EGL_ALPHA_SIZE: return 0;
-#if defined(EGL_LUMINANCE_SIZE)
+#ifdef EGL_LUMINANCE_SIZE
case EGL_LUMINANCE_SIZE: return 0;
#endif
-#if defined(EGL_ALPHA_MASK_SIZE)
+#ifdef EGL_ALPHA_MASK_SIZE
case EGL_ALPHA_MASK_SIZE: return 0;
#endif
-#if defined(EGL_BIND_TO_TEXTURE_RGB)
+#ifdef EGL_BIND_TO_TEXTURE_RGB
case EGL_BIND_TO_TEXTURE_RGB: return EGL_DONT_CARE;
#endif
-#if defined(EGL_BIND_TO_TEXTURE_RGBA)
+#ifdef EGL_BIND_TO_TEXTURE_RGBA
case EGL_BIND_TO_TEXTURE_RGBA: return EGL_DONT_CARE;
#endif
-#if defined(EGL_COLOR_BUFFER_TYPE)
+#ifdef EGL_COLOR_BUFFER_TYPE
case EGL_COLOR_BUFFER_TYPE: return EGL_RGB_BUFFER;
#endif
case EGL_CONFIG_CAVEAT: return EGL_DONT_CARE;
@@ -103,7 +103,7 @@ int QEglProperties::value(int name) const
case EGL_NATIVE_VISUAL_TYPE: return EGL_DONT_CARE;
case EGL_MAX_SWAP_INTERVAL: return EGL_DONT_CARE;
case EGL_MIN_SWAP_INTERVAL: return EGL_DONT_CARE;
-#if defined(EGL_RENDERABLE_TYPE)
+#ifdef EGL_RENDERABLE_TYPE
case EGL_RENDERABLE_TYPE: return EGL_OPENGL_ES_BIT;
#endif
case EGL_SAMPLE_BUFFERS: return 0;
@@ -115,7 +115,7 @@ int QEglProperties::value(int name) const
case EGL_TRANSPARENT_GREEN_VALUE: return EGL_DONT_CARE;
case EGL_TRANSPARENT_BLUE_VALUE: return EGL_DONT_CARE;
-#if defined(EGL_VERSION_1_3)
+#ifdef EGL_VERSION_1_3
case EGL_CONFORMANT: return 0;
case EGL_MATCH_NATIVE_PIXMAP: return EGL_NONE;
#endif
@@ -215,15 +215,18 @@ void QEglProperties::setPixelFormat(QImage::Format pixelFormat)
void QEglProperties::setRenderableType(QEgl::API api)
{
-#if defined(EGL_RENDERABLE_TYPE)
+#ifdef EGL_RENDERABLE_TYPE
#if defined(QT_OPENGL_ES_2)
if (api == QEgl::OpenGL)
setValue(EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT);
#elif defined(QT_OPENGL_ES)
if (api == QEgl::OpenGL)
setValue(EGL_RENDERABLE_TYPE, EGL_OPENGL_ES_BIT);
+#elif defined(EGL_OPENGL_BIT)
+ if (api == QEgl::OpenGL)
+ setValue(EGL_RENDERABLE_TYPE, EGL_OPENGL_BIT);
#endif
-#if defined(EGL_OPENVG_BIT)
+#ifdef EGL_OPENVG_BIT
if (api == QEgl::OpenVG)
setValue(EGL_RENDERABLE_TYPE, EGL_OPENVG_BIT);
#endif
@@ -272,7 +275,7 @@ bool QEglProperties::reduceConfiguration()
return true;
if (removeValue(EGL_DEPTH_SIZE))
return true;
-#if defined(EGL_BIND_TO_TEXTURE_RGB)
+#ifdef EGL_BIND_TO_TEXTURE_RGB
if (removeValue(EGL_BIND_TO_TEXTURE_RGB))
return true;
#endif
@@ -327,6 +330,10 @@ QString QEglProperties::toString() const
if ((val & EGL_OPENGL_ES2_BIT) != 0)
types += QLatin1String("es2");
#endif
+#ifdef EGL_OPENGL_BIT
+ if ((val & EGL_OPENGL_BIT) != 0)
+ types += QLatin1String("gl");
+#endif
if ((val & EGL_OPENVG_BIT) != 0)
types += QLatin1String("vg");
if ((val & ~7) != 0)
diff --git a/src/gui/graphicsview/qgraphicsitem.cpp b/src/gui/graphicsview/qgraphicsitem.cpp
index 9e0ec2e..9759b39 100644
--- a/src/gui/graphicsview/qgraphicsitem.cpp
+++ b/src/gui/graphicsview/qgraphicsitem.cpp
@@ -1413,7 +1413,7 @@ QGraphicsItem::~QGraphicsItem()
QObjectPrivate *p = QObjectPrivate::get(o);
p->wasDeleted = true;
if (p->declarativeData) {
- QDeclarativeData::destroyed(p->declarativeData, o);
+ QAbstractDeclarativeData::destroyed(p->declarativeData, o);
p->declarativeData = 0;
}
}
diff --git a/src/gui/itemviews/qlistview.cpp b/src/gui/itemviews/qlistview.cpp
index 39ca75a..1869093 100644
--- a/src/gui/itemviews/qlistview.cpp
+++ b/src/gui/itemviews/qlistview.cpp
@@ -1853,14 +1853,14 @@ void QCommonListViewBase::updateHorizontalScrollBar(const QSize &step)
{
horizontalScrollBar()->setSingleStep(step.width() + spacing());
horizontalScrollBar()->setPageStep(viewport()->width());
- horizontalScrollBar()->setRange(0, contentsSize.width() - viewport()->width() - 2 * spacing());
+ horizontalScrollBar()->setRange(0, contentsSize.width() - viewport()->width());
}
void QCommonListViewBase::updateVerticalScrollBar(const QSize &step)
{
verticalScrollBar()->setSingleStep(step.height() + spacing());
verticalScrollBar()->setPageStep(viewport()->height());
- verticalScrollBar()->setRange(0, contentsSize.height() - viewport()->height() - 2 * spacing());
+ verticalScrollBar()->setRange(0, contentsSize.height() - viewport()->height());
}
void QCommonListViewBase::scrollContentsBy(int dx, int dy, bool /*scrollElasticBand*/)
@@ -2276,6 +2276,7 @@ void QListModeViewBase::doStaticLayout(const QListViewLayoutInfo &info)
const QPoint topLeft = initStaticLayout(info);
QStyleOptionViewItemV4 option = viewOptions();
option.rect = info.bounds;
+ option.rect.adjust(info.spacing, info.spacing, -info.spacing, -info.spacing);
// The static layout data structures are as follows:
// One vector contains the coordinate in the direction of layout flow.
@@ -2905,8 +2906,13 @@ void QIconModeViewBase::doDynamicLayout(const QListViewLayoutInfo &info)
batchStartRow = info.last + 1;
bool done = (info.last >= rowCount() - 1);
// resize the content area
- if (done || !info.bounds.contains(item->rect()))
- contentsSize = QSize(rect.width(), rect.height());
+ if (done || !info.bounds.contains(item->rect())) {
+ contentsSize = rect.size();
+ if (info.flow == QListView::LeftToRight)
+ contentsSize.rheight() += info.spacing;
+ else
+ contentsSize.rwidth() += info.spacing;
+ }
// resize tree
int insertFrom = info.first;
if (done || info.first == 0) {
diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp
index 5f5e29f..62e99e9 100644
--- a/src/gui/kernel/qapplication.cpp
+++ b/src/gui/kernel/qapplication.cpp
@@ -186,9 +186,11 @@ QApplicationPrivate::QApplicationPrivate(int &argc, char **argv, QApplication::T
gestureManager = 0;
gestureWidget = 0;
+#if defined(Q_WS_X11) || defined(Q_WS_WIN)
move_cursor = 0;
copy_cursor = 0;
link_cursor = 0;
+#endif
#if defined(Q_WS_WIN)
ignore_cursor = 0;
#endif
@@ -1043,9 +1045,11 @@ QApplication::~QApplication()
qt_clipboard = 0;
#endif
+#if defined(Q_WS_X11) || defined(Q_WS_WIN)
delete d->move_cursor; d->move_cursor = 0;
delete d->copy_cursor; d->copy_cursor = 0;
delete d->link_cursor; d->link_cursor = 0;
+#endif
#if defined(Q_WS_WIN)
delete d->ignore_cursor; d->ignore_cursor = 0;
#endif
@@ -5932,6 +5936,7 @@ static const char * const link_xpm[] = {
QPixmap QApplicationPrivate::getPixmapCursor(Qt::CursorShape cshape)
{
+#if defined(Q_WS_X11) || defined(Q_WS_WIN)
if (!move_cursor) {
move_cursor = new QPixmap((const char **)move_xpm);
copy_cursor = new QPixmap((const char **)copy_xpm);
@@ -5955,6 +5960,7 @@ QPixmap QApplicationPrivate::getPixmapCursor(Qt::CursorShape cshape)
default:
break;
}
+#endif
return QPixmap();
}
diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h
index 6d71cfe..01abe54 100644
--- a/src/gui/kernel/qapplication_p.h
+++ b/src/gui/kernel/qapplication_p.h
@@ -520,9 +520,11 @@ public:
QGestureManager *gestureManager;
QWidget *gestureWidget;
+#if defined(Q_WS_X11) || defined(Q_WS_WIN)
QPixmap *move_cursor;
QPixmap *copy_cursor;
QPixmap *link_cursor;
+#endif
#if defined(Q_WS_WIN)
QPixmap *ignore_cursor;
#endif
diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp
index 4fba8cf..10fa4b9 100644
--- a/src/gui/kernel/qwidget.cpp
+++ b/src/gui/kernel/qwidget.cpp
@@ -1478,7 +1478,7 @@ QWidget::~QWidget()
QObjectPrivate::clearGuards(this);
if (d->declarativeData) {
- QDeclarativeData::destroyed(d->declarativeData, this);
+ QAbstractDeclarativeData::destroyed(d->declarativeData, this);
d->declarativeData = 0; // don't activate again in ~QObject
}
diff --git a/src/gui/painting/qpaintbuffer.cpp b/src/gui/painting/qpaintbuffer.cpp
index e1156dc..9077eba 100644
--- a/src/gui/painting/qpaintbuffer.cpp
+++ b/src/gui/painting/qpaintbuffer.cpp
@@ -312,6 +312,7 @@ int QPaintBuffer::processCommands(QPainter *painter, int begin, int end) const
return depth;
}
+#ifndef QT_NO_DEBUG_STREAM
QString QPaintBuffer::commandDescription(int command) const
{
QString desc;
@@ -563,6 +564,7 @@ QString QPaintBuffer::commandDescription(int command) const
return desc;
}
+#endif
QRectF QPaintBuffer::boundingRect() const
{
diff --git a/src/gui/painting/qpaintbuffer_p.h b/src/gui/painting/qpaintbuffer_p.h
index 4576947..e4fe4bf 100644
--- a/src/gui/painting/qpaintbuffer_p.h
+++ b/src/gui/painting/qpaintbuffer_p.h
@@ -82,7 +82,9 @@ public:
int frameStartIndex(int frame) const;
int frameEndIndex(int frame) const;
int processCommands(QPainter *painter, int begin, int end) const;
+#ifndef QT_NO_DEBUG_STREAM
QString commandDescription(int command) const;
+#endif
void setBoundingRect(const QRectF &rect);
QRectF boundingRect() const;
diff --git a/src/gui/painting/qprintengine_mac.mm b/src/gui/painting/qprintengine_mac.mm
index 3d5d1d5..a548225 100644
--- a/src/gui/painting/qprintengine_mac.mm
+++ b/src/gui/painting/qprintengine_mac.mm
@@ -114,8 +114,11 @@ bool QMacPrintEngine::end()
Q_D(QMacPrintEngine);
if (d->state == QPrinter::Aborted)
return true; // I was just here a function call ago :)
- if(d->paintEngine->type() == QPaintEngine::CoreGraphics)
+ if(d->paintEngine->type() == QPaintEngine::CoreGraphics) {
+ // We dont need the paint engine to call restoreGraphicsState()
+ static_cast<QCoreGraphicsPaintEngine*>(d->paintEngine)->d_func()->stackCount = 0;
static_cast<QCoreGraphicsPaintEngine*>(d->paintEngine)->d_func()->hd = 0;
+ }
d->paintEngine->end();
if (d->state != QPrinter::Idle)
d->releaseSession();
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index a9def8e..449dffd 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -1368,7 +1368,7 @@ QFontEngineFT::QGlyphSet *QFontEngineFT::loadTransformedGlyphSet(const QTransfor
if (!gs) {
// don't try to load huge fonts
- bool draw_as_outline = fontDef.pixelSize * qSqrt(matrix.det()) >= 64;
+ bool draw_as_outline = fontDef.pixelSize * qSqrt(qAbs(matrix.det())) >= 64;
if (draw_as_outline)
return 0;
diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp
index 6c504a7..8027389 100644
--- a/src/gui/text/qstatictext.cpp
+++ b/src/gui/text/qstatictext.cpp
@@ -363,7 +363,7 @@ QSizeF QStaticText::size() const
}
QStaticTextPrivate::QStaticTextPrivate()
- : items(0), itemCount(0), glyphPool(0), positionPool(0), textWidth(-1.0),
+ : textWidth(-1.0), items(0), itemCount(0), glyphPool(0), positionPool(0),
needsRelayout(true), useBackendOptimizations(false), textFormat(Qt::AutoText)
{
}
@@ -584,11 +584,13 @@ void QStaticTextPrivate::paintText(const QPointF &topLeftPosition, QPainter *p)
textLayout.draw(p, topLeftPosition);
} else {
QTextDocument document;
+#ifndef QT_NO_CSSPARSER
QColor color = p->pen().color();
document.setDefaultStyleSheet(QString::fromLatin1("body { color: #%1%2%3 }")
.arg(QString::number(color.red(), 16), 2, QLatin1Char('0'))
.arg(QString::number(color.green(), 16), 2, QLatin1Char('0'))
.arg(QString::number(color.blue(), 16), 2, QLatin1Char('0')));
+#endif
document.setDefaultFont(font);
document.setDocumentMargin(0.0);
if (textWidth >= 0.0)
diff --git a/src/imports/particles/qdeclarativeparticles.cpp b/src/imports/particles/qdeclarativeparticles.cpp
index d17a8a1..264cba2 100644
--- a/src/imports/particles/qdeclarativeparticles.cpp
+++ b/src/imports/particles/qdeclarativeparticles.cpp
@@ -41,6 +41,7 @@
#include "qdeclarativeparticles_p.h"
+#include <qdeclarativeinfo.h>
#include <private/qdeclarativeitem_p.h>
#include <private/qdeclarativepixmapcache_p.h>
@@ -730,7 +731,9 @@ void QDeclarativeParticles::imageLoaded()
{
Q_D(QDeclarativeParticles);
d->pendingPixmapCache = false;
- QDeclarativePixmapCache::get(d->url, &d->image);
+ QString errorString;
+ if (QDeclarativePixmapCache::get(d->url, &d->image, &errorString)==QDeclarativePixmapReply::Error)
+ qmlInfo(this) << errorString;
d->paintItem->updateSize();
d->paintItem->update();
}
@@ -754,12 +757,15 @@ void QDeclarativeParticles::setSource(const QUrl &name)
} else {
d->url = name;
Q_ASSERT(!name.isRelative());
- QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->image);
+ QString errorString;
+ QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(d->url, &d->image, &errorString);
if (status != QDeclarativePixmapReply::Ready && status != QDeclarativePixmapReply::Error) {
QDeclarativePixmapReply *reply = QDeclarativePixmapCache::request(qmlEngine(this), d->url);
connect(reply, SIGNAL(finished()), this, SLOT(imageLoaded()));
d->pendingPixmapCache = true;
} else {
+ if (status == QDeclarativePixmapReply::Error)
+ qmlInfo(this) << errorString;
//### unify with imageLoaded
d->paintItem->updateSize();
d->paintItem->update();
diff --git a/src/multimedia/base/qgraphicsvideoitem.cpp b/src/multimedia/base/qgraphicsvideoitem.cpp
index f903eb7..c50d3ff 100644
--- a/src/multimedia/base/qgraphicsvideoitem.cpp
+++ b/src/multimedia/base/qgraphicsvideoitem.cpp
@@ -52,6 +52,8 @@
#include <QtOpenGL/qgl.h>
#endif
+#ifndef QT_NO_GRAPHICSVIEW
+
QT_BEGIN_NAMESPACE
@@ -434,4 +436,7 @@ bool QGraphicsVideoItem::sceneEvent(QEvent *event)
}
QT_END_NAMESPACE
+
+#endif // QT_NO_GRAPHICSVIEW
+
#include "moc_qgraphicsvideoitem.cpp"
diff --git a/src/multimedia/base/qgraphicsvideoitem.h b/src/multimedia/base/qgraphicsvideoitem.h
index e6f0d81..a20caf3 100644
--- a/src/multimedia/base/qgraphicsvideoitem.h
+++ b/src/multimedia/base/qgraphicsvideoitem.h
@@ -46,6 +46,7 @@
#include <QtMultimedia/qvideowidget.h>
+#if !defined(QT_NO_GRAPHICSVIEW) || (QT_EDITION & QT_MODULE_GRAPHICSVIEW) != QT_MODULE_GRAPHICSVIEW
QT_BEGIN_HEADER
@@ -109,4 +110,6 @@ QT_END_NAMESPACE
QT_END_HEADER
+#endif // QT_NO_GRAPHICSVIEW
+
#endif
diff --git a/src/multimedia/playback/qmediaplayer.cpp b/src/multimedia/playback/qmediaplayer.cpp
index 9466cad..6b2e0f9 100644
--- a/src/multimedia/playback/qmediaplayer.cpp
+++ b/src/multimedia/playback/qmediaplayer.cpp
@@ -145,7 +145,9 @@ public:
QMediaPlaylist *playlist;
QPointer<QVideoWidget> videoWidget;
+#ifndef QT_NO_GRAPHICSVIEW
QPointer<QGraphicsVideoItem> videoItem;
+#endif
void _q_stateChanged(QMediaPlayer::State state);
void _q_mediaStatusChanged(QMediaPlayer::MediaStatus status);
@@ -618,26 +620,36 @@ void QMediaPlayer::bind(QObject *obj)
}
QVideoWidget *videoWidget = qobject_cast<QVideoWidget*>(obj);
+#ifndef QT_NO_GRAPHICSVIEW
QGraphicsVideoItem *videoItem = qobject_cast<QGraphicsVideoItem*>(obj);
+#endif
- if (videoWidget || videoItem) {
+ if (videoWidget
+#ifndef QT_NO_GRAPHICSVIEW
+ || videoItem
+#endif
+ ) {
//detach the current video output
if (d->videoWidget) {
d->videoWidget->setMediaObject(0);
d->videoWidget = 0;
}
+#ifndef QT_NO_GRAPHICSVIEW
if (d->videoItem) {
d->videoItem->setMediaObject(0);
d->videoItem = 0;
}
+#endif
}
if (videoWidget)
d->videoWidget = videoWidget;
+#ifndef QT_NO_GRAPHICSVIEW
if (videoItem)
d->videoItem = videoItem;
+#endif
}
}
@@ -651,8 +663,10 @@ void QMediaPlayer::unbind(QObject *obj)
if (obj == d->videoWidget) {
d->videoWidget = 0;
+#ifndef QT_NO_GRAPHICSVIEW
} else if (obj == d->videoItem) {
d->videoItem = 0;
+#endif
} else if (obj == d->playlist) {
disconnect(d->playlist, SIGNAL(currentMediaChanged(QMediaContent)),
this, SLOT(_q_updateMedia(QMediaContent)));
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index 0cc7430..c89d34f 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -516,6 +516,8 @@ void QGL2PaintEngineEx::beginNativePainting()
ensureActive();
d->transferMode(BrushDrawingMode);
+ d->nativePaintingActive = true;
+
QGLContext *ctx = d->ctx;
glUseProgram(0);
@@ -583,6 +585,12 @@ void QGL2PaintEngineEx::endNativePainting()
{
Q_D(QGL2PaintEngineEx);
d->needsSync = true;
+ d->nativePaintingActive = false;
+}
+
+bool QGL2PaintEngineEx::isNativePaintingActive() const {
+ Q_D(const QGL2PaintEngineEx);
+ return d->nativePaintingActive;
}
void QGL2PaintEngineExPrivate::transferMode(EngineMode newMode)
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
index 34d72d1..2ac2ca4 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
@@ -154,11 +154,11 @@ public:
void setRenderTextActive(bool);
+ bool isNativePaintingActive() const;
private:
Q_DISABLE_COPY(QGL2PaintEngineEx)
};
-
class QGL2PaintEngineExPrivate : public QPaintEngineExPrivate
{
Q_DECLARE_PUBLIC(QGL2PaintEngineEx)
@@ -178,6 +178,7 @@ public:
elementIndicesVBOId(0),
snapToPixelGrid(false),
addOffset(false),
+ nativePaintingActive(false),
inverseScale(1),
lastMaskTextureUsed(0)
{ }
@@ -280,6 +281,7 @@ public:
bool snapToPixelGrid;
bool addOffset; // When enabled, adds a 0.49,0.49 offset to matrix in updateMatrix
+ bool nativePaintingActive;
GLfloat pmvMatrix[3][3];
GLfloat inverseScale;
diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro
index 9473343..15795d2 100644
--- a/src/opengl/opengl.pro
+++ b/src/opengl/opengl.pro
@@ -77,7 +77,7 @@ SOURCES += qgl.cpp \
}
x11 {
- contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2) {
+ contains(QT_CONFIG, egl) {
SOURCES += qgl_x11egl.cpp \
qglpixelbuffer_egl.cpp \
qgl_egl.cpp \
diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp
index 5595e02..394bcbc 100644
--- a/src/opengl/qgl.cpp
+++ b/src/opengl/qgl.cpp
@@ -49,7 +49,7 @@
#include "private/qpixmap_x11_p.h"
#define INT32 dummy_INT32
#define INT8 dummy_INT8
-#if !defined(QT_OPENGL_ES)
+#ifdef QT_NO_EGL
# include <GL/glx.h>
#endif
#undef INT32
@@ -1582,7 +1582,7 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format)
# endif
vi = 0;
#endif
-#if defined(QT_OPENGL_ES)
+#ifndef QT_NO_EGL
ownsEglContext = false;
eglContext = 0;
eglSurface = EGL_NO_SURFACE;
@@ -2767,6 +2767,18 @@ void QGLContext::drawTexture(const QRectF &target, GLuint textureId, GLenum text
return;
}
#else
+
+ if (d_ptr->active_engine &&
+ d_ptr->active_engine->type() == QPaintEngine::OpenGL2) {
+ QGL2PaintEngineEx *eng = static_cast<QGL2PaintEngineEx*>(d_ptr->active_engine);
+ if (!eng->isNativePaintingActive()) {
+ QRectF src(0, 0, target.width(), target.height());
+ QSize size(target.width(), target.height());
+ eng->drawTexture(target, textureId, size, src);
+ return;
+ }
+ }
+
const bool wasEnabled = glIsEnabled(GL_TEXTURE_2D);
GLint oldTexture;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTexture);
@@ -2817,6 +2829,7 @@ void QGLContext::drawTexture(const QPointF &point, GLuint textureId, GLenum text
Q_UNUSED(textureTarget);
qWarning("drawTexture(const QPointF &point, GLuint textureId, GLenum textureTarget) not supported with OpenGL ES, use rect version instead");
#else
+
const bool wasEnabled = glIsEnabled(GL_TEXTURE_2D);
GLint oldTexture;
glGetIntegerv(GL_TEXTURE_BINDING_2D, &oldTexture);
@@ -2830,6 +2843,18 @@ void QGLContext::drawTexture(const QPointF &point, GLuint textureId, GLenum text
glGetTexLevelParameteriv(textureTarget, 0, GL_TEXTURE_WIDTH, &textureWidth);
glGetTexLevelParameteriv(textureTarget, 0, GL_TEXTURE_HEIGHT, &textureHeight);
+ if (d_ptr->active_engine &&
+ d_ptr->active_engine->type() == QPaintEngine::OpenGL2) {
+ QGL2PaintEngineEx *eng = static_cast<QGL2PaintEngineEx*>(d_ptr->active_engine);
+ if (!eng->isNativePaintingActive()) {
+ QRectF dest(point, QSizeF(textureWidth, textureHeight));
+ QRectF src(0, 0, textureWidth, textureHeight);
+ QSize size(textureWidth, textureHeight);
+ eng->drawTexture(dest, textureId, size, src);
+ return;
+ }
+ }
+
qDrawTextureRect(QRectF(point, QSizeF(textureWidth, textureHeight)), textureWidth, textureHeight, textureTarget);
if (!wasEnabled)
@@ -3950,7 +3975,7 @@ bool QGLWidget::event(QEvent *e)
}
}
-#if defined(QT_OPENGL_ES)
+#ifndef QT_NO_EGL
// A re-parent is likely to destroy the X11 window and re-create it. It is important
// that we free the EGL surface _before_ the winID changes - otherwise we can leak.
if (e->type() == QEvent::ParentAboutToChange)
@@ -4909,7 +4934,7 @@ void QGLWidget::drawTexture(const QPointF &point, QMacCompatGLuint textureId, QM
}
#endif
-#if !defined(QT_OPENGL_ES_1)
+#ifndef QT_OPENGL_ES_1
Q_GLOBAL_STATIC(QGL2PaintEngineEx, qt_gl_2_engine)
#endif
diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h
index 64f54a3..b1e2ede 100644
--- a/src/opengl/qgl.h
+++ b/src/opengl/qgl.h
@@ -376,7 +376,7 @@ protected:
#if defined(Q_WS_WIN)
virtual int choosePixelFormat(void* pfd, HDC pdc);
#endif
-#if defined(Q_WS_X11) && !defined(QT_OPENGL_ES)
+#if defined(Q_WS_X11) && defined(QT_NO_EGL)
virtual void* tryVisual(const QGLFormat& f, int bufDepth = 1);
virtual void* chooseVisual();
#endif
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index 1f28b08..ee580a6 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -64,7 +64,7 @@
#include "qcache.h"
#include "qglpaintdevice_p.h"
-#if defined(QT_OPENGL_ES) || defined(QT_OPENGL_ES_2)
+#ifndef QT_NO_EGL
#include <QtGui/private/qegl_p.h>
#endif
@@ -96,7 +96,7 @@ class QMacWindowChangeEvent;
class QWSGLWindowSurface;
#endif
-#if defined(QT_OPENGL_ES)
+#ifndef QT_NO_EGL
class QEglContext;
#endif
@@ -164,7 +164,7 @@ public:
#ifdef Q_WS_QWS
, wsurf(0)
#endif
-#if defined(Q_WS_X11) && defined(QT_OPENGL_ES)
+#if defined(Q_WS_X11) && !defined(QT_NO_EGL)
, eglSurfaceWindowId(0)
#endif
{
@@ -194,7 +194,7 @@ public:
QGLContext *olcx;
#elif defined(Q_WS_X11)
QGLOverlayWidget *olw;
-#if defined(QT_OPENGL_ES)
+#ifndef QT_NO_EGL
void recreateEglSurface(bool force);
WId eglSurfaceWindowId;
#endif
@@ -344,7 +344,7 @@ public:
HBITMAP hbitmap;
HDC hbitmap_hdc;
#endif
-#if defined(QT_OPENGL_ES)
+#ifndef QT_NO_EGL
bool ownsEglContext;
QEglContext *eglContext;
EGLSurface eglSurface;
diff --git a/src/opengl/qgl_x11egl.cpp b/src/opengl/qgl_x11egl.cpp
index af0100b..6f210ce 100644
--- a/src/opengl/qgl_x11egl.cpp
+++ b/src/opengl/qgl_x11egl.cpp
@@ -378,8 +378,6 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmap *pixmap, cons
// 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")) {
- Q_ASSERT(eglCreateImageKHR);
- Q_ASSERT(eglDestroyImageKHR);
// Being able to create an EGLImage from a native pixmap is also pretty useless
// without the ability to bind that EGLImage as a texture, which is provided by
@@ -436,15 +434,13 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmap *pixmap, cons
// If the pixmap doesn't already have a valid surface, try binding it via EGLImage
// first, as going through EGLImage should be faster and better supported:
if (!textureIsBound && haveEglImageTFP) {
- Q_ASSERT(eglCreateImageKHR);
-
EGLImageKHR eglImage;
EGLint attribs[] = {
EGL_IMAGE_PRESERVED_KHR, EGL_TRUE,
EGL_NONE
};
- eglImage = eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR,
+ eglImage = QEgl::eglCreateImageKHR(QEgl::display(), EGL_NO_CONTEXT, EGL_NATIVE_PIXMAP_KHR,
(EGLClientBuffer)QEgl::nativePixmap(pixmap), attribs);
QGLContext* ctx = q;
@@ -457,7 +453,7 @@ QGLTexture *QGLContextPrivate::bindTextureFromNativePixmap(QPixmap *pixmap, cons
// Once the egl image is bound, the texture becomes a new sibling image and we can safely
// destroy the EGLImage we created for the pixmap:
if (eglImage != EGL_NO_IMAGE_KHR)
- eglDestroyImageKHR(QEgl::display(), eglImage);
+ QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
}
if (!textureIsBound && haveTFP) {
diff --git a/src/opengl/qglpixelbuffer.cpp b/src/opengl/qglpixelbuffer.cpp
index eca9550..9a8b243 100644
--- a/src/opengl/qglpixelbuffer.cpp
+++ b/src/opengl/qglpixelbuffer.cpp
@@ -137,14 +137,14 @@ void QGLPixelBufferPrivate::common_init(const QSize &size, const QGLFormat &form
#if defined(Q_WS_WIN) && !defined(QT_OPENGL_ES)
qctx->d_func()->dc = dc;
qctx->d_func()->rc = ctx;
-#elif (defined(Q_WS_X11) && !defined(QT_OPENGL_ES))
+#elif (defined(Q_WS_X11) && defined(QT_NO_EGL))
qctx->d_func()->cx = ctx;
qctx->d_func()->pbuf = (void *) pbuf;
qctx->d_func()->vi = 0;
#elif defined(Q_WS_MAC)
qctx->d_func()->cx = ctx;
qctx->d_func()->vi = 0;
-#elif defined(QT_OPENGL_ES)
+#elif !defined(QT_NO_EGL)
qctx->d_func()->eglContext = ctx;
qctx->d_func()->eglSurface = pbuf;
#endif
@@ -254,7 +254,7 @@ bool QGLPixelBuffer::doneCurrent()
\sa size()
*/
-#if (defined(Q_WS_X11) || defined(Q_WS_WIN)) && !defined(QT_OPENGL_ES)
+#if (defined(Q_WS_X11) || defined(Q_WS_WIN)) && defined(QT_NO_EGL)
GLuint QGLPixelBuffer::generateDynamicTexture() const
{
Q_D(const QGLPixelBuffer);
diff --git a/src/opengl/qglpixelbuffer_p.h b/src/opengl/qglpixelbuffer_p.h
index c85dc5a..2a1f671 100644
--- a/src/opengl/qglpixelbuffer_p.h
+++ b/src/opengl/qglpixelbuffer_p.h
@@ -60,7 +60,7 @@ QT_BEGIN_INCLUDE_NAMESPACE
#include <private/qgl_p.h>
#include <private/qglpaintdevice_p.h>
-#if defined(Q_WS_X11) && !defined(QT_OPENGL_ES)
+#if defined(Q_WS_X11) && defined(QT_NO_EGL)
#include <GL/glx.h>
// The below is needed to for compilation on HPUX, due to broken GLX
@@ -127,10 +127,8 @@ struct GLXFBConfig {
#elif defined(Q_WS_WIN)
DECLARE_HANDLE(HPBUFFERARB);
-#elif defined(QT_OPENGL_ES_2)
-#include <EGL/egl.h>
-#elif defined(QT_OPENGL_ES)
-#include <GLES/egl.h>
+#elif !defined(QT_NO_EGL)
+#include <QtGui/private/qegl_p.h>
#endif
QT_END_INCLUDE_NAMESPACE
@@ -174,7 +172,7 @@ public:
QPointer<QGLWidget> req_shareWidget;
QSize req_size;
-#if defined(Q_WS_X11) && !defined(QT_OPENGL_ES)
+#if defined(Q_WS_X11) && defined(QT_NO_EGL)
GLXPbuffer pbuf;
GLXContext ctx;
#elif defined(Q_WS_WIN)
@@ -195,7 +193,7 @@ public:
AGLContext share_ctx;
# endif
#endif
-#if defined(QT_OPENGL_ES)
+#ifndef QT_NO_EGL
EGLSurface pbuf;
QEglContext *ctx;
int textureFormat;
diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp
index 5c4f41b..6258e0c 100644
--- a/src/openvg/qpixmapdata_vg.cpp
+++ b/src/openvg/qpixmapdata_vg.cpp
@@ -42,7 +42,9 @@
#include "qpixmapdata_vg_p.h"
#include "qpaintengine_vg_p.h"
#include <QtGui/private/qdrawhelper_p.h>
+#if !defined(QT_NO_EGL)
#include <QtGui/private/qegl_p.h>
+#endif
#include "qvg_p.h"
#include "qvgimagepool_p.h"
@@ -496,7 +498,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
}
const EGLint KEglImageAttribs[] = {EGL_IMAGE_PRESERVED_SYMBIAN, EGL_TRUE, EGL_NONE};
- EGLImageKHR eglImage = eglCreateImageKHR(QEgl::display(),
+ EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(),
EGL_NO_CONTEXT,
EGL_NATIVE_PIXMAP_KHR,
(EGLClientBuffer)sgImage,
@@ -511,7 +513,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
vgImage = vgCreateEGLImageTargetKHR(eglImage);
if (vgGetError() != VG_NO_ERROR) {
cleanup();
- eglDestroyImageKHR(QEgl::display(), eglImage);
+ QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
driver.Close();
return;
}
@@ -525,7 +527,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type)
prevSize = QSize(w, h);
setSerialNumber(++qt_vg_pixmap_serial);
// release stuff
- eglDestroyImageKHR(QEgl::display(), eglImage);
+ QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
driver.Close();
#endif
} else if (type == QPixmapData::FbsBitmap) {
@@ -611,7 +613,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
}
const EGLint KEglImageAttribs[] = {EGL_IMAGE_PRESERVED_SYMBIAN, EGL_TRUE, EGL_NONE};
- EGLImageKHR eglImage = eglCreateImageKHR(QEgl::display(),
+ EGLImageKHR eglImage = QEgl::eglCreateImageKHR(QEgl::display(),
EGL_NO_CONTEXT,
EGL_NATIVE_PIXMAP_KHR,
(EGLClientBuffer)sgImage,
@@ -624,7 +626,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
VGImage dstVgImage = vgCreateEGLImageTargetKHR(eglImage);
if (vgGetError() != VG_NO_ERROR) {
- eglDestroyImageKHR(QEgl::display(), eglImage);
+ QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
sgImage->Close();
driver.Close();
return 0;
@@ -640,7 +642,7 @@ void* QVGPixmapData::toNativeType(NativeType type)
}
// release stuff
vgDestroyImage(dstVgImage);
- eglDestroyImageKHR(QEgl::display(), eglImage);
+ QEgl::eglDestroyImageKHR(QEgl::display(), eglImage);
driver.Close();
return reinterpret_cast<void*>(sgImage);
#endif
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp
index 58c8d83..f732907 100644
--- a/src/script/api/qscriptengine.cpp
+++ b/src/script/api/qscriptengine.cpp
@@ -792,6 +792,7 @@ JSC::JSValue JSC_HOST_CALL functionQsTr(JSC::ExecState *exec, JSC::JSObject*, JS
if ((args.size() > 2) && !args.at(2).isNumber())
return JSC::throwError(exec, JSC::GeneralError, "qsTranslate(): third argument (n) must be a number");
#ifndef QT_NO_QOBJECT
+ QScriptEnginePrivate *engine = scriptEngineFromExec(exec);
JSC::UString context;
// The first non-empty source URL in the call stack determines the translation context.
{
@@ -799,7 +800,7 @@ JSC::JSValue JSC_HOST_CALL functionQsTr(JSC::ExecState *exec, JSC::JSObject*, JS
while (frame) {
if (frame->codeBlock() && frame->codeBlock()->source()
&& !frame->codeBlock()->source()->url().isEmpty()) {
- context = QFileInfo(frame->codeBlock()->source()->url()).baseName();
+ context = engine->translationContextFromUrl(frame->codeBlock()->source()->url());
break;
}
frame = frame->callerFrame()->removeHostCallFrameFlag();
@@ -921,6 +922,8 @@ QScriptEnginePrivate::QScriptEnginePrivate()
activeAgent = 0;
agentLineNumber = -1;
processEventsInterval = -1;
+ cachedTranslationUrl = JSC::UString();
+ cachedTranslationContext = JSC::UString();
JSC::setCurrentIdentifierTable(oldTable);
}
@@ -3307,6 +3310,15 @@ bool QScriptEnginePrivate::hasDemarshalFunction(int type) const
return info && (info->demarshal != 0);
}
+JSC::UString QScriptEnginePrivate::translationContextFromUrl(const JSC::UString &url)
+{
+ if (url != cachedTranslationUrl) {
+ cachedTranslationContext = QFileInfo(url).baseName();
+ cachedTranslationUrl = url;
+ }
+ return cachedTranslationContext;
+}
+
/*!
\internal
*/
diff --git a/src/script/api/qscriptengine_p.h b/src/script/api/qscriptengine_p.h
index 5c2007f..fd47208 100644
--- a/src/script/api/qscriptengine_p.h
+++ b/src/script/api/qscriptengine_p.h
@@ -63,6 +63,7 @@
#include "RegExpObject.h"
#include "SourceProvider.h"
#include "Structure.h"
+#include "UString.h"
#include "JSGlobalObject.h"
#include "JSValue.h"
@@ -73,7 +74,6 @@ namespace JSC
typedef ExecState CallFrame;
class JSCell;
class JSGlobalObject;
- class UString;
}
@@ -298,6 +298,8 @@ public:
static inline QScriptDeclarativeClass *declarativeClass(JSC::JSValue);
static inline QScriptDeclarativeClass::Object *declarativeObject(JSC::JSValue);
+ JSC::UString translationContextFromUrl(const JSC::UString &);
+
#ifndef QT_NO_QOBJECT
JSC::JSValue newQObject(QObject *object,
QScriptEngine::ValueOwnership ownership = QScriptEngine::QtOwnership,
@@ -367,6 +369,9 @@ public:
QScriptValue abortResult;
bool inEval;
+ JSC::UString cachedTranslationUrl;
+ JSC::UString cachedTranslationContext;
+
QSet<QString> importedExtensions;
QSet<QString> extensionsBeingImported;
diff --git a/tests/auto/declarative/.gitignore b/tests/auto/declarative/.gitignore
index d937eb4..57608cf 100644
--- a/tests/auto/declarative/.gitignore
+++ b/tests/auto/declarative/.gitignore
@@ -1,4 +1,5 @@
tst_*
!tst_*.*
+tst_*.log
tst_*.debug
tst_*~
diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro
index 5441311..7834650 100644
--- a/tests/auto/declarative/declarative.pro
+++ b/tests/auto/declarative/declarative.pro
@@ -62,7 +62,7 @@ SUBDIRS += \
qdeclarativexmlhttprequest \ # Cover
qdeclarativeimageprovider \ # Cover
qdeclarativestyledtext \ # Cover
- sql \ # Cover
+ qdeclarativesqldatabase \ # Cover
qmlvisual # Cover
contains(QT_CONFIG, webkit) {
diff --git a/tests/auto/declarative/examples/examples.pro b/tests/auto/declarative/examples/examples.pro
index b316cb9..4c32524 100644
--- a/tests/auto/declarative/examples/examples.pro
+++ b/tests/auto/declarative/examples/examples.pro
@@ -4,6 +4,8 @@ macx:CONFIG -= app_bundle
SOURCES += tst_examples.cpp
+include(../../../../tools/qml/qml.pri)
+
DEFINES += SRCDIR=\\\"$$PWD\\\"
CONFIG += parallel_test
diff --git a/tests/auto/declarative/examples/tst_examples.cpp b/tests/auto/declarative/examples/tst_examples.cpp
index e62aad2..c650346 100644
--- a/tests/auto/declarative/examples/tst_examples.cpp
+++ b/tests/auto/declarative/examples/tst_examples.cpp
@@ -43,8 +43,9 @@
#include <QDir>
#include <QProcess>
#include <QDebug>
-#include <QFutureSynchronizer>
-#include <QtConcurrentRun>
+#include "qmlruntime.h"
+#include <QDeclarativeView>
+#include <QDeclarativeError>
class tst_examples : public QObject
{
@@ -53,6 +54,7 @@ public:
tst_examples();
private slots:
+ void examples_data();
void examples();
void namingConvention();
@@ -173,8 +175,6 @@ QStringList tst_examples::findQmlFiles(const QDir &d)
return rv;
}
-
-
/*
This test runs all the examples in the declarative UI source tree and ensures
that they start and exit cleanly.
@@ -182,57 +182,9 @@ that they start and exit cleanly.
Examples are any .qml files under the examples/ or demos/ directory that start
with a lower case letter.
*/
-#define THREADS 5
-
-struct Example {
-public:
- Example() : result(Unknown) {}
-
- enum Result { Pass, Unknown, Fail };
- Result result;
- QString file;
- QString qmlruntime;
-
- void run();
-};
-
-void Example::run()
+void tst_examples::examples_data()
{
- QFileInfo fi(file);
- QFileInfo dir(fi.path());
- QString script = SRCDIR "/data/"+dir.baseName()+"/"+fi.baseName();
- QFileInfo testdata(script+".qml");
- QStringList arguments;
- arguments << "-script" << (testdata.exists() ? script : QLatin1String(SRCDIR "/data/dummytest"))
- << "-scriptopts" << "play,testerror,exitoncomplete,exitonfailure"
- << file;
-#ifdef Q_WS_QWS
- arguments << "-qws";
-#endif
-
- QProcess p;
- p.start(qmlruntime, arguments);
- if (!p.waitForFinished()) {
- result = Fail;
- return;
- }
-
- if (p.exitStatus() != QProcess::NormalExit || p.exitCode() != 0)
- qWarning() << p.readAllStandardOutput() << p.readAllStandardError();
-
- if (p.exitStatus() != QProcess::NormalExit ||
- p.exitCode() != 0) {
- result = Fail;
- return;
- } else {
- result = Pass;
- return;
- }
-}
-
-void tst_examples::examples()
-{
- QThreadPool::globalInstance()->setMaxThreadCount(5);
+ QTest::addColumn<QString>("file");
QString examples = QLatin1String(SRCDIR) + "/../../../../demos/declarative/";
QString demos = QLatin1String(SRCDIR) + "/../../../../examples/declarative/";
@@ -243,38 +195,31 @@ void tst_examples::examples()
files << findQmlFiles(QDir(demos));
files << findQmlFiles(QDir(snippets));
- QList<Example> tests;
-
- for (int ii = 0; ii < files.count(); ++ii) {
- Example e;
- e.file = files.at(ii);
- e.qmlruntime = qmlruntime;
- tests << e;
- }
+ foreach (const QString &file, files)
+ QTest::newRow(qPrintable(file)) << file;
+}
- QFutureSynchronizer<void> sync;
+static void silentErrorsMsgHandler(QtMsgType, const char *)
+{
+}
- for (int ii = 0; ii < tests.count(); ++ii) {
- Example *e = &tests[ii];
- QFuture<void> r = QtConcurrent::run(e, &Example::run);
- sync.addFuture(r);
- }
+void tst_examples::examples()
+{
+ QFETCH(QString, file);
- sync.waitForFinished();
+ QDeclarativeViewer viewer;
- QStringList failures;
- for (int ii = 0; ii < tests.count(); ++ii) {
- if (tests.at(ii).result != Example::Pass)
- failures << QDir::cleanPath(tests.at(ii).file);
- }
+ QtMsgHandler old = qInstallMsgHandler(silentErrorsMsgHandler);
+ QVERIFY(viewer.open(file));
+ qInstallMsgHandler(old);
- if (failures.count()) {
- QString error("Failed examples: ");
- error += failures.join(", ");
+ if (viewer.view()->status() == QDeclarativeView::Error)
+ qWarning() << viewer.view()->errors();
- QFAIL(qPrintable(error));
- }
+ QCOMPARE(viewer.view()->status(), QDeclarativeView::Ready);
+ viewer.show();
+ QTest::qWaitForWindowShown(&viewer);
}
QTEST_MAIN(tst_examples)
diff --git a/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp b/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp
index 0f03527..8621239 100644
--- a/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp
+++ b/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp
@@ -121,10 +121,10 @@ void tst_qdeclarativeborderimage::imageSource_data()
QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() << false << "";
QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() << false
- << "Cannot open QUrl( \"" + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() + "\" ) ";
+ << "QML BorderImage (file::2:1) Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString();
QTest::newRow("remote") << SERVER_ADDR "/colors.png" << true << "";
QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << true
- << "\"Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found\" ";
+ << "QML BorderImage (file::2:1) Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found";
}
void tst_qdeclarativeborderimage::imageSource()
diff --git a/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp b/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
index 35cffdc..851460f 100644
--- a/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
+++ b/tests/auto/declarative/qdeclarativecontext/tst_qdeclarativecontext.cpp
@@ -172,8 +172,8 @@ void tst_qdeclarativecontext::parentContext()
delete ctxt2; ctxt2 = 0;
QCOMPARE(ctxt->parentContext(), engine->rootContext());
- QCOMPARE(ctxt3->parentContext(), ctxt2);
- QCOMPARE(ctxt4->parentContext(), ctxt2);
+ QCOMPARE(ctxt3->parentContext(), (QDeclarativeContext *)0);
+ QCOMPARE(ctxt4->parentContext(), (QDeclarativeContext *)0);
QCOMPARE(ctxt5->parentContext(), ctxt);
QCOMPARE(ctxt6->parentContext(), engine->rootContext());
QCOMPARE(ctxt7->parentContext(), engine->rootContext());
@@ -181,9 +181,9 @@ void tst_qdeclarativecontext::parentContext()
delete engine; engine = 0;
QCOMPARE(ctxt->parentContext(), (QDeclarativeContext *)0);
- QCOMPARE(ctxt3->parentContext(), ctxt2);
- QCOMPARE(ctxt4->parentContext(), ctxt2);
- QCOMPARE(ctxt5->parentContext(), ctxt);
+ QCOMPARE(ctxt3->parentContext(), (QDeclarativeContext *)0);
+ QCOMPARE(ctxt4->parentContext(), (QDeclarativeContext *)0);
+ QCOMPARE(ctxt5->parentContext(), (QDeclarativeContext *)0);
QCOMPARE(ctxt6->parentContext(), (QDeclarativeContext *)0);
QCOMPARE(ctxt7->parentContext(), (QDeclarativeContext *)0);
diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
index 35b4d99..098ac36 100644
--- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
+++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp
@@ -1382,7 +1382,6 @@ void tst_qdeclarativeecmascript::callQtInvokables()
o.reset();
{
QScriptValue ret = engine->evaluate("object.method_NoArgs_QPointF()");
- QVERIFY(ret.isVariant());
QCOMPARE(ret.toVariant(), QVariant(QPointF(123, 4.5)));
QCOMPARE(o.error(), false);
QCOMPARE(o.invoked(), 3);
diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
index 53c208e..854bcdd 100644
--- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
+++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp
@@ -124,13 +124,14 @@ void tst_qdeclarativeimage::imageSource_data()
QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() << 120.0 << 120.0 << false << false << "";
QTest::newRow("local async") << QUrl::fromLocalFile(SRCDIR "/data/colors1.png").toString() << 120.0 << 120.0 << false << true << "";
QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() << 0.0 << 0.0 << false
- << false << "Cannot open QUrl( \"" + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() + "\" ) ";
+ << false << "QML Image (file::2:1) Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString();
QTest::newRow("local async not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString() << 0.0 << 0.0 << false
- << true << "\"Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString() + "\" ";
+ << true << "QML Image (file::2:1) Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString();
QTest::newRow("remote") << SERVER_ADDR "/colors.png" << 120.0 << 120.0 << true << false << "";
QTest::newRow("remote svg") << SERVER_ADDR "/heart.svg" << 550.0 << 500.0 << true << false << "";
- QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << 0.0 << 0.0 << true << false
- << "\"Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found\" ";
+ QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << 0.0 << 0.0 << true
+ << false << "QML Image (file::2:1) Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found";
+
}
void tst_qdeclarativeimage::imageSource()
diff --git a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp
index 162c266..aca951b 100644
--- a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp
+++ b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp
@@ -96,9 +96,10 @@ void tst_qdeclarativeimageprovider::imageSource_data()
QTest::newRow("exists") << "image://test/exists.png" << "" << QSize(100,100) << "";
QTest::newRow("scaled") << "image://test/exists.png" << "sourceSize: \"80x30\"" << QSize(80,30) << "";
QTest::newRow("missing") << "image://test/no-such-file.png" << "" << QSize()
- << "\"Failed to get image from provider: image://test/no-such-file.png\" ";
+ << "QML Image (file::2:1) Failed to get image from provider: image://test/no-such-file.png";
QTest::newRow("unknown provider") << "image://bogus/exists.png" << "" << QSize()
- << "\"Failed to get image from provider: image://bogus/exists.png\" ";
+ << "QML Image (file::2:1) Failed to get image from provider: image://bogus/exists.png";
+
}
void tst_qdeclarativeimageprovider::imageSource()
@@ -157,7 +158,8 @@ void tst_qdeclarativeimageprovider::removeProvider()
QCOMPARE(obj->width(), 100.0);
// remove the provider and confirm
- QString error("\"Failed to get image from provider: image://test2/exists2.png\" ");
+ QString error("QML Image (file::2:1) Failed to get image from provider: image://test2/exists2.png");
+
QTest::ignoreMessage(QtWarningMsg, error.toUtf8());
engine.removeImageProvider("test2");
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/OnDestructionType.qml b/tests/auto/declarative/qdeclarativelanguage/data/OnDestructionType.qml
new file mode 100644
index 0000000..e5a7cf8
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/OnDestructionType.qml
@@ -0,0 +1,8 @@
+import Test 1.0
+import Qt 4.6
+
+MyQmlObject {
+ property int a: Math.max(10, 9)
+ property int b: 11
+ Component.onDestruction: console.log("Destruction " + a + " " + b);
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/destroyedSignal.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/destroyedSignal.errors.txt
new file mode 100644
index 0000000..3348494
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/destroyedSignal.errors.txt
@@ -0,0 +1 @@
+4:5:Cannot assign to non-existent property "onDestroyed"
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/destroyedSignal.qml b/tests/auto/declarative/qdeclarativelanguage/data/destroyedSignal.qml
new file mode 100644
index 0000000..4eab50a
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/destroyedSignal.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+QtObject {
+ onDestroyed: print("Hello World!")
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/data/onDestruction.qml b/tests/auto/declarative/qdeclarativelanguage/data/onDestruction.qml
new file mode 100644
index 0000000..7ebae7b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativelanguage/data/onDestruction.qml
@@ -0,0 +1,17 @@
+import Test 1.0
+import Qt 4.6
+
+MyTypeObject {
+ // We set a and b to ensure that onCompleted is executed after bindings and
+ // constants have been assigned
+ property int a: Math.min(6, 7)
+ Component.onDestruction: console.log("Destruction " + a + " " + nestedObject.b)
+
+ objectProperty: OnDestructionType {
+ qmlobjectProperty: MyQmlObject {
+ id: nestedObject
+ property int b: 10
+ Component.onDestruction: console.log("Destruction " + a + " " + nestedObject.b)
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
index 7c327c2..8feab32 100644
--- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
+++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp
@@ -113,6 +113,7 @@ private slots:
void i18n();
void i18n_data();
void onCompleted();
+ void onDestruction();
void scriptString();
void defaultPropertyListOrder();
void declaredPropertyValues();
@@ -329,6 +330,7 @@ void tst_qdeclarativelanguage::errors_data()
QTest::newRow("missingValueTypeProperty") << "missingValueTypeProperty.qml" << "missingValueTypeProperty.errors.txt" << false;
QTest::newRow("objectValueTypeProperty") << "objectValueTypeProperty.qml" << "objectValueTypeProperty.errors.txt" << false;
QTest::newRow("enumTypes") << "enumTypes.qml" << "enumTypes.errors.txt" << false;
+ QTest::newRow("destroyedSignal") << "destroyedSignal.qml" << "destroyedSignal.errors.txt" << false;
}
@@ -1049,6 +1051,20 @@ void tst_qdeclarativelanguage::onCompleted()
QVERIFY(object != 0);
}
+// Check that the Component::onDestruction attached property works
+void tst_qdeclarativelanguage::onDestruction()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("onDestruction.qml"));
+ VERIFY_ERRORS(0);
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QTest::ignoreMessage(QtDebugMsg, "Destruction 6 10");
+ QTest::ignoreMessage(QtDebugMsg, "Destruction 6 10");
+ QTest::ignoreMessage(QtDebugMsg, "Destruction 10 11");
+ delete object;
+}
+
// Check that assignments to QDeclarativeScriptString properties work
void tst_qdeclarativelanguage::scriptString()
{
diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
index 26199d3..6d17acc 100644
--- a/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
+++ b/tests/auto/declarative/qdeclarativemoduleplugin/tst_qdeclarativemoduleplugin.cpp
@@ -101,7 +101,6 @@ inline QUrl TEST_FILE(const QString &filename)
void tst_qdeclarativemoduleplugin::importsPlugin()
{
-QSKIP("Fix me", SkipAll);
QDeclarativeEngine engine;
engine.addImportPath(QLatin1String(SRCDIR) + QDir::separator() + QLatin1String("imports"));
QTest::ignoreMessage(QtWarningMsg, "plugin created");
diff --git a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp
index f2ccf80..0cc13ad 100644
--- a/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp
+++ b/tests/auto/declarative/qdeclarativepixmapcache/tst_qdeclarativepixmapcache.cpp
@@ -126,19 +126,20 @@ void tst_qdeclarativepixmapcache::single()
QFETCH(bool, exists);
QFETCH(bool, neterror);
+ QString expectedError;
if (neterror) {
- QString expected = "\"Error downloading " + target.toString() + " - server replied: Not found\" ";
- QTest::ignoreMessage(QtWarningMsg, expected.toLatin1());
+ expectedError = "Error downloading " + target.toString() + " - server replied: Not found";
} else if (!exists) {
- QString expected = "Cannot open QUrl( \"" + target.toString() + "\" ) ";
- QTest::ignoreMessage(QtWarningMsg, expected.toLatin1());
+ expectedError = "Cannot open: " + target.toString();
}
QPixmap pixmap;
QVERIFY(pixmap.width() <= 0); // Check Qt assumption
- QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(target, &pixmap);
+ QString errorString;
+ QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(target, &pixmap, &errorString);
if (incache) {
+ QCOMPARE(errorString, expectedError);
if (exists) {
QVERIFY(status == QDeclarativePixmapReply::Ready);
QVERIFY(pixmap.width() > 0);
@@ -156,13 +157,15 @@ void tst_qdeclarativepixmapcache::single()
QTestEventLoop::instance().enterLoop(10);
QVERIFY(!QTestEventLoop::instance().timeout());
QVERIFY(getter.gotslot);
+ QString errorString;
if (exists) {
- QVERIFY(QDeclarativePixmapCache::get(target, &pixmap) == QDeclarativePixmapReply::Ready);
+ QVERIFY(QDeclarativePixmapCache::get(target, &pixmap, &errorString) == QDeclarativePixmapReply::Ready);
QVERIFY(pixmap.width() > 0);
} else {
- QVERIFY(QDeclarativePixmapCache::get(target, &pixmap) == QDeclarativePixmapReply::Error);
+ QVERIFY(QDeclarativePixmapCache::get(target, &pixmap, &errorString) == QDeclarativePixmapReply::Error);
QVERIFY(pixmap.width() <= 0);
}
+ QCOMPARE(errorString, expectedError);
}
QCOMPARE(QDeclarativePixmapCache::pendingRequests(), 0);
@@ -236,7 +239,8 @@ void tst_qdeclarativepixmapcache::parallel()
for (int i=0; i<targets.count(); ++i) {
QUrl target = targets.at(i);
QPixmap pixmap;
- QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(target, &pixmap);
+ QString errorString;
+ QDeclarativePixmapReply::Status status = QDeclarativePixmapCache::get(target, &pixmap, &errorString);
QDeclarativePixmapReply *reply = 0;
QVERIFY(status != QDeclarativePixmapReply::Error);
if (status != QDeclarativePixmapReply::Error && status != QDeclarativePixmapReply::Ready)
@@ -273,7 +277,8 @@ void tst_qdeclarativepixmapcache::parallel()
} else {
QVERIFY(getters[i]->gotslot);
QPixmap pixmap;
- QVERIFY(QDeclarativePixmapCache::get(targets[i], &pixmap) == QDeclarativePixmapReply::Ready);
+ QString errorString;
+ QVERIFY(QDeclarativePixmapCache::get(targets[i], &pixmap, &errorString) == QDeclarativePixmapReply::Ready);
QVERIFY(pixmap.width() > 0);
}
delete getters[i];
diff --git a/tests/auto/declarative/qdeclarativepositioners/data/grid-toptobottom.qml b/tests/auto/declarative/qdeclarativepositioners/data/grid-toptobottom.qml
new file mode 100644
index 0000000..34a84bf
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativepositioners/data/grid-toptobottom.qml
@@ -0,0 +1,41 @@
+import Qt 4.6
+
+Item {
+ width: 640
+ height: 480
+ Grid {
+ objectName: "grid"
+ rows: 3
+ flow: Grid.TopToBottom
+ Rectangle {
+ objectName: "one"
+ color: "red"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "two"
+ color: "green"
+ width: 20
+ height: 50
+ }
+ Rectangle {
+ objectName: "three"
+ color: "blue"
+ width: 50
+ height: 20
+ }
+ Rectangle {
+ objectName: "four"
+ color: "cyan"
+ width: 50
+ height: 50
+ }
+ Rectangle {
+ objectName: "five"
+ color: "magenta"
+ width: 10
+ height: 10
+ }
+ }
+}
diff --git a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
index 8692596..b4ac0e1 100644
--- a/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
+++ b/tests/auto/declarative/qdeclarativepositioners/tst_qdeclarativepositioners.cpp
@@ -61,6 +61,7 @@ private slots:
void test_vertical_spacing();
void test_vertical_animated();
void test_grid();
+ void test_grid_topToBottom();
void test_grid_spacing();
void test_grid_animated();
void test_grid_zero_columns();
@@ -305,6 +306,37 @@ void tst_QDeclarativePositioners::test_grid()
QCOMPARE(grid->height(), 100.0);
}
+void tst_QDeclarativePositioners::test_grid_topToBottom()
+{
+ QDeclarativeView *canvas = createView(SRCDIR "/data/grid-toptobottom.qml");
+
+ QDeclarativeRectangle *one = canvas->rootObject()->findChild<QDeclarativeRectangle*>("one");
+ QVERIFY(one != 0);
+ QDeclarativeRectangle *two = canvas->rootObject()->findChild<QDeclarativeRectangle*>("two");
+ QVERIFY(two != 0);
+ QDeclarativeRectangle *three = canvas->rootObject()->findChild<QDeclarativeRectangle*>("three");
+ QVERIFY(three != 0);
+ QDeclarativeRectangle *four = canvas->rootObject()->findChild<QDeclarativeRectangle*>("four");
+ QVERIFY(four != 0);
+ QDeclarativeRectangle *five = canvas->rootObject()->findChild<QDeclarativeRectangle*>("five");
+ QVERIFY(five != 0);
+
+ QCOMPARE(one->x(), 0.0);
+ QCOMPARE(one->y(), 0.0);
+ QCOMPARE(two->x(), 0.0);
+ QCOMPARE(two->y(), 50.0);
+ QCOMPARE(three->x(), 0.0);
+ QCOMPARE(three->y(), 100.0);
+ QCOMPARE(four->x(), 50.0);
+ QCOMPARE(four->y(), 0.0);
+ QCOMPARE(five->x(), 50.0);
+ QCOMPARE(five->y(), 50.0);
+
+ QDeclarativeItem *grid = canvas->rootObject()->findChild<QDeclarativeItem*>("grid");
+ QCOMPARE(grid->width(), 100.0);
+ QCOMPARE(grid->height(), 120.0);
+}
+
void tst_QDeclarativePositioners::test_grid_spacing()
{
QDeclarativeView *canvas = createView(SRCDIR "/data/grid-spacing.qml");
diff --git a/tests/auto/declarative/sql/data/README b/tests/auto/declarative/qdeclarativesqldatabase/data/README
index 7efca3a..7efca3a 100644
--- a/tests/auto/declarative/sql/data/README
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/README
diff --git a/tests/auto/declarative/sql/data/changeversion.js b/tests/auto/declarative/qdeclarativesqldatabase/data/changeversion.js
index 680d7a6..680d7a6 100644
--- a/tests/auto/declarative/sql/data/changeversion.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/changeversion.js
diff --git a/tests/auto/declarative/sql/data/creation-a.js b/tests/auto/declarative/qdeclarativesqldatabase/data/creation-a.js
index bd7d5c5..bd7d5c5 100644
--- a/tests/auto/declarative/sql/data/creation-a.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/creation-a.js
diff --git a/tests/auto/declarative/sql/data/creation.js b/tests/auto/declarative/qdeclarativesqldatabase/data/creation.js
index 317b4c1..317b4c1 100644
--- a/tests/auto/declarative/sql/data/creation.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/creation.js
diff --git a/tests/auto/declarative/sql/data/error-a.js b/tests/auto/declarative/qdeclarativesqldatabase/data/error-a.js
index 10a23f6..10a23f6 100644
--- a/tests/auto/declarative/sql/data/error-a.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/error-a.js
diff --git a/tests/auto/declarative/sql/data/error-b.js b/tests/auto/declarative/qdeclarativesqldatabase/data/error-b.js
index 4dd0ecf..4dd0ecf 100644
--- a/tests/auto/declarative/sql/data/error-b.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/error-b.js
diff --git a/tests/auto/declarative/sql/data/error-creation.js b/tests/auto/declarative/qdeclarativesqldatabase/data/error-creation.js
index 0ab2a35..0ab2a35 100644
--- a/tests/auto/declarative/sql/data/error-creation.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/error-creation.js
diff --git a/tests/auto/declarative/sql/data/error-notransaction.js b/tests/auto/declarative/qdeclarativesqldatabase/data/error-notransaction.js
index b9cc647..b9cc647 100644
--- a/tests/auto/declarative/sql/data/error-notransaction.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/error-notransaction.js
diff --git a/tests/auto/declarative/sql/data/error-outsidetransaction.js b/tests/auto/declarative/qdeclarativesqldatabase/data/error-outsidetransaction.js
index a7af3bd..a7af3bd 100644
--- a/tests/auto/declarative/sql/data/error-outsidetransaction.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/error-outsidetransaction.js
diff --git a/tests/auto/declarative/sql/data/iteration-forwardonly.js b/tests/auto/declarative/qdeclarativesqldatabase/data/iteration-forwardonly.js
index 45947c0..45947c0 100644
--- a/tests/auto/declarative/sql/data/iteration-forwardonly.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/iteration-forwardonly.js
diff --git a/tests/auto/declarative/sql/data/iteration.js b/tests/auto/declarative/qdeclarativesqldatabase/data/iteration.js
index c34cbbb..c34cbbb 100644
--- a/tests/auto/declarative/sql/data/iteration.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/iteration.js
diff --git a/tests/auto/declarative/sql/data/readonly-error.js b/tests/auto/declarative/qdeclarativesqldatabase/data/readonly-error.js
index 69ec67f..69ec67f 100644
--- a/tests/auto/declarative/sql/data/readonly-error.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/readonly-error.js
diff --git a/tests/auto/declarative/sql/data/readonly.js b/tests/auto/declarative/qdeclarativesqldatabase/data/readonly.js
index 5ee862c..5ee862c 100644
--- a/tests/auto/declarative/sql/data/readonly.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/readonly.js
diff --git a/tests/auto/declarative/sql/data/reopen1.js b/tests/auto/declarative/qdeclarativesqldatabase/data/reopen1.js
index c1a8157..c1a8157 100644
--- a/tests/auto/declarative/sql/data/reopen1.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/reopen1.js
diff --git a/tests/auto/declarative/sql/data/reopen2.js b/tests/auto/declarative/qdeclarativesqldatabase/data/reopen2.js
index 4f7248f..4f7248f 100644
--- a/tests/auto/declarative/sql/data/reopen2.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/reopen2.js
diff --git a/tests/auto/declarative/sql/data/selection-bindnames.js b/tests/auto/declarative/qdeclarativesqldatabase/data/selection-bindnames.js
index 9786821..9786821 100644
--- a/tests/auto/declarative/sql/data/selection-bindnames.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/selection-bindnames.js
diff --git a/tests/auto/declarative/sql/data/selection.js b/tests/auto/declarative/qdeclarativesqldatabase/data/selection.js
index f116eff..f116eff 100644
--- a/tests/auto/declarative/sql/data/selection.js
+++ b/tests/auto/declarative/qdeclarativesqldatabase/data/selection.js
diff --git a/tests/auto/declarative/sql/sql.pro b/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro
index 7e4fdd8..3ff4529 100644
--- a/tests/auto/declarative/sql/sql.pro
+++ b/tests/auto/declarative/qdeclarativesqldatabase/qdeclarativesqldatabase.pro
@@ -3,7 +3,7 @@ contains(QT_CONFIG,declarative): QT += declarative
QT += sql script
macx:CONFIG -= app_bundle
-SOURCES += tst_sql.cpp
+SOURCES += tst_qdeclarativesqldatabase.cpp
# Define SRCDIR equal to test's source directory
DEFINES += SRCDIR=\\\"$$PWD\\\"
diff --git a/tests/auto/declarative/sql/tst_sql.cpp b/tests/auto/declarative/qdeclarativesqldatabase/tst_qdeclarativesqldatabase.cpp
index c8b8dc3..7486a4b 100644
--- a/tests/auto/declarative/sql/tst_sql.cpp
+++ b/tests/auto/declarative/qdeclarativesqldatabase/tst_qdeclarativesqldatabase.cpp
@@ -53,19 +53,19 @@
#include <QtCore/qdir.h>
#include <QtCore/qfile.h>
-class tst_sql : public QObject
+class tst_qdeclarativesqldatabase : public QObject
{
Q_OBJECT
public:
- tst_sql()
+ tst_qdeclarativesqldatabase()
{
- qApp->setApplicationName("tst_sql");
+ qApp->setApplicationName("tst_qdeclarativesqldatabase");
qApp->setOrganizationName("Nokia");
qApp->setOrganizationDomain("nokia.com");
engine = new QDeclarativeEngine;
}
- ~tst_sql()
+ ~tst_qdeclarativesqldatabase()
{
delete engine;
}
@@ -108,33 +108,33 @@ void removeRecursive(const QString& dirname)
QDir().rmdir(dirname);
}
-void tst_sql::initTestCase()
+void tst_qdeclarativesqldatabase::initTestCase()
{
removeRecursive(dbDir());
QDir().mkpath(dbDir());
}
-void tst_sql::cleanupTestCase()
+void tst_qdeclarativesqldatabase::cleanupTestCase()
{
removeRecursive(dbDir());
}
-QString tst_sql::dbDir() const
+QString tst_qdeclarativesqldatabase::dbDir() const
{
- static QString tmpd = QDir::tempPath()+"/tst_sql_output-"
+ static QString tmpd = QDir::tempPath()+"/tst_qdeclarativesqldatabase_output-"
+ QDateTime::currentDateTime().toString(QLatin1String("yyyyMMddhhmmss"));
return tmpd;
}
-void tst_sql::checkDatabasePath()
+void tst_qdeclarativesqldatabase::checkDatabasePath()
{
// Check default storage path (we can't use it since we don't want to mess with user's data)
- QVERIFY(engine->offlineStoragePath().contains("tst_sql"));
+ QVERIFY(engine->offlineStoragePath().contains("tst_qdeclarativesqldatabase"));
QVERIFY(engine->offlineStoragePath().contains("OfflineStorage"));
}
static const int total_databases_created_by_tests = 12;
-void tst_sql::testQml_data()
+void tst_qdeclarativesqldatabase::testQml_data()
{
QTest::addColumn<QString>("jsfile"); // The input file
@@ -161,7 +161,7 @@ void tst_sql::testQml_data()
}
/*
-void tst_sql::validateAgainstWebkit()
+void tst_qdeclarativesqldatabase::validateAgainstWebkit()
{
// Validates tests against WebKit (HTML5) support.
//
@@ -188,7 +188,7 @@ void tst_sql::validateAgainstWebkit()
}
*/
-void tst_sql::testQml()
+void tst_qdeclarativesqldatabase::testQml()
{
// Tests QML SQL Database support with tests
// that have been validated against Webkit.
@@ -209,7 +209,7 @@ void tst_sql::testQml()
QCOMPARE(text->text(),QString("passed"));
}
-void tst_sql::testQml_cleanopen_data()
+void tst_qdeclarativesqldatabase::testQml_cleanopen_data()
{
QTest::addColumn<QString>("jsfile"); // The input file
QTest::newRow("reopen1") << "data/reopen1.js";
@@ -217,7 +217,7 @@ void tst_sql::testQml_cleanopen_data()
QTest::newRow("error-creation") << "data/error-creation.js"; // re-uses creation DB
}
-void tst_sql::testQml_cleanopen()
+void tst_qdeclarativesqldatabase::testQml_cleanopen()
{
// Same as testQml, but clean connections between tests,
// making it more like the tests are running in new processes.
@@ -229,11 +229,11 @@ void tst_sql::testQml_cleanopen()
}
}
-void tst_sql::totalDatabases()
+void tst_qdeclarativesqldatabase::totalDatabases()
{
QCOMPARE(QDir(dbDir()+"/Databases").entryInfoList(QDir::Files|QDir::NoDotAndDotDot).count(), total_databases_created_by_tests*2);
}
-QTEST_MAIN(tst_sql)
+QTEST_MAIN(tst_qdeclarativesqldatabase)
-#include "tst_sql.moc"
+#include "tst_qdeclarativesqldatabase.moc"
diff --git a/tests/auto/declarative/qdeclarativetext/data/embeddedImagesLocal.qml b/tests/auto/declarative/qdeclarativetext/data/embeddedImagesLocal.qml
new file mode 100644
index 0000000..5aeea56
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetext/data/embeddedImagesLocal.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+Text {
+ text: "<img src='http/exists.png'>"
+}
diff --git a/tests/auto/declarative/qdeclarativetext/data/embeddedImagesLocalError.qml b/tests/auto/declarative/qdeclarativetext/data/embeddedImagesLocalError.qml
new file mode 100644
index 0000000..17bb21c
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetext/data/embeddedImagesLocalError.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+Text {
+ text: "<img src='http/notexists.png'>"
+}
diff --git a/tests/auto/declarative/qdeclarativetext/data/embeddedImagesRemote.qml b/tests/auto/declarative/qdeclarativetext/data/embeddedImagesRemote.qml
new file mode 100644
index 0000000..53b0266
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetext/data/embeddedImagesRemote.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+Text {
+ text: "<img src='http://127.0.0.1:14453/exists.png'>"
+}
diff --git a/tests/auto/declarative/qdeclarativetext/data/embeddedImagesRemoteError.qml b/tests/auto/declarative/qdeclarativetext/data/embeddedImagesRemoteError.qml
new file mode 100644
index 0000000..48c7a95
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetext/data/embeddedImagesRemoteError.qml
@@ -0,0 +1,5 @@
+import Qt 4.6
+
+Text {
+ text: "<img src='http://127.0.0.1:14453/notexists.png'>"
+}
diff --git a/tests/auto/declarative/qdeclarativetext/data/http/exists.png b/tests/auto/declarative/qdeclarativetext/data/http/exists.png
new file mode 100644
index 0000000..399bd0b
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativetext/data/http/exists.png
Binary files differ
diff --git a/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro b/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
index 73c05b5..e70443e 100644
--- a/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
+++ b/tests/auto/declarative/qdeclarativetext/qdeclarativetext.pro
@@ -1,8 +1,15 @@
load(qttest_p4)
contains(QT_CONFIG,declarative): QT += declarative gui
+QT += network
macx:CONFIG -= app_bundle
SOURCES += tst_qdeclarativetext.cpp
+INCLUDEPATH += ../shared/
+HEADERS += ../shared/testhttpserver.h
+SOURCES += ../shared/testhttpserver.cpp
+
+DEFINES += SRCDIR=\\\"$$PWD\\\"
+
CONFIG += parallel_test
diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp
index 2d10756..edb4a32 100644
--- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp
+++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp
@@ -48,6 +48,9 @@
#include <QGraphicsSceneMouseEvent>
#include <qmath.h>
+#include "../../../shared/util.h"
+#include "testhttpserver.h"
+
class tst_qdeclarativetext : public QObject
{
@@ -62,6 +65,9 @@ private slots:
void elide();
void textFormat();
+ void embeddedImages_data();
+ void embeddedImages();
+
// ### these tests may be trivial
void horizontalAlignment();
void verticalAlignment();
@@ -286,8 +292,28 @@ void tst_qdeclarativetext::wrap()
QVERIFY(textObject != 0);
QCOMPARE(textObject->width(), 30.);
QVERIFY(textObject->height() > textHeight);
+
+ qreal oldHeight = textObject->height();
+ textObject->setWidth(100);
+ QVERIFY(textObject->height() < oldHeight);
}
+ // richtext again with a fixed height
+ for (int i = 0; i < richText.size(); i++)
+ {
+ QString componentStr = "import Qt 4.7\nText { wrapMode: Text.WordWrap; width: 30; height: 50; text: \"" + richText.at(i) + "\" }";
+ QDeclarativeComponent textComponent(&engine);
+ textComponent.setData(componentStr.toLatin1(), QUrl::fromLocalFile(""));
+ QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+ QCOMPARE(textObject->width(), 30.);
+ QVERIFY(textObject->implicitHeight() > textHeight);
+
+ qreal oldHeight = textObject->implicitHeight();
+ textObject->setWidth(100);
+ QVERIFY(textObject->implicitHeight() < oldHeight);
+ }
}
void tst_qdeclarativetext::elide()
@@ -839,6 +865,49 @@ void tst_qdeclarativetext::clickLink()
}
}
+void tst_qdeclarativetext::embeddedImages_data()
+{
+ QTest::addColumn<QUrl>("qmlfile");
+ QTest::addColumn<QString>("error");
+ QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesLocal.qml") << "";
+ QTest::newRow("local-error") << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesLocalError.qml")
+ << "QML Text ("+QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesLocalError.qml").toString()+":3:1) Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/http/notexists.png").toString();
+ QTest::newRow("remote") << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesRemote.qml") << "";
+ QTest::newRow("remote-error") << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesRemoteError.qml")
+ << "QML Text ("+QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesRemoteError.qml").toString()+":3:1) Error downloading http://127.0.0.1:14453/notexists.png - server replied: Not found";
+}
+
+void tst_qdeclarativetext::embeddedImages()
+{
+ // Tests QTBUG-9900
+
+ QFETCH(QUrl, qmlfile);
+ QFETCH(QString, error);
+
+ TestHTTPServer server(14453);
+ server.serveDirectory(SRCDIR "/data/http");
+
+ if (!error.isEmpty())
+ QTest::ignoreMessage(QtWarningMsg, error.toLatin1());
+
+ QDeclarativeComponent textComponent(&engine, qmlfile);
+ QDeclarativeText *textObject = qobject_cast<QDeclarativeText*>(textComponent.create());
+
+ QVERIFY(textObject != 0);
+
+ QTRY_COMPARE(textObject->resourcesLoading(), 0);
+
+ QPixmap pm(SRCDIR "/data/http/exists.png");
+ if (error.isEmpty()) {
+ QCOMPARE(textObject->width(), double(pm.width()));
+ QCOMPARE(textObject->height(), double(pm.height()));
+ } else {
+ QVERIFY(16 != pm.width()); // check test is effective
+ QCOMPARE(textObject->width(), 16.0); // default size of QTextDocument broken image icon
+ QCOMPARE(textObject->height(), 16.0);
+ }
+}
+
QTEST_MAIN(tst_qdeclarativetext)
#include "tst_qdeclarativetext.moc"
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/data/returnValues.qml b/tests/auto/declarative/qdeclarativevaluetypes/data/returnValues.qml
new file mode 100644
index 0000000..185e7ba
--- /dev/null
+++ b/tests/auto/declarative/qdeclarativevaluetypes/data/returnValues.qml
@@ -0,0 +1,17 @@
+import Test 1.0
+import Qt 4.6
+
+MyTypeObject {
+ property bool test1: false;
+ property bool test2: false;
+
+ Component.onCompleted: {
+ var a = method();
+
+ test1 = (a.width == 13)
+ test2 = (a.height == 14)
+
+ size = a;
+ }
+}
+
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h b/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h
index 9057b4f..dd13429 100644
--- a/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h
+++ b/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h
@@ -129,6 +129,9 @@ public:
signals:
void changed();
void runScript();
+
+public slots:
+ QSize method() { return QSize(13, 14); }
};
QML_DECLARE_TYPE(MyTypeObject);
diff --git a/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp b/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp
index e653abf..b733b10 100644
--- a/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp
+++ b/tests/auto/declarative/qdeclarativevaluetypes/tst_qdeclarativevaluetypes.cpp
@@ -79,6 +79,7 @@ private slots:
void cppClasses();
void enums();
void conflictingBindings();
+ void returnValues();
private:
QDeclarativeEngine engine;
@@ -763,6 +764,19 @@ void tst_qdeclarativevaluetypes::conflictingBindings()
}
}
+void tst_qdeclarativevaluetypes::returnValues()
+{
+ QDeclarativeComponent component(&engine, TEST_FILE("returnValues.qml"));
+ QObject *object = component.create();
+ QVERIFY(object != 0);
+
+ QCOMPARE(object->property("test1").toBool(), true);
+ QCOMPARE(object->property("test2").toBool(), true);
+ QCOMPARE(object->property("size").toSize(), QSize(13, 14));
+
+ delete object;
+}
+
QTEST_MAIN(tst_qdeclarativevaluetypes)
#include "tst_qdeclarativevaluetypes.moc"
diff --git a/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml b/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml
index f6c033f..7ccba10 100644
--- a/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml
+++ b/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml
@@ -63,8 +63,9 @@ Rectangle {
Transition {
from: "*"; to: "*"
SequentialAnimation {
- ParentAction{}
- NumberAnimation { properties: "x,y,width"; easing.type: "InOutQuad" }
+ ParentAnimation{
+ NumberAnimation { properties: "x,y,width"; easing.type: "InOutQuad" }
+ }
}
}
]
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.0.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.0.png
index e6ea16d..e6ea16d 100644
--- a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.0.png
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.0.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.1.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.1.png
index b75ba61..b75ba61 100644
--- a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.1.png
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.1.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.2.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.2.png
index 4320f6f..4320f6f 100644
--- a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation.2.png
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.2.png
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.qml
index 4d0959a..4ab94f3 100644
--- a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data/colorAnimation-visual.qml
@@ -258,7 +258,7 @@ VisualTest {
}
Frame {
msec: 960
- image: "colorAnimation.0.png"
+ image: "colorAnimation-visual.0.png"
}
Frame {
msec: 976
@@ -270,7 +270,7 @@ VisualTest {
}
Frame {
msec: 1008
- hash: "243dbffcf416926242bbcb7348974c4c"
+ hash: "e0f53c5605116a30d9bf3c031c63d958"
}
Frame {
msec: 1024
@@ -370,7 +370,7 @@ VisualTest {
}
Frame {
msec: 1408
- hash: "7178bfe86fd2fd513218b33760460f8d"
+ hash: "45770fe0d61c485c13992d0f98b2a3ba"
}
Frame {
msec: 1424
@@ -470,7 +470,7 @@ VisualTest {
}
Frame {
msec: 1808
- hash: "8593a81be812edf54ec94da8ae9c1314"
+ hash: "a2fa71b4147372175774250501b6625e"
}
Frame {
msec: 1824
@@ -498,7 +498,7 @@ VisualTest {
}
Frame {
msec: 1920
- image: "colorAnimation.1.png"
+ image: "colorAnimation-visual.1.png"
}
Frame {
msec: 1936
@@ -570,7 +570,7 @@ VisualTest {
}
Frame {
msec: 2208
- hash: "e5dc5450604a491cc24a0dcf5c278b58"
+ hash: "10d46d2862e333e5136b1c046dabb33b"
}
Frame {
msec: 2224
@@ -738,7 +738,7 @@ VisualTest {
}
Frame {
msec: 2880
- image: "colorAnimation.2.png"
+ image: "colorAnimation-visual.2.png"
}
Frame {
msec: 2896
diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.0.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png
index 64d6b06..64d6b06 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.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.1.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png
index f7fce15..f7fce15 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.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.2.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png
index 3080df5..3080df5 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction.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.qml b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml
index 7c8c233..0a9057e 100644
--- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml
+++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml
@@ -242,7 +242,7 @@ VisualTest {
}
Frame {
msec: 960
- image: "propertyAction.0.png"
+ image: "propertyAction-visual.0.png"
}
Frame {
msec: 976
@@ -490,7 +490,7 @@ VisualTest {
}
Frame {
msec: 1920
- image: "propertyAction.1.png"
+ image: "propertyAction-visual.1.png"
}
Frame {
msec: 1936
@@ -738,7 +738,7 @@ VisualTest {
}
Frame {
msec: 2880
- image: "propertyAction.2.png"
+ image: "propertyAction-visual.2.png"
}
Frame {
msec: 2896
@@ -810,7 +810,7 @@ VisualTest {
}
Frame {
msec: 3168
- hash: "dcc79277fdb8966e5a3f2ed1b2fc4292"
+ hash: "38b7e5894cf49a19ac055264d6447b9f"
}
Frame {
msec: 3184
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 1f960e5..4366d53 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.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml
index 043f5e2..c6df3c4 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml
@@ -130,7 +130,7 @@ VisualTest {
}
Frame {
msec: 512
- hash: "37c3f25e5cfdb48d7e3ab0cf8ffb9154"
+ hash: "0f347763f25350ebb62dda1536372b45"
}
Frame {
msec: 528
@@ -186,7 +186,7 @@ VisualTest {
}
Frame {
msec: 736
- hash: "902683d72f789399e9d99d1cea1bf177"
+ hash: "74af3457583fbaf73f14556aeccc8403"
}
Frame {
msec: 752
@@ -210,7 +210,7 @@ VisualTest {
}
Frame {
msec: 832
- hash: "a15f19f374bbfb6a922b69d080a91eaa"
+ hash: "d2ed2cf3a12e41bac299399cc35abe6a"
}
Frame {
msec: 848
@@ -294,7 +294,7 @@ VisualTest {
}
Frame {
msec: 1168
- hash: "2192094410e2d7c8d9d4aa5f8deacff5"
+ hash: "85ef33fcb3f91e4fc20391bf94455984"
}
Frame {
msec: 1184
@@ -302,7 +302,7 @@ VisualTest {
}
Frame {
msec: 1200
- hash: "92176cce4836dcae4dfca94e49b041a8"
+ hash: "07acba64dc608439a8a54fcb080379e8"
}
Frame {
msec: 1216
@@ -310,7 +310,7 @@ VisualTest {
}
Frame {
msec: 1232
- hash: "42be5d26afb9f066dd27cc9fbaf6ce20"
+ hash: "1f964c6c9bebdc9945dc69a6095400f7"
}
Frame {
msec: 1248
@@ -318,7 +318,7 @@ VisualTest {
}
Frame {
msec: 1264
- hash: "7f9999a9c87af43b9703323efab31770"
+ hash: "2084ccc60ddd493399c128717816d33b"
}
Frame {
msec: 1280
@@ -346,7 +346,7 @@ VisualTest {
}
Frame {
msec: 1376
- hash: "49a1df977b0494c7c72ca0b65c394e13"
+ hash: "45d891d804609ebbe1d5ac3f826d0c17"
}
Frame {
msec: 1392
@@ -406,7 +406,7 @@ VisualTest {
}
Frame {
msec: 1616
- hash: "4520003d4b221a3de6834b2729b3026d"
+ hash: "880640372bf584955627f6835f24be13"
}
Frame {
msec: 1632
@@ -414,7 +414,7 @@ VisualTest {
}
Frame {
msec: 1648
- hash: "83d49474db15d5779923972ff5f55917"
+ hash: "705d9c8de05c859a42769f73761c6a63"
}
Frame {
msec: 1664
@@ -426,7 +426,7 @@ VisualTest {
}
Frame {
msec: 1696
- hash: "d8e398a1ce9ca45c19951e93bd5c932a"
+ hash: "64cd225202ed6c91b02c368a9160a656"
}
Frame {
msec: 1712
@@ -438,7 +438,7 @@ VisualTest {
}
Frame {
msec: 1744
- hash: "fc913807eb1069d611495fbd5d43ee3d"
+ hash: "fe899138116774df4c4441687e3019c5"
}
Frame {
msec: 1760
@@ -450,7 +450,7 @@ VisualTest {
}
Frame {
msec: 1792
- hash: "e3a2b5c7247acfc1b30825233fbfd56b"
+ hash: "c3ea530de646612f9203c5800cad884b"
}
Frame {
msec: 1808
@@ -490,7 +490,7 @@ VisualTest {
}
Frame {
msec: 1952
- hash: "3991bc7760b7981d80665e3a7654c9f4"
+ hash: "b980703c1d0018937e83a8ba8862469e"
}
Frame {
msec: 1968
@@ -502,15 +502,15 @@ VisualTest {
}
Frame {
msec: 2000
- hash: "723f87da7e5b002a2e9b0bcbc81f9458"
+ hash: "ee297a2d68c9e58157d9bf189d353713"
}
Frame {
msec: 2016
- hash: "6b8ded0d9386a3fff0601a100c513080"
+ hash: "00f3c9b8b37cb104cf2a7701639bc61f"
}
Frame {
msec: 2032
- hash: "f976cd5046ef5391536859e63db905bd"
+ hash: "ee297a2d68c9e58157d9bf189d353713"
}
Frame {
msec: 2048
@@ -562,7 +562,7 @@ VisualTest {
}
Frame {
msec: 2240
- hash: "e3a2b5c7247acfc1b30825233fbfd56b"
+ hash: "c3ea530de646612f9203c5800cad884b"
}
Frame {
msec: 2256
@@ -598,7 +598,7 @@ VisualTest {
}
Frame {
msec: 2384
- hash: "83d49474db15d5779923972ff5f55917"
+ hash: "705d9c8de05c859a42769f73761c6a63"
}
Frame {
msec: 2400
@@ -606,7 +606,7 @@ VisualTest {
}
Frame {
msec: 2416
- hash: "4520003d4b221a3de6834b2729b3026d"
+ hash: "880640372bf584955627f6835f24be13"
}
Frame {
msec: 2432
@@ -666,7 +666,7 @@ VisualTest {
}
Frame {
msec: 2656
- hash: "a676f45d946aeb9fa577c0e862735b01"
+ hash: "45d891d804609ebbe1d5ac3f826d0c17"
}
Frame {
msec: 2672
@@ -702,7 +702,7 @@ VisualTest {
}
Frame {
msec: 2800
- hash: "42be5d26afb9f066dd27cc9fbaf6ce20"
+ hash: "1f964c6c9bebdc9945dc69a6095400f7"
}
Frame {
msec: 2816
@@ -710,7 +710,7 @@ VisualTest {
}
Frame {
msec: 2832
- hash: "92176cce4836dcae4dfca94e49b041a8"
+ hash: "07acba64dc608439a8a54fcb080379e8"
}
Frame {
msec: 2848
@@ -802,7 +802,7 @@ VisualTest {
}
Frame {
msec: 3200
- hash: "a15f19f374bbfb6a922b69d080a91eaa"
+ hash: "d2ed2cf3a12e41bac299399cc35abe6a"
}
Frame {
msec: 3216
@@ -826,7 +826,7 @@ VisualTest {
}
Frame {
msec: 3296
- hash: "902683d72f789399e9d99d1cea1bf177"
+ hash: "74af3457583fbaf73f14556aeccc8403"
}
Frame {
msec: 3312
@@ -854,7 +854,7 @@ VisualTest {
}
Frame {
msec: 3408
- hash: "f602e3eda1889d1a7e49560f0dfb5d4c"
+ hash: "89c159ef00d273ecfe61332e1bf7244d"
}
Frame {
msec: 3424
@@ -862,7 +862,7 @@ VisualTest {
}
Frame {
msec: 3440
- hash: "c8312ede0998636a6bd6451d13636577"
+ hash: "61c16009b65a55bffb63e27727e1615e"
}
Frame {
msec: 3456
@@ -950,7 +950,7 @@ VisualTest {
}
Frame {
msec: 3792
- hash: "8419b295f67cae133760da79dfc26505"
+ hash: "f22a47b846cfee96ebdf39bbce2e6d51"
}
Frame {
msec: 3808
@@ -970,7 +970,7 @@ VisualTest {
}
Frame {
msec: 3872
- hash: "d56ba74d38c1889a278929d1c1b7f17a"
+ hash: "ed9f2ca797894612600bc4b7fbaecb84"
}
Frame {
msec: 3888
@@ -1130,7 +1130,7 @@ VisualTest {
}
Frame {
msec: 4512
- hash: "37c3f25e5cfdb48d7e3ab0cf8ffb9154"
+ hash: "0f347763f25350ebb62dda1536372b45"
}
Frame {
msec: 4528
@@ -1186,7 +1186,7 @@ VisualTest {
}
Frame {
msec: 4736
- hash: "902683d72f789399e9d99d1cea1bf177"
+ hash: "74af3457583fbaf73f14556aeccc8403"
}
Frame {
msec: 4752
@@ -1210,7 +1210,7 @@ VisualTest {
}
Frame {
msec: 4832
- hash: "a15f19f374bbfb6a922b69d080a91eaa"
+ hash: "d2ed2cf3a12e41bac299399cc35abe6a"
}
Frame {
msec: 4848
@@ -1294,7 +1294,7 @@ VisualTest {
}
Frame {
msec: 5168
- hash: "2192094410e2d7c8d9d4aa5f8deacff5"
+ hash: "85ef33fcb3f91e4fc20391bf94455984"
}
Frame {
msec: 5184
@@ -1302,7 +1302,7 @@ VisualTest {
}
Frame {
msec: 5200
- hash: "92176cce4836dcae4dfca94e49b041a8"
+ hash: "07acba64dc608439a8a54fcb080379e8"
}
Frame {
msec: 5216
@@ -1310,7 +1310,7 @@ VisualTest {
}
Frame {
msec: 5232
- hash: "42be5d26afb9f066dd27cc9fbaf6ce20"
+ hash: "1f964c6c9bebdc9945dc69a6095400f7"
}
Frame {
msec: 5248
@@ -1318,7 +1318,7 @@ VisualTest {
}
Frame {
msec: 5264
- hash: "7f9999a9c87af43b9703323efab31770"
+ hash: "2084ccc60ddd493399c128717816d33b"
}
Frame {
msec: 5280
@@ -1346,7 +1346,7 @@ VisualTest {
}
Frame {
msec: 5376
- hash: "49a1df977b0494c7c72ca0b65c394e13"
+ hash: "45d891d804609ebbe1d5ac3f826d0c17"
}
Frame {
msec: 5392
@@ -1406,7 +1406,7 @@ VisualTest {
}
Frame {
msec: 5616
- hash: "4520003d4b221a3de6834b2729b3026d"
+ hash: "880640372bf584955627f6835f24be13"
}
Frame {
msec: 5632
@@ -1414,7 +1414,7 @@ VisualTest {
}
Frame {
msec: 5648
- hash: "83d49474db15d5779923972ff5f55917"
+ hash: "705d9c8de05c859a42769f73761c6a63"
}
Frame {
msec: 5664
@@ -1426,7 +1426,7 @@ VisualTest {
}
Frame {
msec: 5696
- hash: "d8e398a1ce9ca45c19951e93bd5c932a"
+ hash: "64cd225202ed6c91b02c368a9160a656"
}
Frame {
msec: 5712
@@ -1438,7 +1438,7 @@ VisualTest {
}
Frame {
msec: 5744
- hash: "fc913807eb1069d611495fbd5d43ee3d"
+ hash: "fe899138116774df4c4441687e3019c5"
}
Frame {
msec: 5760
@@ -1450,7 +1450,7 @@ VisualTest {
}
Frame {
msec: 5792
- hash: "e3a2b5c7247acfc1b30825233fbfd56b"
+ hash: "c3ea530de646612f9203c5800cad884b"
}
Frame {
msec: 5808
@@ -1482,7 +1482,7 @@ VisualTest {
}
Frame {
msec: 5920
- hash: "ec7e1190dd4fe122545e6ce6c8740500"
+ hash: "3b7b83e97d17440b42e6ef4b962076d8"
}
Frame {
msec: 5936
@@ -1490,7 +1490,7 @@ VisualTest {
}
Frame {
msec: 5952
- hash: "3991bc7760b7981d80665e3a7654c9f4"
+ hash: "b980703c1d0018937e83a8ba8862469e"
}
Frame {
msec: 5968
@@ -1502,15 +1502,15 @@ VisualTest {
}
Frame {
msec: 6000
- hash: "723f87da7e5b002a2e9b0bcbc81f9458"
+ hash: "ee297a2d68c9e58157d9bf189d353713"
}
Frame {
msec: 6016
- hash: "6b8ded0d9386a3fff0601a100c513080"
+ hash: "00f3c9b8b37cb104cf2a7701639bc61f"
}
Frame {
msec: 6032
- hash: "f976cd5046ef5391536859e63db905bd"
+ hash: "ee297a2d68c9e58157d9bf189d353713"
}
Frame {
msec: 6048
@@ -1562,7 +1562,7 @@ VisualTest {
}
Frame {
msec: 6240
- hash: "e3a2b5c7247acfc1b30825233fbfd56b"
+ hash: "c3ea530de646612f9203c5800cad884b"
}
Frame {
msec: 6256
@@ -1598,7 +1598,7 @@ VisualTest {
}
Frame {
msec: 6384
- hash: "83d49474db15d5779923972ff5f55917"
+ hash: "705d9c8de05c859a42769f73761c6a63"
}
Frame {
msec: 6400
@@ -1606,7 +1606,7 @@ VisualTest {
}
Frame {
msec: 6416
- hash: "4520003d4b221a3de6834b2729b3026d"
+ hash: "880640372bf584955627f6835f24be13"
}
Frame {
msec: 6432
@@ -1666,7 +1666,7 @@ VisualTest {
}
Frame {
msec: 6656
- hash: "a676f45d946aeb9fa577c0e862735b01"
+ hash: "45d891d804609ebbe1d5ac3f826d0c17"
}
Frame {
msec: 6672
@@ -1702,7 +1702,7 @@ VisualTest {
}
Frame {
msec: 6800
- hash: "42be5d26afb9f066dd27cc9fbaf6ce20"
+ hash: "1f964c6c9bebdc9945dc69a6095400f7"
}
Frame {
msec: 6816
@@ -1710,7 +1710,7 @@ VisualTest {
}
Frame {
msec: 6832
- hash: "92176cce4836dcae4dfca94e49b041a8"
+ hash: "07acba64dc608439a8a54fcb080379e8"
}
Frame {
msec: 6848
@@ -1779,7 +1779,7 @@ VisualTest {
Key {
type: 6
key: 16777249
- modifiers: 67108864
+ modifiers: 0
text: ""
autorep: false
count: 1
@@ -1810,7 +1810,7 @@ VisualTest {
}
Frame {
msec: 7200
- hash: "a15f19f374bbfb6a922b69d080a91eaa"
+ hash: "d2ed2cf3a12e41bac299399cc35abe6a"
}
Frame {
msec: 7216
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.1.png
deleted file mode 100644
index 80cbd26..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.1.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.2.png
deleted file mode 100644
index 80cbd26..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.2.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.3.png
deleted file mode 100644
index 80cbd26..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.3.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.4.png
deleted file mode 100644
index 80cbd26..0000000
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.4.png
+++ /dev/null
Binary files differ
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml
index 16cd5e9..1403d35 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml
@@ -6,1354 +6,6 @@ VisualTest {
}
Frame {
msec: 16
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 32
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 48
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 64
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 80
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 96
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 112
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 128
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 144
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 160
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 176
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 192
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 208
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 224
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 240
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 256
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 272
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 288
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 304
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 320
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 336
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 352
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 368
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 384
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 400
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 416
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 432
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 448
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 464
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 480
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 496
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 512
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 528
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 544
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 560
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 576
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 592
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 608
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 624
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 640
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 656
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 672
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 688
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 704
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 720
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 736
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 752
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 768
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 784
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 800
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 816
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 832
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 848
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 864
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 880
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 896
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 912
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 928
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 944
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 960
- image: "borders.0.png"
- }
- Frame {
- msec: 976
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 992
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1008
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1024
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1040
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1056
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1072
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1088
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1104
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1120
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1136
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1152
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1168
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1184
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1200
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1216
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1232
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1248
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1264
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1280
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1296
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1312
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1328
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1344
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1360
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1376
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1392
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1408
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1424
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1440
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1456
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1472
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1488
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1504
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1520
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1536
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1552
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1568
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1584
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1600
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1616
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1632
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1648
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1664
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1680
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1696
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1712
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1728
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1744
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1760
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1776
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1792
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1808
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1824
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1840
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1856
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1872
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1888
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1904
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1920
- image: "borders.1.png"
- }
- Frame {
- msec: 1936
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1952
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1968
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 1984
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2000
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2016
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2032
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2048
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2064
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2080
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2096
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2112
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2128
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2144
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2160
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2176
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2192
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2208
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2224
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2240
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2256
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2272
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2288
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2304
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2320
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2336
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2352
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2368
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2384
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2400
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2416
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2432
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2448
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2464
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2480
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2496
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2512
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2528
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2544
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2560
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2576
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2592
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2608
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2624
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2640
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2656
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2672
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2688
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2704
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2720
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2736
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2752
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2768
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2784
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2800
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2816
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2832
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2848
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2864
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2880
- image: "borders.2.png"
- }
- Frame {
- msec: 2896
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2912
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2928
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2944
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2960
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2976
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 2992
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3008
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3024
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3040
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3056
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3072
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3088
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3104
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3120
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3136
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3152
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3168
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3184
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3200
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3216
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3232
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3248
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3264
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3280
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3296
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3312
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3328
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3344
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3360
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3376
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3392
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3408
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3424
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3440
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3456
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3472
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3488
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3504
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3520
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3536
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3552
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3568
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3584
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3600
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3616
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3632
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3648
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3664
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3680
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3696
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3712
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3728
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3744
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3760
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3776
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3792
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3808
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3824
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3840
- image: "borders.3.png"
- }
- Frame {
- msec: 3856
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3872
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3888
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3904
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3920
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3936
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3952
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3968
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 3984
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4000
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4016
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4032
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4048
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4064
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4080
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4096
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4112
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4128
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4144
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4160
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4176
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4192
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4208
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4224
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4240
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4256
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4272
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4288
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4304
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4320
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4336
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4352
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4368
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4384
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4400
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4416
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4432
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4448
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4464
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4480
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4496
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4512
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4528
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4544
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4560
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4576
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4592
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4608
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4624
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4640
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4656
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4672
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4688
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4704
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4720
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4736
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4752
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4768
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4784
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4800
- image: "borders.4.png"
- }
- Frame {
- msec: 4816
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4832
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4848
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4864
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4880
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4896
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4912
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4928
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4944
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4960
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4976
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 4992
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5008
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5024
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5040
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5056
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5072
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5088
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5104
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5120
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5136
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5152
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5168
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5184
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5200
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5216
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5232
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5248
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5264
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5280
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5296
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5312
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5328
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5344
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5360
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5376
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5392
- hash: "ab9753116e289c932064144bb0845857"
- }
- Frame {
- msec: 5408
- hash: "ab9753116e289c932064144bb0845857"
+ hash: "258a7e75b491e4f51a91739c776803b3"
}
}
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml
index 2d481c9..fc8261f 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml
@@ -1,4 +1,5 @@
import Qt 4.6
+import Qt.labs.particles 1.0
Rectangle {
width: 640; height: 480; color: "black"
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml
index 1eb115d..1eb115d 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/repeater.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml
diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/repeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml
index ff60365..ff60365 100644
--- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/repeater.qml
+++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml
diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp
index 718e3a6..681b530 100644
--- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp
+++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp
@@ -100,20 +100,35 @@ void tst_qmlvisual::visual_data()
if (qgetenv("QMLVISUAL_ALL") != "")
files << findQmlFiles(QDir(QT_TEST_SOURCE_DIR));
else {
+ //these are newly added tests we want to try out in CI (then move to the stable list)
+ files << QT_TEST_SOURCE_DIR "/qdeclarativeborderimage/borders.qml";
+ files << QT_TEST_SOURCE_DIR "/qdeclarativeborderimage/animated.qml";
+ files << QT_TEST_SOURCE_DIR "/qdeclarativeborderimage/animated-smooth.qml";
+ files << QT_TEST_SOURCE_DIR "/qdeclarativeflipable/test-flipable.qml";
+ files << QT_TEST_SOURCE_DIR "/qdeclarativepositioners/usingRepeater.qml";
+
//these are tests we think are stable and useful enough to be run by the CI system
files << QT_TEST_SOURCE_DIR "/animation/bindinganimation/bindinganimation.qml";
- files << QT_TEST_SOURCE_DIR "/animation/colorAnimation/colorAnimation-visual.qml";
- files << QT_TEST_SOURCE_DIR "/animation/easing/easing.qml";
files << QT_TEST_SOURCE_DIR "/animation/loop/loop.qml";
files << QT_TEST_SOURCE_DIR "/animation/parallelAnimation/parallelAnimation-visual.qml";
files << QT_TEST_SOURCE_DIR "/animation/parentAnimation/parentAnimation-visual.qml";
- files << QT_TEST_SOURCE_DIR "/animation/pauseAnimation/pauseAnimation-visual.qml";
- files << QT_TEST_SOURCE_DIR "/animation/propertyAction/propertyAction-visual.qml";
files << QT_TEST_SOURCE_DIR "/animation/reanchor/reanchor.qml";
files << QT_TEST_SOURCE_DIR "/animation/scriptAction/scriptAction-visual.qml";
- files << QT_TEST_SOURCE_DIR "/qdeclarativemousearea/mousearea-visual.qml";
files << QT_TEST_SOURCE_DIR "/qdeclarativemousearea/drag.qml";
files << QT_TEST_SOURCE_DIR "/fillmode/fillmode.qml";
+
+ //these reliably fail in CI, for unknown reasons
+ //files << QT_TEST_SOURCE_DIR "/animation/easing/easing.qml";
+ //files << QT_TEST_SOURCE_DIR "/animation/pauseAnimation/pauseAnimation-visual.qml";
+
+ //these reliably fail on Linux because of color interpolation (different float rounding)
+#if !defined(Q_WS_X11) && !defined(Q_WS_QWS)
+ files << QT_TEST_SOURCE_DIR "/animation/colorAnimation/colorAnimation-visual.qml";
+ files << QT_TEST_SOURCE_DIR "/animation/propertyAction/propertyAction-visual.qml";
+#endif
+
+ //this is unstable because the MouseArea press-and-hold timer is not synchronized to the animation framework.
+ //files << QT_TEST_SOURCE_DIR "/qdeclarativemousearea/mousearea-visual.qml";
}
foreach (const QString &file, files) {
diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp
index d2181f8..f5c32cd 100644
--- a/tests/auto/qlistview/tst_qlistview.cpp
+++ b/tests/auto/qlistview/tst_qlistview.cpp
@@ -123,6 +123,7 @@ private slots:
void taskQTBUG_435_deselectOnViewportClick();
void taskQTBUG_2678_spacingAndWrappedText();
void taskQTBUG_5877_skippingItemInPageDownUp();
+ void taskQTBUG_9455_wrongScrollbarRanges();
};
// Testing get/set functions
@@ -1941,5 +1942,34 @@ void tst_QListView::taskQTBUG_5877_skippingItemInPageDownUp()
}
}
+class ListView_9455 : public QListView
+{
+public:
+ QSize contentsSize() const
+ {
+ return QListView::contentsSize();
+ }
+};
+
+void tst_QListView::taskQTBUG_9455_wrongScrollbarRanges()
+{
+ QStringList list;
+ const int nrItems = 8;
+ for (int i = 0; i < nrItems; i++)
+ list << QString().sprintf("item %d", i);
+
+ QStringListModel model(list);
+ ListView_9455 w;
+ w.setModel(&model);
+ w.setViewMode(QListView::IconMode);
+ w.resize(116, 132);
+ w.setMovement(QListView::Static);
+ const int spacing = 40;
+ w.setSpacing(spacing);
+ w.show();
+ QTest::qWaitForWindowShown(&w);
+ QCOMPARE(w.verticalScrollBar()->maximum(), w.contentsSize().height() - w.viewport()->geometry().height());
+}
+
QTEST_MAIN(tst_QListView)
#include "tst_qlistview.moc"
diff --git a/tests/auto/qthread/tst_qthread.cpp b/tests/auto/qthread/tst_qthread.cpp
index 871578e..9a4397e 100644
--- a/tests/auto/qthread/tst_qthread.cpp
+++ b/tests/auto/qthread/tst_qthread.cpp
@@ -174,8 +174,8 @@ public:
void run()
{
+ Simple_Thread::run();
if (object) {
- Simple_Thread::run();
object->thread = this;
object->code = code;
QTimer::singleShot(100, object, SLOT(slot()));
@@ -218,8 +218,8 @@ public:
void run()
{
+ Simple_Thread::run();
if (object) {
- Simple_Thread::run();
object->thread = this;
QTimer::singleShot(100, object, SLOT(slot()));
}
@@ -443,22 +443,24 @@ void tst_QThread::exit()
thread2.code = 53;
thread2.result = 0;
thread2.start();
- thread2.exit(thread.code);
+ thread2.exit(thread2.code);
+ QMutexLocker locker2(&thread2.mutex);
+ thread2.cond.wait(locker2.mutex());
QVERIFY(thread2.wait(five_minutes));
- QCOMPARE(thread.result, thread.code);
+ QCOMPARE(thread2.result, thread2.code);
}
void tst_QThread::start()
{
QThread::Priority priorities[] = {
- QThread::IdlePriority,
- QThread::LowestPriority,
- QThread::LowPriority,
- QThread::NormalPriority,
- QThread::HighPriority,
- QThread::HighestPriority,
- QThread::TimeCriticalPriority,
- QThread::InheritPriority
+ QThread::IdlePriority,
+ QThread::LowestPriority,
+ QThread::LowPriority,
+ QThread::NormalPriority,
+ QThread::HighPriority,
+ QThread::HighestPriority,
+ QThread::TimeCriticalPriority,
+ QThread::InheritPriority
};
const int prio_count = sizeof(priorities) / sizeof(QThread::Priority);
@@ -514,8 +516,10 @@ void tst_QThread::quit()
thread2.result = -1;
thread2.start();
thread2.quit();
+ QMutexLocker locker2(&thread2.mutex);
+ thread2.cond.wait(locker2.mutex());
QVERIFY(thread2.wait(five_minutes));
- QCOMPARE(thread.result, 0);
+ QCOMPARE(thread2.result, 0);
}
void tst_QThread::wait()
@@ -692,7 +696,7 @@ void NativeThreadWrapper::start(FunctionPointer functionPointer, void *data)
const int state = pthread_create(&nativeThreadHandle, 0, NativeThreadWrapper::runUnix, this);
Q_UNUSED(state);
#elif defined(Q_OS_WINCE)
- nativeThreadHandle = CreateThread(NULL, 0 , (LPTHREAD_START_ROUTINE)NativeThreadWrapper::runWin , this, 0, NULL);
+ nativeThreadHandle = CreateThread(NULL, 0 , (LPTHREAD_START_ROUTINE)NativeThreadWrapper::runWin , this, 0, NULL);
#elif defined Q_OS_WIN
unsigned thrdid = 0;
nativeThreadHandle = (Qt::HANDLE) _beginthreadex(NULL, 0, NativeThreadWrapper::runWin, this, 0, &thrdid);
diff --git a/tools/qdoc3/test/qt-build-docs.qdocconf b/tools/qdoc3/test/qt-build-docs.qdocconf
index 900c7c3..dbff4e2 100644
--- a/tools/qdoc3/test/qt-build-docs.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs.qdocconf
@@ -18,20 +18,20 @@ qhp.Qt.file = qt.qhp
qhp.Qt.namespace = com.trolltech.qt.470
qhp.Qt.virtualFolder = qdoc
qhp.Qt.indexTitle = Qt Reference Documentation
-qhp.Qt.indexRoot =
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
-qhp.Qt.extraFiles = style/style.css \
+qhp.Qt.extraFiles = index.html \
+ style/style.css \
scripts/functions.js \
scripts/jquery.js \
images/api_examples.png \
images/api_lookup.png \
- images/api_topcs.png \
- images/bg_11.png \
- images/bg_1_blank.png \
- images/bg_1.png \
- images/bg_1r.png \
+ images/api_topics.png \
+ images/bg_ll.png \
+ images/bg_l_blank.png \
+ images/bg_l.png \
+ images/bg_lr.png \
images/bg_r.png \
images/bg_ul_blank.png \
images/bg_ul.png \
diff --git a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
index 93c5e3e..461c069 100644
--- a/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
+++ b/tools/qdoc3/test/qt-build-docs_zh_CN.qdocconf
@@ -29,16 +29,17 @@ qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
-qhp.Qt.extraFiles = style/style.css \
+qhp.Qt.extraFiles = index.html \
+ style/style.css \
scripts/functions.js \
scripts/jquery.js \
images/api_examples.png \
images/api_lookup.png \
- images/api_topcs.png \
- images/bg_11.png \
- images/bg_1_blank.png \
- images/bg_1.png \
- images/bg_1r.png \
+ images/api_topics.png \
+ images/bg_ll.png \
+ images/bg_l_blank.png \
+ images/bg_l.png \
+ images/bg_lr.png \
images/bg_r.png \
images/bg_ul_blank.png \
images/bg_ul.png \
diff --git a/tools/qdoc3/test/qt-defines.qdocconf b/tools/qdoc3/test/qt-defines.qdocconf
index faf3906..7449ac3 100644
--- a/tools/qdoc3/test/qt-defines.qdocconf
+++ b/tools/qdoc3/test/qt-defines.qdocconf
@@ -56,8 +56,8 @@ extraimages.HTML = qt-logo \
stylesheet-coffee-plastique.png
# This stuff is used by the new doc format.
-scriptdirs = $QTDIR/doc/src/template/scripts
-styledirs = $QTDIR/doc/src/template/style
+scriptdirs = $QT_SOURCE_TREE/doc/src/template/scripts
+styledirs = $QT_SOURCE_TREE/doc/src/template/style
scripts.HTML = functions.js \
jquery.js
diff --git a/tools/qdoc3/test/qt.qdocconf b/tools/qdoc3/test/qt.qdocconf
index 91f9525..cc3e436 100644
--- a/tools/qdoc3/test/qt.qdocconf
+++ b/tools/qdoc3/test/qt.qdocconf
@@ -24,16 +24,17 @@ qhp.Qt.indexRoot =
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
-qhp.Qt.extraFiles = style/style.css \
+qhp.Qt.extraFiles = index.html \
+ style/style.css \
scripts/functions.js \
scripts/jquery.js \
images/api_examples.png \
images/api_lookup.png \
- images/api_topcs.png \
- images/bg_11.png \
- images/bg_1_blank.png \
- images/bg_1.png \
- images/bg_1r.png \
+ images/api_topics.png \
+ images/bg_ll.png \
+ images/bg_l_blank.png \
+ images/bg_l.png \
+ images/bg_lr.png \
images/bg_r.png \
images/bg_ul_blank.png \
images/bg_ul.png \
diff --git a/tools/qdoc3/test/qt_zh_CN.qdocconf b/tools/qdoc3/test/qt_zh_CN.qdocconf
index 925edec..c5d2c88 100644
--- a/tools/qdoc3/test/qt_zh_CN.qdocconf
+++ b/tools/qdoc3/test/qt_zh_CN.qdocconf
@@ -31,16 +31,17 @@ qhp.Qt.customFilters.Qt.filterAttributes = qt 4.7.0
# Files not referenced in any qdoc file (last four are needed by qtdemo)
# See also extraimages.HTML
-qhp.Qt.extraFiles = style/style.css \
+qhp.Qt.extraFiles = index.html \
+ style/style.css \
scripts/functions.js \
scripts/jquery.js \
images/api_examples.png \
images/api_lookup.png \
- images/api_topcs.png \
- images/bg_11.png \
- images/bg_1_blank.png \
- images/bg_1.png \
- images/bg_1r.png \
+ images/api_topics.png \
+ images/bg_ll.png \
+ images/bg_l_blank.png \
+ images/bg_l.png \
+ images/bg_lr.png \
images/bg_r.png \
images/bg_ul_blank.png \
images/bg_ul.png \
diff --git a/tools/qml/qdeclarativetester.cpp b/tools/qml/qdeclarativetester.cpp
index cf537ee..11fa22f 100644
--- a/tools/qml/qdeclarativetester.cpp
+++ b/tools/qml/qdeclarativetester.cpp
@@ -332,6 +332,24 @@ void QDeclarativeTester::updateCurrentTime(int msec)
qWarning() << "QDeclarativeTester: Image mismatch. Reject saved to:"
<< reject;
img.save(reject);
+ bool doDiff = (goodImage.size() == img.size());
+ if (doDiff) {
+ QImage diffimg(m_view->width(), m_view->height(), QImage::Format_RGB32);
+ diffimg.fill(qRgb(255,255,255));
+ QPainter p(&diffimg);
+ int diffCount = 0;
+ for (int x = 0; x < img.width(); ++x) {
+ for (int y = 0; y < img.height(); ++y) {
+ if (goodImage.pixel(x,y) != img.pixel(x,y)) {
+ ++diffCount;
+ p.drawPoint(x,y);
+ }
+ }
+ }
+ QString diff(frame->image().toLocalFile() + ".diff.png");
+ diffimg.save(diff);
+ qWarning().nospace() << " Diff (" << diffCount << " pixels differed) saved to: " << diff;
+ }
imagefailure();
}
}
diff --git a/tools/qml/qml.pri b/tools/qml/qml.pri
new file mode 100644
index 0000000..c48e919
--- /dev/null
+++ b/tools/qml/qml.pri
@@ -0,0 +1,29 @@
+QT += declarative script network sql
+contains(QT_CONFIG, opengl) {
+ QT += opengl
+ DEFINES += GL_SUPPORTED
+}
+
+INCLUDEPATH += $$PWD
+
+HEADERS += $$PWD/qmlruntime.h \
+ $$PWD/proxysettings.h \
+ $$PWD/qdeclarativetester.h \
+ $$PWD/deviceorientation.h \
+ $$PWD/qdeclarativefolderlistmodel.h
+SOURCES += $$PWD/qmlruntime.cpp \
+ $$PWD/proxysettings.cpp \
+ $$PWD/qdeclarativetester.cpp \
+ $$PWD/qdeclarativefolderlistmodel.cpp
+
+RESOURCES = $$PWD/qmlruntime.qrc
+maemo5 {
+ SOURCES += $$PWD/deviceorientation_maemo.cpp
+} else {
+ SOURCES += $$PWD/deviceorientation.cpp
+}
+FORMS = $$PWD/recopts.ui \
+ $$PWD/proxysettings.ui
+
+include(../shared/deviceskin/deviceskin.pri)
+
diff --git a/tools/qml/qml.pro b/tools/qml/qml.pro
index 1ed8b2c..869907f 100644
--- a/tools/qml/qml.pro
+++ b/tools/qml/qml.pro
@@ -1,40 +1,15 @@
TEMPLATE = app
-CONFIG += qt \
- uic
+CONFIG += qt uic
DESTDIR = ../../bin
-QT += declarative \
- script \
- network \
- sql
-contains(QT_CONFIG, opengl) {
- QT += opengl
- DEFINES += GL_SUPPORTED
-}
+include(qml.pri)
+
+SOURCES += main.cpp
-# Input
-HEADERS += qmlruntime.h \
- proxysettings.h \
- qdeclarativetester.h \
- deviceorientation.h \
- qdeclarativefolderlistmodel.h
-SOURCES += main.cpp \
- qmlruntime.cpp \
- proxysettings.cpp \
- qdeclarativetester.cpp \
- qdeclarativefolderlistmodel.cpp
-RESOURCES = qmlruntime.qrc
-maemo5 {
- SOURCES += deviceorientation_maemo.cpp
-} else {
- SOURCES += deviceorientation.cpp
-}
-FORMS = recopts.ui \
- proxysettings.ui
INCLUDEPATH += ../../include/QtDeclarative
INCLUDEPATH += ../../src/declarative/util
INCLUDEPATH += ../../src/declarative/graphicsitems
-include(../shared/deviceskin/deviceskin.pri)
+
target.path = $$[QT_INSTALL_BINS]
INSTALLS += target
diff --git a/tools/qml/qmlruntime.cpp b/tools/qml/qmlruntime.cpp
index df29294..53409c1 100644
--- a/tools/qml/qmlruntime.cpp
+++ b/tools/qml/qmlruntime.cpp
@@ -55,11 +55,6 @@
#include <QAbstractAnimation>
#include "deviceskin.h"
-#if (QT_VERSION >= QT_VERSION_CHECK(4, 6, 3))
-#include <private/qzipreader_p.h>
-#define QDECLARATIVEVIEWER_ZIP_SUPPORT
-#endif
-
#include <QSettings>
#include <QXmlStreamReader>
#include <QBuffer>
@@ -470,6 +465,8 @@ QDeclarativeViewer::QDeclarativeViewer(QWidget *parent, Qt::WindowFlags flags)
, portraitOrientation(0), landscapeOrientation(0)
, m_scriptOptions(0), tester(0), useQmlFileBrowser(true)
{
+ QDeclarativeViewer::registerTypes();
+
devicemode = false;
skin = 0;
canvas = 0;
@@ -553,6 +550,11 @@ QMenuBar *QDeclarativeViewer::menuBar() const
return mb;
}
+QDeclarativeView *QDeclarativeViewer::view() const
+{
+ return canvas;
+}
+
void QDeclarativeViewer::createMenu(QMenuBar *menu, QMenu *flatmenu)
{
QObject *parent = flatmenu ? (QObject*)flatmenu : (QObject*)menu;
@@ -891,120 +893,19 @@ void QDeclarativeViewer::addPluginPath(const QString& plugin)
void QDeclarativeViewer::reload()
{
- openQml(currentFileOrUrl);
-}
-
-void QDeclarativeViewer::open(const QString& doc)
-{
-#ifdef QDECLARATIVEVIEWER_ZIP_SUPPORT
- if (doc.endsWith(".wgt",Qt::CaseInsensitive)
- || doc.endsWith(".wgz",Qt::CaseInsensitive)
- || doc.endsWith(".zip",Qt::CaseInsensitive))
- openWgt(doc);
- else
-#endif
- openQml(doc);
-}
-
-void QDeclarativeViewer::openWgt(const QString& doc)
-{
-#ifdef QDECLARATIVEVIEWER_ZIP_SUPPORT
- // XXX This functionality could be migrated to QDeclarativeView once refined
-
- QUrl url(doc);
- if (url.isRelative())
- url = QUrl::fromLocalFile(doc);
- delete canvas->rootObject();
- canvas->engine()->clearComponentCache();
- QNetworkAccessManager * nam = canvas->engine()->networkAccessManager();
- wgtreply = nam->get(QNetworkRequest(url));
- connect(wgtreply,SIGNAL(finished()),this,SLOT(unpackWgt()));
-#endif
-}
-
-#ifdef QDECLARATIVEVIEWER_ZIP_SUPPORT
-static void removeRecursive(const QString& dirname)
-{
- QDir dir(dirname);
- QFileInfoList entries(dir.entryInfoList(QDir::Dirs|QDir::Files|QDir::NoDotAndDotDot));
- for (int i = 0; i < entries.count(); ++i)
- if (entries[i].isDir())
- removeRecursive(entries[i].filePath());
- else
- dir.remove(entries[i].fileName());
- QDir().rmdir(dirname);
-}
-#endif
-
-void QDeclarativeViewer::unpackWgt()
-{
-#ifdef QDECLARATIVEVIEWER_ZIP_SUPPORT
- QByteArray all = wgtreply->readAll();
- QBuffer buf(&all);
- buf.open(QIODevice::ReadOnly);
- QZipReader zip(&buf);
- /*
- for (int i=0; i<zip.count(); ++i) {
- QZipReader::FileInfo info = zip.entryInfoAt(i);
- qDebug() << "zip:" << info.filePath;
- }
- */
- wgtdir = QDir::tempPath()+QDir::separator()+QLatin1String("qml-wgt");
- removeRecursive(wgtdir);
- QDir().mkpath(wgtdir);
- zip.extractAll(wgtdir);
-
- QString rootfile;
-
- if (wgtreply->header(QNetworkRequest::ContentTypeHeader).toString() == "application/widget" || wgtreply->url().path().endsWith(".wgt",Qt::CaseInsensitive)) {
- // W3C Draft http://www.w3.org/TR/2009/CR-widgets-20091201
- QFile configfile(wgtdir+QDir::separator()+"config.xml");
- if (configfile.open(QIODevice::ReadOnly)) {
- QXmlStreamReader config(&configfile);
- if (config.readNextStartElement() && config.name() == "widget") {
- while (config.readNextStartElement()) {
- if (config.name() == "content") {
- rootfile = wgtdir + QDir::separator();
- rootfile += config.attributes().value(QLatin1String("src"));
- }
- // XXX process other config
-
- config.skipCurrentElement();
- }
- }
- } else {
- qWarning("No config.xml found - non-standard WGT file");
- }
- if (rootfile.isEmpty()) {
- QString def = wgtdir+QDir::separator()+"index.qml";
- if (QFile::exists(def))
- rootfile = def;
- }
- } else {
- // Just find index.qml, preferably at the root
- for (int i=0; i<zip.count(); ++i) {
- QZipReader::FileInfo info = zip.entryInfoAt(i);
- if (info.filePath.compare(QLatin1String("index.qml"),Qt::CaseInsensitive)==0)
- rootfile = wgtdir+QDir::separator()+info.filePath;
- if (rootfile.isEmpty() && info.filePath.endsWith("/index.qml",Qt::CaseInsensitive))
- rootfile = wgtdir+QDir::separator()+info.filePath;
- }
- }
-
- openQml(rootfile);
-#endif
+ open(currentFileOrUrl);
}
void QDeclarativeViewer::openFile()
{
QString cur = canvas->source().toLocalFile();
if (useQmlFileBrowser) {
- openQml("qrc:/content/Browser.qml");
+ open("qrc:/content/Browser.qml");
} else {
QString fileName = QFileDialog::getOpenFileName(this, tr("Open QML file"), cur, tr("QML Files (*.qml)"));
if (!fileName.isEmpty()) {
QFileInfo fi(fileName);
- openQml(fi.absoluteFilePath());
+ open(fi.absoluteFilePath());
}
}
}
@@ -1034,10 +935,10 @@ void QDeclarativeViewer::statusChanged()
void QDeclarativeViewer::launch(const QString& file_or_url)
{
- QMetaObject::invokeMethod(this, "openQml", Qt::QueuedConnection, Q_ARG(QString, file_or_url));
+ QMetaObject::invokeMethod(this, "open", Qt::QueuedConnection, Q_ARG(QString, file_or_url));
}
-void QDeclarativeViewer::openQml(const QString& file_or_url)
+bool QDeclarativeViewer::open(const QString& file_or_url)
{
currentFileOrUrl = file_or_url;
@@ -1070,7 +971,7 @@ void QDeclarativeViewer::openQml(const QString& file_or_url)
if (fi.exists()) {
if (fi.suffix().toLower() != QLatin1String("qml")) {
qWarning() << "qml cannot open non-QML file" << fileName;
- return;
+ return false;
}
QDir dir(fi.path()+"/dummydata", "*.qml");
@@ -1101,7 +1002,7 @@ void QDeclarativeViewer::openQml(const QString& file_or_url)
}
} else {
qWarning() << "qml cannot find file:" << fileName;
- return;
+ return false;
}
}
@@ -1112,9 +1013,7 @@ void QDeclarativeViewer::openQml(const QString& file_or_url)
qWarning() << "Wall startup time:" << t.elapsed();
-#ifdef QTOPIA
- show();
-#endif
+ return true;
}
void QDeclarativeViewer::startNetwork()
@@ -1500,8 +1399,13 @@ void QDeclarativeViewer::setUseNativeFileBrowser(bool use)
void QDeclarativeViewer::registerTypes()
{
- // registering only for exposing the DeviceOrientation::Orientation enum
- qmlRegisterUncreatableType<DeviceOrientation>("Qt",4,6,"Orientation");
+ static bool registered = false;
+
+ if (!registered) {
+ // registering only for exposing the DeviceOrientation::Orientation enum
+ qmlRegisterUncreatableType<DeviceOrientation>("Qt",4,6,"Orientation");
+ registered = true;
+ }
}
QT_END_NAMESPACE
diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h
index 1ae771a..2089dda 100644
--- a/tools/qml/qmlruntime.h
+++ b/tools/qml/qmlruntime.h
@@ -105,11 +105,11 @@ public:
QMenuBar *menuBar() const;
+ QDeclarativeView *view() const;
+
public slots:
void sceneResized(QSize size);
- void open(const QString&);
- void openWgt(const QString&);
- void openQml(const QString&);
+ bool open(const QString&);
void openFile();
void reload();
void takeSnapShot();
@@ -142,7 +142,6 @@ private slots:
void toggleOrientation();
void startNetwork();
void toggleFullScreen();
- void unpackWgt();
private:
QString getVideoFileName();