From 2ff6c9e8d89590c8180769bd54e545f40ca9a56f Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 7 Sep 2009 10:12:47 +0200 Subject: Please welcome the Lighthouse Research Project! Lighthouse is a lighter, nimbler version of Qt/Embedded, which does not contain a window system. Instead, it uses graphics system plugins to provide the necessary functionality or interface with existing window systems. The first version was written by Rhys. Squashed commit. --- configure | 138 +- src/corelib/global/qglobal.cpp | 11 +- src/corelib/global/qglobal.h | 8 +- src/corelib/global/qnamespace.h | 2 +- src/corelib/io/qsettings.cpp | 2 +- src/corelib/io/qsettings_p.h | 2 +- src/gui/accessible/accessible.pri | 2 +- src/gui/dialogs/dialogs.pri | 4 +- src/gui/egl/egl.pri | 10 +- src/gui/egl/qegl_lite.cpp | 105 ++ src/gui/embedded/qkbd_qws.cpp | 23 +- src/gui/gui.pro | 2 +- src/gui/image/image.pri | 5 +- src/gui/image/qpixmap_lite.cpp | 52 + src/gui/image/qpixmapdatafactory.cpp | 5 + src/gui/inputmethod/inputmethod.pri | 2 +- src/gui/kernel/kernel.pri | 20 +- src/gui/kernel/qapplication.cpp | 2 + src/gui/kernel/qapplication_lite.cpp | 624 +++++++ src/gui/kernel/qapplication_p.h | 6 + src/gui/kernel/qclipboard_lite.cpp | 163 ++ src/gui/kernel/qcursor.h | 2 +- src/gui/kernel/qcursor_lite.cpp | 127 ++ src/gui/kernel/qcursor_p.h | 2 +- src/gui/kernel/qdesktopwidget_lite.cpp | 141 ++ src/gui/kernel/qdnd_p.h | 2 +- src/gui/kernel/qgenericplugin_lite.cpp | 112 ++ src/gui/kernel/qgenericplugin_lite.h | 84 + src/gui/kernel/qgenericpluginfactory_lite.cpp | 115 ++ src/gui/kernel/qgenericpluginfactory_lite.h | 67 + src/gui/kernel/qsound_lite.cpp | 74 + src/gui/kernel/qwidget.cpp | 2 +- src/gui/kernel/qwidget_lite.cpp | 616 +++++++ src/gui/kernel/qwidget_p.h | 6 + src/gui/kernel/qwindowdefs.h | 6 + src/gui/painting/painting.pri | 16 +- src/gui/painting/qbackingstore.cpp | 9 +- src/gui/painting/qcolormap_lite.cpp | 235 +++ src/gui/painting/qgraphicssystem.cpp | 18 + src/gui/painting/qgraphicssystem_p.h | 14 + src/gui/painting/qpaintdevice.cpp | 2 + src/gui/painting/qpaintdevice_lite.cpp | 68 + src/gui/painting/qpaintengine.h | 3 + src/gui/painting/qregion.cpp | 4 +- src/gui/painting/qregion.h | 6 +- src/gui/painting/qwindowsurface.cpp | 31 + src/gui/painting/qwindowsurface_p.h | 5 + src/gui/styles/styles.pri | 2 +- src/gui/text/qfont.cpp | 4 + src/gui/text/qfont.h | 4 +- src/gui/text/qfontdatabase.cpp | 42 +- src/gui/text/qfontdatabase.h | 2 +- src/gui/text/qfontdatabase_qws.cpp | 8 + src/gui/text/qfontengine.cpp | 4 +- src/gui/text/qfontengine_ft_p.h | 2 +- src/gui/text/qfontengine_p.h | 2 +- src/gui/text/text.pri | 15 +- src/gui/util/qdesktopservices.cpp | 2 +- src/gui/util/util.pri | 4 +- src/gui/widgets/qlinecontrol.cpp | 4 +- src/gui/widgets/widgets.pri | 2 +- src/plugins/generic/linuxinput/linuxinput.pro | 18 + src/plugins/generic/linuxinput/main.cpp | 80 + src/plugins/generic/linuxinput/qlinuxinput.cpp | 371 ++++ src/plugins/generic/linuxinput/qlinuxinput.h | 101 ++ src/plugins/graphicssystems/graphicssystems.pro | 16 +- src/plugins/graphicssystems/linuxfb/linuxfb.pro | 10 + src/plugins/graphicssystems/linuxfb/main.cpp | 71 + .../linuxfb/qgraphicssystem_linuxfb.cpp | 797 ++++++++ .../linuxfb/qgraphicssystem_linuxfb.h | 130 ++ .../linuxfb/qwindowsurface_linuxfb.cpp | 114 ++ .../linuxfb/qwindowsurface_linuxfb.h | 73 + src/plugins/graphicssystems/minimal/main.cpp | 71 + src/plugins/graphicssystems/minimal/minimal.pro | 10 + .../minimal/qgraphicssystem_minimal.cpp | 70 + .../minimal/qgraphicssystem_minimal.h | 85 + .../minimal/qwindowsurface_minimal.cpp | 101 ++ .../minimal/qwindowsurface_minimal.h | 73 + src/plugins/graphicssystems/openvglite/main.cpp | 71 + .../graphicssystems/openvglite/openvglite.pro | 12 + .../openvglite/qgraphicssystem_vglite.cpp | 193 ++ .../openvglite/qgraphicssystem_vglite.h | 93 + .../openvglite/qwindowsurface_vglite.cpp | 131 ++ .../openvglite/qwindowsurface_vglite.h | 91 + src/plugins/graphicssystems/testlite/main.cpp | 71 + .../testlite/qgraphicssystem_testlite.cpp | 80 + .../testlite/qgraphicssystem_testlite.h | 89 + .../testlite/qwindowsurface_testlite.cpp | 528 ++++++ .../testlite/qwindowsurface_testlite.h | 88 + src/plugins/graphicssystems/testlite/testlite.pro | 17 + src/plugins/graphicssystems/testlite/x11util.cpp | 684 +++++++ src/plugins/graphicssystems/testlite/x11util.h | 126 ++ src/plugins/graphicssystems/vnc/main.cpp | 72 + .../graphicssystems/vnc/qgraphicssystem_vnc.cpp | 109 ++ .../graphicssystems/vnc/qgraphicssystem_vnc.h | 105 ++ src/plugins/graphicssystems/vnc/qvncserver.cpp | 1912 ++++++++++++++++++++ src/plugins/graphicssystems/vnc/qvncserver.h | 524 ++++++ .../graphicssystems/vnc/qwindowsurface_vnc.cpp | 106 ++ .../graphicssystems/vnc/qwindowsurface_vnc.h | 77 + src/plugins/graphicssystems/vnc/vnc.pro | 16 + tools/tools.pro | 2 +- 101 files changed, 10339 insertions(+), 101 deletions(-) create mode 100644 src/gui/egl/qegl_lite.cpp create mode 100644 src/gui/image/qpixmap_lite.cpp create mode 100644 src/gui/kernel/qapplication_lite.cpp create mode 100644 src/gui/kernel/qclipboard_lite.cpp create mode 100644 src/gui/kernel/qcursor_lite.cpp create mode 100644 src/gui/kernel/qdesktopwidget_lite.cpp create mode 100644 src/gui/kernel/qgenericplugin_lite.cpp create mode 100644 src/gui/kernel/qgenericplugin_lite.h create mode 100644 src/gui/kernel/qgenericpluginfactory_lite.cpp create mode 100644 src/gui/kernel/qgenericpluginfactory_lite.h create mode 100644 src/gui/kernel/qsound_lite.cpp create mode 100644 src/gui/kernel/qwidget_lite.cpp create mode 100644 src/gui/painting/qcolormap_lite.cpp create mode 100644 src/gui/painting/qpaintdevice_lite.cpp create mode 100644 src/plugins/generic/linuxinput/linuxinput.pro create mode 100644 src/plugins/generic/linuxinput/main.cpp create mode 100644 src/plugins/generic/linuxinput/qlinuxinput.cpp create mode 100644 src/plugins/generic/linuxinput/qlinuxinput.h create mode 100644 src/plugins/graphicssystems/linuxfb/linuxfb.pro create mode 100644 src/plugins/graphicssystems/linuxfb/main.cpp create mode 100644 src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp create mode 100644 src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h create mode 100644 src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp create mode 100644 src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h create mode 100644 src/plugins/graphicssystems/minimal/main.cpp create mode 100644 src/plugins/graphicssystems/minimal/minimal.pro create mode 100644 src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp create mode 100644 src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h create mode 100644 src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp create mode 100644 src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h create mode 100644 src/plugins/graphicssystems/openvglite/main.cpp create mode 100644 src/plugins/graphicssystems/openvglite/openvglite.pro create mode 100644 src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp create mode 100644 src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h create mode 100644 src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp create mode 100644 src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h create mode 100644 src/plugins/graphicssystems/testlite/main.cpp create mode 100644 src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp create mode 100644 src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h create mode 100644 src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp create mode 100644 src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h create mode 100644 src/plugins/graphicssystems/testlite/testlite.pro create mode 100644 src/plugins/graphicssystems/testlite/x11util.cpp create mode 100644 src/plugins/graphicssystems/testlite/x11util.h create mode 100644 src/plugins/graphicssystems/vnc/main.cpp create mode 100644 src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp create mode 100644 src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h create mode 100644 src/plugins/graphicssystems/vnc/qvncserver.cpp create mode 100644 src/plugins/graphicssystems/vnc/qvncserver.h create mode 100644 src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp create mode 100644 src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h create mode 100644 src/plugins/graphicssystems/vnc/vnc.pro diff --git a/configure b/configure index 70c91c2..332b739 100755 --- a/configure +++ b/configure @@ -166,9 +166,12 @@ UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown PLATFORM_X11=no PLATFORM_MAC=no -PLATFORM_QWS=no +PLATFORM_QWS=maybe +PLATFORM_EMBLITE=no +BUILD_ON_MAC=no; +[ -d /System/Library/Frameworks/Carbon.framework ] && BUILD_ON_MAC=yes -if [ -f "$relpath"/src/gui/kernel/qapplication_mac.mm ] && [ -d /System/Library/Frameworks/Carbon.framework ]; then +if [ -f "$relpath"/src/gui/kernel/qapplication_mac.mm ] && [ $BUILD_ON_MAC = "yes" ]; then # Qt/Mac # ~ the Carbon SDK exists # ~ src/gui/base/qapplication_mac.cpp is present @@ -262,6 +265,16 @@ earlyArgParse() VAL=$1 fi ;; + -embedded-lite) + VAR=embedded-lite + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=auto + else + shift; + VAL=$1 + fi + ;; -h|help|--help|-help) if [ "$VAL" = "yes" ]; then OPT_HELP="$VAL" @@ -298,12 +311,27 @@ earlyArgParse() PLATFORM_X11=no PLATFORM_MAC=no PLATFORM_QWS=yes + PLATFORM_EMBLITE=no fi else echo "No license exists to enable Qt for Embedded Linux. Disabling." CFG_EMBEDDED=no fi ;; + embedded-lite) + CFG_EMBEDDED="$VAL" + if [ "$PLATFORM_QWS" != "no" ]; then + if [ "$PLATFORM_QWS" = "maybe" ]; then + PLATFORM_X11=no + PLATFORM_MAC=no + PLATFORM_QWS=no + PLATFORM_EMBLITE=yes + fi + else + echo "No license exists to enable Qt for Embedded Linux Lite. Disabling." + CFG_EMBEDDED=no + fi + ;; developer-build) CFG_DEV="yes" ;; @@ -363,6 +391,7 @@ elif [ $COMMERCIAL_USER = "yes" ]; then # one of commercial editions [ "$PLATFORM_MAC" = "maybe" ] && PLATFORM_MAC=yes [ "$PLATFORM_QWS" = "maybe" ] && PLATFORM_QWS=yes + [ "$PLATFORM_EMBLITE" = "maybe" ] && PLATFORM_EMBLITE=yes # read in the license file if [ -f "$LICENSE_FILE" ]; then @@ -450,7 +479,7 @@ elif [ $COMMERCIAL_USER = "yes" ]; then if [ "$PlatformCode" = "X" ]; then # Qt All-OS LICENSE_EXTENSION="-ALLOS" - elif [ "$PLATFORM_QWS" = "yes" ]; then + elif [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then case $PlatformCode in 2|4|8|A|B|E|G|J|K|P|Q|S|U|V|W) # Qt for Embedded Linux @@ -917,7 +946,7 @@ while [ "$#" -gt 0 ]; do ;; #Qt style options that pass an argument -qconfig) - if [ "$PLATFORM_QWS" != "yes" ]; then + if [ "$PLATFORM_QWS" != "yes" -a "$PLATFORM_EMBLITE" != "yes" ]; then echo echo "WARNING: -qconfig is only tested and supported on Qt for Embedded Linux." echo @@ -957,6 +986,16 @@ while [ "$#" -gt 0 ]; do VAL=$1 fi ;; + -embedded-lite) + VAR=embedded-lite + # this option may or may not be followed by an argument + if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then + VAL=auto + else + shift; + VAL=$1 + fi + ;; -opengl) VAR=opengl # this option may or may not be followed by an argument @@ -1171,12 +1210,27 @@ while [ "$#" -gt 0 ]; do PLATFORM_X11=no PLATFORM_MAC=no PLATFORM_QWS=yes + PLATFORM_EMBLITE=no fi else echo "No license exists to enable Qt for Embedded Linux. Disabling." CFG_EMBEDDED=no fi ;; + embedded-lite) + CFG_EMBEDDED="$VAL" + if [ "$PLATFORM_EMBLITE" != "no" ]; then + if [ "$PLATFORM_EMBLITE" = "maybe" ]; then + PLATFORM_X11=no + PLATFORM_MAC=no + PLATFORM_QWS=no + PLATFORM_EMBLITE=yes + fi + else + echo "No license exists to enable Qt for Embedded Linux Lite. Disabling." + CFG_EMBEDDED=no + fi + ;; sse) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then CFG_SSE="$VAL" @@ -1273,6 +1327,8 @@ while [ "$#" -gt 0 ]; do PLATFORM_MAC=no elif [ "$PLATFORM_QWS" = "yes" ]; then PLATFORM_QWS=no + elif [ "$PLATFORM_EMBLITE" = "yes" ]; then + PLATFORM_EMBLITE=no fi if [ "$CFG_FRAMEWORK" = "auto" ]; then CFG_FRAMEWORK=no @@ -1469,7 +1525,7 @@ while [ "$#" -gt 0 ]; do fi ;; feature-*) - if [ "$PLATFORM_QWS" = "yes" ]; then + if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then FEATURE=`echo $VAR | sed "s,^[^-]*-\([^-]*\),\1," | tr 'abcdefghijklmnopqrstuvwxyz-' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if [ "$VAL" = "no" ]; then QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_$FEATURE" @@ -2140,7 +2196,7 @@ if [ "$OPT_SHADOW" = "yes" ]; then [ "$OPT_VERBOSE" = "yes" ] && echo "Performing shadow build..." fi -if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then +if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then echo echo "WARNING: -debug-and-release is not supported anymore on Qt/X11 and Qt for Embedded Linux" echo "By default, Qt is built in release mode with separate debug information, so" @@ -2243,7 +2299,7 @@ if [ "$CFG_DEV" = "yes" ]; then fi # symlink fonts to be able to run application from build directory -if [ "$PLATFORM_QWS" = "yes" ] && [ ! -e "${outpath}/lib/fonts" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ] && [ ! -e "${outpath}/lib/fonts" ]; then if [ "$PLATFORM" = "$XPLATFORM" ]; then mkdir -p "${outpath}/lib" ln -s "${relpath}/lib/fonts" "${outpath}/lib/fonts" @@ -2283,6 +2339,7 @@ fi ### help #------------------------------------------------------------------------------- [ "$PLATFORM_QWS" = "yes" -a "$CFG_EMBEDDED" = "no" ] && CFG_EMBEDDED=auto +[ "$PLATFORM_EMBLITE" = "yes" -a "$CFG_EMBEDDED" = "no" ] && CFG_EMBEDDED=auto if [ "$CFG_EMBEDDED" != "no" ]; then case "$UNAME_SYSTEM:$UNAME_RELEASE" in Darwin:*) @@ -2361,6 +2418,7 @@ if [ "$CFG_EMBEDDED" != "no" ]; then echo "Qt for Embedded Linux is not supported on this platform. Disabling." CFG_EMBEDDED=no PLATFORM_QWS=no + PLATFORM_EMBLITE=no ;; esac fi @@ -2525,7 +2583,7 @@ if [ -z "$PLATFORM" ]; then esac fi -if [ "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then CFG_SM=no PLATFORMS=`find "$relpath/mkspecs/qws" | sed "s,$relpath/mkspecs/qws/,,"` else @@ -2809,7 +2867,7 @@ fi if [ "$OPT_VERBOSE" = "yes" ]; then echo "System architecture: '$CFG_ARCH'" - if [ "$PLATFORM_QWS" = "yes" ]; then + if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then echo "Host architecture: '$CFG_HOST_ARCH'" fi fi @@ -2988,7 +3046,7 @@ if [ "$CFG_USE_GNUMAKE" = "auto" ] && "$MAKE" -v | grep "GNU Make" >/dev/null 2> fi # If -opengl wasn't specified, don't try to auto-detect -if [ "$PLATFORM_QWS" = "yes" ] && [ "$CFG_OPENGL" = "auto" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ] && [ "$CFG_OPENGL" = "auto" ]; then CFG_OPENGL=no fi @@ -3043,7 +3101,7 @@ fi if [ -z "$QT_INSTALL_PREFIX" ]; then if [ "$CFG_DEV" = "yes" ]; then QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default - elif [ "$PLATFORM_QWS" = "yes" ]; then + elif [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then QT_INSTALL_PREFIX="/usr/local/Trolltech/QtEmbedded-${QT_VERSION}" if [ "$PLATFORM" != "$XPLATFORM" ]; then QT_INSTALL_PREFIX="${QT_INSTALL_PREFIX}-${CFG_ARCH}" @@ -3248,7 +3306,7 @@ Installation options: -prefix ...... This will install everything relative to (default $QT_INSTALL_PREFIX) EOF -if [ "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then cat <: arm mips x86 generic + -embedded-lite This will enable the embedded lite build, you must + have a proper license for this switch to work. + Example values for : arm mips x86 generic + Qt/Embedded Lite does not use QWS. + -armfpa ............. Target platform is uses the ARM-FPA floating point format. -no-armfpa .......... Target platform does not use the ARM-FPA floating point format. @@ -3829,7 +3892,7 @@ EOF fi -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_X11" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" -o "$PLATFORM_X11" = "yes" ]; then if [ "$CFG_GLIB" = "no" ]; then GBY=" " GBN="+" @@ -3853,7 +3916,7 @@ fi # Help # LICENSING, INTERACTIVE PART # ----------------------------------------------------------------------------- -if [ "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then Platform="Qt for Embedded Linux" elif [ "$PLATFORM_MAC" = "yes" ]; then Platform="Qt/Mac" @@ -4298,7 +4361,7 @@ if true; then ###[ '!' -f "$outpath/bin/qmake" ]; EXTRA_LFLAGS="\$(QMAKE_RPATH)\"$rpath\" $EXTRA_LFLAGS" done fi - if [ "$PLATFORM_MAC" = "yes" ]; then + if [ "$BUILD_ON_MAC" = "yes" ]; then echo "export MACOSX_DEPLOYMENT_TARGET = 10.4" >> "$mkfile" echo "CARBON_LFLAGS =-framework ApplicationServices" >>"$mkfile" echo "CARBON_CFLAGS =-fconstant-cfstrings" >>"$mkfile" @@ -4801,7 +4864,7 @@ fi # auto-detect iconv(3) support if [ "$CFG_ICONV" != "no" ]; then - if [ "$PLATFORM_QWS" = "yes" ]; then + if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then CFG_ICONV=no elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" "$OPT_VERBOSE" "$relpath" "$outpath" "config.tests/unix/iconv" "POSIX iconv" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then CFG_ICONV=yes @@ -4852,7 +4915,7 @@ if [ "$PLATFORM_MAC" = "yes" -a ! -z "$QT_NAMESPACE" ]; then QT_NAMESPACE_MAC_CRC=`"$mactests/crc.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/mac/crc $QT_NAMESPACE $L_FLAGS $I_FLAGS $l_FLAGS` fi -if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "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 @@ -5314,7 +5377,7 @@ if [ "$PLATFORM_MAC" = "yes" ]; then fi # QWS -if [ "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then # auto-detect OpenGL support (es1 = OpenGL ES 1.x Common, es1cl = ES 1.x common lite, es2 = OpenGL ES 2.x) if [ "$CFG_OPENGL" = "yes" ]; then @@ -5504,7 +5567,7 @@ fi if [ "$CFG_DOUBLEFORMAT" = "auto" ]; then - if [ "$PLATFORM_QWS" != "yes" ]; then + if [ "$PLATFORM_QWS" != "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then CFG_DOUBLEFORMAT=normal else "$unixtests/doubleformat.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" @@ -5772,7 +5835,12 @@ fi #------------------------------------------------------------------------------- ### fix this: user input should be validated in a loop -if [ "$CFG_QWS_DEPTHS" = "prompted" -a "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then + PROMPT_FOR_DEPTHS="yes" +else + PROMPT_FOR_DEPTHS="no" +fi +if [ "$CFG_QWS_DEPTHS" = "prompted" -a "$PROMPT_FOR_DEPTHS" = "yes" ]; then echo echo "Choose pixel-depths to support:" echo @@ -5931,7 +5999,7 @@ else fi if [ "$CFG_OPENGL" = "es1" ] || [ "$CFG_OPENGL" = "es1cl" ] || [ "$CFG_OPENGL" = "es2" ]; then - if [ "$PLATFORM_QWS" = "yes" ]; then + if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then QCONFIG_FLAGS="$QCONFIG_FLAGS Q_BACKINGSTORE_SUBSURFACES" QCONFIG_FLAGS="$QCONFIG_FLAGS Q_USE_EGLWINDOWSURFACE" fi @@ -5979,6 +6047,12 @@ if [ "$PLATFORM_QWS" = "yes" ]; then QT_CONFIG="$QT_CONFIG embedded" rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes fi +if [ "$PLATFORM_EMBLITE" = "yes" ]; then + QMAKE_OUTDIR="${QMAKE_OUTDIR}-emb-$CFG_EMBEDDED" + QMAKE_CONFIG="$QMAKE_CONFIG embedded_lite" + QT_CONFIG="$QT_CONFIG embedded_lite" + rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes +fi QMakeVar set PRECOMPILED_DIR ".pch/$QMAKE_OUTDIR" QMakeVar set OBJECTS_DIR ".obj/$QMAKE_OUTDIR" QMakeVar set MOC_DIR ".moc/$QMAKE_OUTDIR" @@ -6200,7 +6274,7 @@ if [ '!' -z "$I_FLAGS" ]; then fi # turn off exceptions for the compilers that support it -if [ "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then COMPILER=`echo $XPLATFORM | cut -f 3- -d-` else COMPILER=`echo $PLATFORM | cut -f 2- -d-` @@ -6208,6 +6282,9 @@ fi if [ "$CFG_EXCEPTIONS" = "unspecified" -a "$PLATFORM_QWS" = "yes" ]; then CFG_EXCEPTIONS=no fi +if [ "$CFG_EXCEPTIONS" = "unspecified" -a "$PLATFORM_EMBLITE" = "yes" ]; then + CFG_EXCEPTIONS=no +fi if [ "$CFG_EXCEPTIONS" != "no" ]; then QTCONFIG_CONFIG="$QTCONFIG_CONFIG exceptions" @@ -6537,7 +6614,7 @@ esac # ipv6 # # X11 : x11sm xinerama xcursor xfixes xrandr xrender mitshm fontconfig xkb -# Embedded: embedded freetype +# Embedded: embedded embedded_lite freetype # ALL_OPTIONS= BUILD_CONFIG= @@ -6834,6 +6911,11 @@ if [ "$PLATFORM_QWS" = "yes" ]; then done fi # QWS +if [ "$PLATFORM_EMBLITE" = "yes" ]; then + # Add LITE to config.h + QCONFIG_FLAGS="$QCONFIG_FLAGS Q_WS_LITE QT_NO_QWS_QPF QT_NO_QWS_QPF2" +fi + if [ "${CFG_USE_FLOATMATH}" = "yes" ]; then QCONFIG_FLAGS="${QCONFIG_FLAGS} QT_USE_MATH_H_FLOATS" fi @@ -7221,7 +7303,7 @@ else echo "Architecture: $CFG_ARCH" fi -if [ "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then echo "Host architecture: $CFG_HOST_ARCH" fi @@ -7320,7 +7402,7 @@ else fi echo "zlib support ........ $CFG_ZLIB" echo "Session management .. $CFG_SM" -if [ "$PLATFORM_QWS" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then echo "Embedded support .... $CFG_EMBEDDED" if [ "$CFG_QWS_FREETYPE" = "auto" ]; then echo "Freetype2 support ... $CFG_QWS_FREETYPE ($CFG_LIBFREETYPE)" diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index 787eba7..d29cd5f 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -1227,7 +1227,16 @@ bool qSharedBuild() Defined on Qt for Embedded Linux. - \sa Q_WS_MAC, Q_WS_WIN, Q_WS_X11 + \sa Q_WS_MAC, Q_WS_WIN, Q_WS_X11, Q_WS_LITE +*/ + +/*! + \macro Q_WS_LITE + \relates + + Defined on Qt for Embedded Linux, Lite version. + + \sa Q_WS_MAC, Q_WS_WIN, Q_WS_X11, Q_WS_QWS */ /*! diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index a2c532f..158fa53 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -284,7 +284,7 @@ namespace QT_NAMESPACE {} # endif #endif -#if defined(Q_OS_MAC64) && !defined(QT_MAC_USE_COCOA) && !defined(QT_BUILD_QMAKE) +#if defined(Q_WS_MAC64) && !defined(QT_MAC_USE_COCOA) && !defined(QT_BUILD_QMAKE) #error "You are building a 64-bit application, but using a 32-bit version of Qt. Check your build configuration." #endif @@ -799,7 +799,7 @@ namespace QT_NAMESPACE {} # define Q_WS_PM # error "Qt does not work with OS/2 Presentation Manager or Workplace Shell" #elif defined(Q_OS_UNIX) -# if defined(Q_OS_MAC) && !defined(__USE_WS_X11__) && !defined(Q_WS_QWS) +# if defined(Q_OS_MAC) && !defined(__USE_WS_X11__) && !defined(Q_WS_QWS) && !defined(Q_WS_LITE) # define Q_WS_MAC # define Q_WS_MACX # if defined(Q_OS_MAC64) @@ -811,7 +811,7 @@ namespace QT_NAMESPACE {} # if (defined(__SERIES60_31__) || defined(__S60_32__) || defined(__S60_50__)) && !defined(QT_NO_S60) # define Q_WS_S60 # endif -# elif !defined(Q_WS_QWS) +# elif !defined(Q_WS_QWS) && !defined(Q_WS_LITE) # define Q_WS_X11 # endif #endif @@ -1056,7 +1056,7 @@ redefine to built-in booleans to make autotests work properly */ typedef int QNoImplicitBoolCast; -#if defined(QT_ARCH_ARM) || defined(QT_ARCH_ARMV6) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_MIPS) && (defined(Q_WS_QWS) || defined(Q_OS_WINCE))) || defined(QT_ARCH_SH) || defined(QT_ARCH_SH4A) +#if defined(QT_ARCH_ARM) || defined(QT_ARCH_ARMV6) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_MIPS) && (defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_WINCE))) || defined(QT_ARCH_SH) || defined(QT_ARCH_SH4A) #define QT_NO_FPU #endif diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 8f34e30..c37122c 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1537,7 +1537,7 @@ public: typedef void *HANDLE; #elif defined(Q_WS_X11) typedef unsigned long HANDLE; -#elif defined(Q_WS_QWS) +#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) typedef void * HANDLE; #elif defined(Q_OS_SYMBIAN) typedef unsigned long int HANDLE; // equivalent to TUint32 diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 48671ba..94aad7a 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -1133,7 +1133,7 @@ static QString getPath(QSettings::Format format, QSettings::Scope scope) if (env == 0) { userPath = homePath; userPath += QLatin1Char('/'); -#ifdef Q_WS_QWS +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) userPath += QLatin1String("Settings"); #else userPath += QLatin1String(".config"); diff --git a/src/corelib/io/qsettings_p.h b/src/corelib/io/qsettings_p.h index dc1beb3..3dff0e3 100644 --- a/src/corelib/io/qsettings_p.h +++ b/src/corelib/io/qsettings_p.h @@ -69,7 +69,7 @@ QT_BEGIN_NAMESPACE -#if defined(Q_WS_QWS) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) #define QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER #endif diff --git a/src/gui/accessible/accessible.pri b/src/gui/accessible/accessible.pri index ad2fb4c..afa5ecd 100644 --- a/src/gui/accessible/accessible.pri +++ b/src/gui/accessible/accessible.pri @@ -12,7 +12,7 @@ contains(QT_CONFIG, accessibility) { accessible/qaccessiblewidget.cpp \ accessible/qaccessibleplugin.cpp - mac:!embedded { + mac:!embedded:!embedded_lite { HEADERS += accessible/qaccessible_mac_p.h OBJECTIVE_SOURCES += accessible/qaccessible_mac.mm \ accessible/qaccessible_mac_cocoa.mm diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri index b9fad41..08584a9 100644 --- a/src/gui/dialogs/dialogs.pri +++ b/src/gui/dialogs/dialogs.pri @@ -27,7 +27,7 @@ HEADERS += \ dialogs/qwizard.h \ dialogs/qprintpreviewdialog.h -!embedded:mac { +!embedded:!embedded_lite:mac { OBJECTIVE_SOURCES += dialogs/qcolordialog_mac.mm \ dialogs/qfiledialog_mac.mm \ dialogs/qfontdialog_mac.mm \ @@ -46,7 +46,7 @@ win32 { !win32-borland:!wince*: LIBS += -lshell32 # the filedialog needs this library } -!mac:!embedded:!symbian:unix { +!mac:!embedded:!symbian:unix|embedded_lite { HEADERS += dialogs/qpagesetupdialog_unix_p.h SOURCES += dialogs/qprintdialog_unix.cpp \ dialogs/qpagesetupdialog_unix.cpp diff --git a/src/gui/egl/egl.pri b/src/gui/egl/egl.pri index 75a3d91..9ba7017 100644 --- a/src/gui/egl/egl.pri +++ b/src/gui/egl/egl.pri @@ -12,10 +12,14 @@ unix { embedded { SOURCES += egl/qegl_qws.cpp } else { - symbian { - SOURCES += egl/qegl_symbian.cpp + embedded_lite { + SOURCES += egl/qegl_lite.cpp } else { - SOURCES += egl/qegl_x11.cpp + symbian { + SOURCES += egl/qegl_symbian.cpp + } else { + SOURCES += egl/qegl_x11.cpp + } } } } diff --git a/src/gui/egl/qegl_lite.cpp b/src/gui/egl/qegl_lite.cpp new file mode 100644 index 0000000..784b252 --- /dev/null +++ b/src/gui/egl/qegl_lite.cpp @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include "qegl_p.h" + +#if !defined(QT_NO_EGL) + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +bool QEglContext::createSurface(QPaintDevice *device, const QEglProperties *properties) +{ + Q_UNUSED(device); + Q_UNUSED(properties); + return false; +} + +EGLDisplay QEglContext::getDisplay(QPaintDevice *device) +{ + Q_UNUSED(device); + return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY)); +} + +static QGraphicsSystemScreen *screenForDevice(QPaintDevice *device) +{ + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) + return 0; + + QList screens = gs->screens(); + + int screenNumber; + if (device && device->devType() == QInternal::Widget) + screenNumber = qApp->desktop()->screenNumber(static_cast(device)); + else + screenNumber = 0; + if (screenNumber < 0 || screenNumber >= screens.size()) + return 0; + return screens[screenNumber]; +} + +// Set pixel format and other properties based on a paint device. +void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev) +{ + if (!dev) + return; + + // Find the QGLScreen for this paint device. + QGraphicsSystemScreen *screen = screenForDevice(dev); + if (!screen) + return; + int devType = dev->devType(); + if (devType == QInternal::Image) + setPixelFormat(static_cast(dev)->format()); + else + setPixelFormat(screen->format()); +} + +QT_END_NAMESPACE + +#endif // !QT_NO_EGL diff --git a/src/gui/embedded/qkbd_qws.cpp b/src/gui/embedded/qkbd_qws.cpp index 4d97ba7..9a496ac 100644 --- a/src/gui/embedded/qkbd_qws.cpp +++ b/src/gui/embedded/qkbd_qws.cpp @@ -48,8 +48,16 @@ #include #include +#ifdef Q_WS_QWS #include "qwindowsystem_qws.h" #include "qscreen_qws.h" +#endif + +#ifdef Q_WS_LITE +#include +#include +#endif + #include "qtimer.h" #include @@ -352,7 +360,16 @@ QWSKeyboardHandler::~QWSKeyboardHandler() void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, Qt::KeyboardModifiers modifiers, bool isPress, bool autoRepeat) { +#if defined(Q_WS_QWS) qwsServer->processKeyEvent(unicode, keycode, modifiers, isPress, autoRepeat); +#elif defined(Q_WS_LITE) + QEvent::Type type = isPress ? QEvent::KeyPress : QEvent::KeyRelease; + QString str; + if (unicode != 0xffff) + str = QString(unicode); + QKeyEvent ke(type, keycode, modifiers, str); + QApplicationPrivate::handleKeyEvent(0, &ke); +#endif } /*! @@ -375,6 +392,7 @@ void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, Qt::KeyboardM */ int QWSKeyboardHandler::transformDirKey(int key) { +#ifdef Q_WS_QWS static int dir_keyrot = -1; if (dir_keyrot < 0) { // get the rotation @@ -387,6 +405,9 @@ int QWSKeyboardHandler::transformDirKey(int key) } int xf = qt_screen->transformOrientation() + dir_keyrot; return (key-Qt::Key_Left+xf)%4+Qt::Key_Left; +#else + return 0; +#endif } /*! @@ -452,7 +473,7 @@ void QWSKeyboardHandler::endAutoRepeat() Maps \a keycode according to a keymap and sends that key event to the \l{Qt for Embedded Linux} server application. - + Please see the \l{Qt for Embedded Linux Character Input} and the \l {kmap2qmap} documentations for a description on how to create and use keymap files. diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 7c24002..6949e39 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -4,7 +4,7 @@ QT = core DEFINES += QT_BUILD_GUI_LIB QT_NO_USING_NAMESPACE win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x65000000 -!win32:!embedded:!mac:!symbian:CONFIG += x11 +!win32:!embedded:!embedded_lite:!mac:!symbian:CONFIG += x11 unix:QMAKE_PKGCONFIG_REQUIRES = QtCore diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index 0970385..67f0699 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -61,11 +61,14 @@ win32 { embedded { SOURCES += image/qpixmap_qws.cpp } +embedded_lite { + SOURCES += image/qpixmap_lite.cpp +} x11 { HEADERS += image/qpixmap_x11_p.h SOURCES += image/qpixmap_x11.cpp } -mac { +!embedded:!embedded_lite:mac { HEADERS += image/qpixmap_mac_p.h SOURCES += image/qpixmap_mac.cpp } diff --git a/src/gui/image/qpixmap_lite.cpp b/src/gui/image/qpixmap_lite.cpp new file mode 100644 index 0000000..4ba69fa --- /dev/null +++ b/src/gui/image/qpixmap_lite.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h) +{ + Q_UNUSED(window); + Q_UNUSED(x); + Q_UNUSED(y); + Q_UNUSED(w); + Q_UNUSED(h); + return QPixmap(); +} diff --git a/src/gui/image/qpixmapdatafactory.cpp b/src/gui/image/qpixmapdatafactory.cpp index 53c93ad..fab6af8 100644 --- a/src/gui/image/qpixmapdatafactory.cpp +++ b/src/gui/image/qpixmapdatafactory.cpp @@ -53,6 +53,9 @@ #ifdef Q_WS_MAC # include #endif +#ifdef Q_WS_LITE +# include +#endif #include "private/qapplication_p.h" #include "private/qgraphicssystem_p.h" @@ -79,6 +82,8 @@ QPixmapData* QSimplePixmapDataFactory::create(QPixmapData::PixelType type) return new QRasterPixmapData(type); #elif defined(Q_WS_MAC) return new QMacPixmapData(type); +#elif defined(Q_WS_LITE) + return new QRasterPixmapData(type); #else #error QSimplePixmapDataFactory::create() not implemented #endif diff --git a/src/gui/inputmethod/inputmethod.pri b/src/gui/inputmethod/inputmethod.pri index 6d9f748..b3b7a3a 100644 --- a/src/gui/inputmethod/inputmethod.pri +++ b/src/gui/inputmethod/inputmethod.pri @@ -19,7 +19,7 @@ embedded { HEADERS += inputmethod/qwsinputcontext_p.h SOURCES += inputmethod/qwsinputcontext_qws.cpp } -mac:!embedded { +mac:!embedded:!embedded_lite { HEADERS += inputmethod/qmacinputcontext_p.h SOURCES += inputmethod/qmacinputcontext_mac.cpp } diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 8489817..85c838b 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -181,7 +181,25 @@ embedded { } -!embedded:!x11:mac { +embedded_lite { + HEADERS += \ + kernel/qgenericpluginfactory_lite.h \ + kernel/qgenericplugin_lite.h + + SOURCES += \ + kernel/qapplication_lite.cpp \ + kernel/qclipboard_lite.cpp \ + kernel/qcursor_lite.cpp \ + kernel/qdnd_qws.cpp \ + kernel/qdesktopwidget_lite.cpp \ + kernel/qgenericpluginfactory_lite.cpp \ + kernel/qgenericplugin_lite.cpp \ + kernel/qkeymapper_qws.cpp \ + kernel/qsound_lite.cpp \ + kernel/qwidget_lite.cpp +} + +!embedded:!embedded_lite:!x11:mac { SOURCES += \ kernel/qclipboard_mac.cpp \ kernel/qmime_mac.cpp \ diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 511c797..2bcaa68 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -741,6 +741,8 @@ void QApplicationPrivate::construct( { initResources(); + graphics_system_name = qgetenv("QT_DEFAULT_GRAPHICS_SYSTEM"); + qt_is_gui_used = (qt_appType != QApplication::Tty); process_cmdline(); // Must be called before initialize() diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp new file mode 100644 index 0000000..eec3e6c --- /dev/null +++ b/src/gui/kernel/qapplication_lite.cpp @@ -0,0 +1,624 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qapplication_p.h" +#include "qcolormap.h" +#include "qpixmapcache.h" +#if !defined(QT_NO_GLIB) +#include "private/qeventdispatcher_glib_p.h" +#endif +#include "private/qeventdispatcher_unix_p.h" +#ifndef QT_NO_CURSOR +#include "private/qcursor_p.h" +#endif + +#include "qgenericpluginfactory_lite.h" +#include + +#include + +#include + + +QT_BEGIN_NAMESPACE + +static QString appName; +static const char *appFont = 0; // application font + +QWidget *qt_button_down = 0; // widget got last button-down + +static bool app_do_modal = false; +extern QWidgetList *qt_modal_stack; // stack of modal widgets + +int qt_last_x = 0; +int qt_last_y = 0; + +QString QApplicationPrivate::appName() const +{ + return QT_PREPEND_NAMESPACE(appName); +} + +void QApplicationPrivate::createEventDispatcher() +{ + Q_Q(QApplication); +#if !defined(QT_NO_GLIB) + if (qgetenv("QT_NO_GLIB").isEmpty() && QEventDispatcherGlib::versionSupported()) + eventDispatcher = new QEventDispatcherGlib(q); + else +#endif + eventDispatcher = new QEventDispatcherUNIX(q); +} + +static bool qt_try_modal(QWidget *widget, const QEvent *event) +{ + QWidget * top = 0; + + if (QApplicationPrivate::tryModalHelper(widget, &top)) + return true; + + bool block_event = false; + bool paint_event = false; + + switch (event->type()) { +#if 0 + case QEvent::Focus: + if (!static_cast(event)->simpleData.get_focus) + break; + // drop through +#endif + case QEvent::MouseButtonPress: // disallow mouse/key events + case QEvent::MouseButtonRelease: + case QEvent::MouseMove: + case QEvent::KeyPress: + case QEvent::KeyRelease: + block_event = true; + break; + default: + break; + } + + if ((block_event || paint_event) && top->parentWidget() == 0) + top->raise(); + + return !block_event; +} + + + +void QApplicationPrivate::enterModal_sys(QWidget *widget) +{ + qDebug() << ">>>>>>>> enterModal_sys" << app_do_modal << widget; + if (!qt_modal_stack) + qt_modal_stack = new QWidgetList; + qt_modal_stack->insert(0, widget); + app_do_modal = true; +} + +void QApplicationPrivate::leaveModal_sys(QWidget *widget ) +{ + qDebug() << "<<<<<<<<< leaveModal_sys" << app_do_modal << widget; + if (qt_modal_stack && qt_modal_stack->removeAll(widget)) { + if (qt_modal_stack->isEmpty()) { + delete qt_modal_stack; + qt_modal_stack = 0; + } + } + app_do_modal = qt_modal_stack != 0; +} + +bool QApplicationPrivate::modalState() +{ + return app_do_modal; +} + +void QApplicationPrivate::closePopup(QWidget *popup) +{ + Q_Q(QApplication); + if (!popupWidgets) + return; + popupWidgets->removeAll(popup); + +//### +// if (popup == qt_popup_down) { +// qt_button_down = 0; +// qt_popup_down = 0; +// } + + if (QApplicationPrivate::popupWidgets->count() == 0) { // this was the last popup + delete QApplicationPrivate::popupWidgets; + QApplicationPrivate::popupWidgets = 0; + + //### replay mouse event? + + //### transfer/release mouse grab + + //### transfer/release keyboard grab + + //give back focus + + if (active_window) { + if (QWidget *fw = active_window->focusWidget()) { + if (fw != QApplication::focusWidget()) { + fw->setFocus(Qt::PopupFocusReason); + } else { + QFocusEvent e(QEvent::FocusIn, Qt::PopupFocusReason); + q->sendEvent(fw, &e); + } + } + } + + } else { + // A popup was closed, so the previous popup gets the focus. + + QWidget* aw = QApplicationPrivate::popupWidgets->last(); + if (QWidget *fw = aw->focusWidget()) + fw->setFocus(Qt::PopupFocusReason); + + //### regrab the keyboard and mouse in case 'popup' lost the grab + + + } + +} + +static int openPopupCount = 0; +void QApplicationPrivate::openPopup(QWidget *popup) +{ + openPopupCount++; + if (!popupWidgets) { // create list + popupWidgets = new QWidgetList; + + /* only grab if you are the first/parent popup */ + //#### ->grabMouse(popup,true); + //#### ->grabKeyboard(popup,true); + //### popupGrabOk = true; + } + popupWidgets->append(popup); // add to end of list + + // popups are not focus-handled by the window system (the first + // popup grabbed the keyboard), so we have to do that manually: A + // new popup gets the focus + if (popup->focusWidget()) { + popup->focusWidget()->setFocus(Qt::PopupFocusReason); + } else if (popupWidgets->count() == 1) { // this was the first popup + if (QWidget *fw = QApplication::focusWidget()) { + QFocusEvent e(QEvent::FocusOut, Qt::PopupFocusReason); + QApplication::sendEvent(fw, &e); + } + } +} + +void QApplicationPrivate::initializeMultitouch_sys() +{ +} + +void QApplicationPrivate::cleanupMultitouch_sys() +{ +} + +void QApplicationPrivate::initializeWidgetPaletteHash() +{ +} + +void QApplication::setCursorFlashTime(int msecs) +{ + QApplicationPrivate::cursor_flash_time = msecs; +} + +int QApplication::cursorFlashTime() +{ + return QApplicationPrivate::cursor_flash_time; +} + +void QApplication::setDoubleClickInterval(int ms) +{ + QApplicationPrivate::mouse_double_click_time = ms; +} + +int QApplication::doubleClickInterval() +{ + return QApplicationPrivate::mouse_double_click_time; +} + +void QApplication::setKeyboardInputInterval(int ms) +{ + QApplicationPrivate::keyboard_input_time = ms; +} + +int QApplication::keyboardInputInterval() +{ + return QApplicationPrivate::keyboard_input_time; +} + +#ifndef QT_NO_WHEELEVENT +void QApplication::setWheelScrollLines(int lines) +{ + QApplicationPrivate::wheel_scroll_lines = lines; +} + +int QApplication::wheelScrollLines() +{ + return QApplicationPrivate::wheel_scroll_lines; +} +#endif + +void QApplication::setEffectEnabled(Qt::UIEffect effect, bool enable) +{ + switch (effect) { + case Qt::UI_AnimateMenu: + QApplicationPrivate::animate_menu = enable; + break; + case Qt::UI_FadeMenu: + if (enable) + QApplicationPrivate::animate_menu = true; + QApplicationPrivate::fade_menu = enable; + break; + case Qt::UI_AnimateCombo: + QApplicationPrivate::animate_combo = enable; + break; + case Qt::UI_AnimateTooltip: + QApplicationPrivate::animate_tooltip = enable; + break; + case Qt::UI_FadeTooltip: + if (enable) + QApplicationPrivate::animate_tooltip = true; + QApplicationPrivate::fade_tooltip = enable; + break; + case Qt::UI_AnimateToolBox: + QApplicationPrivate::animate_toolbox = enable; + break; + default: + QApplicationPrivate::animate_ui = enable; + break; + } +} + +bool QApplication::isEffectEnabled(Qt::UIEffect effect) +{ + if (QColormap::instance().depth() < 16 || !QApplicationPrivate::animate_ui) + return false; + + switch(effect) { + case Qt::UI_AnimateMenu: + return QApplicationPrivate::animate_menu; + case Qt::UI_FadeMenu: + return QApplicationPrivate::fade_menu; + case Qt::UI_AnimateCombo: + return QApplicationPrivate::animate_combo; + case Qt::UI_AnimateTooltip: + return QApplicationPrivate::animate_tooltip; + case Qt::UI_FadeTooltip: + return QApplicationPrivate::fade_tooltip; + case Qt::UI_AnimateToolBox: + return QApplicationPrivate::animate_toolbox; + default: + return QApplicationPrivate::animate_ui; + } +} + +#ifndef QT_NO_CURSOR +void QApplication::setOverrideCursor(const QCursor &) +{ + // XXX +} + +void QApplication::restoreOverrideCursor() +{ + // XXX +} + +#endif// QT_NO_CURSOR + +QWidget *QApplication::topLevelAt(const QPoint &pos) +{ +//### We have to implement a windowsystem-aware way to do this + + //fallback implementation assuming widgets are in stacking order + + QWidgetList list = topLevelWidgets(); + for (int i = list.size()-1; i >= 0; --i) { + QWidget *w = list[i]; + //### mask is ignored + if (w != QApplication::desktop() && w->isVisible() && w->geometry().contains(pos)) + return w; + } + + return 0; +} + +void QApplication::beep() +{ +} + +void QApplication::alert(QWidget *, int) +{ +} + +static void init_plugins(const QList pluginList) +{ + for (int i = 0; i < pluginList.count(); ++i) { + QByteArray pluginSpec = pluginList.at(i); + qDebug() << "init_plugins" << i << pluginSpec; + int colonPos = pluginSpec.indexOf(':'); + QObject *plugin; + if (colonPos < 0) + plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec), QString()); + else + plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec.mid(0, colonPos)), + QLatin1String(pluginSpec.mid(colonPos+1))); + qDebug() << " created" << plugin; + } +} + +class QDummyInputContext : public QInputContext +{ +public: + explicit QDummyInputContext(QObject* parent = 0) : QInputContext(parent) {} + ~QDummyInputContext() {} + QString identifierName() { return QString(); } + QString language() { return QString(); } + + void reset() {} + bool isComposing() const { return false; } + +}; + +void qt_init(QApplicationPrivate *priv, int type) +{ + Q_UNUSED(type); + + char *p; + char **argv = priv->argv; + int argc = priv->argc; + + if (argv && *argv) { //apparently, we allow people to pass 0 on the other platforms + p = strrchr(argv[0], '/'); + appName = QString::fromLocal8Bit(p ? p + 1 : argv[0]); + } + + QList pluginList; + + // Get command line params + + int j = argc ? 1 : 0; + for (int i=1; iargc) { + priv->argv[j] = 0; + priv->argc = j; + } + + + + +#if 0 + QByteArray pluginEnv = qgetenv("QT_LITE_PLUGINS"); + if (!pluginEnv.isEmpty()) { + pluginList.append(pluginEnv.split(';')); + } +#endif + + + qDebug() << pluginList; + + init_plugins(pluginList); + + QColormap::initialize(); + QFont::initialize(); +#ifndef QT_NO_CURSOR +// QCursorData::initialize(); +#endif + + qApp->setObjectName(appName); + +#ifndef QT_NO_QWS_INPUTMETHODS + qApp->setInputContext(new QDummyInputContext(qApp)); +#endif +} + +void qt_cleanup() +{ + QPixmapCache::clear(); +#ifndef QT_NO_CURSOR + QCursorData::cleanup(); +#endif + QFont::cleanup(); + QColormap::cleanup(); +} + + +/*! + +\a tlw == 0 means that \a ev is in global coords only + + +*/ + +void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) +{ +// qDebug() << "handleMouseEvent" << tlw << ev.pos() << hex << ev.buttons(); + + static QWidget *implicit_mouse_grabber=0; + + QPoint localPoint = ev.pos(); + QPoint globalPoint = ev.globalPos(); + bool trustLocalPoint = !!tlw; //is there something the local point can be local to? + QWidget *mouseWidget = tlw; + + qt_last_x = globalPoint.x(); + qt_last_y = globalPoint.y(); + + if (self->inPopupMode()) { + //popup mouse handling is magical... + mouseWidget = qApp->activePopupWidget(); + trustLocalPoint = (mouseWidget == tlw); + + //### how should popup mode and implicit mouse grab interact? + + } else if (tlw && app_do_modal && !qt_try_modal(tlw, &ev) ) { + //even if we're blocked by modality, we should deliver the mouse release event.. + //### this code is not completely correct: multiple buttons can be pressed simultaneously + if (!(implicit_mouse_grabber && ev.buttons() == Qt::NoButton)) { + //qDebug() << "modal blocked mouse event to" << tlw; + return; + } + } else { + QWidget *mouseWindow = tlw; + + // find the tlw if we didn't get it from the plugin + if (!mouseWindow) { + mouseWindow = QApplication::topLevelAt(globalPoint); + } + + if (!mouseWindow && !implicit_mouse_grabber) + return; //nowhere to send it + + // which child should have it? + mouseWidget = mouseWindow; + if (mouseWindow) { + QWidget *w = mouseWindow->childAt(ev.pos()); + if (w) { + mouseWidget = w; + } + } + + //handle implicit mouse grab + if (ev.type() == QEvent::MouseButtonPress && !implicit_mouse_grabber) { + implicit_mouse_grabber = mouseWidget; + + Q_ASSERT(mouseWindow); + mouseWindow->activateWindow(); //focus + } else if (implicit_mouse_grabber) { + mouseWidget = implicit_mouse_grabber; + mouseWindow = mouseWidget->window(); + trustLocalPoint = (mouseWindow == tlw); + } + } + Q_ASSERT(mouseWidget); + + if (trustLocalPoint) { + // we have a sensible localPoint, so we prefer that, since the + // window system may know more than we do + localPoint = mouseWidget->mapFrom(tlw, localPoint); + } else { + // we don't want to map a local point from a different toplevel + // and we definitely don't want to map from the null pointer + localPoint = mouseWidget->mapFromGlobal(globalPoint); + } + + if (ev.buttons() == Qt::NoButton) { + //qDebug() << "resetting mouse grabber"; + implicit_mouse_grabber = 0; + } + + // Remember, we might enter a modal event loop when sending the event, + // so think carefully before adding code below this point. + + // qDebug() << "sending mouse ev." << ev.type() << localPoint << globalPoint << ev.button() << ev.buttons() << mouseWidget << "mouse grabber" << implicit_mouse_grabber; + + QMouseEvent e(ev.type(), localPoint, globalPoint, ev.button(), ev.buttons(), ev.modifiers()); + QApplication::sendSpontaneousEvent(mouseWidget, &e); + +} + + + +// Remember, Qt convention is: keyboard state is state *before* + +void QApplicationPrivate::handleKeyEvent(QWidget *tlw, QKeyEvent *e) +{ + QWidget *focusW = 0; + if (self->inPopupMode()) { + QWidget *popupW = qApp->activePopupWidget(); + focusW = popupW->focusWidget() ? popupW->focusWidget() : popupW; + } + if (!focusW) + focusW = QApplication::focusWidget(); + if (!focusW) + focusW = tlw; + if (!focusW) + focusW = QApplication::activeWindow(); + + //qDebug() << "handleKeyEvent" << hex << e->key() << e->modifiers() << e->text() << "widget" << focusW; + + if (!focusW) + return; + if (app_do_modal && !qt_try_modal(focusW, e)) + return; + + QApplication::sendSpontaneousEvent(focusW, e); +} + + +void QApplicationPrivate::handleGeometryChange(QWidget *tlw, const QRect &newRect) +{ + QRect cr(tlw->geometry()); + + bool isResize = cr.size() != newRect.size(); + bool isMove = cr.topLeft() != newRect.topLeft(); + tlw->data->crect = newRect; + if (isResize) { + QResizeEvent e(tlw->data->crect.size(), cr.size()); + QApplication::sendSpontaneousEvent(tlw, &e); + } + + if (isMove) { + //### frame geometry + QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft()); + QApplication::sendSpontaneousEvent(tlw, &e); + } +} +QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 3b6cd43..84182cb 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -571,6 +571,12 @@ public: void _q_readRX71MultiTouchEvents(); #endif +#ifdef Q_WS_LITE + static void handleMouseEvent(QWidget *tlw, const QMouseEvent &ev); + static void handleKeyEvent(QWidget *tlw, QKeyEvent *e); + static void handleGeometryChange(QWidget *tlw, const QRect &newRect); +#endif + private: #ifdef Q_WS_QWS QMap maxWindowRects; diff --git a/src/gui/kernel/qclipboard_lite.cpp b/src/gui/kernel/qclipboard_lite.cpp new file mode 100644 index 0000000..0d9268f --- /dev/null +++ b/src/gui/kernel/qclipboard_lite.cpp @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qclipboard.h" + +#ifndef QT_NO_CLIPBOARD + +#include "qmimedata.h" +#include "qapplication.h" + +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + + +class QClipboardData +{ +public: + QClipboardData(); + ~QClipboardData(); + + void setSource(QMimeData* s) + { + if (s == src) + return; + delete src; + src = s; + } + QMimeData* source() + { return src; } + + void clear(); + +private: + QMimeData* src; +}; + +QClipboardData::QClipboardData() +{ + src = 0; +} + +QClipboardData::~QClipboardData() +{ + delete src; +} + +void QClipboardData::clear() +{ + delete src; + src = 0; +} + + +static QClipboardData *internalCbData = 0; + +static void cleanupClipboardData() +{ + delete internalCbData; + internalCbData = 0; +} + +static QClipboardData *clipboardData() +{ + if (internalCbData == 0) { + internalCbData = new QClipboardData; + qAddPostRoutine(cleanupClipboardData); + } + return internalCbData; +} + + +void QClipboard::clear(Mode mode) +{ + setText(QString(), mode); +} + + +bool QClipboard::event(QEvent *e) +{ + return QObject::event(e); +} + +const QMimeData* QClipboard::mimeData(Mode mode) const +{ + if (mode != Clipboard) return 0; + + QClipboardData *d = clipboardData(); + return d->source(); +} + +void QClipboard::setMimeData(QMimeData* src, Mode mode) +{ + if (mode != Clipboard) return; + + QClipboardData *d = clipboardData(); + + d->setSource(src); + + emitChanged(QClipboard::Clipboard); +} + +bool QClipboard::supportsMode(Mode mode) const +{ + return (mode == Clipboard); +} + +bool QClipboard::ownsMode(Mode mode) const +{ + if (mode == Clipboard) + qWarning("QClipboard::ownsClipboard: UNIMPLEMENTED!"); + return false; +} + +void QClipboard::connectNotify( const char * ) +{ +} + +void QClipboard::ownerDestroyed() +{ +} + +#endif // QT_NO_CLIPBOARD + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qcursor.h b/src/gui/kernel/qcursor.h index 2a919b3..115a4cc 100644 --- a/src/gui/kernel/qcursor.h +++ b/src/gui/kernel/qcursor.h @@ -120,7 +120,7 @@ public: static int x11Screen(); #elif defined(Q_WS_MAC) Qt::HANDLE handle() const; -#elif defined(Q_WS_QWS) +#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) int handle() const; #endif #endif diff --git a/src/gui/kernel/qcursor_lite.cpp b/src/gui/kernel/qcursor_lite.cpp new file mode 100644 index 0000000..5af03fc --- /dev/null +++ b/src/gui/kernel/qcursor_lite.cpp @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + +#ifndef QT_NO_CURSOR + +static int nextCursorId = Qt::BitmapCursor; + +/***************************************************************************** + Internal QCursorData class + *****************************************************************************/ + +QCursorData::QCursorData(Qt::CursorShape s) + : cshape(s), bm(0), bmm(0), hx(0), hy(0), id(s) +{ + ref = 1; +} + +QCursorData::~QCursorData() +{ + delete bm; + delete bmm; +} + + +/***************************************************************************** + Global cursors + *****************************************************************************/ + +extern QCursorData *qt_cursorTable[Qt::LastCursor + 1]; // qcursor.cpp + +int QCursor::handle() const +{ + return d->id; +} + + +QCursorData *QCursorData::setBitmap(const QBitmap &bitmap, const QBitmap &mask, int hotX, int hotY) +{ + if (!QCursorData::initialized) + QCursorData::initialize(); + if (bitmap.depth() != 1 || mask.depth() != 1 || bitmap.size() != mask.size()) { + qWarning("QCursor: Cannot create bitmap cursor; invalid bitmap(s)"); + QCursorData *c = qt_cursorTable[0]; + c->ref.ref(); + return c; + } + QCursorData *d = new QCursorData; + d->bm = new QBitmap(bitmap); + d->bmm = new QBitmap(mask); + d->cshape = Qt::BitmapCursor; + d->id = ++nextCursorId; + d->hx = hotX >= 0 ? hotX : bitmap.width() / 2; + d->hy = hotY >= 0 ? hotY : bitmap.height() / 2; + + return d; +} + +void QCursorData::update() +{ +} + +#endif //QT_NO_CURSOR + +extern int qt_last_x,qt_last_y; + +QPoint QCursor::pos() +{ + return QPoint(qt_last_x, qt_last_y); +} + +void QCursor::setPos(int x, int y) +{ + // Need to check, since some X servers generate null mouse move + // events, causing looping in applications which call setPos() on + // every mouse move event. + // + if (pos() == QPoint(x, y)) + return; +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qcursor_p.h b/src/gui/kernel/qcursor_p.h index 94b751a..17164e7 100644 --- a/src/gui/kernel/qcursor_p.h +++ b/src/gui/kernel/qcursor_p.h @@ -88,7 +88,7 @@ struct QCursorData { short hx, hy; #if defined (Q_WS_MAC) int mId; -#elif defined(Q_WS_QWS) +#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) int id; #endif #if defined (Q_WS_WIN) diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp new file mode 100644 index 0000000..7aea787 --- /dev/null +++ b/src/gui/kernel/qdesktopwidget_lite.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdesktopwidget.h" +#include "private/qapplication_p.h" +#include "private/qgraphicssystem_p.h" + +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + +QDesktopWidget::QDesktopWidget() + : QWidget(0, Qt::Desktop) +{ + setObjectName(QLatin1String("desktop")); +} + +QDesktopWidget::~QDesktopWidget() +{ +} + +bool QDesktopWidget::isVirtualDesktop() const +{ + return true; +} + +int QDesktopWidget::primaryScreen() const +{ + return 0; +} + +int QDesktopWidget::numScreens() const +{ + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) + return 0; + return qMax(gs->screens().size(), 1); +} + +QWidget *QDesktopWidget::screen(int) +{ + return this; +} + +const QRect QDesktopWidget::availableGeometry(int screenNo) const +{ + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) + return QRect(); + QList screens = gs->screens(); + if (screenNo == -1) + screenNo = 0; + if (screenNo < 0 || screenNo >= screens.size()) + return QRect(); + else + return screens[screenNo]->availableGeometry(); +} + +const QRect QDesktopWidget::screenGeometry(int screenNo) const +{ + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) + return QRect(); + QList screens = gs->screens(); + if (screenNo == -1) + screenNo = 0; + if (screenNo < 0 || screenNo >= screens.size()) + return QRect(); + else + return screens[screenNo]->geometry(); +} + +int QDesktopWidget::screenNumber(const QWidget *w) const +{ + if (!w) + return 0; + + QRect frame = w->frameGeometry(); + if (!w->isWindow()) + frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0))); + const QPoint midpoint = (frame.topLeft() + frame.bottomRight()) / 2; + return screenNumber(midpoint); +} + +int QDesktopWidget::screenNumber(const QPoint &p) const +{ + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) + return -1; + QList screens = gs->screens(); + + for (int i = 0; i < screens.size(); ++i) + if (screens[i]->geometry().contains(p)) + return i; + + return -1; +} + +void QDesktopWidget::resizeEvent(QResizeEvent *) +{ +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qdnd_p.h b/src/gui/kernel/qdnd_p.h index 1f64015..a9d5056 100644 --- a/src/gui/kernel/qdnd_p.h +++ b/src/gui/kernel/qdnd_p.h @@ -262,7 +262,7 @@ public: private: QPixmap *pm_cursor; int n_cursor; -#ifdef Q_WS_QWS +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) Qt::DropAction currentActionForOverrideCursor; #endif diff --git a/src/gui/kernel/qgenericplugin_lite.cpp b/src/gui/kernel/qgenericplugin_lite.cpp new file mode 100644 index 0000000..29d7728 --- /dev/null +++ b/src/gui/kernel/qgenericplugin_lite.cpp @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgenericplugin_lite.h" + +#ifndef QT_NO_LIBRARY + +QT_BEGIN_NAMESPACE + +/*! + \class QGenericPlugin + \ingroup plugins + \ingroup lite + + \brief The QGenericPlugin class is an abstract base class for + window-system related plugins in Qt for Embedded Linux LITE. + + Note that this class is only available in \l{Qt for Embedded Linux LITE}. + + A mouse plugin can be created by subclassing + QGenericPlugin and reimplementing the pure virtual keys() and + create() functions. By exporting the derived class using the + Q_EXPORT_PLUGIN2() macro, The default implementation of the + QGenericPluginFactory class will automatically detect the plugin and + load the driver into the server application at run-time. See \l + {How to Create Qt Plugins} for details. + + \sa QGenericPluginFactory +*/ + +/*! + \fn QStringList QGenericPlugin::keys() const + + Implement this function to return the list of valid keys, i.e. the + drivers supported by this plugin. + + \sa create() +*/ + +/*! + Constructs a plugin with the given \a parent. + + Note that this constructor is invoked automatically by the + Q_EXPORT_PLUGIN2() macro, so there is no need for calling it + explicitly. +*/ +QGenericPlugin::QGenericPlugin(QObject *parent) + : QObject(parent) +{ +} + +/*! + Destroys the plugin. + + Note that Qt destroys a plugin automatically when it is no longer + used, so there is no need for calling the destructor explicitly. +*/ +QGenericPlugin::~QGenericPlugin() +{ +} + +/*! + \fn QObject* QGenericPlugin::create(const QString &key, const QString& specification) + + Implement this function to create a driver matching the type + specified by the given \a key and \a specification parameters. Note that + keys are case-insensitive. + + \sa keys() +*/ + +QT_END_NAMESPACE + +#endif // QT_NO_LIBRARY diff --git a/src/gui/kernel/qgenericplugin_lite.h b/src/gui/kernel/qgenericplugin_lite.h new file mode 100644 index 0000000..2c0ee7a --- /dev/null +++ b/src/gui/kernel/qgenericplugin_lite.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGENERICPLUGIN_LITE_H +#define QGENERICPLUGIN_LITE_H + +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +#ifndef QT_NO_LIBRARY + +//class QGenericObject; ????? + + struct Q_GUI_EXPORT QGenericPluginFactoryInterface : public QFactoryInterface +{ + virtual QObject* create(const QString &name, const QString &spec) = 0; +}; + +#define QGenericPluginFactoryInterface_iid "com.trolltech.Qt.QGenericPluginFactoryInterface" +Q_DECLARE_INTERFACE(QGenericPluginFactoryInterface, QGenericPluginFactoryInterface_iid) + +class Q_GUI_EXPORT QGenericPlugin : public QObject, public QGenericPluginFactoryInterface +{ + Q_OBJECT + Q_INTERFACES(QGenericPluginFactoryInterface:QFactoryInterface) +public: + explicit QGenericPlugin(QObject *parent = 0); + ~QGenericPlugin(); + + virtual QStringList keys() const = 0; + virtual QObject* create(const QString& name, const QString &spec) = 0; +}; + +#endif // QT_NO_LIBRARY + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QMOUSEDRIVERPLUGIN_QWS_H diff --git a/src/gui/kernel/qgenericpluginfactory_lite.cpp b/src/gui/kernel/qgenericpluginfactory_lite.cpp new file mode 100644 index 0000000..4e5b12b --- /dev/null +++ b/src/gui/kernel/qgenericpluginfactory_lite.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgenericpluginfactory_lite.h" + +#include "qapplication.h" +#include "private/qfactoryloader_p.h" +#include "qgenericplugin_lite.h" +#include "qdebug.h" + +QT_BEGIN_NAMESPACE + +#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) +#ifndef QT_NO_LIBRARY + +Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, + (QGenericPluginFactoryInterface_iid, + QLatin1String("/generic"), Qt::CaseInsensitive)) + +#endif //QT_NO_LIBRARY +#endif //QT_MAKEDLL + +/*! + \class QGenericPluginFactory + \ingroup qws + + \brief The QGenericPluginFactory class creates window-system + related plugin drivers in Qt for Embedded Linux LITE. + + Note that this class is only available in \l{Qt for Embedded Linux LITE}. + + + \sa QGenericPlugin +*/ + +/*! + Creates the driver specified by \a key, using the given \a specification. + + Note that the keys are case-insensitive. + + \sa keys() +*/ +QObject *QGenericPluginFactory::create(const QString& key, const QString &specification) +{ + QString driver = key.toLower(); + +#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) +#ifndef QT_NO_LIBRARY + if (QGenericPluginFactoryInterface *factory = qobject_cast(loader()->instance(driver))) + return factory->create(driver, specification); +#endif +#endif + return 0; +} + +/*! + Returns the list of valid keys, i.e. the available mouse drivers. + + \sa create() +*/ +QStringList QGenericPluginFactory::keys() +{ + QStringList list; + +#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) +#ifndef QT_NO_LIBRARY + QStringList plugins = loader()->keys(); + for (int i = 0; i < plugins.size(); ++i) { + if (!list.contains(plugins.at(i))) + list += plugins.at(i); + } +#endif //QT_NO_LIBRARY +#endif //QT_MAKEDLL + return list; +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qgenericpluginfactory_lite.h b/src/gui/kernel/qgenericpluginfactory_lite.h new file mode 100644 index 0000000..3be4614 --- /dev/null +++ b/src/gui/kernel/qgenericpluginfactory_lite.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGENERICPLUGINFACTORY_LITE_H +#define QGENERICPLUGINFACTORY_LITE_H + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class QString; +class QObject; + +class Q_GUI_EXPORT QGenericPluginFactory +{ +public: + static QStringList keys(); + static QObject *create(const QString&, const QString &); +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QGENERICPLUGINFACTORY_QWS_H diff --git a/src/gui/kernel/qsound_lite.cpp b/src/gui/kernel/qsound_lite.cpp new file mode 100644 index 0000000..2e2c1e8 --- /dev/null +++ b/src/gui/kernel/qsound_lite.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qapplication.h" + +#ifndef QT_NO_SOUND + +#include "qsound.h" +#include "qsound_p.h" + +class QAuServerLite : public QAuServer +{ + Q_OBJECT +public: + QAuServerLite( QObject* parent ); + + void play( QSound* s ) {} + void stop( QSound* s ) {} + bool okay() { return false; } +}; + +QAuServerLite::QAuServerLite(QObject* parent) : + QAuServer(parent) +{ +} + +QAuServer* qt_new_audio_server() +{ + return new QAuServerLite(qApp); +} + +#include "qsound_lite.moc" + +#endif // QT_NO_SOUND + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 44f9db1..a3b861e 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -5266,7 +5266,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP //actually send the paint event QPaintEvent e(toBePainted); QCoreApplication::sendSpontaneousEvent(q, &e); -#if !defined(Q_WS_MAC) && !defined(Q_WS_QWS) +#if !defined(Q_WS_MAC) && !defined(Q_WS_QWS) && !defined(Q_WS_LITE) if (backingStore && !onScreen && !asRoot && (q->internalWinId() || !q->nativeParentWidget()->isWindow())) backingStore->markDirtyOnScreen(toBePainted, q, offset); #endif diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp new file mode 100644 index 0000000..bbc7766 --- /dev/null +++ b/src/gui/kernel/qwidget_lite.cpp @@ -0,0 +1,616 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwidget.h" +#include "qevent.h" +#include "qapplication.h" +#include "private/qbackingstore_p.h" +#include "private/qwidget_p.h" +#include "private/qgraphicssystem_p.h" +#include "private/qapplication_p.h" + +QT_BEGIN_NAMESPACE + +void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool /*destroyOldWindow*/) +{ + Q_Q(QWidget); + + Q_UNUSED(window); + Q_UNUSED(initializeWindow); + // XXX + + + Qt::WindowFlags flags = data.window_flags; + +#if 1 + QWindowSurface *surface = q->windowSurface(); + if (surface && (flags & Qt::Window)) + data.window_flags = surface->setWindowFlags(data.window_flags); +#endif +// qDebug() << "create_sys" << q; +} + +void QWidget::destroy(bool destroyWindow, bool destroySubWindows) +{ + Q_UNUSED(destroyWindow); + Q_UNUSED(destroySubWindows); + // XXX + + + if ((windowType() == Qt::Popup)) + qApp->d_func()->closePopup(this); + +} + +void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) +{ + Q_Q(QWidget); + + QWidget *oldParent = q->parentWidget(); + Qt::WindowFlags oldFlags = data.window_flags; + if (parent != newparent) { + QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function??? + + } + if (!newparent) { + f |= Qt::Window; + } + data.window_flags = f; + if (f & Qt::Window) { + //qDebug() << "setParent_sys" << q << newparent << hex << f; + if (QWindowSurface *surface = q->windowSurface()) + data.window_flags = surface->setWindowFlags(data.window_flags); + } + // XXX Reparenting child to toplevel or vice versa ### + if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { + qDebug() << "setParent_sys() change to toplevel"; + q->create(); //### this cannot be right + } else if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { + qDebug() << "######## setParent_sys() change from toplevel not implemented ########"; + } +} + +QPoint QWidget::mapToGlobal(const QPoint &pos) const +{ + int x=pos.x(), y=pos.y(); + const QWidget* w = this; + while (w) { + x += w->data->crect.x(); + y += w->data->crect.y(); + w = w->isWindow() ? 0 : w->parentWidget(); + } + return QPoint(x, y); +} + +QPoint QWidget::mapFromGlobal(const QPoint &pos) const +{ + int x=pos.x(), y=pos.y(); + const QWidget* w = this; + while (w) { + x -= w->data->crect.x(); + y -= w->data->crect.y(); + w = w->isWindow() ? 0 : w->parentWidget(); + } + return QPoint(x, y); +} + +void QWidgetPrivate::updateSystemBackground() {} + +#ifndef QT_NO_CURSOR +void QWidgetPrivate::setCursor_sys(const QCursor &cursor) +{ + Q_UNUSED(cursor); + Q_Q(QWidget); + if (q->isVisible()) + updateCursor(); +} + +void QWidgetPrivate::unsetCursor_sys() +{ + Q_Q(QWidget); + if (q->isVisible()) + updateCursor(); +} + +void QWidgetPrivate::updateCursor() const +{ + // XXX +} + +#endif //QT_NO_CURSOR + +void QWidgetPrivate::setWindowTitle_sys(const QString &caption) +{ + Q_UNUSED(caption); + // XXX +} + +void QWidgetPrivate::setWindowIcon_sys(bool /*forceReset*/) +{ +} + +void QWidgetPrivate::setWindowIconText_sys(const QString &iconText) +{ + Q_UNUSED(iconText); +} + +QWidget *qt_pressGrab = 0; +QWidget *qt_mouseGrb = 0; +static QWidget *keyboardGrb = 0; + +void QWidget::grabMouse() +{ + if (qt_mouseGrb) + qt_mouseGrb->releaseMouse(); + + // XXX + //qwsDisplay()->grabMouse(this,true); + + qt_mouseGrb = this; + qt_pressGrab = 0; +} + +#ifndef QT_NO_CURSOR +void QWidget::grabMouse(const QCursor &cursor) +{ + Q_UNUSED(cursor); + + if (qt_mouseGrb) + qt_mouseGrb->releaseMouse(); + + // XXX + //qwsDisplay()->grabMouse(this,true); + //qwsDisplay()->selectCursor(this, cursor.handle()); + qt_mouseGrb = this; + qt_pressGrab = 0; +} +#endif + +void QWidget::releaseMouse() +{ + if (qt_mouseGrb == this) { + // XXX + //qwsDisplay()->grabMouse(this,false); + qt_mouseGrb = 0; + } +} + +void QWidget::grabKeyboard() +{ + if (keyboardGrb) + keyboardGrb->releaseKeyboard(); + // XXX + //qwsDisplay()->grabKeyboard(this, true); + keyboardGrb = this; +} + +void QWidget::releaseKeyboard() +{ + if (keyboardGrb == this) { + // XXX + //qwsDisplay()->grabKeyboard(this, false); + keyboardGrb = 0; + } +} + +QWidget *QWidget::mouseGrabber() +{ + if (qt_mouseGrb) + return qt_mouseGrb; + return qt_pressGrab; +} + +QWidget *QWidget::keyboardGrabber() +{ + return keyboardGrb; +} + +void QWidget::activateWindow() +{ + // XXX +// qDebug() << "QWidget::activateWindow" << this; + QApplication::setActiveWindow(this); //##### +} + +void QWidgetPrivate::show_sys() +{ + Q_Q(QWidget); + q->setAttribute(Qt::WA_Mapped); + if (q->testAttribute(Qt::WA_DontShowOnScreen)) { + invalidateBuffer(q->rect()); + return; + } + + QApplication::postEvent(q, new QUpdateLaterEvent(q->rect())); + + if (!q->isWindow()) + return; + + if (QWindowSurface *surface = q->windowSurface()) { + const QRect geomRect = q->geometry(); + if (surface->geometry() != geomRect) + surface->setGeometry(geomRect); + surface->setVisible(true); + } + + if (q->windowType() != Qt::Popup) + q->activateWindow(); //### +} + + +void QWidgetPrivate::hide_sys() +{ + Q_Q(QWidget); + q->setAttribute(Qt::WA_Mapped, false); + if (!q->isWindow()) { + QWidget *p = q->parentWidget(); + if (p &&p->isVisible()) { + invalidateBuffer(q->rect()); + } + return; + } + if (QWindowSurface *surface = q->windowSurface()) { + surface->setVisible(false); + } + + //### we don't yet have proper focus event handling + if (q == QApplicationPrivate::active_window) + QApplication::setActiveWindow(0); + +} + +void QWidgetPrivate::setMaxWindowState_helper() +{ + // XXX +} + +void QWidgetPrivate::setFullScreenSize_helper() +{ + // XXX +} + +static Qt::WindowStates effectiveState(Qt::WindowStates state) + { + if (state & Qt::WindowMinimized) + return Qt::WindowMinimized; + else if (state & Qt::WindowFullScreen) + return Qt::WindowFullScreen; + else if (state & Qt::WindowMaximized) + return Qt::WindowMaximized; + return Qt::WindowNoState; + } + +void QWidget::setWindowState(Qt::WindowStates newstate) +{ + Q_D(QWidget); + Qt::WindowStates oldstate = windowState(); + if (oldstate == newstate) + return; + if (isWindow() && !testAttribute(Qt::WA_WState_Created)) + create(); + + data->window_state = newstate; + data->in_set_window_state = 1; + bool needShow = false; + Qt::WindowStates newEffectiveState = effectiveState(newstate); + Qt::WindowStates oldEffectiveState = effectiveState(oldstate); + if (isWindow() && newEffectiveState != oldEffectiveState) { + d->createTLExtra(); + if (oldEffectiveState == Qt::WindowNoState) { //normal + d->topData()->normalGeometry = geometry(); + } else if (oldEffectiveState == Qt::WindowFullScreen) { + setParent(0, d->topData()->savedFlags); + needShow = true; + } else if (oldEffectiveState == Qt::WindowMinimized) { + needShow = true; + } + + if (newEffectiveState == Qt::WindowMinimized) { + //### not ideal... + hide(); + needShow = false; + } else if (newEffectiveState == Qt::WindowFullScreen) { + d->topData()->savedFlags = windowFlags(); + setParent(0, Qt::FramelessWindowHint | (windowFlags() & Qt::WindowStaysOnTopHint)); + d->setFullScreenSize_helper(); + raise(); + needShow = true; + } else if (newEffectiveState == Qt::WindowMaximized) { + createWinId(); + d->setMaxWindowState_helper(); + } else { //normal + QRect r = d->topData()->normalGeometry; + if (r.width() >= 0) { + d->topData()->normalGeometry = QRect(0,0,-1,-1); + setGeometry(r); + } + } + } + data->in_set_window_state = 0; + + if (needShow) + show(); + + if (newstate & Qt::WindowActive) + activateWindow(); + + QWindowStateChangeEvent e(oldstate); + QApplication::sendEvent(this, &e); +} + +void QWidgetPrivate::setFocus_sys() +{ + +} + +void QWidgetPrivate::raise_sys() +{ + // XXX +} + +void QWidgetPrivate::lower_sys() +{ + // XXX +} + +void QWidgetPrivate::stackUnder_sys(QWidget*) +{ + // XXX +} + +void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) +{ + Q_Q(QWidget); + if (extra) { // any size restrictions? + w = qMin(w,extra->maxw); + h = qMin(h,extra->maxh); + w = qMax(w,extra->minw); + h = qMax(h,extra->minh); + } + + QPoint oldp = q->geometry().topLeft(); + QSize olds = q->size(); + QRect r(x, y, w, h); + + bool isResize = olds != r.size(); + isMove = oldp != r.topLeft(); //### why do we have isMove as a parameter? + + + // We only care about stuff that changes the geometry, or may + // cause the window manager to change its state + if (r.size() == olds && oldp == r.topLeft()) + return; + + if (!data.in_set_window_state) { + q->data->window_state &= ~Qt::WindowMaximized; + q->data->window_state &= ~Qt::WindowFullScreen; + if (q->isWindow()) + topData()->normalGeometry = QRect(0, 0, -1, -1); + } + + QPoint oldPos = q->pos(); + data.crect = r; + + if (q->isVisible()) { + + if (q->isWindow()) { + const QWidgetBackingStore *bs = maybeBackingStore(); + if (bs->windowSurface) + bs->windowSurface->setGeometry(q->frameGeometry()); + } else { + if (isMove && !isResize) + moveRect(QRect(oldPos, olds), x - oldPos.x(), y - oldPos.y()); + else + invalidateBuffer_resizeHelper(oldPos, olds); + } + + if (isMove) { + QMoveEvent e(q->pos(), oldPos); + QApplication::sendEvent(q, &e); + } + if (isResize) { + QResizeEvent e(r.size(), olds); + QApplication::sendEvent(q, &e); + } + } else { // not visible + if (isMove && q->pos() != oldPos) + q->setAttribute(Qt::WA_PendingMoveEvent, true); + if (isResize) + q->setAttribute(Qt::WA_PendingResizeEvent, true); + } + +} + +void QWidgetPrivate::setConstraints_sys() +{ +} + +void QWidgetPrivate::scroll_sys(int dx, int dy) +{ + Q_Q(QWidget); + scrollChildren(dx, dy); + scrollRect(q->rect(), dx, dy); +} + +void QWidgetPrivate::scroll_sys(int dx, int dy, const QRect &r) +{ + scrollRect(r, dx, dy); +} + +static QGraphicsSystemScreen *qt_screenForWidget(const QWidget *w) +{ + if (!w) + return 0; + QRect frame = w->frameGeometry(); + if (!w->isWindow()) + frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0))); + const QPoint p = (frame.topLeft() + frame.bottomRight()) / 2; + + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) { + qWarning("qt_screenForWidget: no graphics system"); + return 0; + } + QList screens = gs->screens(); + + for (int i = 0; i < screens.size(); ++i) { + if (screens[i]->geometry().contains(p)) + return screens[i]; + } + + // Assume screen zero if we have it. + if (!screens.isEmpty()) + return screens[0]; + else + qWarning("qt_screenForWidget: no screens"); + + return 0; +} + +int QWidget::metric(PaintDeviceMetric m) const +{ + Q_D(const QWidget); + + QGraphicsSystemScreen *screen = qt_screenForWidget(this); + if (!screen) { + if (m == PdmDpiX || m == PdmDpiY) + return 72; + return QPaintDevice::metric(m); + } + int val; + if (m == PdmWidth) { + val = data->crect.width(); + } else if (m == PdmWidthMM) { + val = data->crect.width() * screen->physicalSize().width() / screen->geometry().width(); + } else if (m == PdmHeight) { + val = data->crect.height(); + } else if (m == PdmHeightMM) { + val = data->crect.height() * screen->physicalSize().height() / screen->geometry().height(); + } else if (m == PdmDepth) { + return screen->depth(); + } else if (m == PdmDpiX || m == PdmPhysicalDpiX) { + if (d->extra && d->extra->customDpiX) + return d->extra->customDpiX; + else if (d->parent) + return static_cast(d->parent)->metric(m); + return qRound(screen->geometry().width() / double(screen->physicalSize().width() / 25.4)); + } else if (m == PdmDpiY || m == PdmPhysicalDpiY) { + if (d->extra && d->extra->customDpiY) + return d->extra->customDpiY; + else if (d->parent) + return static_cast(d->parent)->metric(m); + return qRound(screen->geometry().height() / double(screen->physicalSize().height() / 25.4)); + } else { + val = QPaintDevice::metric(m);// XXX + } + return val; +} + +void QWidgetPrivate::createSysExtra() +{ +} + +void QWidgetPrivate::deleteSysExtra() +{ +} + +void QWidgetPrivate::createTLSysExtra() +{ +} + +void QWidgetPrivate::deleteTLSysExtra() +{ +} + +void QWidgetPrivate::registerDropSite(bool on) +{ + Q_UNUSED(on); +} + +void QWidgetPrivate::setMask_sys(const QRegion ®ion) +{ + Q_UNUSED(region); + // XXX +} + +void QWidgetPrivate::updateFrameStrut() +{ + // XXX +} + +void QWidgetPrivate::setWindowOpacity_sys(qreal level) +{ + Q_UNUSED(level); + // XXX +} + +void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &oldRect) +{ + Q_UNUSED(dontShow); + Q_UNUSED(oldRect); + // XXX +} + +QPaintEngine *QWidget::paintEngine() const +{ + qWarning("QWidget::paintEngine: Should no longer be called"); + return 0; //##### @@@ +} + +QWindowSurface *QWidgetPrivate::createDefaultWindowSurface_sys() +{ + Q_Q(QWidget); + if (q->windowType() == Qt::Desktop) + return 0; + q->ensurePolished(); + + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) + return 0; + + return gs->createWindowSurface(q); +} + +void QWidgetPrivate::setModal_sys() +{ +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index f69c3a7..3636ffb 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -681,6 +681,12 @@ public: void updateCursor() const; #endif QScreen* getScreen() const; +#elif defined(Q_WS_LITE) + void setMaxWindowState_helper(); + void setFullScreenSize_helper(); +#ifndef QT_NO_CURSOR + void updateCursor() const; +#endif #elif defined(Q_OS_SYMBIAN) // <--------------------------------------------------------- SYMBIAN static QWidget *mouseGrabber; static QWidget *keyboardGrabber; diff --git a/src/gui/kernel/qwindowdefs.h b/src/gui/kernel/qwindowdefs.h index da3425d..a114bb1 100644 --- a/src/gui/kernel/qwindowdefs.h +++ b/src/gui/kernel/qwindowdefs.h @@ -131,6 +131,12 @@ QT_END_HEADER #endif // Q_WS_QWS +#if defined(Q_WS_LITE) + +typedef unsigned long WId; + +#endif // Q_WS_LITE + #if defined(Q_OS_SYMBIAN) class CCoeControl; typedef CCoeControl * WId; diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 5abac2f..1f2076c 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -136,7 +136,7 @@ unix:x11 { painting/qpaintengine_x11.cpp } -!embedded:!x11:mac { +!embedded:!embedded_lite:!x11:mac { HEADERS += \ painting/qpaintengine_mac_p.h \ painting/qgraphicssystem_mac_p.h \ @@ -152,14 +152,14 @@ unix:x11 { painting/qprintengine_mac.mm \ } -unix:!mac:!symbian { +unix:!mac:!symbian|embedded_lite { HEADERS += \ painting/qprinterinfo_unix_p.h SOURCES += \ painting/qprinterinfo_unix.cpp } -win32|x11|mac|embedded|symbian { +win32|x11|mac|embedded|embedded_lite|symbian { SOURCES += painting/qbackingstore.cpp HEADERS += painting/qbackingstore_p.h } @@ -176,13 +176,19 @@ embedded { painting/qpaintdevice_qws.cpp } +embedded_lite { + SOURCES += \ + painting/qcolormap_lite.cpp \ + painting/qpaintdevice_lite.cpp +} + symbian { SOURCES += \ painting/qregion_s60.cpp \ painting/qcolormap_s60.cpp } -x11|embedded { +x11|embedded|embedded_lite { contains(QT_CONFIG,qtopia) { DEFINES += QT_NO_CUPS QT_NO_LPR } else { @@ -348,7 +354,7 @@ x11 { SOURCES += painting/qwindowsurface_x11.cpp } -mac { +!embedded:!embedded_lite:mac { HEADERS += painting/qwindowsurface_mac_p.h SOURCES += painting/qwindowsurface_mac.cpp } diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index e82f36e..d1ead97 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -691,9 +691,12 @@ void QWidgetBackingStore::markDirtyOnScreen(const QRegion ®ion, QWidget *widg } // Alien widgets. - if (!widget->internalWinId()) { - QWidget *nativeParent = widget->nativeParentWidget(); - // Alien widgets with the top-level as the native parent (common case). + if (!widget->internalWinId() && !widget->isWindow()) { //### LITEHACK we need winid support!!! +#ifdef Q_WS_LITE + QWidget *nativeParent = widget->window(); //### LITEHACK so far only toplevels are native +#else + QWidget *nativeParent = widget->nativeParentWidget(); // Alien widgets with the top-level as the native parent (common case). +#endif if (nativeParent == tlw) { if (!widget->testAttribute(Qt::WA_WState_InPaintEvent)) dirtyOnScreen += region.translated(topLevelOffset); diff --git a/src/gui/painting/qcolormap_lite.cpp b/src/gui/painting/qcolormap_lite.cpp new file mode 100644 index 0000000..b8ae1af --- /dev/null +++ b/src/gui/painting/qcolormap_lite.cpp @@ -0,0 +1,235 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcolormap.h" +#include "qcolor.h" +#include "qpaintdevice.h" +#include "private/qapplication_p.h" +#include "private/qgraphicssystem_p.h" + +QT_BEGIN_NAMESPACE + +class QColormapPrivate +{ +public: + inline QColormapPrivate() + : ref(1), mode(QColormap::Direct), depth(0), numcolors(0) + { } + + QAtomicInt ref; + + QColormap::Mode mode; + int depth; + int numcolors; +}; + +static QColormapPrivate *screenMap = 0; + +void QColormap::initialize() +{ + screenMap = new QColormapPrivate; + + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) + return; + QList screens = gs->screens(); + if (screens.isEmpty()) + return; + + screenMap->depth = screens[0]->depth(); + if (screenMap->depth < 8) { + screenMap->mode = QColormap::Indexed; + screenMap->numcolors = 256; + } else { + screenMap->mode = QColormap::Direct; + screenMap->numcolors = -1; + } +} + +void QColormap::cleanup() +{ + delete screenMap; + screenMap = 0; +} + +QColormap QColormap::instance(int /*screen*/) +{ + return QColormap(); +} + +QColormap::QColormap() + : d(screenMap) +{ d->ref.ref(); } + +QColormap::QColormap(const QColormap &colormap) + :d (colormap.d) +{ d->ref.ref(); } + +QColormap::~QColormap() +{ + if (!d->ref.deref()) + delete d; +} + +QColormap::Mode QColormap::mode() const +{ return d->mode; } + + +int QColormap::depth() const +{ return d->depth; } + + +int QColormap::size() const +{ + return d->numcolors; +} + +#ifndef QT_QWS_DEPTH16_RGB +#define QT_QWS_DEPTH16_RGB 565 +#endif +static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100); +static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10); +static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10); +static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits); +static const int qt_green_shift = qt_bbits-(8-qt_gbits); +static const int qt_neg_blue_shift = 8-qt_bbits; +static const int qt_blue_mask = (1<> qt_neg_blue_shift; + + return (tb & qt_blue_mask) | (tg & qt_green_mask) | (tr & qt_red_mask); +} + +inline QRgb qt_conv16ToRgb(ushort c) +{ + const int r=(c & qt_red_mask); + const int g=(c & qt_green_mask); + const int b=(c & qt_blue_mask); + const int tr = r >> qt_red_shift | r >> qt_red_rounding_shift; + const int tg = g >> qt_green_shift | g >> qt_green_rounding_shift; + const int tb = b << qt_neg_blue_shift | b >> qt_blue_rounding_shift; + + return qRgb(tr,tg,tb); +} + +uint QColormap::pixel(const QColor &color) const +{ + QRgb rgb = color.rgba(); + if (d->mode == QColormap::Direct) { + switch(d->depth) { + case 16: + return qt_convRgbTo16(rgb); + case 24: + case 32: + { + const int r = qRed(rgb); + const int g = qGreen(rgb); + const int b = qBlue(rgb); + const int red_shift = 16; + const int green_shift = 8; + const int red_mask = 0xff0000; + const int green_mask = 0x00ff00; + const int blue_mask = 0x0000ff; + const int tg = g << green_shift; +#ifdef QT_QWS_DEPTH_32_BGR + if (qt_screen->pixelType() == QScreen::BGRPixel) { + const int tb = b << red_shift; + return 0xff000000 | (r & blue_mask) | (tg & green_mask) | (tb & red_mask); + } +#endif + const int tr = r << red_shift; + return 0xff000000 | (b & blue_mask) | (tg & green_mask) | (tr & red_mask); + } + } + } + //XXX + //return qt_screen->alloc(qRed(rgb), qGreen(rgb), qBlue(rgb)); + return 0; +} + +const QColor QColormap::colorAt(uint pixel) const +{ + if (d->mode == Direct) { + if (d->depth == 16) { + pixel = qt_conv16ToRgb(pixel); + } + const int red_shift = 16; + const int green_shift = 8; + const int red_mask = 0xff0000; + const int green_mask = 0x00ff00; + const int blue_mask = 0x0000ff; +#ifdef QT_QWS_DEPTH_32_BGR + if (qt_screen->pixelType() == QScreen::BGRPixel) { + return QColor((pixel & blue_mask), + (pixel & green_mask) >> green_shift, + (pixel & red_mask) >> red_shift); + } +#endif + return QColor((pixel & red_mask) >> red_shift, + (pixel & green_mask) >> green_shift, + (pixel & blue_mask)); + } +#if 0 // XXX + Q_ASSERT_X(int(pixel) < qt_screen->numCols(), "QColormap::colorAt", "pixel out of bounds of palette"); + return QColor(qt_screen->clut()[pixel]); +#endif + return QColor(); +} + +const QVector QColormap::colormap() const +{ + return QVector(); +} + +QColormap &QColormap::operator=(const QColormap &colormap) +{ qAtomicAssign(d, colormap.d); return *this; } + +QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp index a7f5efb..ce8e500 100644 --- a/src/gui/painting/qgraphicssystem.cpp +++ b/src/gui/painting/qgraphicssystem.cpp @@ -50,6 +50,9 @@ #ifdef Q_WS_MAC # include #endif +#ifdef Q_WS_LITE +# include +#endif QT_BEGIN_NAMESPACE @@ -68,11 +71,26 @@ QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType typ return new QRasterPixmapData(type); #elif defined(Q_WS_MAC) return new QMacPixmapData(type); +#elif defined(Q_WS_LITE) + return new QRasterPixmapData(type); #elif !defined(Q_WS_QWS) #error QGraphicsSystem::createDefaultPixmapData() not implemented #endif return 0; } +QList QGraphicsSystem::screens() const +{ + return QList(); +} + +QGraphicsSystemScreen::~QGraphicsSystemScreen() +{ +} + +QRect QGraphicsSystemScreen::availableGeometry() const +{ + return geometry(); +} QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index c4f87f7..7e1ef67 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -60,6 +60,18 @@ QT_BEGIN_NAMESPACE class QPixmapFilter; +class Q_GUI_EXPORT QGraphicsSystemScreen +{ +public: + virtual ~QGraphicsSystemScreen(); + + virtual QRect geometry() const = 0; + virtual QRect availableGeometry() const; + virtual int depth() const = 0; + virtual QImage::Format format() const = 0; + virtual QSize physicalSize() const = 0; +}; + class Q_GUI_EXPORT QGraphicsSystem { public: @@ -68,6 +80,8 @@ public: virtual ~QGraphicsSystem() = 0; + virtual QList screens() const; + //### Remove this & change qpixmap.cpp & qbitmap.cpp once every platform is gaurenteed // to have a graphics system. static QPixmapData *createDefaultPixmapData(QPixmapData::PixelType type); diff --git a/src/gui/painting/qpaintdevice.cpp b/src/gui/painting/qpaintdevice.cpp index 7ee0818..b6bd40c 100644 --- a/src/gui/painting/qpaintdevice.cpp +++ b/src/gui/painting/qpaintdevice.cpp @@ -59,10 +59,12 @@ QPaintDevice::~QPaintDevice() } +#ifndef Q_WS_LITE int QPaintDevice::metric(PaintDeviceMetric) const { qWarning("QPaintDevice::metrics: Device has no metric information"); return 0; } +#endif QT_END_NAMESPACE diff --git a/src/gui/painting/qpaintdevice_lite.cpp b/src/gui/painting/qpaintdevice_lite.cpp new file mode 100644 index 0000000..2560bf5 --- /dev/null +++ b/src/gui/painting/qpaintdevice_lite.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qpaintdevice.h" +#include "qpainter.h" +#include "qwidget.h" +#include "qbitmap.h" +#include "qapplication.h" + +QT_BEGIN_NAMESPACE + +extern void qt_painter_removePaintDevice(QPaintDevice *); //qpainter.cpp + +int QPaintDevice::metric(PaintDeviceMetric m) const +{ + qWarning("QPaintDevice::metrics: Device has no metric information"); + if (m == PdmDpiX) { + return 72; + } else if (m == PdmDpiY) { + return 72; + } else if (m == PdmNumColors) { + // FIXME: does this need to be a real value? + return 256; + } else { + qDebug("Unrecognised metric %d!",m); + return 0; + } +} + +QT_END_NAMESPACE diff --git a/src/gui/painting/qpaintengine.h b/src/gui/painting/qpaintengine.h index 921db4f..6da0a2f 100644 --- a/src/gui/painting/qpaintengine.h +++ b/src/gui/painting/qpaintengine.h @@ -270,6 +270,9 @@ private: friend class QtopiaPrintEnginePrivate; friend class QProxyFontEngine; #endif +#ifdef Q_WS_LITE + friend class QProxyFontEngine; +#endif friend class QPainter; friend class QPainterPrivate; friend class QWidget; diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index d138663..3e3e8b9 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -1627,7 +1627,7 @@ QT_END_INCLUDE_NAMESPACE QT_BEGIN_INCLUDE_NAMESPACE # include "qregion_win.cpp" QT_END_INCLUDE_NAMESPACE -#elif defined(Q_WS_QWS) +#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) static QRegionPrivate qrp; QRegion::QRegionData QRegion::shared_empty = {Q_BASIC_ATOMIC_INITIALIZER(1), &qrp}; #endif @@ -4233,7 +4233,7 @@ QRect QRegion::boundingRect() const Returns true if \a rect is guaranteed to be fully contained in \a region. A false return value does not guarantee the opposite. */ -#ifdef Q_WS_QWS +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) Q_GUI_EXPORT #endif bool qt_region_strictContains(const QRegion ®ion, const QRect &rect) diff --git a/src/gui/painting/qregion.h b/src/gui/painting/qregion.h index 226e3fa..786283c 100644 --- a/src/gui/painting/qregion.h +++ b/src/gui/painting/qregion.h @@ -59,7 +59,7 @@ QT_MODULE(Gui) template class QVector; class QVariant; -#if defined(Q_WS_QWS) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) struct QRegionPrivate; #endif @@ -160,7 +160,7 @@ public: #endif HIMutableShapeRef toHIMutableShape() const; static QRegion fromHIShapeRef(HIShapeRef shape); -#elif defined(Q_WS_QWS) +#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) inline void *handle() const { return d->qt_rgn; } #endif #endif @@ -200,7 +200,7 @@ private: #elif defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA) mutable RgnHandle unused; // Here for binary compatability reasons. ### Qt 5 remove. #endif -#if defined(Q_WS_QWS) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) QRegionPrivate *qt_rgn; #endif }; diff --git a/src/gui/painting/qwindowsurface.cpp b/src/gui/painting/qwindowsurface.cpp index 1bd343d..c750a05 100644 --- a/src/gui/painting/qwindowsurface.cpp +++ b/src/gui/painting/qwindowsurface.cpp @@ -349,4 +349,35 @@ void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) } } + +#ifdef Q_WS_LITE +/*! +Requests setting the window flags of this surface to \a type. Returns the actual flags set. +*/ +Qt::WindowFlags QWindowSurface::setWindowFlags(Qt::WindowFlags type) +{ + Q_UNUSED(type); + qDebug() << "QWindowSurface::setWindowFlags" << hex << type; + return Qt::Window; +} + +/*! + Returns the effective window flags for this surface. +*/ +Qt::WindowFlags QWindowSurface::windowFlags() const +{ + return Qt::Window; +} + +/*! +Reimplemented in subclasses to show the surface if \a visible is \c true, and hide it if \a visible is \c false. +*/ + +void QWindowSurface::setVisible(bool visible) +{ + Q_UNUSED(visible); +} + +#endif + QT_END_NAMESPACE diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h index 502e10d..06d3dad 100644 --- a/src/gui/painting/qwindowsurface_p.h +++ b/src/gui/painting/qwindowsurface_p.h @@ -89,6 +89,11 @@ public: virtual QPoint offset(const QWidget *widget) const; inline QRect rect(const QWidget *widget) const; +#ifdef Q_WS_LITE + virtual void setVisible(bool visible); + virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + virtual Qt::WindowFlags windowFlags() const; +#endif bool hasStaticContentsSupport() const; void setStaticContents(const QRegion ®ion); diff --git a/src/gui/styles/styles.pri b/src/gui/styles/styles.pri index 767ade0..78d0359 100644 --- a/src/gui/styles/styles.pri +++ b/src/gui/styles/styles.pri @@ -33,7 +33,7 @@ contains( styles, all ) { styles = mac windows windowsxp windowsvista } -x11|embedded|!macx-*:styles -= mac +x11|embedded|embedded_lite|!macx-*:styles -= mac x11{ QMAKE_CXXFLAGS += $$QT_CFLAGS_QGTKSTYLE diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 03f69db..b9ce238 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -172,6 +172,8 @@ Q_GUI_EXPORT int qt_defaultDpiX() if (!subScreens.isEmpty()) screen = subScreens.at(0); dpi = qRound(screen->width() / (screen->physicalWidth() / qreal(25.4))); +#elif defined(Q_WS_LITE) + dpi = 72; #elif defined(Q_OS_SYMBIAN) dpi = S60->defaultDpiX; #endif // Q_WS_X11 @@ -200,6 +202,8 @@ Q_GUI_EXPORT int qt_defaultDpiY() if (!subScreens.isEmpty()) screen = subScreens.at(0); dpi = qRound(screen->height() / (screen->physicalHeight() / qreal(25.4))); +#elif defined(Q_WS_LITE) + dpi = 72; #elif defined(Q_OS_SYMBIAN) dpi = S60->defaultDpiY; #endif // Q_WS_X11 diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index 9fe660a..33aa4c4 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -46,7 +46,7 @@ #include #include -#if defined(Q_WS_X11) || defined(Q_WS_QWS) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) typedef struct FT_FaceRec_* FT_Face; #endif @@ -232,7 +232,7 @@ public: #ifdef Q_WS_MAC quint32 macFontID() const; #endif -#if defined(Q_WS_X11) || defined(Q_WS_QWS) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) FT_Face freetypeFace() const; #endif diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 78847ef..98d848f 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -56,7 +56,7 @@ #include #include -#if (defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) +#if (defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) # include # include FT_TRUETYPE_TABLES_H #endif @@ -153,10 +153,11 @@ struct QtFontSize QtFontEncoding *encodingID(int id, uint xpoint = 0, uint xres = 0, uint yres = 0, uint avgwidth = 0, bool add = false); #endif // Q_WS_X11 -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) + +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) QByteArray fileName; int fileIndex; -#endif // defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#endif // defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) }; @@ -230,14 +231,14 @@ struct QtFontStyle delete [] weightName; delete [] setwidthName; #endif -#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) while (count) { // bitfield count-- in while condition does not work correctly in mwccsym2 count--; #ifdef Q_WS_X11 free(pixelSizes[count].encodings); #endif -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) pixelSizes[count].fileName.~QByteArray(); #endif } @@ -255,7 +256,7 @@ struct QtFontStyle const char *weightName; const char *setwidthName; #endif // Q_WS_X11 -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) bool antialiased; #endif @@ -296,7 +297,7 @@ QtFontSize *QtFontStyle::pixelSize(unsigned short size, bool add) pixelSizes[count].count = 0; pixelSizes[count].encodings = 0; #endif -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) new (&pixelSizes[count].fileName) QByteArray; pixelSizes[count].fileIndex = 0; #endif @@ -382,7 +383,7 @@ struct QtFontFamily fixedPitchComputed(false), #endif name(n), count(0), foundries(0) -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) , bogusWritingSystems(false) #endif { @@ -422,7 +423,7 @@ struct QtFontFamily int count; QtFontFoundry **foundries; -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) bool bogusWritingSystems; QStringList fallbackFamilies; #endif @@ -469,7 +470,8 @@ QtFontFoundry *QtFontFamily::foundry(const QString &f, bool create) // ### copied to tools/makeqpf/qpf2.cpp -#if (defined(Q_WS_QWS) && !defined(QT_NO_FREETYPE)) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || (defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA)) +#if ((defined(Q_WS_QWS) || defined(Q_WS_LITE)) && !defined(QT_NO_FREETYPE)) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || (defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA)) + // see the Unicode subset bitfields in the MSDN docs static int requiredUnicodeBits[QFontDatabase::WritingSystemsCount][2] = { // Any, @@ -604,7 +606,7 @@ class QFontDatabasePrivate public: QFontDatabasePrivate() : count(0), families(0), reregisterAppFonts(false) -#if defined(Q_WS_QWS) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) , stream(0) #endif #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) @@ -652,11 +654,11 @@ public: void invalidate(); -#if defined(Q_WS_QWS) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) bool loadFromCache(const QString &fontPath); void addQPF2File(const QByteArray &file); #endif // Q_WS_QWS -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) void addFont(const QString &familyname, const char *foundryname, int weight, bool italic, int pixelSize, const QByteArray &file, int fileIndex, bool antialiased, @@ -665,7 +667,7 @@ public: QStringList addTTFile(const QByteArray &file, const QByteArray &fontData = QByteArray()); #endif // QT_NO_FREETYPE #endif -#if defined(Q_WS_QWS) +#if defined(Q_WS_QWS) || defined (Q_WS_LITE) QDataStream *stream; QStringList fallbackFamilies; #elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) @@ -719,7 +721,7 @@ QtFontFamily *QFontDatabasePrivate::family(const QString &f, bool create) return families[pos]; } -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundryname, int weight, bool italic, int pixelSize, const QByteArray &file, int fileIndex, bool antialiased, const QList &writingSystems) @@ -750,7 +752,7 @@ void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundr size->fileName = file; size->fileIndex = fileIndex; -#if defined(Q_WS_QWS) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) if (stream) { *stream << familyname << foundry->name << weight << quint8(italic) << pixelSize << file << fileIndex << quint8(antialiased); @@ -765,7 +767,7 @@ void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundr } #endif -#if (defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) +#if (defined(Q_WS_QWS) || defined (Q_WS_LITE) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) QStringList QFontDatabasePrivate::addTTFile(const QByteArray &file, const QByteArray &fontData) { QStringList families; @@ -877,7 +879,7 @@ static const int scriptForWritingSystem[] = { }; -#if defined Q_WS_QWS || (defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG)) || defined(Q_WS_WIN) +#if defined Q_WS_QWS || defined(Q_WS_LITE) || (defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG)) || defined(Q_WS_WIN) static inline bool requiresOpenType(int writingSystem) { return ((writingSystem >= QFontDatabase::Syriac && writingSystem <= QFontDatabase::Sinhala) @@ -951,7 +953,7 @@ static void match(int script, const QFontDef &request, const QString &family_name, const QString &foundry_name, int force_encoding_id, QtFontDesc *desc, const QList &blacklistedFamilies = QList()); -#if defined(Q_WS_X11) || defined(Q_WS_QWS) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDef *fontDef) { fontDef->family = desc.family->name; @@ -1039,7 +1041,7 @@ QT_BEGIN_INCLUDE_NAMESPACE # include "qfontdatabase_mac.cpp" #elif defined(Q_WS_WIN) # include "qfontdatabase_win.cpp" -#elif defined(Q_WS_QWS) +#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) # include "qfontdatabase_qws.cpp" #elif defined(Q_OS_SYMBIAN) # include "qfontdatabase_s60.cpp" diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h index e62bb31..9b92c57 100644 --- a/src/gui/text/qfontdatabase.h +++ b/src/gui/text/qfontdatabase.h @@ -151,7 +151,7 @@ public: private: static void createDatabase(); static void parseFontName(const QString &name, QString &foundry, QString &family); -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) static QFontEngine *findFont(int script, const QFontPrivate *fp, const QFontDef &request); #endif static void load(const QFontPrivate *d, int script); diff --git a/src/gui/text/qfontdatabase_qws.cpp b/src/gui/text/qfontdatabase_qws.cpp index 0a9630f..62c67a3 100644 --- a/src/gui/text/qfontdatabase_qws.cpp +++ b/src/gui/text/qfontdatabase_qws.cpp @@ -40,8 +40,10 @@ ****************************************************************************/ #include "qdir.h" +#if defined(Q_WS_QWS) #include "qscreen_qws.h" //so we can check for rotation #include "qwindowsystem_qws.h" +#endif #include "qlibraryinfo.h" #include "qabstractfileengine.h" #include @@ -153,7 +155,11 @@ extern QString qws_fontCacheDir(); #ifndef QT_FONTS_ARE_RESOURCES bool QFontDatabasePrivate::loadFromCache(const QString &fontPath) { +#ifdef Q_WS_QWS const bool weAreTheServer = QWSServer::instance(); +#else + const bool weAreTheServer = true; // assume single-process +#endif QString fontDirFile = fontPath + QLatin1String("/fontdir"); @@ -687,6 +693,7 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp, { QScopedPointer engine(loadSingleEngine(script, fp, request, family, foundry, style, size)); +#ifndef QT_NO_QWS_QPF if (!engine.isNull() && script == QUnicodeTables::Common && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol) { @@ -700,6 +707,7 @@ QFontEngine *loadEngine(int script, const QFontPrivate *fp, engine.take(); engine.reset(fe); } +#endif return engine.take(); } diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 7a3b3e1..74d72c4 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -816,7 +816,7 @@ QFontEngineGlyphCache *QFontEngine::glyphCache(QFontEngineGlyphCache::Type key, return 0; } -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) static inline QFixed kerning(int left, int right, const QFontEngine::KernPair *pairs, int numPairs) { uint left_right = (left << 16) + right; @@ -1182,7 +1182,7 @@ glyph_metrics_t QFontEngineBox::boundingBox(const QGlyphLayout &glyphs) return overall; } -#if defined(Q_WS_QWS) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) void QFontEngineBox::draw(QPaintEngine *p, qreal x, qreal y, const QTextItemInt &ti) { if (!ti.glyphs.numGlyphs) diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h index 4cc5c5e..9e10eab 100644 --- a/src/gui/text/qfontengine_ft_p.h +++ b/src/gui/text/qfontengine_ft_p.h @@ -256,7 +256,7 @@ public: QGlyphSet *loadTransformedGlyphSet(const QTransform &matrix); bool loadGlyphs(QGlyphSet *gs, glyph_t *glyphs, int num_glyphs, GlyphFormat format = Format_Render); -#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) virtual void draw(QPaintEngine * /*p*/, qreal /*x*/, qreal /*y*/, const QTextItemInt & /*si*/) {} #endif diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index d654215..dc17c83 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -234,7 +234,7 @@ public: bool symbol; mutable HB_FontRec hbFont; mutable HB_Face hbFace; -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) struct KernPair { uint left_right; QFixed adjust; diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index b28ecd7..2375f08 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -85,7 +85,7 @@ unix:x11 { text/qfontengine_ft.cpp } -!embedded:!x11:mac { +!embedded:!embedded_lite:!x11:mac { SOURCES += \ text/qfont_mac.cpp OBJECTIVE_SOURCES += text/qfontengine_mac.mm @@ -106,6 +106,19 @@ embedded { DEFINES += QT_NO_FONTCONFIG } +embedded_lite { + SOURCES += \ + text/qfont_qws.cpp \ + text/qfontengine_ft.cpp \ + text/qfontengine_qpf.cpp \ + text/qabstractfontengine_qws.cpp + HEADERS += \ + text/qfontengine_ft_p.h \ + text/qabstractfontengine_qws.h \ + text/qabstractfontengine_p.h + DEFINES += QT_NO_FONTCONFIG +} + symbian { SOURCES += \ text/qfont_s60.cpp diff --git a/src/gui/util/qdesktopservices.cpp b/src/gui/util/qdesktopservices.cpp index 76f583d..da4de73 100644 --- a/src/gui/util/qdesktopservices.cpp +++ b/src/gui/util/qdesktopservices.cpp @@ -45,7 +45,7 @@ #include -#if defined(Q_WS_QWS) +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) #include "qdesktopservices_qws.cpp" #elif defined(Q_WS_X11) #include "qdesktopservices_x11.cpp" diff --git a/src/gui/util/util.pri b/src/gui/util/util.pri index cdbb7cc..e718c7b 100644 --- a/src/gui/util/util.pri +++ b/src/gui/util/util.pri @@ -30,12 +30,12 @@ unix:x11 { util/qsystemtrayicon_x11.cpp } -embedded { +embedded|embedded_lite { SOURCES += \ util/qsystemtrayicon_qws.cpp } -!embedded:!x11:mac { +!embedded:!embedded_lite:!x11:mac { OBJECTIVE_SOURCES += util/qsystemtrayicon_mac.mm } diff --git a/src/gui/widgets/qlinecontrol.cpp b/src/gui/widgets/qlinecontrol.cpp index da18f86..db6a572 100644 --- a/src/gui/widgets/qlinecontrol.cpp +++ b/src/gui/widgets/qlinecontrol.cpp @@ -112,7 +112,7 @@ void QLineControl::updateDisplayText() Copies the currently selected text into the clipboard using the given \a mode. - + \note If the echo mode is set to a mode other than Normal then copy will not work. This is to prevent using copy as a method of bypassing password features of the line control. @@ -479,7 +479,7 @@ void QLineControl::processInputMethodEvent(QInputMethodEvent *event) /*! \internal - Draws the display text for the line control using the given + Draws the display text for the line control using the given \a painter, \a clip, and \a offset. Which aspects of the display text are drawn is specified by the given \a flags. diff --git a/src/gui/widgets/widgets.pri b/src/gui/widgets/widgets.pri index 4567902..5ee693c 100644 --- a/src/gui/widgets/widgets.pri +++ b/src/gui/widgets/widgets.pri @@ -146,7 +146,7 @@ SOURCES += \ widgets/qprintpreviewwidget.cpp \ widgets/qactiontokeyeventmapper.cpp -!embedded:mac { +!embedded:!embedded_lite:mac { HEADERS += widgets/qmacnativewidget_mac.h \ widgets/qmaccocoaviewcontainer_mac.h OBJECTIVE_HEADERS += widgets/qcocoatoolbardelegate_mac_p.h \ diff --git a/src/plugins/generic/linuxinput/linuxinput.pro b/src/plugins/generic/linuxinput/linuxinput.pro new file mode 100644 index 0000000..ad9f6a9 --- /dev/null +++ b/src/plugins/generic/linuxinput/linuxinput.pro @@ -0,0 +1,18 @@ +TARGET = qlinuxinputplugin +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/generic +target.path = $$[QT_INSTALL_PLUGINS]/generic +INSTALLS += target + +DEFINES += QT_QWS_KBD_LINUXINPUT + +HEADERS = qlinuxinput.h + +SOURCES = main.cpp \ + qlinuxinput.cpp + +HEADERS += $$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws.h \ + $$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws_p.h + +SOURCES += $$QT_SOURCE_TREE/src/gui/embedded/qkbd_qws.cpp diff --git a/src/plugins/generic/linuxinput/main.cpp b/src/plugins/generic/linuxinput/main.cpp new file mode 100644 index 0000000..21209b8 --- /dev/null +++ b/src/plugins/generic/linuxinput/main.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qlinuxinput.h" + +QT_BEGIN_NAMESPACE + +class QLinuxInputPlugin : public QGenericPlugin +{ +public: + QLinuxInputPlugin(); + + QStringList keys() const; + QObject* create(const QString &key, const QString &specification); +}; + +QLinuxInputPlugin::QLinuxInputPlugin() + : QGenericPlugin() +{ +} + +QStringList QLinuxInputPlugin::keys() const +{ + return (QStringList() + << QLatin1String("LinuxInputMouse") + << QLatin1String("LinuxInputKeyboard")); +} + +QObject* QLinuxInputPlugin::create(const QString &key, + const QString &specification) +{ + if (!key.compare(QLatin1String("LinuxInputMouse"), Qt::CaseInsensitive)) + return new QLinuxInputMouseHandler(key, specification); + if (!key.compare(QLatin1String("LinuxInputKeyboard"), Qt::CaseInsensitive)) + return new QLinuxInputKeyboardHandler(key, specification); + return 0; + } + +Q_EXPORT_PLUGIN2(qlinuxinputplugin, QLinuxInputPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp new file mode 100644 index 0000000..2ce687d --- /dev/null +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -0,0 +1,371 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "qlinuxinput.h" + + +#include +#include +#include +#include +#include + +#include + + +#include +#include // overrides QT_OPEN + +#include +#include + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, + const QString &specification) + : m_notify(0), m_x(0), m_y(0), m_buttons(0) +{ + qDebug() << "QLinuxInputMouseHandler" << key << specification; + + + setObjectName(QLatin1String("LinuxInputSubsystem Mouse Handler")); + + QString dev = QLatin1String("/dev/input/event0"); + if (specification.startsWith(QLatin1String("/dev/"))) + dev = specification; + + m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0); + if (m_fd >= 0) { + m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); + connect(m_notify, SIGNAL(activated(int)), this, SLOT(readMouseData())); + } else { + qWarning("Cannot open mouse input device '%s': %s", qPrintable(dev), strerror(errno)); + return; + } + +} + + +QLinuxInputMouseHandler::~QLinuxInputMouseHandler() +{ + if (m_fd >= 0) + QT_CLOSE(m_fd); +} + +void QLinuxInputMouseHandler::readMouseData() +{ + struct ::input_event buffer[32]; + int n = 0; + + forever { + n = QT_READ(m_fd, reinterpret_cast(buffer) + n, sizeof(buffer) - n); + + if (n == 0) { + qWarning("Got EOF from the input device."); + return; + } else if (n < 0 && (errno != EINTR && errno != EAGAIN)) { + qWarning("Could not read from input device: %s", strerror(errno)); + return; + } else if (n % sizeof(buffer[0]) == 0) { + break; + } + } + + n /= sizeof(buffer[0]); + + for (int i = 0; i < n; ++i) { + struct ::input_event *data = &buffer[i]; + + bool unknown = false; + if (data->type == EV_ABS) { + if (data->code == ABS_X) { + m_x = data->value; + } else if (data->code == ABS_Y) { + m_y = data->value; + } else { + unknown = true; + } + } else if (data->type == EV_REL) { + if (data->code == REL_X) { + m_x += data->value; + } else if (data->code == REL_Y) { + m_y += data->value; + } else { + unknown = true; + } + } else if (data->type == EV_KEY && data->code == BTN_TOUCH) { + m_buttons = data->value ? Qt::LeftButton : Qt::NoButton; + } else if (data->type == EV_KEY) { + Qt::MouseButton button = Qt::NoButton; + switch (data->code) { + case BTN_LEFT: button = Qt::LeftButton; break; + case BTN_MIDDLE: button = Qt::MidButton; break; + case BTN_RIGHT: button = Qt::RightButton; break; + } + if (data->value) + m_buttons |= button; + else + m_buttons &= ~button; + + Qt::KeyboardModifiers modifiers = Qt::NoModifier; //### + QMouseEvent m(data->value ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease, + QPoint(m_x, m_y), QPoint(m_x, m_y), button, m_buttons, modifiers); + QApplicationPrivate::handleMouseEvent(0, m); + } else if (data->type == EV_SYN && data->code == SYN_REPORT) { + QPoint pos(m_x, m_y); + + Qt::KeyboardModifiers modifiers = Qt::NoModifier; //### + QMouseEvent m(QEvent::MouseMove, QPoint(m_x, m_y), QPoint(m_x, m_y), + Qt::NoButton, m_buttons, modifiers); + QApplicationPrivate::handleMouseEvent(0, m); + + // pos = m_handler->transform(pos); + //m_handler->limitToScreen(pos); + //m_handler->mouseChanged(pos, m_buttons); + + } else if (data->type == EV_MSC && data->code == MSC_SCAN) { + // kernel encountered an unmapped key - just ignore it + continue; + } else { + unknown = true; + } + if (unknown) { + qWarning("unknown mouse event type=%x, code=%x, value=%x", data->type, data->code, data->value); + } + } +} + + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +//Keyboard handler + + + + +class QWSLinuxInputKeyboardHandler : public QWSKeyboardHandler +{ +public: + QWSLinuxInputKeyboardHandler(const QString&); + ~QWSLinuxInputKeyboardHandler(); + + virtual bool filterInputEvent(quint16 &input_code, qint32 &input_value); + +//private: +// QWSLinuxInputKbPrivate *d; +}; + + +QWSLinuxInputKeyboardHandler::QWSLinuxInputKeyboardHandler(const QString &device) + : QWSKeyboardHandler(device) +{ +} + +QWSLinuxInputKeyboardHandler::~QWSLinuxInputKeyboardHandler() +{ +} + +bool QWSLinuxInputKeyboardHandler::filterInputEvent(quint16 &, qint32 &) +{ + return false; +} + + +QLinuxInputKeyboardHandler::QLinuxInputKeyboardHandler(const QString &key, const QString &specification) + : m_handler(0), m_fd(-1), m_tty_fd(-1), m_orig_kbmode(K_XLATE) +{ + setObjectName(QLatin1String("LinuxInputSubsystem Keyboard Handler")); + + QString dev = QLatin1String("/dev/input/event1"); + int repeat_delay = -1; + int repeat_rate = -1; + + QStringList args = specification.split(QLatin1Char(':')); + foreach (const QString &arg, args) { + if (arg.startsWith(QLatin1String("repeat-delay="))) + repeat_delay = arg.mid(13).toInt(); + else if (arg.startsWith(QLatin1String("repeat-rate="))) + repeat_rate = arg.mid(12).toInt(); + else if (arg.startsWith(QLatin1String("/dev/"))) + dev = arg; + } + + m_handler = new QWSLinuxInputKeyboardHandler(dev); //This is a hack to avoid copying all the QWS code + + m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDWR, 0); + if (m_fd >= 0) { + if (repeat_delay > 0 && repeat_rate > 0) { + int kbdrep[2] = { repeat_delay, repeat_rate }; + ::ioctl(m_fd, EVIOCSREP, kbdrep); + } + + QSocketNotifier *notifier; + notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); + connect(notifier, SIGNAL(activated(int)), this, SLOT(readKeycode())); + + // play nice in case we are started from a shell (e.g. for debugging) + m_tty_fd = isatty(0) ? 0 : -1; + + if (m_tty_fd >= 0) { + // save tty config for restore. + tcgetattr(m_tty_fd, &m_tty_attr); + + struct ::termios termdata; + tcgetattr(m_tty_fd, &termdata); + + // record the original mode so we can restore it again in the destructor. + ::ioctl(m_tty_fd, KDGKBMODE, &m_orig_kbmode); + + // setting this tranlation mode is even needed in INPUT mode to prevent + // the shell from also interpreting codes, if the process has a tty + // attached: e.g. Ctrl+C wouldn't copy, but kill the application. + ::ioctl(m_tty_fd, KDSKBMODE, K_MEDIUMRAW); + + // set the tty layer to pass-through + termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP); + termdata.c_oflag = 0; + termdata.c_cflag = CREAD | CS8; + termdata.c_lflag = 0; + termdata.c_cc[VTIME]=0; + termdata.c_cc[VMIN]=1; + cfsetispeed(&termdata, 9600); + cfsetospeed(&termdata, 9600); + tcsetattr(m_tty_fd, TCSANOW, &termdata); + } + } else { + qWarning("Cannot open keyboard input device '%s': %s", qPrintable(dev), strerror(errno)); + return; + } +} + +QLinuxInputKeyboardHandler::~QLinuxInputKeyboardHandler() +{ + if (m_tty_fd >= 0) { + ::ioctl(m_tty_fd, KDSKBMODE, m_orig_kbmode); + tcsetattr(m_tty_fd, TCSANOW, &m_tty_attr); + } + if (m_fd >= 0) + QT_CLOSE(m_fd); + delete m_handler; +} + +void QLinuxInputKeyboardHandler::switchLed(int led, bool state) +{ + struct ::input_event led_ie; + ::gettimeofday(&led_ie.time, 0); + led_ie.type = EV_LED; + led_ie.code = led; + led_ie.value = state; + + QT_WRITE(m_fd, &led_ie, sizeof(led_ie)); +} + + + +void QLinuxInputKeyboardHandler::readKeycode() +{ + struct ::input_event buffer[32]; + int n = 0; + + forever { + n = QT_READ(m_fd, reinterpret_cast(buffer) + n, sizeof(buffer) - n); + + if (n == 0) { + qWarning("Got EOF from the input device."); + return; + } else if (n < 0 && (errno != EINTR && errno != EAGAIN)) { + qWarning("Could not read from input device: %s", strerror(errno)); + return; + } else if (n % sizeof(buffer[0]) == 0) { + break; + } + } + + n /= sizeof(buffer[0]); + + for (int i = 0; i < n; ++i) { + if (buffer[i].type != EV_KEY) + continue; + + quint16 code = buffer[i].code; + qint32 value = buffer[i].value; + + if (m_handler->filterInputEvent(code, value)) + continue; + + QWSKeyboardHandler::KeycodeAction ka; + ka = m_handler->processKeycode(code, value != 0, value == 2); + + switch (ka) { + case QWSKeyboardHandler::CapsLockOn: + case QWSKeyboardHandler::CapsLockOff: + switchLed(LED_CAPSL, ka == QWSKeyboardHandler::CapsLockOn); + break; + + case QWSKeyboardHandler::NumLockOn: + case QWSKeyboardHandler::NumLockOff: + switchLed(LED_NUML, ka == QWSKeyboardHandler::NumLockOn); + break; + + case QWSKeyboardHandler::ScrollLockOn: + case QWSKeyboardHandler::ScrollLockOff: + switchLed(LED_SCROLLL, ka == QWSKeyboardHandler::ScrollLockOn); + break; + + default: + // ignore console switching and reboot + break; + } + } +} + + + + + +QT_END_NAMESPACE diff --git a/src/plugins/generic/linuxinput/qlinuxinput.h b/src/plugins/generic/linuxinput/qlinuxinput.h new file mode 100644 index 0000000..5a90c8f --- /dev/null +++ b/src/plugins/generic/linuxinput/qlinuxinput.h @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QLINUXINPUT_H +#define QLINUXINPUT_H + +#include +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QSocketNotifier; + +class QLinuxInputMouseHandler : public QObject +{ + Q_OBJECT +public: + QLinuxInputMouseHandler(const QString &key, const QString &specification); + ~QLinuxInputMouseHandler(); + +private slots: + void readMouseData(); + +private: + QSocketNotifier * m_notify; + int m_fd; + int m_x, m_y; + Qt::MouseButtons m_buttons; +}; + + +class QWSLinuxInputKeyboardHandler; + +class QLinuxInputKeyboardHandler : public QObject +{ + Q_OBJECT +public: + QLinuxInputKeyboardHandler(const QString &key, const QString &specification); + ~QLinuxInputKeyboardHandler(); + + +private: + void switchLed(int, bool); + +private slots: + void readKeycode(); + +private: + QWSLinuxInputKeyboardHandler *m_handler; + int m_fd; + int m_tty_fd; + struct termios m_tty_attr; + int m_orig_kbmode; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QLINUXINPUT_H diff --git a/src/plugins/graphicssystems/graphicssystems.pro b/src/plugins/graphicssystems/graphicssystems.pro index 14e3cfc..12b2c51 100644 --- a/src/plugins/graphicssystems/graphicssystems.pro +++ b/src/plugins/graphicssystems/graphicssystems.pro @@ -1,9 +1,23 @@ TEMPLATE = subdirs SUBDIRS += trace contains(QT_CONFIG, opengl):SUBDIRS += opengl -contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl):SUBDIRS += openvg +contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl) { + embedded_lite { + SUBDIRS += openvglite + } else { + SUBDIRS += openvg + } +} contains(QT_CONFIG, shivavg) { # Only works under X11 at present !win32:!embedded:!mac:SUBDIRS += shivavg } + +embedded_lite: { + SUBDIRS += minimal +} + +embedded_lite:x11 { + SUBDIRS += linuxfb +} \ No newline at end of file diff --git a/src/plugins/graphicssystems/linuxfb/linuxfb.pro b/src/plugins/graphicssystems/linuxfb/linuxfb.pro new file mode 100644 index 0000000..1251d2f --- /dev/null +++ b/src/plugins/graphicssystems/linuxfb/linuxfb.pro @@ -0,0 +1,10 @@ +TARGET = qlinuxfbgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_linuxfb.cpp qwindowsurface_linuxfb.cpp +HEADERS = qgraphicssystem_linuxfb.h qwindowsurface_linuxfb.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/graphicssystems/linuxfb/main.cpp b/src/plugins/graphicssystems/linuxfb/main.cpp new file mode 100644 index 0000000..ef6234d --- /dev/null +++ b/src/plugins/graphicssystems/linuxfb/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_linuxfb.h" + +QT_BEGIN_NAMESPACE + +class QLinuxFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QLinuxFbGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "LinuxFb"; + return list; +} + +QGraphicsSystem* QLinuxFbGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "linuxfb") + return new QLinuxFbGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(linuxfb, QLinuxFbGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp new file mode 100644 index 0000000..cd0ced2 --- /dev/null +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp @@ -0,0 +1,797 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_linuxfb.h" +#include "qwindowsurface_linuxfb.h" +#include +#include // overrides QT_OPEN + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !defined(Q_OS_DARWIN) && !defined(Q_OS_FREEBSD) +#include + +#ifdef __i386__ +#include +#endif +#endif + +QT_BEGIN_NAMESPACE + +class QLinuxFbGraphicsSystemPrivate +{ +public: + QLinuxFbGraphicsSystemPrivate(); + ~QLinuxFbGraphicsSystemPrivate(); + + void openTty(); + void closeTty(); + + int fd; + int startupw; + int startuph; + int startupd; + bool blank; + + bool doGraphicsMode; +#ifdef QT_QWS_DEPTH_GENERIC + bool doGenericColors; +#endif + int ttyfd; + long oldKdMode; + QString ttyDevice; + QString displaySpec; +}; + +QLinuxFbGraphicsSystemPrivate::QLinuxFbGraphicsSystemPrivate() + : fd(-1), blank(true), doGraphicsMode(true), +#ifdef QT_QWS_DEPTH_GENERIC + doGenericColors(false), +#endif + ttyfd(-1), oldKdMode(KD_TEXT) +{ +} + +QLinuxFbGraphicsSystemPrivate::~QLinuxFbGraphicsSystemPrivate() +{ + closeTty(); +} + +void QLinuxFbGraphicsSystemPrivate::openTty() +{ + const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0}; + + if (ttyDevice.isEmpty()) { + for (const char * const *dev = devs; *dev; ++dev) { + ttyfd = QT_OPEN(*dev, O_RDWR); + if (ttyfd != -1) + break; + } + } else { + ttyfd = QT_OPEN(ttyDevice.toAscii().constData(), O_RDWR); + } + + if (ttyfd == -1) + return; + + if (doGraphicsMode) { + ioctl(ttyfd, KDGETMODE, &oldKdMode); + if (oldKdMode != KD_GRAPHICS) { + int ret = ioctl(ttyfd, KDSETMODE, KD_GRAPHICS); + if (ret == -1) + doGraphicsMode = false; + } + } + + // No blankin' screen, no blinkin' cursor!, no cursor! + const char termctl[] = "\033[9;0]\033[?33l\033[?25l\033[?1c"; + QT_WRITE(ttyfd, termctl, sizeof(termctl)); +} + +void QLinuxFbGraphicsSystemPrivate::closeTty() +{ + if (ttyfd == -1) + return; + + if (doGraphicsMode) + ioctl(ttyfd, KDSETMODE, oldKdMode); + + // Blankin' screen, blinkin' cursor! + const char termctl[] = "\033[9;15]\033[?33h\033[?25h\033[?0c"; + QT_WRITE(ttyfd, termctl, sizeof(termctl)); + + QT_CLOSE(ttyfd); + ttyfd = -1; +} + +QLinuxFbGraphicsSystem::QLinuxFbGraphicsSystem() +{ + d_ptr = new QLinuxFbGraphicsSystemPrivate(); + + // XXX + QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); + + if (!connect(displaySpec)) + qFatal("QLinuxFbGraphicsSystem: could not initialize screen"); + + mPrimaryScreen = new QLinuxFbGraphicsSystemScreen(); + mPrimaryScreen->mGeometry = QRect(0, 0, w, h); + mPrimaryScreen->mDepth = d; + mPrimaryScreen->mFormat = screenFormat; + mPrimaryScreen->mPhysicalSize = QSize(physWidth, physHeight); + + // Create a QImage directly on the screen's framebuffer. + // This is the blit target for copying windows to the screen. + mPrimaryScreen->mScreenImage = new QImage(data, w, h, lstep, screenFormat); + + mScreens.append(mPrimaryScreen); +} + +QLinuxFbGraphicsSystem::~QLinuxFbGraphicsSystem() +{ + delete mPrimaryScreen; + delete d_ptr; +} + +bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) +{ + const QStringList args = displaySpec.split(QLatin1Char(':')); + + if (args.contains(QLatin1String("nographicsmodeswitch"))) + d_ptr->doGraphicsMode = false; + +#ifdef QT_QWS_DEPTH_GENERIC + if (args.contains(QLatin1String("genericcolors"))) + d_ptr->doGenericColors = true; +#endif + + QRegExp ttyRegExp(QLatin1String("tty=(.*)")); + if (args.indexOf(ttyRegExp) != -1) + d_ptr->ttyDevice = ttyRegExp.cap(1); + +#if 0 +#if Q_BYTE_ORDER == Q_BIG_ENDIAN +#ifndef QT_QWS_FRAMEBUFFER_LITTLE_ENDIAN + if (args.contains(QLatin1String("littleendian"))) +#endif + QScreen::setFrameBufferLittleEndian(true); +#endif +#endif + + // Check for explicitly specified device + const int len = 8; // "/dev/fbx" + int m = displaySpec.indexOf(QLatin1String("/dev/fb")); + + QString dev; + if (m > 0) + dev = displaySpec.mid(m, len); + else + dev = QLatin1String("/dev/fb0"); + + if (access(dev.toLatin1().constData(), R_OK|W_OK) == 0) + d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDWR); + if (d_ptr->fd == -1) { + if (access(dev.toLatin1().constData(), R_OK) == 0) + d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDONLY); + if (d_ptr->fd == 1) { + qWarning("Error opening framebuffer device %s", qPrintable(dev)); + return false; + } + } + + fb_fix_screeninfo finfo; + fb_var_screeninfo vinfo; + //####################### + // Shut up Valgrind + memset(&vinfo, 0, sizeof(vinfo)); + memset(&finfo, 0, sizeof(finfo)); + //####################### + + /* Get fixed screen information */ + if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { + perror("QLinuxFbGraphicsSystem::connect"); + qWarning("Error reading fixed information"); + return false; + } + + if (finfo.type == FB_TYPE_VGA_PLANES) { + qWarning("VGA16 video mode not supported"); + return false; + } + + /* Get variable screen information */ + if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { + perror("QLinuxFbGraphicsSystem::connect"); + qWarning("Error reading variable information"); + return false; + } + + grayscale = vinfo.grayscale; + d = vinfo.bits_per_pixel; + if (d == 24) { + d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; + if (d <= 0) + d = 24; // reset if color component lengths are not reported + } else if (d == 16) { + d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; + if (d <= 0) + d = 16; + } + lstep = finfo.line_length; + + int xoff = vinfo.xoffset; + int yoff = vinfo.yoffset; + const char* qwssize; + if((qwssize=::getenv("QWS_SIZE")) && sscanf(qwssize,"%dx%d",&w,&h)==2) { + if (d_ptr->fd != -1) { + if ((uint)w > vinfo.xres) w = vinfo.xres; + if ((uint)h > vinfo.yres) h = vinfo.yres; + } + dw=w; + dh=h; + int xxoff, yyoff; + if (sscanf(qwssize, "%*dx%*d+%d+%d", &xxoff, &yyoff) == 2) { + if (xxoff < 0 || xxoff + w > (int)(vinfo.xres)) + xxoff = vinfo.xres - w; + if (yyoff < 0 || yyoff + h > (int)(vinfo.yres)) + yyoff = vinfo.yres - h; + xoff += xxoff; + yoff += yyoff; + } else { + xoff += (vinfo.xres - w)/2; + yoff += (vinfo.yres - h)/2; + } + } else { + dw=w=vinfo.xres; + dh=h=vinfo.yres; + } + + if (w == 0 || h == 0) { + qWarning("QLinuxFbGraphicsSystem::connect(): Unable to find screen geometry, " + "will use 320x240."); + dw = w = 320; + dh = h = 240; + } + + setPixelFormat(vinfo); + + // Handle display physical size spec. + QStringList displayArgs = displaySpec.split(QLatin1Char(':')); + QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)")); + int dimIdxW = displayArgs.indexOf(mmWidthRx); + QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)")); + int dimIdxH = displayArgs.indexOf(mmHeightRx); + if (dimIdxW >= 0) { + mmWidthRx.exactMatch(displayArgs.at(dimIdxW)); + physWidth = mmWidthRx.cap(1).toInt(); + if (dimIdxH < 0) + physHeight = dh*physWidth/dw; + } + if (dimIdxH >= 0) { + mmHeightRx.exactMatch(displayArgs.at(dimIdxH)); + physHeight = mmHeightRx.cap(1).toInt(); + if (dimIdxW < 0) + physWidth = dw*physHeight/dh; + } + if (dimIdxW < 0 && dimIdxH < 0) { + if (vinfo.width != 0 && vinfo.height != 0 + && vinfo.width != UINT_MAX && vinfo.height != UINT_MAX) { + physWidth = vinfo.width; + physHeight = vinfo.height; + } else { + const int dpi = 72; + physWidth = qRound(dw * 25.4 / dpi); + physHeight = qRound(dh * 25.4 / dpi); + } + } + + dataoffset = yoff * lstep + xoff * d / 8; + //qDebug("Using %dx%dx%d screen",w,h,d); + + /* Figure out the size of the screen in bytes */ + size = h * lstep; + + mapsize = finfo.smem_len; + + data = (unsigned char *)-1; + if (d_ptr->fd != -1) + data = (unsigned char *)mmap(0, mapsize, PROT_READ | PROT_WRITE, + MAP_SHARED, d_ptr->fd, 0); + + if ((long)data == -1) { + perror("QLinuxFbGraphicsSystem::connect"); + qWarning("Error: failed to map framebuffer device to memory."); + return false; + } else { + data += dataoffset; + } + +#if 0 + canaccel = useOffscreen(); + if(canaccel) + setupOffScreen(); +#endif + canaccel = false; + + // Now read in palette + if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { + screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; + int loopc; + fb_cmap startcmap; + startcmap.start=0; + startcmap.len=screencols; + startcmap.red=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.green=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.blue=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.transp=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + if (d_ptr->fd == -1 || ioctl(d_ptr->fd, FBIOGETCMAP, &startcmap)) { + perror("QLinuxFbGraphicsSystem::connect"); + qWarning("Error reading palette from framebuffer, using default palette"); + createPalette(startcmap, vinfo, finfo); + } + int bits_used = 0; + for(loopc=0;loopc> 8, + startcmap.green[loopc] >> 8, + startcmap.blue[loopc] >> 8); + bits_used |= startcmap.red[loopc] + | startcmap.green[loopc] + | startcmap.blue[loopc]; + } + // WORKAROUND: Some framebuffer drivers only return 8 bit + // color values, so we need to not bit shift them.. + if ((bits_used & 0x00ff) && !(bits_used & 0xff00)) { + for(loopc=0;loopcopenTty(); + + // Grab current mode so we can reset it + fb_var_screeninfo vinfo; + fb_fix_screeninfo finfo; + //####################### + // Shut up Valgrind + memset(&vinfo, 0, sizeof(vinfo)); + memset(&finfo, 0, sizeof(finfo)); + //####################### + + if (ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { + perror("QLinuxFbScreen::initDevice"); + qFatal("Error reading variable information in card init"); + return false; + } + +#ifdef DEBUG_VINFO + qDebug("Greyscale %d",vinfo.grayscale); + qDebug("Nonstd %d",vinfo.nonstd); + qDebug("Red %d %d %d",vinfo.red.offset,vinfo.red.length, + vinfo.red.msb_right); + qDebug("Green %d %d %d",vinfo.green.offset,vinfo.green.length, + vinfo.green.msb_right); + qDebug("Blue %d %d %d",vinfo.blue.offset,vinfo.blue.length, + vinfo.blue.msb_right); + qDebug("Transparent %d %d %d",vinfo.transp.offset,vinfo.transp.length, + vinfo.transp.msb_right); +#endif + + d_ptr->startupw=vinfo.xres; + d_ptr->startuph=vinfo.yres; + d_ptr->startupd=vinfo.bits_per_pixel; + grayscale = vinfo.grayscale; + + if (ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { + perror("QLinuxFbScreen::initDevice"); + qCritical("Error reading fixed information in card init"); + // It's not an /error/ as such, though definitely a bad sign + // so we return true + return true; + } + +#ifdef __i386__ + // Now init mtrr + if(!::getenv("QWS_NOMTRR")) { + int mfd=QT_OPEN("/proc/mtrr",O_WRONLY,0); + // MTRR entry goes away when file is closed - i.e. + // hopefully when QWS is killed + if(mfd != -1) { + mtrr_sentry sentry; + sentry.base=(unsigned long int)finfo.smem_start; + //qDebug("Physical framebuffer address %p",(void*)finfo.smem_start); + // Size needs to be in 4k chunks, but that's not always + // what we get thanks to graphics card registers. Write combining + // these is Not Good, so we write combine what we can + // (which is not much - 4 megs on an 8 meg card, it seems) + unsigned int size=finfo.smem_len; + size=size >> 22; + size=size << 22; + sentry.size=size; + sentry.type=MTRR_TYPE_WRCOMB; + if(ioctl(mfd,MTRRIOC_ADD_ENTRY,&sentry)==-1) { + //printf("Couldn't add mtrr entry for %lx %lx, %s\n", + //sentry.base,sentry.size,strerror(errno)); + } + } + + // Should we close mfd here? + //QT_CLOSE(mfd); + } +#endif + if ((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4) || (finfo.visual==FB_VISUAL_DIRECTCOLOR)) + { + fb_cmap cmap; + createPalette(cmap, vinfo, finfo); + if (ioctl(d_ptr->fd, FBIOPUTCMAP, &cmap)) { + perror("QLinuxFbScreen::initDevice"); + qWarning("Error writing palette to framebuffer"); + } + free(cmap.red); + free(cmap.green); + free(cmap.blue); + free(cmap.transp); + } + +#if 0 + if (canaccel) { + *entryp=0; + *lowest = mapsize; + insert_entry(*entryp, *lowest, *lowest); // dummy entry to mark start + } + + shared->fifocount = 0; + shared->buffer_offset = 0xffffffff; // 0 would be a sensible offset (screen) + shared->linestep = 0; + shared->cliptop = 0xffffffff; + shared->clipleft = 0xffffffff; + shared->clipright = 0xffffffff; + shared->clipbottom = 0xffffffff; + shared->rop = 0xffffffff; +#endif + +#ifdef QT_QWS_DEPTH_GENERIC + if (pixelFormat() == QImage::Format_Invalid && screencols == 0 + && d_ptr->doGenericColors) + { + qt_set_generic_blit(this, vinfo.bits_per_pixel, + vinfo.red.length, vinfo.green.length, + vinfo.blue.length, vinfo.transp.length, + vinfo.red.offset, vinfo.green.offset, + vinfo.blue.offset, vinfo.transp.offset); + } +#endif + +#if 0 +#ifndef QT_NO_QWS_CURSOR + QScreenCursor::initSoftwareCursor(); +#endif +#endif + blank(false); + + return true; +} + +void QLinuxFbGraphicsSystem::setPixelFormat(struct fb_var_screeninfo info) +{ + const fb_bitfield rgba[4] = { info.red, info.green, + info.blue, info.transp }; + + QImage::Format format = QImage::Format_Invalid; + + switch (d) { + case 32: { + const fb_bitfield argb8888[4] = {{16, 8, 0}, {8, 8, 0}, + {0, 8, 0}, {24, 8, 0}}; + const fb_bitfield abgr8888[4] = {{0, 8, 0}, {8, 8, 0}, + {16, 8, 0}, {24, 8, 0}}; + if (memcmp(rgba, argb8888, 4 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_ARGB32; + } else if (memcmp(rgba, argb8888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB32; + } else if (memcmp(rgba, abgr8888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB32; + pixeltype = BGRPixel; + } + break; + } + case 24: { + const fb_bitfield rgb888[4] = {{16, 8, 0}, {8, 8, 0}, + {0, 8, 0}, {0, 0, 0}}; + const fb_bitfield bgr888[4] = {{0, 8, 0}, {8, 8, 0}, + {16, 8, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB888; + } else if (memcmp(rgba, bgr888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB888; + pixeltype = BGRPixel; + } + break; + } + case 18: { + const fb_bitfield rgb666[4] = {{12, 6, 0}, {6, 6, 0}, + {0, 6, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb666, 3 * sizeof(fb_bitfield)) == 0) + format = QImage::Format_RGB666; + break; + } + case 16: { + const fb_bitfield rgb565[4] = {{11, 5, 0}, {5, 6, 0}, + {0, 5, 0}, {0, 0, 0}}; + const fb_bitfield bgr565[4] = {{0, 5, 0}, {5, 6, 0}, + {11, 5, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb565, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB16; + } else if (memcmp(rgba, bgr565, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB16; + pixeltype = BGRPixel; + } + break; + } + case 15: { + const fb_bitfield rgb1555[4] = {{10, 5, 0}, {5, 5, 0}, + {0, 5, 0}, {15, 1, 0}}; + const fb_bitfield bgr1555[4] = {{0, 5, 0}, {5, 5, 0}, + {10, 5, 0}, {15, 1, 0}}; + if (memcmp(rgba, rgb1555, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB555; + } else if (memcmp(rgba, bgr1555, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB555; + pixeltype = BGRPixel; + } + break; + } + case 12: { + const fb_bitfield rgb444[4] = {{8, 4, 0}, {4, 4, 0}, + {0, 4, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb444, 3 * sizeof(fb_bitfield)) == 0) + format = QImage::Format_RGB444; + break; + } + case 8: + break; + case 1: + format = QImage::Format_Mono; //###: LSB??? + break; + default: + break; + } + + screenFormat = format; +} + +void QLinuxFbGraphicsSystem::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) +{ + if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { + screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; + cmap.start=0; + cmap.len=screencols; + cmap.red=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.green=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.blue=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.transp=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + + if (screencols==16) { + if (finfo.type == FB_TYPE_PACKED_PIXELS) { + // We'll setup a grayscale cmap for 4bpp linear + int val = 0; + for (int idx = 0; idx < 16; ++idx, val += 17) { + cmap.red[idx] = (val<<8)|val; + cmap.green[idx] = (val<<8)|val; + cmap.blue[idx] = (val<<8)|val; + screenclut[idx]=qRgb(val, val, val); + } + } else { + // Default 16 colour palette + // Green is now trolltech green so certain images look nicer + // black d_gray l_gray white red green blue cyan magenta yellow + unsigned char reds[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0xFF, 0xA2, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x82 }; + unsigned char greens[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0xC5, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F }; + unsigned char blues[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0x11, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00 }; + + for (int idx = 0; idx < 16; ++idx) { + cmap.red[idx] = ((reds[idx]) << 8)|reds[idx]; + cmap.green[idx] = ((greens[idx]) << 8)|greens[idx]; + cmap.blue[idx] = ((blues[idx]) << 8)|blues[idx]; + cmap.transp[idx] = 0; + screenclut[idx]=qRgb(reds[idx], greens[idx], blues[idx]); + } + } + } else { + if (grayscale) { + // Build grayscale palette + int i; + for(i=0;iblank == on) + return; + +#if defined(QT_QWS_IPAQ) + if (on) + system("apm -suspend"); +#else + if (d_ptr->fd == -1) + return; +// Some old kernel versions don't have this. These defines should go +// away eventually +#if defined(FBIOBLANK) +#if defined(VESA_POWERDOWN) && defined(VESA_NO_BLANKING) + ioctl(d_ptr->fd, FBIOBLANK, on ? VESA_POWERDOWN : VESA_NO_BLANKING); +#else + ioctl(d_ptr->fd, FBIOBLANK, on ? 1 : 0); +#endif +#endif +#endif + + d_ptr->blank = on; +} + +QPixmapData *QLinuxFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + return new QLinuxFbWindowSurface(mPrimaryScreen, widget); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h new file mode 100644 index 0000000..3446008 --- /dev/null +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h @@ -0,0 +1,130 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_LINUXFB_H +#define QGRAPHICSSYSTEM_LINUXFB_H + +#include + +QT_BEGIN_NAMESPACE + +class QLinuxFbGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QLinuxFbGraphicsSystemScreen() + : mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) {} + ~QLinuxFbGraphicsSystemScreen() { delete mScreenImage; } + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; + QImage *mScreenImage; + +}; + +class QLinuxFbGraphicsSystemPrivate; +struct fb_cmap; +struct fb_var_screeninfo; +struct fb_fix_screeninfo; + +class QLinuxFbGraphicsSystem : public QGraphicsSystem +{ +public: + QLinuxFbGraphicsSystem(); + ~QLinuxFbGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + +private: + QLinuxFbGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; + QLinuxFbGraphicsSystemPrivate *d_ptr; + + enum PixelType { NormalPixel, BGRPixel }; + + QRgb screenclut[256]; + int screencols; + + uchar * data; + + QImage::Format screenFormat; + int w; + int lstep; + int h; + int d; + PixelType pixeltype; + bool grayscale; + + int dw; + int dh; + + int size; // Screen size + int mapsize; // Total mapped memory + + int displayId; + + int physWidth; + int physHeight; + + bool canaccel; + int dataoffset; + int cacheStart; + + bool connect(const QString &displaySpec); + bool initDevice(); + void setPixelFormat(struct fb_var_screeninfo); + void createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo); + void blank(bool on); +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp new file mode 100644 index 0000000..bfc2f83 --- /dev/null +++ b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_linuxfb.h" +#include "qgraphicssystem_linuxfb.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QLinuxFbWindowSurface::QLinuxFbWindowSurface + (QLinuxFbGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen) +{ +} + +QLinuxFbWindowSurface::~QLinuxFbWindowSurface() +{ +} + +QPaintDevice *QLinuxFbWindowSurface::paintDevice() +{ + return &mImage; +} + +void QLinuxFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + QRect rect = geometry(); + QPoint topLeft = rect.topLeft(); + + QPainter painter(mScreen->mScreenImage); + if (region.numRects() == 1) { + QRect wrect = region.boundingRect(); + painter.drawImage(wrect.topLeft() + topLeft, mImage, wrect); + } else { + QVector rects = region.rects(); + foreach (QRect wrect, rects) + painter.drawImage(wrect.topLeft() + topLeft, mImage, wrect); + } +} + +void QLinuxFbWindowSurface::setGeometry(const QRect &r) +{ +#ifdef QT_LITE_FORCE_FULLSCREEN +// any size you like as long as it's full-screen... + QRect rect(mScreen->availableGeometry()); + QApplicationPrivate::handleGeometryChange(this->window(), rect); +#else + QRect rect(r); +#endif + QWindowSurface::setGeometry(rect); + if (mImage.size() != rect.size()) + mImage = QImage(rect.size(), mScreen->format()); +} + +bool QLinuxFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QLinuxFbWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QLinuxFbWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h new file mode 100644 index 0000000..763f362 --- /dev/null +++ b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_LINUXFB_H +#define QWINDOWSURFACE_LINUXFB_H + +#include + +QT_BEGIN_NAMESPACE + +class QLinuxFbGraphicsSystemScreen; + +class QLinuxFbWindowSurface : public QWindowSurface +{ +public: + QLinuxFbWindowSurface + (QLinuxFbGraphicsSystemScreen *screen, QWidget *window); + ~QLinuxFbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + QLinuxFbGraphicsSystemScreen *mScreen; + QImage mImage; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/minimal/main.cpp b/src/plugins/graphicssystems/minimal/main.cpp new file mode 100644 index 0000000..f7d5eef --- /dev/null +++ b/src/plugins/graphicssystems/minimal/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_minimal.h" + +QT_BEGIN_NAMESPACE + +class QMinimalGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QMinimalGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "Minimal"; + return list; +} + +QGraphicsSystem* QMinimalGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "minimal") + return new QMinimalGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(minimal, QMinimalGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimal/minimal.pro b/src/plugins/graphicssystems/minimal/minimal.pro new file mode 100644 index 0000000..11604dd --- /dev/null +++ b/src/plugins/graphicssystems/minimal/minimal.pro @@ -0,0 +1,10 @@ +TARGET = qminimalgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_minimal.cpp qwindowsurface_minimal.cpp +HEADERS = qgraphicssystem_minimal.h qwindowsurface_minimal.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp new file mode 100644 index 0000000..31023fc --- /dev/null +++ b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_minimal.h" +#include "qwindowsurface_minimal.h" +#include + +QT_BEGIN_NAMESPACE + +QMinimalGraphicsSystem::QMinimalGraphicsSystem() +{ + mPrimaryScreen = new QMinimalGraphicsSystemScreen(); + + mPrimaryScreen->mGeometry = QRect(0, 0, 240, 320); + mPrimaryScreen->mDepth = 16; + mPrimaryScreen->mFormat = QImage::Format_RGB16; + mPrimaryScreen->mPhysicalSize = QSize(40, 54); + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QMinimalGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QMinimalGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + return new QMinimalWindowSurface(mPrimaryScreen, widget); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h new file mode 100644 index 0000000..b15f6f6 --- /dev/null +++ b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_MINIMAL_H +#define QGRAPHICSSYSTEM_MINIMAL_H + +#include + +QT_BEGIN_NAMESPACE + +class QMinimalGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QMinimalGraphicsSystemScreen() + : mDepth(16), mFormat(QImage::Format_RGB16) {} + ~QMinimalGraphicsSystemScreen() {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; +}; + +class QMinimalGraphicsSystem : public QGraphicsSystem +{ +public: + QMinimalGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + +private: + QMinimalGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp new file mode 100644 index 0000000..e9d7d69 --- /dev/null +++ b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp @@ -0,0 +1,101 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_minimal.h" +#include "qgraphicssystem_minimal.h" +#include + +QT_BEGIN_NAMESPACE + +QMinimalWindowSurface::QMinimalWindowSurface + (QMinimalGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen) +{ + //qDebug() << "QMinimalWindowSurface::QMinimalWindowSurface:" << (long)this; +} + +QMinimalWindowSurface::~QMinimalWindowSurface() +{ +} + +QPaintDevice *QMinimalWindowSurface::paintDevice() +{ + //qDebug() << "QMinimalWindowSurface::paintDevice"; + return &mImage; +} + +void QMinimalWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + + static int c = 0; + QString filename = QString("output%1.png").arg(c++, 4, 10, QLatin1Char('0')); + qDebug() << "QMinimalWindowSurface::flush() saving contents to" << filename.toLocal8Bit().constData(); + mImage.save(filename); +} + +void QMinimalWindowSurface::setGeometry(const QRect &rect) +{ + //qDebug() << "QMinimalWindowSurface::setGeometry:" << (long)this << rect; + QWindowSurface::setGeometry(rect); + if (mImage.size() != rect.size()) + mImage = QImage(rect.size(), mScreen->format()); +} + +bool QMinimalWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QMinimalWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QMinimalWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h new file mode 100644 index 0000000..89dc860 --- /dev/null +++ b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_MINIMAL_H +#define QWINDOWSURFACE_MINIMAL_H + +#include + +QT_BEGIN_NAMESPACE + +class QMinimalGraphicsSystemScreen; + +class QMinimalWindowSurface : public QWindowSurface +{ +public: + QMinimalWindowSurface + (QMinimalGraphicsSystemScreen *screen, QWidget *window); + ~QMinimalWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + QMinimalGraphicsSystemScreen *mScreen; + QImage mImage; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/openvglite/main.cpp b/src/plugins/graphicssystems/openvglite/main.cpp new file mode 100644 index 0000000..3a73f5c --- /dev/null +++ b/src/plugins/graphicssystems/openvglite/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_vglite.h" + +QT_BEGIN_NAMESPACE + +class QVGGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QVGGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "OpenVG"; + return list; +} + +QGraphicsSystem* QVGGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "openvg") + return new QVGLiteGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(openvg, QVGGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openvglite/openvglite.pro b/src/plugins/graphicssystems/openvglite/openvglite.pro new file mode 100644 index 0000000..9d7860a --- /dev/null +++ b/src/plugins/graphicssystems/openvglite/openvglite.pro @@ -0,0 +1,12 @@ +TARGET = qvglitegraphicssystem +include(../../qpluginbase.pri) + +QT += openvg + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_vglite.cpp qwindowsurface_vglite.cpp +HEADERS = qgraphicssystem_vglite.h qwindowsurface_vglite.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp new file mode 100644 index 0000000..cc5b012 --- /dev/null +++ b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp @@ -0,0 +1,193 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_vglite.h" +#include "qwindowsurface_vglite.h" +#include +#include +#include +#ifdef OPENVG_USBHP_INIT +extern "C" { +#include +}; +#endif + +QT_BEGIN_NAMESPACE + +QVGLiteGraphicsSystem::QVGLiteGraphicsSystem() + : w(0), h(0), d(0), dw(0), dh(0), physWidth(0), physHeight(0), + surface(0), context(0), rootWindow(0), + screenFormat(QImage::Format_RGB16), preservedSwap(false) +{ +#ifdef OPENVG_USBHP_INIT + initLibrary(); +#endif + + // The graphics system is also the screen definition. + mScreens.append(this); + + QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); + QStringList displayArgs = displaySpec.split(QLatin1Char(':')); + + // Initialize EGL and create the global EGL context. + context = qt_vg_create_context(0); + if (!context) { + qFatal("QVGLiteGraphicsSystem: could not initialize EGL"); + return; + } + + // Get the root window handle to use. Default to zero. + QRegExp winidRx(QLatin1String("winid=?(\\d+)")); + int winidIdx = displayArgs.indexOf(winidRx); + int handle = 0; + if (winidIdx >= 0) { + winidRx.exactMatch(displayArgs.at(winidIdx)); + handle = winidRx.cap(1).toInt(); + } + + // Create a full-screen window based on the native handle. + // If the context is premultiplied, the window should be too. + QEglProperties props; +#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT + EGLint surfaceType = 0; + if (context->configAttrib(EGL_SURFACE_TYPE, &surfaceType) && + (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) != 0) + props.setValue(EGL_VG_ALPHA_FORMAT, EGL_VG_ALPHA_FORMAT_PRE); +#endif + rootWindow = eglCreateWindowSurface + (context->display(), context->config(), + (EGLNativeWindowType)handle, props.properties()); + if (rootWindow == EGL_NO_SURFACE) { + delete context; + context = 0; + qFatal("QVGLiteGraphicsSystem: could not create full-screen window"); + return; + } + + // Try to turn on preserved swap behaviour on the root window. + // This will allow us to optimize compositing to focus on just + // the screen region that has changed. Otherwise we must + // re-composite the entire screen every frame. +#if !defined(QVG_NO_PRESERVED_SWAP) + eglGetError(); // Clear error state first. + eglSurfaceAttrib(context->display(), rootWindow, + EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED); + preservedSwap = (eglGetError() == EGL_SUCCESS); +#else + preservedSwap = false; +#endif + + // Fetch the root window properties. + eglQuerySurface(context->display(), rootWindow, EGL_WIDTH, &w); + eglQuerySurface(context->display(), rootWindow, EGL_HEIGHT, &h); + screenFormat = qt_vg_config_to_image_format(context); + switch (screenFormat) { + case QImage::Format_ARGB32_Premultiplied: + case QImage::Format_ARGB32: + case QImage::Format_RGB32: + default: + d = 32; + break; + case QImage::Format_RGB16: + case QImage::Format_ARGB4444_Premultiplied: + d = 16; + break; + } + dw = w; + dh = h; + qDebug("screen size: %dx%dx%d", w, h, d); + + // Handle display physical size spec. From qscreenlinuxfb_qws.cpp. + QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)")); + int dimIdxW = displayArgs.indexOf(mmWidthRx); + QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)")); + int dimIdxH = displayArgs.indexOf(mmHeightRx); + if (dimIdxW >= 0) { + mmWidthRx.exactMatch(displayArgs.at(dimIdxW)); + physWidth = mmWidthRx.cap(1).toInt(); + if (dimIdxH < 0) + physHeight = dh*physWidth/dw; + } + if (dimIdxH >= 0) { + mmHeightRx.exactMatch(displayArgs.at(dimIdxH)); + physHeight = mmHeightRx.cap(1).toInt(); + if (dimIdxW < 0) + physWidth = dw*physHeight/dh; + } + if (dimIdxW < 0 && dimIdxH < 0) { + const int dpi = 72; + physWidth = qRound(dw * 25.4 / dpi); + physHeight = qRound(dh * 25.4 / dpi); + } +} + +QVGLiteGraphicsSystem::~QVGLiteGraphicsSystem() +{ +} + +QPixmapData *QVGLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ +#if !defined(QVGLite_NO_SINGLE_CONTEXT) && !defined(QVGLite_NO_PIXMAP_DATA) + // Pixmaps can use QVGLitePixmapData; bitmaps must use raster. + if (type == QPixmapData::PixmapType) + return new QVGPixmapData(type); + else + return new QRasterPixmapData(type); +#else + return new QRasterPixmapData(type); +#endif +} + +QWindowSurface *QVGLiteGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + if (surface) { + qWarning() << "QVGLiteGraphicsSystem: only one window surface " + "is supported at a time"; + return 0; + } + surface = new QVGLiteWindowSurface + (const_cast(this), widget); + return surface; +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h new file mode 100644 index 0000000..74fc41e --- /dev/null +++ b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_VGLITE_H +#define QGRAPHICSSYSTEM_VGLITE_H + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QVGLiteWindowSurface; + +class QVGLiteGraphicsSystem : public QGraphicsSystem, + public QGraphicsSystemScreen +{ +public: + QVGLiteGraphicsSystem(); + ~QVGLiteGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + QList screens() const { return mScreens; } + + QRect geometry() const { return QRect(0, 0, w, h); } + int depth() const { return d; } + QImage::Format format() const { return screenFormat; } + QSize physicalSize() const { return QSize(physWidth, physHeight); } + +private: + friend class QVGLiteWindowSurface; + + int w; + int h; + int d; + + int dw; + int dh; + + int physWidth; + int physHeight; + + mutable QVGLiteWindowSurface *surface; + QEglContext *context; + EGLSurface rootWindow; + QImage::Format screenFormat; + bool preservedSwap; + + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp new file mode 100644 index 0000000..d250a8e --- /dev/null +++ b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_vglite.h" +#include "qgraphicssystem_vglite.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QVGLiteWindowSurface::QVGLiteWindowSurface + (QVGLiteGraphicsSystem *gs, QWidget *window) + : QWindowSurface(window), graphicsSystem(gs), + isPaintingActive(false), engine(0) +{ +} + +QVGLiteWindowSurface::~QVGLiteWindowSurface() +{ + graphicsSystem->surface = 0; + if (engine) + qt_vg_destroy_paint_engine(engine); +} + +QPaintDevice *QVGLiteWindowSurface::paintDevice() +{ + qt_vg_make_current(graphicsSystem->context, graphicsSystem->rootWindow); + isPaintingActive = true; + // TODO: clear the parts of the back buffer that are not + // covered by the window surface to black. + return this; +} + +void QVGLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + QEglContext *context = graphicsSystem->context; + if (context) { + if (!isPaintingActive) + qt_vg_make_current(context, graphicsSystem->rootWindow); + context->swapBuffers(); + qt_vg_done_current(context); + context->setSurface(EGL_NO_SURFACE); + isPaintingActive = false; + } +} + +void QVGLiteWindowSurface::setGeometry(const QRect &rect) +{ + QWindowSurface::setGeometry(rect); +} + +bool QVGLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QVGLiteWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QVGLiteWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QPaintEngine *QVGLiteWindowSurface::paintEngine() const +{ + if (!engine) + engine = qt_vg_create_paint_engine(); + return engine; +} + +// We need to get access to QWidget::metric() from QVGLiteWindowSurface::metric, +// but it is not a friend of QWidget. To get around this, we create a +// fake QX11PaintEngine class, which is a friend. +class QX11PaintEngine +{ +public: + static int metric(const QWidget *widget, QPaintDevice::PaintDeviceMetric met) + { + return widget->metric(met); + } +}; + +int QVGLiteWindowSurface::metric(PaintDeviceMetric met) const +{ + return QX11PaintEngine::metric(window(), met); +} diff --git a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h new file mode 100644 index 0000000..c1ae02e --- /dev/null +++ b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_VGLITE_H +#define QWINDOWSURFACE_VGLITE_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QVGLiteGraphicsSystem; +class QVGPaintEngine; + +class Q_OPENVG_EXPORT QVGLiteWindowSurface : public QWindowSurface, public QPaintDevice +{ +public: + QVGLiteWindowSurface(QVGLiteGraphicsSystem *gs, QWidget *window); + ~QVGLiteWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + + QPaintEngine *paintEngine() const; + +protected: + int metric(PaintDeviceMetric metric) const; + +private: + QVGLiteGraphicsSystem *graphicsSystem; + bool isPaintingActive; + mutable QVGPaintEngine *engine; +}; + +QT_END_NAMESPACE + +#endif // QWINDOWSURFACE_VGLITE_H diff --git a/src/plugins/graphicssystems/testlite/main.cpp b/src/plugins/graphicssystems/testlite/main.cpp new file mode 100644 index 0000000..6271829 --- /dev/null +++ b/src/plugins/graphicssystems/testlite/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_testlite.h" + +QT_BEGIN_NAMESPACE + +class QTestLiteGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QTestLiteGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "TestLite"; + return list; +} + +QGraphicsSystem* QTestLiteGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "testlite") + return new QTestLiteGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(testlite, QTestLiteGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp new file mode 100644 index 0000000..b1948b9 --- /dev/null +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_testlite.h" +#include "qwindowsurface_testlite.h" +#include +#include + +#include "x11util.h" + +QT_BEGIN_NAMESPACE + +QTestLiteGraphicsSystem::QTestLiteGraphicsSystem() +{ + xd = new MyDisplay; + + mPrimaryScreen = new QTestLiteGraphicsSystemScreen(); + + mPrimaryScreen->mGeometry = QRect + (0, 0, xd->width, xd->height); + mPrimaryScreen->mDepth = 32; + mPrimaryScreen->mFormat = QImage::Format_RGB32; + mPrimaryScreen->mPhysicalSize = + QSize(xd->physicalWidth, xd->physicalHeight); + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QTestLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QTestLiteGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + return new QTestLiteWindowSurface + (const_cast(this), mPrimaryScreen, widget); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h new file mode 100644 index 0000000..cb88ee8 --- /dev/null +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_TESTLITE_H +#define QGRAPHICSSYSTEM_TESTLITE_H + +#include + +QT_BEGIN_NAMESPACE + +class MyDisplay; + +class QTestLiteGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QTestLiteGraphicsSystemScreen() + : mDepth(16), mFormat(QImage::Format_RGB16) {} + ~QTestLiteGraphicsSystemScreen() {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; +}; + +class QTestLiteGraphicsSystem : public QGraphicsSystem +{ +public: + QTestLiteGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + + MyDisplay *xd; + +private: + QTestLiteGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp new file mode 100644 index 0000000..6996809 --- /dev/null +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -0,0 +1,528 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_testlite.h" +#include "qgraphicssystem_testlite.h" + +#include +#include + +#include "x11util.h" + +QT_BEGIN_NAMESPACE + +QTestLiteWindowSurface::QTestLiteWindowSurface + (QTestLiteGraphicsSystem *graphicsSystem, + QTestLiteGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mGraphicsSystem(graphicsSystem), + mScreen(screen), + xw(0) +{ + + + xw = new MyWindow(graphicsSystem->xd, 0,0,300,300); + xw->windowSurface = this; + + qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; + + setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility +} + +QTestLiteWindowSurface::~QTestLiteWindowSurface() +{ + qDebug() << "~QTestLiteWindowSurface" << xw->window; + delete xw; +} + +QPaintDevice *QTestLiteWindowSurface::paintDevice() +{ + return &xw->img; +} + +void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + + // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this; + + xw->paintEvent(); +} + +void QTestLiteWindowSurface::setGeometry(const QRect &rect) +{ + //qDebug() << "QTestLiteWindowSurface::setGeometry:" << rect << xw->window; + QWindowSurface::setGeometry(rect); + + if (xw->img.size() != rect.size()) + xw->img = QImage(rect.size(), mScreen->format()); + + //if unchanged ### +// xw->setSize(rect.width(), rect.height()); + xw->setGeometry(rect.x(), rect.y(), rect.width(), rect.height()); +} + +bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QTestLiteWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Mouse event stuff + + + + +static Qt::MouseButtons translateMouseButtons(int s) +{ + Qt::MouseButtons ret = 0; + if (s & Button1Mask) + ret |= Qt::LeftButton; + if (s & Button2Mask) + ret |= Qt::MidButton; + if (s & Button3Mask) + ret |= Qt::RightButton; + return ret; +} + + +static Qt::KeyboardModifiers translateModifiers(int s) +{ + const uchar qt_alt_mask = Mod1Mask; + const uchar qt_meta_mask = Mod4Mask; + + + Qt::KeyboardModifiers ret = 0; + if (s & ShiftMask) + ret |= Qt::ShiftModifier; + if (s & ControlMask) + ret |= Qt::ControlModifier; + if (s & qt_alt_mask) + ret |= Qt::AltModifier; + if (s & qt_meta_mask) + ret |= Qt::MetaModifier; +#if 0 + if (s & qt_mode_switch_mask) + ret |= Qt::GroupSwitchModifier; +#endif + return ret; +} + +void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) +{ + static QPoint mousePoint; + + XButtonEvent *e = static_cast(ev); + + Qt::MouseButton button = Qt::NoButton; + Qt::MouseButtons buttons = translateMouseButtons(e->state); + Qt::KeyboardModifiers modifiers = translateModifiers(e->state); + if (type != QEvent::MouseMove) { + switch (e->button) { + case Button1: button = Qt::LeftButton; break; + case Button2: button = Qt::MidButton; break; + case Button3: button = Qt::RightButton; break; + default: break; + } + } + + if (type == QEvent::MouseButtonPress && mousePoint != QPoint(e->x_root, e->y_root)) { + //we've missed a mouse move event somewhere (maybe because we + //haven't implemented mouse tracking yet); let's synthesize it. + QMouseEvent me(QEvent::MouseMove, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), + Qt::NoButton, buttons, modifiers); + QApplicationPrivate::handleMouseEvent(window(), me); + } + + buttons ^= button; // X event uses state *before*, Qt uses state *after* + + QMouseEvent me(type, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), button, buttons, modifiers); + QApplicationPrivate::handleMouseEvent(window(), me); + mousePoint = QPoint(e->x_root, e->y_root); +} + +void QTestLiteWindowSurface::handleGeometryChange(int x, int y, int w, int h) +{ + QApplicationPrivate::handleGeometryChange(window(), QRect(x,y,w,h)); +} + + + + + + + + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Key event stuff -- not pretty either +// +// What we want to do is to port Robert's keytable code properly + + + + + + + +// keyboard mapping table +static const unsigned int keyTbl[] = { + + // misc keys + + XK_Escape, Qt::Key_Escape, + XK_Tab, Qt::Key_Tab, + XK_ISO_Left_Tab, Qt::Key_Backtab, + XK_BackSpace, Qt::Key_Backspace, + XK_Return, Qt::Key_Return, + XK_Insert, Qt::Key_Insert, + XK_Delete, Qt::Key_Delete, + XK_Clear, Qt::Key_Delete, + XK_Pause, Qt::Key_Pause, + XK_Print, Qt::Key_Print, + 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq + 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq + + // cursor movement + + XK_Home, Qt::Key_Home, + XK_End, Qt::Key_End, + XK_Left, Qt::Key_Left, + XK_Up, Qt::Key_Up, + XK_Right, Qt::Key_Right, + XK_Down, Qt::Key_Down, + XK_Prior, Qt::Key_PageUp, + XK_Next, Qt::Key_PageDown, + + // modifiers + + XK_Shift_L, Qt::Key_Shift, + XK_Shift_R, Qt::Key_Shift, + XK_Shift_Lock, Qt::Key_Shift, + XK_Control_L, Qt::Key_Control, + XK_Control_R, Qt::Key_Control, + XK_Meta_L, Qt::Key_Meta, + XK_Meta_R, Qt::Key_Meta, + XK_Alt_L, Qt::Key_Alt, + XK_Alt_R, Qt::Key_Alt, + XK_Caps_Lock, Qt::Key_CapsLock, + XK_Num_Lock, Qt::Key_NumLock, + XK_Scroll_Lock, Qt::Key_ScrollLock, + XK_Super_L, Qt::Key_Super_L, + XK_Super_R, Qt::Key_Super_R, + XK_Menu, Qt::Key_Menu, + XK_Hyper_L, Qt::Key_Hyper_L, + XK_Hyper_R, Qt::Key_Hyper_R, + XK_Help, Qt::Key_Help, + 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab + 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) + 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) + + // numeric and function keypad keys + + XK_KP_Space, Qt::Key_Space, + XK_KP_Tab, Qt::Key_Tab, + XK_KP_Enter, Qt::Key_Enter, + //XK_KP_F1, Qt::Key_F1, + //XK_KP_F2, Qt::Key_F2, + //XK_KP_F3, Qt::Key_F3, + //XK_KP_F4, Qt::Key_F4, + XK_KP_Home, Qt::Key_Home, + XK_KP_Left, Qt::Key_Left, + XK_KP_Up, Qt::Key_Up, + XK_KP_Right, Qt::Key_Right, + XK_KP_Down, Qt::Key_Down, + XK_KP_Prior, Qt::Key_PageUp, + XK_KP_Next, Qt::Key_PageDown, + XK_KP_End, Qt::Key_End, + XK_KP_Begin, Qt::Key_Clear, + XK_KP_Insert, Qt::Key_Insert, + XK_KP_Delete, Qt::Key_Delete, + XK_KP_Equal, Qt::Key_Equal, + XK_KP_Multiply, Qt::Key_Asterisk, + XK_KP_Add, Qt::Key_Plus, + XK_KP_Separator, Qt::Key_Comma, + XK_KP_Subtract, Qt::Key_Minus, + XK_KP_Decimal, Qt::Key_Period, + XK_KP_Divide, Qt::Key_Slash, + + // International input method support keys + + // International & multi-key character composition + XK_ISO_Level3_Shift, Qt::Key_AltGr, + XK_Multi_key, Qt::Key_Multi_key, + XK_Codeinput, Qt::Key_Codeinput, + XK_SingleCandidate, Qt::Key_SingleCandidate, + XK_MultipleCandidate, Qt::Key_MultipleCandidate, + XK_PreviousCandidate, Qt::Key_PreviousCandidate, + + // Misc Functions + XK_Mode_switch, Qt::Key_Mode_switch, + XK_script_switch, Qt::Key_Mode_switch, + + // Japanese keyboard support + XK_Kanji, Qt::Key_Kanji, + XK_Muhenkan, Qt::Key_Muhenkan, + //XK_Henkan_Mode, Qt::Key_Henkan_Mode, + XK_Henkan_Mode, Qt::Key_Henkan, + XK_Henkan, Qt::Key_Henkan, + XK_Romaji, Qt::Key_Romaji, + XK_Hiragana, Qt::Key_Hiragana, + XK_Katakana, Qt::Key_Katakana, + XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana, + XK_Zenkaku, Qt::Key_Zenkaku, + XK_Hankaku, Qt::Key_Hankaku, + XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku, + XK_Touroku, Qt::Key_Touroku, + XK_Massyo, Qt::Key_Massyo, + XK_Kana_Lock, Qt::Key_Kana_Lock, + XK_Kana_Shift, Qt::Key_Kana_Shift, + XK_Eisu_Shift, Qt::Key_Eisu_Shift, + XK_Eisu_toggle, Qt::Key_Eisu_toggle, + //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou, + //XK_Zen_Koho, Qt::Key_Zen_Koho, + //XK_Mae_Koho, Qt::Key_Mae_Koho, + XK_Kanji_Bangou, Qt::Key_Codeinput, + XK_Zen_Koho, Qt::Key_MultipleCandidate, + XK_Mae_Koho, Qt::Key_PreviousCandidate, + +#ifdef XK_KOREAN + // Korean keyboard support + XK_Hangul, Qt::Key_Hangul, + XK_Hangul_Start, Qt::Key_Hangul_Start, + XK_Hangul_End, Qt::Key_Hangul_End, + XK_Hangul_Hanja, Qt::Key_Hangul_Hanja, + XK_Hangul_Jamo, Qt::Key_Hangul_Jamo, + XK_Hangul_Romaja, Qt::Key_Hangul_Romaja, + //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput, + XK_Hangul_Codeinput, Qt::Key_Codeinput, + XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja, + XK_Hangul_Banja, Qt::Key_Hangul_Banja, + XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja, + XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja, + //XK_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate, + //XK_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate, + //XK_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate, + XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate, + XK_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate, + XK_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate, + XK_Hangul_Special, Qt::Key_Hangul_Special, + //XK_Hangul_switch, Qt::Key_Hangul_switch, + XK_Hangul_switch, Qt::Key_Mode_switch, +#endif // XK_KOREAN + + // dead keys + XK_dead_grave, Qt::Key_Dead_Grave, + XK_dead_acute, Qt::Key_Dead_Acute, + XK_dead_circumflex, Qt::Key_Dead_Circumflex, + XK_dead_tilde, Qt::Key_Dead_Tilde, + XK_dead_macron, Qt::Key_Dead_Macron, + XK_dead_breve, Qt::Key_Dead_Breve, + XK_dead_abovedot, Qt::Key_Dead_Abovedot, + XK_dead_diaeresis, Qt::Key_Dead_Diaeresis, + XK_dead_abovering, Qt::Key_Dead_Abovering, + XK_dead_doubleacute, Qt::Key_Dead_Doubleacute, + XK_dead_caron, Qt::Key_Dead_Caron, + XK_dead_cedilla, Qt::Key_Dead_Cedilla, + XK_dead_ogonek, Qt::Key_Dead_Ogonek, + XK_dead_iota, Qt::Key_Dead_Iota, + XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound, + XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound, + XK_dead_belowdot, Qt::Key_Dead_Belowdot, + XK_dead_hook, Qt::Key_Dead_Hook, + XK_dead_horn, Qt::Key_Dead_Horn, + +#if 0 + // Special multimedia keys + // currently only tested with MS internet keyboard + + // browsing keys + XF86XK_Back, Qt::Key_Back, + XF86XK_Forward, Qt::Key_Forward, + XF86XK_Stop, Qt::Key_Stop, + XF86XK_Refresh, Qt::Key_Refresh, + XF86XK_Favorites, Qt::Key_Favorites, + XF86XK_AudioMedia, Qt::Key_LaunchMedia, + XF86XK_OpenURL, Qt::Key_OpenUrl, + XF86XK_HomePage, Qt::Key_HomePage, + XF86XK_Search, Qt::Key_Search, + + // media keys + XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, + XF86XK_AudioMute, Qt::Key_VolumeMute, + XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, + XF86XK_AudioPlay, Qt::Key_MediaPlay, + XF86XK_AudioStop, Qt::Key_MediaStop, + XF86XK_AudioPrev, Qt::Key_MediaPrevious, + XF86XK_AudioNext, Qt::Key_MediaNext, + XF86XK_AudioRecord, Qt::Key_MediaRecord, + + // launch keys + XF86XK_Mail, Qt::Key_LaunchMail, + XF86XK_MyComputer, Qt::Key_Launch0, + XF86XK_Calculator, Qt::Key_Launch1, + XF86XK_Standby, Qt::Key_Standby, + + XF86XK_Launch0, Qt::Key_Launch2, + XF86XK_Launch1, Qt::Key_Launch3, + XF86XK_Launch2, Qt::Key_Launch4, + XF86XK_Launch3, Qt::Key_Launch5, + XF86XK_Launch4, Qt::Key_Launch6, + XF86XK_Launch5, Qt::Key_Launch7, + XF86XK_Launch6, Qt::Key_Launch8, + XF86XK_Launch7, Qt::Key_Launch9, + XF86XK_Launch8, Qt::Key_LaunchA, + XF86XK_Launch9, Qt::Key_LaunchB, + XF86XK_LaunchA, Qt::Key_LaunchC, + XF86XK_LaunchB, Qt::Key_LaunchD, + XF86XK_LaunchC, Qt::Key_LaunchE, + XF86XK_LaunchD, Qt::Key_LaunchF, +#endif + +#if 0 + // Qtopia keys + QTOPIAXK_Select, Qt::Key_Select, + QTOPIAXK_Yes, Qt::Key_Yes, + QTOPIAXK_No, Qt::Key_No, + QTOPIAXK_Cancel, Qt::Key_Cancel, + QTOPIAXK_Printer, Qt::Key_Printer, + QTOPIAXK_Execute, Qt::Key_Execute, + QTOPIAXK_Sleep, Qt::Key_Sleep, + QTOPIAXK_Play, Qt::Key_Play, + QTOPIAXK_Zoom, Qt::Key_Zoom, + QTOPIAXK_Context1, Qt::Key_Context1, + QTOPIAXK_Context2, Qt::Key_Context2, + QTOPIAXK_Context3, Qt::Key_Context3, + QTOPIAXK_Context4, Qt::Key_Context4, + QTOPIAXK_Call, Qt::Key_Call, + QTOPIAXK_Hangup, Qt::Key_Hangup, + QTOPIAXK_Flip, Qt::Key_Flip, +#endif + 0, 0 +}; + + +static int lookupCode(unsigned int xkeycode) +{ + const unsigned int *p = keyTbl; + while (*p) { + if (*p == xkeycode) + return *++p; + p += 2; + } + + return 0; +} + + +void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) +{ + XKeyEvent *e = static_cast(ev); + + KeySym keySym; + QByteArray chars; + chars.resize(513); + + int count = XLookupString(e, chars.data(), chars.size(), &keySym, 0); + +// qDebug() << "QTLWS::handleKeyEvent" << count << hex << "XKeysym:" << keySym; +// if (count) +// qDebug() << hex << int(chars[0]) << "String:" << chars; + + Qt::KeyboardModifiers modifiers = translateModifiers(e->state); + + int qtcode = lookupCode(keySym); +// qDebug() << "lookup: " << hex << keySym << qtcode; + + if (qtcode) { + QKeyEvent keyEvent(type, qtcode, modifiers); + QApplicationPrivate::handleKeyEvent(window(), &keyEvent); + } else if (chars[0]) { + int qtcode = chars.toUpper()[0]; //Not exactly right... + QKeyEvent keyEvent(type, qtcode, modifiers, QString::fromLatin1(chars)); + QApplicationPrivate::handleKeyEvent(window(), &keyEvent); + } else { + qWarning() << "unknown X keycode" << hex << e->keycode << keySym; + } +} + + + +Qt::WindowFlags QTestLiteWindowSurface::setWindowFlags(Qt::WindowFlags flags) +{ + Q_ASSERT(flags & Qt::Window); + + window_flags = flags; + + xw->setWindowFlags(flags); + + return window_flags; + +} + +Qt::WindowFlags QTestLiteWindowSurface::windowFlags() const +{ + return window_flags; +} + +void QTestLiteWindowSurface::setVisible(bool visible) +{ + //qDebug() << "QTestLiteWindowSurface::setVisible" << visible << xw->window; + xw->setVisible(visible); +} + + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h new file mode 100644 index 0000000..33b55e9 --- /dev/null +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_TESTLITE_H +#define QWINDOWSURFACE_TESTLITE_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class MyWindow; +class QTestLiteGraphicsSystem; +class QTestLiteGraphicsSystemScreen; + +class QTestLiteWindowSurface : public QWindowSurface +{ +public: + QTestLiteWindowSurface + (QTestLiteGraphicsSystem *graphicsSystem, + QTestLiteGraphicsSystemScreen *screen, QWidget *window); + ~QTestLiteWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + + void handleMouseEvent(QEvent::Type, void *); //forwarding X types is apparently impossible :( + void handleKeyEvent(QEvent::Type, void *); + void handleGeometryChange(int x, int y, int w, int h); + + + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + Qt::WindowFlags windowFlags() const; + void setVisible(bool visible); + +private: + QTestLiteGraphicsSystem *mGraphicsSystem; + QTestLiteGraphicsSystemScreen *mScreen; + Qt::WindowFlags window_flags; + MyWindow *xw; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/testlite/testlite.pro b/src/plugins/graphicssystems/testlite/testlite.pro new file mode 100644 index 0000000..af8a437 --- /dev/null +++ b/src/plugins/graphicssystems/testlite/testlite.pro @@ -0,0 +1,17 @@ +TARGET = qtestlitegraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_testlite.cpp qwindowsurface_testlite.cpp +HEADERS = qgraphicssystem_testlite.h qwindowsurface_testlite.h + + +HEADERS += x11util.h +SOURCES += x11util.cpp + +LIBS += -lX11 + + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp new file mode 100644 index 0000000..f77356a --- /dev/null +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -0,0 +1,684 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include +#include + +#include "x11util.h" +#include "qwindowsurface_testlite.h" + +#include +#include + + +#include + + + +//### remove stuff we don't want from qt_x11_p.h +#undef ATOM +#undef X11 + + + + + +static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); +static bool seen_badwindow; + + +//### copied from qapplication_x11.cpp + +static int qt_x_errhandler(Display *dpy, XErrorEvent *err) +{ + +qDebug() << "qt_x_errhandler" << err->error_code; + + switch (err->error_code) { + case BadAtom: +#if 0 + if (err->request_code == 20 /* X_GetProperty */ + && (err->resourceid == XA_RESOURCE_MANAGER + || err->resourceid == XA_RGB_DEFAULT_MAP + || err->resourceid == ATOM(_NET_SUPPORTED) + || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) + || err->resourceid == ATOM(KDE_FULL_SESSION) + || err->resourceid == ATOM(KWIN_RUNNING) + || err->resourceid == ATOM(XdndProxy) + || err->resourceid == ATOM(XdndAware)) + + + ) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } +#endif + qDebug() << "BadAtom"; + break; + + case BadWindow: + if (err->request_code == 2 /* X_ChangeWindowAttributes */ + || err->request_code == 38 /* X_QueryPointer */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } + } + seen_badwindow = true; + if (err->request_code == 25 /* X_SendEvent */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } +#if 0 + if (X11->xdndHandleBadwindow()) { + qDebug("xdndHandleBadwindow returned true"); + return 0; + } +#endif + } +#if 0 + if (X11->ignore_badwindow) + return 0; +#endif + break; + + case BadMatch: + if (err->request_code == 42 /* X_SetInputFocus */) + return 0; + break; + + default: +#if 0 //!defined(QT_NO_XINPUT) + if (err->request_code == X11->xinput_major + && err->error_code == (X11->xinput_errorbase + XI_BadDevice) + && err->minor_code == 3 /* X_OpenDevice */) { + return 0; + } +#endif + break; + } + + char errstr[256]; + XGetErrorText( dpy, err->error_code, errstr, 256 ); + char buffer[256]; + char request_str[256]; + qsnprintf(buffer, 256, "%d", err->request_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); + if (err->request_code < 128) { + // X error for a normal protocol request + qWarning( "X Error: %s %d\n" + " Major opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + request_str, + err->resourceid ); + } else { + // X error for an extension request + const char *extensionName = 0; +#if 0 + if (err->request_code == X11->xrender_major) + extensionName = "RENDER"; + else if (err->request_code == X11->xrandr_major) + extensionName = "RANDR"; + else if (err->request_code == X11->xinput_major) + extensionName = "XInputExtension"; + else if (err->request_code == X11->mitshm_major) + extensionName = "MIT-SHM"; +#endif + char minor_str[256]; + if (extensionName) { + qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); + } else { + extensionName = "Uknown extension"; + qsnprintf(minor_str, 256, "Unknown request"); + } + qWarning( "X Error: %s %d\n" + " Extension: %d (%s)\n" + " Minor opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + extensionName, + err->minor_code, + minor_str, + err->resourceid ); + } + + // ### we really should distinguish between severe, non-severe and + // ### application specific errors + + return 0; +} + + + + + + + + + +bool MyDisplay::handleEvent(XEvent *xe) +{ + //qDebug() << "handleEvent" << xe->xany.type << xe->xany.window; + int quit = false; + MyWindow *xw = 0; + foreach (MyWindow *w, windowList) { + if (w->window == xe->xany.window) { + xw = w; + break; + } + } + if (!xw) { + qWarning() << "Unknown window" << xe->xany.window << "received event" << hex << xe->type; + return quit; + } + + switch (xe->type) { + case Expose: + if (xw) + if (xe->xexpose.count == 0) + xw->paintEvent(); + break; + case ConfigureNotify: + if (xw) + xw->resizeEvent(&xe->xconfigure); + break; +#if 1 + + case ButtonPress: + xw->mousePressEvent(&xe->xbutton); + break; + + case ButtonRelease: + xw->mouseReleaseEvent(&xe->xbutton); + break; + + case MotionNotify: + xw->mouseMoveEvent(&xe->xbutton); + break; + + case XKeyPress: + xw->keyPressEvent(&xe->xkey); + break; + + case XKeyRelease: + xw->keyReleaseEvent(&xe->xkey); + break; +#endif + + default: + qDebug() << "Other X event" << hex << xe->type; + break; + } + return quit; +}; + + +MyDisplay::MyDisplay() +{ + char *display_name = getenv("DISPLAY"); + display = XOpenDisplay(display_name); + if (!display) { + fprintf(stderr, "Cannot connect to X server: %s\n", + display_name); + exit(1); + } + + original_x_errhandler = XSetErrorHandler(qt_x_errhandler); + + if (qgetenv("DO_X_SYNCHRONIZE").toInt()) + XSynchronize(display, true); + + + screen = DefaultScreen(display); + width = DisplayWidth(display, screen); + height = DisplayHeight(display, screen); + physicalWidth = DisplayWidthMM(display, screen); + physicalHeight = DisplayHeightMM(display, screen); + + int xSocketNumber = XConnectionNumber(display); + qDebug() << "X socket:"<< xSocketNumber; + + QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); + connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); +} + + +MyDisplay::~MyDisplay() +{ + XCloseDisplay(display); +} + + +void MyDisplay::eventDispatcher() +{ +// qDebug() << "eventDispatcher"; + + + ulong marker = XNextRequest(display); +// int i = 0; + while (XPending(display)) { + XEvent event; + XNextEvent(display, &event); + /* done = */ + handleEvent(&event); + + if (event.xany.serial >= marker) { + qDebug() << "potential livelock averted"; +#if 0 + if (XEventsQueued(display, QueuedAfterFlush)) { + qDebug() << " with events queued"; + QTimer::singleShot(0, this, SLOT(eventDispatcher())); + } +#endif + break; + } + } +} + + +MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) +{ + xd = display; + + xd->windowList.append(this); + + qDebug() << "MyWindow::MyWindow"; + + window = XCreateSimpleWindow(xd->display, xd->rootWindow(), + x, y, w, h, 0 /*border_width*/, + xd->blackPixel(), xd->whitePixel()); + + width = -1; + height = -1; + xpos = -1; + ypos = -1; + + XSetWindowBackgroundPixmap(xd->display, window, XNone); + + XSelectInput(xd->display, window, ExposureMask | KeyPressMask | KeyReleaseMask | + ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | StructureNotifyMask); + + gc = createGC(); +} + +MyWindow::~MyWindow() +{ + XFreeGC(xd->display, gc); + XDestroyWindow(xd->display, window); + + xd->windowList.removeAll(this); +} + +GC MyWindow::createGC() +{ + GC gc; + + gc = XCreateGC(xd->display, window, 0, 0); + if (gc < 0) { + qWarning("MyWindow::createGC() could not create GC"); + } + return gc; +} + + + +void MyWindow::paintEvent() +{ + Visual *visual = DefaultVisual(xd->display, xd->screen); + + if (!img.isNull()) { + QImage image = img.convertToFormat(QImage::Format_RGB32); + XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, + 0, (char *) image.scanLine(0), image.width(), image.height(), + 32, image.bytesPerLine()); + + int x = 0; + int y = 0; + + /*int r =*/ XPutImage(xd->display, window, gc, xi, 0, 0, x, y, image.width(), image.height()); + + xi->data = 0; // QImage owns these bits + XDestroyImage(xi); + } +} + +void MyWindow::resizeEvent(XConfigureEvent *e) +{ + + if ((e->width != width || e->height != height) && e->x == 0 && e->y == 0) { + //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; + } else { + //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; + xpos = e->x; + ypos = e->y; + } + width = e->width; + height = e->height; + + windowSurface->handleGeometryChange(xpos, ypos, width, height); +} + + +void MyWindow::setSize(int w, int h) +{ + XResizeWindow(xd->display, window, w, h); +} + +void MyWindow::setGeometry(int x, int y, int w, int h) +{ + XMoveResizeWindow(xd->display, window, x, y, w, h); +} + + +void MyWindow::mousePressEvent(XButtonEvent *e) +{ + windowSurface->handleMouseEvent(QEvent::MouseButtonPress, e); +} + +void MyWindow::mouseReleaseEvent(XButtonEvent *e) +{ + windowSurface->handleMouseEvent(QEvent::MouseButtonRelease, e); +} + +void MyWindow::mouseMoveEvent(XButtonEvent *e) +{ + windowSurface->handleMouseEvent(QEvent::MouseMove, e); +} + +#ifdef KeyPress +#undef KeyPress +#endif + +void MyWindow::keyPressEvent(XKeyEvent *e) +{ + windowSurface->handleKeyEvent(QEvent::KeyPress, e); +} + +#ifdef KeyRelease +#undef KeyRelease +#endif + +void MyWindow::keyReleaseEvent(XKeyEvent *e) +{ + windowSurface->handleKeyEvent(QEvent::KeyRelease, e); +} + + +// WindowFlag stuff, lots of copied code from qwidget_x11.cpp... + +//We're hacking here... + + +// MWM support +struct QtMWMHints { + ulong flags, functions, decorations; + long input_mode; + ulong status; +}; + +enum { + MWM_HINTS_FUNCTIONS = (1L << 0), + + MWM_FUNC_ALL = (1L << 0), + MWM_FUNC_RESIZE = (1L << 1), + MWM_FUNC_MOVE = (1L << 2), + MWM_FUNC_MINIMIZE = (1L << 3), + MWM_FUNC_MAXIMIZE = (1L << 4), + MWM_FUNC_CLOSE = (1L << 5), + + MWM_HINTS_DECORATIONS = (1L << 1), + + MWM_DECOR_ALL = (1L << 0), + MWM_DECOR_BORDER = (1L << 1), + MWM_DECOR_RESIZEH = (1L << 2), + MWM_DECOR_TITLE = (1L << 3), + MWM_DECOR_MENU = (1L << 4), + MWM_DECOR_MINIMIZE = (1L << 5), + MWM_DECOR_MAXIMIZE = (1L << 6), + + MWM_HINTS_INPUT_MODE = (1L << 2), + + MWM_INPUT_MODELESS = 0L, + MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, + MWM_INPUT_FULL_APPLICATION_MODAL = 3L +}; + +static Atom mwm_hint_atom = XNone; + +static QtMWMHints GetMWMHints(Display *display, Window window) +{ + QtMWMHints mwmhints; + + Atom type; + int format; + ulong nitems, bytesLeft; + uchar *data = 0; + if ((XGetWindowProperty(display, window, mwm_hint_atom, 0, 5, false, + mwm_hint_atom, &type, &format, &nitems, &bytesLeft, + &data) == Success) + && (type == mwm_hint_atom + && format == 32 + && nitems >= 5)) { + mwmhints = *(reinterpret_cast(data)); + } else { + mwmhints.flags = 0L; + mwmhints.functions = MWM_FUNC_ALL; + mwmhints.decorations = MWM_DECOR_ALL; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + } + + if (data) + XFree(data); + + return mwmhints; +} + +static void SetMWMHints(Display *display, Window window, const QtMWMHints &mwmhints) +{ + if (mwmhints.flags != 0l) { + XChangeProperty(display, window, mwm_hint_atom, mwm_hint_atom, 32, + PropModeReplace, (unsigned char *) &mwmhints, 5); + } else { + XDeleteProperty(display, window, mwm_hint_atom); + } +} + +// Returns true if we should set WM_TRANSIENT_FOR on \a w +static inline bool isTransient(const QWidget *w) +{ + return ((w->windowType() == Qt::Dialog + || w->windowType() == Qt::Sheet + || w->windowType() == Qt::Tool + || w->windowType() == Qt::SplashScreen + || w->windowType() == Qt::ToolTip + || w->windowType() == Qt::Drawer + || w->windowType() == Qt::Popup) + && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); +} + + + +Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) +{ + + if (mwm_hint_atom == XNone) { + mwm_hint_atom = XInternAtom(xd->display, "_MOTIF_WM_HINTS\0", False); + } + + qDebug() << "MyWindow::setWindowFlags" << hex << mwm_hint_atom << "flags" << flags; + + Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); + + if (type == Qt::ToolTip) + flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; + if (type == Qt::Popup) + flags |= Qt::X11BypassWindowManagerHint; + + bool topLevel = (flags & Qt::Window); + bool popup = (type == Qt::Popup); + bool dialog = (type == Qt::Dialog + || type == Qt::Sheet); + bool desktop = (type == Qt::Desktop); + bool tool = (type == Qt::Tool || type == Qt::SplashScreen + || type == Qt::ToolTip || type == Qt::Drawer); + + + XSetWindowAttributes wsa; + + QtMWMHints mwmhints; + mwmhints.flags = 0L; + mwmhints.functions = 0L; + mwmhints.decorations = 0; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + + + ulong wsa_mask = 0; + if (type != Qt::SplashScreen) { // && customize) { + mwmhints.flags |= MWM_HINTS_DECORATIONS; + + bool customize = flags & Qt::CustomizeWindowHint; + if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { + mwmhints.decorations |= MWM_DECOR_BORDER; + mwmhints.decorations |= MWM_DECOR_RESIZEH; + + if (flags & Qt::WindowTitleHint) + mwmhints.decorations |= MWM_DECOR_TITLE; + + if (flags & Qt::WindowSystemMenuHint) + mwmhints.decorations |= MWM_DECOR_MENU; + + if (flags & Qt::WindowMinimizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MINIMIZE; + mwmhints.functions |= MWM_FUNC_MINIMIZE; + } + + if (flags & Qt::WindowMaximizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MAXIMIZE; + mwmhints.functions |= MWM_FUNC_MAXIMIZE; + } + + if (flags & Qt::WindowCloseButtonHint) + mwmhints.functions |= MWM_FUNC_CLOSE; + } + } else { + // if type == Qt::SplashScreen + mwmhints.decorations = MWM_DECOR_ALL; + } + + if (tool) { + wsa.save_under = True; + wsa_mask |= CWSaveUnder; + } + + if (flags & Qt::X11BypassWindowManagerHint) { + wsa.override_redirect = True; + wsa_mask |= CWOverrideRedirect; + } +#if 0 + if (wsa_mask && initializeWindow) { + Q_ASSERT(id); + XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); + } +#endif + if (mwmhints.functions != 0) { + mwmhints.flags |= MWM_HINTS_FUNCTIONS; + mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + } else { + mwmhints.functions = MWM_FUNC_ALL; + } + + if (!(flags & Qt::FramelessWindowHint) + && flags & Qt::CustomizeWindowHint + && flags & Qt::WindowTitleHint + && !(flags & + (Qt::WindowMinimizeButtonHint + | Qt::WindowMaximizeButtonHint + | Qt::WindowCloseButtonHint))) { + // a special case - only the titlebar without any button + mwmhints.flags = MWM_HINTS_FUNCTIONS; + mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + mwmhints.decorations = 0; + } + + SetMWMHints(xd->display, window, mwmhints); + +//##### only if initializeWindow??? + + if (popup) { // popup widget + qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; + // set EWMH window types + // setNetWmWindowTypes(); + + wsa.override_redirect = True; + wsa.save_under = True; + XChangeWindowAttributes(xd->display, window, CWOverrideRedirect | CWSaveUnder, + &wsa); + } else { + + qDebug() << "Doing XChangeWindowAttributes for non-popup"; + + } + + return flags; +} + +void MyWindow::setVisible(bool visible) +{ +// qDebug() << "MyWindow::setVisible" << visible << hex << window; + if (visible) + XMapWindow(xd->display, window); + else + XUnmapWindow(xd->display, window); +} diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h new file mode 100644 index 0000000..3d813c0 --- /dev/null +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -0,0 +1,126 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYX11UTIL_H +#define MYX11UTIL_H + +#include +#include + +#include + +#include +#include + + +class MyWindow; + +class MyDisplay : public QObject +{ + Q_OBJECT; +public: + MyDisplay(); + ~MyDisplay(); + + Window rootWindow() { return RootWindow(display, screen); } + unsigned long blackPixel() { return BlackPixel(display, screen); } + unsigned long whitePixel() { return WhitePixel(display, screen); } + + bool handleEvent(XEvent *xe); + +public slots: + void eventDispatcher(); + +public: //### + Display * display; + int screen; + int width, height; + int physicalWidth; + int physicalHeight; + + QList windowList; +}; + +class QTestLiteWindowSurface; //### abstract callback interface, anyone? + +class MyWindow : public QObject +{ + Q_OBJECT; +public: + MyWindow(MyDisplay *xd, int x, int y, int w, int h); + ~MyWindow(); + + + void mousePressEvent(XButtonEvent*); + void mouseReleaseEvent(XButtonEvent*); + void mouseMoveEvent(XButtonEvent*); + + void keyPressEvent(XKeyEvent*); + void keyReleaseEvent(XKeyEvent*); + + + void paintEvent(); + void resizeEvent(XConfigureEvent *configure_event); + void setSize(int w, int h); + void setGeometry(int x, int y, int w, int h); + + GC createGC(); + + Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); + void setVisible(bool visible); + +public: //### + + int xpos, ypos; + int width, height; + QImage img; + Window window; + MyDisplay *xd; + GC gc; + + QTestLiteWindowSurface *windowSurface; +}; + + + + + +#endif // MYX11UTIL_H diff --git a/src/plugins/graphicssystems/vnc/main.cpp b/src/plugins/graphicssystems/vnc/main.cpp new file mode 100644 index 0000000..7deb91a --- /dev/null +++ b/src/plugins/graphicssystems/vnc/main.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_vnc.h" +#include + +QT_BEGIN_NAMESPACE + +class QVNCGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QVNCGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "VNC"; + return list; +} + +QGraphicsSystem* QVNCGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "vnc") + return new QVNCGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(vnc, QVNCGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp new file mode 100644 index 0000000..4890e09 --- /dev/null +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -0,0 +1,109 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_vnc.h" +#include "qwindowsurface_vnc.h" +#include +#include + +#include + + + + +QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() + : mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) +{ + mGeometry = QRect(0,0,800, 600); + + mDepth = 32; + mFormat = QImage::Format_RGB32; + mPhysicalSize = (mGeometry.size()*254)/720; + + + mScreenImage = new QImage(mGeometry.size(), mFormat); + d_ptr = new QVNCGraphicsSystemScreenPrivate(this); +} + + +QVNCGraphicsSystemScreen::~QVNCGraphicsSystemScreen() +{ + delete mScreenImage; +} + +QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() +{ + return d_ptr->dirty; +} + + +void QVNCGraphicsSystemScreen::setDirty(const QRect &rect) +{ + d_ptr->setDirty(rect); +} + + +QVNCGraphicsSystem::QVNCGraphicsSystem() +{ +//////// xd = new MyDisplay; + + mPrimaryScreen = new QVNCGraphicsSystemScreen(); + + + int dw = mPrimaryScreen->geometry().width(); + int dh = mPrimaryScreen->geometry().height(); + + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QVNCGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + return new QVNCWindowSurface + (const_cast(this), mPrimaryScreen, widget); +} diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h new file mode 100644 index 0000000..d9b4375 --- /dev/null +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h @@ -0,0 +1,105 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_VNC_H +#define QGRAPHICSSYSTEM_VNC_H + +#include + +QT_BEGIN_NAMESPACE + +class QVNCServer; +class QVNCDirtyMap; + + +class QVNCGraphicsSystemScreenPrivate; + +class QVNCGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QVNCGraphicsSystemScreen(); + ~QVNCGraphicsSystemScreen(); + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + int linestep() const { return mScreenImage ? mScreenImage->bytesPerLine() : 0; } + uchar *base() const { return mScreenImage ? mScreenImage->bits() : 0; } + QVNCDirtyMap *dirtyMap(); + + void setDirty(const QRect &rect); + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; + QImage *mScreenImage; + QVNCServer *server; + + QVNCGraphicsSystemScreenPrivate *d_ptr; +}; + +class QVNCGraphicsSystemPrivate; + + +class QVNCGraphicsSystem : public QGraphicsSystem +{ +public: + QVNCGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + +private: + QVNCGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + + + +QT_END_NAMESPACE + +#endif //QGRAPHICSSYSTEM_VNC_H + diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp new file mode 100644 index 0000000..c3677a0 --- /dev/null +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -0,0 +1,1912 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qvncserver.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include + + +#define QT_QWS_VNC_DEBUG +#define QT_NO_QWS_CURSOR //### + + +QT_BEGIN_NAMESPACE + + + +//copied from qscreen_qws.h +#ifndef QT_QWS_DEPTH16_RGB +#define QT_QWS_DEPTH16_RGB 565 +#endif +static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100); +static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10); +static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10); +static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits); +static const int qt_green_shift = qt_bbits-(8-qt_gbits); +static const int qt_neg_blue_shift = 8-qt_bbits; +static const int qt_blue_mask = (1<> qt_red_shift | r >> qt_red_rounding_shift; + const int tg = g >> qt_green_shift | g >> qt_green_rounding_shift; + const int tb = b << qt_neg_blue_shift | b >> qt_blue_rounding_shift; + + return qRgb(tr,tg,tb); +} + + + +//=========================================================================== + +static const struct { + int keysym; + int keycode; +} keyMap[] = { + { 0xff08, Qt::Key_Backspace }, + { 0xff09, Qt::Key_Tab }, + { 0xff0d, Qt::Key_Return }, + { 0xff1b, Qt::Key_Escape }, + { 0xff63, Qt::Key_Insert }, + { 0xffff, Qt::Key_Delete }, + { 0xff50, Qt::Key_Home }, + { 0xff57, Qt::Key_End }, + { 0xff55, Qt::Key_PageUp }, + { 0xff56, Qt::Key_PageDown }, + { 0xff51, Qt::Key_Left }, + { 0xff52, Qt::Key_Up }, + { 0xff53, Qt::Key_Right }, + { 0xff54, Qt::Key_Down }, + { 0xffbe, Qt::Key_F1 }, + { 0xffbf, Qt::Key_F2 }, + { 0xffc0, Qt::Key_F3 }, + { 0xffc1, Qt::Key_F4 }, + { 0xffc2, Qt::Key_F5 }, + { 0xffc3, Qt::Key_F6 }, + { 0xffc4, Qt::Key_F7 }, + { 0xffc5, Qt::Key_F8 }, + { 0xffc6, Qt::Key_F9 }, + { 0xffc7, Qt::Key_F10 }, + { 0xffc8, Qt::Key_F11 }, + { 0xffc9, Qt::Key_F12 }, + { 0xffe1, Qt::Key_Shift }, + { 0xffe2, Qt::Key_Shift }, + { 0xffe3, Qt::Key_Control }, + { 0xffe4, Qt::Key_Control }, + { 0xffe7, Qt::Key_Meta }, + { 0xffe8, Qt::Key_Meta }, + { 0xffe9, Qt::Key_Alt }, + { 0xffea, Qt::Key_Alt }, + { 0, 0 } +}; + +void QRfbRect::read(QTcpSocket *s) +{ + quint16 buf[4]; + s->read((char*)buf, 8); + x = ntohs(buf[0]); + y = ntohs(buf[1]); + w = ntohs(buf[2]); + h = ntohs(buf[3]); +} + +void QRfbRect::write(QTcpSocket *s) const +{ + quint16 buf[4]; + buf[0] = htons(x); + buf[1] = htons(y); + buf[2] = htons(w); + buf[3] = htons(h); + s->write((char*)buf, 8); +} + +void QRfbPixelFormat::read(QTcpSocket *s) +{ + char buf[16]; + s->read(buf, 16); + bitsPerPixel = buf[0]; + depth = buf[1]; + bigEndian = buf[2]; + trueColor = buf[3]; + + quint16 a = ntohs(*(quint16 *)(buf + 4)); + redBits = 0; + while (a) { a >>= 1; redBits++; } + + a = ntohs(*(quint16 *)(buf + 6)); + greenBits = 0; + while (a) { a >>= 1; greenBits++; } + + a = ntohs(*(quint16 *)(buf + 8)); + blueBits = 0; + while (a) { a >>= 1; blueBits++; } + + redShift = buf[10]; + greenShift = buf[11]; + blueShift = buf[12]; +} + +void QRfbPixelFormat::write(QTcpSocket *s) +{ + char buf[16]; + buf[0] = bitsPerPixel; + buf[1] = depth; + buf[2] = bigEndian; + buf[3] = trueColor; + + quint16 a = 0; + for (int i = 0; i < redBits; i++) a = (a << 1) | 1; + *(quint16 *)(buf + 4) = htons(a); + + a = 0; + for (int i = 0; i < greenBits; i++) a = (a << 1) | 1; + *(quint16 *)(buf + 6) = htons(a); + + a = 0; + for (int i = 0; i < blueBits; i++) a = (a << 1) | 1; + *(quint16 *)(buf + 8) = htons(a); + + buf[10] = redShift; + buf[11] = greenShift; + buf[12] = blueShift; + s->write(buf, 16); +} + + +void QRfbServerInit::setName(const char *n) +{ + delete[] name; + name = new char [strlen(n) + 1]; + strcpy(name, n); +} + +void QRfbServerInit::read(QTcpSocket *s) +{ + s->read((char *)&width, 2); + width = ntohs(width); + s->read((char *)&height, 2); + height = ntohs(height); + format.read(s); + + quint32 len; + s->read((char *)&len, 4); + len = ntohl(len); + + name = new char [len + 1]; + s->read(name, len); + name[len] = '\0'; +} + +void QRfbServerInit::write(QTcpSocket *s) +{ + quint16 t = htons(width); + s->write((char *)&t, 2); + t = htons(height); + s->write((char *)&t, 2); + format.write(s); + quint32 len = strlen(name); + len = htonl(len); + s->write((char *)&len, 4); + s->write(name, strlen(name)); +} + +bool QRfbSetEncodings::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 3) + return false; + + char tmp; + s->read(&tmp, 1); // padding + s->read((char *)&count, 2); + count = ntohs(count); + + return true; +} + +bool QRfbFrameBufferUpdateRequest::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 9) + return false; + + s->read(&incremental, 1); + rect.read(s); + + return true; +} + +bool QRfbKeyEvent::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 7) + return false; + + s->read(&down, 1); + quint16 tmp; + s->read((char *)&tmp, 2); // padding + + quint32 key; + s->read((char *)&key, 4); + key = ntohl(key); + + unicode = 0; + keycode = 0; + int i = 0; + while (keyMap[i].keysym && !keycode) { + if (keyMap[i].keysym == (int)key) + keycode = keyMap[i].keycode; + i++; + } + if (!keycode) { + if (key <= 0xff) { + unicode = key; + if (key >= 'a' && key <= 'z') + keycode = Qt::Key_A + key - 'a'; + else if (key >= ' ' && key <= '~') + keycode = Qt::Key_Space + key - ' '; + } + } + + return true; +} + +bool QRfbPointerEvent::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 5) + return false; + + char buttonMask; + s->read(&buttonMask, 1); + buttons = Qt::NoButton; + if (buttonMask & 1) + buttons |= Qt::LeftButton; + if (buttonMask & 2) + buttons |= Qt::MidButton; + if (buttonMask & 4) + buttons |= Qt::RightButton; + + quint16 tmp; + s->read((char *)&tmp, 2); + x = ntohs(tmp); + s->read((char *)&tmp, 2); + y = ntohs(tmp); + + return true; +} + +bool QRfbClientCutText::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 7) + return false; + + char tmp[3]; + s->read(tmp, 3); // padding + s->read((char *)&length, 4); + length = ntohl(length); + + return true; +} + +//=========================================================================== + +QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen) + : qvnc_screen(screen) +{ + init(5900); +} + +QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen, int id) + : qvnc_screen(screen) +{ + init(5900 + id); +} + +void QVNCServer::init(uint port) +{ + qDebug() << "QVNCServer::init" << port; + + handleMsg = false; + client = 0; + encodingsPending = 0; + cutTextPending = 0; + keymod = 0; + state = Unconnected; + dirtyCursor = false; + + refreshRate = 25; + timer = new QTimer(this); + timer->setSingleShot(true); + connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate())); + + serverSocket = new QTcpServer(this); + if (!serverSocket->listen(QHostAddress::Any, port)) + qDebug() << "QVNCServer could not connect:" << serverSocket->errorString(); + else + qDebug("QVNCServer created on port %d", port); + + connect(serverSocket, SIGNAL(newConnection()), this, SLOT(newConnection())); + +#ifndef QT_NO_QWS_CURSOR + qvnc_cursor = 0; +#endif + encoder = 0; +} + +QVNCServer::~QVNCServer() +{ + delete encoder; + encoder = 0; + delete client; + client = 0; +#ifndef QT_NO_QWS_CURSOR + delete qvnc_cursor; + qvnc_cursor = 0; +#endif +} + +void QVNCServer::setDirty() +{ + if (state == Connected && !timer->isActive() && + ((dirtyMap()->numDirty > 0) || dirtyCursor)) { + timer->start(); + } +} + +void QVNCServer::newConnection() +{ + if (client) + delete client; + + client = serverSocket->nextPendingConnection(); + connect(client,SIGNAL(readyRead()),this,SLOT(readClient())); + connect(client,SIGNAL(disconnected()),this,SLOT(discardClient())); + handleMsg = false; + encodingsPending = 0; + cutTextPending = 0; + supportHextile = false; + wantUpdate = false; + + timer->start(1000 / refreshRate); + dirtyMap()->reset(); + + // send protocol version + const char *proto = "RFB 003.003\n"; + client->write(proto, 12); + state = Protocol; + +// if (!qvnc_screen->screen()) +// QWSServer::instance()->enablePainting(true); +} + +void QVNCServer::readClient() +{ + switch (state) { + case Protocol: + if (client->bytesAvailable() >= 12) { + char proto[13]; + client->read(proto, 12); + proto[12] = '\0'; + qDebug("Client protocol version %s", proto); + // No authentication + quint32 auth = htonl(1); + client->write((char *) &auth, sizeof(auth)); + state = Init; + } + break; + + case Init: + if (client->bytesAvailable() >= 1) { + quint8 shared; + client->read((char *) &shared, 1); + + // Server Init msg + QRfbServerInit sim; + QRfbPixelFormat &format = sim.format; + switch (qvnc_screen->depth()) { + case 32: + format.bitsPerPixel = 32; + format.depth = 32; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 8; + format.greenBits = 8; + format.blueBits = 8; + format.redShift = 16; + format.greenShift = 8; + format.blueShift = 0; + break; + + case 24: + format.bitsPerPixel = 24; + format.depth = 24; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 8; + format.greenBits = 8; + format.blueBits = 8; + format.redShift = 16; + format.greenShift = 8; + format.blueShift = 0; + break; + + case 18: + format.bitsPerPixel = 24; + format.depth = 18; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 6; + format.greenBits = 6; + format.blueBits = 6; + format.redShift = 12; + format.greenShift = 6; + format.blueShift = 0; + break; + + case 16: + format.bitsPerPixel = 16; + format.depth = 16; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 5; + format.greenBits = 6; + format.blueBits = 5; + format.redShift = 11; + format.greenShift = 5; + format.blueShift = 0; + break; + + case 15: + format.bitsPerPixel = 16; + format.depth = 15; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 5; + format.greenBits = 5; + format.blueBits = 5; + format.redShift = 10; + format.greenShift = 5; + format.blueShift = 0; + break; + + case 12: + format.bitsPerPixel = 16; + format.depth = 12; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 4; + format.greenBits = 4; + format.blueBits = 4; + format.redShift = 8; + format.greenShift = 4; + format.blueShift = 0; + break; + + case 8: + case 4: + format.bitsPerPixel = 8; + format.depth = 8; + format.bigEndian = 0; + format.trueColor = false; + format.redBits = 0; + format.greenBits = 0; + format.blueBits = 0; + format.redShift = 0; + format.greenShift = 0; + format.blueShift = 0; + break; + + default: + qDebug("QVNC cannot drive depth %d", qvnc_screen->depth()); + discardClient(); + return; + } + sim.width = qvnc_screen->geometry().width(); + sim.height = qvnc_screen->geometry().height(); + sim.setName("Qt for Embedded Linux VNC Server"); + sim.write(client); + state = Connected; + } + break; + + case Connected: + do { + if (!handleMsg) { + client->read((char *)&msgType, 1); + handleMsg = true; + } + if (handleMsg) { + switch (msgType ) { + case SetPixelFormat: + setPixelFormat(); + break; + case FixColourMapEntries: + qDebug("Not supported: FixColourMapEntries"); + handleMsg = false; + break; + case SetEncodings: + setEncodings(); + break; + case FramebufferUpdateRequest: + frameBufferUpdateRequest(); + break; + case KeyEvent: + keyEvent(); + break; + case PointerEvent: + pointerEvent(); + break; + case ClientCutText: + clientCutText(); + break; + default: + qDebug("Unknown message type: %d", (int)msgType); + handleMsg = false; + } + } + } while (!handleMsg && client->bytesAvailable()); + break; + default: + break; + } +} + +#if 0//Q_BYTE_ORDER == Q_BIG_ENDIAN +bool QVNCGraphicsSystemScreen::swapBytes() const +{ + if (depth() != 16) + return false; + + if (screen()) + return screen()->frameBufferLittleEndian(); + return frameBufferLittleEndian(); +} +#endif + +void QVNCServer::setPixelFormat() +{ + if (client->bytesAvailable() >= 19) { + char buf[3]; + client->read(buf, 3); // just padding + pixelFormat.read(client); +#ifdef QT_QWS_VNC_DEBUG + qDebug("Want format: %d %d %d %d %d %d %d %d %d %d", + int(pixelFormat.bitsPerPixel), + int(pixelFormat.depth), + int(pixelFormat.bigEndian), + int(pixelFormat.trueColor), + int(pixelFormat.redBits), + int(pixelFormat.greenBits), + int(pixelFormat.blueBits), + int(pixelFormat.redShift), + int(pixelFormat.greenShift), + int(pixelFormat.blueShift)); +#endif + if (!pixelFormat.trueColor) { + qDebug("Can only handle true color clients"); + discardClient(); + } + handleMsg = false; + sameEndian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) == !!pixelFormat.bigEndian; + needConversion = pixelConversionNeeded(); +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + swapBytes = qvnc_screen->swapBytes(); +#endif + } +} + +void QVNCServer::setEncodings() +{ + QRfbSetEncodings enc; + + if (!encodingsPending && enc.read(client)) { + encodingsPending = enc.count; + if (!encodingsPending) + handleMsg = false; + } + + if (encoder) { + delete encoder; + encoder = 0; + } + + enum Encodings { + Raw = 0, + CopyRect = 1, + RRE = 2, + CoRRE = 4, + Hextile = 5, + ZRLE = 16, + Cursor = -239, + DesktopSize = -223 + }; + + if (encodingsPending && (unsigned)client->bytesAvailable() >= + encodingsPending * sizeof(quint32)) { + for (int i = 0; i < encodingsPending; ++i) { + qint32 enc; + client->read((char *)&enc, sizeof(qint32)); + enc = ntohl(enc); +#ifdef QT_QWS_VNC_DEBUG + qDebug("QVNCServer::setEncodings: %d", enc); +#endif + switch (enc) { + case Raw: + if (!encoder) { + encoder = new QRfbRawEncoder(this); +#ifdef QT_QWS_VNC_DEBUG + qDebug("QVNCServer::setEncodings: using raw"); +#endif + } + break; + case CopyRect: + supportCopyRect = true; + break; + case RRE: + supportRRE = true; + break; + case CoRRE: + supportCoRRE = true; + break; + case Hextile: + supportHextile = true; + if (encoder) + break; + switch (qvnc_screen->depth()) { +#ifdef QT_QWS_DEPTH_8 + case 8: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_12 + case 12: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_15 + case 15: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_16 + case 16: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_18 + case 18: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_24 + case 24: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_32 + case 32: + encoder = new QRfbHextileEncoder(this); + break; +#endif + default: + break; + } +#ifdef QT_QWS_VNC_DEBUG + qDebug("QVNCServer::setEncodings: using hextile"); +#endif + break; + case ZRLE: + supportZRLE = true; + break; + case Cursor: + supportCursor = true; +#ifndef QT_NO_QWS_CURSOR + if (!qvnc_screen->screen() || qt_screencursor->isAccelerated()) { + delete qvnc_cursor; + qvnc_cursor = new QVNCClientCursor(this); + } +#endif + break; + case DesktopSize: + supportDesktopSize = true; + break; + default: + break; + } + } + handleMsg = false; + encodingsPending = 0; + } + + if (!encoder) { + encoder = new QRfbRawEncoder(this); +#ifdef QT_QWS_VNC_DEBUG + qDebug("QVNCServer::setEncodings: fallback using raw"); +#endif + } +} + +void QVNCServer::frameBufferUpdateRequest() +{ + QRfbFrameBufferUpdateRequest ev; + + if (ev.read(client)) { + if (!ev.incremental) { + QRect r(ev.rect.x, ev.rect.y, ev.rect.w, ev.rect.h); +////### r.translate(qvnc_screen->offset()); + qvnc_screen->d_ptr->setDirty(r, true); + } + wantUpdate = true; + checkUpdate(); + handleMsg = false; + } +} + +static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::MouseButton *button, bool *isPress) +{ + if (before == after) + return false; + for (int b = Qt::LeftButton; b <= Qt::MidButton; b<<=1) { + if ((before & b) != (after & b)) { + *button = static_cast(b); + *isPress = (after & b); + return true; + } + } + return false; +} + +void QVNCServer::pointerEvent() +{ + QRfbPointerEvent ev; + if (ev.read(client)) { +// const QPoint offset = qvnc_screen->offset(); +// QWSServer::sendMouseEvent(offset + QPoint(ev.x, ev.y), ev.buttons); + + + //qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons; + + QEvent::Type type = QEvent::MouseMove; + Qt::MouseButton button = Qt::NoButton; + bool isPress; + if (buttonChange(buttons, ev.buttons, &button, &isPress)) + type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; + QMouseEvent me(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); + QApplicationPrivate::handleMouseEvent(0, me); + buttons = ev.buttons; + handleMsg = false; + } +} + +void QVNCServer::keyEvent() +{ + QRfbKeyEvent ev; + + if (ev.read(client)) { + if (ev.keycode == Qt::Key_Shift) + keymod = ev.down ? keymod | Qt::ShiftModifier : + keymod & ~Qt::ShiftModifier; + else if (ev.keycode == Qt::Key_Control) + keymod = ev.down ? keymod | Qt::ControlModifier : + keymod & ~Qt::ControlModifier; + else if (ev.keycode == Qt::Key_Alt) + keymod = ev.down ? keymod | Qt::AltModifier : + keymod & ~Qt::AltModifier; + if (ev.unicode || ev.keycode) { +// qDebug() << "keyEvent" << hex << ev.unicode << ev.keycode << keymod << ev.down; + QEvent::Type type = ev.down ? QEvent::KeyPress : QEvent::KeyRelease; + QString str; + if (ev.unicode && ev.unicode != 0xffff) + str = QString(ev.unicode); + QKeyEvent keyEvent(type, ev.keycode, keymod, str); + QApplicationPrivate::handleKeyEvent(0, &keyEvent); + } + handleMsg = false; + } +} + +void QVNCServer::clientCutText() +{ + QRfbClientCutText ev; + + if (ev.read(client)) { + cutTextPending = ev.length; + if (!cutTextPending) + handleMsg = false; + } + + if (cutTextPending && client->bytesAvailable() >= cutTextPending) { + char *text = new char [cutTextPending+1]; + client->read(text, cutTextPending); + delete [] text; + cutTextPending = 0; + handleMsg = false; + } +} + +// stride in bytes +template +bool QRfbSingleColorHextile::read(const uchar *data, + int width, int height, int stride) +{ + const int depth = encoder->server->screen()->depth(); + if (width % (depth / 8)) // hw: should rather fallback to simple loop + return false; + + static int alwaysFalse = qgetenv("QT_VNC_NOCHECKFILL").toInt(); + if (alwaysFalse) + return false; + + switch (depth) { + case 4: { + const quint8 *data8 = reinterpret_cast(data); + if ((data8[0] & 0xf) != (data8[0] >> 4)) + return false; + width /= 2; + } // fallthrough + case 8: { + const quint8 *data8 = reinterpret_cast(data); + if (data8[0] != data8[1]) + return false; + width /= 2; + } // fallthrough + case 12: + case 15: + case 16: { + const quint16 *data16 = reinterpret_cast(data); + if (data16[0] != data16[1]) + return false; + width /= 2; + } // fallthrough + case 18: + case 24: + case 32: { + const quint32 *data32 = reinterpret_cast(data); + const quint32 first = data32[0]; + const int linestep = (stride / sizeof(quint32)) - width; + for (int y = 0; y < height; ++y) { + for (int x = 0; x < width; ++x) { + if (*(data32++) != first) + return false; + } + data32 += linestep; + } + break; + } + default: + return false; + } + + SRC color = reinterpret_cast(data)[0]; + encoder->newBg |= (color != encoder->bg); + encoder->bg = color; + return true; +} + +template +void QRfbSingleColorHextile::write(QTcpSocket *socket) const +{ + if (true || encoder->newBg) { + const int bpp = encoder->server->clientBytesPerPixel(); + const int padding = 3; + QVarLengthArray buffer(padding + 1 + bpp); + buffer[padding] = 2; // BackgroundSpecified + encoder->server->convertPixels(buffer.data() + padding + 1, + reinterpret_cast(&encoder->bg), + 1); + socket->write(buffer.data() + padding, bpp + 1); +// encoder->newBg = false; + } else { + char subenc = 0; + socket->write(&subenc, 1); + } +} + +template +bool QRfbDualColorHextile::read(const uchar *data, + int width, int height, int stride) +{ + const SRC *ptr = reinterpret_cast(data); + const int linestep = (stride / sizeof(SRC)) - width; + + SRC c1; + SRC c2 = 0; + int n1 = 0; + int n2 = 0; + int x = 0; + int y = 0; + + c1 = *ptr; + + // find second color + while (y < height) { + while (x < width) { + if (*ptr == c1) { + ++n1; + } else { + c2 = *ptr; + goto found_second_color; + } + ++ptr; + ++x; + } + x = 0; + ptr += linestep; + ++y; + } + +found_second_color: + // finish counting + while (y < height) { + while (x < width) { + if (*ptr == c1) { + ++n1; + } else if (*ptr == c2) { + ++n2; + } else { + return false; + } + ++ptr; + ++x; + } + x = 0; + ptr += linestep; + ++y; + } + + if (n2 > n1) { + const quint32 tmpC = c1; + c1 = c2; + c2 = tmpC; + } + + encoder->newBg |= (c1 != encoder->bg); + encoder->newFg |= (c2 != encoder->fg); + + encoder->bg = c1; + encoder->fg = c2; + + // create map + bool inRect = false; + numRects = 0; + ptr = reinterpret_cast(data); + for (y = 0; y < height; ++y) { + for (x = 0; x < width; ++x) { + if (inRect && *ptr == encoder->bg) { + // rect finished + setWidth(x - lastx()); + next(); + inRect = false; + } else if (!inRect && *ptr == encoder->fg) { + // rect start + setX(x); + setY(y); + setHeight(1); + inRect = true; + } + ++ptr; + } + if (inRect) { + // finish rect + setWidth(width - lastx()); + next(); + inRect = false; + } + ptr += linestep; + } + + return true; +} + +template +void QRfbDualColorHextile::write(QTcpSocket *socket) const +{ + const int bpp = encoder->server->clientBytesPerPixel(); + const int padding = 3; + QVarLengthArray buffer(padding + 2 * bpp + sizeof(char) + sizeof(numRects)); + char &subenc = buffer[padding]; + int n = padding + sizeof(subenc); + + subenc = 0x8; // AnySubrects + + if (encoder->newBg) { + subenc |= 0x2; // Background + encoder->server->convertPixels(buffer.data() + n, (char*)&encoder->bg, 1); + n += bpp; +// encoder->newBg = false; + } + + if (encoder->newFg) { + subenc |= 0x4; // Foreground + encoder->server->convertPixels(buffer.data() + n, (char*)&encoder->fg, 1); + n += bpp; +// encoder->newFg = false; + } + buffer[n] = numRects; + n += sizeof(numRects); + + socket->write(buffer.data() + padding, n - padding); + socket->write((char*)rects, numRects * sizeof(Rect)); +} + +template +void QRfbDualColorHextile::next() +{ + for (int r = numRects - 1; r >= 0; --r) { + if (recty(r) == lasty()) + continue; + if (recty(r) < lasty() - 1) // only search previous scanline + break; + if (rectx(r) == lastx() && width(r) == width(numRects)) { + ++rects[r].wh; + return; + } + } + ++numRects; +} + +template +inline void QRfbMultiColorHextile::setColor(SRC color) +{ + encoder->server->convertPixels(reinterpret_cast(rect(numRects)), + (const char*)&color, 1); +} + +template +inline bool QRfbMultiColorHextile::beginRect() +{ + if ((rects.size() + bpp + 2) > maxRectsSize) + return false; + rects.resize(rects.size() + bpp + 2); + return true; +} + +template +inline void QRfbMultiColorHextile::endRect() +{ + setHeight(numRects, 1); + ++numRects; +} + +template +bool QRfbMultiColorHextile::read(const uchar *data, + int width, int height, int stride) +{ + const SRC *ptr = reinterpret_cast(data); + const int linestep = (stride / sizeof(SRC)) - width; + + bpp = encoder->server->clientBytesPerPixel(); + + if (encoder->newBg) + encoder->bg = ptr[0]; + + const SRC bg = encoder->bg; + SRC color = bg; + bool inRect = false; + + numRects = 0; + rects.clear(); + + for (int y = 0; y < height; ++y) { + for (int x = 0; x < width; ++x) { + if (inRect && *ptr != color) { // end rect + setWidth(numRects, x - rectx(numRects)); + endRect(); + inRect = false; + } + + if (!inRect && *ptr != bg) { // begin rect + if (!beginRect()) + return false; + inRect = true; + color = *ptr; + setColor(color); + setX(numRects, x); + setY(numRects, y); + } + ++ptr; + } + if (inRect) { // end rect + setWidth(numRects, width - rectx(numRects)); + endRect(); + inRect = false; + } + ptr += linestep; + } + + return true; +} + +template +void QRfbMultiColorHextile::write(QTcpSocket *socket) const +{ + const int padding = 3; + QVarLengthArray buffer(bpp + padding + sizeof(quint8) + sizeof(numRects)); + + quint8 &subenc = buffer[padding]; + int n = padding + sizeof(quint8); + + subenc = 8 | 16; // AnySubrects | SubrectsColoured + + if (encoder->newBg) { + subenc |= 0x2; // Background + encoder->server->convertPixels(reinterpret_cast(buffer.data() + n), + reinterpret_cast(&encoder->bg), + 1); + n += bpp; +// encoder->newBg = false; + } + + buffer[n] = numRects; + n += sizeof(numRects); + + socket->write(reinterpret_cast(buffer.data() + padding), + n - padding); + socket->write(reinterpret_cast(rects.constData()), + rects.size()); +} + +bool QVNCServer::pixelConversionNeeded() const +{ + if (!sameEndian) + return true; + +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + if (qvnc_screen->swapBytes()) + return true; +#endif + + const int screendepth = qvnc_screen->depth(); + if (screendepth != pixelFormat.bitsPerPixel) + return true; + + switch (screendepth) { + case 32: + case 24: + return false; + case 18: + return (pixelFormat.redBits == 6 + && pixelFormat.greenBits == 6 + && pixelFormat.blueBits == 6); + case 16: + return (pixelFormat.redBits == 5 + && pixelFormat.greenBits == 6 + && pixelFormat.blueBits == 5); + case 15: + return (pixelFormat.redBits == 5 + && pixelFormat.greenBits == 5 + && pixelFormat.blueBits == 5); + case 12: + return (pixelFormat.redBits == 4 + && pixelFormat.greenBits == 4 + && pixelFormat.blueBits == 4); + } + return true; +} + +// count: number of pixels +void QVNCServer::convertPixels(char *dst, const char *src, int count) const +{ + const int screendepth = qvnc_screen->depth(); + const bool isBgr = false; //### qvnc_screen->pixelType() == QScreen::BGRPixel; + + // cutoffs +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + if (!swapBytes) +#endif + if (sameEndian) { + if (screendepth == pixelFormat.bitsPerPixel) { // memcpy cutoffs + + switch (screendepth) { + case 32: + memcpy(dst, src, count * sizeof(quint32)); + return; + case 16: + if (pixelFormat.redBits == 5 + && pixelFormat.greenBits == 6 + && pixelFormat.blueBits == 5) + { + memcpy(dst, src, count * sizeof(quint16)); + return; + } + } + } else if (screendepth == 16 && pixelFormat.bitsPerPixel == 32) { +#if defined(__i386__) // Currently fails on ARM if dst is not 4 byte aligned + const quint32 *src32 = reinterpret_cast(src); + quint32 *dst32 = reinterpret_cast(dst); + int count32 = count * sizeof(quint16) / sizeof(quint32); + while (count32--) { + const quint32 s = *src32++; + quint32 result1; + quint32 result2; + + // red + result1 = ((s & 0xf8000000) | ((s & 0xe0000000) >> 5)) >> 8; + result2 = ((s & 0x0000f800) | ((s & 0x0000e000) >> 5)) << 8; + + // green + result1 |= ((s & 0x07e00000) | ((s & 0x06000000) >> 6)) >> 11; + result2 |= ((s & 0x000007e0) | ((s & 0x00000600) >> 6)) << 5; + + // blue + result1 |= ((s & 0x001f0000) | ((s & 0x001c0000) >> 5)) >> 13; + result2 |= ((s & 0x0000001f) | ((s & 0x0000001c) >> 5)) << 3; + + *dst32++ = result2; + *dst32++ = result1; + } + if (count & 0x1) { + const quint16 *src16 = reinterpret_cast(src); + dst32[count - 1] = qt_conv16ToRgb(src16[count - 1]); + } + return; +#endif + } + } + + const int bytesPerPixel = (pixelFormat.bitsPerPixel + 7) / 8; + +// nibble = 0; + + for (int i = 0; i < count; ++i) { + int r, g, b; + + switch (screendepth) { +#if 0 + case 4: { + if (!nibble) { + r = ((*src) & 0x0f) << 4; + } else { + r = (*src) & 0xf0; + src++; + } + nibble = !nibble; + g = b = r; + break; + } +#endif +#if 0 + case 8: { + QRgb rgb = qvnc_screen->clut()[int(*src)]; + r = qRed(rgb); + g = qGreen(rgb); + b = qBlue(rgb); + src++; + break; + } +#endif +#ifdef QT_QWS_DEPTH_12 + case 12: { + quint32 p = quint32(*reinterpret_cast(src)); + r = qRed(p); + g = qGreen(p); + b = qBlue(p); + src += sizeof(qrgb444); + break; + } +#endif +#ifdef QT_QWS_DEPTH_15 + case 15: { + quint32 p = quint32(*reinterpret_cast(src)); + r = qRed(p); + g = qGreen(p); + b = qBlue(p); + src += sizeof(qrgb555); + break; + } +#endif + case 16: { + quint16 p = *reinterpret_cast(src); +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + if (swapBytes) + p = ((p & 0xff) << 8) | ((p & 0xff00) >> 8); +#endif + r = (p >> 11) & 0x1f; + g = (p >> 5) & 0x3f; + b = p & 0x1f; + r <<= 3; + g <<= 2; + b <<= 3; + src += sizeof(quint16); + break; + } +#ifdef QT_QWS_DEPTH_18 + case 18: { + quint32 p = quint32(*reinterpret_cast(src)); + r = qRed(p); + g = qGreen(p); + b = qBlue(p); + src += sizeof(qrgb666); + break; + } +#endif +#ifdef QT_QWS_DEPTH_24 + case 24: { + quint32 p = quint32(*reinterpret_cast(src)); + r = qRed(p); + g = qGreen(p); + b = qBlue(p); + src += sizeof(qrgb888); + break; + } +#endif + case 32: { + quint32 p = *reinterpret_cast(src); + r = (p >> 16) & 0xff; + g = (p >> 8) & 0xff; + b = p & 0xff; + src += sizeof(quint32); + break; + } + default: { + r = g = b = 0; + qDebug("QVNCServer: don't support %dbpp display", screendepth); + return; + } + } + +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + if (swapBytes ^ isBgr) +#else + if (isBgr) +#endif + qSwap(r, b); + + r >>= (8 - pixelFormat.redBits); + g >>= (8 - pixelFormat.greenBits); + b >>= (8 - pixelFormat.blueBits); + + int pixel = (r << pixelFormat.redShift) | + (g << pixelFormat.greenShift) | + (b << pixelFormat.blueShift); + + if (sameEndian || pixelFormat.bitsPerPixel == 8) { + memcpy(dst, &pixel, bytesPerPixel); // XXX: do a simple for-loop instead? + dst += bytesPerPixel; + continue; + } + + + if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { + switch (pixelFormat.bitsPerPixel) { + case 16: + pixel = (((pixel & 0x0000ff00) << 8) | + ((pixel & 0x000000ff) << 24)); + break; + case 32: + pixel = (((pixel & 0xff000000) >> 24) | + ((pixel & 0x00ff0000) >> 8) | + ((pixel & 0x0000ff00) << 8) | + ((pixel & 0x000000ff) << 24)); + break; + default: + qDebug("Cannot handle %d bpp client", pixelFormat.bitsPerPixel); + } + } else { // QSysInfo::ByteOrder == QSysInfo::LittleEndian + switch (pixelFormat.bitsPerPixel) { + case 16: + pixel = (((pixel & 0xff000000) >> 8) | + ((pixel & 0x00ff0000) << 8)); + break; + case 32: + pixel = (((pixel & 0xff000000) >> 24) | + ((pixel & 0x00ff0000) >> 8) | + ((pixel & 0x0000ff00) << 8) | + ((pixel & 0x000000ff) << 24)); + break; + default: + qDebug("Cannot handle %d bpp client", + pixelFormat.bitsPerPixel); + break; + } + } + memcpy(dst, &pixel, bytesPerPixel); // XXX: simple for-loop instead? + dst += bytesPerPixel; + } +} + +#ifndef QT_NO_QWS_CURSOR +static void blendCursor(QImage &image, const QRect &imageRect) +{ + const QRect cursorRect = qt_screencursor->boundingRect(); + const QRect intersection = (cursorRect & imageRect); + const QRect destRect = intersection.translated(-imageRect.topLeft()); + const QRect srcRect = intersection.translated(-cursorRect.topLeft()); + + QPainter painter(&image); + painter.drawImage(destRect, qt_screencursor->image(), srcRect); + painter.end(); +} +#endif // QT_NO_QWS_CURSOR + +QVNCDirtyMap::QVNCDirtyMap(QVNCGraphicsSystemScreen *s) + : bytesPerPixel(0), numDirty(0), screen(s) +{ + bytesPerPixel = (screen->depth() + 7) / 8; + QSize screenSize = screen->geometry().size(); + bufferWidth = screenSize.width(); + bufferHeight = screenSize.height(); + bufferStride = bufferWidth * bytesPerPixel; + buffer = new uchar[bufferHeight * bufferStride]; + + mapWidth = (bufferWidth + MAP_TILE_SIZE - 1) / MAP_TILE_SIZE; + mapHeight = (bufferHeight + MAP_TILE_SIZE - 1) / MAP_TILE_SIZE; + numTiles = mapWidth * mapHeight; + map = new uchar[numTiles]; +} + +QVNCDirtyMap::~QVNCDirtyMap() +{ + delete[] map; + delete[] buffer; +} + +void QVNCDirtyMap::reset() +{ + memset(map, 1, numTiles); + memset(buffer, 0, bufferHeight * bufferStride); + numDirty = numTiles; +} + +inline bool QVNCDirtyMap::dirty(int x, int y) const +{ + return map[y * mapWidth + x]; +} + +inline void QVNCDirtyMap::setClean(int x, int y) +{ + map[y * mapWidth + x] = 0; + --numDirty; +} + +template +void QVNCDirtyMapOptimized::setDirty(int tileX, int tileY, bool force) +{ + static bool alwaysForce = qgetenv("QT_VNC_NO_COMPAREBUFFER").toInt(); + if (alwaysForce) + force = true; + + bool changed = false; + + if (!force) { + const int lstep = screen->linestep(); + const int startX = tileX * MAP_TILE_SIZE; + const int startY = tileY * MAP_TILE_SIZE; + const uchar *scrn = screen->base() + + startY * lstep + startX * bytesPerPixel; + uchar *old = buffer + startY * bufferStride + startX * sizeof(T); + + const int tileHeight = (startY + MAP_TILE_SIZE > bufferHeight ? + bufferHeight - startY : MAP_TILE_SIZE); + const int tileWidth = (startX + MAP_TILE_SIZE > bufferWidth ? + bufferWidth - startX : MAP_TILE_SIZE); + const bool doInlines = (tileWidth == MAP_TILE_SIZE); + + int y = tileHeight; + + if (doInlines) { // hw: memcmp/memcpy is inlined when using constants + while (y) { + if (memcmp(old, scrn, sizeof(T) * MAP_TILE_SIZE)) { + changed = true; + break; + } + scrn += lstep; + old += bufferStride; + --y; + } + + while (y) { + memcpy(old, scrn, sizeof(T) * MAP_TILE_SIZE); + scrn += lstep; + old += bufferStride; + --y; + } + } else { + while (y) { + if (memcmp(old, scrn, sizeof(T) * tileWidth)) { + changed = true; + break; + } + scrn += lstep; + old += bufferStride; + --y; + } + + while (y) { + memcpy(old, scrn, sizeof(T) * tileWidth); + scrn += lstep; + old += bufferStride; + --y; + } + } + } + + const int mapIndex = tileY * mapWidth + tileX; + if ((force || changed) && !map[mapIndex]) { + map[mapIndex] = 1; + ++numDirty; + } +} + +template +QRfbHextileEncoder::QRfbHextileEncoder(QVNCServer *s) + : QRfbEncoder(s), + singleColorHextile(this), dualColorHextile(this), multiColorHextile(this) +{ +} + +/* + \internal + Send dirty rects using hextile encoding. +*/ +template +void QRfbHextileEncoder::write() +{ +// QWSDisplay::grab(true); + + QVNCDirtyMap *map = server->dirtyMap(); + QTcpSocket *socket = server->clientSocket(); + + const quint32 encoding = htonl(5); // hextile encoding + const int bytesPerPixel = server->clientBytesPerPixel(); + + { + const char tmp[2] = { 0, 0 }; // msg type, padding + socket->write(tmp, sizeof(tmp)); + } + { + const quint16 count = htons(map->numDirty); + socket->write((char *)&count, sizeof(count)); + } + + if (map->numDirty <= 0) { +// QWSDisplay::ungrab(); + return; + } + + newBg = true; + newFg = true; + + const QImage screenImage = server->screenImage(); + QRfbRect rect(0, 0, MAP_TILE_SIZE, MAP_TILE_SIZE); + + QSize screenSize = server->screen()->geometry().size(); + + for (int y = 0; y < map->mapHeight; ++y) { + if (rect.y + MAP_TILE_SIZE > screenSize.height()) + rect.h = screenSize.height() - rect.y; + rect.w = MAP_TILE_SIZE; + for (int x = 0; x < map->mapWidth; ++x) { + if (!map->dirty(x, y)) + continue; + map->setClean(x, y); + + rect.x = x * MAP_TILE_SIZE; + if (rect.x + MAP_TILE_SIZE > screenSize.width()) //###deviceWidth ??? + rect.w = screenSize.width() - rect.x; + rect.write(socket); + + socket->write((char *)&encoding, sizeof(encoding)); + + const uchar *screendata = screenImage.scanLine(rect.y) + + rect.x * screenImage.depth() / 8; + int linestep = screenImage.bytesPerLine(); + +#ifndef QT_NO_QWS_CURSOR + // hardware cursors must be blended with the screen memory + const bool doBlendCursor = qt_screencursor + && !server->hasClientCursor() + && qt_screencursor->isAccelerated(); + QImage tileImage; + if (doBlendCursor) { + const QRect tileRect(rect.x, rect.y, rect.w, rect.h); + const QRect cursorRect = qt_screencursor->boundingRect() + .translated(-server->screen()->offset()); + if (tileRect.intersects(cursorRect)) { + tileImage = screenImage.copy(tileRect); + blendCursor(tileImage, + tileRect.translated(server->screen()->offset())); + screendata = tileImage.bits(); + linestep = tileImage.bytesPerLine(); + } + } +#endif // QT_NO_QWS_CURSOR + + if (singleColorHextile.read(screendata, rect.w, rect.h, linestep)) { + singleColorHextile.write(socket); + } else if (dualColorHextile.read(screendata, rect.w, rect.h, linestep)) { + dualColorHextile.write(socket); + } else if (multiColorHextile.read(screendata, rect.w, rect.h, linestep)) { + multiColorHextile.write(socket); + } else if (server->doPixelConversion()) { + const int bufferSize = rect.w * rect.h * bytesPerPixel + 1; + const int padding = sizeof(quint32) - sizeof(char); + buffer.resize(bufferSize + padding); + + buffer[padding] = 1; // Raw subencoding + + // convert pixels + char *b = buffer.data() + padding + 1; + const int bstep = rect.w * bytesPerPixel; + for (int i = 0; i < rect.h; ++i) { + server->convertPixels(b, (const char*)screendata, rect.w); + screendata += linestep; + b += bstep; + } + socket->write(buffer.constData() + padding, bufferSize); + } else { + quint8 subenc = 1; // Raw subencoding + socket->write((char *)&subenc, 1); + + // send pixels + for (int i = 0; i < rect.h; ++i) { + socket->write((const char*)screendata, + rect.w * bytesPerPixel); + screendata += linestep; + } + } + } + if (socket->state() == QAbstractSocket::UnconnectedState) + break; + rect.y += MAP_TILE_SIZE; + } + socket->flush(); + Q_ASSERT(map->numDirty == 0); + +// QWSDisplay::ungrab(); +} + +void QRfbRawEncoder::write() +{ +// QWSDisplay::grab(false); + + QVNCDirtyMap *map = server->dirtyMap(); + QTcpSocket *socket = server->clientSocket(); + + const int bytesPerPixel = server->clientBytesPerPixel(); + QSize screenSize = server->screen()->geometry().size(); + + // create a region from the dirty rects and send the region's merged rects. + QRegion rgn; + if (map) { + for (int y = 0; y < map->mapHeight; ++y) { + for (int x = 0; x < map->mapWidth; ++x) { + if (!map->dirty(x, y)) + continue; + rgn += QRect(x * MAP_TILE_SIZE, y * MAP_TILE_SIZE, + MAP_TILE_SIZE, MAP_TILE_SIZE); + map->setClean(x, y); + } + } + + rgn &= QRect(0, 0, screenSize.width(), + screenSize.height()); + } + const QVector rects = rgn.rects(); + + { + const char tmp[2] = { 0, 0 }; // msg type, padding + socket->write(tmp, sizeof(tmp)); + } + + { + const quint16 count = htons(rects.size()); + socket->write((char *)&count, sizeof(count)); + } + + if (rects.size() <= 0) { +// QWSDisplay::ungrab(); + return; + } + + const QImage *screenImage = server->screenImage(); + + for (int i = 0; i < rects.size(); ++i) { + const QRect tileRect = rects.at(i); + const QRfbRect rect(tileRect.x(), tileRect.y(), + tileRect.width(), tileRect.height()); + rect.write(socket); + + const quint32 encoding = htonl(0); // raw encoding + socket->write((char *)&encoding, sizeof(encoding)); + + int linestep = screenImage->bytesPerLine(); + const uchar *screendata = screenImage->scanLine(rect.y) + + rect.x * screenImage->depth() / 8; + +#ifndef QT_NO_QWS_CURSOR + // hardware cursors must be blended with the screen memory + const bool doBlendCursor = qt_screencursor + && !server->hasClientCursor() + && qt_screencursor->isAccelerated(); + QImage tileImage; + if (doBlendCursor) { + const QRect cursorRect = qt_screencursor->boundingRect() + .translated(-server->screen()->offset()); + if (tileRect.intersects(cursorRect)) { + tileImage = screenImage->copy(tileRect); + blendCursor(tileImage, + tileRect.translated(server->screen()->offset())); + screendata = tileImage.bits(); + linestep = tileImage.bytesPerLine(); + } + } +#endif // QT_NO_QWS_CURSOR + + if (server->doPixelConversion()) { + const int bufferSize = rect.w * rect.h * bytesPerPixel; + if (bufferSize > buffer.size()) + buffer.resize(bufferSize); + + // convert pixels + char *b = buffer.data(); + const int bstep = rect.w * bytesPerPixel; + for (int i = 0; i < rect.h; ++i) { + server->convertPixels(b, (const char*)screendata, rect.w); + screendata += linestep; + b += bstep; + } + socket->write(buffer.constData(), bufferSize); + } else { + for (int i = 0; i < rect.h; ++i) { + socket->write((const char*)screendata, rect.w * bytesPerPixel); + screendata += linestep; + } + } + if (socket->state() == QAbstractSocket::UnconnectedState) + break; + } + socket->flush(); + +// QWSDisplay::ungrab(); +} + +inline QImage *QVNCServer::screenImage() const +{ + return qvnc_screen->mScreenImage; +} + +void QVNCServer::checkUpdate() +{ + if (!wantUpdate) + return; + + if (dirtyCursor) { +#ifndef QT_NO_QWS_CURSOR + Q_ASSERT(qvnc_cursor); + qvnc_cursor->write(); +#endif + dirtyCursor = false; + wantUpdate = false; + return; + } + + if (dirtyMap()->numDirty > 0) { + if (encoder) + encoder->write(); + wantUpdate = false; + } +} + +void QVNCServer::discardClient() +{ + timer->stop(); + state = Unconnected; + delete encoder; + encoder = 0; +#ifndef QT_NO_QWS_CURSOR + delete qvnc_cursor; + qvnc_cursor = 0; +#endif +// if (!qvnc_screen->screen()) +// QWSServer::instance()->enablePainting(false); +} + + + +QVNCGraphicsSystemScreenPrivate::QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent) + : dpiX(72), dpiY(72), doOnScreenSurface(false), refreshRate(25), + vncServer(0), q_ptr(parent) +{ +#if 0//ndef QT_NO_QWS_SIGNALHANDLER + QWSSignalHandler::instance()->addObject(this); +#endif + + vncServer = new QVNCServer(q_ptr); + vncServer->setRefreshRate(refreshRate); + + + Q_ASSERT(q_ptr->depth() == 32); + + dirty = new QVNCDirtyMapOptimized(q_ptr); +} + +QVNCGraphicsSystemScreenPrivate::~QVNCGraphicsSystemScreenPrivate() +{ +} + + +void QVNCGraphicsSystemScreenPrivate::setDirty(const QRect& rect, bool force) +{ + if (rect.isEmpty()) + return; + +// if (q_ptr->screen()) +// q_ptr->screen()->setDirty(rect); + + if (!vncServer || !vncServer->isConnected()) { +// qDebug() << "QVNCGraphicsSystemScreenPrivate::setDirty() - Not connected"; + return; + } + const QRect r = rect; // .translated(-q_ptr->offset()); + const int x1 = r.x() / MAP_TILE_SIZE; + int y = r.y() / MAP_TILE_SIZE; + for (; (y <= r.bottom() / MAP_TILE_SIZE) && y < dirty->mapHeight; y++) + for (int x = x1; (x <= r.right() / MAP_TILE_SIZE) && x < dirty->mapWidth; x++) + dirty->setDirty(x, y, force); + + vncServer->setDirty(); +} + + + + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h new file mode 100644 index 0000000..e7eb531 --- /dev/null +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -0,0 +1,524 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSCREENVNC_P_H +#define QSCREENVNC_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the QLibrary class. This header file may change from version to version +// without notice, or even be removed. +// +// We mean it. +// + +#include "qgraphicssystem_vnc.h" +#define QT_NO_QWS_CURSOR + +#ifndef QT_NO_QWS_VNC + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QVNCServer; + +#ifndef QT_NO_QWS_CURSOR +class QVNCCursor : public QProxyScreenCursor +{ +public: + QVNCCursor(QVNCGraphicsSystemScreen *s); + ~QVNCCursor(); + + void hide(); + void show(); + void set(const QImage &image, int hotx, int hoty); + void move(int x, int y); + +private: + void setDirty(const QRect &r) const; + QVNCGraphicsSystemScreen *screen; +}; + +class QVNCClientCursor : public QProxyScreenCursor +{ +public: + QVNCClientCursor(QVNCServer *s); + ~QVNCClientCursor(); + + void set(const QImage &image, int hotx, int hoty); + void write() const; + +private: + QVNCServer *server; +}; +#endif // QT_NO_QWS_CURSOR + +#define MAP_TILE_SIZE 16 +#define MAP_WIDTH 1280 / MAP_TILE_SIZE +#define MAP_HEIGHT 1024 / MAP_TILE_SIZE + +class QVNCDirtyMap +{ +public: + QVNCDirtyMap(QVNCGraphicsSystemScreen *screen); + virtual ~QVNCDirtyMap(); + + void reset(); + bool dirty(int x, int y) const; + virtual void setDirty(int x, int y, bool force = false) = 0; + void setClean(int x, int y); + + int bytesPerPixel; + + int numDirty; + int mapWidth; + int mapHeight; + +protected: + uchar *map; + QVNCGraphicsSystemScreen *screen; + uchar *buffer; + int bufferWidth; + int bufferHeight; + int bufferStride; + int numTiles; +}; + +template +class QVNCDirtyMapOptimized : public QVNCDirtyMap +{ +public: + QVNCDirtyMapOptimized(QVNCGraphicsSystemScreen *screen) : QVNCDirtyMap(screen) {} + ~QVNCDirtyMapOptimized() {} + + void setDirty(int x, int y, bool force = false); +}; + +class QRfbRect +{ +public: + QRfbRect() {} + QRfbRect(quint16 _x, quint16 _y, quint16 _w, quint16 _h) { + x = _x; y = _y; w = _w; h = _h; + } + + void read(QTcpSocket *s); + void write(QTcpSocket *s) const; + + quint16 x; + quint16 y; + quint16 w; + quint16 h; +}; + +class QRfbPixelFormat +{ +public: + static int size() { return 16; } + + void read(QTcpSocket *s); + void write(QTcpSocket *s); + + int bitsPerPixel; + int depth; + bool bigEndian; + bool trueColor; + int redBits; + int greenBits; + int blueBits; + int redShift; + int greenShift; + int blueShift; +}; + +class QRfbServerInit +{ +public: + QRfbServerInit() { name = 0; } + ~QRfbServerInit() { delete[] name; } + + int size() const { return QRfbPixelFormat::size() + 8 + strlen(name); } + void setName(const char *n); + + void read(QTcpSocket *s); + void write(QTcpSocket *s); + + quint16 width; + quint16 height; + QRfbPixelFormat format; + char *name; +}; + +class QRfbSetEncodings +{ +public: + bool read(QTcpSocket *s); + + quint16 count; +}; + +class QRfbFrameBufferUpdateRequest +{ +public: + bool read(QTcpSocket *s); + + char incremental; + QRfbRect rect; +}; + +class QRfbKeyEvent +{ +public: + bool read(QTcpSocket *s); + + char down; + int keycode; + int unicode; +}; + +class QRfbPointerEvent +{ +public: + bool read(QTcpSocket *s); + + Qt::MouseButtons buttons; + quint16 x; + quint16 y; +}; + +class QRfbClientCutText +{ +public: + bool read(QTcpSocket *s); + + quint32 length; +}; + +class QVNCGraphicsSystemScreenPrivate : public QObject +{ +public: + QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent); + ~QVNCGraphicsSystemScreenPrivate(); + + void setDirty(const QRect &rect, bool force = false); + void configure(); + + qreal dpiX; + qreal dpiY; + bool doOnScreenSurface; + QVNCDirtyMap *dirty; + int refreshRate; + QVNCServer *vncServer; + +#if !defined(QT_NO_QWS_MULTIPROCESS) && !defined(QT_NO_SHAREDMEMORY) + QSharedMemory shm; +#endif + + QVNCGraphicsSystemScreen *q_ptr; +}; + +class QRfbEncoder +{ +public: + QRfbEncoder(QVNCServer *s) : server(s) {} + virtual ~QRfbEncoder() {} + + virtual void write() = 0; + +protected: + QVNCServer *server; +}; + +class QRfbRawEncoder : public QRfbEncoder +{ +public: + QRfbRawEncoder(QVNCServer *s) : QRfbEncoder(s) {} + + void write(); + +private: + QByteArray buffer; +}; + +template class QRfbHextileEncoder; + +template +class QRfbSingleColorHextile +{ +public: + QRfbSingleColorHextile(QRfbHextileEncoder *e) : encoder(e) {} + bool read(const uchar *data, int width, int height, int stride); + void write(QTcpSocket *socket) const; + +private: + QRfbHextileEncoder *encoder; +}; + +template +class QRfbDualColorHextile +{ +public: + QRfbDualColorHextile(QRfbHextileEncoder *e) : encoder(e) {} + bool read(const uchar *data, int width, int height, int stride); + void write(QTcpSocket *socket) const; + +private: + struct Rect { + quint8 xy; + quint8 wh; + } Q_PACKED rects[8 * 16]; + + quint8 numRects; + QRfbHextileEncoder *encoder; + +private: + inline int lastx() const { return rectx(numRects); } + inline int lasty() const { return recty(numRects); } + inline int rectx(int r) const { return rects[r].xy >> 4; } + inline int recty(int r) const { return rects[r].xy & 0x0f; } + inline int width(int r) const { return (rects[r].wh >> 4) + 1; } + inline int height(int r) const { return (rects[r].wh & 0x0f) + 1; } + + inline void setX(int r, int x) { + rects[r].xy = (x << 4) | (rects[r].xy & 0x0f); + } + inline void setY(int r, int y) { + rects[r].xy = (rects[r].xy & 0xf0) | y; + } + inline void setWidth(int r, int width) { + rects[r].wh = ((width - 1) << 4) | (rects[r].wh & 0x0f); + } + inline void setHeight(int r, int height) { + rects[r].wh = (rects[r].wh & 0xf0) | (height - 1); + } + + inline void setWidth(int width) { setWidth(numRects, width); } + inline void setHeight(int height) { setHeight(numRects, height); } + inline void setX(int x) { setX(numRects, x); } + inline void setY(int y) { setY(numRects, y); } + void next(); +}; + +template +class QRfbMultiColorHextile +{ +public: + QRfbMultiColorHextile(QRfbHextileEncoder *e) : encoder(e) {} + bool read(const uchar *data, int width, int height, int stride); + void write(QTcpSocket *socket) const; + +private: + inline quint8* rect(int r) { + return rects.data() + r * (bpp + 2); + } + inline const quint8* rect(int r) const { + return rects.constData() + r * (bpp + 2); + } + inline void setX(int r, int x) { + quint8 *ptr = rect(r) + bpp; + *ptr = (x << 4) | (*ptr & 0x0f); + } + inline void setY(int r, int y) { + quint8 *ptr = rect(r) + bpp; + *ptr = (*ptr & 0xf0) | y; + } + void setColor(SRC color); + inline int rectx(int r) const { + const quint8 *ptr = rect(r) + bpp; + return *ptr >> 4; + } + inline int recty(int r) const { + const quint8 *ptr = rect(r) + bpp; + return *ptr & 0x0f; + } + inline void setWidth(int r, int width) { + quint8 *ptr = rect(r) + bpp + 1; + *ptr = ((width - 1) << 4) | (*ptr & 0x0f); + } + inline void setHeight(int r, int height) { + quint8 *ptr = rect(r) + bpp + 1; + *ptr = (*ptr & 0xf0) | (height - 1); + } + + bool beginRect(); + void endRect(); + + static const int maxRectsSize = 16 * 16; + QVarLengthArray rects; + + quint8 bpp; + quint8 numRects; + QRfbHextileEncoder *encoder; +}; + +template +class QRfbHextileEncoder : public QRfbEncoder +{ +public: + QRfbHextileEncoder(QVNCServer *s); + void write(); + +private: + enum SubEncoding { + Raw = 1, + BackgroundSpecified = 2, + ForegroundSpecified = 4, + AnySubrects = 8, + SubrectsColoured = 16 + }; + + QByteArray buffer; + QRfbSingleColorHextile singleColorHextile; + QRfbDualColorHextile dualColorHextile; + QRfbMultiColorHextile multiColorHextile; + + SRC bg; + SRC fg; + bool newBg; + bool newFg; + + friend class QRfbSingleColorHextile; + friend class QRfbDualColorHextile; + friend class QRfbMultiColorHextile; +}; + +class QVNCServer : public QObject +{ + Q_OBJECT +public: + QVNCServer(QVNCGraphicsSystemScreen *screen); + QVNCServer(QVNCGraphicsSystemScreen *screen, int id); + ~QVNCServer(); + + void setDirty(); + void setDirtyCursor() { dirtyCursor = true; setDirty(); } + inline bool isConnected() const { return state == Connected; } + inline void setRefreshRate(int rate) { refreshRate = rate; } + + enum ClientMsg { SetPixelFormat = 0, + FixColourMapEntries = 1, + SetEncodings = 2, + FramebufferUpdateRequest = 3, + KeyEvent = 4, + PointerEvent = 5, + ClientCutText = 6 }; + + enum ServerMsg { FramebufferUpdate = 0, + SetColourMapEntries = 1 }; + + void convertPixels(char *dst, const char *src, int count) const; + + inline int clientBytesPerPixel() const { + return pixelFormat.bitsPerPixel / 8; + } + + inline QVNCGraphicsSystemScreen* screen() const { return qvnc_screen; } + inline QVNCDirtyMap* dirtyMap() const { return qvnc_screen->dirtyMap(); } + inline QTcpSocket* clientSocket() const { return client; } + QImage *screenImage() const; + inline bool doPixelConversion() const { return needConversion; } +#ifndef QT_NO_QWS_CURSOR + inline bool hasClientCursor() const { return qvnc_cursor != 0; } +#endif + +private: + void setPixelFormat(); + void setEncodings(); + void frameBufferUpdateRequest(); + void pointerEvent(); + void keyEvent(); + void clientCutText(); + bool pixelConversionNeeded() const; + +private slots: + void newConnection(); + void readClient(); + void checkUpdate(); + void discardClient(); + +private: + void init(uint port); + enum ClientState { Unconnected, Protocol, Init, Connected }; + QTimer *timer; + QTcpServer *serverSocket; + QTcpSocket *client; + ClientState state; + quint8 msgType; + bool handleMsg; + QRfbPixelFormat pixelFormat; + Qt::KeyboardModifiers keymod; + Qt::MouseButtons buttons; + int encodingsPending; + int cutTextPending; + uint supportCopyRect : 1; + uint supportRRE : 1; + uint supportCoRRE : 1; + uint supportHextile : 1; + uint supportZRLE : 1; + uint supportCursor : 1; + uint supportDesktopSize : 1; + bool wantUpdate; + bool sameEndian; + bool needConversion; +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + bool swapBytes; +#endif + bool dirtyCursor; + int refreshRate; + QVNCGraphicsSystemScreen *qvnc_screen; +#ifndef QT_NO_QWS_CURSOR + QVNCClientCursor *qvnc_cursor; +#endif + + QRfbEncoder *encoder; +}; + + +QT_END_NAMESPACE +#endif // QT_NO_QWS_VNC +#endif // QSCREENVNC_P_H diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp new file mode 100644 index 0000000..9429eb2 --- /dev/null +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp @@ -0,0 +1,106 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "qwindowsurface_vnc.h" +#include "qgraphicssystem_vnc.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QVNCWindowSurface::QVNCWindowSurface(QVNCGraphicsSystem *graphicsSystem, + QVNCGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen) +{ +} + +QVNCWindowSurface::~QVNCWindowSurface() +{ +} + +QPaintDevice *QVNCWindowSurface::paintDevice() +{ + return mScreen->mScreenImage; +} + +void QVNCWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + QRect rect = geometry(); + QPoint topLeft = rect.topLeft(); + + mScreen->setDirty(region.boundingRect()); + // server->flush(region); + +} + +void QVNCWindowSurface::setGeometry(const QRect &) +{ + +// any size you like as long as it's full-screen... + + QRect rect(mScreen->availableGeometry()); + QApplicationPrivate::handleGeometryChange(this->window(), rect); + + QWindowSurface::setGeometry(rect); +} + +bool QVNCWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QVNCWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QVNCWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h new file mode 100644 index 0000000..3a85db3 --- /dev/null +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_TESTLITE_H +#define QWINDOWSURFACE_TESTLITE_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class MyWindow; +class QVNCGraphicsSystem; +class QVNCGraphicsSystemScreen; + +class QVNCWindowSurface : public QWindowSurface +{ +public: + QVNCWindowSurface(QVNCGraphicsSystem *graphicsSystem, + QVNCGraphicsSystemScreen *screen, QWidget *window); + ~QVNCWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + QVNCGraphicsSystem *mGraphicsSystem; + QVNCGraphicsSystemScreen *mScreen; + MyWindow *xw; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/vnc/vnc.pro b/src/plugins/graphicssystems/vnc/vnc.pro new file mode 100644 index 0000000..20e48ad --- /dev/null +++ b/src/plugins/graphicssystems/vnc/vnc.pro @@ -0,0 +1,16 @@ +TARGET = qvncgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + + + +SOURCES = main.cpp qgraphicssystem_vnc.cpp qwindowsurface_vnc.cpp +HEADERS = qgraphicssystem_vnc.h qwindowsurface_vnc.h + +HEADERS += qvncserver.h +SOURCES += qvncserver.cpp + + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/tools/tools.pro b/tools/tools.pro index 4b36115..f079357 100644 --- a/tools/tools.pro +++ b/tools/tools.pro @@ -16,7 +16,7 @@ no-png { SUBDIRS += linguist symbian: SUBDIRS = designer wince*: SUBDIRS = qtestlib designer - unix:!mac:!embedded:contains(QT_CONFIG, qt3support):SUBDIRS += qtconfig + unix:!mac:!embedded:!embedded_lite:contains(QT_CONFIG, qt3support):SUBDIRS += qtconfig win32:!wince*:SUBDIRS += activeqt } -- cgit v0.12 From 7f808c0b4b640ee0f0d7e5f6ace98bda7de5730c Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 30 Sep 2009 16:45:16 +0200 Subject: Update to the latest version of the copyright headers. --- src/gui/egl/qegl_lite.cpp | 8 ++++---- src/gui/image/qpixmap_lite.cpp | 8 ++++---- src/gui/kernel/qapplication_lite.cpp | 8 ++++---- src/gui/kernel/qclipboard_lite.cpp | 8 ++++---- src/gui/kernel/qcursor_lite.cpp | 8 ++++---- src/gui/kernel/qdesktopwidget_lite.cpp | 8 ++++---- src/gui/kernel/qgenericplugin_lite.cpp | 8 ++++---- src/gui/kernel/qgenericplugin_lite.h | 8 ++++---- src/gui/kernel/qgenericpluginfactory_lite.cpp | 8 ++++---- src/gui/kernel/qgenericpluginfactory_lite.h | 8 ++++---- src/gui/kernel/qsound_lite.cpp | 8 ++++---- src/gui/kernel/qwidget_lite.cpp | 8 ++++---- src/gui/painting/qcolormap_lite.cpp | 8 ++++---- src/gui/painting/qpaintdevice_lite.cpp | 8 ++++---- src/plugins/generic/linuxinput/main.cpp | 8 ++++---- src/plugins/generic/linuxinput/qlinuxinput.cpp | 8 ++++---- src/plugins/generic/linuxinput/qlinuxinput.h | 8 ++++---- src/plugins/graphicssystems/linuxfb/main.cpp | 8 ++++---- src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp | 8 ++++---- src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h | 8 ++++---- src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp | 8 ++++---- src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h | 8 ++++---- src/plugins/graphicssystems/minimal/main.cpp | 8 ++++---- src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp | 8 ++++---- src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h | 8 ++++---- src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp | 8 ++++---- src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h | 8 ++++---- src/plugins/graphicssystems/openvglite/main.cpp | 8 ++++---- src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp | 8 ++++---- src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h | 8 ++++---- src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp | 8 ++++---- src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h | 8 ++++---- src/plugins/graphicssystems/testlite/main.cpp | 8 ++++---- src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp | 8 ++++---- src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h | 8 ++++---- src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp | 8 ++++---- src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h | 8 ++++---- src/plugins/graphicssystems/testlite/x11util.cpp | 8 ++++---- src/plugins/graphicssystems/testlite/x11util.h | 8 ++++---- src/plugins/graphicssystems/vnc/main.cpp | 8 ++++---- src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp | 8 ++++---- src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h | 8 ++++---- src/plugins/graphicssystems/vnc/qvncserver.cpp | 8 ++++---- src/plugins/graphicssystems/vnc/qvncserver.h | 8 ++++---- src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp | 8 ++++---- src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h | 8 ++++---- 46 files changed, 184 insertions(+), 184 deletions(-) diff --git a/src/gui/egl/qegl_lite.cpp b/src/gui/egl/qegl_lite.cpp index 784b252..40439c6 100644 --- a/src/gui/egl/qegl_lite.cpp +++ b/src/gui/egl/qegl_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/image/qpixmap_lite.cpp b/src/gui/image/qpixmap_lite.cpp index 4ba69fa..90761ca 100644 --- a/src/gui/image/qpixmap_lite.cpp +++ b/src/gui/image/qpixmap_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index eec3e6c..384c987 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qclipboard_lite.cpp b/src/gui/kernel/qclipboard_lite.cpp index 0d9268f..92b9e83 100644 --- a/src/gui/kernel/qclipboard_lite.cpp +++ b/src/gui/kernel/qclipboard_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qcursor_lite.cpp b/src/gui/kernel/qcursor_lite.cpp index 5af03fc..a6ae7d3 100644 --- a/src/gui/kernel/qcursor_lite.cpp +++ b/src/gui/kernel/qcursor_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp index 7aea787..fed1f9c 100644 --- a/src/gui/kernel/qdesktopwidget_lite.cpp +++ b/src/gui/kernel/qdesktopwidget_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qgenericplugin_lite.cpp b/src/gui/kernel/qgenericplugin_lite.cpp index 29d7728..6a0fdb6 100644 --- a/src/gui/kernel/qgenericplugin_lite.cpp +++ b/src/gui/kernel/qgenericplugin_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qgenericplugin_lite.h b/src/gui/kernel/qgenericplugin_lite.h index 2c0ee7a..a468a9f 100644 --- a/src/gui/kernel/qgenericplugin_lite.h +++ b/src/gui/kernel/qgenericplugin_lite.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qgenericpluginfactory_lite.cpp b/src/gui/kernel/qgenericpluginfactory_lite.cpp index 4e5b12b..76accbe 100644 --- a/src/gui/kernel/qgenericpluginfactory_lite.cpp +++ b/src/gui/kernel/qgenericpluginfactory_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qgenericpluginfactory_lite.h b/src/gui/kernel/qgenericpluginfactory_lite.h index 3be4614..86886f1 100644 --- a/src/gui/kernel/qgenericpluginfactory_lite.h +++ b/src/gui/kernel/qgenericpluginfactory_lite.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qsound_lite.cpp b/src/gui/kernel/qsound_lite.cpp index 2e2c1e8..a4c74a8 100644 --- a/src/gui/kernel/qsound_lite.cpp +++ b/src/gui/kernel/qsound_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index bbc7766..2eba1a1 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/painting/qcolormap_lite.cpp b/src/gui/painting/qcolormap_lite.cpp index b8ae1af..1c1e9cf 100644 --- a/src/gui/painting/qcolormap_lite.cpp +++ b/src/gui/painting/qcolormap_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/gui/painting/qpaintdevice_lite.cpp b/src/gui/painting/qpaintdevice_lite.cpp index 2560bf5..0d1ca92 100644 --- a/src/gui/painting/qpaintdevice_lite.cpp +++ b/src/gui/painting/qpaintdevice_lite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/generic/linuxinput/main.cpp b/src/plugins/generic/linuxinput/main.cpp index 21209b8..25e80eb 100644 --- a/src/plugins/generic/linuxinput/main.cpp +++ b/src/plugins/generic/linuxinput/main.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 2ce687d..48084d0 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/generic/linuxinput/qlinuxinput.h b/src/plugins/generic/linuxinput/qlinuxinput.h index 5a90c8f..26ba6a7 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.h +++ b/src/plugins/generic/linuxinput/qlinuxinput.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtGui module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/linuxfb/main.cpp b/src/plugins/graphicssystems/linuxfb/main.cpp index ef6234d..4d03fe5 100644 --- a/src/plugins/graphicssystems/linuxfb/main.cpp +++ b/src/plugins/graphicssystems/linuxfb/main.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp index cd0ced2..95c636f 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h index 3446008..7ceaf037 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp index bfc2f83..dbe5dd7 100644 --- a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp +++ b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h index 763f362..37efcb0 100644 --- a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h +++ b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/minimal/main.cpp b/src/plugins/graphicssystems/minimal/main.cpp index f7d5eef..2e9d80e 100644 --- a/src/plugins/graphicssystems/minimal/main.cpp +++ b/src/plugins/graphicssystems/minimal/main.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp index 31023fc..78aff06 100644 --- a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp +++ b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h index b15f6f6..5bf230f 100644 --- a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h +++ b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp index e9d7d69..a87e690 100644 --- a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp +++ b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h index 89dc860..c7593e7 100644 --- a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h +++ b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/openvglite/main.cpp b/src/plugins/graphicssystems/openvglite/main.cpp index 3a73f5c..dc0b4a8 100644 --- a/src/plugins/graphicssystems/openvglite/main.cpp +++ b/src/plugins/graphicssystems/openvglite/main.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp index cc5b012..41b2303 100644 --- a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp +++ b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h index 74fc41e..512793d 100644 --- a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h +++ b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp index d250a8e..c73e35a 100644 --- a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp +++ b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h index c1ae02e..59faba8 100644 --- a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h +++ b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/testlite/main.cpp b/src/plugins/graphicssystems/testlite/main.cpp index 6271829..28caea7 100644 --- a/src/plugins/graphicssystems/testlite/main.cpp +++ b/src/plugins/graphicssystems/testlite/main.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp index b1948b9..9cb0424 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h index cb88ee8..ad7f581 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 6996809..74ccceb 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index 33b55e9..80739b0 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index f77356a..c9ca6aa 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index 3d813c0..3d3134f 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/vnc/main.cpp b/src/plugins/graphicssystems/vnc/main.cpp index 7deb91a..f10748a 100644 --- a/src/plugins/graphicssystems/vnc/main.cpp +++ b/src/plugins/graphicssystems/vnc/main.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp index 4890e09..9a7c198 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h index d9b4375..375b467 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index c3677a0..36d8cc6 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h index e7eb531..ed07ce1 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp index 9429eb2..07668fb 100644 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h index 3a85db3..40428ef 100644 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the QtOpenVG module of the Qt Toolkit. @@ -20,10 +21,9 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. ** ** If you have questions regarding the use of this file, please contact ** Nokia at qt-info@nokia.com. -- cgit v0.12 From 1a8fc08d9cf7ceb9af3fdd48c590f65b2ad2b57b Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 1 Oct 2009 14:32:29 +0200 Subject: Use the same default style as QWS. --- src/gui/kernel/qapplication.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index bceffc5..613dbb5 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -1981,7 +1981,7 @@ QString desktopstyle; desktopstyle = QLatin1String("Windows"); // default style for Symbian without S60 #elif defined(Q_WS_X11) && defined(Q_OS_IRIX) desktopstyle = QLatin1String("SGI"); // default style for X11 on IRIX -#elif defined(Q_WS_QWS) +#elif defined(Q_WS_QWS) || defined (Q_WS_LITE) desktopstyle = QLatin1String("Plastique"); // default style for X11 and small devices #elif defined(Q_WS_X11) desktopstyle = QApplicationPrivate::x11_desktop_style(); // default runtime dependant style for X11 -- cgit v0.12 From 13a0b4935900093607f2b3b7688e1452d22770fd Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 5 Oct 2009 13:27:01 +0200 Subject: check for lighthouse when configuring webkit - if so, exclude X11 Reviewed-by: Paul --- src/3rdparty/webkit/WebCore/WebCore.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index 540abad..854cf5f 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -20,6 +20,7 @@ TEMPLATE = lib TARGET = QtWebKit contains(QT_CONFIG, embedded):CONFIG += embedded +contains(QT_CONFIG, embedded_lite):CONFIG += embedded CONFIG(QTDIR_build) { GENERATED_SOURCES_DIR = $$PWD/generated -- cgit v0.12 From 1c58e823cec0cea8210a83596b4c43333a5ded0c Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 6 Oct 2009 17:33:04 +0200 Subject: Fix isHidden() logic in setParent_sys() -- browser demo works now! --- src/gui/kernel/qwidget_lite.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 2eba1a1..dfcbeaa 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -84,6 +84,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) { Q_Q(QWidget); + QWidget *oldParent = q->parentWidget(); Qt::WindowFlags oldFlags = data.window_flags; if (parent != newparent) { @@ -93,7 +94,14 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (!newparent) { f |= Qt::Window; } + + bool explicitlyHidden = q->testAttribute(Qt::WA_WState_Hidden) && q->testAttribute(Qt::WA_WState_ExplicitShowHide); + data.window_flags = f; + q->setAttribute(Qt::WA_WState_Created, false); + q->setAttribute(Qt::WA_WState_Visible, false); + q->setAttribute(Qt::WA_WState_Hidden, false); + if (f & Qt::Window) { //qDebug() << "setParent_sys" << q << newparent << hex << f; if (QWindowSurface *surface = q->windowSurface()) @@ -101,11 +109,16 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) } // XXX Reparenting child to toplevel or vice versa ### if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { - qDebug() << "setParent_sys() change to toplevel"; + //qDebug() << "setParent_sys() change to toplevel"; q->create(); //### this cannot be right } else if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { qDebug() << "######## setParent_sys() change from toplevel not implemented ########"; } + + if (q->isWindow() || (!newparent || newparent->isVisible()) || explicitlyHidden) + q->setAttribute(Qt::WA_WState_Hidden); + q->setAttribute(Qt::WA_WState_ExplicitShowHide, explicitlyHidden); + } QPoint QWidget::mapToGlobal(const QPoint &pos) const -- cgit v0.12 From cd584e3654ab8971aa9868c3375d5f26817396dc Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 6 Oct 2009 17:34:20 +0200 Subject: Remove some debug output. --- .../testlite/qwindowsurface_testlite.cpp | 4 ++-- src/plugins/graphicssystems/testlite/x11util.cpp | 19 ++++++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 74ccceb..640e487 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -62,14 +62,14 @@ QTestLiteWindowSurface::QTestLiteWindowSurface xw = new MyWindow(graphicsSystem->xd, 0,0,300,300); xw->windowSurface = this; - qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; +// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility } QTestLiteWindowSurface::~QTestLiteWindowSurface() { - qDebug() << "~QTestLiteWindowSurface" << xw->window; +// qDebug() << "~QTestLiteWindowSurface" << xw->window; delete xw; } diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index c9ca6aa..b443e3e 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -256,7 +256,9 @@ bool MyDisplay::handleEvent(XEvent *xe) #endif default: +#ifdef MYX11_DEBUG qDebug() << "Other X event" << hex << xe->type; +#endif break; } return quit; @@ -286,8 +288,9 @@ MyDisplay::MyDisplay() physicalHeight = DisplayHeightMM(display, screen); int xSocketNumber = XConnectionNumber(display); +#ifdef MYX11_DEBUG qDebug() << "X socket:"<< xSocketNumber; - +#endif QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); } @@ -313,7 +316,9 @@ void MyDisplay::eventDispatcher() handleEvent(&event); if (event.xany.serial >= marker) { +#ifdef MYX11_DEBUG qDebug() << "potential livelock averted"; +#endif #if 0 if (XEventsQueued(display, QueuedAfterFlush)) { qDebug() << " with events queued"; @@ -332,8 +337,9 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) xd->windowList.append(this); +#ifdef MYX11_DEBUG qDebug() << "MyWindow::MyWindow"; - +#endif window = XCreateSimpleWindow(xd->display, xd->rootWindow(), x, y, w, h, 0 /*border_width*/, xd->blackPixel(), xd->whitePixel()); @@ -556,8 +562,9 @@ Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) mwm_hint_atom = XInternAtom(xd->display, "_MOTIF_WM_HINTS\0", False); } +#ifdef MYX11_DEBUG qDebug() << "MyWindow::setWindowFlags" << hex << mwm_hint_atom << "flags" << flags; - +#endif Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); if (type == Qt::ToolTip) @@ -657,7 +664,9 @@ Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) //##### only if initializeWindow??? if (popup) { // popup widget +#ifdef MYX11_DEBUG qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; +#endif // set EWMH window types // setNetWmWindowTypes(); @@ -666,9 +675,9 @@ Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) XChangeWindowAttributes(xd->display, window, CWOverrideRedirect | CWSaveUnder, &wsa); } else { - +#ifdef MYX11_DEBUG qDebug() << "Doing XChangeWindowAttributes for non-popup"; - +#endif } return flags; -- cgit v0.12 From 899eda0138c3899a2c8c5cfaea7d7685d4490475 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 7 Oct 2009 18:43:52 +0200 Subject: Handle closeEvent() --- src/gui/kernel/qapplication_lite.cpp | 9 +++++ src/gui/kernel/qapplication_p.h | 1 + .../testlite/qwindowsurface_testlite.cpp | 7 ++-- .../testlite/qwindowsurface_testlite.h | 2 +- src/plugins/graphicssystems/testlite/x11util.cpp | 39 +++++++++++++++++++--- src/plugins/graphicssystems/testlite/x11util.h | 2 +- 6 files changed, 51 insertions(+), 9 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 384c987..6d4f30b 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -50,6 +50,8 @@ #include "private/qcursor_p.h" #endif +#include "private/qwidget_p.h" + #include "qgenericpluginfactory_lite.h" #include @@ -621,4 +623,11 @@ void QApplicationPrivate::handleGeometryChange(QWidget *tlw, const QRect &newRec QApplication::sendSpontaneousEvent(tlw, &e); } } + + +void QApplicationPrivate::handleCloseEvent(QWidget *tlw) +{ + tlw->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 784ebf6..9cd3f4c 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -581,6 +581,7 @@ public: static void handleMouseEvent(QWidget *tlw, const QMouseEvent &ev); static void handleKeyEvent(QWidget *tlw, QKeyEvent *e); static void handleGeometryChange(QWidget *tlw, const QRect &newRect); + static void handleCloseEvent(QWidget *tlw); #endif #if defined(Q_WS_S60) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 640e487..2ad3224 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -199,9 +199,10 @@ void QTestLiteWindowSurface::handleGeometryChange(int x, int y, int w, int h) } - - - +void QTestLiteWindowSurface::handleCloseEvent() +{ + QApplicationPrivate::handleCloseEvent(window()); +} diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index 80739b0..7edc448 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -70,7 +70,7 @@ public: void handleMouseEvent(QEvent::Type, void *); //forwarding X types is apparently impossible :( void handleKeyEvent(QEvent::Type, void *); void handleGeometryChange(int x, int y, int w, int h); - + void handleCloseEvent(); Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); Qt::WindowFlags windowFlags() const; diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index b443e3e..6c8377a 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -60,14 +60,15 @@ #undef ATOM #undef X11 - - - +//#define MYX11_DEBUG static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); static bool seen_badwindow; +static Atom wmProtocolsAtom; +static Atom wmDeleteWindowAtom; + //### copied from qapplication_x11.cpp static int qt_x_errhandler(Display *dpy, XErrorEvent *err) @@ -223,6 +224,22 @@ bool MyDisplay::handleEvent(XEvent *xe) } switch (xe->type) { + + case ClientMessage: + if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { + Atom a = xe->xclient.data.l[0]; + if (a == wmDeleteWindowAtom) + xw->closeEvent(); +#ifdef MYX11_DEBUG + qDebug() << "ClientMessage WM_PROTOCOLS" << a; +#endif + } +#ifdef MYX11_DEBUG + else + qDebug() << "ClientMessage" << xe->xclient.format << xe->xclient.message_type; +#endif + break; + case Expose: if (xw) if (xe->xexpose.count == 0) @@ -293,6 +310,10 @@ MyDisplay::MyDisplay() #endif QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); + + wmProtocolsAtom = XInternAtom (display, "WM_PROTOCOLS", False); + wmDeleteWindowAtom = XInternAtom (display, "WM_DELETE_WINDOW", False); + } @@ -355,6 +376,13 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | StructureNotifyMask); gc = createGC(); + + XChangeProperty (xd->display, window, + wmProtocolsAtom, + XA_ATOM, 32, PropModeAppend, + (unsigned char *) &wmDeleteWindowAtom, 1); + + } MyWindow::~MyWindow() @@ -376,7 +404,10 @@ GC MyWindow::createGC() return gc; } - +void MyWindow::closeEvent() +{ + windowSurface->handleCloseEvent(); +} void MyWindow::paintEvent() { diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index 3d3134f..fbd9ef7 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -96,7 +96,7 @@ public: void keyPressEvent(XKeyEvent*); void keyReleaseEvent(XKeyEvent*); - + void closeEvent(); void paintEvent(); void resizeEvent(XConfigureEvent *configure_event); void setSize(int w, int h); -- cgit v0.12 From 281f685524eae4d015e4e9069a38ef7d30fceda1 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 9 Oct 2009 15:28:28 +0200 Subject: Small code cleanup --- src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h index 40428ef..3fd1f12 100644 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h @@ -39,15 +39,14 @@ ** ****************************************************************************/ -#ifndef QWINDOWSURFACE_TESTLITE_H -#define QWINDOWSURFACE_TESTLITE_H +#ifndef QWINDOWSURFACE_VNC_H +#define QWINDOWSURFACE_VNC_H #include #include QT_BEGIN_NAMESPACE -class MyWindow; class QVNCGraphicsSystem; class QVNCGraphicsSystemScreen; @@ -69,7 +68,6 @@ public: private: QVNCGraphicsSystem *mGraphicsSystem; QVNCGraphicsSystemScreen *mScreen; - MyWindow *xw; }; QT_END_NAMESPACE -- cgit v0.12 From 240d918f2ebc3a7dd8b683eabc1f2c1b1b8b2143 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 9 Oct 2009 16:07:34 +0200 Subject: Simple example Lighthouse backend that connects to QVFb This is not fully functional, but should be useful for debugging purposes. Only supports one full-screen window. --- src/plugins/graphicssystems/qvfb/main.cpp | 72 ++++ .../graphicssystems/qvfb/qgraphicssystem_qvfb.cpp | 438 +++++++++++++++++++++ .../graphicssystems/qvfb/qgraphicssystem_qvfb.h | 95 +++++ src/plugins/graphicssystems/qvfb/qvfb.pro | 12 + .../graphicssystems/qvfb/qwindowsurface_qvfb.cpp | 104 +++++ .../graphicssystems/qvfb/qwindowsurface_qvfb.h | 74 ++++ 6 files changed, 795 insertions(+) create mode 100644 src/plugins/graphicssystems/qvfb/main.cpp create mode 100644 src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp create mode 100644 src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.h create mode 100644 src/plugins/graphicssystems/qvfb/qvfb.pro create mode 100644 src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp create mode 100644 src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.h diff --git a/src/plugins/graphicssystems/qvfb/main.cpp b/src/plugins/graphicssystems/qvfb/main.cpp new file mode 100644 index 0000000..b28dde8 --- /dev/null +++ b/src/plugins/graphicssystems/qvfb/main.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_qvfb.h" +#include + +QT_BEGIN_NAMESPACE + +class QVFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QVFbGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "QVFb"; + return list; +} + +QGraphicsSystem* QVFbGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "qvfb") + return new QVFbGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(qvfb, QVFbGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp new file mode 100644 index 0000000..10e4e53 --- /dev/null +++ b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp @@ -0,0 +1,438 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include // overrides QT_OPEN + +#include +#include + +#include "qgraphicssystem_qvfb.h" +#include "qwindowsurface_qvfb.h" +#include +#include +#include + +#include +#include + +QT_BEGIN_NAMESPACE + + +class QVFbGraphicsSystemScreenKeyboardHandler : public QObject +{ + Q_OBJECT +public: + QVFbGraphicsSystemScreenKeyboardHandler(); + ~QVFbGraphicsSystemScreenKeyboardHandler(); + +private slots: + void readKeyboardData(); + +private: + int kbdFD; + int kbdIdx; + int kbdBufferLen; + unsigned char *kbdBuffer; + QSocketNotifier *keyNotifier; +}; + +QVFbGraphicsSystemScreenKeyboardHandler::QVFbGraphicsSystemScreenKeyboardHandler() +{ + int displayId = 0; //TODO displayId + const QString keyboardDev = QString::fromLatin1(QT_VFB_KEYBOARD_PIPE) + .arg(displayId); + + + kbdFD = -1; + kbdIdx = 0; + kbdBufferLen = sizeof(QVFbKeyData) * 5; + kbdBuffer = new unsigned char [kbdBufferLen]; + + kbdFD = QT_OPEN(keyboardDev.toLatin1().constData(), O_RDWR | O_NDELAY); + + if (kbdFD == -1) { + perror("QVFbGraphicsSystemScreenKeyboardHandler"); + qWarning("QVFbGraphicsSystemScreenKeyboardHandler: Unable to open device %s", + qPrintable(keyboardDev)); + return; + } + + // Clear pending input + char buf[2]; + while (QT_READ(kbdFD, buf, 1) > 0) { } + + keyNotifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this); + connect(keyNotifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData())); + +} + +QVFbGraphicsSystemScreenKeyboardHandler::~QVFbGraphicsSystemScreenKeyboardHandler() +{ + if (kbdFD >= 0) + QT_CLOSE(kbdFD); + delete [] kbdBuffer; +} + + +void QVFbGraphicsSystemScreenKeyboardHandler::readKeyboardData() +{ + int n; + do { + n = QT_READ(kbdFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx); + if (n > 0) + kbdIdx += n; + } while (n > 0); + + int idx = 0; + while (kbdIdx - idx >= (int)sizeof(QVFbKeyData)) { + QVFbKeyData *kd = (QVFbKeyData *)(kbdBuffer + idx); + if (kd->unicode == 0 && kd->keycode == 0 && kd->modifiers == 0 && kd->press) { + // magic exit key + qWarning("Instructed to quit by Virtual Keyboard"); + qApp->quit(); + } + + //QWSServer::processKeyEvent(kd->unicode ? kd->unicode : 0xffff, kd->keycode, kd->modifiers, kd->press, kd->repeat); + + QEvent::Type type = kd->press ? QEvent::KeyPress : QEvent::KeyRelease; + + QString text; + if (kd->unicode && kd->unicode != 0xffff) + text += QChar(kd->unicode); + +// qDebug() << "readKeyboardData" << type << hex << kd->keycode << kd->modifiers << text; + + QKeyEvent ke(type, kd->keycode, kd->modifiers, text, kd->repeat, int(text.length())); + QApplicationPrivate::handleKeyEvent(0, &ke); + idx += sizeof(QVFbKeyData); + } + + int surplus = kbdIdx - idx; + for (int i = 0; i < surplus; i++) + kbdBuffer[i] = kbdBuffer[idx+i]; + kbdIdx = surplus; +} + + + + +class QVFbGraphicsSystemScreenMouseHandler : public QObject +{ + Q_OBJECT +public: + QVFbGraphicsSystemScreenMouseHandler(); + ~QVFbGraphicsSystemScreenMouseHandler(); + +private slots: + void readMouseData(); + +private: + int mouseFD; + int mouseIdx; + enum {mouseBufSize = 128}; + uchar mouseBuf[mouseBufSize]; + QSocketNotifier *mouseNotifier; + + int oldButtonState; +}; + +QVFbGraphicsSystemScreenMouseHandler::QVFbGraphicsSystemScreenMouseHandler() +{ + int displayId = 0; //TODO: displayId + QString mouseDev = QString::fromLatin1(QT_VFB_MOUSE_PIPE) + .arg(displayId); + + mouseFD = QT_OPEN(mouseDev.toLatin1().constData(), O_RDWR | O_NDELAY); + + if (mouseFD == -1) { + perror("QVFbMouseHandler::QVFbMouseHandler"); + qWarning("QVFbMouseHander: Unable to open device %s", + qPrintable(mouseDev)); + return; + } + + // Clear pending input + char buf[2]; + while (QT_READ(mouseFD, buf, 1) > 0) { } + + mouseIdx = 0; + oldButtonState = 0; + mouseNotifier = new QSocketNotifier(mouseFD, QSocketNotifier::Read, this); + connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); +} + + +QVFbGraphicsSystemScreenMouseHandler::~QVFbGraphicsSystemScreenMouseHandler() +{ + if (mouseFD >= 0) + QT_CLOSE(mouseFD); +} + +void QVFbGraphicsSystemScreenMouseHandler::readMouseData() +{ + int n; + do { + n = QT_READ(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx); + if (n > 0) + mouseIdx += n; + } while (n > 0); + + int idx = 0; + static const int packetsize = sizeof(QPoint) + 2*sizeof(int); + while (mouseIdx-idx >= packetsize) { + uchar *mb = mouseBuf+idx; + QPoint mousePos = *reinterpret_cast(mb); + mb += sizeof(QPoint); + int bstate = *reinterpret_cast(mb); + mb += sizeof(int); + int wheel = *reinterpret_cast(mb); + + int button = bstate ^ oldButtonState; + QEvent::Type type = QEvent::MouseMove; + + if (button) { + type = (button & bstate) ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; + } + QMouseEvent me(type, mousePos, mousePos, + Qt::MouseButton(button), Qt::MouseButtons(bstate), Qt::NoModifier); + QApplicationPrivate::handleMouseEvent(0, me); + +// qDebug() << "readMouseData" << mousePos << button << bstate << oldButtonState << type; + + oldButtonState = bstate; + + idx += packetsize; + } + + int surplus = mouseIdx - idx; + for (int i = 0; i < surplus; i++) + mouseBuf[i] = mouseBuf[idx+i]; + mouseIdx = surplus; + +} + + +class QVFbGraphicsSystemScreenPrivate +{ +public: + QVFbGraphicsSystemScreenPrivate(QVFbGraphicsSystemScreen *) + : shmrgn(0), hdr(0), data(0), mouseHandler(0), keyboardHandler(0) + { + connect(0); //for now we only handle one screen + } + + ~QVFbGraphicsSystemScreenPrivate() { disconnect(); } + void setDirty(const QRect &r); + + bool connect(int displayId); + void disconnect(); + + QImage *screenImage() { return &img; } + QSize screenSize() { return img.size(); } + + int depth() const { return img.depth(); } + QImage::Format format() const { return img.format(); } + +private: + unsigned char *shmrgn; + QVFbHeader *hdr; + uchar *data; + QVFbGraphicsSystemScreenMouseHandler *mouseHandler; + QVFbGraphicsSystemScreenKeyboardHandler *keyboardHandler; + + + QImage img; +}; + + +void QVFbGraphicsSystemScreenPrivate::setDirty(const QRect &r) +{ + hdr->dirty = true; + hdr->update = hdr->update.united(r); +} + + +bool QVFbGraphicsSystemScreenPrivate::connect(int displayId) +{ + + key_t key = ftok(QByteArray(QT_VFB_MOUSE_PIPE).replace("%1", QByteArray::number(displayId)), 'b'); + + if (key == -1) + return false; + + + int shmId = shmget(key, 0, 0); + if (shmId != -1) + shmrgn = (unsigned char *)shmat(shmId, 0, 0); + else + return false; + + if ((long)shmrgn == -1 || shmrgn == 0) { + qDebug("No shmrgn %ld", (long)shmrgn); + return false; + } + + hdr = (QVFbHeader *)shmrgn; + data = shmrgn + hdr->dataoffset; + + int w = hdr->width; + int h = hdr->height; + int d = hdr->depth; + int lstep = hdr->linestep; + + QImage::Format format = QImage::Format_Invalid; + if (d == 32) + format = QImage::Format_ARGB32_Premultiplied; + else if (d == 16) + format = QImage::Format_RGB16; + + + if (format == QImage::Format_Invalid) { + img = QImage(); + return false; + } + + img = QImage(data, w, h, lstep, format); + + qDebug("connected %dx%d %d bpp", w, h, d); + + + mouseHandler = new QVFbGraphicsSystemScreenMouseHandler; + keyboardHandler = new QVFbGraphicsSystemScreenKeyboardHandler; + return true; +} + +void QVFbGraphicsSystemScreenPrivate::disconnect() +{ + if ((long)shmrgn != -1 && shmrgn) { + shmdt((char*)shmrgn); + shmrgn = 0; + } + delete mouseHandler; + mouseHandler = 0; + delete keyboardHandler; + keyboardHandler = 0; +} + + +QVFbGraphicsSystemScreen::QVFbGraphicsSystemScreen() +{ + d_ptr = new QVFbGraphicsSystemScreenPrivate(this); +} + + +QVFbGraphicsSystemScreen::~QVFbGraphicsSystemScreen() +{ + delete d_ptr; +} + +void QVFbGraphicsSystemScreen::setDirty(const QRect &rect) +{ + d_ptr->setDirty(rect); +} + + + +QRect QVFbGraphicsSystemScreen::geometry() const { + return QRect(QPoint(), d_ptr->screenSize()); +} + + +int QVFbGraphicsSystemScreen::depth() const +{ + return d_ptr->depth(); +} + +QImage::Format QVFbGraphicsSystemScreen::format() const +{ + return d_ptr->format(); +} + +QSize QVFbGraphicsSystemScreen::physicalSize() const { + return (d_ptr->screenSize()*254)/720; +} + +#if 0 +int QVFbGraphicsSystemScreen::linestep() const { + return d_ptr->screenImage() ? d_ptr->screenImage()->bytesPerLine() : 0; +} + +uchar *QVFbGraphicsSystemScreen::base() const { + return d_ptr->screenImage() ? d_ptr->screenImage()->bits() : 0; +} +#endif + +QImage *QVFbGraphicsSystemScreen::screenImage() +{ + return d_ptr->screenImage(); +} + +QVFbGraphicsSystem::QVFbGraphicsSystem() +{ + mPrimaryScreen = new QVFbGraphicsSystemScreen(); + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QVFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QVFbGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + return new QVFbWindowSurface + (const_cast(this), mPrimaryScreen, widget); +} + +QT_END_NAMESPACE + +#include "qgraphicssystem_qvfb.moc" diff --git a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.h b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.h new file mode 100644 index 0000000..b31869c --- /dev/null +++ b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_QVFB_H +#define QGRAPHICSSYSTEM_QVFB_H + +#include + +QT_BEGIN_NAMESPACE + + +class QVFbGraphicsSystemScreenPrivate; + +class QVFbGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QVFbGraphicsSystemScreen(); + ~QVFbGraphicsSystemScreen(); + + QRect geometry() const; + int depth() const; + QImage::Format format() const; + QSize physicalSize() const; + + QImage *screenImage(); + + void setDirty(const QRect &rect); + +public: + + QVFbGraphicsSystemScreenPrivate *d_ptr; +}; + +class QVFbGraphicsSystemPrivate; + + +class QVFbGraphicsSystem : public QGraphicsSystem +{ +public: + QVFbGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + +private: + QVFbGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + + + +QT_END_NAMESPACE + + +#endif diff --git a/src/plugins/graphicssystems/qvfb/qvfb.pro b/src/plugins/graphicssystems/qvfb/qvfb.pro new file mode 100644 index 0000000..b321725 --- /dev/null +++ b/src/plugins/graphicssystems/qvfb/qvfb.pro @@ -0,0 +1,12 @@ +TARGET = qvfbgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + + + +SOURCES = main.cpp qgraphicssystem_qvfb.cpp qwindowsurface_qvfb.cpp +HEADERS = qgraphicssystem_qvfb.h qwindowsurface_qvfb.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp b/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp new file mode 100644 index 0000000..c49f082 --- /dev/null +++ b/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "qwindowsurface_qvfb.h" +#include "qgraphicssystem_qvfb.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QVFbWindowSurface::QVFbWindowSurface(QVFbGraphicsSystem *graphicsSystem, + QVFbGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen) +{ +} + +QVFbWindowSurface::~QVFbWindowSurface() +{ +} + +QPaintDevice *QVFbWindowSurface::paintDevice() +{ + return mScreen->screenImage(); +} + +void QVFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + QRect rect = geometry(); + QPoint topLeft = rect.topLeft(); + + mScreen->setDirty(region.boundingRect()); +} + +void QVFbWindowSurface::setGeometry(const QRect &) +{ + +// any size you like as long as it's full-screen... + + QRect rect(mScreen->availableGeometry()); + QApplicationPrivate::handleGeometryChange(this->window(), rect); + + QWindowSurface::setGeometry(rect); +} + +bool QVFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QVFbWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QVFbWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.h b/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.h new file mode 100644 index 0000000..1971caa --- /dev/null +++ b/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_QVFB_H +#define QWINDOWSURFACE_QVFB_H + +#include + +QT_BEGIN_NAMESPACE + +class QVFbGraphicsSystem; +class QVFbGraphicsSystemScreen; + +class QVFbWindowSurface : public QWindowSurface +{ +public: + QVFbWindowSurface(QVFbGraphicsSystem *graphicsSystem, + QVFbGraphicsSystemScreen *screen, QWidget *window); + ~QVFbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + QVFbGraphicsSystem *mGraphicsSystem; + QVFbGraphicsSystemScreen *mScreen; +}; + +QT_END_NAMESPACE + +#endif -- cgit v0.12 From 976f07cbc50a9875d5a094dfd4f3c2d47cba52b4 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 9 Oct 2009 17:08:29 +0200 Subject: Remove some more debug output --- src/gui/kernel/qapplication_lite.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 6d4f30b..0615073 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -127,7 +127,6 @@ static bool qt_try_modal(QWidget *widget, const QEvent *event) void QApplicationPrivate::enterModal_sys(QWidget *widget) { - qDebug() << ">>>>>>>> enterModal_sys" << app_do_modal << widget; if (!qt_modal_stack) qt_modal_stack = new QWidgetList; qt_modal_stack->insert(0, widget); @@ -136,7 +135,6 @@ void QApplicationPrivate::enterModal_sys(QWidget *widget) void QApplicationPrivate::leaveModal_sys(QWidget *widget ) { - qDebug() << "<<<<<<<<< leaveModal_sys" << app_do_modal << widget; if (qt_modal_stack && qt_modal_stack->removeAll(widget)) { if (qt_modal_stack->isEmpty()) { delete qt_modal_stack; -- cgit v0.12 From 0be3fc435c0ada8d5f93389cdf4c96193f015f8f Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 9 Oct 2009 18:05:48 +0200 Subject: Add support for wheel events --- src/gui/kernel/qapplication_lite.cpp | 40 ++++++++++++++++++++++ src/gui/kernel/qapplication_p.h | 1 + .../testlite/qwindowsurface_testlite.cpp | 17 +++++++++ 3 files changed, 58 insertions(+) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 0615073..f551228 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -575,6 +575,45 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) } +//### there's a lot of duplicated logic here -- refactoring required! + +void QApplicationPrivate::handleWheelEvent(QWidget *tlw, QWheelEvent &ev) +{ +// QPoint localPoint = ev.pos(); + QPoint globalPoint = ev.globalPos(); +// bool trustLocalPoint = !!tlw; //is there something the local point can be local to? + QWidget *mouseWidget = tlw; + + qt_last_x = globalPoint.x(); + qt_last_y = globalPoint.y(); + + QWidget *mouseWindow = tlw; + + // find the tlw if we didn't get it from the plugin + if (!mouseWindow) { + mouseWindow = QApplication::topLevelAt(globalPoint); + } + + if (!mouseWindow) + return; + + if (app_do_modal && !qt_try_modal(mouseWindow, &ev) ) { + qDebug() << "modal blocked wheel event" << mouseWindow; + return; + } + QPoint p = mouseWindow->mapFromGlobal(globalPoint); + QWidget *w = mouseWindow->childAt(p); + if (w) { + mouseWidget = w; + p = mouseWidget->mapFromGlobal(globalPoint); + } + + QWheelEvent e(p, globalPoint, ev.delta(), ev.buttons(), ev.modifiers(), + ev.orientation()); + QApplication::sendSpontaneousEvent(mouseWidget, &e); +} + + // Remember, Qt convention is: keyboard state is state *before* @@ -628,4 +667,5 @@ void QApplicationPrivate::handleCloseEvent(QWidget *tlw) tlw->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); } + QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 9cd3f4c..32004ba 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -582,6 +582,7 @@ public: static void handleKeyEvent(QWidget *tlw, QKeyEvent *e); static void handleGeometryChange(QWidget *tlw, const QRect &newRect); static void handleCloseEvent(QWidget *tlw); + static void handleWheelEvent(QWidget *tlw, QWheelEvent &e); #endif #if defined(Q_WS_S60) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 2ad3224..c2ad094 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -174,6 +174,23 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) case Button1: button = Qt::LeftButton; break; case Button2: button = Qt::MidButton; break; case Button3: button = Qt::RightButton; break; + case Button4: + case Button5: + case 6: + case 7: { + //mouse wheel + if (type == QEvent::MouseButtonPress) { + //logic borrowed from qapplication_x11.cpp + int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); + bool hor = (((e->button == Button4 || e->button == Button5) + && (modifiers & Qt::AltModifier)) + || (e->button == 6 || e->button == 7)); + QWheelEvent we(QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), delta, + buttons, modifiers, hor ? Qt::Horizontal : Qt::Vertical); + QApplicationPrivate::handleWheelEvent(window(),we); + } + return; + } default: break; } } -- cgit v0.12 From 7a078ab4f9abf814766c310ab41575d89bb622ce Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 12 Oct 2009 15:07:49 +0200 Subject: Make tooltips work. --- src/gui/kernel/qwidget_lite.cpp | 2 +- src/plugins/graphicssystems/testlite/x11util.cpp | 17 ++++++++++++----- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index dfcbeaa..1c48e10 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -284,7 +284,7 @@ void QWidgetPrivate::show_sys() surface->setVisible(true); } - if (q->windowType() != Qt::Popup) + if (q->windowType() != Qt::Popup && q->windowType() != Qt::ToolTip && !(q->windowFlags() & Qt::X11BypassWindowManagerHint)) q->activateWindow(); //### } diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 6c8377a..e4d3e89 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -219,7 +219,7 @@ bool MyDisplay::handleEvent(XEvent *xe) } } if (!xw) { - qWarning() << "Unknown window" << xe->xany.window << "received event" << hex << xe->type; + qWarning() << "Unknown window" << hex << xe->xany.window << "received event" << xe->type; return quit; } @@ -358,13 +358,16 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) xd->windowList.append(this); -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::MyWindow"; -#endif window = XCreateSimpleWindow(xd->display, xd->rootWindow(), x, y, w, h, 0 /*border_width*/, xd->blackPixel(), xd->whitePixel()); + +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::MyWindow" << hex << window; +#endif + + width = -1; height = -1; xpos = -1; @@ -373,7 +376,8 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) XSetWindowBackgroundPixmap(xd->display, window, XNone); XSelectInput(xd->display, window, ExposureMask | KeyPressMask | KeyReleaseMask | - ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | StructureNotifyMask); + PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | + StructureNotifyMask); gc = createGC(); @@ -387,6 +391,9 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) MyWindow::~MyWindow() { +#ifdef MYX11_DEBUG + qDebug() << "~MyWindow" << hex << window; +#endif XFreeGC(xd->display, gc); XDestroyWindow(xd->display, window); -- cgit v0.12 From 09a75f3dd9a005b648111af6373660c0f48e772f Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 12 Oct 2009 15:27:29 +0200 Subject: Implement mouse double clicks for testlite. --- src/plugins/graphicssystems/testlite/x11util.cpp | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index e4d3e89..fc442a2 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -44,6 +44,7 @@ #include #include +#include #include "x11util.h" #include "qwindowsurface_testlite.h" @@ -385,8 +386,6 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) wmProtocolsAtom, XA_ATOM, 32, PropModeAppend, (unsigned char *) &wmDeleteWindowAtom, 1); - - } MyWindow::~MyWindow() @@ -466,7 +465,25 @@ void MyWindow::setGeometry(int x, int y, int w, int h) void MyWindow::mousePressEvent(XButtonEvent *e) { - windowSurface->handleMouseEvent(QEvent::MouseButtonPress, e); + static long prevTime = 0; + static Window prevWindow; + static int prevX = -999; + static int prevY = -999; + + QEvent::Type type = QEvent::MouseButtonPress; + + if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() + && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { + type = QEvent::MouseButtonDblClick; + prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time + } else { + prevTime = e->time; + } + prevWindow = e->window; + prevX = e->x; + prevY = e->y; + + windowSurface->handleMouseEvent(type, e); } void MyWindow::mouseReleaseEvent(XButtonEvent *e) -- cgit v0.12 From 7d27d9732e1f528396b27022720d60d38fe9717a Mon Sep 17 00:00:00 2001 From: Alexis Menard Date: Wed, 30 Sep 2009 13:57:33 +0200 Subject: Fix auto-test build. Reviewed-by:jesper --- tests/auto/qlistview/tst_qlistview.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp index 499fb0b..d9cab02 100644 --- a/tests/auto/qlistview/tst_qlistview.cpp +++ b/tests/auto/qlistview/tst_qlistview.cpp @@ -59,6 +59,8 @@ #include #endif +#include "../../shared/util.h" + //TESTED_CLASS= //TESTED_FILES= -- cgit v0.12 From ba321e277e392c276c1ff8b32f8fca7d26ed0fbe Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 14 Oct 2009 11:29:18 +0200 Subject: Function keys --- src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index c2ad094..bec0b60 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -475,6 +475,9 @@ static const unsigned int keyTbl[] = { static int lookupCode(unsigned int xkeycode) { + if (xkeycode >= XK_F1 && xkeycode <= XK_F35) + return Qt::Key_F1 + (int(xkeycode) - XK_F1); + const unsigned int *p = keyTbl; while (*p) { if (*p == xkeycode) -- cgit v0.12 From 9a5fce0d7d66e0635678eb129f765b39ea11e600 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 14 Oct 2009 09:29:57 +0200 Subject: Fix some autotest failures and get rid of some compiler warnings --- src/gui/image/qpixmap.cpp | 6 ++++-- src/gui/kernel/qapplication.cpp | 2 +- src/gui/kernel/qapplication_lite.cpp | 20 ++++++++++++++++++++ src/gui/kernel/qwidget.cpp | 15 +++++++++++++-- src/gui/kernel/qwidget_lite.cpp | 3 +++ src/plugins/graphicssystems/testlite/x11util.cpp | 2 ++ tests/auto/qaction/tst_qaction.cpp | 2 +- 7 files changed, 44 insertions(+), 6 deletions(-) diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index 558ae54..21fb23e 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -1689,8 +1689,8 @@ QPixmap QPixmap::transformed(const QMatrix &matrix, Qt::TransformationMode mode) In addition, on Symbian, the QPixmap class supports conversion to and from CFbsBitmap: the toSymbianCFbsBitmap() function creates - CFbsBitmap equivalent to the QPixmap, based on given mode and returns - a CFbsBitmap object. The fromSymbianCFbsBitmap() function returns a + CFbsBitmap equivalent to the QPixmap, based on given mode and returns + a CFbsBitmap object. The fromSymbianCFbsBitmap() function returns a QPixmap that is equivalent to the given bitmap and given mode. \section1 Pixmap Transformations @@ -1874,6 +1874,8 @@ int QPixmap::defaultDepth() return 32; #elif defined(Q_OS_SYMBIAN) return S60->screenDepth; +#elif defined(Q_WS_LITE) + return 32; //LITE: use graphicssystem (we should do that in general) #endif } diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 613dbb5..77e6ea8 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -757,7 +757,7 @@ void QApplicationPrivate::construct( { initResources(); - graphics_system_name = qgetenv("QT_DEFAULT_GRAPHICS_SYSTEM"); + graphics_system_name = QLatin1String(qgetenv("QT_DEFAULT_GRAPHICS_SYSTEM")); qt_is_gui_used = (qt_appType != QApplication::Tty); process_cmdline(); diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index f551228..8c3f7f5 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -477,9 +477,29 @@ void qt_cleanup() #endif QFont::cleanup(); QColormap::cleanup(); + delete QApplicationPrivate::inputContext; + QApplicationPrivate::inputContext = 0; + + QApplicationPrivate::active_window = 0; //### this should not be necessary } +#ifdef QT3_SUPPORT +void QApplication::setMainWidget(QWidget *mainWidget) +{ + QApplicationPrivate::main_widget = mainWidget; + if (QApplicationPrivate::main_widget && windowIcon().isNull() + && QApplicationPrivate::main_widget->testAttribute(Qt::WA_SetWindowIcon)) + setWindowIcon(QApplicationPrivate::main_widget->windowIcon()); +} +#endif + + +//------------------------------------------------------------ +// +// Callback functions for plugins: +// + /*! \a tlw == 0 means that \a ev is in global coords only diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 3217222..1abbd9f 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1444,7 +1444,7 @@ QWidget::~QWidget() } } -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) //### LITE else if (!internalWinId() && isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); #ifdef Q_WS_QWS @@ -2319,7 +2319,10 @@ WId QWidget::effectiveWinId() const return id; QWidget *realParent = nativeParentWidget(); Q_ASSERT(realParent); +#ifndef Q_WS_LITE + //### we really need to implement winId functionality Q_ASSERT(realParent->internalWinId()); +#endif return realParent->internalWinId(); } @@ -4004,6 +4007,9 @@ QWidget *QWidget::window() const */ QWidget *QWidget::nativeParentWidget() const { +#ifdef Q_WS_LITE + return window(); //### we don't have native child widgets yet +#endif QWidget *parent = parentWidget(); while (parent && !parent->internalWinId()) parent = parent->parentWidget(); @@ -10145,6 +10151,11 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) Q_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8), "QWidget::setAttribute(WidgetAttribute, bool)", "QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute"); +#ifdef Q_WS_LITE + //### we don't have native child widgets, and WinId isn't really there yet + if (attribute == Qt::WA_NativeWindow) + return; +#endif #ifdef Q_WS_WIN // ### Don't use PaintOnScreen+paintEngine() to do native painting in 5.0 @@ -11454,7 +11465,7 @@ QWidget *QWidgetPrivate::widgetInNavigationDirection(Direction direction) QWidget *targetWidget = 0; int shortestDistance = INT_MAX; foreach(QWidget *targetCandidate, QApplication::allWidgets()) { - + if (targetCandidate->focusProxy()) //skip if focus proxy set continue; diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 1c48e10..cab8cda 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -78,6 +78,9 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) if ((windowType() == Qt::Popup)) qApp->d_func()->closePopup(this); + //### we don't have proper focus event handling yet + if (this == QApplicationPrivate::active_window) + QApplication::setActiveWindow(0); } void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index fc442a2..41767c9 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -220,7 +220,9 @@ bool MyDisplay::handleEvent(XEvent *xe) } } if (!xw) { +#ifdef MYX11_DEBUG qWarning() << "Unknown window" << hex << xe->xany.window << "received event" << xe->type; +#endif return quit; } diff --git a/tests/auto/qaction/tst_qaction.cpp b/tests/auto/qaction/tst_qaction.cpp index 4aad8ca..1e3b143 100644 --- a/tests/auto/qaction/tst_qaction.cpp +++ b/tests/auto/qaction/tst_qaction.cpp @@ -242,7 +242,7 @@ void tst_QAction::setStandardKeys() QList expected; #if defined(Q_WS_MAC) || defined(Q_OS_SYMBIAN) expected << QKeySequence("CTRL+C"); -#elif defined(Q_WS_WIN) || defined(Q_WS_QWS) +#elif defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_LITE) expected << QKeySequence("CTRL+C") << QKeySequence("CTRL+INSERT"); #else expected << QKeySequence("CTRL+C") << QKeySequence("F16") << QKeySequence("CTRL+INSERT"); -- cgit v0.12 From 58073ea549f50b8de46902e45c111473a5c8d9fa Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 14 Oct 2009 13:26:03 +0200 Subject: Repaint when window is resized. Some of this ought to be done in Qt, and should not be the responsibility of the plugin. --- .../testlite/qwindowsurface_testlite.cpp | 20 +++++++++++++++++--- .../testlite/qwindowsurface_testlite.h | 1 + src/plugins/graphicssystems/testlite/x11util.cpp | 3 +++ 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index bec0b60..087fb1c 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -89,13 +89,26 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const xw->paintEvent(); } -void QTestLiteWindowSurface::setGeometry(const QRect &rect) + +void QTestLiteWindowSurface::geometryChanged(const QRect &rect) { - //qDebug() << "QTestLiteWindowSurface::setGeometry:" << rect << xw->window; QWindowSurface::setGeometry(rect); - if (xw->img.size() != rect.size()) + if (xw->img.size() != rect.size()) { xw->img = QImage(rect.size(), mScreen->format()); + window()->update(); //### this is the wrong place for this... + } + +} + + +void QTestLiteWindowSurface::setGeometry(const QRect &rect) +{ + QRect oldRect = geometry(); + if (rect == oldRect) + return; + + QTestLiteWindowSurface::geometryChanged(rect); //if unchanged ### // xw->setSize(rect.width(), rect.height()); @@ -212,6 +225,7 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) void QTestLiteWindowSurface::handleGeometryChange(int x, int y, int w, int h) { + geometryChanged(QRect(x,y,w,h)); QApplicationPrivate::handleGeometryChange(window(), QRect(x,y,w,h)); } diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index 7edc448..44a8d57 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -62,6 +62,7 @@ public: QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); void setGeometry(const QRect &rect); + void geometryChanged(const QRect &rect); bool scroll(const QRegion &area, int dx, int dy); void beginPaint(const QRegion ®ion); diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 41767c9..d744e28 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -450,6 +450,9 @@ void MyWindow::resizeEvent(XConfigureEvent *e) width = e->width; height = e->height; +#ifdef MYX11_DEBUG + qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height; +#endif windowSurface->handleGeometryChange(xpos, ypos, width, height); } -- cgit v0.12 From 1dcdfda53128e745edc3aaa16e659c273cc77cd7 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 14 Oct 2009 13:56:56 +0200 Subject: Make tooltips work better --- src/plugins/graphicssystems/testlite/x11util.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index d744e28..26076b1 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -640,6 +640,7 @@ Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) bool tool = (type == Qt::Tool || type == Qt::SplashScreen || type == Qt::ToolTip || type == Qt::Drawer); + bool tooltip = (type == Qt::ToolTip); XSetWindowAttributes wsa; @@ -723,7 +724,7 @@ Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) //##### only if initializeWindow??? - if (popup) { // popup widget + if (popup || tooltip) { // popup widget #ifdef MYX11_DEBUG qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; #endif -- cgit v0.12 From 7750f3821c7cd526c33bfa09378378da3980a2e6 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 14 Oct 2009 13:45:21 +0200 Subject: basic support for multiple top level windows in the VNC backend This supports a simple stack of windows, with the most recently created sitting on top. --- .../graphicssystems/vnc/qgraphicssystem_vnc.cpp | 28 ++++++++++++++++++- .../graphicssystems/vnc/qgraphicssystem_vnc.h | 7 +++++ .../graphicssystems/vnc/qwindowsurface_vnc.cpp | 32 +++++++++++++++------- .../graphicssystems/vnc/qwindowsurface_vnc.h | 3 ++ 4 files changed, 59 insertions(+), 11 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp index 9a7c198..b50e5b5 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -45,6 +45,7 @@ #include #include +#include @@ -77,6 +78,23 @@ QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() void QVNCGraphicsSystemScreen::setDirty(const QRect &rect) { + QPainter compositePainter(mScreenImage); + + // Blank the affected area, just in case there's nothing to display here + // Question - What's the background color? + // Another option would be to push a base level window that is the size of the display + + compositePainter.fillRect(rect, Qt::black); + + for (int i = 0; i < windowStack.length(); i++) { + QRect windowRect = windowStack[i]->geometry(); + QRect intersect = windowRect.intersected(rect); + QRect windowIntersect = intersect.translated(-windowRect.left(), + -windowRect.top()); + compositePainter.drawImage(intersect, windowStack[i]->image(), + windowIntersect); + } + d_ptr->setDirty(rect); } @@ -104,6 +122,14 @@ QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. - return new QVNCWindowSurface + QVNCWindowSurface * newSurface = new QVNCWindowSurface (const_cast(this), mPrimaryScreen, widget); + mPrimaryScreen->addWindowSurface(newSurface); + return newSurface; +} + +void QVNCGraphicsSystemScreen::removeWindowSurface(QVNCWindowSurface * surface) +{ + windowStack.removeOne(surface); + setDirty(surface->geometry()); } diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h index 375b467..d593096 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h @@ -43,6 +43,7 @@ #define QGRAPHICSSYSTEM_VNC_H #include +#include "qwindowsurface_vnc.h" QT_BEGIN_NAMESPACE @@ -68,6 +69,9 @@ public: void setDirty(const QRect &rect); + void removeWindowSurface(QVNCWindowSurface * surface); + void addWindowSurface(QVNCWindowSurface * surface) { windowStack.append(surface); } + public: QRect mGeometry; int mDepth; @@ -77,6 +81,8 @@ public: QVNCServer *server; QVNCGraphicsSystemScreenPrivate *d_ptr; +private: + QList windowStack; }; class QVNCGraphicsSystemPrivate; @@ -92,6 +98,7 @@ public: QList screens() const { return mScreens; } + private: QVNCGraphicsSystemScreen *mPrimaryScreen; QList mScreens; diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp index 07668fb..af171f5 100644 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp @@ -53,15 +53,17 @@ QVNCWindowSurface::QVNCWindowSurface(QVNCGraphicsSystem *graphicsSystem, : QWindowSurface(window), mScreen(screen) { + mImage = QImage(window->size(), mScreen->format()); } QVNCWindowSurface::~QVNCWindowSurface() { + mScreen->removeWindowSurface(this); } QPaintDevice *QVNCWindowSurface::paintDevice() { - return mScreen->mScreenImage; + return &mImage; } void QVNCWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) @@ -69,20 +71,30 @@ void QVNCWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoi Q_UNUSED(widget); Q_UNUSED(offset); - QRect rect = geometry(); - QPoint topLeft = rect.topLeft(); - - mScreen->setDirty(region.boundingRect()); - // server->flush(region); - + QRect currentGeometry = geometry(); + // If this is a move, redraw the previous location + if (oldGeometry != currentGeometry) { + mScreen->setDirty(oldGeometry); + oldGeometry = currentGeometry; + } + + QRect dirtyClient = region.boundingRect(); + QRect dirtyRegion(currentGeometry.left() + dirtyClient.left(), + currentGeometry.top() + dirtyClient.top(), + dirtyClient.width(), + dirtyClient.height()); + mScreen->setDirty(dirtyRegion); } -void QVNCWindowSurface::setGeometry(const QRect &) +void QVNCWindowSurface::setGeometry(const QRect &rect) { + // store previous geometry for screen update + oldGeometry = geometry(); -// any size you like as long as it's full-screen... + // change the widget's QImage if this is a resize + if (mImage.size() != rect.size()) + mImage = QImage(rect.size(), mScreen->format()); - QRect rect(mScreen->availableGeometry()); QApplicationPrivate::handleGeometryChange(this->window(), rect); QWindowSurface::setGeometry(rect); diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h index 3fd1f12..b9af493 100644 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h @@ -64,10 +64,13 @@ public: void beginPaint(const QRegion ®ion); void endPaint(const QRegion ®ion); + inline const QImage image() { return mImage; } private: QVNCGraphicsSystem *mGraphicsSystem; QVNCGraphicsSystemScreen *mScreen; + QRect oldGeometry; + QImage mImage; }; QT_END_NAMESPACE -- cgit v0.12 From eb9c3bee3cef8660cb2a05012f41f183a64c40de Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 15 Oct 2009 15:31:38 +0200 Subject: Fix popup mouse event delivery and start implementing enter/leave events If a popup has children, make sure to deliver mouse event to the child instead of the window. --- src/gui/kernel/qapplication_lite.cpp | 71 ++++++++++++---------- src/gui/kernel/qapplication_p.h | 2 + .../testlite/qwindowsurface_testlite.cpp | 8 +++ .../testlite/qwindowsurface_testlite.h | 2 + src/plugins/graphicssystems/testlite/x11util.cpp | 42 +++++++++++-- src/plugins/graphicssystems/testlite/x11util.h | 5 +- 6 files changed, 91 insertions(+), 39 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 8c3f7f5..884cfac 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -451,9 +451,6 @@ void qt_init(QApplicationPrivate *priv, int type) } #endif - - qDebug() << pluginList; - init_plugins(pluginList); QColormap::initialize(); @@ -507,6 +504,17 @@ void QApplication::setMainWidget(QWidget *mainWidget) */ + +void QApplicationPrivate::handleEnterEvent(QWidget *tlw) +{ + dispatchEnterLeave(tlw, 0); +} + +void QApplicationPrivate::handleLeaveEvent(QWidget *tlw) +{ + dispatchEnterLeave(0, tlw); +} + void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) { // qDebug() << "handleMouseEvent" << tlw << ev.pos() << hex << ev.buttons(); @@ -516,15 +524,15 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) QPoint localPoint = ev.pos(); QPoint globalPoint = ev.globalPos(); bool trustLocalPoint = !!tlw; //is there something the local point can be local to? - QWidget *mouseWidget = tlw; + QWidget *mouseWindow = tlw; qt_last_x = globalPoint.x(); qt_last_y = globalPoint.y(); if (self->inPopupMode()) { //popup mouse handling is magical... - mouseWidget = qApp->activePopupWidget(); - trustLocalPoint = (mouseWidget == tlw); + mouseWindow = qApp->activePopupWidget(); + trustLocalPoint = (mouseWindow == tlw); //### how should popup mode and implicit mouse grab interact? @@ -532,41 +540,40 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) //even if we're blocked by modality, we should deliver the mouse release event.. //### this code is not completely correct: multiple buttons can be pressed simultaneously if (!(implicit_mouse_grabber && ev.buttons() == Qt::NoButton)) { - //qDebug() << "modal blocked mouse event to" << tlw; + qDebug() << "modal blocked mouse event to" << tlw; return; } - } else { - QWidget *mouseWindow = tlw; + } - // find the tlw if we didn't get it from the plugin - if (!mouseWindow) { - mouseWindow = QApplication::topLevelAt(globalPoint); - } + // find the tlw if we didn't get it from the plugin + if (!mouseWindow) { + mouseWindow = QApplication::topLevelAt(globalPoint); + } - if (!mouseWindow && !implicit_mouse_grabber) - return; //nowhere to send it + if (!mouseWindow && !implicit_mouse_grabber) + return; //nowhere to send it - // which child should have it? - mouseWidget = mouseWindow; - if (mouseWindow) { - QWidget *w = mouseWindow->childAt(ev.pos()); - if (w) { - mouseWidget = w; - } + // which child should have it? + QWidget *mouseWidget = mouseWindow; + if (mouseWindow) { + QWidget *w = mouseWindow->childAt(ev.pos()); + if (w) { + mouseWidget = w; } + } - //handle implicit mouse grab - if (ev.type() == QEvent::MouseButtonPress && !implicit_mouse_grabber) { - implicit_mouse_grabber = mouseWidget; + //handle implicit mouse grab + if (ev.type() == QEvent::MouseButtonPress && !implicit_mouse_grabber) { + implicit_mouse_grabber = mouseWidget; - Q_ASSERT(mouseWindow); - mouseWindow->activateWindow(); //focus - } else if (implicit_mouse_grabber) { - mouseWidget = implicit_mouse_grabber; - mouseWindow = mouseWidget->window(); - trustLocalPoint = (mouseWindow == tlw); - } + Q_ASSERT(mouseWindow); + mouseWindow->activateWindow(); //focus + } else if (implicit_mouse_grabber) { + mouseWidget = implicit_mouse_grabber; + mouseWindow = mouseWidget->window(); + trustLocalPoint = (mouseWindow == tlw); } + Q_ASSERT(mouseWidget); if (trustLocalPoint) { diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 52d0642..a5496d6 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -566,6 +566,8 @@ public: static void handleGeometryChange(QWidget *tlw, const QRect &newRect); static void handleCloseEvent(QWidget *tlw); static void handleWheelEvent(QWidget *tlw, QWheelEvent &e); + static void handleEnterEvent(QWidget *tlw); + static void handleLeaveEvent(QWidget *tlw); #endif #if defined(Q_WS_S60) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 087fb1c..e0b9b9f 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -236,7 +236,15 @@ void QTestLiteWindowSurface::handleCloseEvent() } +void QTestLiteWindowSurface::handleEnterEvent() +{ + QApplicationPrivate::handleEnterEvent(window()); +} +void QTestLiteWindowSurface::handleLeaveEvent() +{ + QApplicationPrivate::handleLeaveEvent(window()); +} //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index 44a8d57..af57c0b 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -72,6 +72,8 @@ public: void handleKeyEvent(QEvent::Type, void *); void handleGeometryChange(int x, int y, int w, int h); void handleCloseEvent(); + void handleEnterEvent(); + void handleLeaveEvent(); Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); Qt::WindowFlags windowFlags() const; diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 26076b1..0c6f3c5 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -252,7 +252,6 @@ bool MyDisplay::handleEvent(XEvent *xe) if (xw) xw->resizeEvent(&xe->xconfigure); break; -#if 1 case ButtonPress: xw->mousePressEvent(&xe->xbutton); @@ -273,11 +272,18 @@ bool MyDisplay::handleEvent(XEvent *xe) case XKeyRelease: xw->keyReleaseEvent(&xe->xkey); break; -#endif + + case EnterNotify: + xw->enterEvent(&xe->xcrossing); + break; + + case LeaveNotify: + xw->leaveEvent(&xe->xcrossing); + break; default: #ifdef MYX11_DEBUG - qDebug() << "Other X event" << hex << xe->type; + qDebug() << hex << xe->xany.window << "Other X event" << xe->type; #endif break; } @@ -285,6 +291,7 @@ bool MyDisplay::handleEvent(XEvent *xe) }; + MyDisplay::MyDisplay() { char *display_name = getenv("DISPLAY"); @@ -379,6 +386,7 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) XSetWindowBackgroundPixmap(xd->display, window, XNone); XSelectInput(xd->display, window, ExposureMask | KeyPressMask | KeyReleaseMask | + EnterWindowMask | LeaveWindowMask | FocusChangeMask | PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | StructureNotifyMask); @@ -456,18 +464,38 @@ void MyWindow::resizeEvent(XConfigureEvent *e) windowSurface->handleGeometryChange(xpos, ypos, width, height); } - +#if 0 void MyWindow::setSize(int w, int h) { XResizeWindow(xd->display, window, w, h); } +#endif void MyWindow::setGeometry(int x, int y, int w, int h) { +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::setGeometry" << hex << window << dec << x << y << w << h; +#endif XMoveResizeWindow(xd->display, window, x, y, w, h); } +void MyWindow::enterEvent(XCrossingEvent *e) +{ +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::enterEvent" << hex << window; +#endif + windowSurface->handleEnterEvent(); +} + +void MyWindow::leaveEvent(XCrossingEvent *e) +{ +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::enterEvent" << hex << window; +#endif + windowSurface->handleLeaveEvent(); +} + void MyWindow::mousePressEvent(XButtonEvent *e) { static long prevTime = 0; @@ -623,7 +651,7 @@ Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) } #ifdef MYX11_DEBUG - qDebug() << "MyWindow::setWindowFlags" << hex << mwm_hint_atom << "flags" << flags; + qDebug() << "MyWindow::setWindowFlags" << hex << window << "flags" << flags; #endif Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); @@ -746,7 +774,9 @@ Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) void MyWindow::setVisible(bool visible) { -// qDebug() << "MyWindow::setVisible" << visible << hex << window; +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::setVisible" << visible << hex << window; +#endif if (visible) XMapWindow(xd->display, window); else diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index fbd9ef7..39fc331 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -96,10 +96,13 @@ public: void keyPressEvent(XKeyEvent*); void keyReleaseEvent(XKeyEvent*); + void enterEvent(XCrossingEvent*); + void leaveEvent(XCrossingEvent*); + void closeEvent(); void paintEvent(); void resizeEvent(XConfigureEvent *configure_event); - void setSize(int w, int h); +// void setSize(int w, int h); void setGeometry(int x, int y, int w, int h); GC createGC(); -- cgit v0.12 From 3fc6f2c08d9648afc489175363a335e56b3f6526 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 15 Oct 2009 17:29:02 +0200 Subject: Allow VNC top level widgits to be hidden via QGraphicsSystemScreen::setVisible() --- src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp | 4 ++++ src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp | 8 +++++++- src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h | 4 +++- 3 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp index b50e5b5..52f354a 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -87,10 +87,14 @@ void QVNCGraphicsSystemScreen::setDirty(const QRect &rect) compositePainter.fillRect(rect, Qt::black); for (int i = 0; i < windowStack.length(); i++) { + if (!windowStack[i]->visible()) + continue; QRect windowRect = windowStack[i]->geometry(); QRect intersect = windowRect.intersected(rect); QRect windowIntersect = intersect.translated(-windowRect.left(), -windowRect.top()); + if (intersect.isNull()) + continue; compositePainter.drawImage(intersect, windowStack[i]->image(), windowIntersect); } diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp index af171f5..a3bce49 100644 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp @@ -51,7 +51,8 @@ QT_BEGIN_NAMESPACE QVNCWindowSurface::QVNCWindowSurface(QVNCGraphicsSystem *graphicsSystem, QVNCGraphicsSystemScreen *screen, QWidget *window) : QWindowSurface(window), - mScreen(screen) + mScreen(screen), + visibleFlag(false) { mImage = QImage(window->size(), mScreen->format()); } @@ -115,4 +116,9 @@ void QVNCWindowSurface::endPaint(const QRegion ®ion) Q_UNUSED(region); } +void QVNCWindowSurface::setVisible(bool visible) +{ + visibleFlag = visible; + mScreen->setDirty(geometry()); +} QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h index b9af493..477fe1b 100644 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h @@ -65,12 +65,14 @@ public: void beginPaint(const QRegion ®ion); void endPaint(const QRegion ®ion); inline const QImage image() { return mImage; } - + void setVisible(bool visible); + bool visible() { return visibleFlag; } private: QVNCGraphicsSystem *mGraphicsSystem; QVNCGraphicsSystemScreen *mScreen; QRect oldGeometry; QImage mImage; + bool visibleFlag; }; QT_END_NAMESPACE -- cgit v0.12 From bfdba4c5099bf57e0ec723b1b054ea8298e27f8e Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 16 Oct 2009 13:33:02 +0200 Subject: Adjustable screen size for VNC --- src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp index 52f354a..a97c594 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -53,7 +53,16 @@ QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() : mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) { - mGeometry = QRect(0,0,800, 600); + int w = 800; + int h = 600; + int ew, eh; + const char *str; + if ((str=::getenv("QT_VNC_SIZE")) && sscanf(str,"%dx%d",&ew,&eh)==2) { + w = ew; + h = eh; + } + + mGeometry = QRect(0,0,w, h); mDepth = 32; mFormat = QImage::Format_RGB32; -- cgit v0.12 From d4cbb6936131867073fc026d3c4697af36a0e2d4 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 16 Oct 2009 11:56:23 +0200 Subject: One more fix for popup mouse events If the mouse handler doesn't provide local coordinates, we have to map before finding the child widget --- src/gui/kernel/qapplication_lite.cpp | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 884cfac..b3ad06f 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -517,13 +517,12 @@ void QApplicationPrivate::handleLeaveEvent(QWidget *tlw) void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) { -// qDebug() << "handleMouseEvent" << tlw << ev.pos() << hex << ev.buttons(); + // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); static QWidget *implicit_mouse_grabber=0; QPoint localPoint = ev.pos(); QPoint globalPoint = ev.globalPos(); - bool trustLocalPoint = !!tlw; //is there something the local point can be local to? QWidget *mouseWindow = tlw; qt_last_x = globalPoint.x(); @@ -532,8 +531,8 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) if (self->inPopupMode()) { //popup mouse handling is magical... mouseWindow = qApp->activePopupWidget(); - trustLocalPoint = (mouseWindow == tlw); + implicit_mouse_grabber = 0; //### how should popup mode and implicit mouse grab interact? } else if (tlw && app_do_modal && !qt_try_modal(tlw, &ev) ) { @@ -553,10 +552,15 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) if (!mouseWindow && !implicit_mouse_grabber) return; //nowhere to send it + if (mouseWindow && mouseWindow != tlw) { + //we did not get a sensible localPoint from the window system, so let's calculate it + localPoint = mouseWindow->mapFromGlobal(globalPoint); + } + // which child should have it? QWidget *mouseWidget = mouseWindow; if (mouseWindow) { - QWidget *w = mouseWindow->childAt(ev.pos()); + QWidget *w = mouseWindow->childAt(localPoint); if (w) { mouseWidget = w; } @@ -571,20 +575,14 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) } else if (implicit_mouse_grabber) { mouseWidget = implicit_mouse_grabber; mouseWindow = mouseWidget->window(); - trustLocalPoint = (mouseWindow == tlw); + if (mouseWindow != tlw) + localPoint = mouseWindow->mapFromGlobal(globalPoint); } Q_ASSERT(mouseWidget); - if (trustLocalPoint) { - // we have a sensible localPoint, so we prefer that, since the - // window system may know more than we do - localPoint = mouseWidget->mapFrom(tlw, localPoint); - } else { - // we don't want to map a local point from a different toplevel - // and we definitely don't want to map from the null pointer - localPoint = mouseWidget->mapFromGlobal(globalPoint); - } + //localPoint is local to mouseWindow, but it needs to be local to mouseWidget + localPoint = mouseWidget->mapFrom(mouseWindow, localPoint); if (ev.buttons() == Qt::NoButton) { //qDebug() << "resetting mouse grabber"; -- cgit v0.12 From 59cab5edd7db8a8e8d16ebbb89329eafb5147b46 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 16 Oct 2009 16:33:43 +0200 Subject: Implement enter/leave events for Lighthouse --- src/gui/kernel/qapplication.cpp | 6 +++--- src/gui/kernel/qapplication_lite.cpp | 12 +++++++++++- src/gui/kernel/qapplication_p.h | 2 +- src/gui/kernel/qwidget.cpp | 14 +++++++------- 4 files changed, 22 insertions(+), 12 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 191cdf4..74f2971 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -498,7 +498,7 @@ inline bool QApplicationPrivate::isAlien(QWidget *widget) return false; #if defined(Q_WS_MAC) // Fake alien behavior on the Mac :) return !widget->isWindow() && widget->window()->testAttribute(Qt::WA_DontShowOnScreen); -#elif defined(Q_WS_QWS) +#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) return !widget->isWindow() # ifdef Q_BACKINGSTORE_SUBSURFACES && !(widget->d_func()->maybeTopData() && widget->d_func()->maybeTopData()->windowSurface) @@ -3004,7 +3004,7 @@ bool QApplicationPrivate::sendMouseEvent(QWidget *receiver, QMouseEvent *event, return result; } -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) /* This function should only be called when the widget changes visibility, i.e. when the \a widget is shown, hidden or deleted. This function does nothing @@ -3016,7 +3016,7 @@ extern QWidget *qt_button_down; void QApplicationPrivate::sendSyntheticEnterLeave(QWidget *widget) { #ifndef QT_NO_CURSOR -#ifdef Q_WS_QWS +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) if (!widget || widget->isWindow()) return; #else diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index b3ad06f..0ddcfab 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -72,6 +72,7 @@ extern QWidgetList *qt_modal_stack; // stack of modal widgets int qt_last_x = 0; int qt_last_y = 0; +QPointer qt_last_mouse_receiver = 0; QString QApplicationPrivate::appName() const { @@ -508,11 +509,15 @@ void QApplication::setMainWidget(QWidget *mainWidget) void QApplicationPrivate::handleEnterEvent(QWidget *tlw) { dispatchEnterLeave(tlw, 0); + qt_last_mouse_receiver = tlw; } void QApplicationPrivate::handleLeaveEvent(QWidget *tlw) { - dispatchEnterLeave(0, tlw); + dispatchEnterLeave(0, qt_last_mouse_receiver); + if (!tlw->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen + dispatchEnterLeave(0, tlw); + qt_last_mouse_receiver = 0; } void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) @@ -589,6 +594,11 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) implicit_mouse_grabber = 0; } + if (mouseWidget != qt_last_mouse_receiver) { + dispatchEnterLeave(mouseWidget, qt_last_mouse_receiver); + qt_last_mouse_receiver = mouseWidget; + } + // Remember, we might enter a modal event loop when sending the event, // so think carefully before adding code below this point. diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index a5496d6..2622f1c 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -504,7 +504,7 @@ public: static TUint resolveS60ScanCode(TInt scanCode, TUint keysym); QSet nativeWindows; #endif -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_LITE) void sendSyntheticEnterLeave(QWidget *widget); #endif diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 88d90ee..4d8386b 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1440,13 +1440,13 @@ QWidget::~QWidget() } } -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) //### LITE +#if defined(Q_WS_WIN) || defined(Q_WS_X11) else if (!internalWinId() && isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); -#ifdef Q_WS_QWS - } else if (isVisible()) { + } +#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) + else if (isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); -#endif } #endif @@ -7200,7 +7200,7 @@ void QWidgetPrivate::hide_helper() // next bit tries to move the focus if the focus widget is now // hidden. if (wasVisible) { -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_LITE) qApp->d_func()->sendSyntheticEnterLeave(q); #endif @@ -7332,7 +7332,7 @@ void QWidget::setVisible(bool visible) d->show_helper(); -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_LITE) qApp->d_func()->sendSyntheticEnterLeave(this); #endif } @@ -7447,7 +7447,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) widget->d_func()->hide_sys(); } } -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_LITE) qApp->d_func()->sendSyntheticEnterLeave(widget); #endif #ifndef QT_NO_ACCESSIBILITY -- cgit v0.12 From 4a77f349127eca7e5c46ba1eafba20ebb8736ebb Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 19 Oct 2009 13:54:43 +0200 Subject: consolidate repainting of multiple QRects for the VNC display Schedule repainting of the VNC display backing store to allow multiple regions to be repainted in a single go. Requests are scheduled using a 0 timer. --- .../graphicssystems/vnc/qgraphicssystem_vnc.cpp | 61 +++++++++++++++------- .../graphicssystems/vnc/qgraphicssystem_vnc.h | 20 ++++++- 2 files changed, 61 insertions(+), 20 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp index a97c594..6fe174c 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -47,7 +47,7 @@ #include #include - +#include QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() @@ -71,12 +71,20 @@ QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() mScreenImage = new QImage(mGeometry.size(), mFormat); d_ptr = new QVNCGraphicsSystemScreenPrivate(this); + + helper = new QVNCGraphicsSystemScreenTimerHelper(this); + repaintTimer = new QTimer(); + repaintTimer->setSingleShot(true); + repaintTimer->setInterval(0); + QObject::connect(repaintTimer, SIGNAL(timeout()), helper, SLOT(fireSlot())); } QVNCGraphicsSystemScreen::~QVNCGraphicsSystemScreen() { delete mScreenImage; + delete repaintTimer; + delete helper; } QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() @@ -87,28 +95,43 @@ QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() void QVNCGraphicsSystemScreen::setDirty(const QRect &rect) { + repaintRegion += rect; + if (!repaintTimer->isActive()) { + repaintTimer->start(); + } +} + +void QVNCGraphicsSystemScreen::doRedraw() +{ + if (repaintRegion.isEmpty()) + return; QPainter compositePainter(mScreenImage); - // Blank the affected area, just in case there's nothing to display here - // Question - What's the background color? - // Another option would be to push a base level window that is the size of the display - - compositePainter.fillRect(rect, Qt::black); - - for (int i = 0; i < windowStack.length(); i++) { - if (!windowStack[i]->visible()) - continue; - QRect windowRect = windowStack[i]->geometry(); - QRect intersect = windowRect.intersected(rect); - QRect windowIntersect = intersect.translated(-windowRect.left(), - -windowRect.top()); - if (intersect.isNull()) - continue; - compositePainter.drawImage(intersect, windowStack[i]->image(), - windowIntersect); + QVector rects = repaintRegion.rects(); + + for (int rectIndex = 0; rectIndex < repaintRegion.numRects(); rectIndex++) { + QRect rect = rects[rectIndex]; + // Blank the affected area, just in case there's nothing to display + // Question - What's the background color? + // Another option - a base level window that is the size of the display + compositePainter.fillRect(rect, Qt::black); + for (int i = 0; i < windowStack.length(); i++) { + if (!windowStack[i]->visible()) + continue; + QRect windowRect = windowStack[i]->geometry(); + QRect intersect = windowRect.intersected(rect); + QRect windowIntersect = intersect.translated(-windowRect.left(), + -windowRect.top()); + if (intersect.isNull()) + continue; + compositePainter.drawImage(intersect, windowStack[i]->image(), + windowIntersect); + d_ptr->setDirty(rect); + } + } - d_ptr->setDirty(rect); + repaintRegion = QRegion(); } diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h index d593096..497bd23 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h @@ -50,9 +50,10 @@ QT_BEGIN_NAMESPACE class QVNCServer; class QVNCDirtyMap; - class QVNCGraphicsSystemScreenPrivate; +class QVNCGraphicsSystemScreenTimerHelper; + class QVNCGraphicsSystemScreen : public QGraphicsSystemScreen { public: @@ -83,6 +84,23 @@ public: QVNCGraphicsSystemScreenPrivate *d_ptr; private: QList windowStack; + QRegion repaintRegion; + QTimer * repaintTimer; + QVNCGraphicsSystemScreenTimerHelper * helper; + void doRedraw(); + friend class QVNCGraphicsSystemScreenTimerHelper; +}; + +class QVNCGraphicsSystemScreenTimerHelper : public QObject +{ + Q_OBJECT +public: + QVNCGraphicsSystemScreenTimerHelper(QVNCGraphicsSystemScreen * s) + { screen = s; } +public slots: + void fireSlot() { screen->doRedraw(); } +private: + QVNCGraphicsSystemScreen * screen; }; class QVNCGraphicsSystemPrivate; -- cgit v0.12 From 950dc68999454fa3873a6b5c5a695529d02a57c4 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 19 Oct 2009 13:54:43 +0200 Subject: consolidate repainting of multiple QRects for the VNC display Schedule repainting of the VNC display backing store to allow multiple regions to be repainted in a single go. Requests are scheduled using a 0 timer. --- src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp index 6fe174c..95e6641 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -126,9 +126,8 @@ void QVNCGraphicsSystemScreen::doRedraw() continue; compositePainter.drawImage(intersect, windowStack[i]->image(), windowIntersect); - d_ptr->setDirty(rect); } - + d_ptr->setDirty(rect); } repaintRegion = QRegion(); -- cgit v0.12 From c0395ffd43858e700e2f9015b892c2e978ee8881 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 22 Oct 2009 16:01:48 +0200 Subject: Simplistic showMaximized/showFullScreen implementation --- src/gui/kernel/qwidget_lite.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index cab8cda..d5e4ac2 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -46,6 +46,7 @@ #include "private/qwidget_p.h" #include "private/qgraphicssystem_p.h" #include "private/qapplication_p.h" +#include "qdesktopwidget.h" QT_BEGIN_NAMESPACE @@ -315,12 +316,21 @@ void QWidgetPrivate::hide_sys() void QWidgetPrivate::setMaxWindowState_helper() { - // XXX + setFullScreenSize_helper(); //### decoration size } void QWidgetPrivate::setFullScreenSize_helper() { - // XXX + Q_Q(QWidget); + + const uint old_state = data.in_set_window_state; + data.in_set_window_state = 1; + + const QRect screen = qApp->desktop()->screenGeometry(qApp->desktop()->screenNumber(q)); + q->move(screen.topLeft()); + q->resize(screen.size()); + + data.in_set_window_state = old_state; } static Qt::WindowStates effectiveState(Qt::WindowStates state) -- cgit v0.12 From 67475f1f482cfb90c357f9e6d96592a1a29f8e7c Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 22 Oct 2009 16:02:36 +0200 Subject: WinId for toplevel windows. --- src/gui/kernel/qwidget_lite.cpp | 20 ++++++++++++++------ src/gui/painting/qwindowsurface.cpp | 6 ++++++ src/gui/painting/qwindowsurface_p.h | 1 + .../testlite/qwindowsurface_testlite.cpp | 8 ++++++++ .../testlite/qwindowsurface_testlite.h | 1 + 5 files changed, 30 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index d5e4ac2..cbda042 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -58,15 +58,23 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool /*destro Q_UNUSED(initializeWindow); // XXX - Qt::WindowFlags flags = data.window_flags; -#if 1 + if (!(flags & Qt::Window) || q->windowType() == Qt::Desktop) + return; // we only care about real toplevels + QWindowSurface *surface = q->windowSurface(); - if (surface && (flags & Qt::Window)) - data.window_flags = surface->setWindowFlags(data.window_flags); -#endif -// qDebug() << "create_sys" << q; + + if (!surface) + surface = createDefaultWindowSurface(); + + Q_ASSERT(surface); + + data.window_flags = surface->setWindowFlags(data.window_flags); + + setWinId(surface->winId()); + + qDebug() << "create_sys" << q << q->internalWinId(); } void QWidget::destroy(bool destroyWindow, bool destroySubWindows) diff --git a/src/gui/painting/qwindowsurface.cpp b/src/gui/painting/qwindowsurface.cpp index 8add040..1b0a2ef 100644 --- a/src/gui/painting/qwindowsurface.cpp +++ b/src/gui/painting/qwindowsurface.cpp @@ -378,6 +378,12 @@ void QWindowSurface::setVisible(bool visible) Q_UNUSED(visible); } + +WId QWindowSurface::winId() const +{ + return WId(0); +} + #endif QT_END_NAMESPACE diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h index a84c461..88cc8ba 100644 --- a/src/gui/painting/qwindowsurface_p.h +++ b/src/gui/painting/qwindowsurface_p.h @@ -93,6 +93,7 @@ public: virtual void setVisible(bool visible); virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); virtual Qt::WindowFlags windowFlags() const; + virtual WId winId() const; #endif bool hasStaticContentsSupport() const; diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index e0b9b9f..b14efb8 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -568,4 +568,12 @@ void QTestLiteWindowSurface::setVisible(bool visible) } +WId QTestLiteWindowSurface::winId() const +{ + if (xw) + return (WId) xw->window; + else + return WId(0); +} + QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index af57c0b..59db81f 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -78,6 +78,7 @@ public: Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); Qt::WindowFlags windowFlags() const; void setVisible(bool visible); + WId winId() const; private: QTestLiteGraphicsSystem *mGraphicsSystem; -- cgit v0.12 From 1ac68040623df0ba1feaa96b5056c82e75b2faa9 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 22 Oct 2009 16:12:07 +0200 Subject: Remove debug output --- src/gui/kernel/qwidget_lite.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index cbda042..1eb93d3 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -74,7 +74,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool /*destro setWinId(surface->winId()); - qDebug() << "create_sys" << q << q->internalWinId(); +// qDebug() << "create_sys" << q << q->internalWinId(); } void QWidget::destroy(bool destroyWindow, bool destroySubWindows) -- cgit v0.12 From 14832f985044a7b978c68cdbdcc466f32aacb71d Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 30 Oct 2009 16:42:38 +0100 Subject: lighthouse VNC cursor support --- .../graphicssystems/vnc/qgraphicssystem_vnc.cpp | 25 +- .../graphicssystems/vnc/qgraphicssystem_vnc.h | 5 +- src/plugins/graphicssystems/vnc/qvnccursor.cpp | 689 +++++++++++++++++++++ src/plugins/graphicssystems/vnc/qvnccursor.h | 100 +++ src/plugins/graphicssystems/vnc/qvncserver.cpp | 12 +- src/plugins/graphicssystems/vnc/qvncserver.h | 2 + .../graphicssystems/vnc/qwindowsurface_vnc.cpp | 1 + src/plugins/graphicssystems/vnc/vnc.pro | 2 + 8 files changed, 829 insertions(+), 7 deletions(-) create mode 100644 src/plugins/graphicssystems/vnc/qvnccursor.cpp create mode 100644 src/plugins/graphicssystems/vnc/qvnccursor.h diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp index 95e6641..98e994c 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -49,6 +49,9 @@ #include +#include + +#include "qvnccursor.h" QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() : mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) @@ -77,6 +80,9 @@ QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() repaintTimer->setSingleShot(true); repaintTimer->setInterval(0); QObject::connect(repaintTimer, SIGNAL(timeout()), helper, SLOT(fireSlot())); + + cursor = new QVNCCursor(d_ptr->vncServer, this); + d_ptr->vncServer->setCursor(cursor); } @@ -103,8 +109,11 @@ void QVNCGraphicsSystemScreen::setDirty(const QRect &rect) void QVNCGraphicsSystemScreen::doRedraw() { + repaintRegion += cursor->dirtyRect(); + if (repaintRegion.isEmpty()) return; + QPainter compositePainter(mScreenImage); QVector rects = repaintRegion.rects(); @@ -127,9 +136,14 @@ void QVNCGraphicsSystemScreen::doRedraw() compositePainter.drawImage(intersect, windowStack[i]->image(), windowIntersect); } - d_ptr->setDirty(rect); } + QRect pointerRect = cursor->drawCursor(compositePainter); + repaintRegion += pointerRect; + rects = repaintRegion.rects(); + for (int i = 0; i < rects.size(); i ++) + d_ptr->setDirty(rects[i]); + repaintRegion = QRegion(); } @@ -141,8 +155,8 @@ QVNCGraphicsSystem::QVNCGraphicsSystem() mPrimaryScreen = new QVNCGraphicsSystemScreen(); - int dw = mPrimaryScreen->geometry().width(); - int dh = mPrimaryScreen->geometry().height(); + //int dw = mPrimaryScreen->geometry().width(); + //int dh = mPrimaryScreen->geometry().height(); mScreens.append(mPrimaryScreen); @@ -168,3 +182,8 @@ void QVNCGraphicsSystemScreen::removeWindowSurface(QVNCWindowSurface * surface) windowStack.removeOne(surface); setDirty(surface->geometry()); } + +void QVNCGraphicsSystemScreen::pointerEvent(QMouseEvent & me) +{ + QApplicationPrivate::handleMouseEvent(0, me); +} diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h index 497bd23..eb48f86 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h @@ -44,6 +44,7 @@ #include #include "qwindowsurface_vnc.h" +#include "qvnccursor.h" QT_BEGIN_NAMESPACE @@ -72,6 +73,7 @@ public: void removeWindowSurface(QVNCWindowSurface * surface); void addWindowSurface(QVNCWindowSurface * surface) { windowStack.append(surface); } + void pointerEvent(QMouseEvent & me); public: QRect mGeometry; @@ -79,7 +81,6 @@ public: QImage::Format mFormat; QSize mPhysicalSize; QImage *mScreenImage; - QVNCServer *server; QVNCGraphicsSystemScreenPrivate *d_ptr; private: @@ -89,6 +90,8 @@ private: QVNCGraphicsSystemScreenTimerHelper * helper; void doRedraw(); friend class QVNCGraphicsSystemScreenTimerHelper; + + QVNCCursor * cursor; }; class QVNCGraphicsSystemScreenTimerHelper : public QObject diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.cpp b/src/plugins/graphicssystems/vnc/qvnccursor.cpp new file mode 100644 index 0000000..111ee3c --- /dev/null +++ b/src/plugins/graphicssystems/vnc/qvnccursor.cpp @@ -0,0 +1,689 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include + +#include + +#include "qvnccursor.h" +#include "qvncserver.h" +#include "qgraphicssystem_vnc.h" + +QT_BEGIN_NAMESPACE + +QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) + :useVncCursor(false), currentRect(QRect()), + prevRect(QRect()), server(srvr), screen(scr) +{ + d_ptr = new QVNCCursorPrivate(0, 0, 0, 0, 0, 0); +} + +void QVNCCursor::setCursorMode(bool vnc) +{ + if (vnc == useVncCursor) + return; + if (vnc) { + screen->setDirty(prevRect); + prevRect = QRect(); + sendClientCursor(); + } else { + clearClientCursor(); + } + useVncCursor = vnc; +} + +void QVNCCursor::setCursor(Qt::CursorShape shape) +{ + d_ptr->set(shape); + if (useVncCursor) { + sendClientCursor(); + } +} + +void QVNCCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) +{ + d_ptr->set(data, mask, width, height, hotX, hotY); + if (useVncCursor) { + sendClientCursor(); + } +} + +QRect QVNCCursor::dirtyRect() +{ + if (!useVncCursor) { + QRect rect = prevRect; + prevRect = QRect(); + return rect; + } + return QRect(); +} + +QRect QVNCCursor::drawCursor(QPainter & painter) +{ + if (useVncCursor) + return QRect(); + + if (currentRect.isNull()) + return QRect(); + + prevRect = currentRect; + painter.drawImage(prevRect, *d_ptr->image()); + return prevRect; +} + +void QVNCCursor::pointerEvent(QMouseEvent & e) +{ + QWidget *widget = QApplication::widgetAt(e.pos()); + + // Determine which cursor to use + if (currentWidget != widget) { + if (widget) { + QCursor widgetCursor = widget->cursor(); + Qt::CursorShape shape = widgetCursor.shape(); + + if (shape == Qt::BitmapCursor) { + // application supplied cursor + const QBitmap * map = widgetCursor.bitmap(); + const QBitmap * mask = widgetCursor.mask(); + QPoint spot = widgetCursor.hotSpot(); + setCursor(map->toImage().bits(), mask->toImage().bits(), map->width(), map->height(), spot.x(), spot.y()); + } else { + // system cursor + setCursor(shape); + } + } else { + // default cursor + setCursor(Qt::ArrowCursor); + } + currentWidget = widget; + } else if (!widget) { + // default cursor + setCursor(Qt::ArrowCursor); + } + if (!useVncCursor) { + currentRect = d_ptr->image()->rect().translated(-d_ptr->hotspot().x(), -d_ptr->hotspot().y()); + currentRect.translate(e.pos()); + screen->setDirty(QRect()); + } + + screen->pointerEvent(e); +} + +void QVNCCursor::clearClientCursor() +{ + QImage *image = d_ptr->image(); + if (image->isNull()) + return; + QTcpSocket *socket = server->clientSocket(); + if (!socket) { + return; + } + // FramebufferUpdate header + { + const quint16 tmp[6] = { htons(0), + htons(1), + htons(0), htons(0), + htons(0), + htons(0) }; + socket->write((char*)tmp, sizeof(tmp)); + + const quint32 encoding = htonl(-239); + socket->write((char*)(&encoding), sizeof(encoding)); + } +} + +void QVNCCursor::sendClientCursor() +{ + QImage *image = d_ptr->image(); + if (image->isNull()) + return; + QTcpSocket *socket = server->clientSocket(); + if (!socket) { + return; + } + // FramebufferUpdate header + { + const quint16 tmp[6] = { htons(0), + htons(1), + htons(d_ptr->hotspot().x()), htons(d_ptr->hotspot().y()), + htons(image->width()), + htons(image->height()) }; + socket->write((char*)tmp, sizeof(tmp)); + + const quint32 encoding = htonl(-239); + socket->write((char*)(&encoding), sizeof(encoding)); + } + + // write pixels + //Q_ASSERT(cursor->hasAlphaChannel()); + const QImage img = image->convertToFormat(QImage::Format_RGB32); + const int n = server->clientBytesPerPixel() * img.width(); + char *buffer = new char[n]; + for (int i = 0; i < img.height(); ++i) { + server->convertPixels(buffer, (const char*)img.scanLine(i), img.width()); + socket->write(buffer, n); + } + delete[] buffer; + + // write mask + const QImage bitmap = image->createAlphaMask().convertToFormat(QImage::Format_Mono); + Q_ASSERT(bitmap.depth() == 1); + Q_ASSERT(bitmap.size() == img.size()); + const int width = (bitmap.width() + 7) / 8; + for (int i = 0; i < bitmap.height(); ++i) + socket->write((const char*)bitmap.scanLine(i), width); +} + +// End of display and pointer event handling code +// Beginning of built-in cursor graphics +// from src/gui/embedded/QVNCCursorPrivate_qws.cpp + +static QVNCCursorPrivate *systemCursorTable[Qt::LastCursor+1]; +static bool systemCursorTableInit = false; + +// 16 x 16 +static const uchar cur_arrow_bits[] = { + 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, + 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, + 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; +static const uchar mcur_arrow_bits[] = { + 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, + 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, + 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; + +static const unsigned char cur_up_arrow_bits[] = { + 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, + 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; +static const unsigned char mcur_up_arrow_bits[] = { + 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, + 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; + +static const unsigned char cur_cross_bits[] = { + 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; +static const unsigned char mcur_cross_bits[] = { + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; + +static const uchar cur_ibeam_bits[] = { + 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_ibeam_bits[] = { + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; + +static const uchar cur_ver_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; +static const uchar mcur_ver_bits[] = { + 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, + 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, + 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; + +static const uchar cur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, + 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, + 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, + 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; +static const uchar cur_bdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, + 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, + 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_bdiag_bits[] = { + 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, + 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, + 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; +static const uchar cur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, + 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, + 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, + 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, + 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; +static const uchar cur_blank_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +// 20 x 20 +static const uchar forbidden_bits[] = { + 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, + 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, + 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, + 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; + +static const uchar forbiddenm_bits[] = { + 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, + 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, + 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, + 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; + +// 32 x 32 +static const uchar wait_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, + 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, + 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, + 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar wait_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, + 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar hsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, + 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar hsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, + 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, + 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, + 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phand_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, + 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, + 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phandm_bits[] = { + 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, + 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, + 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, + 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, + 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar size_all_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, + 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar size_all_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, + 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar whatsthis_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, + 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, + 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, + 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, + 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +static const uchar whatsthism_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, + 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, + 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, + 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, + 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, + 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; + +static const uchar busy_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, + 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, + 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, + 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, + 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static const uchar busym_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, + 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, + 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, + 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, + 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +// 16 x 16 +static const uchar openhand_bits[] = { + 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, + 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, + 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; +static const uchar openhandm_bits[] = { + 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, + 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, + 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; +static const uchar closedhand_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, + 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, + 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; +static const uchar closedhandm_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, + 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, + 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; + +void QVNCCursorPrivate::createSystemCursor(int id) +{ + if (!systemCursorTableInit) { + for (int i = 0; i <= Qt::LastCursor; i++) + systemCursorTable[i] = 0; + systemCursorTableInit = true; + } + switch (id) { + // 16x16 cursors + case Qt::ArrowCursor: + systemCursorTable[Qt::ArrowCursor] = + new QVNCCursorPrivate(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); + break; + + case Qt::UpArrowCursor: + systemCursorTable[Qt::UpArrowCursor] = + new QVNCCursorPrivate(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); + break; + + case Qt::CrossCursor: + systemCursorTable[Qt::CrossCursor] = + new QVNCCursorPrivate(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); + break; + + case Qt::IBeamCursor: + systemCursorTable[Qt::IBeamCursor] = + new QVNCCursorPrivate(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); + break; + + case Qt::SizeVerCursor: + systemCursorTable[Qt::SizeVerCursor] = + new QVNCCursorPrivate(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); + break; + + case Qt::SizeHorCursor: + systemCursorTable[Qt::SizeHorCursor] = + new QVNCCursorPrivate(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); + break; + + case Qt::SizeBDiagCursor: + systemCursorTable[Qt::SizeBDiagCursor] = + new QVNCCursorPrivate(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); + break; + + case Qt::SizeFDiagCursor: + systemCursorTable[Qt::SizeFDiagCursor] = + new QVNCCursorPrivate(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); + break; + + case Qt::BlankCursor: + systemCursorTable[Qt::BlankCursor] = + new QVNCCursorPrivate(0, 0, 0, 0, 0, 0); + break; + + // 20x20 cursors + case Qt::ForbiddenCursor: + systemCursorTable[Qt::ForbiddenCursor] = + new QVNCCursorPrivate(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); + break; + + // 32x32 cursors + case Qt::WaitCursor: + systemCursorTable[Qt::WaitCursor] = + new QVNCCursorPrivate(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); + break; + + case Qt::SplitVCursor: + systemCursorTable[Qt::SplitVCursor] = + new QVNCCursorPrivate(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SplitHCursor: + systemCursorTable[Qt::SplitHCursor] = + new QVNCCursorPrivate(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SizeAllCursor: + systemCursorTable[Qt::SizeAllCursor] = + new QVNCCursorPrivate(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); + break; + + case Qt::PointingHandCursor: + systemCursorTable[Qt::PointingHandCursor] = + new QVNCCursorPrivate(phand_bits, phandm_bits, 32, 32, 0, 0); + break; + + case Qt::WhatsThisCursor: + systemCursorTable[Qt::WhatsThisCursor] = + new QVNCCursorPrivate(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); + break; + case Qt::BusyCursor: + systemCursorTable[Qt::BusyCursor] = + new QVNCCursorPrivate(busy_bits, busym_bits, 32, 32, 0, 0); + break; + + case Qt::OpenHandCursor: + systemCursorTable[Qt::OpenHandCursor] = + new QVNCCursorPrivate(openhand_bits, openhandm_bits, 16, 16, 8, 8); + break; + case Qt::ClosedHandCursor: + systemCursorTable[Qt::ClosedHandCursor] = + new QVNCCursorPrivate(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); + break; + default: + qWarning("Unknown system cursor %d", id); + } +} + +void QVNCCursorPrivate::set(Qt::CursorShape id) +{ + QVNCCursorPrivate *cursor = 0; + if (id >= 0 && id <= Qt::LastCursor) { + if (!systemCursorTable[id]) + createSystemCursor(id); + cursor = systemCursorTable[id]; + } + + if (cursor == 0) { + if (!systemCursorTable[Qt::ArrowCursor]) + createSystemCursor(Qt::ArrowCursor); + cursor = systemCursorTable[Qt::ArrowCursor]; + } + cursorImage = cursor->cursorImage; + hot = cursor->hot; +} + +void QVNCCursorPrivate::set(const uchar *data, const uchar *mask, + int width, int height, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + + cursorImage = QImage(width,height, QImage::Format_Indexed8); + + if (!width || !height || !data || !mask || cursorImage.isNull()) + return; + + cursorImage.setNumColors(3); + cursorImage.setColor(0, 0xff000000); + cursorImage.setColor(1, 0xffffffff); + cursorImage.setColor(2, 0x00000000); + + int bytesPerLine = (width + 7) / 8; + int p = 0; + int d, m; + + int x = -1, w = 0; + + uchar *cursor_data = cursorImage.bits(); + int bpl = cursorImage.bytesPerLine(); + for (int i = 0; i < height; i++) + { + for (int j = 0; j < bytesPerLine; j++, data++, mask++) + { + for (int b = 0; b < 8 && j*8+b < width; b++) + { + d = *data & (1 << b); + m = *mask & (1 << b); + if (d && m) p = 0; + else if (!d && m) p = 1; + else p = 2; + cursor_data[j*8+b] = p; + + // calc region + if (x < 0 && m) + x = j*8+b; + else if (x >= 0 && !m) { + x = -1; + w = 0; + } + if (m) + w++; + } + } + if (x >= 0) { + x = -1; + w = 0; + } + cursor_data += bpl; + } + +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.h b/src/plugins/graphicssystems/vnc/qvnccursor.h new file mode 100644 index 0000000..1c0ce8a --- /dev/null +++ b/src/plugins/graphicssystems/vnc/qvnccursor.h @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QVNCCURSOR_H +#define QVNCCURSOR_H + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QVNCGraphicsSystemScreen; +class QVNCServer; + +// Cursor graphics management +class QVNCCursorPrivate { +public: + QVNCCursorPrivate(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + { set(data, mask, width, height, hotX, hotY); } + QImage * image() { return &cursorImage; } + QPoint hotspot() { return hot; } + QImage cursorImage; + QPoint hot; + void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void set(Qt::CursorShape); +private: + static void createSystemCursor(int id); +}; + +class QVNCCursor { +public: + QVNCCursor(QVNCServer *, QVNCGraphicsSystemScreen *); + + // input methods + void setCursorMode(bool vnc); + void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void setCursor(Qt::CursorShape shape); + void pointerEvent(QMouseEvent & event); + + // output methods + QRect drawCursor(QPainter &); + QRect dirtyRect(); + + // VNC client communication + void sendClientCursor(); + void clearClientCursor(); +private: + bool useVncCursor; // VNC or local + + QRect currentRect; // next place to draw the cursor + QRect prevRect; // last place the cursor was drawn + + QVNCServer * server; // VNC server to get events from + QVNCGraphicsSystemScreen * screen; // Where to request an update + QWidget * currentWidget; // widget currently under the cursor + + QVNCCursorPrivate * d_ptr; +}; + +QT_END_NAMESPACE + +#endif // QVNCCURSOR_H diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index 36d8cc6..ad20eec 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -349,13 +349,13 @@ bool QRfbClientCutText::read(QTcpSocket *s) //=========================================================================== QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen) - : qvnc_screen(screen) + : qvnc_screen(screen), cursor(0) { init(5900); } QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen, int id) - : qvnc_screen(screen) + : qvnc_screen(screen), cursor(0) { init(5900 + id); } @@ -679,6 +679,7 @@ void QVNCServer::setEncodings() DesktopSize = -223 }; + supportCursor = false; if (encodingsPending && (unsigned)client->bytesAvailable() >= encodingsPending * sizeof(quint32)) { for (int i = 0; i < encodingsPending; ++i) { @@ -782,6 +783,8 @@ void QVNCServer::setEncodings() qDebug("QVNCServer::setEncodings: fallback using raw"); #endif } + if (cursor) + cursor->setCursorMode(supportCursor); } void QVNCServer::frameBufferUpdateRequest() @@ -830,7 +833,10 @@ void QVNCServer::pointerEvent() if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; QMouseEvent me(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); - QApplicationPrivate::handleMouseEvent(0, me); + if (cursor) + cursor->pointerEvent(me); + else + QApplicationPrivate::handleMouseEvent(0, me); buttons = ev.buttons; handleMsg = false; } diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h index ed07ce1..351c094 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -466,6 +466,7 @@ public: inline bool hasClientCursor() const { return qvnc_cursor != 0; } #endif + void setCursor(QVNCCursor *c) { cursor = c; } private: void setPixelFormat(); void setEncodings(); @@ -516,6 +517,7 @@ private: #endif QRfbEncoder *encoder; + QVNCCursor * cursor; }; diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp index a3bce49..24ae846 100644 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp @@ -54,6 +54,7 @@ QVNCWindowSurface::QVNCWindowSurface(QVNCGraphicsSystem *graphicsSystem, mScreen(screen), visibleFlag(false) { + Q_UNUSED(graphicsSystem); mImage = QImage(window->size(), mScreen->format()); } diff --git a/src/plugins/graphicssystems/vnc/vnc.pro b/src/plugins/graphicssystems/vnc/vnc.pro index 20e48ad..69cd1f7 100644 --- a/src/plugins/graphicssystems/vnc/vnc.pro +++ b/src/plugins/graphicssystems/vnc/vnc.pro @@ -11,6 +11,8 @@ HEADERS = qgraphicssystem_vnc.h qwindowsurface_vnc.h HEADERS += qvncserver.h SOURCES += qvncserver.cpp +HEADERS += qvnccursor.h +SOURCES += qvnccursor.cpp target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target -- cgit v0.12 From 2f76e87dba10d001ae7c3e445ef2fade9a255c2b Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Fri, 30 Oct 2009 10:31:34 -0700 Subject: Make QGraphicsSystemScreen a QObject This has several advantages: We already see the various screen drivers making QObject-based helper classes for timers, socketNotifiers etc Also, this gives us more introspection from applications that now can query things from the screen. Reviewed-by: TrustMe --- src/gui/painting/qgraphicssystem.cpp | 4 ++++ src/gui/painting/qgraphicssystem_p.h | 4 +++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp index 777b93d..1565c45 100644 --- a/src/gui/painting/qgraphicssystem.cpp +++ b/src/gui/painting/qgraphicssystem.cpp @@ -89,6 +89,10 @@ QList QGraphicsSystem::screens() const return QList(); } +QGraphicsSystemScreen::QGraphicsSystemScreen(QObject *parent) + : QObject(parent) +{} + QGraphicsSystemScreen::~QGraphicsSystemScreen() { } diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index ea1031f..a2d03f0 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -60,9 +60,11 @@ QT_BEGIN_NAMESPACE class QPixmapFilter; -class Q_GUI_EXPORT QGraphicsSystemScreen +class Q_GUI_EXPORT QGraphicsSystemScreen : public QObject { + Q_OBJECT public: + QGraphicsSystemScreen(QObject *parent = 0); virtual ~QGraphicsSystemScreen(); virtual QRect geometry() const = 0; -- cgit v0.12 From a69dce80169686ae156ec5e1898ab33676f3eb40 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 2 Nov 2009 13:07:18 +0100 Subject: Use correct keycode for Ctrl+ --- .../graphicssystems/testlite/qwindowsurface_testlite.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index b14efb8..9e24f55 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -521,20 +521,22 @@ void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) int count = XLookupString(e, chars.data(), chars.size(), &keySym, 0); -// qDebug() << "QTLWS::handleKeyEvent" << count << hex << "XKeysym:" << keySym; -// if (count) -// qDebug() << hex << int(chars[0]) << "String:" << chars; +// qDebug() << "QTLWS::handleKeyEvent" << count << hex << "XKeysym:" << keySym; +// if (count) +// qDebug() << hex << int(chars[0]) << "String:" << chars; Qt::KeyboardModifiers modifiers = translateModifiers(e->state); int qtcode = lookupCode(keySym); -// qDebug() << "lookup: " << hex << keySym << qtcode; +// qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers; if (qtcode) { QKeyEvent keyEvent(type, qtcode, modifiers); QApplicationPrivate::handleKeyEvent(window(), &keyEvent); } else if (chars[0]) { int qtcode = chars.toUpper()[0]; //Not exactly right... + if (modifiers & Qt::ControlModifier && qtcode < ' ') + qtcode = chars[0] + '@'; QKeyEvent keyEvent(type, qtcode, modifiers, QString::fromLatin1(chars)); QApplicationPrivate::handleKeyEvent(window(), &keyEvent); } else { -- cgit v0.12 From 505f9cb67a79ccfbd6b9216cf4ad66521fc5d990 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 2 Nov 2009 14:56:59 +0100 Subject: initial commit of minimaldfb --- src/plugins/graphicssystems/minimaldfb/main.cpp | 71 ++++++++ .../graphicssystems/minimaldfb/minimaldfb.pro | 13 ++ .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 183 +++++++++++++++++++++ .../minimaldfb/qgraphicssystem_minimaldfb.h | 93 +++++++++++ .../minimaldfb/qwindowsurface_minimaldfb.cpp | 150 +++++++++++++++++ .../minimaldfb/qwindowsurface_minimaldfb.h | 80 +++++++++ 6 files changed, 590 insertions(+) create mode 100644 src/plugins/graphicssystems/minimaldfb/main.cpp create mode 100644 src/plugins/graphicssystems/minimaldfb/minimaldfb.pro create mode 100644 src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp create mode 100644 src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h create mode 100644 src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp create mode 100644 src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h diff --git a/src/plugins/graphicssystems/minimaldfb/main.cpp b/src/plugins/graphicssystems/minimaldfb/main.cpp new file mode 100644 index 0000000..fe9407c --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_minimaldfb.h" + +QT_BEGIN_NAMESPACE + +class QDirectFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QDirectFbGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "MinimalDfb"; + return list; +} + +QGraphicsSystem* QDirectFbGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "minimaldfb") + return new QDirectFbGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(directfb, QDirectFbGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro new file mode 100644 index 0000000..a3b7f5c --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro @@ -0,0 +1,13 @@ +TARGET = qdirectfbgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +QMAKE_CXXFLAGS += -I/usr/include/directfb +LIBS += -ldirectfb -lfusion -ldirect -lpthread + +SOURCES = main.cpp qgraphicssystem_minimaldfb.cpp qwindowsurface_minimaldfb.cpp +HEADERS = qgraphicssystem_minimaldfb.h qwindowsurface_minimaldfb.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp new file mode 100644 index 0000000..7c06748 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -0,0 +1,183 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_minimaldfb.h" +#include "qwindowsurface_minimaldfb.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int display) +{ + DFBResult result = dfb->GetDisplayLayer(dfb, DLID_PRIMARY, &m_layer); + if (result != DFB_OK) { + DirectFBError("QDirectFbGraphicsSystemScreen::connect: " + "Unable to get primary display layer!", result); + } + + IDirectFBSurface *topLevelSurface; + m_layer->GetSurface(m_layer, &topLevelSurface); + m_format = QDirectFbGraphicsSystem::imageFormatFromSurface(topLevelSurface); + + result = m_layer->GetScreen(m_layer,&m_screen); + if (result != DFB_OK) { + DirectFBError("QDirectFbGraphicsSystemScreen: Failed to get screen", result); + } + + int w(0),h(0); + m_screen->GetSize(m_screen,&w,&h); + m_geometry = QRect(0,0,w,h); + const int dpi = 72; + const qreal inch = 25.4; + m_depth = 32; + m_physicalSize = QSize(qRound(w * inch / dpi), qRound(h *inch / dpi)); +} + +QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen() +{ +} + +IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect) +{ + IDirectFBWindow *window; + + DFBWindowDescription description; + memset(&description,0,sizeof(DFBWindowDescription)); +// description.flags = DWDESC_SURFACE_CAPS; + description.width = rect.width(); + description.height = rect.height(); + description.posx = rect.x(); + description.posy = rect.y(); +// description.flags |= DWDESC_OPTIONS; +// description.options = DWOP_GHOST|DWOP_ALPHACHANNEL; +// description.caps = (DFBWindowDescription) (DWCAPS_NODECORATION|DWCAPS_DOUBLEBUFFER); +// description.surface_caps = DSCAPS_PREMULTIPLIED; + + DFBResult result = m_layer->CreateWindow(m_layer,&description,&window); + if (result != DFB_OK) { + DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); + } + return window; +} + +QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() +{ + DFBResult result = DFB_OK; + + { // pass command line arguments to DirectFB + const QStringList args = QCoreApplication::arguments(); + int argc = args.size(); + char **argv = new char*[argc]; + + for (int i = 0; i < argc; ++i) + argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); + + result = DirectFBInit(&argc, &argv); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen: error initializing DirectFB", + result); + } + delete[] argv; + } + + result = DirectFBCreate(&dfb); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen: error creating DirectFB interface", + result); + } + + mPrimaryScreen = new QDirectFbGraphicsSystemScreen(dfb,0); + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QDirectFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QDirectFbGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + return new QDirectFbWindowSurface (mPrimaryScreen, widget); +} + +QImage::Format QDirectFbGraphicsSystem::imageFormatFromSurface(IDirectFBSurface *surface) +{ + DFBSurfacePixelFormat format; + surface->GetPixelFormat(surface, &format); + + switch (format) { + case DSPF_LUT8: + return QImage::Format_Indexed8; + case DSPF_RGB24: + return QImage::Format_RGB888; + case DSPF_ARGB4444: + return QImage::Format_ARGB4444_Premultiplied; + case DSPF_RGB444: + return QImage::Format_RGB444; + case DSPF_RGB555: + case DSPF_ARGB1555: + return QImage::Format_RGB555; + case DSPF_RGB16: + return QImage::Format_RGB16; + case DSPF_ARGB6666: + return QImage::Format_ARGB6666_Premultiplied; + case DSPF_RGB18: + return QImage::Format_RGB666; + case DSPF_RGB32: + return QImage::Format_RGB32; + case DSPF_ARGB: { + DFBSurfaceCapabilities caps; + const DFBResult result = surface->GetCapabilities(surface, &caps); + Q_ASSERT(result == DFB_OK); + Q_UNUSED(result); + return (caps & DSCAPS_PREMULTIPLIED + ? QImage::Format_ARGB32_Premultiplied + : QImage::Format_ARGB32); } + default: + break; + } + return QImage::Format_Invalid; + +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h new file mode 100644 index 0000000..fbc5498 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_MINIMAL_H +#define QGRAPHICSSYSTEM_MINIMAL_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QDirectFbGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int display); + ~QDirectFbGraphicsSystemScreen(); + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + QSize physicalSize() const { return m_physicalSize; } + + IDirectFBWindow *createWindow(const QRect &); + +public: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + QSize m_physicalSize; + + IDirectFBScreen *m_screen; + IDirectFBDisplayLayer *m_layer; +}; + +class QDirectFbGraphicsSystem : public QGraphicsSystem +{ +public: + QDirectFbGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + + static QImage::Format imageFormatFromSurface(IDirectFBSurface *surface); + +private: + IDirectFB *dfb; + QDirectFbGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp new file mode 100644 index 0000000..76fad68 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -0,0 +1,150 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_minimaldfb.h" +#include "qgraphicssystem_minimaldfb.h" +#include + +QT_BEGIN_NAMESPACE + +QDirectFbWindowSurface::QDirectFbWindowSurface + (QDirectFbGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), m_screen(screen), m_lock(false) +{ + window->setWindowSurface(this); + m_dfbWindow = m_screen->createWindow(window->rect()); + DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); + if (result != DFB_OK) { + DirectFBError("QDirectFbWindowSurface::QDirectFbWindowSurface: unable to get windows surface",result); + } + + + +} + +QDirectFbWindowSurface::~QDirectFbWindowSurface() +{ +} + +QPaintDevice *QDirectFbWindowSurface::paintDevice() +{ + return m_image; +} + +void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); + m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); + + QVector rects = region.rects(); + for (int i = 0 ; i < rects.size(); i++) { + const QRect rect = rects.at(i); + DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; + m_dfbSurface->Flip(m_dfbSurface,&dfbReg,DSFLIP_BLIT); + } +} + +void QDirectFbWindowSurface::setGeometry(const QRect &rect) +{ +// qDebug() << "QDirectF.bWindowSurface::setGeometry:" << (long)this << rect; + bool wasLocked = false; + if (m_lock){ + m_dfbSurface->Unlock(m_dfbSurface); + wasLocked = true; + } + m_dfbSurface->Release(m_dfbSurface); + QWindowSurface::setGeometry(rect); + m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), + rect.width(), rect.height()); +// m_dfbWindow->Resize(m_dfbWindow,rect.width(),rect.height()); +// m_dfbWindow->MoveTo(m_dfbWindow,rect.x(),rect.y()); + DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); + if (result != DFB_OK) + qDebug() << "could not resurface"; + + if (wasLocked) + lockSurfaceToImage(); +} + +bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QDirectFbWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + if (!m_lock) + lockSurfaceToImage(); +} + +void QDirectFbWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + if (m_lock){ + m_dfbSurface->Unlock(m_dfbSurface); + m_lock = false; + } +} + +void QDirectFbWindowSurface::lockSurfaceToImage() +{ + if (m_lock) + return; + m_lock = true; + + int w,h; + m_dfbSurface->GetSize(m_dfbSurface,&w,&h); + uchar *data; + int bpl; + DFBResult result = m_dfbSurface->Lock(m_dfbSurface,static_cast(DSLF_READ|DSLF_WRITE),reinterpret_cast(&data),&bpl); + if (!result == DFB_OK) { + DirectFBError("QDirectFbWindowSurface::lockSurfaceToImage() failed to lock surface",result); + return; + } + QImage::Format format = QDirectFbGraphicsSystem::imageFormatFromSurface(m_dfbSurface); + m_image = new QImage(data,w,h,bpl,format); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h new file mode 100644 index 0000000..fe88878 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_MINIMAL_H +#define QWINDOWSURFACE_MINIMAL_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QDirectFbGraphicsSystemScreen; + +class QDirectFbWindowSurface : public QWindowSurface +{ +public: + QDirectFbWindowSurface + (QDirectFbGraphicsSystemScreen *screen, QWidget *window); + ~QDirectFbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + void lockSurfaceToImage(); + + QDirectFbGraphicsSystemScreen *m_screen; + QImage *m_image; + bool m_lock; + + IDirectFBWindow *m_dfbWindow; + IDirectFBSurface *m_dfbSurface; +}; + +QT_END_NAMESPACE + +#endif -- cgit v0.12 From f8c70ab13a3f54da54e2c68a2a96ef18916f9178 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 4 Nov 2009 13:46:09 +0100 Subject: Fix autotest screenNumberForPoint on Lighthouse --- src/gui/kernel/qdesktopwidget_lite.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp index fed1f9c..a3535fb 100644 --- a/src/gui/kernel/qdesktopwidget_lite.cpp +++ b/src/gui/kernel/qdesktopwidget_lite.cpp @@ -131,7 +131,7 @@ int QDesktopWidget::screenNumber(const QPoint &p) const if (screens[i]->geometry().contains(p)) return i; - return -1; + return primaryScreen(); //even better would be closest screen } void QDesktopWidget::resizeEvent(QResizeEvent *) -- cgit v0.12 From a43f98dea9024f84223ae8c8c59db1b4e5ead588 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 4 Nov 2009 15:52:03 +0100 Subject: Compile after latest qvfbhdr changes --- src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp index 10e4e53..77942c9 100644 --- a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp +++ b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp @@ -85,8 +85,7 @@ private: QVFbGraphicsSystemScreenKeyboardHandler::QVFbGraphicsSystemScreenKeyboardHandler() { int displayId = 0; //TODO displayId - const QString keyboardDev = QString::fromLatin1(QT_VFB_KEYBOARD_PIPE) - .arg(displayId); + const QString keyboardDev = QT_VFB_KEYBOARD_PIPE(displayId); kbdFD = -1; @@ -185,8 +184,7 @@ private: QVFbGraphicsSystemScreenMouseHandler::QVFbGraphicsSystemScreenMouseHandler() { int displayId = 0; //TODO: displayId - QString mouseDev = QString::fromLatin1(QT_VFB_MOUSE_PIPE) - .arg(displayId); + QString mouseDev = QT_VFB_MOUSE_PIPE(displayId); mouseFD = QT_OPEN(mouseDev.toLatin1().constData(), O_RDWR | O_NDELAY); @@ -301,7 +299,7 @@ void QVFbGraphicsSystemScreenPrivate::setDirty(const QRect &r) bool QVFbGraphicsSystemScreenPrivate::connect(int displayId) { - key_t key = ftok(QByteArray(QT_VFB_MOUSE_PIPE).replace("%1", QByteArray::number(displayId)), 'b'); + key_t key = ftok(QT_VFB_MOUSE_PIPE(displayId).toLatin1(), 'b'); if (key == -1) return false; -- cgit v0.12 From 49696780e9cf026b2a7063976eb42f823a6792d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 9 Nov 2009 14:07:50 +0100 Subject: Adding the blitter paint engine --- src/gui/painting/painting.pri | 2 + src/gui/painting/qpaintengine.h | 1 + src/gui/painting/qpaintengine_blitter.cpp | 638 ++++++++++++++++++++++++++++++ src/gui/painting/qpaintengine_blitter_p.h | 94 +++++ src/gui/painting/qpaintengine_raster_p.h | 2 + 5 files changed, 737 insertions(+) create mode 100644 src/gui/painting/qpaintengine_blitter.cpp create mode 100644 src/gui/painting/qpaintengine_blitter_p.h diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 0f63198..4a32e71 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -17,6 +17,7 @@ HEADERS += \ painting/qpaintengine_p.h \ painting/qpaintengine_alpha_p.h \ painting/qpaintengine_preview_p.h \ + painting/qpaintengine_blitter_p.h \ painting/qpaintengineex_p.h \ painting/qpainter.h \ painting/qpainter_p.h \ @@ -63,6 +64,7 @@ SOURCES += \ painting/qpaintengine.cpp \ painting/qpaintengine_alpha.cpp \ painting/qpaintengine_preview.cpp \ + painting/qpaintengine_blitter.cpp \ painting/qpaintengineex.cpp \ painting/qpainter.cpp \ painting/qpainterpath.cpp \ diff --git a/src/gui/painting/qpaintengine.h b/src/gui/painting/qpaintengine.h index c540be4..321bbf5 100644 --- a/src/gui/painting/qpaintengine.h +++ b/src/gui/painting/qpaintengine.h @@ -213,6 +213,7 @@ public: OpenVG, OpenGL2, PaintBuffer, + Blitter, User = 50, // first user type id MaxUser = 100 // last user type id diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp new file mode 100644 index 0000000..367a8b5 --- /dev/null +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -0,0 +1,638 @@ +#include "private/qpaintengine_blitter_p.h" +#include "private/qpaintengine_raster_p.h" +#include "private/qpainter_p.h" +#include "private/qapplication_p.h" + +#define STATE_XFORM_SCALE 0x00000001 +#define STATE_XFORM_COMPLEX 0x00000002 + +#define STATE_BRUSH_PATTERN 0x00000010 +#define STATE_BRUSH_ALPHA 0x00000020 + +#define STATE_PEN_ENABLED 0x00000100 + +#define STATE_ANTIALIASING 0x00001000 +#define STATE_ALPHA 0x00002000 +#define STATE_BLENDING_COMPLEX 0x00004000 + +#define STATE_CLIPSYS_COMPLEX 0x00010000 +#define STATE_CLIP_COMPLEX 0x00020000 + +//#define RASTEROVERLAY + +#ifdef RASTEROVERLAY +QColor rasterColor(255,0,0,100); +QBrush rasterBrush(rasterColor); +#endif + +static inline void updateStateBits(uint *state, uint mask, bool on) +{ + *state = on ? (*state | mask) : (*state & ~mask); +} + +class CapabilitiesToStateMask +{ +public: + CapabilitiesToStateMask(QBlittable::Capabilities capabilities) + : m_capabilities(capabilities), + fillRectMask(0), fillRectState(0), + drawRectMask(0), drawRectState(0), + drawPixmapMask(0), drawPixmapState(0) + { + if (capabilities & QBlittable::SolidRectCapability) { + setFillRectMask(); + } + if (capabilities & QBlittable::SourcePixmapCapability) { + setSourcePixmapMask(); + } + if (capabilities & QBlittable::SourceOverPixmapCapability) { + setSourceOverPixmapMask(); + } + } + + inline bool canBlitterFillRect() const + { + return !fillRectState || (fillRectState & fillRectMask); + } + + inline bool canBlitterDrawRectMask() const + { + return drawRectState & drawRectMask; + } + + bool canBlitterDrawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) const + { + if ((!drawPixmapState) || drawPixmapState & drawPixmapMask) { + if (m_capabilities & (QBlittable::SourceOverPixmapCapability + | QBlittable::SourceOverScaledPixmapCapability)) { + if (r.size() != sr.size()) { + return m_capabilities & QBlittable::SourceOverScaledPixmapCapability; + } else { + return m_capabilities & QBlittable::SourceOverPixmapCapability; + } + } + if ((m_capabilities & QBlittable::SourcePixmapCapability) && r.size() == sr.size() && !pm.hasAlphaChannel()) { + return m_capabilities & QBlittable::SourcePixmapCapability; + } + } + return false; + } + + inline void updateFillRectBits(uint mask, bool on) { + updateStateBits(&fillRectState,mask,on); + } + + inline void updateDrawRectBits(uint mask, bool on) { + updateStateBits(&drawRectState,mask,on); + } + + inline void updateDrawPixmapBits(uint mask, bool on) { + updateStateBits(&drawPixmapState,mask,on); + } + inline void updateAllWithBits(uint mask, bool on) { + updateStateBits(&fillRectState,mask,on); + updateStateBits(&drawRectState,mask,on); + updateStateBits(&drawPixmapState,mask,on); + } + +public: + + void setFillRectMask() { + updateStateBits(&fillRectMask, STATE_XFORM_SCALE, false); + updateStateBits(&fillRectMask, STATE_XFORM_COMPLEX, false); + + updateStateBits(&fillRectMask, STATE_BRUSH_PATTERN, false); + updateStateBits(&fillRectMask, STATE_BRUSH_ALPHA, false); + + updateStateBits(&fillRectMask, STATE_PEN_ENABLED, false); + + updateStateBits(&fillRectMask, STATE_ANTIALIASING, false); + updateStateBits(&fillRectMask, STATE_ALPHA, false); + updateStateBits(&fillRectMask, STATE_BLENDING_COMPLEX, false); + + updateStateBits(&fillRectMask, STATE_CLIPSYS_COMPLEX, false); + updateStateBits(&fillRectMask, STATE_CLIP_COMPLEX, false); + } + + void setSourcePixmapMask() { + updateStateBits(&drawPixmapMask, STATE_XFORM_SCALE, true); + updateStateBits(&drawPixmapMask, STATE_XFORM_COMPLEX, false); + + updateStateBits(&drawPixmapMask, STATE_BRUSH_PATTERN, false); + updateStateBits(&drawPixmapMask, STATE_BRUSH_ALPHA, false); + + updateStateBits(&drawPixmapMask, STATE_PEN_ENABLED, false); + + updateStateBits(&drawPixmapMask, STATE_ANTIALIASING, false); + updateStateBits(&drawPixmapMask, STATE_ALPHA, false); + updateStateBits(&drawPixmapMask, STATE_BLENDING_COMPLEX, false); + + updateStateBits(&drawPixmapMask, STATE_CLIPSYS_COMPLEX, false); + updateStateBits(&drawPixmapMask, STATE_CLIP_COMPLEX, false); + } + + void setSourceOverPixmapMask() { + setSourcePixmapMask(); + } + + QBlittable::Capabilities m_capabilities; + uint fillRectMask; + uint fillRectState; + uint drawRectMask; + uint drawRectState; + uint drawPixmapMask; + uint drawPixmapState; +}; + +class QBlitterPaintEnginePrivate : public QPaintEngineExPrivate +{ +public: + QBlitterPaintEnginePrivate(QPaintDevice *p) + : QPaintEngineExPrivate(), + raster(new QRasterPaintEngine(p)), isBlitterLocked(false), + capabillities(0), hasXForm(false) + { + if (QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem()) { +// QBlittable *b = gs->createBlitter(p); +// if (b) { +// blitter=b; +// capabillities = new CapabilitiesToStateMask(blitter->capabilities()); +// blitter->unlock(); +// } else +// qWarning("No blitter returned from the graphics system. QBlitterPaintEngine will not work"); + } + + } + + inline void lock() { + if (!isBlitterLocked) { + raster->d_func()->rasterBuffer->prepare(blitter->lock()); + isBlitterLocked = true; + } + } + + inline void unlock() { + if (isBlitterLocked) { + blitter->unlock(); + isBlitterLocked = false; + } + } + + void fillRect(const QRectF &rect, const QColor &color) { + unlock(); + QRectF targetRect = rect; + if (hasXForm) { + targetRect = state->matrix.mapRect(rect); + } + QClipData *clipData = raster->state()->clip; + if (clipData) { + if (clipData->hasRectClip) + blitter->fillRect(targetRect & clipData->clipRect, color); + else if (clipData->hasRegionClip) { + QVector rects = clipData->clipRegion.rects(); + for ( int i = 0; i < rects.size(); i++ ) { + QRect intersectRect = rects.at(i).intersected(targetRect.toRect()); + if (!intersectRect.isEmpty()) { + blitter->fillRect(intersectRect,color); + } + } + } + }else { + if (targetRect.x() >= 0 && targetRect.y() >= 0 + && targetRect.width() <= raster->paintDevice()->width() + && targetRect.height() <= raster->paintDevice()->height()) + blitter->fillRect(targetRect,color); + else { + QRectF deviceRect(0,0,raster->paintDevice()->width(), raster->paintDevice()->height()); + blitter->fillRect(deviceRect&targetRect,color); + } + } + } + + void clipAndDrawPixmap(const QRectF &clip, const QRectF &target, const QPixmap &pm, const QRectF &sr) { + QRectF intersectedRect = clip.intersected(target); + if (intersectedRect.isEmpty()) + return; + + QRectF source = sr; + if(intersectedRect.size() != target.size()) { + qreal deltaTop = target.top() - intersectedRect.top(); + qreal deltaLeft = target.left() - intersectedRect.left(); + qreal deltaBottom = target.bottom() - intersectedRect.bottom(); + qreal deltaRight = target.right() - intersectedRect.right(); + source.adjust(-deltaLeft,-deltaTop,deltaRight,deltaBottom); + } + blitter->drawPixmap(intersectedRect, pm, source); + } + + void updateClip() { + const QClipData *clip = raster->d_func()->clip(); + bool complex = clip != 0 && !(clip->hasRectClip || clip->hasRegionClip); + capabillities->updateAllWithBits(STATE_CLIP_COMPLEX, complex); + } + + void systemStateChanged() { + raster->d_func()->systemStateChanged(); + } + + QRasterPaintEngine *raster; + QRasterPaintEngineState *state; + + QBlittable *blitter; + bool isBlitterLocked; + + CapabilitiesToStateMask *capabillities; + + uint hasXForm; +}; + +QBlitterPaintEngine::QBlitterPaintEngine(QPaintDevice *p) + : QPaintEngineEx(*(new QBlitterPaintEnginePrivate(p))) +{ +} + +QBlitterPaintEngine::~QBlitterPaintEngine() +{ + Q_D(QBlitterPaintEngine); +} + +QPainterState *QBlitterPaintEngine::createState(QPainterState *orig) const +{ + Q_D(const QBlitterPaintEngine); + return d->raster->createState(orig); +} + +bool QBlitterPaintEngine::begin(QPaintDevice *pdev) +{ + Q_D(QBlitterPaintEngine); + + d->raster->setSystemRect(systemRect()); + d->raster->setSystemClip(systemClip()); + + bool ok = d->raster->begin(pdev); + return ok; +} + + +bool QBlitterPaintEngine::end() +{ + Q_D(QBlitterPaintEngine); + + d->raster->setPaintDevice(0); + d->raster->setActive(false); + return d->raster->end(); +} + + +void QBlitterPaintEngine::fill(const QVectorPath &path, const QBrush &brush) +{ + Q_D(QBlitterPaintEngine); + + if (path.shape() == QVectorPath::RectangleHint) { + QRectF rect(((QPointF *) path.points())[0], ((QPointF *) path.points())[2]); + fillRect(rect, brush); + } else { + d->lock(); + d->raster->fill(path, brush); +#ifdef RASTEROVERLAY + d->raster->fill(path,rasterBrush); +#endif + } +} + +void QBlitterPaintEngine::fillRect(const QRectF &rect, const QColor &color) +{ + Q_D(QBlitterPaintEngine); + if (d->capabillities->canBlitterFillRect() && color.alpha() == 255) { + d->fillRect(rect, color); + } else { + d->lock(); + d->raster->fillRect(rect, color); +#ifdef RASTEROVERLAY + d->raster->fillRect(rect,rasterColor); +#endif + } +} + +void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) +{ + if(rect.size().isEmpty()) + return; + Q_D(QBlitterPaintEngine); + if (qbrush_style(brush) == Qt::SolidPattern + && qbrush_color(brush).alpha() == 255 + && d->capabillities->canBlitterFillRect()) + { + d->fillRect(rect, qbrush_color(brush)); + }else if (brush.style() == Qt::TexturePattern + && d->capabillities->canBlitterDrawPixmap(rect,brush.texture(),rect)) + { + bool rectIsFilled = false; + QRectF transformedRect = state()->matrix.mapRect(rect); + qreal x = transformedRect.x(); + qreal y = transformedRect.y(); + QPixmap pm = brush.texture(); + d->unlock(); + int srcX = (int)(rect.x() - d->raster->state()->brushOrigin.x()) % pm.width(); + if (srcX < 0) + srcX = pm.width() + srcX; + const int startX = srcX; + int srcY = (int)(rect.y() - d->raster->state()->brushOrigin.y())% pm.height(); + if (srcY < 0) + srcY = pm.height() + srcY; + while (!rectIsFilled) { + qreal blitWidth = (pm.width() ) - srcX; + qreal blitHeight = (pm.height() ) - srcY; + if (x + blitWidth > transformedRect.right()) + blitWidth = transformedRect.right() -x; + if (y + blitHeight > transformedRect.bottom()) + blitHeight = transformedRect.bottom() - y; + const QClipData *clipData = d->raster->d_func()->clip(); + if (clipData->hasRectClip) { + QRect targetRect = QRect(x,y,blitWidth,blitHeight).intersected(clipData->clipRect); + if (targetRect.isValid()) { + int tmpSrcX = srcX + (targetRect.x() - x); + int tmpSrcY = srcY + (targetRect.y() - y); + QRect srcRect(tmpSrcX,tmpSrcY,targetRect.width(),targetRect.height()); + d->blitter->drawPixmap(targetRect,pm,srcRect); + } + } else if (clipData->hasRegionClip) { + QVector clipRects = clipData->clipRegion.rects(); + QRect unclippedTargetRect(x,y,blitWidth,blitHeight); + QRegion intersectedRects = clipData->clipRegion.intersected(unclippedTargetRect); + + for ( int i = 0; i < intersectedRects.rects().size(); i++ ) { + QRect targetRect = intersectedRects.rects().at(i); + if (!targetRect.isValid() || targetRect.isEmpty()) + continue; + int tmpSrcX = srcX + (targetRect.x() - x); + int tmpSrcY = srcY + (targetRect.y() - y); + QRect srcRect(tmpSrcX,tmpSrcY,targetRect.width(),targetRect.height()); + d->blitter->drawPixmap(targetRect,pm,srcRect); + } + } else Q_ASSERT(false);//should never happen + x+=blitWidth; + if (x>=transformedRect.right()) { + x = transformedRect.x(); + srcX = startX; + srcY = 0; + y+=blitHeight; + if (y>=transformedRect.bottom()) + rectIsFilled = true; + } else + srcX = 0; + } + + } else { + d->lock(); + d->raster->fillRect(rect, brush); +#ifdef RASTEROVERLAY + d->raster->fillRect(rect,rasterBrush); +#endif + } + +} + +void QBlitterPaintEngine::stroke(const QVectorPath &path, const QPen &pen) +{ + Q_D(QBlitterPaintEngine); + d->lock(); + d->raster->stroke(path, pen); +#ifdef RASTEROVERLAY + d->raster->stroke(path,QPen(rasterColor)); +#endif +} + +void QBlitterPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) +{ + Q_D(QBlitterPaintEngine); + d->raster->clip(path, op); + d->updateClip(); +} +void QBlitterPaintEngine::clip(const QRect &rect, Qt::ClipOperation op){ + Q_D(QBlitterPaintEngine); + d->raster->clip(rect,op); + d->updateClip(); +} +void QBlitterPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) +{ + Q_D(QBlitterPaintEngine); + d->raster->clip(region,op); + d->updateClip(); +} + +void QBlitterPaintEngine::clipEnabledChanged() +{ + Q_D(QBlitterPaintEngine); + d->raster->clipEnabledChanged(); +} + +void QBlitterPaintEngine::penChanged() +{ + Q_D(QBlitterPaintEngine); + d->raster->penChanged(); + d->capabillities->updateDrawRectBits(STATE_PEN_ENABLED,qpen_style(d->state->pen) != Qt::NoPen); +} + +void QBlitterPaintEngine::brushChanged() +{ + Q_D(QBlitterPaintEngine); + d->raster->brushChanged(); + + bool solid = qbrush_style(d->state->brush) == Qt::SolidPattern; + + d->capabillities->updateDrawRectBits(STATE_BRUSH_PATTERN, !solid); + d->capabillities->updateDrawRectBits(STATE_BRUSH_ALPHA, + qbrush_color(d->state->brush).alpha() < 255); +} + +void QBlitterPaintEngine::brushOriginChanged() +{ + Q_D(QBlitterPaintEngine); + d->raster->brushOriginChanged(); +} + +void QBlitterPaintEngine::opacityChanged() +{ + Q_D(QBlitterPaintEngine); + d->raster->opacityChanged(); + + bool translucent = d->state->opacity < 1; + d->capabillities->updateAllWithBits(STATE_ALPHA,translucent); +} + +void QBlitterPaintEngine::compositionModeChanged() +{ + Q_D(QBlitterPaintEngine); + d->raster->compositionModeChanged(); + + bool nonTrivial = d->state->composition_mode != QPainter::CompositionMode_SourceOver + && d->state->composition_mode != QPainter::CompositionMode_Source; + + d->capabillities->updateAllWithBits(STATE_BLENDING_COMPLEX,nonTrivial); +} + +void QBlitterPaintEngine::renderHintsChanged() +{ + Q_D(QBlitterPaintEngine); + d->raster->renderHintsChanged(); + + bool aa = d->state->renderHints & QPainter::Antialiasing; + d->capabillities->updateFillRectBits(STATE_ANTIALIASING, aa); + d->capabillities->updateDrawRectBits(STATE_ANTIALIASING, aa); + +} + +void QBlitterPaintEngine::transformChanged() +{ + Q_D(QBlitterPaintEngine); + d->raster->transformChanged(); + + QTransform::TransformationType type = d->state->matrix.type(); + + d->capabillities->updateAllWithBits(STATE_XFORM_COMPLEX, type > QTransform::TxScale); + + d->hasXForm = type >= QTransform::TxTranslate; + +} + +void QBlitterPaintEngine::drawRects(const QRect *rects, int rectCount) +{ + Q_D(QBlitterPaintEngine); + if (d->capabillities->canBlitterDrawRectMask()) { + for (int i=0; ifillRect(rects[i], qbrush_color(d->state->brush)); + } + } else { + QPaintEngineEx::drawRects(rects, rectCount); +#ifdef RASTEROVERLAY + d->raster->drawRects(rects,rectCount); +#endif + } +} + +void QBlitterPaintEngine::drawRects(const QRectF *rects, int rectCount) +{ + Q_D(QBlitterPaintEngine); + if (d->capabillities->canBlitterDrawRectMask()) { + for (int i=0; ifillRect(rects[i], qbrush_color(d->state->brush)); + } + } else { + QPaintEngineEx::drawRects(rects, rectCount); +#ifdef RASTEROVERLAY + d->raster->drawRects(rects,rectCount); +#endif + } +} + +void QBlitterPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) +{ + Q_D(QBlitterPaintEngine); + if (d->capabillities->canBlitterDrawPixmap(r,pm,sr)) { + + d->unlock(); + QRectF targetRect = r; + if (d->hasXForm) { + targetRect = state()->matrix.mapRect(r); + } + const QClipData *clipData = d->raster->d_func()->clip(); + if (clipData) { + if (clipData->hasRectClip) { + d->clipAndDrawPixmap(clipData->clipRect,targetRect,pm,sr); + }else if (clipData->hasRegionClip) { + QVectorrects = clipData->clipRegion.rects(); + for (int i = 0; iclipAndDrawPixmap(rects.at(i),targetRect,pm,sr); + } + } + } else { + QRectF deviceRect(0,0,d->raster->paintDevice()->width(), d->raster->paintDevice()->height()); + d->clipAndDrawPixmap(deviceRect,targetRect,pm,sr); + } + }else { + d->lock(); + d->raster->drawPixmap(r, pm, sr); +#ifdef RASTEROVERLAY + d->raster->fillRect(r,rasterColor); +#endif + } +} + +void QBlitterPaintEngine::drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, + Qt::ImageConversionFlags flags) +{ + Q_D(QBlitterPaintEngine); + d->lock(); + d->raster->drawImage(r, pm, sr, flags); +#ifdef RASTEROVERLAY + d->raster->fillRect(r,rasterColor); +#endif +} + + +void QBlitterPaintEngine::drawTextItem(const QPointF &pos, const QTextItem &ti) +{ + Q_D(QBlitterPaintEngine); + d->lock(); + d->raster->drawTextItem(pos, ti); +#ifdef RASTEROVERLAY + QFontMetricsF fm(ti.font()); + QRectF rect = fm.tightBoundingRect(ti.text()); + rect.moveBottomLeft(pos); + d->raster->fillRect(rect, rasterColor); +#endif +} + + +void QBlitterPaintEngine::setState(QPainterState *s) +{ + Q_D(QBlitterPaintEngine); + QPaintEngineEx::setState(s); + d->raster->setState(s); + d->state = (QRasterPaintEngineState *) s; + + clipEnabledChanged(); + penChanged(); + brushChanged(); + brushOriginChanged(); + opacityChanged(); + compositionModeChanged(); + renderHintsChanged(); + transformChanged(); + + d->updateClip(); +} + +class QBlittablePrivate +{ +public: + QBlittable::Capabilities caps; +}; + + +QBlittable::QBlittable(Capabilities caps) + : d_ptr(new QBlittablePrivate) +{ + d_ptr->caps = caps; +} + +QBlittable::QBlittable(QBlittablePrivate &d, Capabilities caps) + : d_ptr(&d) +{ + d_ptr->caps = caps; +} + + +QBlittable::~QBlittable() +{ + delete d_ptr; +} + + +QBlittable::Capabilities QBlittable::capabilities() const +{ + Q_D(const QBlittable); + return d->caps; +} + diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h new file mode 100644 index 0000000..90493a4 --- /dev/null +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -0,0 +1,94 @@ +#ifndef QPAINTENGINE_BLITTER_P_H +#define QPAINTENGINE_BLITTER_P_H + +#include "private/qpaintengineex_p.h" + +class QRasterPaintEngine; +class QBlittablePrivate; +class QBlitterPaintEnginePrivate; + +// ### find name +class Q_GUI_EXPORT QBlittable +{ + Q_DECLARE_PRIVATE(QBlittable); +public: + enum Capability { + + SolidRectCapability = 0x0001, + SourcePixmapCapability = 0x0002, + SourceOverPixmapCapability = 0x0004, + SourceOverScaledPixmapCapability = 0x0008, + + // Internal ones + OutlineCapability = 0x0001000, + }; + Q_DECLARE_FLAGS(Capabilities, Capability); + + QBlittable(Capabilities caps); + virtual ~QBlittable(); + + Capabilities capabilities() const; + + virtual void fillRect(const QRectF &rect, const QColor &color) = 0; + virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) = 0; + + virtual QImage *lock() = 0; + virtual void unlock() = 0; + +protected: + QBlittablePrivate *d_ptr; + + QBlittable(QBlittablePrivate &d, Capabilities caps); +}; + + +class Q_GUI_EXPORT QBlitterPaintEngine : public QPaintEngineEx +{ + Q_DECLARE_PRIVATE(QBlitterPaintEngine); +public: + QBlitterPaintEngine(QPaintDevice *p); + ~QBlitterPaintEngine(); + + virtual QPainterState *createState(QPainterState *orig) const; + + virtual QPaintEngine::Type type() const { return Blitter; } + + virtual bool begin(QPaintDevice *pdev); + virtual bool end(); + + virtual void fill(const QVectorPath &path, const QBrush &brush); + virtual void stroke(const QVectorPath &path, const QPen &pen); + + virtual void clip(const QVectorPath &path, Qt::ClipOperation op); + virtual void clip(const QRect &rect, Qt::ClipOperation op); + virtual void clip(const QRegion ®ion, Qt::ClipOperation op); + + virtual void clipEnabledChanged(); + virtual void penChanged(); + virtual void brushChanged(); + virtual void brushOriginChanged(); + virtual void opacityChanged(); + virtual void compositionModeChanged(); + virtual void renderHintsChanged(); + virtual void transformChanged(); + + virtual void fillRect(const QRectF &rect, const QBrush &brush); + virtual void fillRect(const QRectF &rect, const QColor &color); + + virtual void drawRects(const QRect *rects, int rectCount); + virtual void drawRects(const QRectF *rects, int rectCount); + + virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr); + + virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, Qt::ImageConversionFlags flags); + + virtual void drawTextItem(const QPointF &pos, const QTextItem &ti); + + virtual void setState(QPainterState *s); + + inline QPainterState *state() { return static_cast(QPaintEngine::state); } + inline const QPainterState *state() const { return static_cast(QPaintEngine::state); } + +}; + +#endif // QPAINTENGINE_BLITTER_P_H diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h index 1787d16..36e8b13 100644 --- a/src/gui/painting/qpaintengine_raster_p.h +++ b/src/gui/painting/qpaintengine_raster_p.h @@ -252,6 +252,8 @@ protected: QRasterPaintEngine(QRasterPaintEnginePrivate &d, QPaintDevice *); private: friend struct QSpanData; + friend class QBlitterPaintEngine; + friend class QBlitterPaintEnginePrivate; void init(); void fillRect(const QRectF &rect, QSpanData *data); -- cgit v0.12 From 617f572f459f4406b3f0316e45abdceba01c0c26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 9 Nov 2009 14:08:22 +0100 Subject: Using the correct geometry --- src/plugins/graphicssystems/minimaldfb/minimaldfb.pro | 2 +- .../graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp | 8 +++++++- .../graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 3 --- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro index a3b7f5c..d4c93fd 100644 --- a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro +++ b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro @@ -1,4 +1,4 @@ -TARGET = qdirectfbgraphicssystem +TARGET = qminimaldfb include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index 7c06748..bf46d4c 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -54,8 +54,10 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int DirectFBError("QDirectFbGraphicsSystemScreen::connect: " "Unable to get primary display layer!", result); } + m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); IDirectFBSurface *topLevelSurface; + //This line gives a warning m_layer->GetSurface(m_layer, &topLevelSurface); m_format = QDirectFbGraphicsSystem::imageFormatFromSurface(topLevelSurface); @@ -65,7 +67,11 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int } int w(0),h(0); - m_screen->GetSize(m_screen,&w,&h); + //Asking the screen for its size gives the desktop geometry on X11 + //Thats not something we want, so as the topLevelSorface instead +// m_screen->GetSize(m_screen,&w,&h); + topLevelSurface->GetSize(topLevelSurface,&w,&h); + m_geometry = QRect(0,0,w,h); const int dpi = 72; const qreal inch = 25.4; diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 76fad68..e75a43c 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -55,9 +55,6 @@ QDirectFbWindowSurface::QDirectFbWindowSurface if (result != DFB_OK) { DirectFBError("QDirectFbWindowSurface::QDirectFbWindowSurface: unable to get windows surface",result); } - - - } QDirectFbWindowSurface::~QDirectFbWindowSurface() -- cgit v0.12 From d279d7d64fda1a1fd253a21875e1c832093b00c8 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 11 Nov 2009 11:34:12 +0100 Subject: Common framebuffer functionality for VNC and linuxfb, cursor event notification --- src/gui/kernel/qapplication.cpp | 8 +- src/gui/kernel/qapplication_p.h | 2 + src/gui/kernel/qwidget_lite.cpp | 24 + src/gui/painting/painting.pri | 5 +- src/gui/painting/qgraphicssystem_p.h | 2 + src/gui/painting/qgraphicssystemcursor.cpp | 600 +++++++++++++++++++++ src/gui/painting/qgraphicssystemcursor.h | 98 ++++ src/plugins/graphicssystems/fb_base/fb_base.cpp | 205 +++++++ src/plugins/graphicssystems/fb_base/fb_base.h | 90 ++++ src/plugins/graphicssystems/fb_base/fb_base.pro | 23 + src/plugins/graphicssystems/linuxfb/linuxfb.pro | 5 +- .../linuxfb/qgraphicssystem_linuxfb.cpp | 66 ++- .../linuxfb/qgraphicssystem_linuxfb.h | 26 +- .../linuxfb/qwindowsurface_linuxfb.cpp | 114 ---- .../linuxfb/qwindowsurface_linuxfb.h | 73 --- .../graphicssystems/vnc/qgraphicssystem_vnc.cpp | 110 +--- .../graphicssystems/vnc/qgraphicssystem_vnc.h | 50 +- src/plugins/graphicssystems/vnc/qvnccursor.cpp | 541 +------------------ src/plugins/graphicssystems/vnc/qvnccursor.h | 27 +- src/plugins/graphicssystems/vnc/qvncserver.cpp | 8 +- src/plugins/graphicssystems/vnc/qvncserver.h | 5 +- .../graphicssystems/vnc/qwindowsurface_vnc.cpp | 125 ----- .../graphicssystems/vnc/qwindowsurface_vnc.h | 80 --- src/plugins/graphicssystems/vnc/vnc.pro | 9 +- 24 files changed, 1173 insertions(+), 1123 deletions(-) create mode 100644 src/gui/painting/qgraphicssystemcursor.cpp create mode 100644 src/gui/painting/qgraphicssystemcursor.h create mode 100644 src/plugins/graphicssystems/fb_base/fb_base.cpp create mode 100644 src/plugins/graphicssystems/fb_base/fb_base.h create mode 100644 src/plugins/graphicssystems/fb_base/fb_base.pro delete mode 100644 src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp delete mode 100644 src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h delete mode 100644 src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp delete mode 100644 src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 74f2971..c36dc44 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -2655,7 +2655,7 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { // Update cursor for alien/graphics widgets. const bool enterOnAlien = (enter && (isAlien(enter) || enter->testAttribute(Qt::WA_DontShowOnScreen))); -#if defined(Q_WS_X11) +#if defined(Q_WS_X11) || defined(Q_WS_LITE) //Whenever we leave an alien widget on X11, we need to reset its nativeParentWidget()'s cursor. // This is not required on Windows as the cursor is reset on every single mouse move. QWidget *parentOfLeavingCursor = 0; @@ -2676,7 +2676,11 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { if (!parentOfLeavingCursor->window()->graphicsProxyWidget()) #endif { +#if defined(Q_WS_X11) qt_x11_enforce_cursor(parentOfLeavingCursor,true); +#elif defined(Q_WS_LITE) + qt_lite_set_cursor(parentOfLeavingCursor, true); +#endif } } #endif @@ -2700,6 +2704,8 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { qt_x11_enforce_cursor(cursorWidget, true); #elif defined(Q_WS_S60) qt_symbian_set_cursor(cursorWidget, true); +#elif defined(Q_WS_LITE) + qt_lite_set_cursor(cursorWidget, true); #endif } } diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 2622f1c..baec8ca 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -606,6 +606,8 @@ Q_GUI_EXPORT void qt_translateRawTouchEvent(QWidget *window, extern void qt_x11_enforce_cursor(QWidget *); #elif defined(Q_OS_SYMBIAN) extern void qt_symbian_set_cursor(QWidget *, bool); +#elif defined (Q_WS_LITE) + extern void qt_lite_set_cursor(QWidget *, bool); #endif QT_END_NAMESPACE diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 1eb93d3..a4d60a7 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -48,6 +48,8 @@ #include "private/qapplication_p.h" #include "qdesktopwidget.h" +#include "qgraphicssystemcursor.h" + QT_BEGIN_NAMESPACE void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool /*destroyOldWindow*/) @@ -647,4 +649,26 @@ void QWidgetPrivate::setModal_sys() { } +void qt_lite_set_cursor(QWidget * w, bool force) +{ + static QPointer lastUnderMouse = 0; + if (force) { + lastUnderMouse = w; + } else if (w->testAttribute(Qt::WA_WState_Created) && lastUnderMouse + && lastUnderMouse->effectiveWinId() == w->effectiveWinId()) { + w = lastUnderMouse; + } + + QWidget * curWin = QApplication::activeWindow(); + if (!curWin && w && w->internalWinId()) + return; + QWidget* cW = w && !w->internalWinId() ? w : curWin; + if (!cW || cW->window() != w->window() || + !cW->isVisible() || !cW->underMouse() || QApplication::overrideCursor()) + return; + + if (QGraphicsSystemCursor::instance) { + QGraphicsSystemCursor::instance->changeCursor(w); + } +} QT_END_NAMESPACE diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 4a32e71..2c6deda 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -182,7 +182,10 @@ embedded { embedded_lite { SOURCES += \ painting/qcolormap_lite.cpp \ - painting/qpaintdevice_lite.cpp + painting/qpaintdevice_lite.cpp \ + painting/qgraphicssystemcursor.cpp + HEADERS += \ + painting/qgraphicssystemcursor.h } symbian { diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index a2d03f0..7cc6247 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -72,6 +72,8 @@ public: virtual int depth() const = 0; virtual QImage::Format format() const = 0; virtual QSize physicalSize() const = 0; + virtual void setDirty(QRect) { } + virtual void pointerEvent(QMouseEvent &) { } }; class Q_GUI_EXPORT QGraphicsSystem diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp new file mode 100644 index 0000000..91a6535 --- /dev/null +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -0,0 +1,600 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qgraphicssystemcursor.h" +//#include "qlighthousegraphicsscreen.h" + +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +QPointer QGraphicsSystemCursor::instance = 0; + +QGraphicsSystemCursor::QGraphicsSystemCursor(QGraphicsSystemScreen *scr ) + :currentRect(QRect()), prevRect(QRect()), screen(scr) +{ + graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); + instance = this; + QWidget * widget = QApplication::widgetAt(QCursor::pos()); + changeCursor(widget); +} + +QGraphicsSystemCursor::~QGraphicsSystemCursor() +{ +} + +void QGraphicsSystemCursor::setCursor(Qt::CursorShape shape) +{ + graphic->set(shape); +} + +void QGraphicsSystemCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) +{ + graphic->set(data, mask, width, height, hotX, hotY); +} + +QRect QGraphicsSystemCursor::dirtyRect() +{ + if (!prevRect.isNull()) { + QRect rect = prevRect; + prevRect = QRect(); + return rect; + } + return QRect(); +} + +QRect QGraphicsSystemCursor::drawCursor(QPainter & painter) +{ + if (currentRect.isNull()) + return QRect(); + + prevRect = currentRect; + painter.drawImage(prevRect, *graphic->image()); + return prevRect; +} + +void QGraphicsSystemCursor::pointerEvent(QMouseEvent & e) +{ + currentRect = graphic->image()->rect().translated(-graphic->hotspot().x(), + -graphic->hotspot().y()); + currentRect.translate(e.pos()); + screen->setDirty(currentRect); + + screen->pointerEvent(e); +} + +void QGraphicsSystemCursor::changeCursor(QWidget * widget) +{ + if (widget) { + QCursor widgetCursor = widget->cursor(); + Qt::CursorShape shape = widgetCursor.shape(); + + if (shape == Qt::BitmapCursor) { + // application supplied cursor + const QBitmap * map = widgetCursor.bitmap(); + const QBitmap * mask = widgetCursor.mask(); + QPoint spot = widgetCursor.hotSpot(); + setCursor(map->toImage().bits(), mask->toImage().bits(), map->width(), map->height(), spot.x(), spot.y()); + } else { + // system cursor + setCursor(shape); + } + } else { + // default cursor + setCursor(Qt::ArrowCursor); + } +} + +// End of display and pointer event handling code +// Beginning of built-in cursor graphics +// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp + +static QGraphicsSystemCursorImage *systemCursorTable[Qt::LastCursor+1]; +static bool systemCursorTableInit = false; + +// 16 x 16 +static const uchar cur_arrow_bits[] = { + 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, + 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, + 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; +static const uchar mcur_arrow_bits[] = { + 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, + 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, + 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; + +static const unsigned char cur_up_arrow_bits[] = { + 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, + 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; +static const unsigned char mcur_up_arrow_bits[] = { + 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, + 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; + +static const unsigned char cur_cross_bits[] = { + 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; +static const unsigned char mcur_cross_bits[] = { + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; + +static const uchar cur_ibeam_bits[] = { + 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_ibeam_bits[] = { + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; + +static const uchar cur_ver_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; +static const uchar mcur_ver_bits[] = { + 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, + 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, + 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; + +static const uchar cur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, + 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, + 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, + 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; +static const uchar cur_bdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, + 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, + 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_bdiag_bits[] = { + 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, + 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, + 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; +static const uchar cur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, + 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, + 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, + 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, + 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; +static const uchar cur_blank_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +// 20 x 20 +static const uchar forbidden_bits[] = { + 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, + 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, + 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, + 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; + +static const uchar forbiddenm_bits[] = { + 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, + 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, + 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, + 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; + +// 32 x 32 +static const uchar wait_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, + 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, + 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, + 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar wait_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, + 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar hsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, + 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar hsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, + 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, + 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, + 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phand_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, + 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, + 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phandm_bits[] = { + 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, + 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, + 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, + 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, + 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar size_all_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, + 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar size_all_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, + 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar whatsthis_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, + 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, + 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, + 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, + 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +static const uchar whatsthism_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, + 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, + 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, + 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, + 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, + 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; + +static const uchar busy_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, + 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, + 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, + 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, + 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static const uchar busym_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, + 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, + 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, + 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, + 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +// 16 x 16 +static const uchar openhand_bits[] = { + 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, + 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, + 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; +static const uchar openhandm_bits[] = { + 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, + 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, + 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; +static const uchar closedhand_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, + 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, + 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; +static const uchar closedhandm_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, + 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, + 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; + +void QGraphicsSystemCursorImage::createSystemCursor(int id) +{ + if (!systemCursorTableInit) { + for (int i = 0; i <= Qt::LastCursor; i++) + systemCursorTable[i] = 0; + systemCursorTableInit = true; + } + switch (id) { + // 16x16 cursors + case Qt::ArrowCursor: + systemCursorTable[Qt::ArrowCursor] = + new QGraphicsSystemCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); + break; + + case Qt::UpArrowCursor: + systemCursorTable[Qt::UpArrowCursor] = + new QGraphicsSystemCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); + break; + + case Qt::CrossCursor: + systemCursorTable[Qt::CrossCursor] = + new QGraphicsSystemCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); + break; + + case Qt::IBeamCursor: + systemCursorTable[Qt::IBeamCursor] = + new QGraphicsSystemCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); + break; + + case Qt::SizeVerCursor: + systemCursorTable[Qt::SizeVerCursor] = + new QGraphicsSystemCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); + break; + + case Qt::SizeHorCursor: + systemCursorTable[Qt::SizeHorCursor] = + new QGraphicsSystemCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); + break; + + case Qt::SizeBDiagCursor: + systemCursorTable[Qt::SizeBDiagCursor] = + new QGraphicsSystemCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); + break; + + case Qt::SizeFDiagCursor: + systemCursorTable[Qt::SizeFDiagCursor] = + new QGraphicsSystemCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); + break; + + case Qt::BlankCursor: + systemCursorTable[Qt::BlankCursor] = + new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); + break; + + // 20x20 cursors + case Qt::ForbiddenCursor: + systemCursorTable[Qt::ForbiddenCursor] = + new QGraphicsSystemCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); + break; + + // 32x32 cursors + case Qt::WaitCursor: + systemCursorTable[Qt::WaitCursor] = + new QGraphicsSystemCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); + break; + + case Qt::SplitVCursor: + systemCursorTable[Qt::SplitVCursor] = + new QGraphicsSystemCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SplitHCursor: + systemCursorTable[Qt::SplitHCursor] = + new QGraphicsSystemCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SizeAllCursor: + systemCursorTable[Qt::SizeAllCursor] = + new QGraphicsSystemCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); + break; + + case Qt::PointingHandCursor: + systemCursorTable[Qt::PointingHandCursor] = + new QGraphicsSystemCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); + break; + + case Qt::WhatsThisCursor: + systemCursorTable[Qt::WhatsThisCursor] = + new QGraphicsSystemCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); + break; + case Qt::BusyCursor: + systemCursorTable[Qt::BusyCursor] = + new QGraphicsSystemCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); + break; + + case Qt::OpenHandCursor: + systemCursorTable[Qt::OpenHandCursor] = + new QGraphicsSystemCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); + break; + case Qt::ClosedHandCursor: + systemCursorTable[Qt::ClosedHandCursor] = + new QGraphicsSystemCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); + break; + default: + qWarning("Unknown system cursor %d", id); + } +} + +void QGraphicsSystemCursorImage::set(Qt::CursorShape id) +{ + QGraphicsSystemCursorImage *cursor = 0; + if (id >= 0 && id <= Qt::LastCursor) { + if (!systemCursorTable[id]) + createSystemCursor(id); + cursor = systemCursorTable[id]; + } + + if (cursor == 0) { + if (!systemCursorTable[Qt::ArrowCursor]) + createSystemCursor(Qt::ArrowCursor); + cursor = systemCursorTable[Qt::ArrowCursor]; + } + cursorImage = cursor->cursorImage; + hot = cursor->hot; +} + +void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, + int width, int height, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + + cursorImage = QImage(width,height, QImage::Format_Indexed8); + + if (!width || !height || !data || !mask || cursorImage.isNull()) + return; + + cursorImage.setNumColors(3); + cursorImage.setColor(0, 0xff000000); + cursorImage.setColor(1, 0xffffffff); + cursorImage.setColor(2, 0x00000000); + + int bytesPerLine = (width + 7) / 8; + int p = 0; + int d, m; + + int x = -1, w = 0; + + uchar *cursor_data = cursorImage.bits(); + int bpl = cursorImage.bytesPerLine(); + for (int i = 0; i < height; i++) + { + for (int j = 0; j < bytesPerLine; j++, data++, mask++) + { + for (int b = 0; b < 8 && j*8+b < width; b++) + { + d = *data & (1 << b); + m = *mask & (1 << b); + if (d && m) p = 0; + else if (!d && m) p = 1; + else p = 2; + cursor_data[j*8+b] = p; + + // calc region + if (x < 0 && m) + x = j*8+b; + else if (x >= 0 && !m) { + x = -1; + w = 0; + } + if (m) + w++; + } + } + if (x >= 0) { + x = -1; + w = 0; + } + cursor_data += bpl; + } + +} + +QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h new file mode 100644 index 0000000..cb5c471 --- /dev/null +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QGRAPHICSSYSTEMCURSOR_H +#define QGRAPHICSSYSTEMCURSOR_H + +#include +#include +#include +#include +#include +#include "qgraphicssystem_p.h" + +QT_BEGIN_NAMESPACE + +// Cursor graphics management +class QGraphicsSystemCursorImage { +public: + QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + { set(data, mask, width, height, hotX, hotY); } + QImage * image() { return &cursorImage; } + QPoint hotspot() { return hot; } + void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void set(Qt::CursorShape); +private: + static void createSystemCursor(int id); + QImage cursorImage; + QPoint hot; +}; + +class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { +public: + QGraphicsSystemCursor(QGraphicsSystemScreen *); + virtual ~QGraphicsSystemCursor(); + + // input methods + virtual void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + virtual void setCursor(Qt::CursorShape shape); + virtual void pointerEvent(QMouseEvent & event); + virtual void changeCursor(QWidget * widget); + + // output methods + virtual QRect drawCursor(QPainter &); + virtual QRect dirtyRect(); + + static QPointer instance; + +protected: + + QRect currentRect; // next place to draw the cursor + QRect prevRect; // last place the cursor was drawn + + QGraphicsSystemScreen * screen; // Where to request an update + QWidget * currentWidget; // widget currently under the cursor + + QGraphicsSystemCursorImage * graphic; +}; + +QT_END_NAMESPACE + +#endif // QGRAPHICSSYSTEMCURSOR_H diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp new file mode 100644 index 0000000..ffa5d4e --- /dev/null +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -0,0 +1,205 @@ +#include "fb_base.h" + +#include +#include +#include + +#include + +QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) +{ + mScreenImage = new QImage(mGeometry.size(), mFormat); + redrawTimer.setSingleShot(true); + redrawTimer.setInterval(0); + QObject::connect(&redrawTimer, SIGNAL(timeout()), this, SLOT(doRedraw())); +} + +void QGraphicsSystemFbScreen::setGeometry(QRect rect) +{ + delete mScreenImage; + mGeometry = rect; + mScreenImage = new QImage(mGeometry.size(), mFormat); +} + +void QGraphicsSystemFbScreen::setDepth(int depth) +{ + mDepth = depth; +} + +void QGraphicsSystemFbScreen::setPhysicalSize(QSize size) +{ + mPhysicalSize = size; +} + +void QGraphicsSystemFbScreen::setFormat(QImage::Format format) +{ + mFormat = format; + delete mScreenImage; + mScreenImage = new QImage(mGeometry.size(), mFormat); +} + +QGraphicsSystemFbScreen::~QGraphicsSystemFbScreen() +{ + delete mScreenImage; +} + +void QGraphicsSystemFbScreen::setDirty(const QRect &rect) +{ + repaintRegion += rect; + if (!redrawTimer.isActive()) { + redrawTimer.start(); + } +} + +QRegion QGraphicsSystemFbScreen::doRedraw() +{ + QRegion touchedRegion; + if (cursor) + repaintRegion += cursor->dirtyRect(); + if (repaintRegion.isEmpty()) + return touchedRegion; + + QPainter compositePainter(mScreenImage); + QVector rects = repaintRegion.rects(); + + for (int rectIndex = 0; rectIndex < repaintRegion.numRects(); rectIndex++) { + QRect rect = rects[rectIndex]; + // Blank the affected area, just in case there's nothing to display + compositePainter.fillRect(rect, Qt::black); + for (int i = 0; i < windowStack.length(); i++) { + if (!windowStack[i]->visible()) + continue; + QRect windowRect = windowStack[i]->geometry(); + QRect intersect = windowRect.intersected(rect); + QRect windowIntersect = intersect.translated(-windowRect.left(), + -windowRect.top()); + if (intersect.isNull()) + continue; + compositePainter.drawImage(intersect, windowStack[i]->image(), + windowIntersect); + } + } + + QRect cursorRect; + if (cursor) { + cursorRect = cursor->drawCursor(compositePainter); + touchedRegion += cursorRect; + } + touchedRegion += repaintRegion; + repaintRegion = QRegion(); + + return touchedRegion; +} + +void QGraphicsSystemFbScreen::removeWindowSurface(QGraphicsSystemFbWindowSurface * surface) +{ + windowStack.removeOne(surface); + setDirty(surface->geometry()); +} + +void QGraphicsSystemFbScreen::raise(QGraphicsSystemFbWindowSurface * surface) +{ + int index = windowStack.indexOf(surface); + if (index <= 0) + return; + windowStack.move(index, index - 1); +} + +void QGraphicsSystemFbScreen::lower(QGraphicsSystemFbWindowSurface * surface) +{ + int index = windowStack.indexOf(surface); + if (index == -1 || index == (windowStack.size() - 1)) + return; + windowStack.move(index, index + 1); +} + +void QGraphicsSystemFbScreen::top(QGraphicsSystemFbWindowSurface * surface) +{ + int index = windowStack.indexOf(surface); + if (index == -1) + return; + windowStack.move(index, 0); +} + +void QGraphicsSystemFbScreen::bottom(QGraphicsSystemFbWindowSurface * surface) +{ + int index = windowStack.indexOf(surface); + if (index == -1) + return; + windowStack.move(index, windowStack.size() - 1); +} + + +void QGraphicsSystemFbScreen::pointerEvent(QMouseEvent & me) +{ + QApplicationPrivate::handleMouseEvent(0, me); +} + + +QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen), + visibleFlag(false) +{ + mImage = QImage(window->size(), mScreen->format()); +} + +QGraphicsSystemFbWindowSurface::~QGraphicsSystemFbWindowSurface() +{ + mScreen->removeWindowSurface(this); +} + +void QGraphicsSystemFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + QRect currentGeometry = geometry(); + // If this is a move, redraw the previous location + if (oldGeometry != currentGeometry) { + mScreen->setDirty(oldGeometry); + oldGeometry = currentGeometry; + } + + QRect dirtyClient = region.boundingRect(); + QRect dirtyRegion(currentGeometry.left() + dirtyClient.left(), + currentGeometry.top() + dirtyClient.top(), + dirtyClient.width(), + dirtyClient.height()); + mScreen->setDirty(dirtyRegion); +} + +void QGraphicsSystemFbWindowSurface::setGeometry(const QRect &rect) +{ + // store previous geometry for screen update + oldGeometry = geometry(); + + // change the widget's QImage if this is a resize + if (mImage.size() != rect.size()) + mImage = QImage(rect.size(), mScreen->format()); + + QApplicationPrivate::handleGeometryChange(this->window(), rect); + + QWindowSurface::setGeometry(rect); +} + +bool QGraphicsSystemFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QGraphicsSystemFbWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QGraphicsSystemFbWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QGraphicsSystemFbWindowSurface::setVisible(bool visible) +{ + visibleFlag = visible; + mScreen->setDirty(geometry()); +} diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h new file mode 100644 index 0000000..fba7a7a --- /dev/null +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -0,0 +1,90 @@ +#ifndef QLIGHTHOUSEGRAPHICSSCREEN_H +#define QLIGHTHOUSEGRAPHICSSCREEN_H + +#include +#include +#include +#include +#include +#include + +class QMouseEvent; +class QSize; +class QPainter; + +class QGraphicsSystemFbWindowSurface; +class QGraphicsSystemFbScreen; + +class QGraphicsSystemFbWindowSurface : public QWindowSurface +{ +public: + QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window); + ~QGraphicsSystemFbWindowSurface(); + + virtual QPaintDevice *paintDevice() { return &mImage; } + virtual void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + virtual bool scroll(const QRegion &area, int dx, int dy); + + virtual void beginPaint(const QRegion ®ion); + virtual void endPaint(const QRegion ®ion); + virtual void setVisible(bool visible); + virtual bool visible() { return visibleFlag; } + + const QImage image() { return mImage; } + void setGeometry(const QRect &rect); +protected: + QGraphicsSystemFbScreen *mScreen; + QRect oldGeometry; + QImage mImage; + bool visibleFlag; +}; + +class QGraphicsSystemFbScreen : public QGraphicsSystemScreen +{ + Q_OBJECT +public: + QGraphicsSystemFbScreen(); + ~QGraphicsSystemFbScreen(); + + virtual QRect geometry() const { return mGeometry; } + virtual int depth() const { return mDepth; } + virtual QImage::Format format() const { return mFormat; } + virtual QSize physicalSize() const { return mPhysicalSize; } + + virtual void setGeometry(QRect rect); + virtual void setDepth(int depth); + virtual void setFormat(QImage::Format format); + virtual void setPhysicalSize(QSize size); + + virtual void setDirty(const QRect &rect); + + virtual void removeWindowSurface(QGraphicsSystemFbWindowSurface * surface); + virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { windowStack.append(surface); } + virtual void raise(QGraphicsSystemFbWindowSurface * surface); + virtual void lower(QGraphicsSystemFbWindowSurface * surface); + virtual void top(QGraphicsSystemFbWindowSurface * surface); + virtual void bottom(QGraphicsSystemFbWindowSurface * surface); + + virtual void pointerEvent(QMouseEvent & me); + + QImage * image() const { return mScreenImage; } + QPaintDevice * paintDevice() const { return mScreenImage; } + +protected: + QList windowStack; + QRegion repaintRegion; + QGraphicsSystemCursor * cursor; + QTimer redrawTimer; + +protected slots: + virtual QRegion doRedraw(); + +protected: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; + QImage *mScreenImage; +}; + +#endif // QLIGHTHOUSEGRAPHICSSCREEN_H diff --git a/src/plugins/graphicssystems/fb_base/fb_base.pro b/src/plugins/graphicssystems/fb_base/fb_base.pro new file mode 100644 index 0000000..e08c0c5 --- /dev/null +++ b/src/plugins/graphicssystems/fb_base/fb_base.pro @@ -0,0 +1,23 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2009-11-05T13:22:31 +# +#------------------------------------------------- + +#QT -= core gui +TARGET = fb_base +#include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +TEMPLATE = lib + +#DEFINES += STATIC_LIBRARY +CONFIG += staticlib + +SOURCES += fb_base.cpp + +HEADERS += fb_base.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/graphicssystems/linuxfb/linuxfb.pro b/src/plugins/graphicssystems/linuxfb/linuxfb.pro index 1251d2f..ea92573 100644 --- a/src/plugins/graphicssystems/linuxfb/linuxfb.pro +++ b/src/plugins/graphicssystems/linuxfb/linuxfb.pro @@ -3,8 +3,9 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems -SOURCES = main.cpp qgraphicssystem_linuxfb.cpp qwindowsurface_linuxfb.cpp -HEADERS = qgraphicssystem_linuxfb.h qwindowsurface_linuxfb.h +SOURCES = main.cpp qgraphicssystem_linuxfb.cpp +HEADERS = qgraphicssystem_linuxfb.h target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +LIBS += -L$$[QT_INSTALL_PLUGINS]/graphicssystems -lfb_base INSTALLS += target diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp index 95c636f..291b118 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp @@ -40,9 +40,11 @@ ****************************************************************************/ #include "qgraphicssystem_linuxfb.h" -#include "qwindowsurface_linuxfb.h" +#include "../fb_base/fb_base.h" #include #include // overrides QT_OPEN +#include +#include #include #include @@ -163,15 +165,11 @@ QLinuxFbGraphicsSystem::QLinuxFbGraphicsSystem() if (!connect(displaySpec)) qFatal("QLinuxFbGraphicsSystem: could not initialize screen"); - mPrimaryScreen = new QLinuxFbGraphicsSystemScreen(); - mPrimaryScreen->mGeometry = QRect(0, 0, w, h); - mPrimaryScreen->mDepth = d; - mPrimaryScreen->mFormat = screenFormat; - mPrimaryScreen->mPhysicalSize = QSize(physWidth, physHeight); - // Create a QImage directly on the screen's framebuffer. // This is the blit target for copying windows to the screen. - mPrimaryScreen->mScreenImage = new QImage(data, w, h, lstep, screenFormat); + mPrimaryScreen = new QLinuxFbGraphicsSystemScreen(data, w, h, lstep, + screenFormat); + mPrimaryScreen->setPhysicalSize(QSize(physWidth, physHeight)); mScreens.append(mPrimaryScreen); } @@ -791,7 +789,57 @@ QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurface(QWidget *widget) con { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. - return new QLinuxFbWindowSurface(mPrimaryScreen, widget); + QGraphicsSystemFbWindowSurface * surface = + new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); + mPrimaryScreen->addWindowSurface(surface); + return surface; +} + +QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, + int h, int lstep, QImage::Format screenFormat) +{ + data = d; + mGeometry = QRect(0,0,w,h); + bytesPerLine = lstep; + mFormat = screenFormat; + mDepth = 16; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); +} + +void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) +{ + mGeometry = rect; + delete mFbScreenImage; + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + delete mScreenImage; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); +} + +void QLinuxFbGraphicsSystemScreen::setFormat(QImage::Format format) +{ + mFormat = format; + delete mFbScreenImage; + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + delete mScreenImage; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); } +QRegion QLinuxFbGraphicsSystemScreen::doRedraw() +{ + QRegion touched; + touched = QGraphicsSystemFbScreen::doRedraw(); + + QPainter compositePainter(mFbScreenImage); + QVector rects = touched.rects(); + for (int i = 0; i < rects.size(); i++) + compositePainter.drawImage(rects[i], *mScreenImage, rects[i]); + return touched; +} QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h index 7ceaf037..f85718a 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h @@ -43,28 +43,24 @@ #define QGRAPHICSSYSTEM_LINUXFB_H #include +#include "../fb_base/fb_base.h" QT_BEGIN_NAMESPACE -class QLinuxFbGraphicsSystemScreen : public QGraphicsSystemScreen +class QLinuxFbGraphicsSystemScreen : public QGraphicsSystemFbScreen { public: - QLinuxFbGraphicsSystemScreen() - : mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) {} - ~QLinuxFbGraphicsSystemScreen() { delete mScreenImage; } + QLinuxFbGraphicsSystemScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); + void setGeometry(QRect rect); + void setFormat(QImage::Format format); - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - -public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; - QImage *mScreenImage; +public slots: + QRegion doRedraw(); +private: + QImage * mFbScreenImage; + uchar * data; + int bytesPerLine; }; class QLinuxFbGraphicsSystemPrivate; diff --git a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp deleted file mode 100644 index dbe5dd7..0000000 --- a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.cpp +++ /dev/null @@ -1,114 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_linuxfb.h" -#include "qgraphicssystem_linuxfb.h" -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QLinuxFbWindowSurface::QLinuxFbWindowSurface - (QLinuxFbGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), - mScreen(screen) -{ -} - -QLinuxFbWindowSurface::~QLinuxFbWindowSurface() -{ -} - -QPaintDevice *QLinuxFbWindowSurface::paintDevice() -{ - return &mImage; -} - -void QLinuxFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(offset); - - QRect rect = geometry(); - QPoint topLeft = rect.topLeft(); - - QPainter painter(mScreen->mScreenImage); - if (region.numRects() == 1) { - QRect wrect = region.boundingRect(); - painter.drawImage(wrect.topLeft() + topLeft, mImage, wrect); - } else { - QVector rects = region.rects(); - foreach (QRect wrect, rects) - painter.drawImage(wrect.topLeft() + topLeft, mImage, wrect); - } -} - -void QLinuxFbWindowSurface::setGeometry(const QRect &r) -{ -#ifdef QT_LITE_FORCE_FULLSCREEN -// any size you like as long as it's full-screen... - QRect rect(mScreen->availableGeometry()); - QApplicationPrivate::handleGeometryChange(this->window(), rect); -#else - QRect rect(r); -#endif - QWindowSurface::setGeometry(rect); - if (mImage.size() != rect.size()) - mImage = QImage(rect.size(), mScreen->format()); -} - -bool QLinuxFbWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} - -void QLinuxFbWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QLinuxFbWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h b/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h deleted file mode 100644 index 37efcb0..0000000 --- a/src/plugins/graphicssystems/linuxfb/qwindowsurface_linuxfb.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_LINUXFB_H -#define QWINDOWSURFACE_LINUXFB_H - -#include - -QT_BEGIN_NAMESPACE - -class QLinuxFbGraphicsSystemScreen; - -class QLinuxFbWindowSurface : public QWindowSurface -{ -public: - QLinuxFbWindowSurface - (QLinuxFbGraphicsSystemScreen *screen, QWidget *window); - ~QLinuxFbWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - QLinuxFbGraphicsSystemScreen *mScreen; - QImage mImage; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp index 98e994c..7815f24 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp @@ -40,7 +40,8 @@ ****************************************************************************/ #include "qgraphicssystem_vnc.h" -#include "qwindowsurface_vnc.h" +#include "../fb_base/fb_base.h" +#include #include #include @@ -49,12 +50,9 @@ #include -#include - -#include "qvnccursor.h" QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() - : mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) + : QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() { int w = 800; int h = 600; @@ -65,32 +63,16 @@ QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() h = eh; } - mGeometry = QRect(0,0,w, h); - - mDepth = 32; - mFormat = QImage::Format_RGB32; - mPhysicalSize = (mGeometry.size()*254)/720; + setGeometry(QRect(0,0,w, h)); + setDepth(32); + setFormat(QImage::Format_RGB32); + setPhysicalSize((geometry().size()*254)/720); - mScreenImage = new QImage(mGeometry.size(), mFormat); d_ptr = new QVNCGraphicsSystemScreenPrivate(this); - helper = new QVNCGraphicsSystemScreenTimerHelper(this); - repaintTimer = new QTimer(); - repaintTimer->setSingleShot(true); - repaintTimer->setInterval(0); - QObject::connect(repaintTimer, SIGNAL(timeout()), helper, SLOT(fireSlot())); - cursor = new QVNCCursor(d_ptr->vncServer, this); - d_ptr->vncServer->setCursor(cursor); -} - - -QVNCGraphicsSystemScreen::~QVNCGraphicsSystemScreen() -{ - delete mScreenImage; - delete repaintTimer; - delete helper; + d_ptr->vncServer->setCursor(static_cast(cursor)); } QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() @@ -98,67 +80,22 @@ QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() return d_ptr->dirty; } - -void QVNCGraphicsSystemScreen::setDirty(const QRect &rect) -{ - repaintRegion += rect; - if (!repaintTimer->isActive()) { - repaintTimer->start(); - } -} - -void QVNCGraphicsSystemScreen::doRedraw() +QRegion QVNCGraphicsSystemScreen::doRedraw() { - repaintRegion += cursor->dirtyRect(); - - if (repaintRegion.isEmpty()) - return; - - QPainter compositePainter(mScreenImage); - - QVector rects = repaintRegion.rects(); - - for (int rectIndex = 0; rectIndex < repaintRegion.numRects(); rectIndex++) { - QRect rect = rects[rectIndex]; - // Blank the affected area, just in case there's nothing to display - // Question - What's the background color? - // Another option - a base level window that is the size of the display - compositePainter.fillRect(rect, Qt::black); - for (int i = 0; i < windowStack.length(); i++) { - if (!windowStack[i]->visible()) - continue; - QRect windowRect = windowStack[i]->geometry(); - QRect intersect = windowRect.intersected(rect); - QRect windowIntersect = intersect.translated(-windowRect.left(), - -windowRect.top()); - if (intersect.isNull()) - continue; - compositePainter.drawImage(intersect, windowStack[i]->image(), - windowIntersect); - } - } + QRegion touched; + touched = QGraphicsSystemFbScreen::doRedraw(); - QRect pointerRect = cursor->drawCursor(compositePainter); - repaintRegion += pointerRect; - rects = repaintRegion.rects(); - for (int i = 0; i < rects.size(); i ++) + QVector rects = touched.rects(); + for (int i = 0; i < rects.size(); i++) d_ptr->setDirty(rects[i]); - - repaintRegion = QRegion(); + return touched; } QVNCGraphicsSystem::QVNCGraphicsSystem() { -//////// xd = new MyDisplay; - mPrimaryScreen = new QVNCGraphicsSystemScreen(); - - //int dw = mPrimaryScreen->geometry().width(); - //int dh = mPrimaryScreen->geometry().height(); - - mScreens.append(mPrimaryScreen); } @@ -171,19 +108,8 @@ QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. - QVNCWindowSurface * newSurface = new QVNCWindowSurface - (const_cast(this), mPrimaryScreen, widget); - mPrimaryScreen->addWindowSurface(newSurface); - return newSurface; -} - -void QVNCGraphicsSystemScreen::removeWindowSurface(QVNCWindowSurface * surface) -{ - windowStack.removeOne(surface); - setDirty(surface->geometry()); -} - -void QVNCGraphicsSystemScreen::pointerEvent(QMouseEvent & me) -{ - QApplicationPrivate::handleMouseEvent(0, me); + QGraphicsSystemFbWindowSurface * surface; + surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); + mPrimaryScreen->addWindowSurface(surface); + return surface; } diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h index eb48f86..b3349b7 100644 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h @@ -43,8 +43,8 @@ #define QGRAPHICSSYSTEM_VNC_H #include -#include "qwindowsurface_vnc.h" #include "qvnccursor.h" +#include "../fb_base/fb_base.h" QT_BEGIN_NAMESPACE @@ -53,57 +53,21 @@ class QVNCDirtyMap; class QVNCGraphicsSystemScreenPrivate; -class QVNCGraphicsSystemScreenTimerHelper; - -class QVNCGraphicsSystemScreen : public QGraphicsSystemScreen +class QVNCGraphicsSystemScreen : public QGraphicsSystemFbScreen { public: QVNCGraphicsSystemScreen(); - ~QVNCGraphicsSystemScreen(); - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - int linestep() const { return mScreenImage ? mScreenImage->bytesPerLine() : 0; } - uchar *base() const { return mScreenImage ? mScreenImage->bits() : 0; } - QVNCDirtyMap *dirtyMap(); - - void setDirty(const QRect &rect); - void removeWindowSurface(QVNCWindowSurface * surface); - void addWindowSurface(QVNCWindowSurface * surface) { windowStack.append(surface); } - void pointerEvent(QMouseEvent & me); + int linestep() const { return image() ? image()->bytesPerLine() : 0; } + uchar *base() const { return image() ? image()->bits() : 0; } + QVNCDirtyMap *dirtyMap(); public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; - QImage *mScreenImage; - QVNCGraphicsSystemScreenPrivate *d_ptr; -private: - QList windowStack; - QRegion repaintRegion; - QTimer * repaintTimer; - QVNCGraphicsSystemScreenTimerHelper * helper; - void doRedraw(); - friend class QVNCGraphicsSystemScreenTimerHelper; - - QVNCCursor * cursor; -}; -class QVNCGraphicsSystemScreenTimerHelper : public QObject -{ - Q_OBJECT -public: - QVNCGraphicsSystemScreenTimerHelper(QVNCGraphicsSystemScreen * s) - { screen = s; } -public slots: - void fireSlot() { screen->doRedraw(); } private: - QVNCGraphicsSystemScreen * screen; + QVNCServer *server; + QRegion doRedraw(); }; class QVNCGraphicsSystemPrivate; diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.cpp b/src/plugins/graphicssystems/vnc/qvnccursor.cpp index 111ee3c..ec9a4ee 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.cpp +++ b/src/plugins/graphicssystems/vnc/qvnccursor.cpp @@ -54,16 +54,14 @@ QT_BEGIN_NAMESPACE QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) - :useVncCursor(false), currentRect(QRect()), - prevRect(QRect()), server(srvr), screen(scr) + :QGraphicsSystemCursor::QGraphicsSystemCursor(scr), useVncCursor(false), server(srvr) { - d_ptr = new QVNCCursorPrivate(0, 0, 0, 0, 0, 0); } void QVNCCursor::setCursorMode(bool vnc) { - if (vnc == useVncCursor) - return; +// if (vnc == useVncCursor) +// return; if (vnc) { screen->setDirty(prevRect); prevRect = QRect(); @@ -76,7 +74,7 @@ void QVNCCursor::setCursorMode(bool vnc) void QVNCCursor::setCursor(Qt::CursorShape shape) { - d_ptr->set(shape); + QGraphicsSystemCursor::setCursor(shape); if (useVncCursor) { sendClientCursor(); } @@ -84,22 +82,12 @@ void QVNCCursor::setCursor(Qt::CursorShape shape) void QVNCCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) { - d_ptr->set(data, mask, width, height, hotX, hotY); + QGraphicsSystemCursor::setCursor(data, mask, width, height, hotX, hotY); if (useVncCursor) { sendClientCursor(); } } -QRect QVNCCursor::dirtyRect() -{ - if (!useVncCursor) { - QRect rect = prevRect; - prevRect = QRect(); - return rect; - } - return QRect(); -} - QRect QVNCCursor::drawCursor(QPainter & painter) { if (useVncCursor) @@ -108,54 +96,11 @@ QRect QVNCCursor::drawCursor(QPainter & painter) if (currentRect.isNull()) return QRect(); - prevRect = currentRect; - painter.drawImage(prevRect, *d_ptr->image()); - return prevRect; -} - -void QVNCCursor::pointerEvent(QMouseEvent & e) -{ - QWidget *widget = QApplication::widgetAt(e.pos()); - - // Determine which cursor to use - if (currentWidget != widget) { - if (widget) { - QCursor widgetCursor = widget->cursor(); - Qt::CursorShape shape = widgetCursor.shape(); - - if (shape == Qt::BitmapCursor) { - // application supplied cursor - const QBitmap * map = widgetCursor.bitmap(); - const QBitmap * mask = widgetCursor.mask(); - QPoint spot = widgetCursor.hotSpot(); - setCursor(map->toImage().bits(), mask->toImage().bits(), map->width(), map->height(), spot.x(), spot.y()); - } else { - // system cursor - setCursor(shape); - } - } else { - // default cursor - setCursor(Qt::ArrowCursor); - } - currentWidget = widget; - } else if (!widget) { - // default cursor - setCursor(Qt::ArrowCursor); - } - if (!useVncCursor) { - currentRect = d_ptr->image()->rect().translated(-d_ptr->hotspot().x(), -d_ptr->hotspot().y()); - currentRect.translate(e.pos()); - screen->setDirty(QRect()); - } - - screen->pointerEvent(e); + return QGraphicsSystemCursor::drawCursor(painter); } void QVNCCursor::clearClientCursor() { - QImage *image = d_ptr->image(); - if (image->isNull()) - return; QTcpSocket *socket = server->clientSocket(); if (!socket) { return; @@ -176,7 +121,7 @@ void QVNCCursor::clearClientCursor() void QVNCCursor::sendClientCursor() { - QImage *image = d_ptr->image(); + QImage *image = graphic->image(); if (image->isNull()) return; QTcpSocket *socket = server->clientSocket(); @@ -187,7 +132,7 @@ void QVNCCursor::sendClientCursor() { const quint16 tmp[6] = { htons(0), htons(1), - htons(d_ptr->hotspot().x()), htons(d_ptr->hotspot().y()), + htons(graphic->hotspot().x()), htons(graphic->hotspot().y()), htons(image->width()), htons(image->height()) }; socket->write((char*)tmp, sizeof(tmp)); @@ -216,474 +161,4 @@ void QVNCCursor::sendClientCursor() socket->write((const char*)bitmap.scanLine(i), width); } -// End of display and pointer event handling code -// Beginning of built-in cursor graphics -// from src/gui/embedded/QVNCCursorPrivate_qws.cpp - -static QVNCCursorPrivate *systemCursorTable[Qt::LastCursor+1]; -static bool systemCursorTableInit = false; - -// 16 x 16 -static const uchar cur_arrow_bits[] = { - 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, - 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, - 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; -static const uchar mcur_arrow_bits[] = { - 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, - 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, - 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; - -static const unsigned char cur_up_arrow_bits[] = { - 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, - 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; -static const unsigned char mcur_up_arrow_bits[] = { - 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, - 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; - -static const unsigned char cur_cross_bits[] = { - 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; -static const unsigned char mcur_cross_bits[] = { - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; - -static const uchar cur_ibeam_bits[] = { - 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_ibeam_bits[] = { - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; - -static const uchar cur_ver_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, - 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; -static const uchar mcur_ver_bits[] = { - 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, - 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, - 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; - -static const uchar cur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, - 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, - 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, - 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; -static const uchar cur_bdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, - 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, - 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_bdiag_bits[] = { - 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, - 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, - 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; -static const uchar cur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, - 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, - 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, - 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, - 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; -static const uchar cur_blank_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -// 20 x 20 -static const uchar forbidden_bits[] = { - 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, - 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, - 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, - 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; - -static const uchar forbiddenm_bits[] = { - 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, - 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, - 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, - 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; - -// 32 x 32 -static const uchar wait_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, - 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, - 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, - 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar wait_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, - 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar hsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, - 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar hsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, - 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, - 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, - 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phand_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, - 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, - 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, - 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phandm_bits[] = { - 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, - 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, - 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, - 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, - 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar size_all_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, - 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar size_all_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, - 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar whatsthis_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, - 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, - 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, - 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, - 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, - 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static const uchar whatsthism_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, - 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, - 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, - 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, - 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, - 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - -static const uchar busy_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, - 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, - 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, - 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, - 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; -static const uchar busym_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, - 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, - 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, - 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, - 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -// 16 x 16 -static const uchar openhand_bits[] = { - 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, - 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, - 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; -static const uchar openhandm_bits[] = { - 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, - 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, - 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; -static const uchar closedhand_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, - 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, - 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; -static const uchar closedhandm_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, - 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, - 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; - -void QVNCCursorPrivate::createSystemCursor(int id) -{ - if (!systemCursorTableInit) { - for (int i = 0; i <= Qt::LastCursor; i++) - systemCursorTable[i] = 0; - systemCursorTableInit = true; - } - switch (id) { - // 16x16 cursors - case Qt::ArrowCursor: - systemCursorTable[Qt::ArrowCursor] = - new QVNCCursorPrivate(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); - break; - - case Qt::UpArrowCursor: - systemCursorTable[Qt::UpArrowCursor] = - new QVNCCursorPrivate(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); - break; - - case Qt::CrossCursor: - systemCursorTable[Qt::CrossCursor] = - new QVNCCursorPrivate(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); - break; - - case Qt::IBeamCursor: - systemCursorTable[Qt::IBeamCursor] = - new QVNCCursorPrivate(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); - break; - - case Qt::SizeVerCursor: - systemCursorTable[Qt::SizeVerCursor] = - new QVNCCursorPrivate(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); - break; - - case Qt::SizeHorCursor: - systemCursorTable[Qt::SizeHorCursor] = - new QVNCCursorPrivate(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); - break; - - case Qt::SizeBDiagCursor: - systemCursorTable[Qt::SizeBDiagCursor] = - new QVNCCursorPrivate(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); - break; - - case Qt::SizeFDiagCursor: - systemCursorTable[Qt::SizeFDiagCursor] = - new QVNCCursorPrivate(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); - break; - - case Qt::BlankCursor: - systemCursorTable[Qt::BlankCursor] = - new QVNCCursorPrivate(0, 0, 0, 0, 0, 0); - break; - - // 20x20 cursors - case Qt::ForbiddenCursor: - systemCursorTable[Qt::ForbiddenCursor] = - new QVNCCursorPrivate(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); - break; - - // 32x32 cursors - case Qt::WaitCursor: - systemCursorTable[Qt::WaitCursor] = - new QVNCCursorPrivate(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); - break; - - case Qt::SplitVCursor: - systemCursorTable[Qt::SplitVCursor] = - new QVNCCursorPrivate(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SplitHCursor: - systemCursorTable[Qt::SplitHCursor] = - new QVNCCursorPrivate(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SizeAllCursor: - systemCursorTable[Qt::SizeAllCursor] = - new QVNCCursorPrivate(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); - break; - - case Qt::PointingHandCursor: - systemCursorTable[Qt::PointingHandCursor] = - new QVNCCursorPrivate(phand_bits, phandm_bits, 32, 32, 0, 0); - break; - - case Qt::WhatsThisCursor: - systemCursorTable[Qt::WhatsThisCursor] = - new QVNCCursorPrivate(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); - break; - case Qt::BusyCursor: - systemCursorTable[Qt::BusyCursor] = - new QVNCCursorPrivate(busy_bits, busym_bits, 32, 32, 0, 0); - break; - - case Qt::OpenHandCursor: - systemCursorTable[Qt::OpenHandCursor] = - new QVNCCursorPrivate(openhand_bits, openhandm_bits, 16, 16, 8, 8); - break; - case Qt::ClosedHandCursor: - systemCursorTable[Qt::ClosedHandCursor] = - new QVNCCursorPrivate(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); - break; - default: - qWarning("Unknown system cursor %d", id); - } -} - -void QVNCCursorPrivate::set(Qt::CursorShape id) -{ - QVNCCursorPrivate *cursor = 0; - if (id >= 0 && id <= Qt::LastCursor) { - if (!systemCursorTable[id]) - createSystemCursor(id); - cursor = systemCursorTable[id]; - } - - if (cursor == 0) { - if (!systemCursorTable[Qt::ArrowCursor]) - createSystemCursor(Qt::ArrowCursor); - cursor = systemCursorTable[Qt::ArrowCursor]; - } - cursorImage = cursor->cursorImage; - hot = cursor->hot; -} - -void QVNCCursorPrivate::set(const uchar *data, const uchar *mask, - int width, int height, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - - cursorImage = QImage(width,height, QImage::Format_Indexed8); - - if (!width || !height || !data || !mask || cursorImage.isNull()) - return; - - cursorImage.setNumColors(3); - cursorImage.setColor(0, 0xff000000); - cursorImage.setColor(1, 0xffffffff); - cursorImage.setColor(2, 0x00000000); - - int bytesPerLine = (width + 7) / 8; - int p = 0; - int d, m; - - int x = -1, w = 0; - - uchar *cursor_data = cursorImage.bits(); - int bpl = cursorImage.bytesPerLine(); - for (int i = 0; i < height; i++) - { - for (int j = 0; j < bytesPerLine; j++, data++, mask++) - { - for (int b = 0; b < 8 && j*8+b < width; b++) - { - d = *data & (1 << b); - m = *mask & (1 << b); - if (d && m) p = 0; - else if (!d && m) p = 1; - else p = 2; - cursor_data[j*8+b] = p; - - // calc region - if (x < 0 && m) - x = j*8+b; - else if (x >= 0 && !m) { - x = -1; - w = 0; - } - if (m) - w++; - } - } - if (x >= 0) { - x = -1; - w = 0; - } - cursor_data += bpl; - } - -} - QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.h b/src/plugins/graphicssystems/vnc/qvnccursor.h index 1c0ce8a..1a53da7 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.h +++ b/src/plugins/graphicssystems/vnc/qvnccursor.h @@ -41,6 +41,7 @@ #ifndef QVNCCURSOR_H #define QVNCCURSOR_H +#include "qgraphicssystemcursor.h" #include #include #include @@ -50,22 +51,7 @@ QT_BEGIN_NAMESPACE class QVNCGraphicsSystemScreen; class QVNCServer; -// Cursor graphics management -class QVNCCursorPrivate { -public: - QVNCCursorPrivate(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - { set(data, mask, width, height, hotX, hotY); } - QImage * image() { return &cursorImage; } - QPoint hotspot() { return hot; } - QImage cursorImage; - QPoint hot; - void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void set(Qt::CursorShape); -private: - static void createSystemCursor(int id); -}; - -class QVNCCursor { +class QVNCCursor : public QGraphicsSystemCursor { public: QVNCCursor(QVNCServer *, QVNCGraphicsSystemScreen *); @@ -73,11 +59,9 @@ public: void setCursorMode(bool vnc); void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); void setCursor(Qt::CursorShape shape); - void pointerEvent(QMouseEvent & event); // output methods QRect drawCursor(QPainter &); - QRect dirtyRect(); // VNC client communication void sendClientCursor(); @@ -85,14 +69,7 @@ public: private: bool useVncCursor; // VNC or local - QRect currentRect; // next place to draw the cursor - QRect prevRect; // last place the cursor was drawn - QVNCServer * server; // VNC server to get events from - QVNCGraphicsSystemScreen * screen; // Where to request an update - QWidget * currentWidget; // widget currently under the cursor - - QVNCCursorPrivate * d_ptr; }; QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index ad20eec..fd66f47 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -680,6 +680,7 @@ void QVNCServer::setEncodings() }; supportCursor = false; + if (encodingsPending && (unsigned)client->bytesAvailable() >= encodingsPending * sizeof(quint32)) { for (int i = 0; i < encodingsPending; ++i) { @@ -783,6 +784,7 @@ void QVNCServer::setEncodings() qDebug("QVNCServer::setEncodings: fallback using raw"); #endif } + if (cursor) cursor->setCursorMode(supportCursor); } @@ -833,10 +835,8 @@ void QVNCServer::pointerEvent() if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; QMouseEvent me(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); - if (cursor) + if(cursor) cursor->pointerEvent(me); - else - QApplicationPrivate::handleMouseEvent(0, me); buttons = ev.buttons; handleMsg = false; } @@ -1827,7 +1827,7 @@ void QRfbRawEncoder::write() inline QImage *QVNCServer::screenImage() const { - return qvnc_screen->mScreenImage; + return qvnc_screen->image(); } void QVNCServer::checkUpdate() diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h index 351c094..79b2098 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -54,6 +54,7 @@ // #include "qgraphicssystem_vnc.h" +#include "qvnccursor.h" #define QT_NO_QWS_CURSOR #ifndef QT_NO_QWS_VNC @@ -466,7 +467,7 @@ public: inline bool hasClientCursor() const { return qvnc_cursor != 0; } #endif - void setCursor(QVNCCursor *c) { cursor = c; } + void setCursor(QVNCCursor * c) { cursor = c; } private: void setPixelFormat(); void setEncodings(); @@ -517,7 +518,7 @@ private: #endif QRfbEncoder *encoder; - QVNCCursor * cursor; + QVNCCursor *cursor; }; diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp deleted file mode 100644 index 24ae846..0000000 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include "qwindowsurface_vnc.h" -#include "qgraphicssystem_vnc.h" -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QVNCWindowSurface::QVNCWindowSurface(QVNCGraphicsSystem *graphicsSystem, - QVNCGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), - mScreen(screen), - visibleFlag(false) -{ - Q_UNUSED(graphicsSystem); - mImage = QImage(window->size(), mScreen->format()); -} - -QVNCWindowSurface::~QVNCWindowSurface() -{ - mScreen->removeWindowSurface(this); -} - -QPaintDevice *QVNCWindowSurface::paintDevice() -{ - return &mImage; -} - -void QVNCWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(offset); - - QRect currentGeometry = geometry(); - // If this is a move, redraw the previous location - if (oldGeometry != currentGeometry) { - mScreen->setDirty(oldGeometry); - oldGeometry = currentGeometry; - } - - QRect dirtyClient = region.boundingRect(); - QRect dirtyRegion(currentGeometry.left() + dirtyClient.left(), - currentGeometry.top() + dirtyClient.top(), - dirtyClient.width(), - dirtyClient.height()); - mScreen->setDirty(dirtyRegion); -} - -void QVNCWindowSurface::setGeometry(const QRect &rect) -{ - // store previous geometry for screen update - oldGeometry = geometry(); - - // change the widget's QImage if this is a resize - if (mImage.size() != rect.size()) - mImage = QImage(rect.size(), mScreen->format()); - - QApplicationPrivate::handleGeometryChange(this->window(), rect); - - QWindowSurface::setGeometry(rect); -} - -bool QVNCWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} - -void QVNCWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QVNCWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QVNCWindowSurface::setVisible(bool visible) -{ - visibleFlag = visible; - mScreen->setDirty(geometry()); -} -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h b/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h deleted file mode 100644 index 477fe1b..0000000 --- a/src/plugins/graphicssystems/vnc/qwindowsurface_vnc.h +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_VNC_H -#define QWINDOWSURFACE_VNC_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class QVNCGraphicsSystem; -class QVNCGraphicsSystemScreen; - -class QVNCWindowSurface : public QWindowSurface -{ -public: - QVNCWindowSurface(QVNCGraphicsSystem *graphicsSystem, - QVNCGraphicsSystemScreen *screen, QWidget *window); - ~QVNCWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - inline const QImage image() { return mImage; } - void setVisible(bool visible); - bool visible() { return visibleFlag; } -private: - QVNCGraphicsSystem *mGraphicsSystem; - QVNCGraphicsSystemScreen *mScreen; - QRect oldGeometry; - QImage mImage; - bool visibleFlag; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/vnc/vnc.pro b/src/plugins/graphicssystems/vnc/vnc.pro index 69cd1f7..aecb371 100644 --- a/src/plugins/graphicssystems/vnc/vnc.pro +++ b/src/plugins/graphicssystems/vnc/vnc.pro @@ -3,10 +3,8 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - - -SOURCES = main.cpp qgraphicssystem_vnc.cpp qwindowsurface_vnc.cpp -HEADERS = qgraphicssystem_vnc.h qwindowsurface_vnc.h +SOURCES = main.cpp qgraphicssystem_vnc.cpp +HEADERS = qgraphicssystem_vnc.h HEADERS += qvncserver.h SOURCES += qvncserver.cpp @@ -15,4 +13,7 @@ HEADERS += qvnccursor.h SOURCES += qvnccursor.cpp target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems + +LIBS += -L$$[QT_INSTALL_PLUGINS]/graphicssystems -lfb_base + INSTALLS += target -- cgit v0.12 From fc0c5aa573d834041b9ea164fc4b19eda7e66ab7 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 11 Nov 2009 13:55:00 +0100 Subject: include fb_base code using fb_base.pri, rather than as a library --- src/plugins/graphicssystems/fb_base/fb_base.pri | 2 ++ src/plugins/graphicssystems/linuxfb/linuxfb.pro | 3 ++- src/plugins/graphicssystems/vnc/vnc.pro | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 src/plugins/graphicssystems/fb_base/fb_base.pri diff --git a/src/plugins/graphicssystems/fb_base/fb_base.pri b/src/plugins/graphicssystems/fb_base/fb_base.pri new file mode 100644 index 0000000..41bd87f --- /dev/null +++ b/src/plugins/graphicssystems/fb_base/fb_base.pri @@ -0,0 +1,2 @@ +SOURCES += ../fb_base/fb_base.cpp +HEADERS += ../fb_base/fb_base.h diff --git a/src/plugins/graphicssystems/linuxfb/linuxfb.pro b/src/plugins/graphicssystems/linuxfb/linuxfb.pro index ea92573..031b843 100644 --- a/src/plugins/graphicssystems/linuxfb/linuxfb.pro +++ b/src/plugins/graphicssystems/linuxfb/linuxfb.pro @@ -6,6 +6,7 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems SOURCES = main.cpp qgraphicssystem_linuxfb.cpp HEADERS = qgraphicssystem_linuxfb.h +include(../fb_base/fb_base.pri) + target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -LIBS += -L$$[QT_INSTALL_PLUGINS]/graphicssystems -lfb_base INSTALLS += target diff --git a/src/plugins/graphicssystems/vnc/vnc.pro b/src/plugins/graphicssystems/vnc/vnc.pro index aecb371..0b73b5b 100644 --- a/src/plugins/graphicssystems/vnc/vnc.pro +++ b/src/plugins/graphicssystems/vnc/vnc.pro @@ -12,8 +12,8 @@ SOURCES += qvncserver.cpp HEADERS += qvnccursor.h SOURCES += qvnccursor.cpp -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +include(../fb_base/fb_base.pri) -LIBS += -L$$[QT_INSTALL_PLUGINS]/graphicssystems -lfb_base +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target -- cgit v0.12 From f50552ccfbe9a71d798d00a2d963898c98654256 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 11 Nov 2009 14:08:41 +0100 Subject: send client cursor via QVNCServer checkUpdate(), rather than asynchronously --- src/plugins/graphicssystems/vnc/qvnccursor.cpp | 12 ++++++++---- src/plugins/graphicssystems/vnc/qvncserver.cpp | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.cpp b/src/plugins/graphicssystems/vnc/qvnccursor.cpp index ec9a4ee..80ab750 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.cpp +++ b/src/plugins/graphicssystems/vnc/qvnccursor.cpp @@ -65,9 +65,9 @@ void QVNCCursor::setCursorMode(bool vnc) if (vnc) { screen->setDirty(prevRect); prevRect = QRect(); - sendClientCursor(); + server->setDirtyCursor(); } else { - clearClientCursor(); + server->setDirtyCursor(); } useVncCursor = vnc; } @@ -76,7 +76,7 @@ void QVNCCursor::setCursor(Qt::CursorShape shape) { QGraphicsSystemCursor::setCursor(shape); if (useVncCursor) { - sendClientCursor(); + server->setDirtyCursor(); } } @@ -84,7 +84,7 @@ void QVNCCursor::setCursor(const uchar *data, const uchar *mask, int width, int { QGraphicsSystemCursor::setCursor(data, mask, width, height, hotX, hotY); if (useVncCursor) { - sendClientCursor(); + server->setDirtyCursor(); } } @@ -121,6 +121,10 @@ void QVNCCursor::clearClientCursor() void QVNCCursor::sendClientCursor() { + if (useVncCursor == false) { + clearClientCursor(); + return; + } QImage *image = graphic->image(); if (image->isNull()) return; diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index fd66f47..ef6b4a1 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -1840,6 +1840,7 @@ void QVNCServer::checkUpdate() Q_ASSERT(qvnc_cursor); qvnc_cursor->write(); #endif + cursor->sendClientCursor(); dirtyCursor = false; wantUpdate = false; return; -- cgit v0.12 From 3ca4be160028e042691fb990ed57126add3a5448 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 12 Nov 2009 15:39:45 +0100 Subject: Support for override cursors, and fixed cursor change without a widget enter/leave --- src/gui/kernel/qapplication_lite.cpp | 10 +++++++--- src/gui/kernel/qwidget_lite.cpp | 16 +++++++++++++--- src/gui/painting/qgraphicssystemcursor.cpp | 29 +++++++++++++++++------------ src/gui/painting/qgraphicssystemcursor.h | 1 + 4 files changed, 38 insertions(+), 18 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 0ddcfab..061ac5b 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -336,14 +336,18 @@ bool QApplication::isEffectEnabled(Qt::UIEffect effect) } #ifndef QT_NO_CURSOR -void QApplication::setOverrideCursor(const QCursor &) +void QApplication::setOverrideCursor(const QCursor &cursor) { - // XXX + qApp->d_func()->cursor_list.prepend(cursor); + qt_lite_set_cursor(0, false); } void QApplication::restoreOverrideCursor() { - // XXX + if (qApp->d_func()->cursor_list.isEmpty()) + return; + qApp->d_func()->cursor_list.removeFirst(); + qt_lite_set_cursor(0, false); } #endif// QT_NO_CURSOR diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index a4d60a7..6a579ad 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -167,14 +167,14 @@ void QWidgetPrivate::setCursor_sys(const QCursor &cursor) Q_UNUSED(cursor); Q_Q(QWidget); if (q->isVisible()) - updateCursor(); + qt_lite_set_cursor(q, false); } void QWidgetPrivate::unsetCursor_sys() { Q_Q(QWidget); if (q->isVisible()) - updateCursor(); + qt_lite_set_cursor(q, false); } void QWidgetPrivate::updateCursor() const @@ -652,7 +652,16 @@ void QWidgetPrivate::setModal_sys() void qt_lite_set_cursor(QWidget * w, bool force) { static QPointer lastUnderMouse = 0; - if (force) { + if (w == 0) { // override cursor stack emptied + QCursor * override = QApplication::overrideCursor(); + if (override) { + if (QGraphicsSystemCursor::instance) { + QGraphicsSystemCursor::instance->changeCursor(override); + } + return; + } + w = QApplication::widgetAt(QCursor::pos()); + } else if (force) { lastUnderMouse = w; } else if (w->testAttribute(Qt::WA_WState_Created) && lastUnderMouse && lastUnderMouse->effectiveWinId() == w->effectiveWinId()) { @@ -663,6 +672,7 @@ void qt_lite_set_cursor(QWidget * w, bool force) if (!curWin && w && w->internalWinId()) return; QWidget* cW = w && !w->internalWinId() ? w : curWin; + if (!cW || cW->window() != w->window() || !cW->isVisible() || !cW->underMouse() || QApplication::overrideCursor()) return; diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 91a6535..9bf5d02 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -105,22 +105,27 @@ void QGraphicsSystemCursor::pointerEvent(QMouseEvent & e) screen->pointerEvent(e); } +void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor) +{ + Qt::CursorShape shape = widgetCursor->shape(); + + if (shape == Qt::BitmapCursor) { + // application supplied cursor + const QBitmap * map = widgetCursor->bitmap(); + const QBitmap * mask = widgetCursor->mask(); + QPoint spot = widgetCursor->hotSpot(); + setCursor(map->toImage().bits(), mask->toImage().bits(), map->width(), map->height(), spot.x(), spot.y()); + } else { + // system cursor + setCursor(shape); + } +} + void QGraphicsSystemCursor::changeCursor(QWidget * widget) { if (widget) { QCursor widgetCursor = widget->cursor(); - Qt::CursorShape shape = widgetCursor.shape(); - - if (shape == Qt::BitmapCursor) { - // application supplied cursor - const QBitmap * map = widgetCursor.bitmap(); - const QBitmap * mask = widgetCursor.mask(); - QPoint spot = widgetCursor.hotSpot(); - setCursor(map->toImage().bits(), mask->toImage().bits(), map->width(), map->height(), spot.x(), spot.y()); - } else { - // system cursor - setCursor(shape); - } + changeCursor(&widgetCursor); } else { // default cursor setCursor(Qt::ArrowCursor); diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h index cb5c471..eab7203 100644 --- a/src/gui/painting/qgraphicssystemcursor.h +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -75,6 +75,7 @@ public: virtual void setCursor(Qt::CursorShape shape); virtual void pointerEvent(QMouseEvent & event); virtual void changeCursor(QWidget * widget); + virtual void changeCursor(QCursor * widgetCursor); // output methods virtual QRect drawCursor(QPainter &); -- cgit v0.12 From 6f22069b01d089ef7151b2d78d56c13c71924b62 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 6 Nov 2009 13:41:17 +0100 Subject: Make tst_QWidget lower() and stackUnder() test functions pass --- src/gui/kernel/qwidget_lite.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 6a579ad..615d4dd 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -419,17 +419,31 @@ void QWidgetPrivate::setFocus_sys() void QWidgetPrivate::raise_sys() { - // XXX + Q_Q(QWidget); + if (q->isWindow()) { + qWarning() << "raise_sys not implemented for tlw" << q; + } } void QWidgetPrivate::lower_sys() { - // XXX + Q_Q(QWidget); + if (q->isWindow()) { + Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); + qWarning() << "lower_sys not implemented for tlw" << q; + } else if (QWidget *p = q->parentWidget()) { + setDirtyOpaqueRegion(); + p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); + } } void QWidgetPrivate::stackUnder_sys(QWidget*) { - // XXX + Q_Q(QWidget); + if (QWidget *p = q->parentWidget()) { + setDirtyOpaqueRegion(); + p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); + } } void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) -- cgit v0.12 From 9904436eb0f3ebdabfba527fe659f4964af8bf06 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 11 Nov 2009 16:46:55 +0100 Subject: Starting to implement grabWindow() for Lighthouse --- src/gui/image/qpixmap_lite.cpp | 9 +++------ src/gui/painting/qgraphicssystem.cpp | 14 ++++++++++++++ src/gui/painting/qgraphicssystem_p.h | 6 +++++- .../graphicssystems/testlite/qgraphicssystem_testlite.cpp | 8 ++++++++ .../graphicssystems/testlite/qgraphicssystem_testlite.h | 2 ++ 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/gui/image/qpixmap_lite.cpp b/src/gui/image/qpixmap_lite.cpp index 90761ca..d263855 100644 --- a/src/gui/image/qpixmap_lite.cpp +++ b/src/gui/image/qpixmap_lite.cpp @@ -40,13 +40,10 @@ ****************************************************************************/ #include +#include +#include QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h) { - Q_UNUSED(window); - Q_UNUSED(x); - Q_UNUSED(y); - Q_UNUSED(w); - Q_UNUSED(h); - return QPixmap(); + return QApplicationPrivate::graphicsSystem()->grabWindow(window, x, y, w, h); } diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp index 1565c45..2071127 100644 --- a/src/gui/painting/qgraphicssystem.cpp +++ b/src/gui/painting/qgraphicssystem.cpp @@ -84,11 +84,23 @@ QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType typ return 0; } +#ifdef Q_WS_LITE QList QGraphicsSystem::screens() const { return QList(); } +QPixmap QGraphicsSystem::grabWindow(WId window, int x, int y, int width, int height) const +{ + Q_UNUSED(window); + Q_UNUSED(x); + Q_UNUSED(y); + Q_UNUSED(width); + Q_UNUSED(height); + return QPixmap(); +} + + QGraphicsSystemScreen::QGraphicsSystemScreen(QObject *parent) : QObject(parent) {} @@ -102,4 +114,6 @@ QRect QGraphicsSystemScreen::availableGeometry() const return geometry(); } +#endif //Q_WS_LITE + QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index 7cc6247..ddba22d 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -60,6 +60,7 @@ QT_BEGIN_NAMESPACE class QPixmapFilter; +#ifdef Q_WS_LITE class Q_GUI_EXPORT QGraphicsSystemScreen : public QObject { Q_OBJECT @@ -75,6 +76,7 @@ public: virtual void setDirty(QRect) { } virtual void pointerEvent(QMouseEvent &) { } }; +#endif // Q_WS_LITE class Q_GUI_EXPORT QGraphicsSystem { @@ -84,8 +86,10 @@ public: virtual ~QGraphicsSystem() = 0; +#ifdef Q_WS_LITE virtual QList screens() const; - + virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; +#endif //### Remove this & change qpixmap.cpp & qbitmap.cpp once every platform is gaurenteed // to have a graphics system. static QPixmapData *createDefaultPixmapData(QPixmapData::PixelType type); diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp index 9cb0424..9991e75 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -77,4 +77,12 @@ QWindowSurface *QTestLiteGraphicsSystem::createWindowSurface(QWidget *widget) co (const_cast(this), mPrimaryScreen, widget); } + +QPixmap QTestLiteGraphicsSystem::grabWindow(WId window, int x, int y, int width, int height) const +{ + qDebug() << "grabWindow" << hex << window << dec<< x << y << width << height; + return QPixmap(); +} + + QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h index ad7f581..b2cd496 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h @@ -75,6 +75,8 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QWindowSurface *createWindowSurface(QWidget *widget) const; + QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + QList screens() const { return mScreens; } MyDisplay *xd; -- cgit v0.12 From 2e3b33c91578e6ec9524b15965449d81e09fb56f Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 13 Nov 2009 16:34:52 +0100 Subject: support raise/lower for widgets that are a lighthouse window --- src/gui/kernel/qwidget_lite.cpp | 9 +++++++-- src/gui/painting/qgraphicssystem_p.h | 3 +++ 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 615d4dd..d52d432 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -51,6 +51,7 @@ #include "qgraphicssystemcursor.h" QT_BEGIN_NAMESPACE +static QGraphicsSystemScreen *qt_screenForWidget(const QWidget *w); void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool /*destroyOldWindow*/) { @@ -421,7 +422,9 @@ void QWidgetPrivate::raise_sys() { Q_Q(QWidget); if (q->isWindow()) { - qWarning() << "raise_sys not implemented for tlw" << q; + QWindowSurface *surface = q->windowSurface(); + QGraphicsSystemScreen *screen = qt_screenForWidget(q); + screen->raise(surface); } } @@ -430,7 +433,9 @@ void QWidgetPrivate::lower_sys() Q_Q(QWidget); if (q->isWindow()) { Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - qWarning() << "lower_sys not implemented for tlw" << q; + QWindowSurface *surface = q->windowSurface(); + QGraphicsSystemScreen *screen = qt_screenForWidget(q); + screen->lower(surface); } else if (QWidget *p = q->parentWidget()) { setDirtyOpaqueRegion(); p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index ddba22d..5b5848e 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -75,6 +75,9 @@ public: virtual QSize physicalSize() const = 0; virtual void setDirty(QRect) { } virtual void pointerEvent(QMouseEvent &) { } + + virtual void raise(QWindowSurface *) { qWarning("This plugin does not support raise()"); } + virtual void lower(QWindowSurface *) { qWarning("This plugin does not support lower()"); } }; #endif // Q_WS_LITE -- cgit v0.12 From 9c89de22a012aab0cb8c0be48374896df69f9d2a Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 13 Nov 2009 16:35:52 +0100 Subject: correct the order of window stacking, support raise and lower --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 31 +++++++------------------ src/plugins/graphicssystems/fb_base/fb_base.h | 8 +++---- 2 files changed, 12 insertions(+), 27 deletions(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index ffa5d4e..c4c009f 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -66,7 +66,7 @@ QRegion QGraphicsSystemFbScreen::doRedraw() QRect rect = rects[rectIndex]; // Blank the affected area, just in case there's nothing to display compositePainter.fillRect(rect, Qt::black); - for (int i = 0; i < windowStack.length(); i++) { + for (int i = windowStack.length() - 1; i >= 0; i--) { if (!windowStack[i]->visible()) continue; QRect windowRect = windowStack[i]->geometry(); @@ -97,39 +97,26 @@ void QGraphicsSystemFbScreen::removeWindowSurface(QGraphicsSystemFbWindowSurface setDirty(surface->geometry()); } -void QGraphicsSystemFbScreen::raise(QGraphicsSystemFbWindowSurface * surface) +void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) { - int index = windowStack.indexOf(surface); + QGraphicsSystemFbWindowSurface *s = static_cast(surface); + int index = windowStack.indexOf(s); if (index <= 0) return; windowStack.move(index, index - 1); + setDirty(s->geometry()); } -void QGraphicsSystemFbScreen::lower(QGraphicsSystemFbWindowSurface * surface) +void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) { - int index = windowStack.indexOf(surface); + QGraphicsSystemFbWindowSurface *s = static_cast(surface); + int index = windowStack.indexOf(s); if (index == -1 || index == (windowStack.size() - 1)) return; windowStack.move(index, index + 1); + setDirty(s->geometry()); } -void QGraphicsSystemFbScreen::top(QGraphicsSystemFbWindowSurface * surface) -{ - int index = windowStack.indexOf(surface); - if (index == -1) - return; - windowStack.move(index, 0); -} - -void QGraphicsSystemFbScreen::bottom(QGraphicsSystemFbWindowSurface * surface) -{ - int index = windowStack.indexOf(surface); - if (index == -1) - return; - windowStack.move(index, windowStack.size() - 1); -} - - void QGraphicsSystemFbScreen::pointerEvent(QMouseEvent & me) { QApplicationPrivate::handleMouseEvent(0, me); diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index fba7a7a..bd69443 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -59,11 +59,9 @@ public: virtual void setDirty(const QRect &rect); virtual void removeWindowSurface(QGraphicsSystemFbWindowSurface * surface); - virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { windowStack.append(surface); } - virtual void raise(QGraphicsSystemFbWindowSurface * surface); - virtual void lower(QGraphicsSystemFbWindowSurface * surface); - virtual void top(QGraphicsSystemFbWindowSurface * surface); - virtual void bottom(QGraphicsSystemFbWindowSurface * surface); + virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { windowStack.prepend(surface); } + virtual void raise(QWindowSurface * surface); + virtual void lower(QWindowSurface * surface); virtual void pointerEvent(QMouseEvent & me); -- cgit v0.12 From 364825a39178fecc0c723ddc0ec7409b2f9b2956 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 13 Nov 2009 17:29:42 +0100 Subject: lower is to the bottom, not 1 lower, raise is to the top, not 1 higher --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index c4c009f..cb1b478 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -103,7 +103,7 @@ void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) int index = windowStack.indexOf(s); if (index <= 0) return; - windowStack.move(index, index - 1); + windowStack.move(index, 0); setDirty(s->geometry()); } @@ -113,7 +113,7 @@ void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) int index = windowStack.indexOf(s); if (index == -1 || index == (windowStack.size() - 1)) return; - windowStack.move(index, index + 1); + windowStack.move(index, windowStack.size() - 1); setDirty(s->geometry()); } -- cgit v0.12 From 12bc7c80b94b5f3acbf87f268c4e68ba4bc89381 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 16 Nov 2009 13:57:53 +0100 Subject: remove an unnecessary call to QGraphicsSystemScreen::setDirty() in QGraphicsSystemCursor::pointerEvent() --- src/gui/painting/qgraphicssystemcursor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 9bf5d02..08dcbbe 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -100,7 +100,6 @@ void QGraphicsSystemCursor::pointerEvent(QMouseEvent & e) currentRect = graphic->image()->rect().translated(-graphic->hotspot().x(), -graphic->hotspot().y()); currentRect.translate(e.pos()); - screen->setDirty(currentRect); screen->pointerEvent(e); } -- cgit v0.12 From 993b3831d3b2704f492c17313a210497b6f9bb5f Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 16 Nov 2009 16:12:52 +0100 Subject: moved top-level raise/lower from QGraphicsSystemScreen to QWindowSurface, testlite support --- src/gui/kernel/qwidget_lite.cpp | 6 ++---- src/gui/painting/qgraphicssystem_p.h | 3 --- src/gui/painting/qwindowsurface_p.h | 3 +++ src/plugins/graphicssystems/fb_base/fb_base.cpp | 10 ++++++++++ src/plugins/graphicssystems/fb_base/fb_base.h | 4 ++++ .../graphicssystems/testlite/qwindowsurface_testlite.cpp | 11 +++++++++++ .../graphicssystems/testlite/qwindowsurface_testlite.h | 2 ++ 7 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index d52d432..cd4fa18 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -423,8 +423,7 @@ void QWidgetPrivate::raise_sys() Q_Q(QWidget); if (q->isWindow()) { QWindowSurface *surface = q->windowSurface(); - QGraphicsSystemScreen *screen = qt_screenForWidget(q); - screen->raise(surface); + surface->raise(); } } @@ -434,8 +433,7 @@ void QWidgetPrivate::lower_sys() if (q->isWindow()) { Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); QWindowSurface *surface = q->windowSurface(); - QGraphicsSystemScreen *screen = qt_screenForWidget(q); - screen->lower(surface); + surface->lower(); } else if (QWidget *p = q->parentWidget()) { setDirtyOpaqueRegion(); p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index 5b5848e..ddba22d 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -75,9 +75,6 @@ public: virtual QSize physicalSize() const = 0; virtual void setDirty(QRect) { } virtual void pointerEvent(QMouseEvent &) { } - - virtual void raise(QWindowSurface *) { qWarning("This plugin does not support raise()"); } - virtual void lower(QWindowSurface *) { qWarning("This plugin does not support lower()"); } }; #endif // Q_WS_LITE diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h index 88cc8ba..5e95d80 100644 --- a/src/gui/painting/qwindowsurface_p.h +++ b/src/gui/painting/qwindowsurface_p.h @@ -94,6 +94,9 @@ public: virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); virtual Qt::WindowFlags windowFlags() const; virtual WId winId() const; + + virtual void raise() { qWarning("This plugin does not support raise()"); } + virtual void lower() { qWarning("This plugin does not support lower()"); } #endif bool hasStaticContentsSupport() const; diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index cb1b478..b992b15 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -97,6 +97,11 @@ void QGraphicsSystemFbScreen::removeWindowSurface(QGraphicsSystemFbWindowSurface setDirty(surface->geometry()); } +void QGraphicsSystemFbWindowSurface::raise() +{ + mScreen->raise(this); +} + void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) { QGraphicsSystemFbWindowSurface *s = static_cast(surface); @@ -107,6 +112,11 @@ void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) setDirty(s->geometry()); } +void QGraphicsSystemFbWindowSurface::lower() +{ + mScreen->lower(this); +} + void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) { QGraphicsSystemFbWindowSurface *s = static_cast(surface); diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index bd69443..83c3e06 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -32,6 +32,10 @@ public: const QImage image() { return mImage; } void setGeometry(const QRect &rect); + + virtual void raise(); + virtual void lower(); + protected: QGraphicsSystemFbScreen *mScreen; QRect oldGeometry; diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 9e24f55..be86cb5 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -578,4 +578,15 @@ WId QTestLiteWindowSurface::winId() const return WId(0); } +void QTestLiteWindowSurface::raise() +{ + WId window = winId(); + XRaiseWindow(mGraphicsSystem->xd->display, window); +} + +void QTestLiteWindowSurface::lower() +{ + WId window = winId(); + XLowerWindow(mGraphicsSystem->xd->display, window); +} QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index 59db81f..3603e93 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -79,6 +79,8 @@ public: Qt::WindowFlags windowFlags() const; void setVisible(bool visible); WId winId() const; + void raise(); + void lower(); private: QTestLiteGraphicsSystem *mGraphicsSystem; -- cgit v0.12 From b594232e02bab7f082c78ca354e02b4a7e9842e2 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 17 Nov 2009 09:07:01 +0100 Subject: remap global mouse event position to the toplevel's coordinates --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 22 +++++++++++++++++++++- src/plugins/graphicssystems/fb_base/fb_base.h | 1 + 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index b992b15..281d0e0 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -129,9 +129,29 @@ void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) void QGraphicsSystemFbScreen::pointerEvent(QMouseEvent & me) { - QApplicationPrivate::handleMouseEvent(0, me); + QWidget * widget = topLevelAt(me.pos()); + if (!widget) { + QApplicationPrivate::handleMouseEvent(0, me); + return; + } + QPoint localPosition = me.pos(); + QPoint topLeft = widget->geometry().topLeft(); + localPosition.setX(localPosition.x() - topLeft.x()); + localPosition.setY(localPosition.y() - topLeft.y()); + QMouseEvent e(me.type(), localPosition, me.globalPos(), me.button(), me.buttons(), me.modifiers()); + QApplicationPrivate::handleMouseEvent(widget, e); } +QWidget * QGraphicsSystemFbScreen::topLevelAt(QPoint p) +{ + for(int i = 0; i < windowStack.size(); i++) { + if (windowStack[i]->geometry().contains(p, false)) { + qDebug() << "toplevel at" << p << windowStack[i]->window()->objectName(); + return windowStack[i]->window(); + } + } + return 0; +} QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window) : QWindowSurface(window), diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index 83c3e06..18519ec 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -66,6 +66,7 @@ public: virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { windowStack.prepend(surface); } virtual void raise(QWindowSurface * surface); virtual void lower(QWindowSurface * surface); + virtual QWidget * topLevelAt(QPoint p); virtual void pointerEvent(QMouseEvent & me); -- cgit v0.12 From 8a38b9bf663998cfe17e041d3013669e77dffac2 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 17 Nov 2009 09:12:47 +0100 Subject: Verify that a window is visible before reporting it as the selected toplevel --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index 281d0e0..5a8daec 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -145,7 +145,8 @@ void QGraphicsSystemFbScreen::pointerEvent(QMouseEvent & me) QWidget * QGraphicsSystemFbScreen::topLevelAt(QPoint p) { for(int i = 0; i < windowStack.size(); i++) { - if (windowStack[i]->geometry().contains(p, false)) { + if (windowStack[i]->geometry().contains(p, false) && + windowStack[i]->visible()) { qDebug() << "toplevel at" << p << windowStack[i]->window()->objectName(); return windowStack[i]->window(); } -- cgit v0.12 From 20f7847fce7b41952121367e7889bc58597ca41a Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 17 Nov 2009 09:48:38 +0100 Subject: remove a qDebug() in topLevelAt() --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index 5a8daec..7e00381 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -147,7 +147,6 @@ QWidget * QGraphicsSystemFbScreen::topLevelAt(QPoint p) for(int i = 0; i < windowStack.size(); i++) { if (windowStack[i]->geometry().contains(p, false) && windowStack[i]->visible()) { - qDebug() << "toplevel at" << p << windowStack[i]->window()->objectName(); return windowStack[i]->window(); } } -- cgit v0.12 From 8fc2eec5b3282665f76f1e0313a03608bf4e7bc1 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 17 Nov 2009 15:06:10 +0100 Subject: Check if a window is minimized before drawing it, or reporting it via topLevelAt() --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index 7e00381..a091f73 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -69,6 +69,8 @@ QRegion QGraphicsSystemFbScreen::doRedraw() for (int i = windowStack.length() - 1; i >= 0; i--) { if (!windowStack[i]->visible()) continue; + if (windowStack[i]->window()->isMinimized()) + continue; QRect windowRect = windowStack[i]->geometry(); QRect intersect = windowRect.intersected(rect); QRect windowIntersect = intersect.translated(-windowRect.left(), @@ -146,7 +148,8 @@ QWidget * QGraphicsSystemFbScreen::topLevelAt(QPoint p) { for(int i = 0; i < windowStack.size(); i++) { if (windowStack[i]->geometry().contains(p, false) && - windowStack[i]->visible()) { + windowStack[i]->visible() && + !windowStack[i]->window()->isMinimized()) { return windowStack[i]->window(); } } -- cgit v0.12 From c357ab6fbb673f75e9f2ccb2da5d3a938eaadf1f Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 19 Nov 2009 11:43:20 +0100 Subject: added QGraphicsSystemScreen::topLevelAt(): find the window at a global position This is used to determine which widget to send a pointer event to, and to implement QApplication::widgetAt(). --- src/gui/kernel/qapplication_lite.cpp | 23 +++++++++-------------- src/gui/painting/qgraphicssystem.cpp | 13 +++++++++++++ src/gui/painting/qgraphicssystem_p.h | 1 + src/gui/painting/qgraphicssystemcursor.cpp | 3 +-- src/plugins/graphicssystems/fb_base/fb_base.cpp | 2 +- src/plugins/graphicssystems/fb_base/fb_base.h | 2 +- 6 files changed, 26 insertions(+), 18 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 061ac5b..b0f5074 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -56,7 +56,7 @@ #include #include - +#include "private/qgraphicssystem_p.h" #include @@ -354,19 +354,14 @@ void QApplication::restoreOverrideCursor() QWidget *QApplication::topLevelAt(const QPoint &pos) { -//### We have to implement a windowsystem-aware way to do this - - //fallback implementation assuming widgets are in stacking order - - QWidgetList list = topLevelWidgets(); - for (int i = list.size()-1; i >= 0; --i) { - QWidget *w = list[i]; - //### mask is ignored - if (w != QApplication::desktop() && w->isVisible() && w->geometry().contains(pos)) - return w; - } - - return 0; + QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); + if (!gs) + return 0; + QGraphicsSystemScreen *screen = gs->screens().first(); + if (!screen) + return 0; + QWidget *w = screen->topLevelAt(pos); + return w; } void QApplication::beep() diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp index 2071127..948223d 100644 --- a/src/gui/painting/qgraphicssystem.cpp +++ b/src/gui/painting/qgraphicssystem.cpp @@ -85,6 +85,19 @@ QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType typ } #ifdef Q_WS_LITE +QWidget *QGraphicsSystemScreen::topLevelAt(const QPoint & pos) const +{ + QWidgetList list = QApplication::topLevelWidgets(); + for (int i = list.size()-1; i >= 0; --i) { + QWidget *w = list[i]; + //### mask is ignored + if (w != QApplication::desktop() && w->isVisible() && w->geometry().contains(pos)) + return w; + } + + return 0; +} + QList QGraphicsSystem::screens() const { return QList(); diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index ddba22d..1bfca58 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -75,6 +75,7 @@ public: virtual QSize physicalSize() const = 0; virtual void setDirty(QRect) { } virtual void pointerEvent(QMouseEvent &) { } + virtual QWidget *topLevelAt(const QPoint &point) const; }; #endif // Q_WS_LITE diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 08dcbbe..b919d0a 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -57,8 +57,7 @@ QGraphicsSystemCursor::QGraphicsSystemCursor(QGraphicsSystemScreen *scr ) { graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); instance = this; - QWidget * widget = QApplication::widgetAt(QCursor::pos()); - changeCursor(widget); + setCursor(Qt::ArrowCursor); } QGraphicsSystemCursor::~QGraphicsSystemCursor() diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index a091f73..d872593 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -144,7 +144,7 @@ void QGraphicsSystemFbScreen::pointerEvent(QMouseEvent & me) QApplicationPrivate::handleMouseEvent(widget, e); } -QWidget * QGraphicsSystemFbScreen::topLevelAt(QPoint p) +QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const { for(int i = 0; i < windowStack.size(); i++) { if (windowStack[i]->geometry().contains(p, false) && diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index 18519ec..8c1bb56 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -66,7 +66,7 @@ public: virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { windowStack.prepend(surface); } virtual void raise(QWindowSurface * surface); virtual void lower(QWindowSurface * surface); - virtual QWidget * topLevelAt(QPoint p); + virtual QWidget * topLevelAt(const QPoint & p) const; virtual void pointerEvent(QMouseEvent & me); -- cgit v0.12 From 19689dd51a93668fda2273472985114e86a9b8d5 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 19 Nov 2009 15:15:17 +0100 Subject: Report cursor movement to QApplicationPrivate::handleMouseEvent() directly We had this running through qvnccursor -> QVNCGraphicsSystemScreen -> QApplicationPrivate, but that doesn't work with the generic Linux input plugin. --- src/gui/kernel/qapplication_lite.cpp | 4 ++++ src/gui/painting/qgraphicssystem_p.h | 5 +++-- src/gui/painting/qgraphicssystemcursor.cpp | 5 ++--- src/gui/painting/qgraphicssystemcursor.h | 2 +- src/plugins/graphicssystems/fb_base/fb_base.cpp | 15 --------------- src/plugins/graphicssystems/fb_base/fb_base.h | 2 -- src/plugins/graphicssystems/vnc/qvnccursor.cpp | 6 ++++-- src/plugins/graphicssystems/vnc/qvncserver.cpp | 3 +-- 8 files changed, 15 insertions(+), 27 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index b0f5074..f2be5c7 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -57,6 +57,7 @@ #include #include "private/qgraphicssystem_p.h" +#include "qgraphicssystemcursor.h" #include @@ -525,6 +526,9 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) static QWidget *implicit_mouse_grabber=0; + if (QGraphicsSystemCursor::instance) + QGraphicsSystemCursor::instance->pointerEvent(ev); + QPoint localPoint = ev.pos(); QPoint globalPoint = ev.globalPos(); QWidget *mouseWindow = tlw; diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index 1bfca58..0b0dfb5 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -56,6 +56,8 @@ #include "private/qpixmapdata_p.h" #include "private/qwindowsurface_p.h" +#include + QT_BEGIN_NAMESPACE class QPixmapFilter; @@ -73,8 +75,7 @@ public: virtual int depth() const = 0; virtual QImage::Format format() const = 0; virtual QSize physicalSize() const = 0; - virtual void setDirty(QRect) { } - virtual void pointerEvent(QMouseEvent &) { } + virtual void setDirty(const QRect &) {} virtual QWidget *topLevelAt(const QPoint &point) const; }; #endif // Q_WS_LITE diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index b919d0a..6aef76c 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -94,13 +94,12 @@ QRect QGraphicsSystemCursor::drawCursor(QPainter & painter) return prevRect; } -void QGraphicsSystemCursor::pointerEvent(QMouseEvent & e) +void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & e) { currentRect = graphic->image()->rect().translated(-graphic->hotspot().x(), -graphic->hotspot().y()); currentRect.translate(e.pos()); - - screen->pointerEvent(e); + screen->setDirty(QRect(QRect(e.pos(), QSize(1, 1)))); } void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor) diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h index eab7203..de7ce84 100644 --- a/src/gui/painting/qgraphicssystemcursor.h +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -73,7 +73,7 @@ public: // input methods virtual void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); virtual void setCursor(Qt::CursorShape shape); - virtual void pointerEvent(QMouseEvent & event); + virtual void pointerEvent(const QMouseEvent & event); virtual void changeCursor(QWidget * widget); virtual void changeCursor(QCursor * widgetCursor); diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index d872593..6ecfd1b 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -129,21 +129,6 @@ void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) setDirty(s->geometry()); } -void QGraphicsSystemFbScreen::pointerEvent(QMouseEvent & me) -{ - QWidget * widget = topLevelAt(me.pos()); - if (!widget) { - QApplicationPrivate::handleMouseEvent(0, me); - return; - } - QPoint localPosition = me.pos(); - QPoint topLeft = widget->geometry().topLeft(); - localPosition.setX(localPosition.x() - topLeft.x()); - localPosition.setY(localPosition.y() - topLeft.y()); - QMouseEvent e(me.type(), localPosition, me.globalPos(), me.button(), me.buttons(), me.modifiers()); - QApplicationPrivate::handleMouseEvent(widget, e); -} - QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const { for(int i = 0; i < windowStack.size(); i++) { diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index 8c1bb56..8e54f47 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -68,8 +68,6 @@ public: virtual void lower(QWindowSurface * surface); virtual QWidget * topLevelAt(const QPoint & p) const; - virtual void pointerEvent(QMouseEvent & me); - QImage * image() const { return mScreenImage; } QPaintDevice * paintDevice() const { return mScreenImage; } diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.cpp b/src/plugins/graphicssystems/vnc/qvnccursor.cpp index 80ab750..a0107b5 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.cpp +++ b/src/plugins/graphicssystems/vnc/qvnccursor.cpp @@ -60,8 +60,6 @@ QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) void QVNCCursor::setCursorMode(bool vnc) { -// if (vnc == useVncCursor) -// return; if (vnc) { screen->setDirty(prevRect); prevRect = QRect(); @@ -77,6 +75,8 @@ void QVNCCursor::setCursor(Qt::CursorShape shape) QGraphicsSystemCursor::setCursor(shape); if (useVncCursor) { server->setDirtyCursor(); + } else { + screen->setDirty(QRect(QRect(0,0,1,1)); } } @@ -85,6 +85,8 @@ void QVNCCursor::setCursor(const uchar *data, const uchar *mask, int width, int QGraphicsSystemCursor::setCursor(data, mask, width, height, hotX, hotY); if (useVncCursor) { server->setDirtyCursor(); + } else { + screen->setDirty(QRect(0,0,1,1)); } } diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index ef6b4a1..fcff255 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -835,8 +835,7 @@ void QVNCServer::pointerEvent() if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; QMouseEvent me(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); - if(cursor) - cursor->pointerEvent(me); + QApplicationPrivate::handleMouseEvent(0, me); buttons = ev.buttons; handleMsg = false; } -- cgit v0.12 From 869c9dad8f4c42db47c448a4c644dc2e54c60c2b Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 19 Nov 2009 15:23:03 +0100 Subject: Add a cursor to linuxfb --- src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp index 291b118..2a0007b 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp @@ -807,6 +807,7 @@ QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, mFormat); mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), bytesPerLine, mFormat); + cursor = new QGraphicsSystemCursor(this); } void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) -- cgit v0.12 From e105e78d81b3696044af693ed65f88034c3e92da Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 19 Nov 2009 17:06:13 +0100 Subject: Compile --- src/gui/painting/qgraphicssystem.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp index 948223d..f9382ec 100644 --- a/src/gui/painting/qgraphicssystem.cpp +++ b/src/gui/painting/qgraphicssystem.cpp @@ -52,6 +52,8 @@ #endif #ifdef Q_WS_LITE # include +# include +# include #endif #ifdef Q_WS_S60 # include -- cgit v0.12 From 4485749550e99b71ba14a2baaef492f1da3c0478 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 19 Nov 2009 18:00:25 +0100 Subject: missing ) in QVNCCursor::setCursor --- src/plugins/graphicssystems/vnc/qvnccursor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.cpp b/src/plugins/graphicssystems/vnc/qvnccursor.cpp index a0107b5..aa0f109 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.cpp +++ b/src/plugins/graphicssystems/vnc/qvnccursor.cpp @@ -76,7 +76,7 @@ void QVNCCursor::setCursor(Qt::CursorShape shape) if (useVncCursor) { server->setDirtyCursor(); } else { - screen->setDirty(QRect(QRect(0,0,1,1)); + screen->setDirty(QRect(QRect(0,0,1,1))); } } -- cgit v0.12 From cd4c5e2af80e5161b301a9798686220eb4731be6 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 23 Nov 2009 15:14:38 +0100 Subject: enable enter/leave event dispatching where the entered widget is null With framebuffer backends (vnc, linuxfb), there can be screen coordinates where no toplevel exists. dispatchEnterLeave() still needs to be called to allow the cursor to be reset when leaving a widget that sets a cursor. --- src/gui/kernel/qapplication.cpp | 6 +++++- src/gui/kernel/qapplication_lite.cpp | 2 +- src/gui/kernel/qwidget_lite.cpp | 17 +++++++++++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index bbf7b40..bb90285 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -2660,7 +2660,11 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { #if defined(Q_WS_X11) qt_x11_enforce_cursor(parentOfLeavingCursor,true); #elif defined(Q_WS_LITE) - qt_lite_set_cursor(parentOfLeavingCursor, true); + if (enter == QApplication::desktop()) { + qt_lite_set_cursor(enter, true); + } else { + qt_lite_set_cursor(parentOfLeavingCursor, true); + } #endif } } diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index f2be5c7..cdaa855 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -558,7 +558,7 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) } if (!mouseWindow && !implicit_mouse_grabber) - return; //nowhere to send it + mouseWindow = QApplication::desktop(); if (mouseWindow && mouseWindow != tlw) { //we did not get a sensible localPoint from the window system, so let's calculate it diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index cd4fa18..88df81f 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -669,8 +669,13 @@ void QWidgetPrivate::setModal_sys() void qt_lite_set_cursor(QWidget * w, bool force) { static QPointer lastUnderMouse = 0; - if (w == 0) { // override cursor stack emptied - QCursor * override = QApplication::overrideCursor(); + + QCursor * override = QApplication::overrideCursor(); + + if (override && w != 0) + return; + + if (w == 0) { if (override) { if (QGraphicsSystemCursor::instance) { QGraphicsSystemCursor::instance->changeCursor(override); @@ -678,6 +683,8 @@ void qt_lite_set_cursor(QWidget * w, bool force) return; } w = QApplication::widgetAt(QCursor::pos()); + if (w == 0) // clear the override cursor while over empty space + w = QApplication::desktop(); } else if (force) { lastUnderMouse = w; } else if (w->testAttribute(Qt::WA_WState_Created) && lastUnderMouse @@ -685,6 +692,12 @@ void qt_lite_set_cursor(QWidget * w, bool force) w = lastUnderMouse; } + if (w == QApplication::desktop()) { + if (QGraphicsSystemCursor::instance) { + QGraphicsSystemCursor::instance->changeCursor(w); + } + } + QWidget * curWin = QApplication::activeWindow(); if (!curWin && w && w->internalWinId()) return; -- cgit v0.12 From 52df0e48813c97e27644fb6052c541af39a8dc92 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 24 Nov 2009 11:03:33 +0100 Subject: mark the screen dirty after a cursor change --- src/gui/painting/qgraphicssystemcursor.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 6aef76c..300c719 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -116,6 +116,7 @@ void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor) // system cursor setCursor(shape); } + screen->setDirty(currentRect); } void QGraphicsSystemCursor::changeCursor(QWidget * widget) @@ -126,6 +127,7 @@ void QGraphicsSystemCursor::changeCursor(QWidget * widget) } else { // default cursor setCursor(Qt::ArrowCursor); + screen->setDirty(currentRect); } } -- cgit v0.12 From 4750df7a21748416541c88572ff46f83861745fd Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 24 Nov 2009 11:35:04 +0100 Subject: recalculate the cursor's current QRect when changing the cursor graphic --- src/gui/painting/qgraphicssystemcursor.cpp | 16 ++++++++++++---- src/gui/painting/qgraphicssystemcursor.h | 3 +++ 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 300c719..cad914d 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -94,12 +94,18 @@ QRect QGraphicsSystemCursor::drawCursor(QPainter & painter) return prevRect; } +QRect QGraphicsSystemCursor::getCurrentRect() +{ + QRect rect = graphic->image()->rect().translated(-graphic->hotspot().x(), + -graphic->hotspot().y()); + rect.translate(QCursor::pos()); + return rect; +} + void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & e) { - currentRect = graphic->image()->rect().translated(-graphic->hotspot().x(), - -graphic->hotspot().y()); - currentRect.translate(e.pos()); - screen->setDirty(QRect(QRect(e.pos(), QSize(1, 1)))); + currentRect = getCurrentRect(); + screen->setDirty(currentRect); } void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor) @@ -116,6 +122,7 @@ void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor) // system cursor setCursor(shape); } + currentRect = getCurrentRect(); screen->setDirty(currentRect); } @@ -127,6 +134,7 @@ void QGraphicsSystemCursor::changeCursor(QWidget * widget) } else { // default cursor setCursor(Qt::ArrowCursor); + currentRect = getCurrentRect(); screen->setDirty(currentRect); } } diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h index de7ce84..ea30319 100644 --- a/src/gui/painting/qgraphicssystemcursor.h +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -92,6 +92,9 @@ protected: QWidget * currentWidget; // widget currently under the cursor QGraphicsSystemCursorImage * graphic; + +private: + QRect getCurrentRect(); }; QT_END_NAMESPACE -- cgit v0.12 From efa0d024fc262b89189c0589a0ee81fe083635b1 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 24 Nov 2009 13:57:27 +0100 Subject: Cursor shapes for the testlite backend --- .../testlite/qgraphicssystem_testlite.cpp | 55 +++++++++++++ .../testlite/qwindowsurface_testlite.cpp | 6 ++ .../testlite/qwindowsurface_testlite.h | 2 + src/plugins/graphicssystems/testlite/x11util.cpp | 93 +++++++++++++++++++++- src/plugins/graphicssystems/testlite/x11util.h | 1 + 5 files changed, 155 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp index 9991e75..64386b7 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -44,12 +44,62 @@ #include #include +#include + + #include "x11util.h" QT_BEGIN_NAMESPACE +class MyCursor : QGraphicsSystemCursor +{ +public: + MyCursor(QGraphicsSystemScreen *screen) : QGraphicsSystemCursor(screen) {} + + // input methods + void setCursor(const uchar */*data*/, const uchar */*mask*/, int width, int height, int hotX, int hotY) {qDebug() << "setCursor data..." << width << height << hotX << hotY;} + + void setCursor(Qt::CursorShape shape) { + static int oldshape = -1; + if (shape != oldshape) { + qDebug() << "setCursor" << shape; QGraphicsSystemCursor::setCursor(shape); + oldshape = shape; + } + } + + void changeCursor(QWidget * widget) { + + QTestLiteWindowSurface *ws = 0; + if (widget) { + QWidget *window = widget->window(); + ws = static_cast(window->windowSurface()); + } + + //qDebug() << "changeCursor" << widget << ws; + if (!ws) + return; + + ws->setCursor(widget->cursor().shape()); + } + +// void changeCursor(QCursor * widgetCursor) { +// //qDebug() << "changeCursor widgetCursor"; +// QGraphicsSystemCursor::changeCursor(widgetCursor); +// } + + //#### remove this + void pointerEvent(const QMouseEvent & event) { + Q_UNUSED(event); +#if 0 + qDebug() << "pointerEvent" << event.globalPos(); +#endif + } +}; + + QTestLiteGraphicsSystem::QTestLiteGraphicsSystem() { + xd = new MyDisplay; mPrimaryScreen = new QTestLiteGraphicsSystemScreen(); @@ -62,6 +112,10 @@ QTestLiteGraphicsSystem::QTestLiteGraphicsSystem() QSize(xd->physicalWidth, xd->physicalHeight); mScreens.append(mPrimaryScreen); + + + (void)new MyCursor(mPrimaryScreen); + } QPixmapData *QTestLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const @@ -85,4 +139,5 @@ QPixmap QTestLiteGraphicsSystem::grabWindow(WId window, int x, int y, int width, } + QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index be86cb5..495b572 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -589,4 +589,10 @@ void QTestLiteWindowSurface::lower() WId window = winId(); XLowerWindow(mGraphicsSystem->xd->display, window); } + + +void QTestLiteWindowSurface::setCursor(Qt::CursorShape shape) +{ + xw->setCursorShape(shape); +} QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index 3603e93..cedd66c 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -82,6 +82,8 @@ public: void raise(); void lower(); + void setCursor(Qt::CursorShape shape); + private: QTestLiteGraphicsSystem *mGraphicsSystem; QTestLiteGraphicsSystemScreen *mScreen; diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 0c6f3c5..5830550 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -55,6 +55,7 @@ #include +#include //### remove stuff we don't want from qt_x11_p.h @@ -480,7 +481,7 @@ void MyWindow::setGeometry(int x, int y, int w, int h) } -void MyWindow::enterEvent(XCrossingEvent *e) +void MyWindow::enterEvent(XCrossingEvent *) { #ifdef MYX11_DEBUG qDebug() << "MyWindow::enterEvent" << hex << window; @@ -488,7 +489,7 @@ void MyWindow::enterEvent(XCrossingEvent *e) windowSurface->handleEnterEvent(); } -void MyWindow::leaveEvent(XCrossingEvent *e) +void MyWindow::leaveEvent(XCrossingEvent *) { #ifdef MYX11_DEBUG qDebug() << "MyWindow::enterEvent" << hex << window; @@ -782,3 +783,91 @@ void MyWindow::setVisible(bool visible) else XUnmapWindow(xd->display, window); } + + +void MyWindow::setCursorShape(int cshape) +{ + if (cshape < 0 || cshape > Qt::LastCursor) + return; + + static Cursor cursors[Qt::LastCursor+1] = {XNone}; + + Cursor cursor = cursors[cshape]; + if (!cursor) { + switch (cshape) { + case Qt::ArrowCursor: + cursor = XCreateFontCursor(xd->display, XC_left_ptr); + break; + case Qt::UpArrowCursor: + cursor = XCreateFontCursor(xd->display, XC_center_ptr); + break; + case Qt::CrossCursor: + cursor = XCreateFontCursor(xd->display, XC_crosshair); + break; + case Qt::WaitCursor: + cursor = XCreateFontCursor(xd->display, XC_watch); + break; + case Qt::IBeamCursor: + cursor = XCreateFontCursor(xd->display, XC_xterm); + break; + case Qt::SizeAllCursor: + cursor = XCreateFontCursor(xd->display, XC_fleur); + break; + case Qt::PointingHandCursor: + cursor = XCreateFontCursor(xd->display, XC_hand2); + break; + case Qt::SizeBDiagCursor: + cursor = XCreateFontCursor(xd->display, XC_top_right_corner); + break; + case Qt::SizeFDiagCursor: + cursor = XCreateFontCursor(xd->display, XC_bottom_right_corner); + break; + case Qt::SizeVerCursor: + case Qt::SplitVCursor: + cursor = XCreateFontCursor(xd->display, XC_sb_v_double_arrow); + break; + case Qt::SizeHorCursor: + case Qt::SplitHCursor: + cursor = XCreateFontCursor(xd->display, XC_sb_h_double_arrow); + break; + case Qt::WhatsThisCursor: + cursor = XCreateFontCursor(xd->display, XC_question_arrow); + break; + case Qt::ForbiddenCursor: + cursor = XCreateFontCursor(xd->display, XC_circle); + break; + case Qt::BusyCursor: + cursor = XCreateFontCursor(xd->display, XC_watch); + break; + + default: //default cursor for all the rest + break; + } + cursors[cshape] = cursor; + } + XDefineCursor(xd->display, window, cursor); +} + + +#if 0 + + + switch (cshape) { // map Q cursor to X cursor + case Qt::BlankCursor: + XColor bg, fg; + bg.red = 255 << 8; + bg.green = 255 << 8; + bg.blue = 255 << 8; + fg.red = 0; + fg.green = 0; + fg.blue = 0; + pm = XCreateBitmapFromData(dpy, rootwin, cur_blank_bits, 16, 16); + pmm = XCreateBitmapFromData(dpy, rootwin, cur_blank_bits, 16, 16); + hcurs = XCreatePixmapCursor(dpy, pm, pmm, &fg, &bg, 8, 8); + return; + break; + default: + qWarning("QCursor::update: Invalid cursor shape %d", cshape); + return; + } +#endif diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index 39fc331..e9d4c7b 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -109,6 +109,7 @@ public: Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); void setVisible(bool visible); + void setCursorShape(int cshape); public: //### -- cgit v0.12 From 7dea84cd015538dc327e489113919d75c8e275bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 16 Nov 2009 11:33:26 +0100 Subject: Added QBlittablePixmapData Is going to be used by everyone that reimplements QBlittable --- src/gui/image/image.pri | 2 + src/gui/image/qimage.h | 1 + src/gui/image/qpixmap_blitter.cpp | 65 +++++++++++++++++++++++++++++++ src/gui/image/qpixmap_blitter_p.h | 60 ++++++++++++++++++++++++++++ src/gui/image/qpixmapdata_p.h | 2 +- src/gui/painting/qgraphicssystem_p.h | 2 + src/gui/painting/qpaintengine_blitter.cpp | 31 ++++++++------- src/gui/painting/qpaintengine_blitter_p.h | 9 ++--- 8 files changed, 152 insertions(+), 20 deletions(-) create mode 100644 src/gui/image/qpixmap_blitter.cpp create mode 100644 src/gui/image/qpixmap_blitter_p.h diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index 634c3f3..b232848 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -23,6 +23,7 @@ HEADERS += \ image/qpictureformatplugin.h \ image/qpixmap.h \ image/qpixmap_raster_p.h \ + miage/qpixmap_blitter_p.h \ image/qpixmapcache.h \ image/qpixmapcache_p.h \ image/qpixmapdata_p.h \ @@ -51,6 +52,7 @@ SOURCES += \ image/qiconengineplugin.cpp \ image/qmovie.cpp \ image/qpixmap_raster.cpp \ + image/qpixmap_blitter.cpp \ image/qnativeimage.cpp \ image/qimagepixmapcleanuphooks.cpp \ diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h index d8809ef..f5c22bc 100644 --- a/src/gui/image/qimage.h +++ b/src/gui/image/qimage.h @@ -317,6 +317,7 @@ private: QImageData *d; friend class QRasterPixmapData; + friend class QBlittablePixmapData; friend class QPixmapCacheEntry; friend Q_GUI_EXPORT qint64 qt_image_id(const QImage &image); friend const QVector *qt_image_colortable(const QImage &image); diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp new file mode 100644 index 0000000..9730ecc --- /dev/null +++ b/src/gui/image/qpixmap_blitter.cpp @@ -0,0 +1,65 @@ +#include "qpixmap_blitter_p.h" + +#include +#include + +QBlittablePixmapData::QBlittablePixmapData(PixelType type) + : QPixmapData(type,BlitterClass), m_blittable(0), m_engine(0) +{ +} + +QBlittablePixmapData::~QBlittablePixmapData() +{ +} + +void QBlittablePixmapData::resize(int width, int height) +{ + delete m_blittable; + m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,width,height)); + m_engine = 0; +} + +int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const +{ + QImage *image = m_blittable->lock(); + return image->metric(metric); +} + +void QBlittablePixmapData::fill(const QColor &color) +{ + if (m_blittable->capabilities() & QBlittable::SolidRectCapability) + m_blittable->fillRect(m_blittable->rect(),color); + else + m_blittable->lock()->fill(color.rgb()); +} + +QImage *QBlittablePixmapData::buffer() +{ + return m_blittable->lock(); +} + +QImage QBlittablePixmapData::toImage() +{ + return m_blittable->lock()->copy(); +} + +bool QBlittablePixmapData::hasAlphaChannel() +{ + return m_blittable->lock()->hasAlphaChannel(); +} + +void QBlittablePixmapData::fromImage(const QImage &image, + Qt::ImageConversionFlags flags) +{ + m_blittable = new QImageBlitter(image); + m_engine = 0; +} + +QPaintEngine *QBlittablePixmapData::paintEngine() const +{ + if (!m_engine) { + QBlittablePixmapData *that = const_cast(this); + that->m_engine = new QBlitterPaintEngine(that); + } + return m_engine; +} diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h new file mode 100644 index 0000000..5e93ef4 --- /dev/null +++ b/src/gui/image/qpixmap_blitter_p.h @@ -0,0 +1,60 @@ +#ifndef QPIXMAP_BLITTER_P_H +#define QPIXMAP_BLITTER_P_H + +#include +#include + +class QImageBlitter : public QBlittable +{ +public: + QImageBlitter(const QImage &img) + : QBlittable(img.rect(),0), image(img) + { + } + + void fillRect(const QRectF &, const QColor &) + { + //should never be called + } + void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) + { + //should never be called + } + + QImage *lock() + { + return ℑ + } + + void unlock() + { + } + +private: + QImage image; +}; + +class QBlittablePixmapData : public QPixmapData +{ +public: + QBlittablePixmapData(PixelType type); + ~QBlittablePixmapData(); + + QBlittable *blittable() const { return m_blittable; } + + void resize(int width, int height); + int metric(QPaintDevice::PaintDeviceMetric metric) const; + void fill(const QColor &color); + QImage *buffer(); + QImage toImage(); + bool hasAlphaChannel(); + void fromImage(const QImage &image, Qt::ImageConversionFlags flags); + + QPaintEngine *paintEngine() const; + +protected: + QBlitterPaintEngine *m_engine; + QBlittable *m_blittable; +}; + +#endif // QPIXMAP_BLITTER_P_H diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h index 41e2923..292092f 100644 --- a/src/gui/image/qpixmapdata_p.h +++ b/src/gui/image/qpixmapdata_p.h @@ -73,7 +73,7 @@ public: }; #endif enum ClassId { RasterClass, X11Class, MacClass, DirectFBClass, - OpenGLClass, OpenVGClass, CustomClass = 1024 }; + OpenGLClass, OpenVGClass, BlitterClass, CustomClass = 1024 }; QPixmapData(PixelType pixelType, int classId); virtual ~QPixmapData(); diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index 0b0dfb5..275afc0 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -55,6 +55,7 @@ #include "private/qpixmapdata_p.h" #include "private/qwindowsurface_p.h" +#include "private/qpaintengine_blitter_p.h" #include @@ -85,6 +86,7 @@ class Q_GUI_EXPORT QGraphicsSystem public: virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; virtual QWindowSurface *createWindowSurface(QWidget *widget) const = 0; + virtual QBlittable *createBlittable(const QRect &rect) { return 0; } virtual ~QGraphicsSystem() = 0; diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 367a8b5..b134d84 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -147,9 +147,9 @@ public: class QBlitterPaintEnginePrivate : public QPaintEngineExPrivate { public: - QBlitterPaintEnginePrivate(QPaintDevice *p) - : QPaintEngineExPrivate(), - raster(new QRasterPaintEngine(p)), isBlitterLocked(false), + QBlitterPaintEnginePrivate(QPixmapData *p) + : QPaintEngineExPrivate(), pixmap(p), + raster(new QRasterPaintEngine(&pixmap)), isBlitterLocked(false), capabillities(0), hasXForm(false) { if (QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem()) { @@ -235,6 +235,7 @@ public: raster->d_func()->systemStateChanged(); } + QPixmap pixmap; QRasterPaintEngine *raster; QRasterPaintEngineState *state; @@ -246,7 +247,7 @@ public: uint hasXForm; }; -QBlitterPaintEngine::QBlitterPaintEngine(QPaintDevice *p) +QBlitterPaintEngine::QBlitterPaintEngine(QPixmapData *p) : QPaintEngineEx(*(new QBlitterPaintEnginePrivate(p))) { } @@ -607,23 +608,19 @@ void QBlitterPaintEngine::setState(QPainterState *s) class QBlittablePrivate { public: + QBlittablePrivate(const QRect &rect, QBlittable::Capabilities caps) + : m_rect(rect), caps(caps) + {} QBlittable::Capabilities caps; + QRect m_rect; }; -QBlittable::QBlittable(Capabilities caps) - : d_ptr(new QBlittablePrivate) +QBlittable::QBlittable(const QRect &rect, Capabilities caps) + : d_ptr(new QBlittablePrivate(rect,caps)) { - d_ptr->caps = caps; } -QBlittable::QBlittable(QBlittablePrivate &d, Capabilities caps) - : d_ptr(&d) -{ - d_ptr->caps = caps; -} - - QBlittable::~QBlittable() { delete d_ptr; @@ -636,3 +633,9 @@ QBlittable::Capabilities QBlittable::capabilities() const return d->caps; } +QRect QBlittable::rect() const +{ + Q_D(const QBlittable); + return d->m_rect; +} + diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index 90493a4..16b7b2c 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -22,12 +22,13 @@ public: // Internal ones OutlineCapability = 0x0001000, }; - Q_DECLARE_FLAGS(Capabilities, Capability); + Q_DECLARE_FLAGS (Capabilities, Capability); - QBlittable(Capabilities caps); + QBlittable(const QRect &rect, Capabilities caps); virtual ~QBlittable(); Capabilities capabilities() const; + QRect rect() const; virtual void fillRect(const QRectF &rect, const QColor &color) = 0; virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) = 0; @@ -37,8 +38,6 @@ public: protected: QBlittablePrivate *d_ptr; - - QBlittable(QBlittablePrivate &d, Capabilities caps); }; @@ -46,7 +45,7 @@ class Q_GUI_EXPORT QBlitterPaintEngine : public QPaintEngineEx { Q_DECLARE_PRIVATE(QBlitterPaintEngine); public: - QBlitterPaintEngine(QPaintDevice *p); + QBlitterPaintEngine(QPixmapData *p); ~QBlitterPaintEngine(); virtual QPainterState *createState(QPainterState *orig) const; -- cgit v0.12 From e6d223f9989ebe9805ddda007c9372143f9f1db6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 20 Nov 2009 09:44:56 +0100 Subject: Made the blitter api work in lighthouse --- src/gui/image/qpixmap_blitter.cpp | 61 ++++++++++++-- src/gui/image/qpixmap_blitter_p.h | 11 +-- src/gui/image/qpixmapdata_p.h | 1 + src/gui/painting/qgraphicssystem_p.h | 2 +- src/gui/painting/qpaintengine_blitter.cpp | 51 ++++++------ src/gui/painting/qpaintengine_blitter_p.h | 3 +- src/gui/painting/qpaintengine_raster.cpp | 4 +- .../graphicssystems/minimaldfb/minimaldfb.pro | 8 +- .../minimaldfb/qblitter_directfb.cpp | 94 ++++++++++++++++++++++ .../graphicssystems/minimaldfb/qblitter_directfb.h | 24 ++++++ .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 65 ++++++++++----- .../minimaldfb/qgraphicssystem_minimaldfb.h | 4 +- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 55 +++++-------- .../minimaldfb/qwindowsurface_minimaldfb.h | 5 +- 14 files changed, 287 insertions(+), 101 deletions(-) create mode 100644 src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp create mode 100644 src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 9730ecc..5ecc01d 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -3,8 +3,8 @@ #include #include -QBlittablePixmapData::QBlittablePixmapData(PixelType type) - : QPixmapData(type,BlitterClass), m_blittable(0), m_engine(0) +QBlittablePixmapData::QBlittablePixmapData(QPixmapData::PixelType type) + : QPixmapData(type,BlitterClass), m_engine(0), m_blittable(0) { } @@ -12,17 +12,62 @@ QBlittablePixmapData::~QBlittablePixmapData() { } +QBlittable *QBlittablePixmapData::blittable() +{ + if (!m_blittable) { + m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,w,h)); + } + + return m_blittable; +} + +void QBlittablePixmapData::setBlittable(QBlittable *blittable) +{ + if (m_blittable) + delete m_blittable; + m_blittable = blittable; +} + void QBlittablePixmapData::resize(int width, int height) { delete m_blittable; - m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,width,height)); + m_blittable = 0; + delete m_engine; m_engine = 0; + d = 32; + w = width; + h = height; +// d = image.depth(); + is_null = (w <= 0 || h <= 0); } +extern int qt_defaultDpiX(); +extern int qt_defaultDpiY(); int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const { - QImage *image = m_blittable->lock(); - return image->metric(metric); + switch (metric) { + case QPaintDevice::PdmWidth: + return w; + case QPaintDevice::PdmHeight: + return h; + case QPaintDevice::PdmWidthMM: + return qRound(w * 25.4 / qt_defaultDpiX()); + case QPaintDevice::PdmHeightMM: + return qRound(h * 25.4 / qt_defaultDpiY()); + case QPaintDevice::PdmDepth: + return 32; + case QPaintDevice::PdmDpiX: // fall-through + case QPaintDevice::PdmPhysicalDpiX: + return qt_defaultDpiX(); + case QPaintDevice::PdmDpiY: // fall-through + case QPaintDevice::PdmPhysicalDpiY: + return qt_defaultDpiY(); + default: + qWarning("QRasterPixmapData::metric(): Unhandled metric type %d", metric); + break; + } + + return 0; } void QBlittablePixmapData::fill(const QColor &color) @@ -38,18 +83,18 @@ QImage *QBlittablePixmapData::buffer() return m_blittable->lock(); } -QImage QBlittablePixmapData::toImage() +QImage QBlittablePixmapData::toImage() const { return m_blittable->lock()->copy(); } -bool QBlittablePixmapData::hasAlphaChannel() +bool QBlittablePixmapData::hasAlphaChannel() const { return m_blittable->lock()->hasAlphaChannel(); } void QBlittablePixmapData::fromImage(const QImage &image, - Qt::ImageConversionFlags flags) + Qt::ImageConversionFlags) { m_blittable = new QImageBlitter(image); m_engine = 0; diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index 5e93ef4..3ed2fe4 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -34,20 +34,21 @@ private: QImage image; }; -class QBlittablePixmapData : public QPixmapData +class Q_GUI_EXPORT QBlittablePixmapData : public QPixmapData { public: - QBlittablePixmapData(PixelType type); + QBlittablePixmapData(QPixmapData::PixelType type); ~QBlittablePixmapData(); - QBlittable *blittable() const { return m_blittable; } + QBlittable *blittable(); + void setBlittable(QBlittable *blittable); void resize(int width, int height); int metric(QPaintDevice::PaintDeviceMetric metric) const; void fill(const QColor &color); QImage *buffer(); - QImage toImage(); - bool hasAlphaChannel(); + QImage toImage() const; + bool hasAlphaChannel() const; void fromImage(const QImage &image, Qt::ImageConversionFlags flags); QPaintEngine *paintEngine() const; diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h index 292092f..a668f0a 100644 --- a/src/gui/image/qpixmapdata_p.h +++ b/src/gui/image/qpixmapdata_p.h @@ -137,6 +137,7 @@ private: friend class QX11PixmapData; friend class QS60PixmapData; friend class QImagePixmapCleanupHooks; // Needs to set is_cached + friend class QBlittablPixmapData; friend class QGLTextureCache; //Needs to check the reference count friend class QExplicitlySharedDataPointer; diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index 275afc0..5fce93d 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -86,7 +86,7 @@ class Q_GUI_EXPORT QGraphicsSystem public: virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; virtual QWindowSurface *createWindowSurface(QWidget *widget) const = 0; - virtual QBlittable *createBlittable(const QRect &rect) { return 0; } + virtual QBlittable *createBlittable(const QRect &) const { return 0; } virtual ~QGraphicsSystem() = 0; diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index b134d84..0632ae0 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -2,6 +2,7 @@ #include "private/qpaintengine_raster_p.h" #include "private/qpainter_p.h" #include "private/qapplication_p.h" +#include "private/qpixmap_blitter_p.h" #define STATE_XFORM_SCALE 0x00000001 #define STATE_XFORM_COMPLEX 0x00000002 @@ -147,21 +148,16 @@ public: class QBlitterPaintEnginePrivate : public QPaintEngineExPrivate { public: - QBlitterPaintEnginePrivate(QPixmapData *p) - : QPaintEngineExPrivate(), pixmap(p), - raster(new QRasterPaintEngine(&pixmap)), isBlitterLocked(false), - capabillities(0), hasXForm(false) - { - if (QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem()) { -// QBlittable *b = gs->createBlitter(p); -// if (b) { -// blitter=b; -// capabillities = new CapabilitiesToStateMask(blitter->capabilities()); -// blitter->unlock(); -// } else -// qWarning("No blitter returned from the graphics system. QBlitterPaintEngine will not work"); - } + QBlitterPaintEnginePrivate(QBlittablePixmapData *p) + : QPaintEngineExPrivate(), + isBlitterLocked(false), + hasXForm(false) + { + blitter= p->blittable(); + raster = new QRasterPaintEngine(p->buffer()); + capabillities = new CapabilitiesToStateMask(blitter->capabilities()); + lock(); } inline void lock() { @@ -179,31 +175,35 @@ public: } void fillRect(const QRectF &rect, const QColor &color) { - unlock(); + lock(); QRectF targetRect = rect; if (hasXForm) { targetRect = state->matrix.mapRect(rect); } QClipData *clipData = raster->state()->clip; if (clipData) { - if (clipData->hasRectClip) + if (clipData->hasRectClip) { + unlock(); blitter->fillRect(targetRect & clipData->clipRect, color); - else if (clipData->hasRegionClip) { + } else if (clipData->hasRegionClip) { QVector rects = clipData->clipRegion.rects(); for ( int i = 0; i < rects.size(); i++ ) { QRect intersectRect = rects.at(i).intersected(targetRect.toRect()); if (!intersectRect.isEmpty()) { + unlock(); blitter->fillRect(intersectRect,color); } } } - }else { + } else { if (targetRect.x() >= 0 && targetRect.y() >= 0 && targetRect.width() <= raster->paintDevice()->width() - && targetRect.height() <= raster->paintDevice()->height()) + && targetRect.height() <= raster->paintDevice()->height()) { + unlock(); blitter->fillRect(targetRect,color); - else { + } else { QRectF deviceRect(0,0,raster->paintDevice()->width(), raster->paintDevice()->height()); + unlock(); blitter->fillRect(deviceRect&targetRect,color); } } @@ -247,14 +247,13 @@ public: uint hasXForm; }; -QBlitterPaintEngine::QBlitterPaintEngine(QPixmapData *p) +QBlitterPaintEngine::QBlitterPaintEngine(QBlittablePixmapData *p) : QPaintEngineEx(*(new QBlitterPaintEnginePrivate(p))) { } QBlitterPaintEngine::~QBlitterPaintEngine() { - Q_D(QBlitterPaintEngine); } QPainterState *QBlitterPaintEngine::createState(QPainterState *orig) const @@ -407,17 +406,20 @@ void QBlitterPaintEngine::stroke(const QVectorPath &path, const QPen &pen) void QBlitterPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) { Q_D(QBlitterPaintEngine); + d->lock(); d->raster->clip(path, op); d->updateClip(); } void QBlitterPaintEngine::clip(const QRect &rect, Qt::ClipOperation op){ Q_D(QBlitterPaintEngine); + d->lock(); d->raster->clip(rect,op); d->updateClip(); } void QBlitterPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) { Q_D(QBlitterPaintEngine); + d->lock(); d->raster->clip(region,op); d->updateClip(); } @@ -425,12 +427,14 @@ void QBlitterPaintEngine::clip(const QRegion ®ion, Qt::ClipOperation op) void QBlitterPaintEngine::clipEnabledChanged() { Q_D(QBlitterPaintEngine); + d->lock(); d->raster->clipEnabledChanged(); } void QBlitterPaintEngine::penChanged() { Q_D(QBlitterPaintEngine); + d->lock(); d->raster->penChanged(); d->capabillities->updateDrawRectBits(STATE_PEN_ENABLED,qpen_style(d->state->pen) != Qt::NoPen); } @@ -589,6 +593,7 @@ void QBlitterPaintEngine::drawTextItem(const QPointF &pos, const QTextItem &ti) void QBlitterPaintEngine::setState(QPainterState *s) { Q_D(QBlitterPaintEngine); + d->lock(); QPaintEngineEx::setState(s); d->raster->setState(s); d->state = (QRasterPaintEngineState *) s; @@ -609,7 +614,7 @@ class QBlittablePrivate { public: QBlittablePrivate(const QRect &rect, QBlittable::Capabilities caps) - : m_rect(rect), caps(caps) + : caps(caps), m_rect(rect) {} QBlittable::Capabilities caps; QRect m_rect; diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index 16b7b2c..8cd2f74 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -6,6 +6,7 @@ class QRasterPaintEngine; class QBlittablePrivate; class QBlitterPaintEnginePrivate; +class QBlittablePixmapData; // ### find name class Q_GUI_EXPORT QBlittable @@ -45,7 +46,7 @@ class Q_GUI_EXPORT QBlitterPaintEngine : public QPaintEngineEx { Q_DECLARE_PRIVATE(QBlitterPaintEngine); public: - QBlitterPaintEngine(QPixmapData *p); + QBlitterPaintEngine(QBlittablePixmapData *p); ~QBlitterPaintEngine(); virtual QPainterState *createState(QPainterState *orig) const; diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 3f33319..5e3203a 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -458,8 +458,8 @@ bool QRasterPaintEngine::begin(QPaintDevice *device) if (device->devType() == QInternal::Pixmap) { QPixmap *pixmap = static_cast(device); - if (pixmap->data->classId() == QPixmapData::RasterClass) - d->device = pixmap->data->buffer(); + if (pixmap->data->classId() == QPixmapData::RasterClass || pixmap->data->classId() == QPixmapData::BlitterClass) + d->device = pixmap->data->buffer(); } else { d->device = device; } diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro index d4c93fd..8822a5b 100644 --- a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro +++ b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro @@ -3,11 +3,11 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems -QMAKE_CXXFLAGS += -I/usr/include/directfb -LIBS += -ldirectfb -lfusion -ldirect -lpthread +QMAKE_CXXFLAGS += -I/usr/local/include/directfb +LIBS += -L/usr/local/lib -ldirectfb -lfusion -ldirect -lpthread -SOURCES = main.cpp qgraphicssystem_minimaldfb.cpp qwindowsurface_minimaldfb.cpp -HEADERS = qgraphicssystem_minimaldfb.h qwindowsurface_minimaldfb.h +SOURCES = main.cpp qgraphicssystem_minimaldfb.cpp qwindowsurface_minimaldfb.cpp qblitter_directfb.cpp +HEADERS = qgraphicssystem_minimaldfb.h qwindowsurface_minimaldfb.h qblitter_directfb.h target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp new file mode 100644 index 0000000..6800543 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -0,0 +1,94 @@ +#include "qblitter_directfb.h" +#include "qgraphicssystem_minimaldfb.h" + +#include + +#include + +QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) + : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability + |QBlittable::SourcePixmapCapability + |QBlittable::SourceOverPixmapCapability + |QBlittable::SourceOverScaledPixmapCapability)) +// 0)) +{ + DFBSurfaceDescription surfaceDesc; + surfaceDesc.width = rect.width(); + surfaceDesc.height = rect.height(); + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); + + if (surface) { + m_surface = surface; + } else { + IDirectFB *dfb = QDirectFbGraphicsSystem::dfbInterface(); + dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); + } +} + +void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) +{ + m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); + m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); + m_surface->FillRectangle(m_surface, rect.x(), rect.y(), + rect.width(), rect.height()); +} + +void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect) +{ + quint32 blittingFlags = pixmap.hasAlphaChannel() ? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; + + m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetColor(m_surface, 0xff, 0xff, 0xff, 255); + +// QPixmapData *data = pixmap.pixmapData(); +// Q_ASSERT(data->classId() == QPixmapData::DirectFBClass); +// QDirectFBPixmapData *dfbData = static_cast(data); +// IDirectFBSurface *s = dfbData->directFBSurface(); +// const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; +// +// DFBResult result; +// if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) +// result = surface->Blit(surface, s, &sRect, rect.x(), rect.y()); +// else { +// const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; +// result = surface->StretchBlit(surface, s, &sRect, &dRect); +// } +// if (result != DFB_OK) +// DirectFBError("QDirectFBBlitter::drawPixmap()", result); + +} + +QImage *QDirectFbBlitter::lock() +{ + if (m_image.isNull()) { + if(!m_surface) + qDebug() << "Trying to lock null surface"; + if (!this->rect().isValid()) { + qDebug() << "No valid blitter rect"; + return 0; + } + + + + void *mem; + int bpl; + const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); + if (result == DFB_OK) { + QImage::Format format = QDirectFbGraphicsSystem::imageFormatFromSurface(m_surface); + int w, h; + m_surface->GetSize(m_surface,&w,&h); + m_image = QImage(static_cast(mem),w,h,format); + } else { + DirectFBError("Failed to lock image", result); + } + + } + + return &m_image; +} + +void QDirectFbBlitter::unlock() +{ + m_surface->Unlock(m_surface); + m_image = QImage(); +} diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h new file mode 100644 index 0000000..d60a390 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h @@ -0,0 +1,24 @@ +#ifndef QDIRECTFBBLITTER_H +#define QDIRECTFBBLITTER_H + +#include + +#include + +class QDirectFbBlitter : public QBlittable +{ +public: + QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface = 0); + virtual ~QDirectFbBlitter(){ } + + virtual void fillRect(const QRectF &rect, const QColor &color); + virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); + + virtual QImage *lock(); + virtual void unlock(); + + IDirectFBSurface *m_surface; + QImage m_image; +}; + +#endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index bf46d4c..a59cfd2 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -41,7 +41,13 @@ #include "qgraphicssystem_minimaldfb.h" #include "qwindowsurface_minimaldfb.h" -#include +#include "qblitter_directfb.h" + +#include +#include + +#include +#include #include #include @@ -51,7 +57,7 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int { DFBResult result = dfb->GetDisplayLayer(dfb, DLID_PRIMARY, &m_layer); if (result != DFB_OK) { - DirectFBError("QDirectFbGraphicsSystemScreen::connect: " + DirectFBError("QDirectFbGraphicsSystemScreen " "Unable to get primary display layer!", result); } m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); @@ -106,30 +112,34 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect) return window; } +IDirectFB *QDirectFbGraphicsSystem::dfb = 0; + QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() { - DFBResult result = DFB_OK; - - { // pass command line arguments to DirectFB - const QStringList args = QCoreApplication::arguments(); - int argc = args.size(); - char **argv = new char*[argc]; - - for (int i = 0; i < argc; ++i) - argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); + if (!dfb) { + DFBResult result = DFB_OK; + + { // pass command line arguments to DirectFB + const QStringList args = QCoreApplication::arguments(); + int argc = args.size(); + char **argv = new char*[argc]; + + for (int i = 0; i < argc; ++i) + argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); + + result = DirectFBInit(&argc, &argv); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen: error initializing DirectFB", + result); + } + delete[] argv; + } - result = DirectFBInit(&argc, &argv); + result = DirectFBCreate(&dfb); if (result != DFB_OK) { - DirectFBError("QDirectFBScreen: error initializing DirectFB", + DirectFBError("QDirectFBScreen: error creating DirectFB interface", result); } - delete[] argv; - } - - result = DirectFBCreate(&dfb); - if (result != DFB_OK) { - DirectFBError("QDirectFBScreen: error creating DirectFB interface", - result); } mPrimaryScreen = new QDirectFbGraphicsSystemScreen(dfb,0); @@ -138,12 +148,20 @@ QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() QPixmapData *QDirectFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const { - return new QRasterPixmapData(type); + return new QBlittablePixmapData(type); +// return new QRasterPixmapData(type); } QWindowSurface *QDirectFbGraphicsSystem::createWindowSurface(QWidget *widget) const { return new QDirectFbWindowSurface (mPrimaryScreen, widget); +// return new QRasterWindowSurface(widget); +} + +QBlittable *QDirectFbGraphicsSystem::createBlittable(const QRect &rect) const +{ + return new QDirectFbBlitter(rect); +// return 0; } QImage::Format QDirectFbGraphicsSystem::imageFormatFromSurface(IDirectFBSurface *surface) @@ -186,4 +204,9 @@ QImage::Format QDirectFbGraphicsSystem::imageFormatFromSurface(IDirectFBSurface } +IDirectFB *QDirectFbGraphicsSystem::dfbInterface() +{ + return dfb; +} + QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index fbc5498..148086c 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -77,13 +77,15 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QWindowSurface *createWindowSurface(QWidget *widget) const; + QBlittable *createBlittable(const QRect &rect) const; QList screens() const { return mScreens; } static QImage::Format imageFormatFromSurface(IDirectFBSurface *surface); + static IDirectFB *dfbInterface(); private: - IDirectFB *dfb; + static IDirectFB *dfb; QDirectFbGraphicsSystemScreen *mPrimaryScreen; QList mScreens; }; diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index e75a43c..86d16d3 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -41,6 +41,9 @@ #include "qwindowsurface_minimaldfb.h" #include "qgraphicssystem_minimaldfb.h" +#include "qblitter_directfb.h" +#include + #include QT_BEGIN_NAMESPACE @@ -55,6 +58,13 @@ QDirectFbWindowSurface::QDirectFbWindowSurface if (result != DFB_OK) { DirectFBError("QDirectFbWindowSurface::QDirectFbWindowSurface: unable to get windows surface",result); } + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); + pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); + pmdata->resize(window->width(),window->height()); + pmdata->setBlittable(blitter); + + m_pixmap = new QPixmap(pmdata); + } QDirectFbWindowSurface::~QDirectFbWindowSurface() @@ -63,7 +73,7 @@ QDirectFbWindowSurface::~QDirectFbWindowSurface() QPaintDevice *QDirectFbWindowSurface::paintDevice() { - return m_image; + return m_pixmap; } void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) @@ -71,6 +81,7 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const Q_UNUSED(widget); Q_UNUSED(offset); + m_dfbSurface->Unlock(m_dfbSurface); const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); @@ -85,11 +96,7 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const void QDirectFbWindowSurface::setGeometry(const QRect &rect) { // qDebug() << "QDirectF.bWindowSurface::setGeometry:" << (long)this << rect; - bool wasLocked = false; - if (m_lock){ - m_dfbSurface->Unlock(m_dfbSurface); - wasLocked = true; - } + m_dfbSurface->Release(m_dfbSurface); QWindowSurface::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), @@ -98,10 +105,15 @@ void QDirectFbWindowSurface::setGeometry(const QRect &rect) // m_dfbWindow->MoveTo(m_dfbWindow,rect.x(),rect.y()); DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); if (result != DFB_OK) - qDebug() << "could not resurface"; + DirectFBError("QDirectFbWindowSurface::setGeometry() failed to retrieve new surface",result); + + QPixmap *oldpixmap = m_pixmap; + QDirectFbBlitter *blitter = new QDirectFbBlitter(rect, m_dfbSurface); + pmdata->resize(rect.width(),rect.height()); + pmdata->setBlittable(blitter); + m_pixmap = new QPixmap(pmdata); + delete oldpixmap; - if (wasLocked) - lockSurfaceToImage(); } bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) @@ -112,36 +124,11 @@ bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) void QDirectFbWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); - if (!m_lock) - lockSurfaceToImage(); } void QDirectFbWindowSurface::endPaint(const QRegion ®ion) { Q_UNUSED(region); - if (m_lock){ - m_dfbSurface->Unlock(m_dfbSurface); - m_lock = false; - } -} - -void QDirectFbWindowSurface::lockSurfaceToImage() -{ - if (m_lock) - return; - m_lock = true; - - int w,h; - m_dfbSurface->GetSize(m_dfbSurface,&w,&h); - uchar *data; - int bpl; - DFBResult result = m_dfbSurface->Lock(m_dfbSurface,static_cast(DSLF_READ|DSLF_WRITE),reinterpret_cast(&data),&bpl); - if (!result == DFB_OK) { - DirectFBError("QDirectFbWindowSurface::lockSurfaceToImage() failed to lock surface",result); - return; - } - QImage::Format format = QDirectFbGraphicsSystem::imageFormatFromSurface(m_dfbSurface); - m_image = new QImage(data,w,h,bpl,format); } QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index fe88878..98575ff 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -43,6 +43,8 @@ #define QWINDOWSURFACE_MINIMAL_H #include +#include + #include QT_BEGIN_NAMESPACE @@ -68,7 +70,8 @@ private: void lockSurfaceToImage(); QDirectFbGraphicsSystemScreen *m_screen; - QImage *m_image; + QPixmap *m_pixmap; + QBlittablePixmapData *pmdata; bool m_lock; IDirectFBWindow *m_dfbWindow; -- cgit v0.12 From 79b6ad01115cc9208e8a22d8dc925215da9792ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 24 Nov 2009 13:25:23 +0100 Subject: Cleanup blitter and minimaldfb A QBlittable is now aware if it is locked or not. Created a seperate header file for DirectFB convenience functions --- src/gui/image/qpixmap_blitter.cpp | 5 +- src/gui/image/qpixmap_blitter_p.h | 8 +- src/gui/painting/qpaintengine_blitter.cpp | 28 +++++- src/gui/painting/qpaintengine_blitter_p.h | 6 +- .../graphicssystems/minimaldfb/minimaldfb.pro | 21 +++-- .../minimaldfb/qblitter_directfb.cpp | 86 ++++++++--------- .../graphicssystems/minimaldfb/qblitter_directfb.h | 5 +- .../minimaldfb/qdirectfbconvenience.cpp | 43 +++++++++ .../minimaldfb/qdirectfbconvenience.h | 22 +++++ .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 102 ++++++--------------- .../minimaldfb/qgraphicssystem_minimaldfb.h | 4 +- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 8 +- 12 files changed, 188 insertions(+), 150 deletions(-) create mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp create mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 5ecc01d..82e0045 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -10,6 +10,8 @@ QBlittablePixmapData::QBlittablePixmapData(QPixmapData::PixelType type) QBlittablePixmapData::~QBlittablePixmapData() { + delete m_blittable; + delete m_engine; } QBlittable *QBlittablePixmapData::blittable() @@ -34,10 +36,9 @@ void QBlittablePixmapData::resize(int width, int height) m_blittable = 0; delete m_engine; m_engine = 0; - d = 32; + d = QApplicationPrivate::graphicsSystem()->screens().at(0)->depth(); w = width; h = height; -// d = image.depth(); is_null = (w <= 0 || h <= 0); } extern int qt_defaultDpiX(); diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index 3ed2fe4..5e01a12 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -21,12 +21,13 @@ public: //should never be called } - QImage *lock() +protected: + QImage *doLock() { return ℑ } - void unlock() + void doUnlock() { } @@ -36,6 +37,7 @@ private: class Q_GUI_EXPORT QBlittablePixmapData : public QPixmapData { +// Q_DECLARE_PRIVATE(QBlittablePixmapData); public: QBlittablePixmapData(QPixmapData::PixelType type); ~QBlittablePixmapData(); @@ -52,10 +54,10 @@ public: void fromImage(const QImage &image, Qt::ImageConversionFlags flags); QPaintEngine *paintEngine() const; - protected: QBlitterPaintEngine *m_engine; QBlittable *m_blittable; + }; #endif // QPIXMAP_BLITTER_P_H diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 0632ae0..7336dcc 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -157,7 +157,6 @@ public: blitter= p->blittable(); raster = new QRasterPaintEngine(p->buffer()); capabillities = new CapabilitiesToStateMask(blitter->capabilities()); - lock(); } inline void lock() { @@ -175,12 +174,12 @@ public: } void fillRect(const QRectF &rect, const QColor &color) { - lock(); +// lock(); QRectF targetRect = rect; if (hasXForm) { targetRect = state->matrix.mapRect(rect); } - QClipData *clipData = raster->state()->clip; + QClipData *clipData = state->clip; if (clipData) { if (clipData->hasRectClip) { unlock(); @@ -614,10 +613,12 @@ class QBlittablePrivate { public: QBlittablePrivate(const QRect &rect, QBlittable::Capabilities caps) - : caps(caps), m_rect(rect) + : caps(caps), m_rect(rect), locked(false), cachedImg(0) {} QBlittable::Capabilities caps; QRect m_rect; + bool locked; + QImage *cachedImg; }; @@ -644,3 +645,22 @@ QRect QBlittable::rect() const return d->m_rect; } +QImage *QBlittable::lock() +{ + Q_D(QBlittable); + if (!d->locked) { + d->cachedImg = doLock(); + d->locked = true; + } + + return d->cachedImg; +} + +void QBlittable::unlock() +{ + Q_D(QBlittable); + if (d->locked) { + doUnlock(); + d->locked = false; + } +} diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index 8cd2f74..6a5462e 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -34,10 +34,12 @@ public: virtual void fillRect(const QRectF &rect, const QColor &color) = 0; virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) = 0; - virtual QImage *lock() = 0; - virtual void unlock() = 0; + QImage *lock(); + void unlock(); protected: + virtual QImage *doLock() = 0; + virtual void doUnlock() = 0; QBlittablePrivate *d_ptr; }; diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro index 8822a5b..c3f20ff 100644 --- a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro +++ b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro @@ -1,13 +1,20 @@ TARGET = qminimaldfb include(../../qpluginbase.pri) - QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - QMAKE_CXXFLAGS += -I/usr/local/include/directfb -LIBS += -L/usr/local/lib -ldirectfb -lfusion -ldirect -lpthread - -SOURCES = main.cpp qgraphicssystem_minimaldfb.cpp qwindowsurface_minimaldfb.cpp qblitter_directfb.cpp -HEADERS = qgraphicssystem_minimaldfb.h qwindowsurface_minimaldfb.h qblitter_directfb.h - +LIBS += -L/usr/local/lib \ + -ldirectfb \ + -lfusion \ + -ldirect \ + -lpthread +SOURCES = main.cpp \ + qgraphicssystem_minimaldfb.cpp \ + qwindowsurface_minimaldfb.cpp \ + qblitter_directfb.cpp \ + qdirectfbconvenience.cpp +HEADERS = qgraphicssystem_minimaldfb.h \ + qwindowsurface_minimaldfb.h \ + qblitter_directfb.h \ + qdirectfbconvenience.h target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 6800543..05221ce 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -1,5 +1,8 @@ #include "qblitter_directfb.h" #include "qgraphicssystem_minimaldfb.h" +#include "qdirectfbconvenience.h" + +#include #include @@ -10,17 +13,16 @@ QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) |QBlittable::SourcePixmapCapability |QBlittable::SourceOverPixmapCapability |QBlittable::SourceOverScaledPixmapCapability)) -// 0)) { - DFBSurfaceDescription surfaceDesc; - surfaceDesc.width = rect.width(); - surfaceDesc.height = rect.height(); - surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); - if (surface) { m_surface = surface; } else { - IDirectFB *dfb = QDirectFbGraphicsSystem::dfbInterface(); + DFBSurfaceDescription surfaceDesc; + surfaceDesc.width = rect.width(); + surfaceDesc.height = rect.height(); + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); + + IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); } } @@ -40,55 +42,47 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); m_surface->SetColor(m_surface, 0xff, 0xff, 0xff, 255); -// QPixmapData *data = pixmap.pixmapData(); -// Q_ASSERT(data->classId() == QPixmapData::DirectFBClass); -// QDirectFBPixmapData *dfbData = static_cast(data); -// IDirectFBSurface *s = dfbData->directFBSurface(); -// const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; -// -// DFBResult result; -// if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) -// result = surface->Blit(surface, s, &sRect, rect.x(), rect.y()); -// else { -// const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; -// result = surface->StretchBlit(surface, s, &sRect, &dRect); -// } -// if (result != DFB_OK) -// DirectFBError("QDirectFBBlitter::drawPixmap()", result); + QPixmapData *data = pixmap.pixmapData(); + Q_ASSERT(data->classId() == QPixmapData::BlitterClass); + QBlittablePixmapData *blitPm = static_cast(data); + QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); -} + IDirectFBSurface *s = dfbBlitter->m_surface; + const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; -QImage *QDirectFbBlitter::lock() -{ - if (m_image.isNull()) { - if(!m_surface) - qDebug() << "Trying to lock null surface"; - if (!this->rect().isValid()) { - qDebug() << "No valid blitter rect"; - return 0; + DFBResult result; + if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) + result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y()); + else { + const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; + result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect); } + if (result != DFB_OK) + DirectFBError("QDirectFBBlitter::drawPixmap()", result); +} - - void *mem; - int bpl; - const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); - if (result == DFB_OK) { - QImage::Format format = QDirectFbGraphicsSystem::imageFormatFromSurface(m_surface); - int w, h; - m_surface->GetSize(m_surface,&w,&h); - m_image = QImage(static_cast(mem),w,h,format); - } else { - DirectFBError("Failed to lock image", result); - } - +QImage *QDirectFbBlitter::doLock() +{ + Q_ASSERT(m_surface); + Q_ASSERT(rect().isValid()); + + void *mem; + int bpl; + const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); + if (result == DFB_OK) { + QImage::Format format = QDirectFbConvenience::imageFormatFromSurface(m_surface); + int w, h; + m_surface->GetSize(m_surface,&w,&h); + m_image = QImage(static_cast(mem),w,h,format); + } else { + DirectFBError("Failed to lock image", result); } return &m_image; } -void QDirectFbBlitter::unlock() +void QDirectFbBlitter::doUnlock() { m_surface->Unlock(m_surface); - m_image = QImage(); } diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h index d60a390..252bf80 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h @@ -14,8 +14,9 @@ public: virtual void fillRect(const QRectF &rect, const QColor &color); virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); - virtual QImage *lock(); - virtual void unlock(); +protected: + virtual QImage *doLock(); + virtual void doUnlock(); IDirectFBSurface *m_surface; QImage m_image; diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp new file mode 100644 index 0000000..d958482 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -0,0 +1,43 @@ +#include "qdirectfbconvenience.h" + +IDirectFB *QDirectFbConvenience::dfb = 0; + +QImage::Format QDirectFbConvenience::imageFormatFromSurface(IDirectFBSurface *surface) +{ + DFBSurfacePixelFormat format; + surface->GetPixelFormat(surface, &format); + + switch (format) { + case DSPF_LUT8: + return QImage::Format_Indexed8; + case DSPF_RGB24: + return QImage::Format_RGB888; + case DSPF_ARGB4444: + return QImage::Format_ARGB4444_Premultiplied; + case DSPF_RGB444: + return QImage::Format_RGB444; + case DSPF_RGB555: + case DSPF_ARGB1555: + return QImage::Format_RGB555; + case DSPF_RGB16: + return QImage::Format_RGB16; + case DSPF_ARGB6666: + return QImage::Format_ARGB6666_Premultiplied; + case DSPF_RGB18: + return QImage::Format_RGB666; + case DSPF_RGB32: + return QImage::Format_RGB32; + case DSPF_ARGB: { + DFBSurfaceCapabilities caps; + const DFBResult result = surface->GetCapabilities(surface, &caps); + Q_ASSERT(result == DFB_OK); + Q_UNUSED(result); + return (caps & DSCAPS_PREMULTIPLIED + ? QImage::Format_ARGB32_Premultiplied + : QImage::Format_ARGB32); } + default: + break; + } + return QImage::Format_Invalid; + +} diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h new file mode 100644 index 0000000..7e426db --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -0,0 +1,22 @@ +#ifndef QDIRECTFBCONVENIENCE_H +#define QDIRECTFBCONVENIENCE_H + +#include + +#include + +class QDirectFbConvenience +{ +public: + static QImage::Format imageFormatFromSurface(IDirectFBSurface *surface); + + //This is set by the graphicssystem constructor + static IDirectFB *dfbInterface() { return dfb; } + +private: + static void setDfbInterface(IDirectFB *dfbInterface) {dfb = dfbInterface;} + static IDirectFB *dfb; + friend class QDirectFbGraphicsSystem; +}; + +#endif // QDIRECTFBCONVENIENCE_H diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index a59cfd2..117e4b5 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -42,6 +42,7 @@ #include "qgraphicssystem_minimaldfb.h" #include "qwindowsurface_minimaldfb.h" #include "qblitter_directfb.h" +#include "qdirectfbconvenience.h" #include #include @@ -65,7 +66,7 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int IDirectFBSurface *topLevelSurface; //This line gives a warning m_layer->GetSurface(m_layer, &topLevelSurface); - m_format = QDirectFbGraphicsSystem::imageFormatFromSurface(topLevelSurface); + m_format = QDirectFbConvenience::imageFormatFromSurface(topLevelSurface); result = m_layer->GetScreen(m_layer,&m_screen); if (result != DFB_OK) { @@ -73,9 +74,9 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int } int w(0),h(0); + //Asking the screen for its size gives the desktop geometry on X11 - //Thats not something we want, so as the topLevelSorface instead -// m_screen->GetSize(m_screen,&w,&h); + //Thats not something we want, so ask the topLevelSorface instead topLevelSurface->GetSize(topLevelSurface,&w,&h); m_geometry = QRect(0,0,w,h); @@ -112,35 +113,32 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect) return window; } -IDirectFB *QDirectFbGraphicsSystem::dfb = 0; QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() { - if (!dfb) { - DFBResult result = DFB_OK; - - { // pass command line arguments to DirectFB - const QStringList args = QCoreApplication::arguments(); - int argc = args.size(); - char **argv = new char*[argc]; - - for (int i = 0; i < argc; ++i) - argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); - - result = DirectFBInit(&argc, &argv); - if (result != DFB_OK) { - DirectFBError("QDirectFBScreen: error initializing DirectFB", - result); - } - delete[] argv; - } - - result = DirectFBCreate(&dfb); - if (result != DFB_OK) { - DirectFBError("QDirectFBScreen: error creating DirectFB interface", - result); - } + IDirectFB *dfb; + DFBResult result = DFB_OK; + + const QStringList args = QCoreApplication::arguments(); + int argc = args.size(); + char **argv = new char*[argc]; + + for (int i = 0; i < argc; ++i) + argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); + + result = DirectFBInit(&argc, &argv); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen: error initializing DirectFB", + result); + } + delete[] argv; + + result = DirectFBCreate(&dfb); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen: error creating DirectFB interface", + result); } + QDirectFbConvenience::setDfbInterface(dfb); mPrimaryScreen = new QDirectFbGraphicsSystemScreen(dfb,0); mScreens.append(mPrimaryScreen); @@ -149,64 +147,16 @@ QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() QPixmapData *QDirectFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const { return new QBlittablePixmapData(type); -// return new QRasterPixmapData(type); } QWindowSurface *QDirectFbGraphicsSystem::createWindowSurface(QWidget *widget) const { return new QDirectFbWindowSurface (mPrimaryScreen, widget); -// return new QRasterWindowSurface(widget); } QBlittable *QDirectFbGraphicsSystem::createBlittable(const QRect &rect) const { return new QDirectFbBlitter(rect); -// return 0; -} - -QImage::Format QDirectFbGraphicsSystem::imageFormatFromSurface(IDirectFBSurface *surface) -{ - DFBSurfacePixelFormat format; - surface->GetPixelFormat(surface, &format); - - switch (format) { - case DSPF_LUT8: - return QImage::Format_Indexed8; - case DSPF_RGB24: - return QImage::Format_RGB888; - case DSPF_ARGB4444: - return QImage::Format_ARGB4444_Premultiplied; - case DSPF_RGB444: - return QImage::Format_RGB444; - case DSPF_RGB555: - case DSPF_ARGB1555: - return QImage::Format_RGB555; - case DSPF_RGB16: - return QImage::Format_RGB16; - case DSPF_ARGB6666: - return QImage::Format_ARGB6666_Premultiplied; - case DSPF_RGB18: - return QImage::Format_RGB666; - case DSPF_RGB32: - return QImage::Format_RGB32; - case DSPF_ARGB: { - DFBSurfaceCapabilities caps; - const DFBResult result = surface->GetCapabilities(surface, &caps); - Q_ASSERT(result == DFB_OK); - Q_UNUSED(result); - return (caps & DSCAPS_PREMULTIPLIED - ? QImage::Format_ARGB32_Premultiplied - : QImage::Format_ARGB32); } - default: - break; - } - return QImage::Format_Invalid; - -} - -IDirectFB *QDirectFbGraphicsSystem::dfbInterface() -{ - return dfb; } QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index 148086c..462e963 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -81,11 +81,9 @@ public: QList screens() const { return mScreens; } - static QImage::Format imageFormatFromSurface(IDirectFBSurface *surface); - static IDirectFB *dfbInterface(); + private: - static IDirectFB *dfb; QDirectFbGraphicsSystemScreen *mPrimaryScreen; QList mScreens; }; diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 86d16d3..3dcf5be 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -60,7 +60,9 @@ QDirectFbWindowSurface::QDirectFbWindowSurface } QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); - pmdata->resize(window->width(),window->height()); + int width,height; + m_dfbSurface->GetSize(m_dfbSurface, &width, &height); + pmdata->resize(width,height); pmdata->setBlittable(blitter); m_pixmap = new QPixmap(pmdata); @@ -95,14 +97,10 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const void QDirectFbWindowSurface::setGeometry(const QRect &rect) { -// qDebug() << "QDirectF.bWindowSurface::setGeometry:" << (long)this << rect; - m_dfbSurface->Release(m_dfbSurface); QWindowSurface::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), rect.width(), rect.height()); -// m_dfbWindow->Resize(m_dfbWindow,rect.width(),rect.height()); -// m_dfbWindow->MoveTo(m_dfbWindow,rect.x(),rect.y()); DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); if (result != DFB_OK) DirectFBError("QDirectFbWindowSurface::setGeometry() failed to retrieve new surface",result); -- cgit v0.12 From cd33927ac31c37ed3feb6a5a3be28d3d152bda19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 25 Nov 2009 10:54:54 +0100 Subject: Fix QBlittablePixmapData::fromImage There is still a stride problem when running the browser demo --- src/gui/image/qpixmap_blitter.cpp | 28 +++++++++++++++++----------- src/gui/image/qpixmap_blitter_p.h | 33 +-------------------------------- src/gui/image/qpixmapdata_p.h | 1 - 3 files changed, 18 insertions(+), 44 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 82e0045..35d6ddb 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -1,5 +1,7 @@ #include "qpixmap_blitter_p.h" +#include + #include #include @@ -14,10 +16,11 @@ QBlittablePixmapData::~QBlittablePixmapData() delete m_engine; } -QBlittable *QBlittablePixmapData::blittable() +QBlittable *QBlittablePixmapData::blittable() const { if (!m_blittable) { - m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,w,h)); + QBlittablePixmapData *that = const_cast(this); + that->m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,w,h)); } return m_blittable; @@ -73,32 +76,35 @@ int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const void QBlittablePixmapData::fill(const QColor &color) { - if (m_blittable->capabilities() & QBlittable::SolidRectCapability) - m_blittable->fillRect(m_blittable->rect(),color); + if (blittable()->capabilities() & QBlittable::SolidRectCapability) + blittable()->fillRect(m_blittable->rect(),color); else - m_blittable->lock()->fill(color.rgb()); + blittable()->lock()->fill(color.rgb()); } QImage *QBlittablePixmapData::buffer() { - return m_blittable->lock(); + return blittable()->lock(); } QImage QBlittablePixmapData::toImage() const { - return m_blittable->lock()->copy(); + return blittable()->lock()->copy(); } bool QBlittablePixmapData::hasAlphaChannel() const { - return m_blittable->lock()->hasAlphaChannel(); + return blittable()->lock()->hasAlphaChannel(); } void QBlittablePixmapData::fromImage(const QImage &image, - Qt::ImageConversionFlags) + Qt::ImageConversionFlags flags) { - m_blittable = new QImageBlitter(image); - m_engine = 0; + resize(image.width(),image.height()); + QImage *thisImg = blittable()->lock(); + QPainter p(thisImg); + p.drawImage(0,0,image,flags); + } QPaintEngine *QBlittablePixmapData::paintEngine() const diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index 5e01a12..ca834dc 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -4,37 +4,6 @@ #include #include -class QImageBlitter : public QBlittable -{ -public: - QImageBlitter(const QImage &img) - : QBlittable(img.rect(),0), image(img) - { - } - - void fillRect(const QRectF &, const QColor &) - { - //should never be called - } - void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) - { - //should never be called - } - -protected: - QImage *doLock() - { - return ℑ - } - - void doUnlock() - { - } - -private: - QImage image; -}; - class Q_GUI_EXPORT QBlittablePixmapData : public QPixmapData { // Q_DECLARE_PRIVATE(QBlittablePixmapData); @@ -42,7 +11,7 @@ public: QBlittablePixmapData(QPixmapData::PixelType type); ~QBlittablePixmapData(); - QBlittable *blittable(); + QBlittable *blittable() const; void setBlittable(QBlittable *blittable); void resize(int width, int height); diff --git a/src/gui/image/qpixmapdata_p.h b/src/gui/image/qpixmapdata_p.h index a668f0a..292092f 100644 --- a/src/gui/image/qpixmapdata_p.h +++ b/src/gui/image/qpixmapdata_p.h @@ -137,7 +137,6 @@ private: friend class QX11PixmapData; friend class QS60PixmapData; friend class QImagePixmapCleanupHooks; // Needs to set is_cached - friend class QBlittablPixmapData; friend class QGLTextureCache; //Needs to check the reference count friend class QExplicitlySharedDataPointer; -- cgit v0.12 From 33e4969e7c7244943d48433cdb5ac086c517737a Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 25 Nov 2009 14:07:54 +0100 Subject: simplify QGraphicsSystemCursor, update vnc and testlite plugins --- src/gui/kernel/qwidget_lite.cpp | 13 ++++++---- src/gui/painting/qgraphicssystemcursor.cpp | 17 +++---------- src/gui/painting/qgraphicssystemcursor.h | 7 +++--- .../testlite/qgraphicssystem_testlite.cpp | 24 ++++--------------- src/plugins/graphicssystems/testlite/x11util.cpp | 1 + src/plugins/graphicssystems/vnc/qvnccursor.cpp | 28 +++++++--------------- src/plugins/graphicssystems/vnc/qvnccursor.h | 4 +--- 7 files changed, 30 insertions(+), 64 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 88df81f..0f4dec7 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -678,7 +678,7 @@ void qt_lite_set_cursor(QWidget * w, bool force) if (w == 0) { if (override) { if (QGraphicsSystemCursor::instance) { - QGraphicsSystemCursor::instance->changeCursor(override); + QGraphicsSystemCursor::instance->changeCursor(override, QApplication::topLevelAt(QCursor::pos())); } return; } @@ -692,10 +692,12 @@ void qt_lite_set_cursor(QWidget * w, bool force) w = lastUnderMouse; } - if (w == QApplication::desktop()) { + if (w == QApplication::desktop() && !override) { if (QGraphicsSystemCursor::instance) { - QGraphicsSystemCursor::instance->changeCursor(w); + QCursor c(Qt::ArrowCursor); + QGraphicsSystemCursor::instance->changeCursor(&c, w); } + return; } QWidget * curWin = QApplication::activeWindow(); @@ -704,11 +706,12 @@ void qt_lite_set_cursor(QWidget * w, bool force) QWidget* cW = w && !w->internalWinId() ? w : curWin; if (!cW || cW->window() != w->window() || - !cW->isVisible() || !cW->underMouse() || QApplication::overrideCursor()) + !cW->isVisible() || !cW->underMouse() || override) return; if (QGraphicsSystemCursor::instance) { - QGraphicsSystemCursor::instance->changeCursor(w); + QCursor c = w->cursor(); + QGraphicsSystemCursor::instance->changeCursor(&c, w); } } QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index cad914d..3afaf4b 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -104,12 +104,14 @@ QRect QGraphicsSystemCursor::getCurrentRect() void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & e) { + Q_UNUSED(e); currentRect = getCurrentRect(); screen->setDirty(currentRect); } -void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor) +void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) { + Q_UNUSED(widget); Qt::CursorShape shape = widgetCursor->shape(); if (shape == Qt::BitmapCursor) { @@ -126,19 +128,6 @@ void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor) screen->setDirty(currentRect); } -void QGraphicsSystemCursor::changeCursor(QWidget * widget) -{ - if (widget) { - QCursor widgetCursor = widget->cursor(); - changeCursor(&widgetCursor); - } else { - // default cursor - setCursor(Qt::ArrowCursor); - currentRect = getCurrentRect(); - screen->setDirty(currentRect); - } -} - // End of display and pointer event handling code // Beginning of built-in cursor graphics // from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h index ea30319..1e26db2 100644 --- a/src/gui/painting/qgraphicssystemcursor.h +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -71,11 +71,8 @@ public: virtual ~QGraphicsSystemCursor(); // input methods - virtual void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - virtual void setCursor(Qt::CursorShape shape); virtual void pointerEvent(const QMouseEvent & event); - virtual void changeCursor(QWidget * widget); - virtual void changeCursor(QCursor * widgetCursor); + virtual void changeCursor(QCursor * widgetCursor, QWidget * widget); // output methods virtual QRect drawCursor(QPainter &); @@ -94,6 +91,8 @@ protected: QGraphicsSystemCursorImage * graphic; private: + void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void setCursor(Qt::CursorShape shape); QRect getCurrentRect(); }; diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp index 64386b7..450905c 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -56,37 +56,23 @@ class MyCursor : QGraphicsSystemCursor public: MyCursor(QGraphicsSystemScreen *screen) : QGraphicsSystemCursor(screen) {} - // input methods - void setCursor(const uchar */*data*/, const uchar */*mask*/, int width, int height, int hotX, int hotY) {qDebug() << "setCursor data..." << width << height << hotX << hotY;} - - void setCursor(Qt::CursorShape shape) { - static int oldshape = -1; - if (shape != oldshape) { - qDebug() << "setCursor" << shape; QGraphicsSystemCursor::setCursor(shape); - oldshape = shape; - } - } - - void changeCursor(QWidget * widget) { - + void changeCursor(QCursor * cursor, QWidget * widget) { QTestLiteWindowSurface *ws = 0; if (widget) { QWidget *window = widget->window(); ws = static_cast(window->windowSurface()); + } else { + // No X11 cursor control when there is no widget under the cursor + return; } //qDebug() << "changeCursor" << widget << ws; if (!ws) return; - ws->setCursor(widget->cursor().shape()); + ws->setCursor(cursor->shape()); } -// void changeCursor(QCursor * widgetCursor) { -// //qDebug() << "changeCursor widgetCursor"; -// QGraphicsSystemCursor::changeCursor(widgetCursor); -// } - //#### remove this void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 5830550..e2fbd62 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -846,6 +846,7 @@ void MyWindow::setCursorShape(int cshape) cursors[cshape] = cursor; } XDefineCursor(xd->display, window, cursor); + XFlush(xd->display); } diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.cpp b/src/plugins/graphicssystems/vnc/qvnccursor.cpp index aa0f109..55d1c61 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.cpp +++ b/src/plugins/graphicssystems/vnc/qvnccursor.cpp @@ -58,36 +58,26 @@ QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) { } -void QVNCCursor::setCursorMode(bool vnc) +void QVNCCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) { - if (vnc) { - screen->setDirty(prevRect); - prevRect = QRect(); - server->setDirtyCursor(); - } else { - server->setDirtyCursor(); - } - useVncCursor = vnc; -} - -void QVNCCursor::setCursor(Qt::CursorShape shape) -{ - QGraphicsSystemCursor::setCursor(shape); + QGraphicsSystemCursor::changeCursor(widgetCursor, widget); if (useVncCursor) { server->setDirtyCursor(); } else { - screen->setDirty(QRect(QRect(0,0,1,1))); + screen->setDirty(QRect(0,0,1,1)); } } -void QVNCCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) +void QVNCCursor::setCursorMode(bool vnc) { - QGraphicsSystemCursor::setCursor(data, mask, width, height, hotX, hotY); - if (useVncCursor) { + if (vnc) { + screen->setDirty(prevRect); + prevRect = QRect(); server->setDirtyCursor(); } else { - screen->setDirty(QRect(0,0,1,1)); + server->setDirtyCursor(); } + useVncCursor = vnc; } QRect QVNCCursor::drawCursor(QPainter & painter) diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.h b/src/plugins/graphicssystems/vnc/qvnccursor.h index 1a53da7..a90b7e2 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.h +++ b/src/plugins/graphicssystems/vnc/qvnccursor.h @@ -57,9 +57,7 @@ public: // input methods void setCursorMode(bool vnc); - void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void setCursor(Qt::CursorShape shape); - + void changeCursor(QCursor * widgetCursor, QWidget * widget); // output methods QRect drawCursor(QPainter &); -- cgit v0.12 From a684c3429445ca88736ac8065a9d7ecfe58f3857 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 25 Nov 2009 15:02:50 +0100 Subject: QGraphicsSystemCursor::getInstance() method to replace direct instance pointer access --- src/gui/kernel/qapplication_lite.cpp | 5 +++-- src/gui/kernel/qwidget_lite.cpp | 20 +++++++++----------- src/gui/painting/qgraphicssystemcursor.h | 4 +++- 3 files changed, 15 insertions(+), 14 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index cdaa855..a42bfd7 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -526,8 +526,9 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) static QWidget *implicit_mouse_grabber=0; - if (QGraphicsSystemCursor::instance) - QGraphicsSystemCursor::instance->pointerEvent(ev); + QPointer cursor = QGraphicsSystemCursor::getInstance(); + if (cursor) + cursor->pointerEvent(ev); QPoint localPoint = ev.pos(); QPoint globalPoint = ev.globalPos(); diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 0f4dec7..5a629c0 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -675,11 +675,13 @@ void qt_lite_set_cursor(QWidget * w, bool force) if (override && w != 0) return; + QPointer cursor = QGraphicsSystemCursor::getInstance(); + if (!cursor) + return; + if (w == 0) { if (override) { - if (QGraphicsSystemCursor::instance) { - QGraphicsSystemCursor::instance->changeCursor(override, QApplication::topLevelAt(QCursor::pos())); - } + cursor->changeCursor(override, QApplication::topLevelAt(QCursor::pos())); return; } w = QApplication::widgetAt(QCursor::pos()); @@ -693,10 +695,8 @@ void qt_lite_set_cursor(QWidget * w, bool force) } if (w == QApplication::desktop() && !override) { - if (QGraphicsSystemCursor::instance) { - QCursor c(Qt::ArrowCursor); - QGraphicsSystemCursor::instance->changeCursor(&c, w); - } + QCursor c(Qt::ArrowCursor); + cursor->changeCursor(&c, w); return; } @@ -709,9 +709,7 @@ void qt_lite_set_cursor(QWidget * w, bool force) !cW->isVisible() || !cW->underMouse() || override) return; - if (QGraphicsSystemCursor::instance) { - QCursor c = w->cursor(); - QGraphicsSystemCursor::instance->changeCursor(&c, w); - } + QCursor c = w->cursor(); + cursor->changeCursor(&c, w); } QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h index 1e26db2..f4d911f 100644 --- a/src/gui/painting/qgraphicssystemcursor.h +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -78,9 +78,10 @@ public: virtual QRect drawCursor(QPainter &); virtual QRect dirtyRect(); - static QPointer instance; + static QPointer getInstance() { return instance; } protected: + static QPointer instance; QRect currentRect; // next place to draw the cursor QRect prevRect; // last place the cursor was drawn @@ -91,6 +92,7 @@ protected: QGraphicsSystemCursorImage * graphic; private: + void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); void setCursor(Qt::CursorShape shape); QRect getCurrentRect(); -- cgit v0.12 From 19039afd151f2c2401659904b89968d302149493 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 26 Nov 2009 12:53:59 +0100 Subject: remove an unused member from QGraphicsSystemCursor --- src/gui/painting/qgraphicssystemcursor.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h index f4d911f..d385ac0 100644 --- a/src/gui/painting/qgraphicssystemcursor.h +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -87,7 +87,6 @@ protected: QRect prevRect; // last place the cursor was drawn QGraphicsSystemScreen * screen; // Where to request an update - QWidget * currentWidget; // widget currently under the cursor QGraphicsSystemCursorImage * graphic; -- cgit v0.12 From c290785d0f8e1ef7af4bdff683aab40b8ff33681 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 26 Nov 2009 13:39:06 +0100 Subject: move software cursor from QGraphicsSystemCursor into QGraphicsSystemSoftwareCursor --- src/gui/painting/qgraphicssystemcursor.cpp | 72 +-------------------- src/gui/painting/qgraphicssystemcursor.h | 24 ++----- src/plugins/graphicssystems/fb_base/fb_base.cpp | 74 +++++++++++++++++++++- src/plugins/graphicssystems/fb_base/fb_base.h | 26 +++++++- .../linuxfb/qgraphicssystem_linuxfb.cpp | 2 +- .../testlite/qgraphicssystem_testlite.cpp | 8 --- src/plugins/graphicssystems/vnc/qvnccursor.cpp | 12 ++-- src/plugins/graphicssystems/vnc/qvnccursor.h | 5 +- 8 files changed, 111 insertions(+), 112 deletions(-) diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 3afaf4b..022dc64 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -53,79 +53,9 @@ QT_BEGIN_NAMESPACE QPointer QGraphicsSystemCursor::instance = 0; QGraphicsSystemCursor::QGraphicsSystemCursor(QGraphicsSystemScreen *scr ) - :currentRect(QRect()), prevRect(QRect()), screen(scr) + : screen(scr) { - graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); instance = this; - setCursor(Qt::ArrowCursor); -} - -QGraphicsSystemCursor::~QGraphicsSystemCursor() -{ -} - -void QGraphicsSystemCursor::setCursor(Qt::CursorShape shape) -{ - graphic->set(shape); -} - -void QGraphicsSystemCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) -{ - graphic->set(data, mask, width, height, hotX, hotY); -} - -QRect QGraphicsSystemCursor::dirtyRect() -{ - if (!prevRect.isNull()) { - QRect rect = prevRect; - prevRect = QRect(); - return rect; - } - return QRect(); -} - -QRect QGraphicsSystemCursor::drawCursor(QPainter & painter) -{ - if (currentRect.isNull()) - return QRect(); - - prevRect = currentRect; - painter.drawImage(prevRect, *graphic->image()); - return prevRect; -} - -QRect QGraphicsSystemCursor::getCurrentRect() -{ - QRect rect = graphic->image()->rect().translated(-graphic->hotspot().x(), - -graphic->hotspot().y()); - rect.translate(QCursor::pos()); - return rect; -} - -void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & e) -{ - Q_UNUSED(e); - currentRect = getCurrentRect(); - screen->setDirty(currentRect); -} - -void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) -{ - Q_UNUSED(widget); - Qt::CursorShape shape = widgetCursor->shape(); - - if (shape == Qt::BitmapCursor) { - // application supplied cursor - const QBitmap * map = widgetCursor->bitmap(); - const QBitmap * mask = widgetCursor->mask(); - QPoint spot = widgetCursor->hotSpot(); - setCursor(map->toImage().bits(), mask->toImage().bits(), map->width(), map->height(), spot.x(), spot.y()); - } else { - // system cursor - setCursor(shape); - } - currentRect = getCurrentRect(); - screen->setDirty(currentRect); } // End of display and pointer event handling code diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h index d385ac0..42727a8 100644 --- a/src/gui/painting/qgraphicssystemcursor.h +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE // Cursor graphics management -class QGraphicsSystemCursorImage { +class Q_GUI_EXPORT QGraphicsSystemCursorImage { public: QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) { set(data, mask, width, height, hotX, hotY); } @@ -68,33 +68,17 @@ private: class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { public: QGraphicsSystemCursor(QGraphicsSystemScreen *); - virtual ~QGraphicsSystemCursor(); // input methods - virtual void pointerEvent(const QMouseEvent & event); - virtual void changeCursor(QCursor * widgetCursor, QWidget * widget); - - // output methods - virtual QRect drawCursor(QPainter &); - virtual QRect dirtyRect(); + virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } + virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; static QPointer getInstance() { return instance; } protected: - static QPointer instance; - - QRect currentRect; // next place to draw the cursor - QRect prevRect; // last place the cursor was drawn + static QPointer instance; // limit 1 cursor at a time QGraphicsSystemScreen * screen; // Where to request an update - - QGraphicsSystemCursorImage * graphic; - -private: - - void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void setCursor(Qt::CursorShape shape); - QRect getCurrentRect(); }; QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index 6ecfd1b..27cb8a4 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -3,9 +3,81 @@ #include #include #include - +#include #include +QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen *scr) + : QGraphicsSystemCursor(scr), currentRect(QRect()), prevRect(QRect()) +{ + graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); + setCursor(Qt::ArrowCursor); +} + +QRect QGraphicsSystemSoftwareCursor::getCurrentRect() +{ + QRect rect = graphic->image()->rect().translated(-graphic->hotspot().x(), + -graphic->hotspot().y()); + rect.translate(QCursor::pos()); + return rect; +} + + +void QGraphicsSystemSoftwareCursor::pointerEvent(const QMouseEvent & e) +{ + Q_UNUSED(e); + currentRect = getCurrentRect(); + screen->setDirty(currentRect); +} + +QRect QGraphicsSystemSoftwareCursor::drawCursor(QPainter & painter) +{ + if (currentRect.isNull()) + return QRect(); + + prevRect = currentRect; + painter.drawImage(prevRect, *graphic->image()); + return prevRect; +} + +QRect QGraphicsSystemSoftwareCursor::dirtyRect() +{ + if (!prevRect.isNull()) { + QRect rect = prevRect; + prevRect = QRect(); + return rect; + } + return QRect(); +} + +void QGraphicsSystemSoftwareCursor::setCursor(Qt::CursorShape shape) +{ + graphic->set(shape); +} + +void QGraphicsSystemSoftwareCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) +{ + graphic->set(data, mask, width, height, hotX, hotY); +} + +void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) +{ + Q_UNUSED(widget); + Qt::CursorShape shape = widgetCursor->shape(); + + if (shape == Qt::BitmapCursor) { + // application supplied cursor + const QBitmap * map = widgetCursor->bitmap(); + const QBitmap * mask = widgetCursor->mask(); + QPoint spot = widgetCursor->hotSpot(); + setCursor(map->toImage().bits(), mask->toImage().bits(), map->width(), map->height(), spot.x(), spot.y()); + } else { + // system cursor + setCursor(shape); + } + currentRect = getCurrentRect(); + screen->setDirty(currentRect); +} + QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) { mScreenImage = new QImage(mGeometry.size(), mFormat); diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index 8e54f47..9abd5d0 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -15,6 +15,30 @@ class QPainter; class QGraphicsSystemFbWindowSurface; class QGraphicsSystemFbScreen; +class QGraphicsSystemSoftwareCursor : public QGraphicsSystemCursor +{ +public: + QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen * scr); + + // output methods + QRect dirtyRect(); + virtual QRect drawCursor(QPainter & painter); + + // input methods + virtual void pointerEvent(const QMouseEvent & event); + virtual void changeCursor(QCursor * widgetCursor, QWidget * widget); + +protected: + QGraphicsSystemCursorImage * graphic; + +private: + void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void setCursor(Qt::CursorShape shape); + QRect currentRect; // next place to draw the cursor + QRect prevRect; // last place the cursor was drawn + QRect getCurrentRect(); +}; + class QGraphicsSystemFbWindowSurface : public QWindowSurface { public: @@ -74,7 +98,7 @@ public: protected: QList windowStack; QRegion repaintRegion; - QGraphicsSystemCursor * cursor; + QGraphicsSystemSoftwareCursor * cursor; QTimer redrawTimer; protected slots: diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp index 2a0007b..f5ca6e7 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp @@ -807,7 +807,7 @@ QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, mFormat); mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), bytesPerLine, mFormat); - cursor = new QGraphicsSystemCursor(this); + cursor = new QGraphicsSystemSoftwareCursor(this); } void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp index 450905c..bdcac37 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -72,14 +72,6 @@ public: ws->setCursor(cursor->shape()); } - - //#### remove this - void pointerEvent(const QMouseEvent & event) { - Q_UNUSED(event); -#if 0 - qDebug() << "pointerEvent" << event.globalPos(); -#endif - } }; diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.cpp b/src/plugins/graphicssystems/vnc/qvnccursor.cpp index 55d1c61..fb214d8 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.cpp +++ b/src/plugins/graphicssystems/vnc/qvnccursor.cpp @@ -54,13 +54,13 @@ QT_BEGIN_NAMESPACE QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) - :QGraphicsSystemCursor::QGraphicsSystemCursor(scr), useVncCursor(false), server(srvr) + :QGraphicsSystemSoftwareCursor(scr), useVncCursor(false), server(srvr) { } void QVNCCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) { - QGraphicsSystemCursor::changeCursor(widgetCursor, widget); + QGraphicsSystemSoftwareCursor::changeCursor(widgetCursor, widget); if (useVncCursor) { server->setDirtyCursor(); } else { @@ -71,8 +71,7 @@ void QVNCCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) void QVNCCursor::setCursorMode(bool vnc) { if (vnc) { - screen->setDirty(prevRect); - prevRect = QRect(); + screen->setDirty(dirtyRect()); server->setDirtyCursor(); } else { server->setDirtyCursor(); @@ -85,10 +84,7 @@ QRect QVNCCursor::drawCursor(QPainter & painter) if (useVncCursor) return QRect(); - if (currentRect.isNull()) - return QRect(); - - return QGraphicsSystemCursor::drawCursor(painter); + return QGraphicsSystemSoftwareCursor::drawCursor(painter); } void QVNCCursor::clearClientCursor() diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.h b/src/plugins/graphicssystems/vnc/qvnccursor.h index a90b7e2..8ea0f45 100644 --- a/src/plugins/graphicssystems/vnc/qvnccursor.h +++ b/src/plugins/graphicssystems/vnc/qvnccursor.h @@ -41,7 +41,7 @@ #ifndef QVNCCURSOR_H #define QVNCCURSOR_H -#include "qgraphicssystemcursor.h" +#include "../fb_base/fb_base.h" #include #include #include @@ -51,13 +51,14 @@ QT_BEGIN_NAMESPACE class QVNCGraphicsSystemScreen; class QVNCServer; -class QVNCCursor : public QGraphicsSystemCursor { +class QVNCCursor : public QGraphicsSystemSoftwareCursor { public: QVNCCursor(QVNCServer *, QVNCGraphicsSystemScreen *); // input methods void setCursorMode(bool vnc); void changeCursor(QCursor * widgetCursor, QWidget * widget); + // output methods QRect drawCursor(QPainter &); -- cgit v0.12 From 55fc5c3bbb6c1f7d16f26459f66922af7961642d Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 26 Nov 2009 14:49:34 +0100 Subject: added some documentation for QGraphicsSystemCursor --- src/gui/painting/qgraphicssystemcursor.cpp | 44 +++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 022dc64..3fc836d 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -39,7 +39,6 @@ ** ****************************************************************************/ #include "qgraphicssystemcursor.h" -//#include "qlighthousegraphicsscreen.h" #include #include @@ -52,6 +51,49 @@ QT_BEGIN_NAMESPACE QPointer QGraphicsSystemCursor::instance = 0; +/*! + \class QGraphicsSystemCursor + + \brief The QGraphicsSystemCursor class provides information about + pointer device events (movement, buttons), and requests to change + the currently displayed cursor. + + Note that QGraphicsSystemCursor does not include any graphics for + display. An application that sets a QCursor may provide its own + graphics. + + \sa QGraphicsSystemCursorImage +*/ + +/*! + \fn virtual void pointerEvent(const QMouseEvent & event) + + This method is called by Qt whenever a QMouseEvent is generated by the + underlying pointer input. \a event is a reference to the QMouseEvent in + question. A default do-nothing implementation is provided. + + \sa QApplicationPrivate::handleMouseEvent() +*/ + +/*! + \fn virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) + + \brief This method is called by Qt whenever the cursor graphic should be changed. + + Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. + + \a widgetCursor is a pointer to the QCursor that should be displayed. + + \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note + that this may be 0 if the current position is not occupied by a displayed widget. + + \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() +*/ + +/*! + Constructs a QGraphicsSystemCursor + +*/ QGraphicsSystemCursor::QGraphicsSystemCursor(QGraphicsSystemScreen *scr ) : screen(scr) { -- cgit v0.12 From de3fbd3316797e73a67fbd1a0f7191c66ab88233 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 26 Nov 2009 17:01:25 +0100 Subject: Implement setWindowTitle() on Lighthouse --- src/gui/kernel/qwidget_lite.cpp | 9 +++++++-- src/gui/painting/qwindowsurface_p.h | 1 + .../testlite/qwindowsurface_testlite.cpp | 4 ++++ .../graphicssystems/testlite/qwindowsurface_testlite.h | 1 + src/plugins/graphicssystems/testlite/x11util.cpp | 18 ++++++++++++++++++ src/plugins/graphicssystems/testlite/x11util.h | 2 ++ 6 files changed, 33 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 5a629c0..8601855 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -187,8 +187,13 @@ void QWidgetPrivate::updateCursor() const void QWidgetPrivate::setWindowTitle_sys(const QString &caption) { - Q_UNUSED(caption); - // XXX + Q_Q(QWidget); + if (!q->isWindow()) + return; + + if (QWindowSurface *surface = q->windowSurface()) + surface->setWindowTitle(caption); + } void QWidgetPrivate::setWindowIcon_sys(bool /*forceReset*/) diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h index 5e95d80..1c0334c 100644 --- a/src/gui/painting/qwindowsurface_p.h +++ b/src/gui/painting/qwindowsurface_p.h @@ -95,6 +95,7 @@ public: virtual Qt::WindowFlags windowFlags() const; virtual WId winId() const; + virtual void setWindowTitle(const QString &) {} virtual void raise() { qWarning("This plugin does not support raise()"); } virtual void lower() { qWarning("This plugin does not support lower()"); } #endif diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 495b572..13dbae1 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -590,6 +590,10 @@ void QTestLiteWindowSurface::lower() XLowerWindow(mGraphicsSystem->xd->display, window); } +void QTestLiteWindowSurface::setWindowTitle(const QString &title) +{ + xw->setWindowTitle(title); +} void QTestLiteWindowSurface::setCursor(Qt::CursorShape shape) { diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index cedd66c..43d1b23 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -81,6 +81,7 @@ public: WId winId() const; void raise(); void lower(); + void setWindowTitle(const QString &title); void setCursor(Qt::CursorShape shape); diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index e2fbd62..8c0b6c1 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -397,6 +397,24 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) wmProtocolsAtom, XA_ATOM, 32, PropModeAppend, (unsigned char *) &wmDeleteWindowAtom, 1); + + + setWindowTitle(QLatin1String("Qt Lighthouse")); + +} + + +void MyWindow::setWindowTitle(const QString &title) + +{ + QByteArray ba = title.toLatin1(); //We're not making a general solution here... + XTextProperty windowName; + windowName.value = (unsigned char *)ba.constData(); + windowName.encoding = XA_STRING; + windowName.format = 8; + windowName.nitems = ba.length(); + + XSetWMName(xd->display, window, &windowName); } MyWindow::~MyWindow() diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index e9d4c7b..fc88297 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -111,6 +111,8 @@ public: void setVisible(bool visible); void setCursorShape(int cshape); + void setWindowTitle(const QString &title); + public: //### int xpos, ypos; -- cgit v0.12 From b699cdad144e0a23f1dabf26c05fde2f4e3ec6f9 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 4 Dec 2009 13:37:02 +0100 Subject: caching of X11 cursors, with an expiration after 3 seconds This also contains a stub for Qt::BitmapCursor cursors. Conversion to the X11 bitmap format is missing. --- .../testlite/qgraphicssystem_testlite.cpp | 2 +- .../testlite/qwindowsurface_testlite.cpp | 4 +- .../testlite/qwindowsurface_testlite.h | 2 +- src/plugins/graphicssystems/testlite/x11util.cpp | 273 ++++++++++++++++----- src/plugins/graphicssystems/testlite/x11util.h | 61 ++++- 5 files changed, 282 insertions(+), 60 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp index bdcac37..72d364a 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -70,7 +70,7 @@ public: if (!ws) return; - ws->setCursor(cursor->shape()); + ws->setCursor(cursor); } }; diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 13dbae1..fde54a1 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -595,8 +595,8 @@ void QTestLiteWindowSurface::setWindowTitle(const QString &title) xw->setWindowTitle(title); } -void QTestLiteWindowSurface::setCursor(Qt::CursorShape shape) +void QTestLiteWindowSurface::setCursor(QCursor *cursor) { - xw->setCursorShape(shape); + xw->setCursor(cursor); } QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index 43d1b23..9f9f052 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -83,7 +83,7 @@ public: void lower(); void setWindowTitle(const QString &title); - void setCursor(Qt::CursorShape shape); + void setCursor(QCursor * cursor); private: QTestLiteGraphicsSystem *mGraphicsSystem; diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 8c0b6c1..1a421e8 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -57,6 +57,10 @@ #include +#include +#include +#include +#include //### remove stuff we don't want from qt_x11_p.h #undef ATOM @@ -325,6 +329,7 @@ MyDisplay::MyDisplay() wmProtocolsAtom = XInternAtom (display, "WM_PROTOCOLS", False); wmDeleteWindowAtom = XInternAtom (display, "WM_DELETE_WINDOW", False); + cursors = new MyX11Cursors(display); } @@ -401,6 +406,7 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) setWindowTitle(QLatin1String("Qt Lighthouse")); + currentCursor = -1; } @@ -802,71 +808,228 @@ void MyWindow::setVisible(bool visible) XUnmapWindow(xd->display, window); } +MyX11Cursors::MyX11Cursors(Display * d) : firstExpired(0), lastExpired(0), display(d), removalDelay(3) +{ + connect(&timer, SIGNAL(timeout()), this, SLOT(timeout())); +} -void MyWindow::setCursorShape(int cshape) +void MyX11Cursors::insertNode(MyX11CursorNode * node) { - if (cshape < 0 || cshape > Qt::LastCursor) - return; + QDateTime now = QDateTime::currentDateTime(); + QDateTime timeout = now.addSecs(removalDelay); + node->setExpiration(timeout); + node->setPost(0); + if (lastExpired) { + lastExpired->setPost(node); + node->setAnte(lastExpired); + } + lastExpired = node; + if (!firstExpired) { + firstExpired = node; + node->setAnte(0); + int interval = removalDelay * 1000; + timer.setInterval(interval); + timer.start(); + } +} - static Cursor cursors[Qt::LastCursor+1] = {XNone}; +void MyX11Cursors::removeNode(MyX11CursorNode * node) +{ + MyX11CursorNode *pre = node->ante(); + MyX11CursorNode *post = node->post(); + if (pre) + pre->setPost(post); + if (post) + post->setAnte(pre); + if (node == lastExpired) + lastExpired = pre; + if (node == firstExpired) { + firstExpired = post; + if (!firstExpired) { + timer.stop(); + return; + } + int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; + timer.stop(); + timer.setInterval(interval); + timer.start(); + } +} - Cursor cursor = cursors[cshape]; - if (!cursor) { - switch (cshape) { - case Qt::ArrowCursor: - cursor = XCreateFontCursor(xd->display, XC_left_ptr); - break; - case Qt::UpArrowCursor: - cursor = XCreateFontCursor(xd->display, XC_center_ptr); - break; - case Qt::CrossCursor: - cursor = XCreateFontCursor(xd->display, XC_crosshair); - break; - case Qt::WaitCursor: - cursor = XCreateFontCursor(xd->display, XC_watch); - break; - case Qt::IBeamCursor: - cursor = XCreateFontCursor(xd->display, XC_xterm); - break; - case Qt::SizeAllCursor: - cursor = XCreateFontCursor(xd->display, XC_fleur); - break; - case Qt::PointingHandCursor: - cursor = XCreateFontCursor(xd->display, XC_hand2); - break; - case Qt::SizeBDiagCursor: - cursor = XCreateFontCursor(xd->display, XC_top_right_corner); - break; - case Qt::SizeFDiagCursor: - cursor = XCreateFontCursor(xd->display, XC_bottom_right_corner); - break; - case Qt::SizeVerCursor: - case Qt::SplitVCursor: - cursor = XCreateFontCursor(xd->display, XC_sb_v_double_arrow); - break; - case Qt::SizeHorCursor: - case Qt::SplitHCursor: - cursor = XCreateFontCursor(xd->display, XC_sb_h_double_arrow); - break; - case Qt::WhatsThisCursor: - cursor = XCreateFontCursor(xd->display, XC_question_arrow); - break; - case Qt::ForbiddenCursor: - cursor = XCreateFontCursor(xd->display, XC_circle); - break; - case Qt::BusyCursor: - cursor = XCreateFontCursor(xd->display, XC_watch); - break; +void MyX11Cursors::incrementUseCount(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + if (!node->refCount) + removeNode(node); + node->refCount++; +} - default: //default cursor for all the rest - break; +void MyX11Cursors::decrementUseCount(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + node->refCount--; + if (!node->refCount) + insertNode(node); +} + +void MyX11Cursors::createNode(int id, Cursor c) +{ + MyX11CursorNode * node = new MyX11CursorNode(id, c); + lookupMap.insert(id, node); +} + +void MyX11Cursors::timeout() +{ + MyX11CursorNode * node; + node = firstExpired; + QDateTime now = QDateTime::currentDateTime(); + while (node && now.secsTo(node->expiration()) < 1) { + Cursor c = node->cursor(); + int id = node->id(); + lookupMap.take(id); + MyX11CursorNode * tmp = node; + node = node->post(); + delete tmp; + XFreeCursor(display, c); + } + firstExpired = node; + if (node == 0) { + timer.stop(); + lastExpired = 0; + } + else { + int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; + timer.setInterval(interval); + timer.start(); + } +} + +Cursor MyX11Cursors::cursor(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + return node->cursor(); +} + +void MyWindow::setCursor(QCursor * cursor) +{ + int id = cursor->handle(); + if (id == currentCursor) + return; + Cursor c; + if (!xd->cursors->exists(id)) { + if (cursor->shape() == Qt::BitmapCursor) + c = createCursorBitmap(cursor); + else + c = createCursorShape(cursor->shape()); + if (!c) { + return; } - cursors[cshape] = cursor; + xd->cursors->createNode(id, c); + } else { + xd->cursors->incrementUseCount(id); + c = xd->cursors->cursor(id); } - XDefineCursor(xd->display, window, cursor); + + if (currentCursor != -1) + xd->cursors->decrementUseCount(currentCursor); + currentCursor = id; + + XDefineCursor(xd->display, window, c); XFlush(xd->display); } +Cursor MyWindow::createCursorBitmap(QCursor * cursor) +{ +/* + XColor bg, fg; + bg.red = 255 << 8; + bg.green = 255 << 8; + bg.blue = 255 << 8; + fg.red = 0; + fg.green = 0; + fg.blue = 0; + QPoint spot = cursor->hotSpot(); + Window rootwin = window; + + const QBitmap * map = cursor->bitmap(); + char * mapBits = reinterpret_cast(map->toImage().bits()); + const QBitmap * mask = cursor->mask(); + char * maskBits = reinterpret_cast(mask->toImage().bits()); + + Pixmap cp = XCreateBitmapFromData(xd->display, rootwin, mapBits, map->width(), map->height()); + Pixmap mp = XCreateBitmapFromData(xd->display, rootwin, maskBits, map->width(), map->height()); + Cursor c = XCreatePixmapCursor(xd->display, cp, mp, &fg, &bg, spot.x(), spot.y()); + XFreePixmap(xd->display, cp); + XFreePixmap(xd->display, mp); + + return c; +*/ + // correct pixmap cursor parsing not implemented yet + return createCursorShape(Qt::ArrowCursor); +} + +Cursor MyWindow::createCursorShape(int cshape) +{ + Cursor cursor = 0; + + if (cshape < 0 || cshape > Qt::LastCursor) + return 0; + + switch (cshape) { + case Qt::ArrowCursor: + cursor = XCreateFontCursor(xd->display, XC_left_ptr); + break; + case Qt::UpArrowCursor: + cursor = XCreateFontCursor(xd->display, XC_center_ptr); + break; + case Qt::CrossCursor: + cursor = XCreateFontCursor(xd->display, XC_crosshair); + break; + case Qt::WaitCursor: + cursor = XCreateFontCursor(xd->display, XC_watch); + break; + case Qt::IBeamCursor: + cursor = XCreateFontCursor(xd->display, XC_xterm); + break; + case Qt::SizeAllCursor: + cursor = XCreateFontCursor(xd->display, XC_fleur); + break; + case Qt::PointingHandCursor: + cursor = XCreateFontCursor(xd->display, XC_hand2); + break; + case Qt::SizeBDiagCursor: + cursor = XCreateFontCursor(xd->display, XC_top_right_corner); + break; + case Qt::SizeFDiagCursor: + cursor = XCreateFontCursor(xd->display, XC_bottom_right_corner); + break; + case Qt::SizeVerCursor: + case Qt::SplitVCursor: + cursor = XCreateFontCursor(xd->display, XC_sb_v_double_arrow); + break; + case Qt::SizeHorCursor: + case Qt::SplitHCursor: + cursor = XCreateFontCursor(xd->display, XC_sb_h_double_arrow); + break; + case Qt::WhatsThisCursor: + cursor = XCreateFontCursor(xd->display, XC_question_arrow); + break; + case Qt::ForbiddenCursor: + cursor = XCreateFontCursor(xd->display, XC_circle); + break; + case Qt::BusyCursor: + cursor = XCreateFontCursor(xd->display, XC_watch); + break; + + default: //default cursor for all the rest + break; + } + return cursor; +} + #if 0 diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index fc88297..2a73f3e 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -44,6 +44,8 @@ #include #include +#include +#include #include @@ -52,6 +54,7 @@ class MyWindow; +class MyX11Cursors; class MyDisplay : public QObject { @@ -77,6 +80,8 @@ public: //### int physicalHeight; QList windowList; + + MyX11Cursors * cursors; }; class QTestLiteWindowSurface; //### abstract callback interface, anyone? @@ -109,7 +114,9 @@ public: Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); void setVisible(bool visible); - void setCursorShape(int cshape); + void setCursor(QCursor * cursor); + Cursor createCursorShape(int cshape); + Cursor createCursorBitmap(QCursor * cursor); void setWindowTitle(const QString &title); @@ -123,10 +130,62 @@ public: //### GC gc; QTestLiteWindowSurface *windowSurface; + + int currentCursor; +}; + +class MyX11CursorNode +{ +public: + MyX11CursorNode(int id, Cursor c) { idValue = id; cursorValue = c; refCount = 1; } + QDateTime expiration() { return t; } + void setExpiration(QDateTime val) { t = val; } + MyX11CursorNode * ante() { return before; } + void setAnte(MyX11CursorNode *node) { before = node; } + MyX11CursorNode * post() { return after; } + void setPost(MyX11CursorNode *node) { after = node; } + Cursor cursor() { return cursorValue; } + int id() { return idValue; } + unsigned int refCount; + +private: + MyX11CursorNode *before; + MyX11CursorNode *after; + QDateTime t; + Cursor cursorValue; + int idValue; + + Display * display; }; +class MyX11Cursors : public QObject +{ + Q_OBJECT +public: + MyX11Cursors(Display * d); + ~MyX11Cursors() { timer.stop(); } + void incrementUseCount(int id); + void decrementUseCount(int id); + void createNode(int id, Cursor c); + bool exists(int id) { return lookupMap.contains(id); } + Cursor cursor(int id); +public slots: + void timeout(); +private: + void removeNode(MyX11CursorNode *node); + void insertNode(MyX11CursorNode *node); + // linked list of cursors currently not assigned to any window + MyX11CursorNode *firstExpired; + MyX11CursorNode *lastExpired; + QHash lookupMap; + QTimer timer; + + Display *display; + + int removalDelay; +}; #endif // MYX11UTIL_H -- cgit v0.12 From 3b82e91bcfb19f52ce4d030eff146852d9cde08f Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Fri, 4 Dec 2009 13:15:52 +0100 Subject: Add experimental OpenKODE support --- .../qws/linux-x86-openkode-g++/qmake.conf | 22 ++ .../qws/linux-x86-openkode-g++/qplatformdefs.h | 42 ++++ src/gui/egl/qegl.cpp | 2 +- src/plugins/graphicssystems/openkode/frag.glslf | 8 + src/plugins/graphicssystems/openkode/frag.h | 37 +++ src/plugins/graphicssystems/openkode/main.cpp | 71 ++++++ src/plugins/graphicssystems/openkode/openkode.pro | 14 ++ .../openkode/qgraphicssystem_openkode.cpp | 237 +++++++++++++++++++ .../openkode/qgraphicssystem_openkode.h | 95 ++++++++ .../openkode/qwindowsurface_openkode.cpp | 256 +++++++++++++++++++++ .../openkode/qwindowsurface_openkode.h | 78 +++++++ src/plugins/graphicssystems/openkode/vert.glslv | 14 ++ src/plugins/graphicssystems/openkode/vert.h | 63 +++++ 13 files changed, 938 insertions(+), 1 deletion(-) create mode 100644 mkspecs/unsupported/qws/linux-x86-openkode-g++/qmake.conf create mode 100644 mkspecs/unsupported/qws/linux-x86-openkode-g++/qplatformdefs.h create mode 100644 src/plugins/graphicssystems/openkode/frag.glslf create mode 100644 src/plugins/graphicssystems/openkode/frag.h create mode 100644 src/plugins/graphicssystems/openkode/main.cpp create mode 100644 src/plugins/graphicssystems/openkode/openkode.pro create mode 100644 src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp create mode 100644 src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h create mode 100644 src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp create mode 100644 src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h create mode 100644 src/plugins/graphicssystems/openkode/vert.glslv create mode 100644 src/plugins/graphicssystems/openkode/vert.h diff --git a/mkspecs/unsupported/qws/linux-x86-openkode-g++/qmake.conf b/mkspecs/unsupported/qws/linux-x86-openkode-g++/qmake.conf new file mode 100644 index 0000000..36ad503 --- /dev/null +++ b/mkspecs/unsupported/qws/linux-x86-openkode-g++/qmake.conf @@ -0,0 +1,22 @@ +# +# qmake configuration for building with linux-g++ +# + +include(../../../common/g++.conf) +include(../../../common/linux.conf) +include(../../../common/qws.conf) + +load(qt_config) + +# ### HACK - This should be a configure check +OPENKODE_DIR = $(OPENKODE_DIR) + +QMAKE_INCDIR_OPENGL_ES2 = $${OPENKODE_DIR}/include +QMAKE_LIBDIR_OPENGL_ES2 = $${OPENKODE_DIR}/lib-target +QMAKE_LIBS_OPENGL_ES2 = $${QMAKE_RPATH}/$${OPENKODE_DIR}/lib-target -lGLESv2_CM + +QMAKE_INCDIR_EGL = $$QMAKE_INCDIR_OPENGL_ES2 +QMAKE_LIBDIR_EGL = $$QMAKE_LIBDIR_OPENGL_ES2 +QMAKE_LIBS_EGL = $${QMAKE_RPATH}/$${OPENKODE_DIR}/lib-target -lEGL + +QMAKE_LIBS += $${QMAKE_RPATH}/$${OPENKODE_DIR}/lib-target diff --git a/mkspecs/unsupported/qws/linux-x86-openkode-g++/qplatformdefs.h b/mkspecs/unsupported/qws/linux-x86-openkode-g++/qplatformdefs.h new file mode 100644 index 0000000..86d84e8 --- /dev/null +++ b/mkspecs/unsupported/qws/linux-x86-openkode-g++/qplatformdefs.h @@ -0,0 +1,42 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "../../../linux-g++/qplatformdefs.h" diff --git a/src/gui/egl/qegl.cpp b/src/gui/egl/qegl.cpp index c0e4890..0f51846 100644 --- a/src/gui/egl/qegl.cpp +++ b/src/gui/egl/qegl.cpp @@ -188,7 +188,7 @@ bool QEglContext::createContext(QEglContext *shareContext, const QEglProperties } } if (ctx == EGL_NO_CONTEXT) { - ctx = eglCreateContext(dpy, cfg, 0, contextProps.properties()); + ctx = eglCreateContext(dpy, cfg, EGL_NO_CONTEXT, contextProps.properties()); if (ctx == EGL_NO_CONTEXT) { qWarning() << "QEglContext::createContext(): Unable to create EGL context:" << errorString(eglGetError()); return false; diff --git a/src/plugins/graphicssystems/openkode/frag.glslf b/src/plugins/graphicssystems/openkode/frag.glslf new file mode 100644 index 0000000..a593434 --- /dev/null +++ b/src/plugins/graphicssystems/openkode/frag.glslf @@ -0,0 +1,8 @@ +uniform sampler2D tex_samp; + +varying vec2 texcoord_var; + +void main() +{ + gl_FragColor = texture2D(tex_samp, texcoord_var); +} diff --git a/src/plugins/graphicssystems/openkode/frag.h b/src/plugins/graphicssystems/openkode/frag.h new file mode 100644 index 0000000..6575cb5 --- /dev/null +++ b/src/plugins/graphicssystems/openkode/frag.h @@ -0,0 +1,37 @@ +0x4e,0x56,0x75,0x63,0x01,0x00,0x00,0x00,0x09,0x00,0x06,0x00,0x06,0x00,0x50,0x00, +0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x27,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x0b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x2b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x2c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x68,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, +0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x90,0x00,0x02,0x01,0x82,0x04,0x02,0x02,0x82, +0x01,0x00,0x40,0xf6,0x85,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x3a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2a,0x00,0x06,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x3b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x49,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x04,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x00,0x74,0x65,0x78,0x5f,0x73,0x61,0x6d,0x70,0x00,0x00,0x00,0x74,0x65,0x78,0x63, +0x6f,0x6f,0x72,0x64,0x5f,0x76,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/src/plugins/graphicssystems/openkode/main.cpp b/src/plugins/graphicssystems/openkode/main.cpp new file mode 100644 index 0000000..e9c1083 --- /dev/null +++ b/src/plugins/graphicssystems/openkode/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_openkode.h" + +QT_BEGIN_NAMESPACE + +class QOpenKODEGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QOpenKODEGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "OpenKODE"; + return list; +} + +QGraphicsSystem* QOpenKODEGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "openkode") + return new QOpenKODEGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(openkode, QOpenKODEGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openkode/openkode.pro b/src/plugins/graphicssystems/openkode/openkode.pro new file mode 100644 index 0000000..f8f0bcb --- /dev/null +++ b/src/plugins/graphicssystems/openkode/openkode.pro @@ -0,0 +1,14 @@ +TARGET = qopenkodegraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_openkode.cpp qwindowsurface_openkode.cpp +HEADERS = qgraphicssystem_openkode.h qwindowsurface_openkode.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target + +# openkode specific stuff +INCLUDEPATH += $(OPENKODE_DIR)/include +LIBS += $${QMAKE_RPATH}/$(OPENKODE_DIR)/lib-target -L$(OPENKODE_DIR)/lib-target -lKD -lEGL -lGLESv2_CM diff --git a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp new file mode 100644 index 0000000..51364e4 --- /dev/null +++ b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp @@ -0,0 +1,237 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_openkode.h" +#include "qwindowsurface_openkode.h" +#include + +#include +#include + +#include +#include +#include + +#include "GLES2/gl2ext.h" + + +QT_BEGIN_NAMESPACE + +QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen() +{ + KDDesktopNV *kdDesktop = KD_NULL; + KDDisplayNV *kdDisplay = KD_NULL; + + qDebug() << "QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen()"; + + // Get the default desktop and display + kdDesktop = kdGetDesktopNV(KD_DEFAULT_DESKTOP_NV, KD_NULL); + if (!kdDesktop || kdDesktop == (void*)-1) { + qErrnoWarning(kdGetError(), "Could not obtain KDDesktopNV pointer"); + return; + } + + kdDisplay = kdGetDisplayNV(KD_DEFAULT_DISPLAY_NV, KD_NULL); + if (!kdDisplay || kdDisplay == (void*)-1) { + qErrnoWarning(kdGetError(), "Could not obtain KDDisplayNV pointer"); + kdReleaseDesktopNV(kdDesktop); + return; + } + + KDDisplayModeNV mode; + if (kdGetDisplayModeNV(kdDisplay, &mode)) { + qErrnoWarning(kdGetError(), "Could not get display mode"); + return; + } + + qDebug() << " - display mode " << mode.width << "x" << mode.height << " refresh " << mode.refresh; + + KDint desktopSize[] = { mode.width, mode.height }; + + if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { + qErrnoWarning(kdGetError(), "Could not set desktop size"); + return; + } + + // Once we've set up the desktop and display we don't need them anymore +// kdReleaseDisplayNV(kdDisplay); TODO!!! + kdReleaseDesktopNV(kdDesktop); + + const int defaultDpi = 72; + mGeometry = QRect(0, 0, mode.width, mode.height); + mPhysicalSize = QSize(mode.width * 25.4 / defaultDpi, mode.height * 25.4 / defaultDpi); + + mDepth = 24; + mFormat = QImage::Format_RGB888; + + if (!mContext.openDisplay(0)) { + qWarning("qEglContext: Unable to open display!"); + return; + } + + qDebug() << " - QEglContext::openDisplay OK"; + + QEglProperties properties; + properties.setPixelFormat(QImage::Format_RGB888); + properties.setValue(EGL_BUFFER_SIZE, EGL_DONT_CARE); + properties.setRenderableType(QEgl::OpenGL); + + if (!mContext.chooseConfig(properties, QEgl::BestPixelFormat)) { + qWarning("qEglContext: Unable to choose config!"); + return; + } + + qDebug() << " - QEglContext::openDisplay OK"; +} + +static GLuint NvKdTestLoadShaders(const char *vertex_shader_binary, + const char *fragment_shader_binary, + GLuint vertex_shader_binary_size, + GLuint fragment_shader_binary_size) +{ + GLuint prog; + GLuint vertShader; + GLuint fragShader; + + // Create the program + prog = glCreateProgram(); + + // Create the GL shader objects + vertShader = glCreateShader(GL_VERTEX_SHADER); + fragShader = glCreateShader(GL_FRAGMENT_SHADER); + + // Load the binary data into the shader objects + glShaderBinary(1, &vertShader, + GL_NVIDIA_PLATFORM_BINARY_NV, vertex_shader_binary, vertex_shader_binary_size); + glShaderBinary(1, &fragShader, + GL_NVIDIA_PLATFORM_BINARY_NV, fragment_shader_binary, fragment_shader_binary_size); + + // Attach the shaders to the program + glAttachShader(prog, vertShader); + glAttachShader(prog, fragShader); + + // Delete the shaders + glDeleteShader(vertShader); + glDeleteShader(fragShader); + + // Link and validate the shader program + glLinkProgram(prog); + glValidateProgram(prog); + + return prog; +} + +class QOpenKODEEventLoopHelper : public QThread +{ +public: + QOpenKODEEventLoopHelper(QSemaphore *m) + : eventMutex(m) + { + m->acquire(); + } + +protected: + void run() + { + qDebug() << "initializing KD"; + kdInitializeNV(); + qDebug() << "done initializing KD"; + eventMutex->release(); + + const KDEvent *event; + while ((event = kdWaitEvent(-1)) != 0) { + qDebug() << "!!! received event!"; + kdDefaultEvent(event); + } + + qDebug() << "exiting event loop"; + } + +private: + QSemaphore *eventMutex; +}; + +QOpenKODEGraphicsSystem::QOpenKODEGraphicsSystem() + : eventMutex(1) +{ + QOpenKODEEventLoopHelper *loop = new QOpenKODEEventLoopHelper(&eventMutex); + loop->start(); + eventMutex.acquire(); // block until initialization done + + mPrimaryScreen = new QOpenKODEGraphicsSystemScreen(); + + mScreens.append(mPrimaryScreen); + +} + +QPixmapData *QOpenKODEGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QOpenKODEGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + return new QOpenKODEWindowSurface(mPrimaryScreen, widget); +} + +GLuint QOpenKODEGraphicsSystem::blitterProgram() +{ + static GLuint shaderProgram = 0; + if (!shaderProgram) { + + const char vertShaderBinary[] = { +# include "vert.h" + }; + const char fragShaderBinary[] = { +# include "frag.h" + }; + + shaderProgram = NvKdTestLoadShaders(vertShaderBinary, fragShaderBinary, + sizeof(vertShaderBinary), sizeof(fragShaderBinary)); + + if (!shaderProgram) + qFatal("QOpenKodeGraphicsSystem(): Cannot load shaders!"); + } + return shaderProgram; +} + + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h new file mode 100644 index 0000000..972c42e --- /dev/null +++ b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_OPENKODE_H +#define QGRAPHICSSYSTEM_OPENKODE_H + +#include + +#include +#include + +# include + +QT_BEGIN_NAMESPACE + +struct KDDesktopNV; + +class QOpenKODEGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QOpenKODEGraphicsSystemScreen(); + ~QOpenKODEGraphicsSystemScreen() {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; + QEglContext mContext; +}; + +class QOpenKODEGraphicsSystem : public QGraphicsSystem +{ +public: + QOpenKODEGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + + static GLuint blitterProgram(); + +private: + QOpenKODEGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; + QSemaphore eventMutex; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp new file mode 100644 index 0000000..33c76e4 --- /dev/null +++ b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp @@ -0,0 +1,256 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_openkode.h" +#include "qgraphicssystem_openkode.h" +#include + +#include "KD/kd.h" +#include "KD/NV_display.h" + +QT_BEGIN_NAMESPACE + +QOpenKODEWindowSurface::QOpenKODEWindowSurface + (QOpenKODEGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen) +{ + qDebug() << "QOpenKODEWindowSurface::QOpenKODEWindowSurface:" << window << window->width() << "x" << window->height() + << "pos" << window->x() << "x" << window->y(); + + if (!mContext.openDisplay(0)) { + qWarning("qEglContext: Unable to open display!"); + return; + } + + QEglProperties properties; + properties.setPixelFormat(QImage::Format_RGB888); + properties.setValue(EGL_BUFFER_SIZE, EGL_DONT_CARE); + properties.setRenderableType(QEgl::OpenGL); + + if (!mContext.chooseConfig(properties, QEgl::BestPixelFormat)) { + qWarning("qEglContext: Unable to choose config!"); + return; + } + + createWindow(window); +} + +void QOpenKODEWindowSurface::createWindow(QWidget *window) +{ + kdWindow = kdCreateWindow(mContext.display(), mContext.config(), KD_NULL); + + if (!kdWindow) { + qErrnoWarning(kdGetError(), "Error creating native window"); + return; + } + + const KDint windowSize[2] = { window->width(), window->height() }; + if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { + qErrnoWarning(kdGetError(), "Could not set native window size"); + return; + } + + const KDboolean windowExclusive[] = { false }; + if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { + qErrnoWarning(kdGetError(), "Could not set exclusive bit"); + return; + } + + const KDint windowPos[2] = { window->x(), window->y() }; + if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + qErrnoWarning(kdGetError(), "Could not set native window position"); + return; + } + + EGLNativeWindowType nativeWindow; + + if (kdRealizeWindow(kdWindow, &nativeWindow)) { + qErrnoWarning(kdGetError(), "Could not realize native window"); + return; + } + + // Create an EGL window surface for the native window + EGLint windowAttrs[3] = { EGL_NONE }; + EGLSurface eglSurface = eglCreateWindowSurface(mContext.display(), + mContext.config(), + nativeWindow, + windowAttrs); + if (!eglSurface) { + qWarning("EGL couldn't create window surface: 0x%x", eglGetError()); + return; + } + + mContext.setSurface(eglSurface); + + if (!mContext.createContext()) { + qDebug() << "Unable to create context!"; + return; + } +} + +QOpenKODEWindowSurface::~QOpenKODEWindowSurface() +{ +} + +QPaintDevice *QOpenKODEWindowSurface::paintDevice() +{ + //qDebug() << "QOpenKODEWindowSurface::paintDevice"; + return &mImage; +} + +// ### TODO - this updates the entire toplevel, should only update the region +void QOpenKODEWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + if (!offset.isNull()) { + qWarning("Offset flushing not supported yet"); + return; + } + + if (!mContext.makeCurrent()) { + qWarning("EGL couldn't make context/surface current: 0x%x", eglGetError()); + return; + } + + QRect boundingRect = region.boundingRect(); + + int x, y, w, h; + QImage blitImage; + if (true || boundingRect == mImage.rect()) { // TODO - check optimization + blitImage = mImage; + x = y = 0; + w = mImage.width(); + h = mImage.height(); + } else { + blitImage = mImage.copy(boundingRect); + w = boundingRect.width(); + h = boundingRect.height(); + x = boundingRect.x(); + y = boundingRect.y(); + } + +// qDebug() << "flush" << widget << offset << region.boundingRect() << mImage.format() << blitImage.format(); + + GLuint shaderProgram = QOpenKODEGraphicsSystem::blitterProgram(); + + glUseProgram(shaderProgram); + + GLuint index = glGetUniformLocation(shaderProgram, "window"); + glUniform2f(index, GLfloat(mImage.width()), GLfloat(mImage.height())); + + // attributes + GLuint posId = glGetAttribLocation(shaderProgram, "pos_attr"); + GLuint texcoordId = glGetAttribLocation(shaderProgram, "texcoord_attr"); + + // sampler + index = glGetUniformLocation(shaderProgram, "tex_samp"); + + glUniform1i(index, 0); + + glDisable(GL_DEPTH_TEST); + glActiveTexture(GL_TEXTURE0); + + GLuint texId; + GLfloat coords[8] = {x, y, x, y + h, x + w, y + h, x + w, y }; + GLfloat texcoords[8] = { 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 }; + + // Generate texture for checkered background + glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + glGenTextures(1, &texId); + glBindTexture(GL_TEXTURE_2D, texId); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, blitImage.bits()); + + // Enable vertex attribute associated with vertex position + glEnableVertexAttribArray(posId); + glEnableVertexAttribArray(texcoordId); + + // Set the quad vertices + glVertexAttribPointer(posId, 2, GL_FLOAT, 0, 0, coords); + glVertexAttribPointer(texcoordId, 2, GL_FLOAT, 0, 0, texcoords); + + // Draw the quad + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + // Cleanup + glDisableVertexAttribArray(posId); + glDisableVertexAttribArray(texcoordId); + + // Release all textures + glBindTexture(GL_TEXTURE_2D, 0); + if (texId) + glDeleteTextures(1, &texId); + + mContext.swapBuffers(); + mContext.doneCurrent(); +} + +void QOpenKODEWindowSurface::setGeometry(const QRect &rect) +{ + qDebug() << "QOpenKODEWindowSurface::setGeometry:" << rect; + QWindowSurface::setGeometry(rect); + if (mImage.size() != rect.size()) + mImage = QImage(rect.size(), mScreen->format()); + + mContext.destroySurface(); + kdDestroyWindow(kdWindow); + createWindow(window()); +} + +bool QOpenKODEWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QOpenKODEWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h new file mode 100644 index 0000000..1c70f55 --- /dev/null +++ b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_OPENKODE_H +#define QWINDOWSURFACE_OPENKODE_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QOpenKODEGraphicsSystemScreen; + +class QOpenKODEWindowSurface : public QWindowSurface +{ +public: + QOpenKODEWindowSurface + (QOpenKODEGraphicsSystemScreen *screen, QWidget *window); + ~QOpenKODEWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + QOpenKODEGraphicsSystemScreen *mScreen; + QImage mImage; + struct KDWindow *kdWindow; + QEglContext mContext; + + void createWindow(QWidget *window); +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/graphicssystems/openkode/vert.glslv b/src/plugins/graphicssystems/openkode/vert.glslv new file mode 100644 index 0000000..57b5866 --- /dev/null +++ b/src/plugins/graphicssystems/openkode/vert.glslv @@ -0,0 +1,14 @@ +uniform vec2 window; // window size + +// Per-vertex attributes] +attribute vec2 pos_attr; +attribute vec2 texcoord_attr; + +// Output vertex color +varying vec2 texcoord_var; + +void main() +{ + gl_Position = vec4( (2.0 * pos_attr / window -1.0) * vec2(1.0, -1.0), 0.0, 1.0); + texcoord_var = texcoord_attr; +} diff --git a/src/plugins/graphicssystems/openkode/vert.h b/src/plugins/graphicssystems/openkode/vert.h new file mode 100644 index 0000000..bdf564d --- /dev/null +++ b/src/plugins/graphicssystems/openkode/vert.h @@ -0,0 +1,63 @@ +0x4e,0x56,0x75,0x63,0x01,0x00,0x00,0x00,0x0a,0x00,0x06,0x00,0x06,0x00,0x50,0x00, +0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x24,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x26,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x05,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x2b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x30,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x05,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x0f,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x01,0x02,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0x04,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x80,0xbf,0x00,0x00,0x00,0x00, +0x05,0x00,0x00,0x10,0x80,0xc7,0x00,0x24,0x05,0x02,0x00,0x10,0x80,0xc7,0x00,0x24, +0x01,0x02,0x81,0xc0,0x80,0x07,0x60,0x00,0x05,0x02,0x00,0x90,0x80,0x07,0x00,0x00, +0x09,0x00,0x01,0xe1,0x80,0x87,0x40,0x00,0x05,0x00,0x00,0x10,0x80,0xc7,0x00,0x24, +0x01,0x00,0x81,0xc0,0x80,0x07,0x60,0x00,0x09,0x04,0x00,0xa0,0x80,0x47,0x00,0xe4, +0x05,0x02,0x00,0x90,0x80,0x07,0x00,0x00,0x05,0x04,0x00,0x10,0x88,0xc7,0x03,0x04, +0x01,0x00,0x01,0xe1,0x88,0x87,0x40,0x00,0x09,0xf8,0x00,0x10,0x88,0xc7,0x03,0x04, +0x0d,0x00,0x00,0x10,0x88,0xc7,0x40,0x24,0x11,0x04,0x00,0x10,0x88,0xc7,0x23,0x04, +0x15,0x06,0x00,0x10,0x89,0xc7,0x23,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xad,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x28,0x00,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00, +0xb6,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xb7,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xbe,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x05,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xbf,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xc9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xca,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xd9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x01,0x00,0x00,0x00, +0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xda,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xdb,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xe8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x02,0x00,0x00,0x00, +0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x00,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0x50,0x4f,0x53, +0x49,0x54,0x49,0x4f,0x4e,0x00,0x00,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00, +0x70,0x6f,0x73,0x5f,0x61,0x74,0x74,0x72,0x00,0x00,0x00,0x74,0x65,0x78,0x63,0x6f, +0x6f,0x72,0x64,0x5f,0x61,0x74,0x74,0x72,0x00,0x00,0x00,0x74,0x65,0x78,0x63,0x6f, +0x6f,0x72,0x64,0x5f,0x76,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -- cgit v0.12 From 56c9fe5f9ba08f20885454fee7cbb488fd4968eb Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Fri, 4 Dec 2009 14:03:48 +0100 Subject: temporarily disable backingstore subsurfaces until they compile again with embedded-lite --- configure | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configure b/configure index dae8910..4818560 100755 --- a/configure +++ b/configure @@ -6075,7 +6075,8 @@ fi if [ "$CFG_OPENGL" = "es1" ] || [ "$CFG_OPENGL" = "es1cl" ] || [ "$CFG_OPENGL" = "es2" ]; then if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then - QCONFIG_FLAGS="$QCONFIG_FLAGS Q_BACKINGSTORE_SUBSURFACES" +### TODO # QCONFIG_FLAGS="$QCONFIG_FLAGS Q_BACKINGSTORE_SUBSURFACES" + echo "### Q_BACKINGSTORE_SUBSURFACES disabled, re-enable once it compiles again" QCONFIG_FLAGS="$QCONFIG_FLAGS Q_USE_EGLWINDOWSURFACE" fi QCONFIG_FLAGS="$QCONFIG_FLAGS QT_OPENGL_ES" -- cgit v0.12 From 4190f781a81da9d2a2470d75fcf2cf2946504b34 Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Fri, 4 Dec 2009 14:14:16 +0100 Subject: make sure that x11 is disabled when building embedded_lite --- src/opengl/opengl.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index b2474ed..0f752c1 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -10,7 +10,7 @@ unix:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui include(../qbase.pri) -!win32:!embedded:!mac:CONFIG += x11 +!win32:!embedded:!mac:!embedded_lite:CONFIG += x11 contains(QT_CONFIG, opengl):CONFIG += opengl contains(QT_CONFIG, opengles1):CONFIG += opengles1 contains(QT_CONFIG, opengles1cl):CONFIG += opengles1cl -- cgit v0.12 From 2447284a73dd8ce6268614d5709c5a1dcffbde3a Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Fri, 4 Dec 2009 14:14:41 +0100 Subject: compile with Q_WS_LITE --- src/opengl/qgl_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 8e472e5..2160f4f 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -336,7 +336,7 @@ public: static inline QGLExtensionFuncs& extensionFuncs(const QGLContext *ctx) { return ctx->d_ptr->group->extensionFuncs(); } #endif -#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) +#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_LITE) static QGLExtensionFuncs qt_extensionFuncs; static inline QGLExtensionFuncs& extensionFuncs(const QGLContext *) { return qt_extensionFuncs; } #endif -- cgit v0.12 From 52613f91fe4c8bb4faa93c50cc3fab2d8082fc30 Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Fri, 4 Dec 2009 14:15:02 +0100 Subject: compile again after recent API changes --- src/gui/egl/qegl_lite.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/egl/qegl_lite.cpp b/src/gui/egl/qegl_lite.cpp index 40439c6..60b862b 100644 --- a/src/gui/egl/qegl_lite.cpp +++ b/src/gui/egl/qegl_lite.cpp @@ -52,11 +52,11 @@ QT_BEGIN_NAMESPACE -bool QEglContext::createSurface(QPaintDevice *device, const QEglProperties *properties) +EGLSurface QEglContext::createSurface(QPaintDevice *device, const QEglProperties *properties) { Q_UNUSED(device); Q_UNUSED(properties); - return false; + return 0; } EGLDisplay QEglContext::getDisplay(QPaintDevice *device) -- cgit v0.12 From 426334321319054fedf8993bba6482ce90a2c4ee Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 8 Dec 2009 11:54:00 +0100 Subject: fix application supplied image cursors --- src/gui/painting/qgraphicssystemcursor.cpp | 7 +++++++ src/gui/painting/qgraphicssystemcursor.h | 1 + src/plugins/graphicssystems/fb_base/fb_base.cpp | 9 ++++++--- src/plugins/graphicssystems/fb_base/fb_base.h | 1 + 4 files changed, 15 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 3fc836d..9a0e135 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -513,6 +513,13 @@ void QGraphicsSystemCursorImage::set(Qt::CursorShape id) hot = cursor->hot; } +void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + cursorImage = *image; +} + void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) { diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h index 42727a8..0d57d52 100644 --- a/src/gui/painting/qgraphicssystemcursor.h +++ b/src/gui/painting/qgraphicssystemcursor.h @@ -58,6 +58,7 @@ public: QImage * image() { return &cursorImage; } QPoint hotspot() { return hot; } void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void set(const QImage * image, int hx, int hy); void set(Qt::CursorShape); private: static void createSystemCursor(int id); diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index 27cb8a4..f9ea97f 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -54,6 +54,11 @@ void QGraphicsSystemSoftwareCursor::setCursor(Qt::CursorShape shape) graphic->set(shape); } +void QGraphicsSystemSoftwareCursor::setCursor(const QImage * image, int hotx, int hoty) +{ + graphic->set(image, hotx, hoty); +} + void QGraphicsSystemSoftwareCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) { graphic->set(data, mask, width, height, hotX, hotY); @@ -66,10 +71,8 @@ void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget if (shape == Qt::BitmapCursor) { // application supplied cursor - const QBitmap * map = widgetCursor->bitmap(); - const QBitmap * mask = widgetCursor->mask(); QPoint spot = widgetCursor->hotSpot(); - setCursor(map->toImage().bits(), mask->toImage().bits(), map->width(), map->height(), spot.x(), spot.y()); + setCursor(&widgetCursor->pixmap().toImage(), spot.x(), spot.y()); } else { // system cursor setCursor(shape); diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index 9abd5d0..58f340d 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -34,6 +34,7 @@ protected: private: void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); void setCursor(Qt::CursorShape shape); + void setCursor(const QImage * image, int hotx, int hoty); QRect currentRect; // next place to draw the cursor QRect prevRect; // last place the cursor was drawn QRect getCurrentRect(); -- cgit v0.12 From 698033071fe28f85f4e762f8347da4c2956b56ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 25 Nov 2009 14:40:16 +0100 Subject: Delete the surface --- src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp | 5 +++++ src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 05221ce..71be882 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -27,6 +27,11 @@ QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) } } +QDirectFbBlitter::~QDirectFbBlitter() +{ + delete m_surface; +} + void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) { m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h index 252bf80..c1fbc14 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h @@ -9,7 +9,7 @@ class QDirectFbBlitter : public QBlittable { public: QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface = 0); - virtual ~QDirectFbBlitter(){ } + virtual ~QDirectFbBlitter(); virtual void fillRect(const QRectF &rect, const QColor &color); virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); -- cgit v0.12 From 6dc5eb70382fb7f1741142b6919e1754e365029c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 27 Nov 2009 10:07:40 +0100 Subject: We dont need a new pixmap here :) --- src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 3dcf5be..43bfd9b 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -105,13 +105,9 @@ void QDirectFbWindowSurface::setGeometry(const QRect &rect) if (result != DFB_OK) DirectFBError("QDirectFbWindowSurface::setGeometry() failed to retrieve new surface",result); - QPixmap *oldpixmap = m_pixmap; QDirectFbBlitter *blitter = new QDirectFbBlitter(rect, m_dfbSurface); pmdata->resize(rect.width(),rect.height()); pmdata->setBlittable(blitter); - m_pixmap = new QPixmap(pmdata); - delete oldpixmap; - } bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) -- cgit v0.12 From d8d65804ed67ff58fe8679d3a1831c9dfad3624a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Dec 2009 09:41:08 +0100 Subject: Added basic mouseinput support for minimaldfb --- .../graphicssystems/minimaldfb/minimaldfb.pro | 6 +- .../minimaldfb/qblitter_directfb.cpp | 2 +- .../minimaldfb/qdirectfbconvenience.cpp | 232 +++++++++++++++++++++ .../minimaldfb/qdirectfbconvenience.h | 15 ++ .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 104 +++++++++ .../graphicssystems/minimaldfb/qdirectfbinput.h | 49 +++++ .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 7 +- .../minimaldfb/qgraphicssystem_minimaldfb.h | 7 +- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 3 +- 9 files changed, 418 insertions(+), 7 deletions(-) create mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp create mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro index c3f20ff..8b20c45 100644 --- a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro +++ b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro @@ -11,10 +11,12 @@ SOURCES = main.cpp \ qgraphicssystem_minimaldfb.cpp \ qwindowsurface_minimaldfb.cpp \ qblitter_directfb.cpp \ - qdirectfbconvenience.cpp + qdirectfbconvenience.cpp \ + qdirectfbinput.cpp HEADERS = qgraphicssystem_minimaldfb.h \ qwindowsurface_minimaldfb.h \ qblitter_directfb.h \ - qdirectfbconvenience.h + qdirectfbconvenience.h \ + qdirectfbinput.h target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 71be882..8d54c21 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -29,7 +29,7 @@ QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) QDirectFbBlitter::~QDirectFbBlitter() { - delete m_surface; + m_surface->Release(m_surface); } void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index d958482..f0293bd 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -41,3 +41,235 @@ QImage::Format QDirectFbConvenience::imageFormatFromSurface(IDirectFBSurface *su return QImage::Format_Invalid; } + +Qt::MouseButton QDirectFbConvenience::mouseButton(DFBInputDeviceButtonIdentifier identifier) +{ + switch (identifier){ + case DIBI_LEFT: + return Qt::LeftButton; + case DIBI_MIDDLE: + return Qt::MidButton; + case DIBI_RIGHT: + return Qt::RightButton; + default: + return Qt::NoButton; + } +} + +Qt::MouseButtons QDirectFbConvenience::mouseButtons(DFBInputDeviceButtonMask mask) +{ + Qt::MouseButtons buttons = Qt::NoButton; + + if (mask & DIBM_LEFT) { + buttons |= Qt::LeftButton; + } + if (mask & DIBM_MIDDLE) { + buttons |= Qt::MidButton; + } + if (mask & DIBM_RIGHT) { + buttons |= Qt::RightButton; + } + return buttons; +} + +QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type) +{ + switch(type) { + case DWET_BUTTONDOWN: + return QEvent::MouseButtonPress; + case DWET_BUTTONUP: + return QEvent::MouseButtonRelease; + case DWET_MOTION: + return QEvent::MouseMove; + case DWET_WHEEL: + return QEvent::Wheel; + default: + return QEvent::None; + } +} +QDirectFbKeyMap *QDirectFbConvenience::dfbKeymap = 0; +QDirectFbKeyMap *QDirectFbConvenience::keyMap() +{ + if (!dfbKeymap) + dfbKeymap = new QDirectFbKeyMap(); + return dfbKeymap; +} + +QDirectFbKeyMap::QDirectFbKeyMap() +{ + insert(DIKS_BACKSPACE , Qt::Key_Backspace); + insert(DIKS_TAB , Qt::Key_Tab); + insert(DIKS_RETURN , Qt::Key_Return); + insert(DIKS_ESCAPE , Qt::Key_Escape); + insert(DIKS_DELETE , Qt::Key_Delete); + + insert(DIKS_CURSOR_LEFT , Qt::Key_Left); + insert(DIKS_CURSOR_RIGHT , Qt::Key_Right); + insert(DIKS_CURSOR_UP , Qt::Key_Up); + insert(DIKS_CURSOR_DOWN , Qt::Key_Down); + insert(DIKS_INSERT , Qt::Key_Insert); + insert(DIKS_HOME , Qt::Key_Home); + insert(DIKS_END , Qt::Key_End); + insert(DIKS_PAGE_UP , Qt::Key_PageUp); + insert(DIKS_PAGE_DOWN , Qt::Key_PageDown); + insert(DIKS_PRINT , Qt::Key_Print); + insert(DIKS_PAUSE , Qt::Key_Pause); + insert(DIKS_SELECT , Qt::Key_Select); + insert(DIKS_GOTO , Qt::Key_OpenUrl); + insert(DIKS_CLEAR , Qt::Key_Clear); + insert(DIKS_MENU , Qt::Key_Menu); + insert(DIKS_HELP , Qt::Key_Help); + + insert(DIKS_INTERNET , Qt::Key_HomePage); + insert(DIKS_MAIL , Qt::Key_LaunchMail); + insert(DIKS_FAVORITES , Qt::Key_Favorites); + + insert(DIKS_BACK , Qt::Key_Back); + insert(DIKS_FORWARD , Qt::Key_Forward); + insert(DIKS_VOLUME_UP , Qt::Key_VolumeUp); + insert(DIKS_VOLUME_DOWN , Qt::Key_VolumeDown); + insert(DIKS_MUTE , Qt::Key_VolumeMute); + insert(DIKS_PLAYPAUSE , Qt::Key_Pause); + insert(DIKS_PLAY , Qt::Key_MediaPlay); + insert(DIKS_STOP , Qt::Key_MediaStop); + insert(DIKS_RECORD , Qt::Key_MediaRecord); + insert(DIKS_PREVIOUS , Qt::Key_MediaPrevious); + insert(DIKS_NEXT , Qt::Key_MediaNext); + + insert(DIKS_F1 , Qt::Key_F1); + insert(DIKS_F2 , Qt::Key_F2); + insert(DIKS_F3 , Qt::Key_F3); + insert(DIKS_F4 , Qt::Key_F4); + insert(DIKS_F5 , Qt::Key_F5); + insert(DIKS_F6 , Qt::Key_F6); + insert(DIKS_F7 , Qt::Key_F7); + insert(DIKS_F8 , Qt::Key_F8); + insert(DIKS_F9 , Qt::Key_F9); + insert(DIKS_F10 , Qt::Key_F10); + insert(DIKS_F11 , Qt::Key_F11); + insert(DIKS_F12 , Qt::Key_F12); + + insert(DIKS_SHIFT , Qt::Key_Shift); + insert(DIKS_CONTROL , Qt::Key_Control); + insert(DIKS_ALT , Qt::Key_Alt); + insert(DIKS_ALTGR , Qt::Key_AltGr); + + insert(DIKS_META , Qt::Key_Meta); + insert(DIKS_SUPER , Qt::Key_Super_L); // ??? + insert(DIKS_HYPER , Qt::Key_Hyper_L); // ??? + + insert(DIKS_CAPS_LOCK , Qt::Key_CapsLock); + insert(DIKS_NUM_LOCK , Qt::Key_NumLock); + insert(DIKS_SCROLL_LOCK , Qt::Key_ScrollLock); + + insert(DIKS_DEAD_ABOVEDOT , Qt::Key_Dead_Abovedot); + insert(DIKS_DEAD_ABOVERING , Qt::Key_Dead_Abovering); + insert(DIKS_DEAD_ACUTE , Qt::Key_Dead_Acute); + insert(DIKS_DEAD_BREVE , Qt::Key_Dead_Breve); + insert(DIKS_DEAD_CARON , Qt::Key_Dead_Caron); + insert(DIKS_DEAD_CEDILLA , Qt::Key_Dead_Cedilla); + insert(DIKS_DEAD_CIRCUMFLEX , Qt::Key_Dead_Circumflex); + insert(DIKS_DEAD_DIAERESIS , Qt::Key_Dead_Diaeresis); + insert(DIKS_DEAD_DOUBLEACUTE , Qt::Key_Dead_Doubleacute); + insert(DIKS_DEAD_GRAVE , Qt::Key_Dead_Grave); + insert(DIKS_DEAD_IOTA , Qt::Key_Dead_Iota); + insert(DIKS_DEAD_MACRON , Qt::Key_Dead_Macron); + insert(DIKS_DEAD_OGONEK , Qt::Key_Dead_Ogonek); + insert(DIKS_DEAD_SEMIVOICED_SOUND , Qt::Key_Dead_Semivoiced_Sound); + insert(DIKS_DEAD_TILDE , Qt::Key_Dead_Tilde); + insert(DIKS_DEAD_VOICED_SOUND , Qt::Key_Dead_Voiced_Sound); + insert(DIKS_SPACE , Qt::Key_Space); + insert(DIKS_EXCLAMATION_MARK , Qt::Key_Exclam); + insert(DIKS_QUOTATION , Qt::Key_QuoteDbl); + insert(DIKS_NUMBER_SIGN , Qt::Key_NumberSign); + insert(DIKS_DOLLAR_SIGN , Qt::Key_Dollar); + insert(DIKS_PERCENT_SIGN , Qt::Key_Percent); + insert(DIKS_AMPERSAND , Qt::Key_Ampersand); + insert(DIKS_APOSTROPHE , Qt::Key_Apostrophe); + insert(DIKS_PARENTHESIS_LEFT , Qt::Key_ParenLeft); + insert(DIKS_PARENTHESIS_RIGHT , Qt::Key_ParenRight); + insert(DIKS_ASTERISK , Qt::Key_Asterisk); + insert(DIKS_PLUS_SIGN , Qt::Key_Plus); + insert(DIKS_COMMA , Qt::Key_Comma); + insert(DIKS_MINUS_SIGN , Qt::Key_Minus); + insert(DIKS_PERIOD , Qt::Key_Period); + insert(DIKS_SLASH , Qt::Key_Slash); + insert(DIKS_0 , Qt::Key_0); + insert(DIKS_1 , Qt::Key_1); + insert(DIKS_2 , Qt::Key_2); + insert(DIKS_3 , Qt::Key_3); + insert(DIKS_4 , Qt::Key_4); + insert(DIKS_5 , Qt::Key_5); + insert(DIKS_6 , Qt::Key_6); + insert(DIKS_7 , Qt::Key_7); + insert(DIKS_8 , Qt::Key_8); + insert(DIKS_9 , Qt::Key_9); + insert(DIKS_COLON , Qt::Key_Colon); + insert(DIKS_SEMICOLON , Qt::Key_Semicolon); + insert(DIKS_LESS_THAN_SIGN , Qt::Key_Less); + insert(DIKS_EQUALS_SIGN , Qt::Key_Equal); + insert(DIKS_GREATER_THAN_SIGN , Qt::Key_Greater); + insert(DIKS_QUESTION_MARK , Qt::Key_Question); + insert(DIKS_AT , Qt::Key_At); + insert(DIKS_CAPITAL_A , Qt::Key_A); + insert(DIKS_CAPITAL_B , Qt::Key_B); + insert(DIKS_CAPITAL_C , Qt::Key_C); + insert(DIKS_CAPITAL_D , Qt::Key_D); + insert(DIKS_CAPITAL_E , Qt::Key_E); + insert(DIKS_CAPITAL_F , Qt::Key_F); + insert(DIKS_CAPITAL_G , Qt::Key_G); + insert(DIKS_CAPITAL_H , Qt::Key_H); + insert(DIKS_CAPITAL_I , Qt::Key_I); + insert(DIKS_CAPITAL_J , Qt::Key_J); + insert(DIKS_CAPITAL_K , Qt::Key_K); + insert(DIKS_CAPITAL_L , Qt::Key_L); + insert(DIKS_CAPITAL_M , Qt::Key_M); + insert(DIKS_CAPITAL_N , Qt::Key_N); + insert(DIKS_CAPITAL_O , Qt::Key_O); + insert(DIKS_CAPITAL_P , Qt::Key_P); + insert(DIKS_CAPITAL_Q , Qt::Key_Q); + insert(DIKS_CAPITAL_R , Qt::Key_R); + insert(DIKS_CAPITAL_S , Qt::Key_S); + insert(DIKS_CAPITAL_T , Qt::Key_T); + insert(DIKS_CAPITAL_U , Qt::Key_U); + insert(DIKS_CAPITAL_V , Qt::Key_V); + insert(DIKS_CAPITAL_W , Qt::Key_W); + insert(DIKS_CAPITAL_X , Qt::Key_X); + insert(DIKS_CAPITAL_Y , Qt::Key_Y); + insert(DIKS_CAPITAL_Z , Qt::Key_Z); + insert(DIKS_SQUARE_BRACKET_LEFT , Qt::Key_BracketLeft); + insert(DIKS_BACKSLASH , Qt::Key_Backslash); + insert(DIKS_SQUARE_BRACKET_RIGHT , Qt::Key_BracketRight); + insert(DIKS_CIRCUMFLEX_ACCENT , Qt::Key_AsciiCircum); + insert(DIKS_UNDERSCORE , Qt::Key_Underscore); + insert(DIKS_SMALL_A , Qt::Key_A); + insert(DIKS_SMALL_B , Qt::Key_B); + insert(DIKS_SMALL_C , Qt::Key_C); + insert(DIKS_SMALL_D , Qt::Key_D); + insert(DIKS_SMALL_E , Qt::Key_E); + insert(DIKS_SMALL_F , Qt::Key_F); + insert(DIKS_SMALL_G , Qt::Key_G); + insert(DIKS_SMALL_H , Qt::Key_H); + insert(DIKS_SMALL_I , Qt::Key_I); + insert(DIKS_SMALL_J , Qt::Key_J); + insert(DIKS_SMALL_K , Qt::Key_K); + insert(DIKS_SMALL_L , Qt::Key_L); + insert(DIKS_SMALL_M , Qt::Key_M); + insert(DIKS_SMALL_N , Qt::Key_N); + insert(DIKS_SMALL_O , Qt::Key_O); + insert(DIKS_SMALL_P , Qt::Key_P); + insert(DIKS_SMALL_Q , Qt::Key_Q); + insert(DIKS_SMALL_R , Qt::Key_R); + insert(DIKS_SMALL_S , Qt::Key_S); + insert(DIKS_SMALL_T , Qt::Key_T); + insert(DIKS_SMALL_U , Qt::Key_U); + insert(DIKS_SMALL_V , Qt::Key_V); + insert(DIKS_SMALL_W , Qt::Key_W); + insert(DIKS_SMALL_X , Qt::Key_X); + insert(DIKS_SMALL_Y , Qt::Key_Y); + insert(DIKS_SMALL_Z , Qt::Key_Z); + insert(DIKS_CURLY_BRACKET_LEFT , Qt::Key_BraceLeft); + insert(DIKS_VERTICAL_BAR , Qt::Key_Bar); + insert(DIKS_CURLY_BRACKET_RIGHT , Qt::Key_BraceRight); + insert(DIKS_TILDE , Qt::Key_AsciiTilde); +} diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h index 7e426db..0ae1410 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -2,9 +2,18 @@ #define QDIRECTFBCONVENIENCE_H #include +#include +#include #include +class QDirectFbKeyMap: public QHash +{ +public: + QDirectFbKeyMap(); +}; + + class QDirectFbConvenience { public: @@ -12,10 +21,16 @@ public: //This is set by the graphicssystem constructor static IDirectFB *dfbInterface() { return dfb; } + static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier); + static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask); + static QEvent::Type eventType(DFBWindowEventType type); + + static QDirectFbKeyMap *keyMap(); private: static void setDfbInterface(IDirectFB *dfbInterface) {dfb = dfbInterface;} static IDirectFB *dfb; + static QDirectFbKeyMap *dfbKeymap; friend class QDirectFbGraphicsSystem; }; diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp new file mode 100644 index 0000000..4ba4ff8 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -0,0 +1,104 @@ +#include "qdirectfbinput.h" +#include "qdirectfbconvenience.h" + +#include +#include +#include +#include +#include + +#include + +InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) + : QThread(parent), eventBuffer(eventBuffer) + { + this->start(); + } + +void InputSocketWaiter::run() +{ + while (1) { + eventBuffer->WaitForEvent(eventBuffer); + emit newEvent(); + } +} + +QDirectFbInput::QDirectFbInput(QObject *parent) + : QObject(parent) +{ + DFBResult ok = DirectFBCreate(&dfbInterface); + if (ok != DFB_OK) + DirectFBError("Failed to initialise QDirectFBInput", ok); + + ok = dfbInterface->CreateEventBuffer(dfbInterface,&eventBuffer); + if (ok != DFB_OK) + DirectFBError("Failed to initialise eventbuffer", ok); + + dfbInterface->GetDisplayLayer(dfbInterface,DLID_PRIMARY, &dfbDisplayLayer); + + InputSocketWaiter *inputHandler = new InputSocketWaiter(eventBuffer,this); + connect(inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); +} + +void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) +{ + tlwMap.insert(id,tlw); + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); + +// window->DisableEvents(window,DWET_ALL); + window->EnableEvents(window,DFBWindowEventType(DWET_ALL)); + window->SetKeySelection(window,DWKS_ALL,NULL,0); + window->AttachEventBuffer(window,eventBuffer); +} + +void QDirectFbInput::handleEvents() +{ + DFBResult hasEvent = eventBuffer->HasEvent(eventBuffer); + while(hasEvent == DFB_OK){ + DFBEvent event; + DFBResult ok = eventBuffer->GetEvent(eventBuffer,&event); + if (ok != DFB_OK) + DirectFBError("Failed to get event",ok); + if (event.clazz == DFEC_WINDOW) { + switch (event.window.type) { + case DWET_BUTTONDOWN: + case DWET_BUTTONUP: +// case DWET_MOTION: + case DWET_WHEEL: + handleMouseEvents(event); + break; + case DWET_KEYDOWN: + qDebug() << "FOOOOBAR!"; + } + + } else + qDebug() << "WHAT!"; + + hasEvent = eventBuffer->HasEvent(eventBuffer); + } +} + +void QDirectFbInput::handleMouseEvents(const DFBEvent &event) +{ + QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); + QPoint p(event.window.cx, event.window.cy); + QPoint globalPos = globalPoint(event); + Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button); + Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); + + qDebug() << QDirectFbConvenience::keyMap()->value(event.window.key_symbol); + QMouseEvent mouseEvent(type,p,globalPos,button, buttons,(Qt::KeyboardModifiers)0); + QWidget *tlw = tlwMap.value(event.window.window_id); + QApplicationPrivate::handleMouseEvent(tlw,mouseEvent); +} + +inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const +{ + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,event.window.window_id,&window); + int x,y; + window->GetPosition(window,&x,&y); + return QPoint(event.window.cx +x, event.window.cy + y); +} + diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h new file mode 100644 index 0000000..529d51a --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h @@ -0,0 +1,49 @@ +#ifndef QDIRECTFBINPUT_H +#define QDIRECTFBINPUT_H + +#include +#include +#include +#include +#include + +#include + +class InputSocketWaiter : public QThread +{ + Q_OBJECT +public: + InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent); +protected: + void run(); +signals: + void newEvent(); +private: + IDirectFBEventBuffer *eventBuffer; +}; + +class QDirectFbInput : public QObject +{ + Q_OBJECT +public: + QDirectFbInput(QObject *parent = 0); + + void addWindow(DFBWindowID id, QWidget *tlw); + +public slots: + void handleEvents(); + +private: + + void handleMouseEvents(const DFBEvent & event); + IDirectFB *dfbInterface; + IDirectFBDisplayLayer *dfbDisplayLayer; + IDirectFBEventBuffer *eventBuffer; + + QHashtlwMap; + + inline QPoint globalPoint(const DFBEvent &event) const; + +}; + +#endif // QDIRECTFBINPUT_H diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index 117e4b5..3f10aec 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -55,6 +55,7 @@ QT_BEGIN_NAMESPACE QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int display) + :QGraphicsSystemScreen() , m_input(this) { DFBResult result = dfb->GetDisplayLayer(dfb, DLID_PRIMARY, &m_layer); if (result != DFB_OK) { @@ -90,7 +91,7 @@ QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen() { } -IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect) +IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect, QWidget *tlw) { IDirectFBWindow *window; @@ -110,6 +111,10 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect) if (result != DFB_OK) { DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); } + + DFBWindowID id; + window->GetID(window, &id); + m_input.addWindow(id,tlw); return window; } diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index 462e963..6068495 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -42,6 +42,8 @@ #ifndef QGRAPHICSSYSTEM_MINIMAL_H #define QGRAPHICSSYSTEM_MINIMAL_H +#include "qdirectfbinput.h" + #include #include @@ -58,7 +60,7 @@ public: QImage::Format format() const { return m_format; } QSize physicalSize() const { return m_physicalSize; } - IDirectFBWindow *createWindow(const QRect &); + IDirectFBWindow *createWindow(const QRect &,QWidget *tlw); public: QRect m_geometry; @@ -66,8 +68,11 @@ public: QImage::Format m_format; QSize m_physicalSize; + QDirectFbInput m_input; + IDirectFBScreen *m_screen; IDirectFBDisplayLayer *m_layer; + }; class QDirectFbGraphicsSystem : public QGraphicsSystem diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 43bfd9b..6c8b2b4 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -53,7 +53,7 @@ QDirectFbWindowSurface::QDirectFbWindowSurface : QWindowSurface(window), m_screen(screen), m_lock(false) { window->setWindowSurface(this); - m_dfbWindow = m_screen->createWindow(window->rect()); + m_dfbWindow = m_screen->createWindow(window->rect(),window); DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); if (result != DFB_OK) { DirectFBError("QDirectFbWindowSurface::QDirectFbWindowSurface: unable to get windows surface",result); @@ -66,7 +66,6 @@ QDirectFbWindowSurface::QDirectFbWindowSurface pmdata->setBlittable(blitter); m_pixmap = new QPixmap(pmdata); - } QDirectFbWindowSurface::~QDirectFbWindowSurface() -- cgit v0.12 From 932346c345d7759b0e9280434a0371c8e9d67b7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Dec 2009 11:02:15 +0100 Subject: Quick fix for bitmap type --- src/gui/image/qpixmap_blitter.cpp | 3 +-- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp | 4 +--- .../graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp | 5 ++++- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 35d6ddb..08b0c3c 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -103,8 +103,7 @@ void QBlittablePixmapData::fromImage(const QImage &image, resize(image.width(),image.height()); QImage *thisImg = blittable()->lock(); QPainter p(thisImg); - p.drawImage(0,0,image,flags); - + p.drawImage(blittable()->rect(),image,image.rect()); } QPaintEngine *QBlittablePixmapData::paintEngine() const diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 4ba4ff8..cb9b411 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -64,12 +64,10 @@ void QDirectFbInput::handleEvents() switch (event.window.type) { case DWET_BUTTONDOWN: case DWET_BUTTONUP: -// case DWET_MOTION: + case DWET_MOTION: case DWET_WHEEL: handleMouseEvents(event); break; - case DWET_KEYDOWN: - qDebug() << "FOOOOBAR!"; } } else diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index 3f10aec..b4766f3 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -151,7 +151,10 @@ QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() QPixmapData *QDirectFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const { - return new QBlittablePixmapData(type); + if (type == QPixmapData::BitmapType) + return new QRasterPixmapData(type); + else + return new QBlittablePixmapData(type); } QWindowSurface *QDirectFbGraphicsSystem::createWindowSurface(QWidget *widget) const -- cgit v0.12 From 53b0e8047e22930bd10a8f1d5ce573b6b190fbad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Dec 2009 13:12:50 +0100 Subject: Fix stupid stride error in qblitter_directfb MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit How many times am I going to make that mistake?"£$%"^ --- src/gui/image/qpixmap_blitter.cpp | 2 +- src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp | 2 +- .../graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 08b0c3c..18761a9 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -103,7 +103,7 @@ void QBlittablePixmapData::fromImage(const QImage &image, resize(image.width(),image.height()); QImage *thisImg = blittable()->lock(); QPainter p(thisImg); - p.drawImage(blittable()->rect(),image,image.rect()); + p.drawImage(0,0,image,flags); } QPaintEngine *QBlittablePixmapData::paintEngine() const diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 8d54c21..3c58970 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -79,7 +79,7 @@ QImage *QDirectFbBlitter::doLock() QImage::Format format = QDirectFbConvenience::imageFormatFromSurface(m_surface); int w, h; m_surface->GetSize(m_surface,&w,&h); - m_image = QImage(static_cast(mem),w,h,format); + m_image = QImage(static_cast(mem),w,h,bpl,format); } else { DirectFBError("Failed to lock image", result); } diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index b4766f3..b7aab7a 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -97,15 +97,14 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect, DFBWindowDescription description; memset(&description,0,sizeof(DFBWindowDescription)); -// description.flags = DWDESC_SURFACE_CAPS; + description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS|DWDESC_OPTIONS|DWDESC_CAPS); description.width = rect.width(); description.height = rect.height(); description.posx = rect.x(); description.posy = rect.y(); -// description.flags |= DWDESC_OPTIONS; -// description.options = DWOP_GHOST|DWOP_ALPHACHANNEL; -// description.caps = (DFBWindowDescription) (DWCAPS_NODECORATION|DWCAPS_DOUBLEBUFFER); -// description.surface_caps = DSCAPS_PREMULTIPLIED; + description.options = DFBWindowOptions(DWOP_GHOST|DWOP_ALPHACHANNEL); + description.caps = DFBWindowCapabilities(DWCAPS_NODECORATION|DWCAPS_DOUBLEBUFFER); + description.surface_caps = DSCAPS_PREMULTIPLIED; DFBResult result = m_layer->CreateWindow(m_layer,&description,&window); if (result != DFB_OK) { -- cgit v0.12 From 2ed5e8dc4b72f7aea5bc42643d5efd6b0dc9ff4a Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 9 Dec 2009 14:14:59 +0100 Subject: application supplied bitmap cursors for the testlite backend --- src/plugins/graphicssystems/testlite/x11util.cpp | 33 +++++++++++++++++------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 1a421e8..cb08230 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -943,7 +943,6 @@ void MyWindow::setCursor(QCursor * cursor) Cursor MyWindow::createCursorBitmap(QCursor * cursor) { -/* XColor bg, fg; bg.red = 255 << 8; bg.green = 255 << 8; @@ -954,21 +953,35 @@ Cursor MyWindow::createCursorBitmap(QCursor * cursor) QPoint spot = cursor->hotSpot(); Window rootwin = window; - const QBitmap * map = cursor->bitmap(); - char * mapBits = reinterpret_cast(map->toImage().bits()); - const QBitmap * mask = cursor->mask(); - char * maskBits = reinterpret_cast(mask->toImage().bits()); + QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); + QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); - Pixmap cp = XCreateBitmapFromData(xd->display, rootwin, mapBits, map->width(), map->height()); - Pixmap mp = XCreateBitmapFromData(xd->display, rootwin, maskBits, map->width(), map->height()); + int width = cursor->bitmap()->width(); + int height = cursor->bitmap()->height(); + int bytesPerLine = mapImage.bytesPerLine(); + int destLineSize = width / 8; + if (width % 8) + destLineSize++; + + const uchar * map = mapImage.bits(); + const uchar * mask = maskImage.bits(); + + char * mapBits = new char[height * destLineSize]; + char * maskBits = new char[height * destLineSize]; + for (int i = 0; i < height; i++) { + memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); + memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); + } + + Pixmap cp = XCreateBitmapFromData(xd->display, rootwin, mapBits, width, height); + Pixmap mp = XCreateBitmapFromData(xd->display, rootwin, maskBits, width, height); Cursor c = XCreatePixmapCursor(xd->display, cp, mp, &fg, &bg, spot.x(), spot.y()); XFreePixmap(xd->display, cp); XFreePixmap(xd->display, mp); + delete[] mapBits; + delete[] maskBits; return c; -*/ - // correct pixmap cursor parsing not implemented yet - return createCursorShape(Qt::ArrowCursor); } Cursor MyWindow::createCursorShape(int cshape) -- cgit v0.12 From 594427bcd0351350c2d2298d6b193bb1014b6bda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 9 Dec 2009 15:27:35 +0100 Subject: copy and paste error :( --- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp | 2 +- src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index cb9b411..695c985 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -46,7 +46,7 @@ void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) IDirectFBWindow *window; dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); -// window->DisableEvents(window,DWET_ALL); + window->DisableEvents(window,DWET_ALL); window->EnableEvents(window,DFBWindowEventType(DWET_ALL)); window->SetKeySelection(window,DWKS_ALL,NULL,0); window->AttachEventBuffer(window,eventBuffer); diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index b7aab7a..0583364 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -102,8 +102,8 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect, description.height = rect.height(); description.posx = rect.x(); description.posy = rect.y(); - description.options = DFBWindowOptions(DWOP_GHOST|DWOP_ALPHACHANNEL); - description.caps = DFBWindowCapabilities(DWCAPS_NODECORATION|DWCAPS_DOUBLEBUFFER); + description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); + description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER); description.surface_caps = DSCAPS_PREMULTIPLIED; DFBResult result = m_layer->CreateWindow(m_layer,&description,&window); -- cgit v0.12 From a4c7e91befad73601c0ee6e194a5dfeb6cac61a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 10 Dec 2009 13:37:36 +0100 Subject: Added keypresses to minimaldfbinput --- .../graphicssystems/minimaldfb/qdirectfbconvenience.cpp | 4 ++++ src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp | 14 +++++++++++++- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h | 3 ++- .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 4 ++++ 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index f0293bd..cd1f568 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -83,6 +83,10 @@ QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type) return QEvent::MouseMove; case DWET_WHEEL: return QEvent::Wheel; + case DWET_KEYDOWN: + return QEvent::KeyPress; + case DWET_KEYUP: + return QEvent::KeyRelease; default: return QEvent::None; } diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 695c985..7c8d3c2 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -68,6 +68,9 @@ void QDirectFbInput::handleEvents() case DWET_WHEEL: handleMouseEvents(event); break; + case DWET_KEYDOWN: + case DWET_KEYUP: + handleKeyEvents(event); } } else @@ -85,12 +88,21 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button); Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); - qDebug() << QDirectFbConvenience::keyMap()->value(event.window.key_symbol); QMouseEvent mouseEvent(type,p,globalPos,button, buttons,(Qt::KeyboardModifiers)0); QWidget *tlw = tlwMap.value(event.window.window_id); QApplicationPrivate::handleMouseEvent(tlw,mouseEvent); } +void QDirectFbInput::handleKeyEvents(const DFBEvent &event) +{ + QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); + Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol); + + QKeyEvent keyEvent(type,key,0,QChar(event.window.key_symbol));//,"",true,0); + QWidget *tlw = tlwMap.value(event.window.window_id); + QApplicationPrivate::handleKeyEvent(tlw,&keyEvent); +} + inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const { IDirectFBWindow *window; diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h index 529d51a..ddc2dbf 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h @@ -35,7 +35,8 @@ public slots: private: - void handleMouseEvents(const DFBEvent & event); + void handleMouseEvents(const DFBEvent &event); + void handleKeyEvents(const DFBEvent &event); IDirectFB *dfbInterface; IDirectFBDisplayLayer *dfbDisplayLayer; IDirectFBEventBuffer *eventBuffer; diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index 0583364..fe3b1d8 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -62,6 +62,10 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int DirectFBError("QDirectFbGraphicsSystemScreen " "Unable to get primary display layer!", result); } + DFBDisplayLayerConfig *displayLayerConfig; +// m_layer->GetConfiguration(m_layer,displayLayerConfig); +// displayLayerConfig->surface_caps = DFBSurfaceCapabilities(displayLayerConfig->surface_caps | DSCAPS_PREMULTIPLIED); +// m_layer->SetConfiguration(m_layer, displayLayerConfig); m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); IDirectFBSurface *topLevelSurface; -- cgit v0.12 From 2a0229375424499b9d83dd3214595efdc624a8a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 11 Dec 2009 09:19:59 +0100 Subject: Minimaldfb: Added keyboard modifiers to keyevents and added double click to mouseevents --- .../minimaldfb/qdirectfbconvenience.cpp | 22 ++++++++++++++++ .../minimaldfb/qdirectfbconvenience.h | 1 + .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 29 ++++++++++++++++++++-- 3 files changed, 50 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index cd1f568..63ae289 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -72,6 +72,28 @@ Qt::MouseButtons QDirectFbConvenience::mouseButtons(DFBInputDeviceButtonMask mas return buttons; } +Qt::KeyboardModifiers QDirectFbConvenience::keyboardModifiers(DFBInputDeviceModifierMask mask) +{ + Qt::KeyboardModifiers modifiers = Qt::NoModifier; + + if (mask & DIMM_SHIFT) { + modifiers |= Qt::ShiftModifier; + } + if (mask & DIMM_ALT) { + modifiers |= Qt::AltModifier; + } + if (mask & DIMM_ALTGR) { + modifiers |= Qt::MetaModifier; + } + if (mask & DIMM_CONTROL) { + modifiers |= Qt::ControlModifier; + } + if (mask & DIMM_META) { + modifiers | Qt::MetaModifier; + } + return modifiers; +} + QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type) { switch(type) { diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h index 0ae1410..2f5e10b 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -23,6 +23,7 @@ public: static IDirectFB *dfbInterface() { return dfb; } static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier); static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask); + static Qt::KeyboardModifiers keyboardModifiers(DFBInputDeviceModifierMask mask); static QEvent::Type eventType(DFBWindowEventType type); static QDirectFbKeyMap *keyMap(); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 7c8d3c2..b6f0b65 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -71,6 +71,9 @@ void QDirectFbInput::handleEvents() case DWET_KEYDOWN: case DWET_KEYUP: handleKeyEvents(event); + break; + default: + break; } } else @@ -87,9 +90,30 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) QPoint globalPos = globalPoint(event); Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button); Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); + QWidget *tlw = tlwMap.value(event.window.window_id); + if (event.window.type == DWET_BUTTONDOWN) { + static long prevTime = 0; + static QWidget *prevWindow; + static int prevX = -999; + static int prevY = -999; + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + timestamp /= 1000; + + if (tlw == prevWindow && timestamp - prevTime < QApplication::doubleClickInterval() + && qAbs(event.window.cx - prevX) < 5 && qAbs(event.window.cy - prevY) < 5) { + type = QEvent::MouseButtonDblClick; + prevTime = timestamp - QApplication::doubleClickInterval(); //no double click next time + } else { + prevTime = timestamp; + } + prevWindow = tlw; + prevX = event.window.cx; + prevY = event.window.cy; + } + + //DFB doesn't give keyboardmodifiers on mouseevents QMouseEvent mouseEvent(type,p,globalPos,button, buttons,(Qt::KeyboardModifiers)0); - QWidget *tlw = tlwMap.value(event.window.window_id); QApplicationPrivate::handleMouseEvent(tlw,mouseEvent); } @@ -97,8 +121,9 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event) { QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol); + Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers); - QKeyEvent keyEvent(type,key,0,QChar(event.window.key_symbol));//,"",true,0); + QKeyEvent keyEvent(type,key,modifiers,QChar(event.window.key_symbol)); QWidget *tlw = tlwMap.value(event.window.window_id); QApplicationPrivate::handleKeyEvent(tlw,&keyEvent); } -- cgit v0.12 From 0447b44246ff46eb273f95b6daf3e7f7de73ca6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 11 Dec 2009 09:57:48 +0100 Subject: Minimaldfb: wheelevent --- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 17 ++++++++++++++++- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h | 1 + 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index b6f0b65..744b5c0 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -65,9 +65,11 @@ void QDirectFbInput::handleEvents() case DWET_BUTTONDOWN: case DWET_BUTTONUP: case DWET_MOTION: - case DWET_WHEEL: handleMouseEvents(event); break; + case DWET_WHEEL: + handleWheelEvent(event); + break; case DWET_KEYDOWN: case DWET_KEYUP: handleKeyEvents(event); @@ -117,6 +119,19 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) QApplicationPrivate::handleMouseEvent(tlw,mouseEvent); } +void QDirectFbInput::handleWheelEvent(const DFBEvent &event) +{ + QPoint p(event.window.cx, event.window.cy); + QPoint globalPos = globalPoint(event); + Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button); + Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); + QWidget *tlw = tlwMap.value(event.window.window_id); + + QWheelEvent wheelEvent(p,globalPos,event.window.step*120,buttons,Qt::NoModifier,Qt::Vertical); + QApplicationPrivate::handleWheelEvent(tlw,wheelEvent); + +} + void QDirectFbInput::handleKeyEvents(const DFBEvent &event) { QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h index ddc2dbf..3a70329 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h @@ -36,6 +36,7 @@ public slots: private: void handleMouseEvents(const DFBEvent &event); + void handleWheelEvent(const DFBEvent &event); void handleKeyEvents(const DFBEvent &event); IDirectFB *dfbInterface; IDirectFBDisplayLayer *dfbDisplayLayer; -- cgit v0.12 From b2aefe0ff51a2cdb4990eb9bc19cfb044193ed21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 16 Dec 2009 14:19:45 +0100 Subject: Some cleanup and fix popup and tooltip event propagation --- .../minimaldfb/qblitter_directfb.cpp | 6 +++- .../minimaldfb/qdirectfbconvenience.cpp | 9 +----- .../minimaldfb/qdirectfbconvenience.h | 2 +- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 3 -- .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 21 ++++---------- .../minimaldfb/qgraphicssystem_minimaldfb.h | 1 - .../minimaldfb/qwindowsurface_minimaldfb.cpp | 32 ++++++++++++++++++++-- .../minimaldfb/qwindowsurface_minimaldfb.h | 4 ++- 8 files changed, 45 insertions(+), 33 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 3c58970..a995b0f 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -76,7 +76,11 @@ QImage *QDirectFbBlitter::doLock() int bpl; const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); if (result == DFB_OK) { - QImage::Format format = QDirectFbConvenience::imageFormatFromSurface(m_surface); + DFBSurfacePixelFormat dfbFormat; + DFBSurfaceCapabilities dfbCaps; + m_surface->GetPixelFormat(m_surface,&dfbFormat); + m_surface->GetCapabilities(m_surface,&dfbCaps); + QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); int w, h; m_surface->GetSize(m_surface,&w,&h); m_image = QImage(static_cast(mem),w,h,bpl,format); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index 63ae289..2bd2f3b 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -2,11 +2,8 @@ IDirectFB *QDirectFbConvenience::dfb = 0; -QImage::Format QDirectFbConvenience::imageFormatFromSurface(IDirectFBSurface *surface) +QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps) { - DFBSurfacePixelFormat format; - surface->GetPixelFormat(surface, &format); - switch (format) { case DSPF_LUT8: return QImage::Format_Indexed8; @@ -28,10 +25,6 @@ QImage::Format QDirectFbConvenience::imageFormatFromSurface(IDirectFBSurface *su case DSPF_RGB32: return QImage::Format_RGB32; case DSPF_ARGB: { - DFBSurfaceCapabilities caps; - const DFBResult result = surface->GetCapabilities(surface, &caps); - Q_ASSERT(result == DFB_OK); - Q_UNUSED(result); return (caps & DSCAPS_PREMULTIPLIED ? QImage::Format_ARGB32_Premultiplied : QImage::Format_ARGB32); } diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h index 2f5e10b..9c65b1f 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -17,7 +17,7 @@ public: class QDirectFbConvenience { public: - static QImage::Format imageFormatFromSurface(IDirectFBSurface *surface); + static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps); //This is set by the graphicssystem constructor static IDirectFB *dfbInterface() { return dfb; } diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 744b5c0..38bc41c 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -46,9 +46,6 @@ void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) IDirectFBWindow *window; dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); - window->DisableEvents(window,DWET_ALL); - window->EnableEvents(window,DFBWindowEventType(DWET_ALL)); - window->SetKeySelection(window,DWKS_ALL,NULL,0); window->AttachEventBuffer(window,eventBuffer); } diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index fe3b1d8..d9da01b 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -68,27 +68,16 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int // m_layer->SetConfiguration(m_layer, displayLayerConfig); m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); - IDirectFBSurface *topLevelSurface; - //This line gives a warning - m_layer->GetSurface(m_layer, &topLevelSurface); - m_format = QDirectFbConvenience::imageFormatFromSurface(topLevelSurface); - result = m_layer->GetScreen(m_layer,&m_screen); - if (result != DFB_OK) { - DirectFBError("QDirectFbGraphicsSystemScreen: Failed to get screen", result); - } - - int w(0),h(0); - - //Asking the screen for its size gives the desktop geometry on X11 - //Thats not something we want, so ask the topLevelSorface instead - topLevelSurface->GetSize(topLevelSurface,&w,&h); + DFBDisplayLayerConfig config; + m_layer->GetConfiguration(m_layer, &config); - m_geometry = QRect(0,0,w,h); + m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); + m_geometry = QRect(0,0,config.width,config.height); const int dpi = 72; const qreal inch = 25.4; m_depth = 32; - m_physicalSize = QSize(qRound(w * inch / dpi), qRound(h *inch / dpi)); + m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); } QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen() diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index 6068495..ff6a426 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -70,7 +70,6 @@ public: QDirectFbInput m_input; - IDirectFBScreen *m_screen; IDirectFBDisplayLayer *m_layer; }; diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 6c8b2b4..e0bd33e 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -42,6 +42,7 @@ #include "qwindowsurface_minimaldfb.h" #include "qgraphicssystem_minimaldfb.h" #include "qblitter_directfb.h" +#include "qdirectfbconvenience.h" #include #include @@ -50,7 +51,7 @@ QT_BEGIN_NAMESPACE QDirectFbWindowSurface::QDirectFbWindowSurface (QDirectFbGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), m_screen(screen), m_lock(false) + : QWindowSurface(window), m_screen(screen) { window->setWindowSurface(this); m_dfbWindow = m_screen->createWindow(window->rect(),window); @@ -96,7 +97,6 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const void QDirectFbWindowSurface::setGeometry(const QRect &rect) { - m_dfbSurface->Release(m_dfbSurface); QWindowSurface::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), rect.width(), rect.height()); @@ -124,4 +124,32 @@ void QDirectFbWindowSurface::endPaint(const QRegion ®ion) Q_UNUSED(region); } +void QDirectFbWindowSurface::setVisible(bool visible) +{ + if (visible) { + int x = this->geometry().x(); + int y = this->geometry().y(); + m_dfbWindow->MoveTo(m_dfbWindow,x,y); + } else { + IDirectFBDisplayLayer *displayLayer; + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); + + DFBDisplayLayerConfig config; + displayLayer->GetConfiguration(displayLayer,&config); + m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); + } +} + +Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags type) +{ + if (type == Qt::Popup || type == Qt::ToolTip) + { + DFBWindowOptions options; + m_dfbWindow->GetOptions(m_dfbWindow,&options); + options = DFBWindowOptions(options | DWOP_GHOST); + m_dfbWindow->SetOptions(m_dfbWindow,options); + } + return type; +} + QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index 98575ff..aeee049 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -66,13 +66,15 @@ public: void beginPaint(const QRegion ®ion); void endPaint(const QRegion ®ion); + void setVisible(bool visible); + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + private: void lockSurfaceToImage(); QDirectFbGraphicsSystemScreen *m_screen; QPixmap *m_pixmap; QBlittablePixmapData *pmdata; - bool m_lock; IDirectFBWindow *m_dfbWindow; IDirectFBSurface *m_dfbSurface; -- cgit v0.12 From 0e5b1ab9bce08a1c0927e13efdc6d24873d920ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 16 Dec 2009 17:22:15 +0100 Subject: typo in pro file --- src/gui/image/image.pri | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index b232848..10a073b 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -23,7 +23,7 @@ HEADERS += \ image/qpictureformatplugin.h \ image/qpixmap.h \ image/qpixmap_raster_p.h \ - miage/qpixmap_blitter_p.h \ + image/qpixmap_blitter_p.h \ image/qpixmapcache.h \ image/qpixmapcache_p.h \ image/qpixmapdata_p.h \ -- cgit v0.12 From 2c64beebfe265a140263ec156a0c41f93005ba73 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 18 Dec 2009 13:21:51 +0100 Subject: queued dispatch of keyboard and mouse events Mouse and Key events can't be handed off directly to QApplicationPrivate:: andleMouseEvent() and QApplicationPrivate::handleKeyEvent() from methods that are called as the slot for a QAbstractSocket::readyRead() signal. Doing so can result in event starvation in the case of things like QMenu::exec() that have their own event loop. --- src/plugins/graphicssystems/vnc/qvncserver.cpp | 46 +++++++++++++++++++++++--- src/plugins/graphicssystems/vnc/qvncserver.h | 6 ++++ 2 files changed, 48 insertions(+), 4 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index fcff255..c2fb676 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -389,6 +389,10 @@ void QVNCServer::init(uint port) qvnc_cursor = 0; #endif encoder = 0; + + eventTimer.setInterval(0); + eventTimer.setSingleShot(true); + connect(&eventTimer, SIGNAL(timeout()), this, SLOT(sendInputEvents())); } QVNCServer::~QVNCServer() @@ -819,6 +823,30 @@ static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::Mo return false; } +void QVNCServer::sendInputEvents() +{ + EventPair pair; + for (int i = 0 ; i < eventList.count(); i++) { + pair = eventList[i]; + switch(pair.first) { + case MouseEvent: { + QMouseEvent *me = static_cast(pair.second); + QApplicationPrivate::handleMouseEvent(0, *me); + delete me; + break; + } + case KeyboardEvent: { + QKeyEvent *ke = static_cast(pair.second); + QApplicationPrivate::handleKeyEvent(0, ke); + delete ke; + break; + } + } + } + eventList.clear(); + Q_ASSERT(eventList.count() == 0); +} + void QVNCServer::pointerEvent() { QRfbPointerEvent ev; @@ -834,8 +862,13 @@ void QVNCServer::pointerEvent() bool isPress; if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - QMouseEvent me(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); - QApplicationPrivate::handleMouseEvent(0, me); + QMouseEvent * me = new QMouseEvent(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); + EventPair pair; + pair.first = MouseEvent; + pair.second = me; + eventList.append(pair); + if (!eventTimer.isActive()) + eventTimer.start(); buttons = ev.buttons; handleMsg = false; } @@ -861,8 +894,13 @@ void QVNCServer::keyEvent() QString str; if (ev.unicode && ev.unicode != 0xffff) str = QString(ev.unicode); - QKeyEvent keyEvent(type, ev.keycode, keymod, str); - QApplicationPrivate::handleKeyEvent(0, &keyEvent); + QKeyEvent *keyEvent = new QKeyEvent(type, ev.keycode, keymod, str); + EventPair pair; + pair.first = KeyboardEvent; + pair.second = keyEvent; + eventList.append(pair); + if (!eventTimer.isActive()) + eventTimer.start(); } handleMsg = false; } diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h index 79b2098..be84c3c 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -482,6 +482,7 @@ private slots: void readClient(); void checkUpdate(); void discardClient(); + void sendInputEvents(); private: void init(uint port); @@ -519,6 +520,11 @@ private: QRfbEncoder *encoder; QVNCCursor *cursor; + + enum EventType { MouseEvent, KeyboardEvent }; + QTimer eventTimer; + typedef QPair EventPair; + QList eventList; }; -- cgit v0.12 From a2e77bb355382d484a39fcd5ab62a9f0bbd556da Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 18 Dec 2009 14:31:48 +0100 Subject: revert queueing of VNC mouse and keyboard events --- src/plugins/graphicssystems/vnc/qvncserver.cpp | 46 +++----------------------- src/plugins/graphicssystems/vnc/qvncserver.h | 6 ---- 2 files changed, 4 insertions(+), 48 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index c2fb676..fcff255 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -389,10 +389,6 @@ void QVNCServer::init(uint port) qvnc_cursor = 0; #endif encoder = 0; - - eventTimer.setInterval(0); - eventTimer.setSingleShot(true); - connect(&eventTimer, SIGNAL(timeout()), this, SLOT(sendInputEvents())); } QVNCServer::~QVNCServer() @@ -823,30 +819,6 @@ static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::Mo return false; } -void QVNCServer::sendInputEvents() -{ - EventPair pair; - for (int i = 0 ; i < eventList.count(); i++) { - pair = eventList[i]; - switch(pair.first) { - case MouseEvent: { - QMouseEvent *me = static_cast(pair.second); - QApplicationPrivate::handleMouseEvent(0, *me); - delete me; - break; - } - case KeyboardEvent: { - QKeyEvent *ke = static_cast(pair.second); - QApplicationPrivate::handleKeyEvent(0, ke); - delete ke; - break; - } - } - } - eventList.clear(); - Q_ASSERT(eventList.count() == 0); -} - void QVNCServer::pointerEvent() { QRfbPointerEvent ev; @@ -862,13 +834,8 @@ void QVNCServer::pointerEvent() bool isPress; if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - QMouseEvent * me = new QMouseEvent(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); - EventPair pair; - pair.first = MouseEvent; - pair.second = me; - eventList.append(pair); - if (!eventTimer.isActive()) - eventTimer.start(); + QMouseEvent me(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); + QApplicationPrivate::handleMouseEvent(0, me); buttons = ev.buttons; handleMsg = false; } @@ -894,13 +861,8 @@ void QVNCServer::keyEvent() QString str; if (ev.unicode && ev.unicode != 0xffff) str = QString(ev.unicode); - QKeyEvent *keyEvent = new QKeyEvent(type, ev.keycode, keymod, str); - EventPair pair; - pair.first = KeyboardEvent; - pair.second = keyEvent; - eventList.append(pair); - if (!eventTimer.isActive()) - eventTimer.start(); + QKeyEvent keyEvent(type, ev.keycode, keymod, str); + QApplicationPrivate::handleKeyEvent(0, &keyEvent); } handleMsg = false; } diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h index be84c3c..79b2098 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -482,7 +482,6 @@ private slots: void readClient(); void checkUpdate(); void discardClient(); - void sendInputEvents(); private: void init(uint port); @@ -520,11 +519,6 @@ private: QRfbEncoder *encoder; QVNCCursor *cursor; - - enum EventType { MouseEvent, KeyboardEvent }; - QTimer eventTimer; - typedef QPair EventPair; - QList eventList; }; -- cgit v0.12 From d7667e96f2faa83ddb2d9465320fa30ba1891292 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 18 Dec 2009 15:25:22 +0100 Subject: queue VNC keyboard and mouse events for processing outside socket readyRead() Because QAbstractSocket::readyRead() isn't delivered recursively, code that has its own event loop (such as QMenu::exec()) doesn't receive mouse or keyboard events. This fixes that by queueing the event, with processing started by a 0 timer. --- src/plugins/graphicssystems/vnc/qvncserver.cpp | 45 +++++++++++++++++++++++--- src/plugins/graphicssystems/vnc/qvncserver.h | 6 ++++ 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index fcff255..cbf6054 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -389,6 +389,10 @@ void QVNCServer::init(uint port) qvnc_cursor = 0; #endif encoder = 0; + + eventTimer.setInterval(0); + eventTimer.setSingleShot(true); + connect(&eventTimer, SIGNAL(timeout()), this, SLOT(sendInputEvents())); } QVNCServer::~QVNCServer() @@ -819,6 +823,29 @@ static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::Mo return false; } +void QVNCServer::sendInputEvents() +{ + EventPair pair; + QMouseEvent *me; + QKeyEvent *ke; + + while(!eventList.isEmpty()) { + pair = eventList.takeFirst(); + switch(pair.first) { + case MouseEvent: + me = static_cast(pair.second); + QApplicationPrivate::handleMouseEvent(0, *me); + delete me; + break; + case KeyboardEvent: + ke = static_cast(pair.second); + QApplicationPrivate::handleKeyEvent(0, ke); + delete ke; + break; + } + } +} + void QVNCServer::pointerEvent() { QRfbPointerEvent ev; @@ -834,8 +861,13 @@ void QVNCServer::pointerEvent() bool isPress; if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - QMouseEvent me(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); - QApplicationPrivate::handleMouseEvent(0, me); + QMouseEvent * me = new QMouseEvent(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); + EventPair pair; + pair.first = MouseEvent; + pair.second = me; + eventList.append(pair); + if (!eventTimer.isActive()) + eventTimer.start(); buttons = ev.buttons; handleMsg = false; } @@ -861,8 +893,13 @@ void QVNCServer::keyEvent() QString str; if (ev.unicode && ev.unicode != 0xffff) str = QString(ev.unicode); - QKeyEvent keyEvent(type, ev.keycode, keymod, str); - QApplicationPrivate::handleKeyEvent(0, &keyEvent); + QKeyEvent *keyEvent = new QKeyEvent(type, ev.keycode, keymod, str); + EventPair pair; + pair.first = KeyboardEvent; + pair.second = keyEvent; + eventList.append(pair); + if (!eventTimer.isActive()) + eventTimer.start(); } handleMsg = false; } diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h index 79b2098..be84c3c 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -482,6 +482,7 @@ private slots: void readClient(); void checkUpdate(); void discardClient(); + void sendInputEvents(); private: void init(uint port); @@ -519,6 +520,11 @@ private: QRfbEncoder *encoder; QVNCCursor *cursor; + + enum EventType { MouseEvent, KeyboardEvent }; + QTimer eventTimer; + typedef QPair EventPair; + QList eventList; }; -- cgit v0.12 From 4194cfdc5bcc7513ce3d6b8515fb4ab7c5bfdb16 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 30 Dec 2009 13:35:13 +0100 Subject: implement window flag get and set methods for VNC and linuxfb --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 11 +++++++++++ src/plugins/graphicssystems/fb_base/fb_base.h | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index f9ea97f..bd8d407 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -283,3 +283,14 @@ void QGraphicsSystemFbWindowSurface::setVisible(bool visible) visibleFlag = visible; mScreen->setDirty(geometry()); } + +Qt::WindowFlags QGraphicsSystemFbWindowSurface::setWindowFlags(Qt::WindowFlags type) +{ + flags = type; + return flags; +} + +Qt::WindowFlags QGraphicsSystemFbWindowSurface::windowFlags() const +{ + return flags; +} diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index 58f340d..f21cd41 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -61,11 +61,15 @@ public: virtual void raise(); virtual void lower(); + virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + virtual Qt::WindowFlags windowFlags() const; + protected: QGraphicsSystemFbScreen *mScreen; QRect oldGeometry; QImage mImage; bool visibleFlag; + Qt::WindowFlags flags; }; class QGraphicsSystemFbScreen : public QGraphicsSystemScreen -- cgit v0.12 From 0647b24b35e17d3948220640192415337eb87215 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 09:43:13 -0800 Subject: Use pkg-config/directfb-config to find cflags/libs --- .../graphicssystems/minimaldfb/minimaldfb.pro | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro index 8b20c45..6f50b4a 100644 --- a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro +++ b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro @@ -1,12 +1,21 @@ TARGET = qminimaldfb include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems -QMAKE_CXXFLAGS += -I/usr/local/include/directfb -LIBS += -L/usr/local/lib \ - -ldirectfb \ - -lfusion \ - -ldirect \ - -lpthread + +system(pkg-config --exists directfb) { + DIRECTFB_CFLAGS = $$system(pkg-config --cflags directfb) + DIRECTFB_LIBS = $$system(pkg-config --libs directfb) +} else { + directfb_config = $$SYSTEM(which directfb-config) + !isEmpty(directfb_config) { + DIRECTFB_CFLAGS = $$system(directfb-config --cflags) + DIRECTFB_LIBS = $$system(directfb-config --libs) + } +} + +QMAKE_CXXFLAGS += $$DIRECTFB_CFLAGS +LIBS += $$DIRECTFB_LIBS + SOURCES = main.cpp \ qgraphicssystem_minimaldfb.cpp \ qwindowsurface_minimaldfb.cpp \ -- cgit v0.12 From 1ce74505a12ebfe187cfdc26bf50195e5ce27b86 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 09:44:23 -0800 Subject: Fix includes Include , not directfb-config/pkg-config gives us the -I to installpath/include/directfb so this include breaks a properly configured DirectFB --- src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h | 2 +- src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h | 2 +- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h index c1fbc14..73eb7fb 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h @@ -3,7 +3,7 @@ #include -#include +#include class QDirectFbBlitter : public QBlittable { diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h index 9c65b1f..525aa22 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -5,7 +5,7 @@ #include #include -#include +#include class QDirectFbKeyMap: public QHash { diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h index 3a70329..e5bfba0 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h @@ -7,7 +7,7 @@ #include #include -#include +#include class InputSocketWaiter : public QThread { -- cgit v0.12 From 9983638b6fbb2dceeef3eac6c31d9b52384beff6 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 09:45:45 -0800 Subject: Compile with DirectFB < 1.1 --- .../graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp | 9 +++++++-- .../graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index d9da01b..e0479a0 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -50,7 +50,6 @@ #include #include #include -#include QT_BEGIN_NAMESPACE @@ -90,12 +89,18 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect, DFBWindowDescription description; memset(&description,0,sizeof(DFBWindowDescription)); - description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS|DWDESC_OPTIONS|DWDESC_CAPS); + description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS +#if DIRECTFB_MINOR_VERSION >= 1 + |DWDESC_OPTIONS +#endif + |DWDESC_CAPS); description.width = rect.width(); description.height = rect.height(); description.posx = rect.x(); description.posy = rect.y(); +#if DIRECTFB_MINOR_VERSION >= 1 description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); +#endif description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER); description.surface_caps = DSCAPS_PREMULTIPLIED; diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index ff6a426..2f29ab4 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -46,6 +46,7 @@ #include #include +#include QT_BEGIN_NAMESPACE -- cgit v0.12 From be4e111877aafec15cecbd7a356fb7e6dd076c61 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 09:59:51 -0800 Subject: Initialize variables to 0 --- .../graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index e0bd33e..53937b8 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -49,9 +49,9 @@ QT_BEGIN_NAMESPACE -QDirectFbWindowSurface::QDirectFbWindowSurface - (QDirectFbGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), m_screen(screen) +QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), m_screen(screen), m_pixmap(0), pmdata(0), + m_dfbWindow(0), m_dfbSurface(0) { window->setWindowSurface(this); m_dfbWindow = m_screen->createWindow(window->rect(),window); -- cgit v0.12 From 6911786e2275b41284b19c88dc9692e78a01a647 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 10:00:33 -0800 Subject: Flip OnSync to avoid tearing --- src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 53937b8..4d35376 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -91,7 +91,7 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const for (int i = 0 ; i < rects.size(); i++) { const QRect rect = rects.at(i); DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; - m_dfbSurface->Flip(m_dfbSurface,&dfbReg,DSFLIP_BLIT); + m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); } } -- cgit v0.12 From c8ed3a4499adae2c26e66a1e00bffa28cc649b5a Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 10:01:22 -0800 Subject: Release surface before getting a new one --- src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 4d35376..4a055ac 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -100,6 +100,10 @@ void QDirectFbWindowSurface::setGeometry(const QRect &rect) QWindowSurface::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), rect.width(), rect.height()); + if (m_dfbSurface) { + m_dfbSurface->Release(m_dfbSurface); + m_dfbSurface = 0; + } DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); if (result != DFB_OK) DirectFBError("QDirectFbWindowSurface::setGeometry() failed to retrieve new surface",result); -- cgit v0.12 From c4891eb3f74db6aebf10565d629b683204aa0166 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 10:03:18 -0800 Subject: Clear and Flip surface when resizing/creating --- .../graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 4a055ac..fc2a1fe 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -59,6 +59,10 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *sc if (result != DFB_OK) { DirectFBError("QDirectFbWindowSurface::QDirectFbWindowSurface: unable to get windows surface",result); } + if (m_dfbSurface) { + m_dfbSurface->Clear(m_dfbSurface, 0, 0, 0, 0); + m_dfbSurface->Flip(m_dfbSurface, 0, DSFLIP_ONSYNC); + } QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); int width,height; @@ -105,9 +109,15 @@ void QDirectFbWindowSurface::setGeometry(const QRect &rect) m_dfbSurface = 0; } DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); + if (result != DFB_OK) DirectFBError("QDirectFbWindowSurface::setGeometry() failed to retrieve new surface",result); + if (m_dfbSurface) { + m_dfbSurface->Clear(m_dfbSurface, 0, 0, 0, 0); + m_dfbSurface->Flip(m_dfbSurface, 0, DSFLIP_ONSYNC); + } + QDirectFbBlitter *blitter = new QDirectFbBlitter(rect, m_dfbSurface); pmdata->resize(rect.width(),rect.height()); pmdata->setBlittable(blitter); -- cgit v0.12 From 0191180e2fe92a2b4f709ac4eb8a1065726906c4 Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 10:03:47 -0800 Subject: Fix setWindowFlags and implement raise()/lower() --- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 24 ++++++++++++++++++---- .../minimaldfb/qwindowsurface_minimaldfb.h | 2 ++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index fc2a1fe..913e01d 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -154,16 +154,32 @@ void QDirectFbWindowSurface::setVisible(bool visible) } } -Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags type) +Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags flags) { - if (type == Qt::Popup || type == Qt::ToolTip) - { + switch (flags & Qt::WindowType_Mask) { + case Qt::Popup: + case Qt::ToolTip: { DFBWindowOptions options; m_dfbWindow->GetOptions(m_dfbWindow,&options); options = DFBWindowOptions(options | DWOP_GHOST); m_dfbWindow->SetOptions(m_dfbWindow,options); + break; } + default: + break; } - return type; + + m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); + return flags; +} + +void QDirectFbWindowSurface::raise() +{ + m_dfbWindow->RaiseToTop(m_dfbWindow); +} + +void QDirectFbWindowSurface::lower() +{ + m_dfbWindow->LowerToBottom(m_dfbWindow); } QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index aeee049..3c81287 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -69,6 +69,8 @@ public: void setVisible(bool visible); Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + void raise(); + void lower(); private: void lockSurfaceToImage(); -- cgit v0.12 From 021c5f11c3a72a04f05b3a7b52ffd14e0fc6488c Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Wed, 16 Dec 2009 10:29:19 -0800 Subject: Fix mouse events. The window coordinate is passed in x and y, not cx, cy. --- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 38bc41c..e470b9a 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -85,7 +85,7 @@ void QDirectFbInput::handleEvents() void QDirectFbInput::handleMouseEvents(const DFBEvent &event) { QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); - QPoint p(event.window.cx, event.window.cy); + QPoint p(event.window.x, event.window.y); QPoint globalPos = globalPoint(event); Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button); Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); -- cgit v0.12 From 781e8b00979f22de15a17510121be1ad20630c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 17 Dec 2009 11:50:43 +0100 Subject: Adding serialnumber to qpixmap_blitter --- src/gui/image/qpixmap_blitter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 18761a9..3b18ca9 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -21,6 +21,7 @@ QBlittable *QBlittablePixmapData::blittable() const if (!m_blittable) { QBlittablePixmapData *that = const_cast(this); that->m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,w,h)); + that->setSerialNumber(m_blittable->lock()->serialNumber()); } return m_blittable; -- cgit v0.12 From 5e4b2e2591bb1b5897b29c43fa35b0a60fd43d56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 5 Jan 2010 12:09:20 +0100 Subject: Make sure that premultiplied surfaces are used and clean up a bit. Also removed alot of unnecessary windowsurface code --- src/gui/image/qpixmap_blitter.cpp | 8 ++-- src/gui/painting/qpaintengine_blitter_p.h | 1 - .../minimaldfb/qblitter_directfb.cpp | 3 +- .../minimaldfb/qdirectfbconvenience.cpp | 6 +-- .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 7 +--- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 44 +++++++--------------- .../minimaldfb/qwindowsurface_minimaldfb.h | 2 +- 7 files changed, 24 insertions(+), 47 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 3b18ca9..3613211 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -29,15 +29,13 @@ QBlittable *QBlittablePixmapData::blittable() const void QBlittablePixmapData::setBlittable(QBlittable *blittable) { - if (m_blittable) - delete m_blittable; + delete m_blittable; + resize(blittable->rect().width(),blittable->rect().height()); m_blittable = blittable; } void QBlittablePixmapData::resize(int width, int height) { - delete m_blittable; - m_blittable = 0; delete m_engine; m_engine = 0; d = QApplicationPrivate::graphicsSystem()->screens().at(0)->depth(); @@ -78,7 +76,7 @@ int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const void QBlittablePixmapData::fill(const QColor &color) { if (blittable()->capabilities() & QBlittable::SolidRectCapability) - blittable()->fillRect(m_blittable->rect(),color); + blittable()->fillRect(QRectF(0,0,w,h),color); else blittable()->lock()->fill(color.rgb()); } diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index 6a5462e..7f67997 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -8,7 +8,6 @@ class QBlittablePrivate; class QBlitterPaintEnginePrivate; class QBlittablePixmapData; -// ### find name class Q_GUI_EXPORT QBlittable { Q_DECLARE_PRIVATE(QBlittable); diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index a995b0f..06622a1 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -20,7 +20,8 @@ QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) DFBSurfaceDescription surfaceDesc; surfaceDesc.width = rect.width(); surfaceDesc.height = rect.height(); - surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); + surfaceDesc.caps = DSCAPS_PREMULTIPLIED; + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS); IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index 2bd2f3b..4e2085d 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -25,9 +25,9 @@ QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfa case DSPF_RGB32: return QImage::Format_RGB32; case DSPF_ARGB: { - return (caps & DSCAPS_PREMULTIPLIED - ? QImage::Format_ARGB32_Premultiplied - : QImage::Format_ARGB32); } + if (caps & DSCAPS_PREMULTIPLIED) + return QImage::Format_ARGB32_Premultiplied; + else return QImage::Format_ARGB32; } default: break; } diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index e0479a0..9e5e8bb 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -61,13 +61,8 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int DirectFBError("QDirectFbGraphicsSystemScreen " "Unable to get primary display layer!", result); } - DFBDisplayLayerConfig *displayLayerConfig; -// m_layer->GetConfiguration(m_layer,displayLayerConfig); -// displayLayerConfig->surface_caps = DFBSurfaceCapabilities(displayLayerConfig->surface_caps | DSCAPS_PREMULTIPLIED); -// m_layer->SetConfiguration(m_layer, displayLayerConfig); m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); - DFBDisplayLayerConfig config; m_layer->GetConfiguration(m_layer, &config); @@ -101,7 +96,7 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect, #if DIRECTFB_MINOR_VERSION >= 1 description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); #endif - description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER); + description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); description.surface_caps = DSCAPS_PREMULTIPLIED; DFBResult result = m_layer->CreateWindow(m_layer,&description,&window); diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 913e01d..f7229e9 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -47,30 +47,25 @@ #include +#include + QT_BEGIN_NAMESPACE QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), m_screen(screen), m_pixmap(0), pmdata(0), + : QWindowSurface(window), m_screen(screen), m_pixmap(0), m_pmdata(0), m_dfbWindow(0), m_dfbSurface(0) { window->setWindowSurface(this); m_dfbWindow = m_screen->createWindow(window->rect(),window); - DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); - if (result != DFB_OK) { - DirectFBError("QDirectFbWindowSurface::QDirectFbWindowSurface: unable to get windows surface",result); - } - if (m_dfbSurface) { - m_dfbSurface->Clear(m_dfbSurface, 0, 0, 0, 0); - m_dfbSurface->Flip(m_dfbSurface, 0, DSFLIP_ONSYNC); - } + m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); + qDebug () << "initial surface: " << m_dfbSurface; + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); - pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); - int width,height; - m_dfbSurface->GetSize(m_dfbSurface, &width, &height); - pmdata->resize(width,height); - pmdata->setBlittable(blitter); + m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); + m_pmdata->setBlittable(blitter); + m_pixmap = new QPixmap(m_pmdata); + - m_pixmap = new QPixmap(pmdata); } QDirectFbWindowSurface::~QDirectFbWindowSurface() @@ -104,23 +99,12 @@ void QDirectFbWindowSurface::setGeometry(const QRect &rect) QWindowSurface::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), rect.width(), rect.height()); - if (m_dfbSurface) { - m_dfbSurface->Release(m_dfbSurface); - m_dfbSurface = 0; - } - DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); - if (result != DFB_OK) - DirectFBError("QDirectFbWindowSurface::setGeometry() failed to retrieve new surface",result); - - if (m_dfbSurface) { - m_dfbSurface->Clear(m_dfbSurface, 0, 0, 0, 0); - m_dfbSurface->Flip(m_dfbSurface, 0, DSFLIP_ONSYNC); - } + //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable + m_dfbSurface->AddRef(m_dfbSurface); + QBlittable *blittabler = new QDirectFbBlitter(rect,m_dfbSurface); + m_pmdata->setBlittable(blittabler); - QDirectFbBlitter *blitter = new QDirectFbBlitter(rect, m_dfbSurface); - pmdata->resize(rect.width(),rect.height()); - pmdata->setBlittable(blitter); } bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index 3c81287..f74fb29 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -76,7 +76,7 @@ private: QDirectFbGraphicsSystemScreen *m_screen; QPixmap *m_pixmap; - QBlittablePixmapData *pmdata; + QBlittablePixmapData *m_pmdata; IDirectFBWindow *m_dfbWindow; IDirectFBSurface *m_dfbSurface; -- cgit v0.12 From e6c02f892651e69fc7f3a1991e115a7c315cc1de Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 30 Dec 2009 15:21:30 +0100 Subject: working on cursor changes - not at all functional currently --- .../graphicssystems/minimaldfb/minimaldfb.pro | 6 +- .../graphicssystems/minimaldfb/qdirectfbcursor.cpp | 73 ++++++++++++++++++++++ .../graphicssystems/minimaldfb/qdirectfbcursor.h | 22 +++++++ .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 4 ++ .../minimaldfb/qgraphicssystem_minimaldfb.h | 5 ++ 5 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp create mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.h diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro index 6f50b4a..f5d2406 100644 --- a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro +++ b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro @@ -21,11 +21,13 @@ SOURCES = main.cpp \ qwindowsurface_minimaldfb.cpp \ qblitter_directfb.cpp \ qdirectfbconvenience.cpp \ - qdirectfbinput.cpp + qdirectfbinput.cpp \ + qdirectfbcursor.cpp HEADERS = qgraphicssystem_minimaldfb.h \ qwindowsurface_minimaldfb.h \ qblitter_directfb.h \ qdirectfbconvenience.h \ - qdirectfbinput.h + qdirectfbinput.h \ + qdirectfbcursor.h target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp new file mode 100644 index 0000000..9c6cc59 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp @@ -0,0 +1,73 @@ +#include "qdirectfbcursor.h" +#include "qblitter_directfb.h" +#include "qgraphicssystem_minimaldfb.h" +#include "qdirectfbconvenience.h" + +QDirectFBCursor::QDirectFBCursor(QGraphicsSystemScreen * screen) : + QGraphicsSystemCursor(screen), surface(0) +{ + QDirectFbGraphicsSystemScreen * s; + s = static_cast(screen); + m_layer = s->m_layer; + image = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); +} + +void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) +{ + qDebug() << "cursor change request:" << cursor << widget; + + if (cursor->shape() != Qt::BitmapCursor) { + image->set(cursor->shape()); + } else { + qDebug() << "non-shape cursor: not implemented yet"; + return; // not attempting to deal with application supplied cursors yet + } + + // create a window to show the cursor for debugging purposes + static IDirectFBWindow * window = 0; + static IDirectFBSurface * windowSurface; + qDebug() << "window is" << window; + if (!window) { + qDebug() << "creating cursor preview window"; + DFBWindowDescription description; + description.width = 32; + description.height = 32; + description.flags = DFBWindowDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); + qDebug() << m_layer->CreateWindow(m_layer, &description,&window); + qDebug() << window->RaiseToTop(window); + qDebug() << window->MoveTo(window, 500, 500); + qDebug() << window->GetSurface(window, &windowSurface); + } + + QImage *i = image->image(); + QRect imageRect = i->rect(); + QPixmap map = QPixmap::fromImage(*i); + + if (surface) + surface->Release(surface); + DFBSurfaceDescription surfaceDesc; + surfaceDesc.width = map.width(); + surfaceDesc.height = map.height(); + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); + + IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); + QDirectFbConvenience::dfbInterface()->CreateSurface(QDirectFbConvenience::dfbInterface(), &surfaceDesc, &surface); + + blitter = new QDirectFbBlitter(imageRect, windowSurface); // jeremy - should be surface + blitter->drawPixmap(imageRect, map, imageRect); + + + // + // blit to the window + // + //windowSurface->Blit(windowSurface, surface, NULL, 0, 0); + + DFBResult res = m_layer->SetCursorShape( m_layer, surface, cursor->hotSpot().x(), cursor->hotSpot().y()); + qDebug() << "setCursorShape result:"; + switch(res) { + case DFB_OK: qDebug() << "OK"; break; + case DFB_INVARG: qDebug() << "DFB_INVARG"; break; + case DFB_ACCESSDENIED: qDebug() << "DFB_ACCESSDENIED"; break; + default: qDebug() << "unknown error" << res; + } +} diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.h new file mode 100644 index 0000000..064a336 --- /dev/null +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.h @@ -0,0 +1,22 @@ +#ifndef QDIRECTFBCURSOR_H +#define QDIRECTFBCURSOR_H + +#include +#include +class QDirectFbGraphicsSystemScreen; +class QDirectFbBlitter; + +class QDirectFBCursor : public QGraphicsSystemCursor +{ +public: + QDirectFBCursor(QGraphicsSystemScreen *screem); + void changeCursor(QCursor * cursor, QWidget * widget); + +private: + IDirectFBDisplayLayer * m_layer; + IDirectFBSurface * surface; + QGraphicsSystemCursorImage * image; + QDirectFbBlitter *blitter; +}; + +#endif // QDIRECTFBCURSOR_H diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index 9e5e8bb..c767c7c 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -43,6 +43,7 @@ #include "qwindowsurface_minimaldfb.h" #include "qblitter_directfb.h" #include "qdirectfbconvenience.h" +#include "qdirectfbcursor.h" #include #include @@ -107,6 +108,9 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect, DFBWindowID id; window->GetID(window, &id); m_input.addWindow(id,tlw); + + cursor = new QDirectFBCursor(this); + return window; } diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index 2f29ab4..f6ce011 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -50,6 +50,8 @@ QT_BEGIN_NAMESPACE +class QDirectFBCursor; + class QDirectFbGraphicsSystemScreen : public QGraphicsSystemScreen { public: @@ -73,6 +75,9 @@ public: IDirectFBDisplayLayer *m_layer; +private: + QDirectFBCursor * cursor; + }; class QDirectFbGraphicsSystem : public QGraphicsSystem -- cgit v0.12 From a8898716b1bf8f2b01596677bf7f913709cea3cf Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 4 Jan 2010 18:18:16 +0100 Subject: cursors starting to work. something on screen, but the images are wrong additionally, there may be access control issues. blind setting/resetting appears to be the only option --- src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp index 9c6cc59..38c6c20 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp @@ -62,7 +62,13 @@ void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) // //windowSurface->Blit(windowSurface, surface, NULL, 0, 0); - DFBResult res = m_layer->SetCursorShape( m_layer, surface, cursor->hotSpot().x(), cursor->hotSpot().y()); + int xSpot = cursor->hotSpot().x(); + int ySpot = cursor->hotSpot().y(); + // The SetCursorShape() call fails if the cooperative level is DLSCL_SHARED + // Question is, how can we determine the level, to reset is properly after? + m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE); + DFBResult res = m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot); + m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED); // This may be wrong. could be DFSCL_FULLSCREEN or DLSCL_ADMINISTRATIVE qDebug() << "setCursorShape result:"; switch(res) { case DFB_OK: qDebug() << "OK"; break; -- cgit v0.12 From 7d005e75c5000a568454c9f13112506ad2b1b1dc Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 5 Jan 2010 11:55:35 +0100 Subject: cleanup --- .../graphicssystems/minimaldfb/qdirectfbcursor.cpp | 45 ++++------------------ 1 file changed, 8 insertions(+), 37 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp index 38c6c20..24f64e6 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp @@ -14,29 +14,12 @@ QDirectFBCursor::QDirectFBCursor(QGraphicsSystemScreen * screen) : void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) { - qDebug() << "cursor change request:" << cursor << widget; - + Q_UNUSED(widget); if (cursor->shape() != Qt::BitmapCursor) { image->set(cursor->shape()); } else { qDebug() << "non-shape cursor: not implemented yet"; - return; // not attempting to deal with application supplied cursors yet - } - - // create a window to show the cursor for debugging purposes - static IDirectFBWindow * window = 0; - static IDirectFBSurface * windowSurface; - qDebug() << "window is" << window; - if (!window) { - qDebug() << "creating cursor preview window"; - DFBWindowDescription description; - description.width = 32; - description.height = 32; - description.flags = DFBWindowDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); - qDebug() << m_layer->CreateWindow(m_layer, &description,&window); - qDebug() << window->RaiseToTop(window); - qDebug() << window->MoveTo(window, 500, 500); - qDebug() << window->GetSurface(window, &windowSurface); + return; } QImage *i = image->image(); @@ -53,27 +36,15 @@ void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); QDirectFbConvenience::dfbInterface()->CreateSurface(QDirectFbConvenience::dfbInterface(), &surfaceDesc, &surface); - blitter = new QDirectFbBlitter(imageRect, windowSurface); // jeremy - should be surface + blitter = new QDirectFbBlitter(imageRect, surface); blitter->drawPixmap(imageRect, map, imageRect); - - // - // blit to the window - // - //windowSurface->Blit(windowSurface, surface, NULL, 0, 0); - int xSpot = cursor->hotSpot().x(); int ySpot = cursor->hotSpot().y(); - // The SetCursorShape() call fails if the cooperative level is DLSCL_SHARED - // Question is, how can we determine the level, to reset is properly after? - m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE); - DFBResult res = m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot); - m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED); // This may be wrong. could be DFSCL_FULLSCREEN or DLSCL_ADMINISTRATIVE - qDebug() << "setCursorShape result:"; - switch(res) { - case DFB_OK: qDebug() << "OK"; break; - case DFB_INVARG: qDebug() << "DFB_INVARG"; break; - case DFB_ACCESSDENIED: qDebug() << "DFB_ACCESSDENIED"; break; - default: qDebug() << "unknown error" << res; + + if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) { + return; } + m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot); + m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED); } -- cgit v0.12 From a50574975b408b1de58c9822a5b6c48a094e8013 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 5 Jan 2010 14:51:53 +0100 Subject: get cursor hotspot from the graphic --- src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp index 24f64e6..50c0622 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp @@ -39,8 +39,8 @@ void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) blitter = new QDirectFbBlitter(imageRect, surface); blitter->drawPixmap(imageRect, map, imageRect); - int xSpot = cursor->hotSpot().x(); - int ySpot = cursor->hotSpot().y(); + int xSpot = image->hotspot().x(); + int ySpot = image->hotspot().y(); if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) { return; -- cgit v0.12 From b5a1c9ba094c07c22be2d0e9896dbbafdfca5930 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 6 Jan 2010 12:31:57 +0100 Subject: removed an unnecessary call to QDirectFbConvenience::dfbInterface() --- src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp index 50c0622..074fc5a 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp @@ -33,7 +33,6 @@ void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) surfaceDesc.height = map.height(); surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); - IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); QDirectFbConvenience::dfbInterface()->CreateSurface(QDirectFbConvenience::dfbInterface(), &surfaceDesc, &surface); blitter = new QDirectFbBlitter(imageRect, surface); -- cgit v0.12 From 6d7f46dd995c45c3ac9b65e35a8cf2e4d8f9225b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 5 Jan 2010 16:20:51 +0100 Subject: Cleaned up a bit in the cursor code --- .../graphicssystems/minimaldfb/qblitter_directfb.h | 4 ++++ .../minimaldfb/qdirectfbconvenience.cpp | 14 ++++++++++++++ .../graphicssystems/minimaldfb/qdirectfbconvenience.h | 4 ++++ .../graphicssystems/minimaldfb/qdirectfbcursor.cpp | 18 ++++-------------- 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h index 73eb7fb..8d24678 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h @@ -1,6 +1,8 @@ #ifndef QDIRECTFBBLITTER_H #define QDIRECTFBBLITTER_H +#include "qdirectfbconvenience.h" + #include #include @@ -20,6 +22,8 @@ protected: IDirectFBSurface *m_surface; QImage m_image; + + friend class QDirectFbConvenience; }; #endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index 4e2085d..03fa18f 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -1,4 +1,7 @@ #include "qdirectfbconvenience.h" +#include "qblitter_directfb.h" + +#include IDirectFB *QDirectFbConvenience::dfb = 0; @@ -35,6 +38,17 @@ QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfa } +IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPixmapData(QPixmapData *pixmapData) +{ + QBlittablePixmapData *blittablePmData = static_cast(pixmapData); + if (blittablePmData) { + QBlittable *blittable = blittablePmData->blittable(); + QDirectFbBlitter *dfbBlitter = static_cast(blittable); + return dfbBlitter->m_surface; + } + return 0; +} + Qt::MouseButton QDirectFbConvenience::mouseButton(DFBInputDeviceButtonIdentifier identifier) { switch (identifier){ diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h index 525aa22..81524dd 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -4,6 +4,7 @@ #include #include #include +#include #include @@ -21,6 +22,9 @@ public: //This is set by the graphicssystem constructor static IDirectFB *dfbInterface() { return dfb; } + + static IDirectFBSurface *dfbSurfaceForPixmapData(QPixmapData *); + static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier); static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask); static Qt::KeyboardModifiers keyboardModifiers(DFBInputDeviceModifierMask mask); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp index 074fc5a..e737575 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp @@ -3,12 +3,12 @@ #include "qgraphicssystem_minimaldfb.h" #include "qdirectfbconvenience.h" +#include + QDirectFBCursor::QDirectFBCursor(QGraphicsSystemScreen * screen) : QGraphicsSystemCursor(screen), surface(0) { - QDirectFbGraphicsSystemScreen * s; - s = static_cast(screen); - m_layer = s->m_layer; + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer); image = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); } @@ -26,17 +26,7 @@ void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) QRect imageRect = i->rect(); QPixmap map = QPixmap::fromImage(*i); - if (surface) - surface->Release(surface); - DFBSurfaceDescription surfaceDesc; - surfaceDesc.width = map.width(); - surfaceDesc.height = map.height(); - surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT); - - QDirectFbConvenience::dfbInterface()->CreateSurface(QDirectFbConvenience::dfbInterface(), &surfaceDesc, &surface); - - blitter = new QDirectFbBlitter(imageRect, surface); - blitter->drawPixmap(imageRect, map, imageRect); + IDirectFBSurface *surface = QDirectFbConvenience::dfbSurfaceForPixmapData(map.pixmapData()); int xSpot = image->hotspot().x(); int ySpot = image->hotspot().y(); -- cgit v0.12 From 743c1e4800ff6f6a7d0b8c5bd5ac6be9d5027255 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 6 Jan 2010 10:55:52 +0100 Subject: Cleanup properly in minimaldfb input --- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 43 +++++++++++++++------- .../graphicssystems/minimaldfb/qdirectfbinput.h | 9 ++++- 2 files changed, 38 insertions(+), 14 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index e470b9a..de50229 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -10,34 +10,46 @@ #include InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) - : QThread(parent), eventBuffer(eventBuffer) - { - this->start(); - } + : QThread(parent), m_eventBuffer(eventBuffer),m_shouldStop(false) +{ + connect(qApp,SIGNAL(aboutToQuit()),SLOT(stop())); + this->start(); +} + +InputSocketWaiter::~InputSocketWaiter() +{ + m_shouldStop = true; + m_eventBuffer->WakeUp(m_eventBuffer); + m_mutex.lock(); +} void InputSocketWaiter::run() { + m_mutex.lock(); while (1) { - eventBuffer->WaitForEvent(eventBuffer); + m_eventBuffer->WaitForEvent(m_eventBuffer); + if (m_shouldStop) + break; emit newEvent(); } + m_mutex.unlock(); } QDirectFbInput::QDirectFbInput(QObject *parent) : QObject(parent) { - DFBResult ok = DirectFBCreate(&dfbInterface); - if (ok != DFB_OK) - DirectFBError("Failed to initialise QDirectFBInput", ok); + dfbInterface = QDirectFbConvenience::dfbInterface(); - ok = dfbInterface->CreateEventBuffer(dfbInterface,&eventBuffer); + DFBResult ok = dfbInterface->CreateEventBuffer(dfbInterface,&eventBuffer); if (ok != DFB_OK) DirectFBError("Failed to initialise eventbuffer", ok); dfbInterface->GetDisplayLayer(dfbInterface,DLID_PRIMARY, &dfbDisplayLayer); - InputSocketWaiter *inputHandler = new InputSocketWaiter(eventBuffer,this); - connect(inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); + m_inputHandler = new InputSocketWaiter(eventBuffer,this); + connect(m_inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); + + connect(qApp,SIGNAL(aboutToQuit()),SLOT(applicationEnd())); } void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) @@ -75,8 +87,7 @@ void QDirectFbInput::handleEvents() break; } - } else - qDebug() << "WHAT!"; + } hasEvent = eventBuffer->HasEvent(eventBuffer); } @@ -116,6 +127,12 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) QApplicationPrivate::handleMouseEvent(tlw,mouseEvent); } +void QDirectFbInput::applicationEnd() +{ + delete m_inputHandler; + m_inputHandler = 0; +} + void QDirectFbInput::handleWheelEvent(const DFBEvent &event) { QPoint p(event.window.cx, event.window.cy); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h index e5bfba0..84439d9 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h @@ -2,6 +2,7 @@ #define QDIRECTFBINPUT_H #include +#include #include #include #include @@ -14,12 +15,15 @@ class InputSocketWaiter : public QThread Q_OBJECT public: InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent); + virtual ~InputSocketWaiter(); protected: void run(); signals: void newEvent(); private: - IDirectFBEventBuffer *eventBuffer; + IDirectFBEventBuffer *m_eventBuffer; + bool m_shouldStop; + QMutex m_mutex; }; class QDirectFbInput : public QObject @@ -32,6 +36,7 @@ public: public slots: void handleEvents(); + void applicationEnd(); private: @@ -46,6 +51,8 @@ private: inline QPoint globalPoint(const DFBEvent &event) const; + InputSocketWaiter *m_inputHandler; + }; #endif // QDIRECTFBINPUT_H -- cgit v0.12 From c489e061817d0880ac3f1492d8decf749a502e6f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 6 Jan 2010 14:41:53 +0100 Subject: fixed minimaldfb input when mouse events that did not get delivered and refactorede a bit stuff out. DirectFB handles the singelton pattern for the dfbInterface itself --- .../minimaldfb/qdirectfbconvenience.cpp | 22 +++++++++++++++++++++- .../minimaldfb/qdirectfbconvenience.h | 5 ++--- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 7 +++++++ .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 16 +++------------- .../minimaldfb/qgraphicssystem_minimaldfb.h | 2 +- 5 files changed, 34 insertions(+), 18 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index 03fa18f..25d6258 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -3,7 +3,27 @@ #include -IDirectFB *QDirectFbConvenience::dfb = 0; +IDirectFB *QDirectFbConvenience::dfbInterface() +{ + IDirectFB *dfb; + DFBResult result = DirectFBCreate(&dfb); + if (result != DFB_OK) { + DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result); + return 0; + } + return dfb; +} + +IDirectFBDisplayLayer *QDirectFbConvenience::dfbDisplayLayer(int display) +{ + IDirectFBDisplayLayer *layer; + DFBResult result = QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),display,&layer); + if (result != DFB_OK) { + DirectFBError("QDirectFbConvenience: " + "Unable to get primary display layer!", result); + } + return layer; +} QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps) { diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h index 81524dd..c086828 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -21,7 +21,8 @@ public: static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps); //This is set by the graphicssystem constructor - static IDirectFB *dfbInterface() { return dfb; } + static IDirectFB *dfbInterface(); + static IDirectFBDisplayLayer *dfbDisplayLayer(int display = DLID_PRIMARY); static IDirectFBSurface *dfbSurfaceForPixmapData(QPixmapData *); @@ -33,8 +34,6 @@ public: static QDirectFbKeyMap *keyMap(); private: - static void setDfbInterface(IDirectFB *dfbInterface) {dfb = dfbInterface;} - static IDirectFB *dfb; static QDirectFbKeyMap *dfbKeymap; friend class QDirectFbGraphicsSystem; }; diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index de50229..00c2310 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -102,6 +102,9 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); QWidget *tlw = tlwMap.value(event.window.window_id); + IDirectFBWindow *window; + QDirectFbConvenience::dfbDisplayLayer()->GetWindow(layer,event.window.window_id,&window); + if (event.window.type == DWET_BUTTONDOWN) { static long prevTime = 0; static QWidget *prevWindow; @@ -120,6 +123,10 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) prevWindow = tlw; prevX = event.window.cx; prevY = event.window.cy; + + window->GrabPointer(window); + } else if (event.window.type == DWET_BUTTONUP) { + window->UngrabPointer(window); } //DFB doesn't give keyboardmodifiers on mouseevents diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index c767c7c..2d471e4 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -54,14 +54,10 @@ QT_BEGIN_NAMESPACE -QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int display) +QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) :QGraphicsSystemScreen() , m_input(this) { - DFBResult result = dfb->GetDisplayLayer(dfb, DLID_PRIMARY, &m_layer); - if (result != DFB_OK) { - DirectFBError("QDirectFbGraphicsSystemScreen " - "Unable to get primary display layer!", result); - } + IDirectFBDisplayLayer *m_layer = QDirectFbConvenience::dfbDisplayLayer(display); m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); DFBDisplayLayerConfig config; @@ -134,14 +130,8 @@ QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() } delete[] argv; - result = DirectFBCreate(&dfb); - if (result != DFB_OK) { - DirectFBError("QDirectFBScreen: error creating DirectFB interface", - result); - } - QDirectFbConvenience::setDfbInterface(dfb); - mPrimaryScreen = new QDirectFbGraphicsSystemScreen(dfb,0); + mPrimaryScreen = new QDirectFbGraphicsSystemScreen(0); mScreens.append(mPrimaryScreen); } diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index f6ce011..892bc58 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -55,7 +55,7 @@ class QDirectFBCursor; class QDirectFbGraphicsSystemScreen : public QGraphicsSystemScreen { public: - QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int display); + QDirectFbGraphicsSystemScreen(int display); ~QDirectFbGraphicsSystemScreen(); QRect geometry() const { return m_geometry; } -- cgit v0.12 From 86bc22465a43496950bc0bf8901673ccd6c65fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 6 Jan 2010 15:16:13 +0100 Subject: Added DirectFb scrolling to minimaldfb --- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 3 ++- .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 2 +- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 22 +++++++++++++++++++++- 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 00c2310..b8f6dd9 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -102,8 +102,9 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); QWidget *tlw = tlwMap.value(event.window.window_id); + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); IDirectFBWindow *window; - QDirectFbConvenience::dfbDisplayLayer()->GetWindow(layer,event.window.window_id,&window); + layer->GetWindow(layer,event.window.window_id,&window); if (event.window.type == DWET_BUTTONDOWN) { static long prevTime = 0; diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index 2d471e4..8bba616 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) :QGraphicsSystemScreen() , m_input(this) { - IDirectFBDisplayLayer *m_layer = QDirectFbConvenience::dfbDisplayLayer(display); + m_layer = QDirectFbConvenience::dfbDisplayLayer(display); m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); DFBDisplayLayerConfig config; diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index f7229e9..93ea44f 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -107,9 +107,29 @@ void QDirectFbWindowSurface::setGeometry(const QRect &rect) } +static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) +{ + const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() }; + surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy); + const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy }; + surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT)); +} + bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) { - return QWindowSurface::scroll(area, dx, dy); + if (!m_dfbSurface || area.isEmpty()) + return false; + m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); + if (area.rectCount() == 1) { + scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy); + } else { + const QVector rects = area.rects(); + const int n = rects.size(); + for (int i=0; i Date: Wed, 6 Jan 2010 16:05:42 +0100 Subject: Fix wheel event reporting with a null top level widget reported --- src/gui/kernel/qapplication_lite.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index a42bfd7..57f6d72 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -621,7 +621,7 @@ void QApplicationPrivate::handleWheelEvent(QWidget *tlw, QWheelEvent &ev) // QPoint localPoint = ev.pos(); QPoint globalPoint = ev.globalPos(); // bool trustLocalPoint = !!tlw; //is there something the local point can be local to? - QWidget *mouseWidget = tlw; + QWidget *mouseWidget; qt_last_x = globalPoint.x(); qt_last_y = globalPoint.y(); @@ -636,6 +636,8 @@ void QApplicationPrivate::handleWheelEvent(QWidget *tlw, QWheelEvent &ev) if (!mouseWindow) return; + mouseWidget = mouseWindow; + if (app_do_modal && !qt_try_modal(mouseWindow, &ev) ) { qDebug() << "modal blocked wheel event" << mouseWindow; return; -- cgit v0.12 From 769ec23cc32c43ce9d519b39ac8dad2a04b78403 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 6 Jan 2010 16:10:44 +0100 Subject: VNC mouse wheen support --- src/plugins/graphicssystems/vnc/qvncserver.cpp | 50 ++++++++++++++++++++------ src/plugins/graphicssystems/vnc/qvncserver.h | 8 ++++- 2 files changed, 46 insertions(+), 12 deletions(-) diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index cbf6054..9576d10 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -316,13 +316,23 @@ bool QRfbPointerEvent::read(QTcpSocket *s) char buttonMask; s->read(&buttonMask, 1); + buttons = Qt::NoButton; + wheelDirection = WheelNone; if (buttonMask & 1) buttons |= Qt::LeftButton; if (buttonMask & 2) buttons |= Qt::MidButton; if (buttonMask & 4) buttons |= Qt::RightButton; + if (buttonMask & 8) + wheelDirection = WheelUp; + if (buttonMask & 16) + wheelDirection = WheelDown; + if (buttonMask & 32) + wheelDirection = WheelLeft; + if (buttonMask & 64) + wheelDirection = WheelRight; quint16 tmp; s->read((char *)&tmp, 2); @@ -828,6 +838,7 @@ void QVNCServer::sendInputEvents() EventPair pair; QMouseEvent *me; QKeyEvent *ke; + QWheelEvent *we; while(!eventList.isEmpty()) { pair = eventList.takeFirst(); @@ -842,6 +853,11 @@ void QVNCServer::sendInputEvents() QApplicationPrivate::handleKeyEvent(0, ke); delete ke; break; + case WheelEvent: + we = static_cast(pair.second); + QApplicationPrivate::handleWheelEvent(0, *we); + delete we; + break; } } } @@ -854,21 +870,33 @@ void QVNCServer::pointerEvent() // QWSServer::sendMouseEvent(offset + QPoint(ev.x, ev.y), ev.buttons); - //qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons; - - QEvent::Type type = QEvent::MouseMove; - Qt::MouseButton button = Qt::NoButton; - bool isPress; - if (buttonChange(buttons, ev.buttons, &button, &isPress)) - type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - QMouseEvent * me = new QMouseEvent(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); EventPair pair; - pair.first = MouseEvent; - pair.second = me; + //qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons; + if (ev.wheelDirection == ev.WheelNone) { + QEvent::Type type = QEvent::MouseMove; + Qt::MouseButton button = Qt::NoButton; + bool isPress; + if (buttonChange(buttons, ev.buttons, &button, &isPress)) + type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; + QMouseEvent * me = new QMouseEvent(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); + pair.first = MouseEvent; + pair.second = me; + buttons = ev.buttons; + } else { + // No buttons or motion reported at the same time as wheel events + Qt::Orientation orientation; + if (ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelRight) + orientation = Qt::Horizontal; + else + orientation = Qt::Vertical; + int delta = 120 * ((ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelUp) ? 1 : -1); + QWheelEvent *we = new QWheelEvent(QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, buttons, keymod, orientation); + pair.first = WheelEvent; + pair.second = we; + } eventList.append(pair); if (!eventTimer.isActive()) eventTimer.start(); - buttons = ev.buttons; handleMsg = false; } } diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h index be84c3c..7532cb4 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -228,6 +228,12 @@ public: bool read(QTcpSocket *s); Qt::MouseButtons buttons; + enum { WheelNone, + WheelUp, + WheelDown, + WheelLeft, + WheelRight + } wheelDirection; quint16 x; quint16 y; }; @@ -521,7 +527,7 @@ private: QRfbEncoder *encoder; QVNCCursor *cursor; - enum EventType { MouseEvent, KeyboardEvent }; + enum EventType { MouseEvent, KeyboardEvent, WheelEvent }; QTimer eventTimer; typedef QPair EventPair; QList eventList; -- cgit v0.12 From e0ec5613e73d16ad91d5c267393b08f9193b4f3c Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 6 Jan 2010 18:25:34 +0100 Subject: LinuxInputMouse wheel support --- src/plugins/generic/linuxinput/qlinuxinput.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 48084d0..308af6b 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -134,6 +134,16 @@ void QLinuxInputMouseHandler::readMouseData() m_x += data->value; } else if (data->code == REL_Y) { m_y += data->value; + } else if (data->code == ABS_WHEEL) { // vertical scroll + // data->value: 1 == up, -1 == down + int delta = 120 * data->value; + QWheelEvent we(QPoint(m_x, m_y), QPoint(m_x, m_y), delta, m_buttons, Qt::NoModifier, Qt::Vertical); + QApplicationPrivate::handleWheelEvent(0, we); + } else if (data->code == ABS_THROTTLE) { // horizontal scroll + // data->value: 1 == right, -1 == left + int delta = 120 * -data->value; + QWheelEvent we(QPoint(m_x, m_y), QPoint(m_x, m_y), delta, m_buttons, Qt::NoModifier, Qt::Horizontal); + QApplicationPrivate::handleWheelEvent(0, we); } else { unknown = true; } -- cgit v0.12 From 18c551144eeeff6a2e124fc427b2a6c973516c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 7 Jan 2010 10:07:46 +0100 Subject: Added enter/leave event in minimaldfb --- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 18 ++++++++++++++++++ .../graphicssystems/minimaldfb/qdirectfbinput.h | 1 + .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 6 ++---- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 8 +++++++- 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index b8f6dd9..e704aa7 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -83,6 +83,9 @@ void QDirectFbInput::handleEvents() case DWET_KEYUP: handleKeyEvents(event); break; + case DWET_ENTER: + case DWET_LEAVE: + handleEnterLeaveEvents(event); default: break; } @@ -165,6 +168,21 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event) QApplicationPrivate::handleKeyEvent(tlw,&keyEvent); } +void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) +{ + QWidget *tlw = tlwMap.value(event.window.window_id); + switch (event.window.type) { + case DWET_ENTER: + QApplicationPrivate::handleEnterEvent(tlw); + break; + case DWET_LEAVE: + QApplicationPrivate::handleLeaveEvent(tlw); + break; + default: + break; + } +} + inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const { IDirectFBWindow *window; diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h index 84439d9..8f90019 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h @@ -43,6 +43,7 @@ private: void handleMouseEvents(const DFBEvent &event); void handleWheelEvent(const DFBEvent &event); void handleKeyEvents(const DFBEvent &event); + void handleEnterLeaveEvents(const DFBEvent &event); IDirectFB *dfbInterface; IDirectFBDisplayLayer *dfbDisplayLayer; IDirectFBEventBuffer *eventBuffer; diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index 8bba616..aef7a3d 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -64,6 +64,7 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) m_layer->GetConfiguration(m_layer, &config); m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); + qDebug() << "GraphcisSystemScreen has format: " << m_format; m_geometry = QRect(0,0,config.width,config.height); const int dpi = 72; const qreal inch = 25.4; @@ -113,9 +114,6 @@ IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect, QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() { - IDirectFB *dfb; - DFBResult result = DFB_OK; - const QStringList args = QCoreApplication::arguments(); int argc = args.size(); char **argv = new char*[argc]; @@ -123,7 +121,7 @@ QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() for (int i = 0; i < argc; ++i) argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); - result = DirectFBInit(&argc, &argv); + DFBResult result = DirectFBInit(&argc, &argv); if (result != DFB_OK) { DirectFBError("QDirectFBScreen: error initializing DirectFB", result); diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 93ea44f..c8e4f9d 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -58,7 +58,13 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *sc window->setWindowSurface(this); m_dfbWindow = m_screen->createWindow(window->rect(),window); m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); - qDebug () << "initial surface: " << m_dfbSurface; + + DFBSurfaceCapabilities caps; + m_dfbSurface->GetCapabilities(m_dfbSurface, &caps); + DFBSurfacePixelFormat format; + m_dfbSurface->GetPixelFormat(m_dfbSurface, &format); + qDebug() << "WindowSurface format " << QDirectFbConvenience::imageFormatFromSurfaceFormat(format,caps); + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); -- cgit v0.12 From 9096336c767670b4f68d507a5116da433ecb40b0 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 8 Jan 2010 14:46:49 +0100 Subject: Alpha channel fixes for QBlittablePixmapData MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- src/gui/image/qpixmap_blitter.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 3613211..6ab97c1 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -75,10 +75,10 @@ int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const void QBlittablePixmapData::fill(const QColor &color) { - if (blittable()->capabilities() & QBlittable::SolidRectCapability) - blittable()->fillRect(QRectF(0,0,w,h),color); + if (color.alpha() == 255 && blittable()->capabilities() & QBlittable::SolidRectCapability) + blittable()->fillRect(QRectF(0,0,w,h),color); else - blittable()->lock()->fill(color.rgb()); + blittable()->lock()->fill(color.rgba()); } QImage *QBlittablePixmapData::buffer() @@ -102,6 +102,7 @@ void QBlittablePixmapData::fromImage(const QImage &image, resize(image.width(),image.height()); QImage *thisImg = blittable()->lock(); QPainter p(thisImg); + p.setCompositionMode(QPainter::CompositionMode_Source); p.drawImage(0,0,image,flags); } -- cgit v0.12 From a98fd80bf018e21fb1d0216bccf39de57da4950c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 8 Jan 2010 15:05:49 +0100 Subject: Make minimaldfb input more efficient Reviewed-by: Andy Nichols --- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp | 15 +++++++++++---- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h | 5 ++++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index e704aa7..1926367 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -12,7 +12,6 @@ InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) : QThread(parent), m_eventBuffer(eventBuffer),m_shouldStop(false) { - connect(qApp,SIGNAL(aboutToQuit()),SLOT(stop())); this->start(); } @@ -20,19 +19,26 @@ InputSocketWaiter::~InputSocketWaiter() { m_shouldStop = true; m_eventBuffer->WakeUp(m_eventBuffer); - m_mutex.lock(); + m_cleanupMutex.lock(); +} + +void InputSocketWaiter::continueWaitingForEvents() +{ + m_finishedProcessingEvents.wakeAll(); } void InputSocketWaiter::run() { - m_mutex.lock(); + m_cleanupMutex.lock(); while (1) { m_eventBuffer->WaitForEvent(m_eventBuffer); if (m_shouldStop) break; emit newEvent(); + QMutex waitForProcessingMutex; + m_finishedProcessingEvents.wait(&waitForProcessingMutex); } - m_mutex.unlock(); + m_cleanupMutex.unlock(); } QDirectFbInput::QDirectFbInput(QObject *parent) @@ -94,6 +100,7 @@ void QDirectFbInput::handleEvents() hasEvent = eventBuffer->HasEvent(eventBuffer); } + m_inputHandler->continueWaitingForEvents(); } void QDirectFbInput::handleMouseEvents(const DFBEvent &event) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h index 8f90019..74ccee2 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -16,6 +17,7 @@ class InputSocketWaiter : public QThread public: InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent); virtual ~InputSocketWaiter(); + void continueWaitingForEvents(); protected: void run(); signals: @@ -23,7 +25,8 @@ signals: private: IDirectFBEventBuffer *m_eventBuffer; bool m_shouldStop; - QMutex m_mutex; + QMutex m_cleanupMutex; + QWaitCondition m_finishedProcessingEvents; }; class QDirectFbInput : public QObject -- cgit v0.12 From 5dfcb52fb853ae7f28acc83e2be99f999e1bf31e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 8 Jan 2010 15:13:54 +0100 Subject: Make minimaldfb input more efficient copy paste error :( --- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 1926367..17fdd10 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -36,6 +36,7 @@ void InputSocketWaiter::run() break; emit newEvent(); QMutex waitForProcessingMutex; + waitForProcessingMutex.lock(); m_finishedProcessingEvents.wait(&waitForProcessingMutex); } m_cleanupMutex.unlock(); -- cgit v0.12 From 721653914597ccdec7bbf94b58e6b6879dd53755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 11 Jan 2010 16:14:33 +0100 Subject: Added colordepth convenience function in minimaldfb and added pixelformat for default dfbblitters --- src/gui/image/qpixmap_blitter.cpp | 4 +++- src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp | 10 +++++++++- .../graphicssystems/minimaldfb/qdirectfbconvenience.cpp | 5 +++++ src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h | 2 ++ .../graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp | 2 ++ .../graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 2 ++ 6 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 6ab97c1..b2bb674 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -29,13 +29,15 @@ QBlittable *QBlittablePixmapData::blittable() const void QBlittablePixmapData::setBlittable(QBlittable *blittable) { - delete m_blittable; resize(blittable->rect().width(),blittable->rect().height()); m_blittable = blittable; } void QBlittablePixmapData::resize(int width, int height) { + + delete m_blittable; + m_blittable = 0; delete m_engine; m_engine = 0; d = QApplicationPrivate::graphicsSystem()->screens().at(0)->depth(); diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 06622a1..23e3be6 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -18,13 +18,16 @@ QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) m_surface = surface; } else { DFBSurfaceDescription surfaceDesc; + memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); surfaceDesc.width = rect.width(); surfaceDesc.height = rect.height(); surfaceDesc.caps = DSCAPS_PREMULTIPLIED; - surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS); + surfaceDesc.pixelformat = DSPF_ARGB; + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT); IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); + m_surface->Clear(m_surface,0,0,0,0); } } @@ -36,6 +39,10 @@ QDirectFbBlitter::~QDirectFbBlitter() void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) { m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); +// When the blitter api supports non opaque blits, also remember to change +// qpixmap_blitter.cpp::fill +// DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX; +// m_surface->SetDrawingFlags(m_surface, drawingFlags); m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); m_surface->FillRectangle(m_surface, rect.x(), rect.y(), rect.width(), rect.height()); @@ -49,6 +56,7 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con m_surface->SetColor(m_surface, 0xff, 0xff, 0xff, 255); QPixmapData *data = pixmap.pixmapData(); + Q_ASSERT(data->width() && data->height()); Q_ASSERT(data->classId() == QPixmapData::BlitterClass); QBlittablePixmapData *blitPm = static_cast(data); QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index 25d6258..57d03fc 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -58,6 +58,11 @@ QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfa } +int QDirectFbConvenience::colorDepthForSurface(const DFBSurfacePixelFormat format) +{ + return ((0x1f << 7) & format) >> 7; +} + IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPixmapData(QPixmapData *pixmapData) { QBlittablePixmapData *blittablePmData = static_cast(pixmapData); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h index c086828..0b1a24f 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -19,6 +19,8 @@ class QDirectFbConvenience { public: static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps); + static bool pixelFomatHasAlpha(const DFBSurfacePixelFormat format) { return (1 << 16) & format; } + static int colorDepthForSurface(const DFBSurfacePixelFormat format); //This is set by the graphicssystem constructor static IDirectFB *dfbInterface(); diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index aef7a3d..f1f2215 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -64,6 +64,8 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) m_layer->GetConfiguration(m_layer, &config); m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); + qDebug() << QDirectFbConvenience::pixelFomatHasAlpha(config.pixelformat); + qDebug() << QDirectFbConvenience::colorDepthForSurface(config.pixelformat); qDebug() << "GraphcisSystemScreen has format: " << m_format; m_geometry = QRect(0,0,config.width,config.height); const int dpi = 72; diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index c8e4f9d..5f03b78 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -63,6 +63,8 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *sc m_dfbSurface->GetCapabilities(m_dfbSurface, &caps); DFBSurfacePixelFormat format; m_dfbSurface->GetPixelFormat(m_dfbSurface, &format); + qDebug() << QDirectFbConvenience::pixelFomatHasAlpha(format); + qDebug() << QDirectFbConvenience::colorDepthForSurface(format); qDebug() << "WindowSurface format " << QDirectFbConvenience::imageFormatFromSurfaceFormat(format,caps); -- cgit v0.12 From 4bbbbbcd60d621af0a80926d29a87f061a50ff85 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 11 Jan 2010 16:36:57 +0100 Subject: application supplied pixmap cursors for minimaldfb --- .../graphicssystems/minimaldfb/qdirectfbcursor.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp index e737575..229a875 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp @@ -15,22 +15,25 @@ QDirectFBCursor::QDirectFBCursor(QGraphicsSystemScreen * screen) : void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) { Q_UNUSED(widget); + int xSpot; + int ySpot; + QPixmap map; + if (cursor->shape() != Qt::BitmapCursor) { image->set(cursor->shape()); + xSpot = image->hotspot().x(); + ySpot = image->hotspot().y(); + QImage *i = image->image(); + map = QPixmap::fromImage(*i); } else { - qDebug() << "non-shape cursor: not implemented yet"; - return; + QPoint point = cursor->hotSpot(); + xSpot = point.x(); + ySpot = point.y(); + map = cursor->pixmap(); } - QImage *i = image->image(); - QRect imageRect = i->rect(); - QPixmap map = QPixmap::fromImage(*i); - IDirectFBSurface *surface = QDirectFbConvenience::dfbSurfaceForPixmapData(map.pixmapData()); - int xSpot = image->hotspot().x(); - int ySpot = image->hotspot().y(); - if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) { return; } -- cgit v0.12 From 645f29c727f33cc9f8b00b8efcb658a050ac6a26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 12 Jan 2010 14:38:18 +0100 Subject: Fix QBlittablePixmapData::fromImage --- src/gui/image/qpixmap_blitter.cpp | 25 ++++++++++++++++++---- .../minimaldfb/qblitter_directfb.cpp | 2 +- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index b2bb674..5ce7fc1 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -102,10 +102,27 @@ void QBlittablePixmapData::fromImage(const QImage &image, Qt::ImageConversionFlags flags) { resize(image.width(),image.height()); - QImage *thisImg = blittable()->lock(); - QPainter p(thisImg); - p.setCompositionMode(QPainter::CompositionMode_Source); - p.drawImage(0,0,image,flags); + QImage *thisImg = buffer(); + + QImage correctFormatPic = image; + if (correctFormatPic.format() != thisImg->format()) + correctFormatPic = correctFormatPic.convertToFormat(thisImg->format(), flags); + + //jl: This does not ALWAYS work as expected :( +// QPainter p(thisImg); +// p.setCompositionMode(QPainter::CompositionMode_Source); +// p.drawImage(0,0,image,flags); + + //So just copy strides by hand + uchar *mem = thisImg->bits(); + const uchar *bits = correctFormatPic.bits(); + int bytesCopied = 0; + while (bytesCopied < correctFormatPic.byteCount()) { + memcpy(mem,bits,correctFormatPic.bytesPerLine()); + mem += thisImg->bytesPerLine(); + bits += correctFormatPic.bytesPerLine(); + bytesCopied+=correctFormatPic.bytesPerLine(); + } } QPaintEngine *QBlittablePixmapData::paintEngine() const diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 23e3be6..3772131 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -23,7 +23,7 @@ QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) surfaceDesc.height = rect.height(); surfaceDesc.caps = DSCAPS_PREMULTIPLIED; surfaceDesc.pixelformat = DSPF_ARGB; - surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_PIXELFORMAT); + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); -- cgit v0.12 From d01179752907fa441ca1ae6f6e7e7b351e2a60f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 14 Jan 2010 13:48:00 +0100 Subject: minimaldfb: Set the correct SetDstBlendFunction --- src/gui/painting/qpaintengine_blitter.cpp | 4 ++-- .../graphicssystems/minimaldfb/qblitter_directfb.cpp | 14 ++++++++------ .../minimaldfb/qwindowsurface_minimaldfb.cpp | 2 -- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 7336dcc..a954294 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -302,7 +302,7 @@ void QBlitterPaintEngine::fill(const QVectorPath &path, const QBrush &brush) void QBlitterPaintEngine::fillRect(const QRectF &rect, const QColor &color) { Q_D(QBlitterPaintEngine); - if (d->capabillities->canBlitterFillRect() && color.alpha() == 255) { + if (d->capabillities->canBlitterFillRect() && color.alpha() == 0xff) { d->fillRect(rect, color); } else { d->lock(); @@ -319,7 +319,7 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) return; Q_D(QBlitterPaintEngine); if (qbrush_style(brush) == Qt::SolidPattern - && qbrush_color(brush).alpha() == 255 + && qbrush_color(brush).alpha() == 0xff && d->capabillities->canBlitterFillRect()) { d->fillRect(rect, qbrush_color(brush)); diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 3772131..c2e4b4f 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -50,11 +50,6 @@ void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect) { - quint32 blittingFlags = pixmap.hasAlphaChannel() ? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; - - m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); - m_surface->SetColor(m_surface, 0xff, 0xff, 0xff, 255); - QPixmapData *data = pixmap.pixmapData(); Q_ASSERT(data->width() && data->height()); Q_ASSERT(data->classId() == QPixmapData::BlitterClass); @@ -62,6 +57,14 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); IDirectFBSurface *s = dfbBlitter->m_surface; + + quint32 blittingFlags = pixmap.hasAlpha()? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; + + s->SetBlittingFlags(s, DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetPorterDuff(m_surface,DSPD_SRC_OVER); + m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); + const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; DFBResult result; @@ -73,7 +76,6 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con } if (result != DFB_OK) DirectFBError("QDirectFBBlitter::drawPixmap()", result); - } QImage *QDirectFbBlitter::doLock() diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 5f03b78..7f3e165 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -47,8 +47,6 @@ #include -#include - QT_BEGIN_NAMESPACE QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *screen, QWidget *window) -- cgit v0.12 From 68153ffc1ee0dcd779a4f809b614b05550a2acf9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 18 Jan 2010 10:45:56 +0100 Subject: Fixed QBlittablePixmapData::fill and a clipping error in the paintengine. Should prob. refactor engine state and clip calls. --- src/gui/image/qpixmap_blitter.cpp | 7 ++++--- src/gui/painting/qpaintengine_blitter.cpp | 3 +-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 5ce7fc1..175c234 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -77,9 +77,10 @@ int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const void QBlittablePixmapData::fill(const QColor &color) { - if (color.alpha() == 255 && blittable()->capabilities() & QBlittable::SolidRectCapability) - blittable()->fillRect(QRectF(0,0,w,h),color); - else + if (color.alpha() == 255 && blittable()->capabilities() & QBlittable::SolidRectCapability) { + blittable()->unlock(); + blittable()->fillRect(QRectF(0,0,w,h),color); + }else blittable()->lock()->fill(color.rgba()); } diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index a954294..43206c8 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -174,12 +174,11 @@ public: } void fillRect(const QRectF &rect, const QColor &color) { -// lock(); QRectF targetRect = rect; if (hasXForm) { targetRect = state->matrix.mapRect(rect); } - QClipData *clipData = state->clip; + const QClipData *clipData = raster->d_func()->clip();; if (clipData) { if (clipData->hasRectClip) { unlock(); -- cgit v0.12 From 900e0b47c09ec9d4d12d7de077d01b45baa7497f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 19 Jan 2010 11:32:15 +0100 Subject: Make the blitterpaintengine not create a path but call the raster implementation instead (this is a workaround for the anti-pattern that the blitterpaintengine is) --- src/gui/painting/qpaintengine_blitter.cpp | 6 ++++++ src/gui/painting/qpaintengine_blitter_p.h | 2 ++ 2 files changed, 8 insertions(+) diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 43206c8..0f6b5cf 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -587,6 +587,12 @@ void QBlitterPaintEngine::drawTextItem(const QPointF &pos, const QTextItem &ti) #endif } +void QBlitterPaintEngine::drawEllipse(const QRectF &r) +{ + Q_D(QBlitterPaintEngine); + d->lock(); + d->raster->drawEllipse(r); +} void QBlitterPaintEngine::setState(QPainterState *s) { diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index 7f67997..cebaf21 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -85,6 +85,8 @@ public: virtual void drawTextItem(const QPointF &pos, const QTextItem &ti); + virtual void drawEllipse(const QRectF &r); + virtual void setState(QPainterState *s); inline QPainterState *state() { return static_cast(QPaintEngine::state); } -- cgit v0.12 From 49e5181ea9da13439200720f51c8abbe4d8141c1 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 19 Jan 2010 16:28:22 +0100 Subject: Implement support for the MIT SHM extension (turned off by default). This should be significantly faster, since we are not sending the entire backing store over the wire for every paint event. It is turned off by default for now because we don't synchronize paint events. --- .../testlite/qwindowsurface_testlite.cpp | 7 +- src/plugins/graphicssystems/testlite/testlite.pro | 2 +- src/plugins/graphicssystems/testlite/x11util.cpp | 110 +++++++++++++++++++-- src/plugins/graphicssystems/testlite/x11util.h | 11 ++- 4 files changed, 118 insertions(+), 12 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index fde54a1..c0a0cc9 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -75,7 +75,7 @@ QTestLiteWindowSurface::~QTestLiteWindowSurface() QPaintDevice *QTestLiteWindowSurface::paintDevice() { - return &xw->img; + return xw->image(); } void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) @@ -92,13 +92,12 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const void QTestLiteWindowSurface::geometryChanged(const QRect &rect) { + bool resize = rect.size() != geometry().size(); QWindowSurface::setGeometry(rect); - if (xw->img.size() != rect.size()) { - xw->img = QImage(rect.size(), mScreen->format()); + if (resize) { window()->update(); //### this is the wrong place for this... } - } diff --git a/src/plugins/graphicssystems/testlite/testlite.pro b/src/plugins/graphicssystems/testlite/testlite.pro index af8a437..d483f45 100644 --- a/src/plugins/graphicssystems/testlite/testlite.pro +++ b/src/plugins/graphicssystems/testlite/testlite.pro @@ -10,7 +10,7 @@ HEADERS = qgraphicssystem_testlite.h qwindowsurface_testlite.h HEADERS += x11util.h SOURCES += x11util.cpp -LIBS += -lX11 +LIBS += -lX11 -lXext target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index cb08230..f3b6dc2 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -57,6 +57,11 @@ #include +# include +# include +# include + + #include #include #include @@ -68,6 +73,10 @@ //#define MYX11_DEBUG +//MIT SHM disabled by default, since we haven't implemented ShmCompletion synchronization yet + +#define DONT_USE_MIT_SHM + static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); static bool seen_badwindow; @@ -307,12 +316,15 @@ MyDisplay::MyDisplay() exit(1); } +#ifndef DONT_USE_MIT_SHM + Status MIT_SHM_extension_supported = XShmQueryExtension (display); + Q_ASSERT(MIT_SHM_extension_supported == True); +#endif original_x_errhandler = XSetErrorHandler(qt_x_errhandler); if (qgetenv("DO_X_SYNCHRONIZE").toInt()) XSynchronize(display, true); - screen = DefaultScreen(display); width = DisplayWidth(display, screen); height = DisplayHeight(display, screen); @@ -367,6 +379,16 @@ void MyDisplay::eventDispatcher() } } +struct MyShmImageInfo { + MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} + ~MyShmImageInfo() { destroy(); } + + void destroy(); + + XShmSegmentInfo shminfo; + XImage *image; + Display *display; +}; MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) { @@ -407,6 +429,9 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) setWindowTitle(QLatin1String("Qt Lighthouse")); currentCursor = -1; + + image_info = 0; + } @@ -432,6 +457,8 @@ MyWindow::~MyWindow() XDestroyWindow(xd->display, window); xd->windowList.removeAll(this); + + delete image_info; } GC MyWindow::createGC() @@ -453,9 +480,14 @@ void MyWindow::closeEvent() void MyWindow::paintEvent() { Visual *visual = DefaultVisual(xd->display, xd->screen); - - if (!img.isNull()) { - QImage image = img.convertToFormat(QImage::Format_RGB32); +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::paintEvent" << shm_img.size(); +#endif +#ifdef DONT_USE_MIT_SHM + // just convert the image every time... + if (!shm_img.isNull()) { + QImage image = shm_img; + //img.convertToFormat( XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, 0, (char *) image.scanLine(0), image.width(), image.height(), 32, image.bytesPerLine()); @@ -468,6 +500,65 @@ void MyWindow::paintEvent() xi->data = 0; // QImage owns these bits XDestroyImage(xi); } +#else + // Use MIT_SHM + if (image_info->image) { + //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; + int x = 0; + int y = 0; + // We should really set send_event to true, and then use the XShmCompletionEvent + // to synchronize painting + XShmPutImage (xd->display, window, gc, image_info->image, 0, 0, + x, y, image_info->image->width, image_info->image->height, + /*send_event*/ false); + + //### This makes output visible, probably not ideal from a performance point of view... + XFlush(xd->display); + } +#endif +} + +#ifndef DONT_USE_MIT_SHM +void MyShmImageInfo::destroy() +{ + XShmDetach (display, &shminfo); + XDestroyImage (image); + shmdt (shminfo.shmaddr); + shmctl (shminfo.shmid, IPC_RMID, 0); +} +#endif + +void MyWindow::resizeShmImage(int width, int height) +{ +#ifdef DONT_USE_MIT_SHM + shm_img = QImage(width, height, QImage::Format_RGB32); +#else + if (image_info) + image_info->destroy(); + else + image_info = new MyShmImageInfo(xd->display); + + Visual *visual = DefaultVisual(xd->display, xd->screen); + + + XImage *image = XShmCreateImage (xd->display, visual, 24, ZPixmap, 0, + &image_info->shminfo, width, height); + + + image_info->shminfo.shmid = shmget (IPC_PRIVATE, + image->bytes_per_line * image->height, IPC_CREAT|0777); + + image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); + image_info->shminfo.readOnly = False; + + image_info->image = image; + + Status shm_attach_status = XShmAttach(xd->display, &image_info->shminfo); + + Q_ASSERT(shm_attach_status == True); + + shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); +#endif } void MyWindow::resizeEvent(XConfigureEvent *e) @@ -484,8 +575,11 @@ void MyWindow::resizeEvent(XConfigureEvent *e) height = e->height; #ifdef MYX11_DEBUG - qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height; + qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height << "img:" << shm_img.size(); #endif + if (shm_img.size() != QSize(width, height)) + resizeShmImage(width, height); + windowSurface->handleGeometryChange(xpos, ypos, width, height); } @@ -499,9 +593,13 @@ void MyWindow::setSize(int w, int h) void MyWindow::setGeometry(int x, int y, int w, int h) { #ifdef MYX11_DEBUG - qDebug() << "MyWindow::setGeometry" << hex << window << dec << x << y << w << h; + qDebug() << "MyWindow::setGeometry" << hex << window << dec << x << y << w << h << "img:" << shm_img.size(); #endif XMoveResizeWindow(xd->display, window, x, y, w, h); + + if (shm_img.size() != QSize(w, h)) { + resizeShmImage(w, h); + } } diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index 2a73f3e..08fd0ce 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -86,6 +86,8 @@ public: //### class QTestLiteWindowSurface; //### abstract callback interface, anyone? +struct MyShmImageInfo; + class MyWindow : public QObject { Q_OBJECT; @@ -120,11 +122,12 @@ public: void setWindowTitle(const QString &title); + QImage *image() { return &shm_img; } + public: //### int xpos, ypos; int width, height; - QImage img; Window window; MyDisplay *xd; GC gc; @@ -132,6 +135,12 @@ public: //### QTestLiteWindowSurface *windowSurface; int currentCursor; + +private: + void resizeShmImage(int width, int height); + + QImage shm_img; + MyShmImageInfo *image_info; }; class MyX11CursorNode -- cgit v0.12 From a8cf2de36dc570d2e73248d4cbe88ee3eb330dc0 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 19 Jan 2010 17:27:42 +0100 Subject: Enable MIT SHM and implement scrolling in the window surface Stealing a bit from the Qt X11 source code... --- .../testlite/qwindowsurface_testlite.cpp | 59 +++++++++++++++++++++- src/plugins/graphicssystems/testlite/x11util.cpp | 14 +++-- 2 files changed, 64 insertions(+), 9 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index c0a0cc9..0afbf2f 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -114,11 +114,68 @@ void QTestLiteWindowSurface::setGeometry(const QRect &rect) xw->setGeometry(rect.x(), rect.y(), rect.width(), rect.height()); } +//### scroll logic copied from QRasterWindowSurface, we should make better API for this + +void copied_qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) +{ + // make sure we don't detach + uchar *mem = const_cast(const_cast(img).bits()); + + int lineskip = img.bytesPerLine(); + int depth = img.depth() >> 3; + + const QRect imageRect(0, 0, img.width(), img.height()); + const QRect r = rect & imageRect & imageRect.translated(-offset); + const QPoint p = rect.topLeft() + offset; + + if (r.isEmpty()) + return; + + const uchar *src; + uchar *dest; + + if (r.top() < p.y()) { + src = mem + r.bottom() * lineskip + r.left() * depth; + dest = mem + (p.y() + r.height() - 1) * lineskip + p.x() * depth; + lineskip = -lineskip; + } else { + src = mem + r.top() * lineskip + r.left() * depth; + dest = mem + p.y() * lineskip + p.x() * depth; + } + + const int w = r.width(); + int h = r.height(); + const int bytes = w * depth; + + // overlapping segments? + if (offset.y() == 0 && qAbs(offset.x()) < w) { + do { + ::memmove(dest, src, bytes); + dest += lineskip; + src += lineskip; + } while (--h); + } else { + do { + ::memcpy(dest, src, bytes); + dest += lineskip; + src += lineskip; + } while (--h); + } +} + bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) { - return QWindowSurface::scroll(area, dx, dy); + if (!xw->image() || xw->image()->isNull()) + return false; + + const QVector rects = area.rects(); + for (int i = 0; i < rects.size(); ++i) + copied_qt_scrollRectInImage(*xw->image(), rects.at(i), QPoint(dx, dy)); + + return true; } + void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index f3b6dc2..de2a6d9 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -73,9 +73,7 @@ //#define MYX11_DEBUG -//MIT SHM disabled by default, since we haven't implemented ShmCompletion synchronization yet - -#define DONT_USE_MIT_SHM +//#define DONT_USE_MIT_SHM static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); static bool seen_badwindow; @@ -506,14 +504,14 @@ void MyWindow::paintEvent() //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; int x = 0; int y = 0; - // We should really set send_event to true, and then use the XShmCompletionEvent - // to synchronize painting + + // We could set send_event to true, and then use the ShmCompletion to synchronize, + // but let's do like Qt/11 and just use XSync XShmPutImage (xd->display, window, gc, image_info->image, 0, 0, x, y, image_info->image->width, image_info->image->height, - /*send_event*/ false); + /*send_event*/ False); - //### This makes output visible, probably not ideal from a performance point of view... - XFlush(xd->display); + XSync(xd->display, False); } #endif } -- cgit v0.12 From 5628a07e554d220396548f6914c798da8a556585 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 22 Jan 2010 10:42:43 +0100 Subject: Implement grabWindow() --- .../testlite/qgraphicssystem_testlite.cpp | 4 +-- src/plugins/graphicssystems/testlite/x11util.cpp | 42 +++++++++++++++++++++- src/plugins/graphicssystems/testlite/x11util.h | 1 + 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp index 72d364a..ed8f883 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -112,8 +112,8 @@ QWindowSurface *QTestLiteGraphicsSystem::createWindowSurface(QWidget *widget) co QPixmap QTestLiteGraphicsSystem::grabWindow(WId window, int x, int y, int width, int height) const { - qDebug() << "grabWindow" << hex << window << dec<< x << y << width << height; - return QPixmap(); + QImage img = xd->grabWindow(window, x, y, width, height); + return QPixmap::fromImage(img); } diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index de2a6d9..7ad3ed5 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -377,6 +377,45 @@ void MyDisplay::eventDispatcher() } } + +QImage MyDisplay::grabWindow(Window window, int x, int y, int w, int h) +{ + if (w == 0 || h ==0) + return QImage(); + + //WinId 0 means the desktop widget + if (!window) + window = rootWindow(); + + XWindowAttributes window_attr; + if (!XGetWindowAttributes(display, window, &window_attr)) + return QImage(); + + if (w < 0) + w = window_attr.width - x; + if (h < 0) + h = window_attr.height - y; + + // Ideally, we should also limit ourselves to the screen area, but the Qt docs say + // that it's "unsafe" to go outside the screen, so we can ignore that problem. + + //We're definitely not optimizing for speed... + XImage *xi = XGetImage(display, window, x, y, w, h, AllPlanes, ZPixmap); + + if (!xi) + return QImage(); + + //taking a copy to make sure we have ownership -- not fast + QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); + + XDestroyImage(xi); + + return result; +} + + + + struct MyShmImageInfo { MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} ~MyShmImageInfo() { destroy(); } @@ -477,13 +516,14 @@ void MyWindow::closeEvent() void MyWindow::paintEvent() { - Visual *visual = DefaultVisual(xd->display, xd->screen); #ifdef MYX11_DEBUG qDebug() << "MyWindow::paintEvent" << shm_img.size(); #endif #ifdef DONT_USE_MIT_SHM // just convert the image every time... if (!shm_img.isNull()) { + Visual *visual = DefaultVisual(xd->display, xd->screen); + QImage image = shm_img; //img.convertToFormat( XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index 08fd0ce..db87d92 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -68,6 +68,7 @@ public: unsigned long whitePixel() { return WhitePixel(display, screen); } bool handleEvent(XEvent *xe); + QImage grabWindow(Window w, int x, int y, int w, int h); public slots: void eventDispatcher(); -- cgit v0.12 From 05fefd9fcfb05d6ca6d60c1da2d8a1dca9b32874 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Fri, 22 Jan 2010 13:55:31 +0100 Subject: revert parts of 10392eef4fd4f9 We can't call QCOMPARE from within a nested function, because the return statement will just exit that function. VERIFY_COLOR can't be turned into a function this way. --- tests/auto/qwidget/tst_qwidget.cpp | 50 ++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 26 deletions(-) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index ee4e726..ea90ae3 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -5439,26 +5439,24 @@ public: QRegion r; }; -template -void verifyColor(R const& region, C const& color) -{ - const QRegion r = QRegion(region); - for (int i = 0; i < r.rects().size(); ++i) { - const QRect rect = r.rects().at(i); - for (int t = 0; t < 5; t++) { - const QPixmap pixmap = QPixmap::grabWindow(QDesktopWidget().winId(), - rect.left(), rect.top(), - rect.width(), rect.height()); - QCOMPARE(pixmap.size(), rect.size()); - QPixmap expectedPixmap(pixmap); /* ensure equal formats */ - expectedPixmap.fill(color); - if (pixmap.toImage().pixel(0,0) != QColor(color).rgb() && t < 4 ) - { QTest::qWait(200); continue; } - QCOMPARE(pixmap.toImage().pixel(0,0), QColor(color).rgb()); - QCOMPARE(pixmap, expectedPixmap); - break; - } - } +#define VERIFY_COLOR(region, color) { \ + const QRegion r = QRegion(region); \ + for (int i = 0; i < r.rects().size(); ++i) { \ + const QRect rect = r.rects().at(i); \ + for (int t = 0; t < 5; t++) { \ + const QPixmap pixmap = QPixmap::grabWindow(QDesktopWidget().winId(), \ + rect.left(), rect.top(), \ + rect.width(), rect.height()); \ + QCOMPARE(pixmap.size(), rect.size()); \ + QPixmap expectedPixmap(pixmap); /* ensure equal formats */ \ + expectedPixmap.fill(color); \ + if (pixmap.toImage().pixel(0,0) != QColor(color).rgb() && t < 4 ) \ + { QTest::qWait(200); continue; } \ + QCOMPARE(pixmap.toImage().pixel(0,0), QColor(color).rgb()); \ + QCOMPARE(pixmap, expectedPixmap); \ + break; \ + } \ + } \ } void tst_QWidget::moveChild_data() @@ -5499,9 +5497,9 @@ void tst_QWidget::moveChild() #endif QTRY_COMPARE(parent.r, QRegion(parent.rect()) - child.geometry()); QTRY_COMPARE(child.r, QRegion(child.rect())); - verifyColor(child.geometry().translated(tlwOffset), + VERIFY_COLOR(child.geometry().translated(tlwOffset), child.color); - verifyColor(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset), + VERIFY_COLOR(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset), parent.color); parent.reset(); child.reset(); @@ -5520,9 +5518,9 @@ void tst_QWidget::moveChild() // should be scrolled in backingstore QCOMPARE(child.r, QRegion()); #endif - verifyColor(child.geometry().translated(tlwOffset), + VERIFY_COLOR(child.geometry().translated(tlwOffset), child.color); - verifyColor(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset), + VERIFY_COLOR(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset), parent.color); } @@ -5553,8 +5551,8 @@ void tst_QWidget::showAndMoveChild() child.move(desktopDimensions.width()/2, desktopDimensions.height()/2); qApp->processEvents(); - verifyColor(child.geometry().translated(tlwOffset), Qt::blue); - verifyColor(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset), Qt::red); + VERIFY_COLOR(child.geometry().translated(tlwOffset), Qt::blue); + VERIFY_COLOR(QRegion(parent.geometry()) - child.geometry().translated(tlwOffset), Qt::red); } void tst_QWidget::subtractOpaqueSiblings() -- cgit v0.12 From f0f1d8588892ba94301ecad2aa4495e9bfa364ae Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 25 Jan 2010 14:45:46 +0100 Subject: Handle RGB_32 format pixmaps correctly The alpha channel is undefined for RGB_32 --- tests/auto/qwidget/tst_qwidget.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index ea90ae3..9ed2d37 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -5450,9 +5450,12 @@ public: QCOMPARE(pixmap.size(), rect.size()); \ QPixmap expectedPixmap(pixmap); /* ensure equal formats */ \ expectedPixmap.fill(color); \ - if (pixmap.toImage().pixel(0,0) != QColor(color).rgb() && t < 4 ) \ + QImage image = pixmap.toImage(); \ + uint alphaCorrection = image.format() == QImage::Format_RGB32 ? 0xff000000 : 0; \ + uint firstPixel = image.pixel(0,0) | alphaCorrection; \ + if ( firstPixel != QColor(color).rgb() && t < 4 ) \ { QTest::qWait(200); continue; } \ - QCOMPARE(pixmap.toImage().pixel(0,0), QColor(color).rgb()); \ + QCOMPARE(firstPixel, QColor(color).rgb()); \ QCOMPARE(pixmap, expectedPixmap); \ break; \ } \ -- cgit v0.12 From 33a5ecd4908690d6a8366d8f7384ad1e8cf86f92 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 26 Jan 2010 14:52:09 +0100 Subject: queue user mouse, wheel, and keyboard input events For plugins: testlite, minimaldfb, vnc, LinuxInput[Mouse|Keyboard] --- src/gui/embedded/qkbd_qws.cpp | 3 +- src/gui/kernel/kernel.pri | 15 ++- src/gui/kernel/qapplication_lite.cpp | 133 +++++++++++++------ src/gui/kernel/qapplication_p.h | 74 ++++++++++- src/gui/kernel/qeventdispatcher_glib_lite.cpp | 138 ++++++++++++++++++++ src/gui/kernel/qeventdispatcher_glib_lite_p.h | 88 +++++++++++++ src/gui/kernel/qeventdispatcher_lite.cpp | 141 +++++++++++++++++++++ src/gui/kernel/qeventdispatcher_lite_p.h | 86 +++++++++++++ src/gui/kernel/qeventdispatcher_qws_p.h | 2 +- src/plugins/generic/linuxinput/qlinuxinput.cpp | 34 ++--- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 16 +-- .../testlite/qwindowsurface_testlite.cpp | 27 ++-- src/plugins/graphicssystems/testlite/x11util.h | 2 +- src/plugins/graphicssystems/vnc/qvncserver.cpp | 54 +------- src/plugins/graphicssystems/vnc/qvncserver.h | 5 - 15 files changed, 673 insertions(+), 145 deletions(-) create mode 100644 src/gui/kernel/qeventdispatcher_glib_lite.cpp create mode 100644 src/gui/kernel/qeventdispatcher_glib_lite_p.h create mode 100644 src/gui/kernel/qeventdispatcher_lite.cpp create mode 100644 src/gui/kernel/qeventdispatcher_lite_p.h diff --git a/src/gui/embedded/qkbd_qws.cpp b/src/gui/embedded/qkbd_qws.cpp index 233b6fa..97fb7a0 100644 --- a/src/gui/embedded/qkbd_qws.cpp +++ b/src/gui/embedded/qkbd_qws.cpp @@ -367,8 +367,7 @@ void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, Qt::KeyboardM QString str; if (unicode != 0xffff) str = QString(unicode); - QKeyEvent ke(type, keycode, modifiers, str); - QApplicationPrivate::handleKeyEvent(0, &ke); + QApplicationPrivate::handleKeyEvent(0, type, keycode, modifiers, str); #endif } diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 9fbdfc8..0c7231e 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -195,7 +195,8 @@ embedded { embedded_lite { HEADERS += \ kernel/qgenericpluginfactory_lite.h \ - kernel/qgenericplugin_lite.h + kernel/qgenericplugin_lite.h \ + kernel/qeventdispatcher_lite_p.h SOURCES += \ kernel/qapplication_lite.cpp \ @@ -207,7 +208,17 @@ embedded_lite { kernel/qgenericplugin_lite.cpp \ kernel/qkeymapper_qws.cpp \ kernel/qsound_lite.cpp \ - kernel/qwidget_lite.cpp + kernel/qwidget_lite.cpp \ + kernel/qeventdispatcher_lite.cpp + + contains(QT_CONFIG, glib) { + SOURCES += \ + kernel/qeventdispatcher_glib_lite.cpp + HEADERS += \ + kernel/qeventdispatcher_glib_lite_p.h + QMAKE_CXXFLAGS += $$QT_CFLAGS_GLIB + LIBS_PRIVATE +=$$QT_LIBS_GLIB + } } !embedded:!embedded_lite:!x11:mac { diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 57f6d72..4242ff7 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -43,9 +43,9 @@ #include "qcolormap.h" #include "qpixmapcache.h" #if !defined(QT_NO_GLIB) -#include "private/qeventdispatcher_glib_p.h" +#include "qeventdispatcher_glib_lite_p.h" #endif -#include "private/qeventdispatcher_unix_p.h" +#include "qeventdispatcher_lite_p.h" #ifndef QT_NO_CURSOR #include "private/qcursor_p.h" #endif @@ -75,6 +75,32 @@ int qt_last_x = 0; int qt_last_y = 0; QPointer qt_last_mouse_receiver = 0; +QList QApplicationPrivate::userEventQueue; +static Qt::KeyboardModifiers modifiers = Qt::NoModifier; +static Qt::MouseButtons buttons = Qt::NoButton; + +void QApplicationPrivate::processUserEvent(UserEvent *e) +{ + switch(e->type) { + case QEvent::MouseButtonDblClick: // if mouse event, calculate appropriate widget and local coordinates + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseMove: + QApplicationPrivate::processMouseEvent(static_cast(e)); + break; + case QEvent::Wheel: + QApplicationPrivate::processWheelEvent(static_cast(e)); + break; + case QEvent::KeyPress: + case QEvent::KeyRelease: + QApplicationPrivate::processKeyEvent(static_cast(e)); + break; + default: + qWarning() << "Unknown user input event type:" << e->type; + break; + } +} + QString QApplicationPrivate::appName() const { return QT_PREPEND_NAMESPACE(appName); @@ -85,13 +111,13 @@ void QApplicationPrivate::createEventDispatcher() Q_Q(QApplication); #if !defined(QT_NO_GLIB) if (qgetenv("QT_NO_GLIB").isEmpty() && QEventDispatcherGlib::versionSupported()) - eventDispatcher = new QEventDispatcherGlib(q); + eventDispatcher = new QLiteEventDispatcherGlib(q); else #endif - eventDispatcher = new QEventDispatcherUNIX(q); + eventDispatcher = new QEventDispatcherLite(q); } -static bool qt_try_modal(QWidget *widget, const QEvent *event) +static bool qt_try_modal(QWidget *widget, QEvent::Type type) { QWidget * top = 0; @@ -101,7 +127,7 @@ static bool qt_try_modal(QWidget *widget, const QEvent *event) bool block_event = false; bool paint_event = false; - switch (event->type()) { + switch (type) { #if 0 case QEvent::Focus: if (!static_cast(event)->simpleData.get_focus) @@ -520,22 +546,51 @@ void QApplicationPrivate::handleLeaveEvent(QWidget *tlw) qt_last_mouse_receiver = 0; } -void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) +void QApplicationPrivate::processMouseEvent(MouseEvent *e) { // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); - static QWidget *implicit_mouse_grabber=0; - QPointer cursor = QGraphicsSystemCursor::getInstance(); - if (cursor) - cursor->pointerEvent(ev); + QEvent::Type type; + // move first + Qt::MouseButtons stateChange = e->buttons ^ buttons; + if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { + MouseEvent * newMouseEvent = new MouseEvent(e->tlw, e->localPos, e->globalPos, e->buttons); + userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop + stateChange = Qt::NoButton; + } - QPoint localPoint = ev.pos(); - QPoint globalPoint = ev.globalPos(); - QWidget *mouseWindow = tlw; + QPoint localPoint = e->localPos; + QPoint globalPoint = e->globalPos; + QWidget *mouseWindow = e->tlw; + + Qt::MouseButton button = Qt::NoButton; - qt_last_x = globalPoint.x(); - qt_last_y = globalPoint.y(); + + if (qt_last_x != globalPoint.x() || qt_last_y != globalPoint.y()) { + type = QEvent::MouseMove; + qt_last_x = globalPoint.x(); + qt_last_y = globalPoint.y(); + } + else { // check to see if a new button has been pressed/released + for (int check = Qt::LeftButton; + check <= Qt::XButton2; + check = check << 1) { + if (check & stateChange) { + button = Qt::MouseButton(check); + break; + } + } + if (button == Qt::NoButton) { + // Ignore mouse events that don't change the current state + return; + } + buttons = e->buttons; + if (button & e->buttons) + type = QEvent::MouseButtonPress; + else + type = QEvent::MouseButtonRelease; + } if (self->inPopupMode()) { //popup mouse handling is magical... @@ -544,11 +599,11 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) implicit_mouse_grabber = 0; //### how should popup mode and implicit mouse grab interact? - } else if (tlw && app_do_modal && !qt_try_modal(tlw, &ev) ) { + } else if (e->tlw && app_do_modal && !qt_try_modal(e->tlw, e->type) ) { //even if we're blocked by modality, we should deliver the mouse release event.. //### this code is not completely correct: multiple buttons can be pressed simultaneously - if (!(implicit_mouse_grabber && ev.buttons() == Qt::NoButton)) { - qDebug() << "modal blocked mouse event to" << tlw; + if (!(implicit_mouse_grabber && buttons == Qt::NoButton)) { + qDebug() << "modal blocked mouse event to" << e->tlw; return; } } @@ -561,7 +616,7 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) if (!mouseWindow && !implicit_mouse_grabber) mouseWindow = QApplication::desktop(); - if (mouseWindow && mouseWindow != tlw) { + if (mouseWindow && mouseWindow != e->tlw) { //we did not get a sensible localPoint from the window system, so let's calculate it localPoint = mouseWindow->mapFromGlobal(globalPoint); } @@ -576,7 +631,7 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) } //handle implicit mouse grab - if (ev.type() == QEvent::MouseButtonPress && !implicit_mouse_grabber) { + if (type == QEvent::MouseButtonPress && !implicit_mouse_grabber) { implicit_mouse_grabber = mouseWidget; Q_ASSERT(mouseWindow); @@ -584,7 +639,7 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) } else if (implicit_mouse_grabber) { mouseWidget = implicit_mouse_grabber; mouseWindow = mouseWidget->window(); - if (mouseWindow != tlw) + if (mouseWindow != e->tlw) localPoint = mouseWindow->mapFromGlobal(globalPoint); } @@ -593,7 +648,7 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) //localPoint is local to mouseWindow, but it needs to be local to mouseWidget localPoint = mouseWidget->mapFrom(mouseWindow, localPoint); - if (ev.buttons() == Qt::NoButton) { + if (buttons == Qt::NoButton) { //qDebug() << "resetting mouse grabber"; implicit_mouse_grabber = 0; } @@ -608,25 +663,29 @@ void QApplicationPrivate::handleMouseEvent(QWidget *tlw, const QMouseEvent &ev) // qDebug() << "sending mouse ev." << ev.type() << localPoint << globalPoint << ev.button() << ev.buttons() << mouseWidget << "mouse grabber" << implicit_mouse_grabber; - QMouseEvent e(ev.type(), localPoint, globalPoint, ev.button(), ev.buttons(), ev.modifiers()); - QApplication::sendSpontaneousEvent(mouseWidget, &e); + QMouseEvent ev(type, localPoint, globalPoint, button, buttons, modifiers); + + QPointer cursor = QGraphicsSystemCursor::getInstance(); + if (cursor) + cursor->pointerEvent(ev); + QApplication::sendSpontaneousEvent(mouseWidget, &ev); } //### there's a lot of duplicated logic here -- refactoring required! -void QApplicationPrivate::handleWheelEvent(QWidget *tlw, QWheelEvent &ev) +void QApplicationPrivate::processWheelEvent(WheelEvent *e) { // QPoint localPoint = ev.pos(); - QPoint globalPoint = ev.globalPos(); + QPoint globalPoint = e->globalPos; // bool trustLocalPoint = !!tlw; //is there something the local point can be local to? QWidget *mouseWidget; qt_last_x = globalPoint.x(); qt_last_y = globalPoint.y(); - QWidget *mouseWindow = tlw; + QWidget *mouseWindow = e->tlw; // find the tlw if we didn't get it from the plugin if (!mouseWindow) { @@ -638,7 +697,7 @@ void QApplicationPrivate::handleWheelEvent(QWidget *tlw, QWheelEvent &ev) mouseWidget = mouseWindow; - if (app_do_modal && !qt_try_modal(mouseWindow, &ev) ) { + if (app_do_modal && !qt_try_modal(mouseWindow, e->type) ) { qDebug() << "modal blocked wheel event" << mouseWindow; return; } @@ -649,16 +708,16 @@ void QApplicationPrivate::handleWheelEvent(QWidget *tlw, QWheelEvent &ev) p = mouseWidget->mapFromGlobal(globalPoint); } - QWheelEvent e(p, globalPoint, ev.delta(), ev.buttons(), ev.modifiers(), - ev.orientation()); - QApplication::sendSpontaneousEvent(mouseWidget, &e); + QWheelEvent ev(p, globalPoint, e->delta, buttons, modifiers, + e->orient); + QApplication::sendSpontaneousEvent(mouseWidget, &ev); } // Remember, Qt convention is: keyboard state is state *before* -void QApplicationPrivate::handleKeyEvent(QWidget *tlw, QKeyEvent *e) +void QApplicationPrivate::processKeyEvent(KeyEvent *e) { QWidget *focusW = 0; if (self->inPopupMode()) { @@ -668,7 +727,7 @@ void QApplicationPrivate::handleKeyEvent(QWidget *tlw, QKeyEvent *e) if (!focusW) focusW = QApplication::focusWidget(); if (!focusW) - focusW = tlw; + focusW = e->tlw; if (!focusW) focusW = QApplication::activeWindow(); @@ -676,10 +735,12 @@ void QApplicationPrivate::handleKeyEvent(QWidget *tlw, QKeyEvent *e) if (!focusW) return; - if (app_do_modal && !qt_try_modal(focusW, e)) + if (app_do_modal && !qt_try_modal(focusW, e->type)) return; - QApplication::sendSpontaneousEvent(focusW, e); + modifiers = e->modifiers; + QKeyEvent ev(e->type, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); + QApplication::sendSpontaneousEvent(focusW, &ev); } diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index a93fd63..955a3fc 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -65,8 +65,9 @@ #include "QtCore/qhash.h" #include "QtCore/qpointer.h" #include "private/qcoreapplication_p.h" -#include "private/qshortcutmap_p.h" +#include "QtGui/private/qshortcutmap_p.h" #include +#include "QtCore/qpoint.h" #ifdef Q_WS_QWS #include "QtGui/qscreen_qws.h" #include @@ -564,11 +565,72 @@ public: #endif #ifdef Q_WS_LITE - static void handleMouseEvent(QWidget *tlw, const QMouseEvent &ev); - static void handleKeyEvent(QWidget *tlw, QKeyEvent *e); + + class UserEvent { + public: + UserEvent(QWidget *w) { tlw = w; } + QWidget * tlw; + QEvent::Type type; + }; + + class MouseEvent : public UserEvent { + public: + MouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) + : UserEvent(w){ localPos = local; globalPos = global; buttons = b; type = QEvent::MouseMove; } + QPoint localPos; + QPoint globalPos; + Qt::MouseButtons buttons; + }; + + class WheelEvent : public UserEvent { + public: + WheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) + : UserEvent(w) { localPos = local; globalPos = global; delta = d; orient = o; type = QEvent::Wheel; } + int delta; + QPoint localPos; + QPoint globalPos; + Qt::Orientation orient; + }; + + class KeyEvent : public UserEvent { + public: + KeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) + :UserEvent(w){ type = t; key = k; unicode = text; repeat = autorep; repeatCount = count; modifiers = mods; } + int key; + QString unicode; + bool repeat; + ushort repeatCount; + Qt::KeyboardModifiers modifiers; + }; + + static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { + MouseEvent * e = new MouseEvent(w, local, global, b); + queueUserEvent(e); + } + + static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { + KeyEvent * e = new KeyEvent(w, t, k, mods, text, autorep, count); + queueUserEvent(e); + } + + static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { + WheelEvent *e = new WheelEvent(w, local, global, d, o); + queueUserEvent(e); + } + + static void queueUserEvent(UserEvent *ev) { userEventQueue.append(ev); } + static void processUserEvent(UserEvent *e); + static int userEventsQueued() { return userEventQueue.count(); } + static UserEvent * getUserEvent() { return userEventQueue.takeFirst(); } + + // could be private, should only be used by deliverUserEvents() + static void processMouseEvent(MouseEvent *e); + static void processKeyEvent(KeyEvent *e); + static void processWheelEvent(WheelEvent *e); + + // delivered directly by the plugin via spontaneous events static void handleGeometryChange(QWidget *tlw, const QRect &newRect); static void handleCloseEvent(QWidget *tlw); - static void handleWheelEvent(QWidget *tlw, QWheelEvent &e); static void handleEnterEvent(QWidget *tlw); static void handleLeaveEvent(QWidget *tlw); #endif @@ -587,6 +649,10 @@ private: static QHash scanCodeCache; #endif +#ifdef Q_WS_LITE + static QList userEventQueue; +#endif + static QApplicationPrivate *self; static void giveFocusAccordingToFocusPolicy(QWidget *w, diff --git a/src/gui/kernel/qeventdispatcher_glib_lite.cpp b/src/gui/kernel/qeventdispatcher_glib_lite.cpp new file mode 100644 index 0000000..b8d2a5b --- /dev/null +++ b/src/gui/kernel/qeventdispatcher_glib_lite.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qeventdispatcher_glib_lite_p.h" + +#include "qapplication.h" + +#include "qplatformdefs.h" +#include "qapplication.h" + +#include +#include "qapplication_p.h" + +#include + +QT_BEGIN_NAMESPACE + +struct GUserEventSource +{ + GSource source; + QLiteEventDispatcherGlib *q; +}; + +static gboolean userEventSourcePrepare(GSource *s, gint *timeout) +{ + Q_UNUSED(s) + Q_UNUSED(timeout) + + return QApplicationPrivate::userEventsQueued() > 0; +} + +static gboolean userEventSourceCheck(GSource *source) +{ + return userEventSourcePrepare(source, 0); +} + +static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) +{ + GUserEventSource * source = reinterpret_cast(s); + + int i = QApplicationPrivate::userEventsQueued(); + QApplicationPrivate::UserEvent * event; + while (i--) { + event = QApplicationPrivate::getUserEvent(); + + // send through event filter + if (source->q->filterEvent(event)) { + delete event; + continue; + } + QApplicationPrivate::processUserEvent(event); + delete event; + } + + return true; +} + + +static GSourceFuncs userEventSourceFuncs = { + userEventSourcePrepare, + userEventSourceCheck, + userEventSourceDispatch, + NULL, + NULL, + NULL +}; + +QLiteEventDispatcherGlibPrivate::QLiteEventDispatcherGlibPrivate(GMainContext *context) + : QEventDispatcherGlibPrivate(context) +{ + userEventSource = reinterpret_cast(g_source_new(&userEventSourceFuncs, + sizeof(GUserEventSource))); + userEventSource->q = 0; + g_source_set_can_recurse(&userEventSource->source, true); + g_source_attach(&userEventSource->source, mainContext); +} + + +QLiteEventDispatcherGlib::QLiteEventDispatcherGlib(QObject *parent) + : QEventDispatcherGlib(*new QLiteEventDispatcherGlibPrivate, parent) +{ + Q_D(QLiteEventDispatcherGlib); + d->userEventSource->q = this; +} + +QLiteEventDispatcherGlib::~QLiteEventDispatcherGlib() +{ + Q_D(QLiteEventDispatcherGlib); + + g_source_destroy(&d->userEventSource->source); + g_source_unref(&d->userEventSource->source); + d->userEventSource = 0; +} + +bool QLiteEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) +{ + return QEventDispatcherGlib::processEvents(flags); +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qeventdispatcher_glib_lite_p.h b/src/gui/kernel/qeventdispatcher_glib_lite_p.h new file mode 100644 index 0000000..6ebdb25 --- /dev/null +++ b/src/gui/kernel/qeventdispatcher_glib_lite_p.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QLITEEVENTDISPATCHER_GLIB_P_H +#define QLITEEVENTDISPATCHER_GLIB_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the QLibrary class. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +#include + +typedef struct _GMainContext GMainContext; + +QT_BEGIN_NAMESPACE +class QLiteEventDispatcherGlibPrivate; + +class QLiteEventDispatcherGlib : public QEventDispatcherGlib +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QLiteEventDispatcherGlib) + +public: + explicit QLiteEventDispatcherGlib(QObject *parent = 0); + ~QLiteEventDispatcherGlib(); + + bool processEvents(QEventLoop::ProcessEventsFlags flags); +}; + +struct GUserEventSource; + +class QLiteEventDispatcherGlibPrivate : public QEventDispatcherGlibPrivate +{ + Q_DECLARE_PUBLIC(QLiteEventDispatcherGlib) +public: + QLiteEventDispatcherGlibPrivate(GMainContext *context = 0); + GUserEventSource *userEventSource; +}; + + +QT_END_NAMESPACE + +#endif // QLITEEVENTDISPATCHER_GLIB_P_H diff --git a/src/gui/kernel/qeventdispatcher_lite.cpp b/src/gui/kernel/qeventdispatcher_lite.cpp new file mode 100644 index 0000000..39eef96 --- /dev/null +++ b/src/gui/kernel/qeventdispatcher_lite.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformdefs.h" +#include "qapplication.h" +#include "qeventdispatcher_lite_p.h" +#include "private/qeventdispatcher_unix_p.h" +#include "qapplication_p.h" +#ifndef QT_NO_THREAD +# include "qmutex.h" +#endif + +#include +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + +class QEventDispatcherLitePrivate : public QEventDispatcherUNIXPrivate +{ + Q_DECLARE_PUBLIC(QEventDispatcherLite) +public: + inline QEventDispatcherLitePrivate() + { } +}; + + +QEventDispatcherLite::QEventDispatcherLite(QObject *parent) + : QEventDispatcherUNIX(*new QEventDispatcherLitePrivate, parent) +{ } + +QEventDispatcherLite::~QEventDispatcherLite() +{ } + + + +//#define ZERO_FOR_THE_MOMENT + +bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) +{ + Q_D(QEventDispatcherLite); + int nevents = 0; + + // handle gui and posted events + d->interrupt = false; + QApplication::sendPostedEvents(); + + while (!d->interrupt) { // also flushes output buffer ###can be optimized + QApplicationPrivate::UserEvent *event; + if (!(flags & QEventLoop::ExcludeUserInputEvents) + && QApplicationPrivate::userEventsQueued() > 0) { + // process a pending user input event + event = QApplicationPrivate::getUserEvent(); + } else { + break; + } + + if (filterEvent(event)) { + delete event; + continue; + } + nevents++; + + QApplicationPrivate::processUserEvent(event); + delete event; + } + + if (!d->interrupt) { + if (QEventDispatcherUNIX::processEvents(flags)) + return true; + } + return (nevents > 0); +} + +bool QEventDispatcherLite::hasPendingEvents() +{ + extern uint qGlobalPostedEventsCount(); // from qapplication.cpp + return qGlobalPostedEventsCount() || QApplicationPrivate::userEventsQueued();; +} + +void QEventDispatcherLite::startingUp() +{ + +} + +void QEventDispatcherLite::closingDown() +{ + +} + +void QEventDispatcherLite::flush() +{ + if(qApp) + qApp->sendPostedEvents(); +} + + +int QEventDispatcherLite::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + timeval *timeout) +{ + return QEventDispatcherUNIX::select(nfds, readfds, writefds, exceptfds, timeout); +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qeventdispatcher_lite_p.h b/src/gui/kernel/qeventdispatcher_lite_p.h new file mode 100644 index 0000000..c098e6c --- /dev/null +++ b/src/gui/kernel/qeventdispatcher_lite_p.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QEVENTDISPATCHER_LITE_P_H +#define QEVENTDISPATCHER_LITE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "private/qeventdispatcher_unix_p.h" + +QT_BEGIN_NAMESPACE + +class QEventDispatcherLitePrivate; + +class QEventDispatcherLite : public QEventDispatcherUNIX +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QEventDispatcherLite) + +public: + explicit QEventDispatcherLite(QObject *parent = 0); + ~QEventDispatcherLite(); + + bool processEvents(QEventLoop::ProcessEventsFlags flags); + bool hasPendingEvents(); + + void flush(); + + void startingUp(); + void closingDown(); + +protected: + int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + timeval *timeout); +}; + +QT_END_NAMESPACE + +#endif // QEVENTDISPATCHER_LITE_P_H diff --git a/src/gui/kernel/qeventdispatcher_qws_p.h b/src/gui/kernel/qeventdispatcher_qws_p.h index 8d8d61c..5a2b016 100644 --- a/src/gui/kernel/qeventdispatcher_qws_p.h +++ b/src/gui/kernel/qeventdispatcher_qws_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -class QEventDispatcherQWSPrivate; +class QEventDispatcherLitePrivate; class QEventDispatcherQWS : public QEventDispatcherUNIX { diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 308af6b..363e91f 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -46,7 +46,6 @@ #include #include #include -#include #include #include @@ -100,6 +99,7 @@ void QLinuxInputMouseHandler::readMouseData() { struct ::input_event buffer[32]; int n = 0; + bool posChanged = false; forever { n = QT_READ(m_fd, reinterpret_cast(buffer) + n, sizeof(buffer) - n); @@ -122,28 +122,34 @@ void QLinuxInputMouseHandler::readMouseData() bool unknown = false; if (data->type == EV_ABS) { - if (data->code == ABS_X) { + if (data->code == ABS_X && m_x != data->value) { m_x = data->value; - } else if (data->code == ABS_Y) { + posChanged = true; + } else if (data->code == ABS_Y && m_y != data->value) { m_y = data->value; + posChanged = true; } else { unknown = true; } } else if (data->type == EV_REL) { if (data->code == REL_X) { m_x += data->value; + posChanged = true; } else if (data->code == REL_Y) { m_y += data->value; + posChanged = true; } else if (data->code == ABS_WHEEL) { // vertical scroll // data->value: 1 == up, -1 == down int delta = 120 * data->value; - QWheelEvent we(QPoint(m_x, m_y), QPoint(m_x, m_y), delta, m_buttons, Qt::NoModifier, Qt::Vertical); - QApplicationPrivate::handleWheelEvent(0, we); + QApplicationPrivate::handleWheelEvent(0, QPoint(m_x, m_y), + QPoint(m_x, m_y), + delta, Qt::Vertical); } else if (data->code == ABS_THROTTLE) { // horizontal scroll // data->value: 1 == right, -1 == left int delta = 120 * -data->value; - QWheelEvent we(QPoint(m_x, m_y), QPoint(m_x, m_y), delta, m_buttons, Qt::NoModifier, Qt::Horizontal); - QApplicationPrivate::handleWheelEvent(0, we); + QApplicationPrivate::handleWheelEvent(0, QPoint(m_x, m_y), + QPoint(m_x, m_y), + delta, Qt::Horizontal); } else { unknown = true; } @@ -161,17 +167,15 @@ void QLinuxInputMouseHandler::readMouseData() else m_buttons &= ~button; - Qt::KeyboardModifiers modifiers = Qt::NoModifier; //### - QMouseEvent m(data->value ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease, - QPoint(m_x, m_y), QPoint(m_x, m_y), button, m_buttons, modifiers); - QApplicationPrivate::handleMouseEvent(0, m); + QApplicationPrivate::handleMouseEvent(0, QPoint(m_x, m_y), + QPoint(m_x, m_y), m_buttons); } else if (data->type == EV_SYN && data->code == SYN_REPORT) { + if (!posChanged) + continue; + posChanged = false; QPoint pos(m_x, m_y); - Qt::KeyboardModifiers modifiers = Qt::NoModifier; //### - QMouseEvent m(QEvent::MouseMove, QPoint(m_x, m_y), QPoint(m_x, m_y), - Qt::NoButton, m_buttons, modifiers); - QApplicationPrivate::handleMouseEvent(0, m); + QApplicationPrivate::handleMouseEvent(0, pos, pos, m_buttons); // pos = m_handler->transform(pos); //m_handler->limitToScreen(pos); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 17fdd10..8809536 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -109,7 +109,6 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); QPoint p(event.window.x, event.window.y); QPoint globalPos = globalPoint(event); - Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button); Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); QWidget *tlw = tlwMap.value(event.window.window_id); @@ -141,9 +140,7 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) window->UngrabPointer(window); } - //DFB doesn't give keyboardmodifiers on mouseevents - QMouseEvent mouseEvent(type,p,globalPos,button, buttons,(Qt::KeyboardModifiers)0); - QApplicationPrivate::handleMouseEvent(tlw,mouseEvent); + QApplicationPrivate::handleMouseEvent(tlw, p, globalPos, buttons); } void QDirectFbInput::applicationEnd() @@ -156,13 +153,11 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event) { QPoint p(event.window.cx, event.window.cy); QPoint globalPos = globalPoint(event); - Qt::MouseButton button = QDirectFbConvenience::mouseButton(event.window.button); - Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); QWidget *tlw = tlwMap.value(event.window.window_id); - QWheelEvent wheelEvent(p,globalPos,event.window.step*120,buttons,Qt::NoModifier,Qt::Vertical); - QApplicationPrivate::handleWheelEvent(tlw,wheelEvent); - + QApplicationPrivate::handleWheelEvent(tlw, p, globalPos, + event.window.step*120, + Qt::Vertical); } void QDirectFbInput::handleKeyEvents(const DFBEvent &event) @@ -171,9 +166,8 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event) Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol); Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers); - QKeyEvent keyEvent(type,key,modifiers,QChar(event.window.key_symbol)); QWidget *tlw = tlwMap.value(event.window.window_id); - QApplicationPrivate::handleKeyEvent(tlw,&keyEvent); + QApplicationPrivate::handleKeyEvent(tlw, type, key, modifiers, QChar(event.window.key_symbol)); } void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 0afbf2f..26a7675 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -254,9 +254,10 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) bool hor = (((e->button == Button4 || e->button == Button5) && (modifiers & Qt::AltModifier)) || (e->button == 6 || e->button == 7)); - QWheelEvent we(QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), delta, - buttons, modifiers, hor ? Qt::Horizontal : Qt::Vertical); - QApplicationPrivate::handleWheelEvent(window(),we); + QApplicationPrivate::handleWheelEvent(window(), + QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + delta, hor ? Qt::Horizontal : Qt::Vertical); } return; } @@ -264,18 +265,12 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) } } - if (type == QEvent::MouseButtonPress && mousePoint != QPoint(e->x_root, e->y_root)) { - //we've missed a mouse move event somewhere (maybe because we - //haven't implemented mouse tracking yet); let's synthesize it. - QMouseEvent me(QEvent::MouseMove, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), - Qt::NoButton, buttons, modifiers); - QApplicationPrivate::handleMouseEvent(window(), me); - } - buttons ^= button; // X event uses state *before*, Qt uses state *after* - QMouseEvent me(type, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), button, buttons, modifiers); - QApplicationPrivate::handleMouseEvent(window(), me); + QApplicationPrivate::handleMouseEvent(window(), QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + buttons); + mousePoint = QPoint(e->x_root, e->y_root); } @@ -587,14 +582,12 @@ void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) // qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers; if (qtcode) { - QKeyEvent keyEvent(type, qtcode, modifiers); - QApplicationPrivate::handleKeyEvent(window(), &keyEvent); + QApplicationPrivate::handleKeyEvent(window(), type, qtcode, modifiers); } else if (chars[0]) { int qtcode = chars.toUpper()[0]; //Not exactly right... if (modifiers & Qt::ControlModifier && qtcode < ' ') qtcode = chars[0] + '@'; - QKeyEvent keyEvent(type, qtcode, modifiers, QString::fromLatin1(chars)); - QApplicationPrivate::handleKeyEvent(window(), &keyEvent); + QApplicationPrivate::handleKeyEvent(window(), type, qtcode, modifiers, QString::fromLatin1(chars)); } else { qWarning() << "unknown X keycode" << hex << e->keycode << keySym; } diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index db87d92..76e029d 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -68,7 +68,7 @@ public: unsigned long whitePixel() { return WhitePixel(display, screen); } bool handleEvent(XEvent *xe); - QImage grabWindow(Window w, int x, int y, int w, int h); + QImage grabWindow(Window window, int x, int y, int w, int h); public slots: void eventDispatcher(); diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index 9576d10..490ca02 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -399,10 +399,6 @@ void QVNCServer::init(uint port) qvnc_cursor = 0; #endif encoder = 0; - - eventTimer.setInterval(0); - eventTimer.setSingleShot(true); - connect(&eventTimer, SIGNAL(timeout()), this, SLOT(sendInputEvents())); } QVNCServer::~QVNCServer() @@ -833,35 +829,6 @@ static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::Mo return false; } -void QVNCServer::sendInputEvents() -{ - EventPair pair; - QMouseEvent *me; - QKeyEvent *ke; - QWheelEvent *we; - - while(!eventList.isEmpty()) { - pair = eventList.takeFirst(); - switch(pair.first) { - case MouseEvent: - me = static_cast(pair.second); - QApplicationPrivate::handleMouseEvent(0, *me); - delete me; - break; - case KeyboardEvent: - ke = static_cast(pair.second); - QApplicationPrivate::handleKeyEvent(0, ke); - delete ke; - break; - case WheelEvent: - we = static_cast(pair.second); - QApplicationPrivate::handleWheelEvent(0, *we); - delete we; - break; - } - } -} - void QVNCServer::pointerEvent() { QRfbPointerEvent ev; @@ -870,7 +837,6 @@ void QVNCServer::pointerEvent() // QWSServer::sendMouseEvent(offset + QPoint(ev.x, ev.y), ev.buttons); - EventPair pair; //qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons; if (ev.wheelDirection == ev.WheelNone) { QEvent::Type type = QEvent::MouseMove; @@ -878,10 +844,7 @@ void QVNCServer::pointerEvent() bool isPress; if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - QMouseEvent * me = new QMouseEvent(type, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), button, ev.buttons, keymod); - pair.first = MouseEvent; - pair.second = me; - buttons = ev.buttons; + QApplicationPrivate::handleMouseEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), ev.buttons); } else { // No buttons or motion reported at the same time as wheel events Qt::Orientation orientation; @@ -890,13 +853,8 @@ void QVNCServer::pointerEvent() else orientation = Qt::Vertical; int delta = 120 * ((ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelUp) ? 1 : -1); - QWheelEvent *we = new QWheelEvent(QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, buttons, keymod, orientation); - pair.first = WheelEvent; - pair.second = we; + QApplicationPrivate::handleWheelEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, orientation); } - eventList.append(pair); - if (!eventTimer.isActive()) - eventTimer.start(); handleMsg = false; } } @@ -921,13 +879,7 @@ void QVNCServer::keyEvent() QString str; if (ev.unicode && ev.unicode != 0xffff) str = QString(ev.unicode); - QKeyEvent *keyEvent = new QKeyEvent(type, ev.keycode, keymod, str); - EventPair pair; - pair.first = KeyboardEvent; - pair.second = keyEvent; - eventList.append(pair); - if (!eventTimer.isActive()) - eventTimer.start(); + QApplicationPrivate::handleKeyEvent(0, type, ev.keycode, keymod, str); } handleMsg = false; } diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h index 7532cb4..4fcdbae 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ b/src/plugins/graphicssystems/vnc/qvncserver.h @@ -526,11 +526,6 @@ private: QRfbEncoder *encoder; QVNCCursor *cursor; - - enum EventType { MouseEvent, KeyboardEvent, WheelEvent }; - QTimer eventTimer; - typedef QPair EventPair; - QList eventList; }; -- cgit v0.12 From 5bc4ed0c33bad23ce2988e74ae8e7f9a4e5a3250 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 27 Jan 2010 15:02:54 +0100 Subject: Fix QPixmap::fill autotest and cachekey autotest Also make sure it didn't failed with a QFATAL when drawing bitmaps and tried to make sure all surfaces er unlocked when opperations are being performed on them from the windowsurface. There are still test failuers :( --- src/gui/image/qpixmap_blitter.cpp | 35 ++++++++++++++++++++-- src/gui/painting/qpaintengine_blitter.cpp | 2 ++ .../minimaldfb/qblitter_directfb.cpp | 2 ++ .../minimaldfb/qdirectfbconvenience.cpp | 12 ++++---- .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 2 ++ .../minimaldfb/qwindowsurface_minimaldfb.cpp | 7 +++-- .../minimaldfb/qwindowsurface_minimaldfb.h | 2 ++ 7 files changed, 52 insertions(+), 10 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 175c234..6e34fbd 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -5,9 +5,14 @@ #include #include +#include + +static int global_ser_no = 0; + QBlittablePixmapData::QBlittablePixmapData(QPixmapData::PixelType type) : QPixmapData(type,BlitterClass), m_engine(0), m_blittable(0) { + setSerialNumber(++global_ser_no); } QBlittablePixmapData::~QBlittablePixmapData() @@ -21,7 +26,6 @@ QBlittable *QBlittablePixmapData::blittable() const if (!m_blittable) { QBlittablePixmapData *that = const_cast(this); that->m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,w,h)); - that->setSerialNumber(m_blittable->lock()->serialNumber()); } return m_blittable; @@ -77,11 +81,36 @@ int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const void QBlittablePixmapData::fill(const QColor &color) { + //jlind: todo: change when blittables can support non opaque fillRects if (color.alpha() == 255 && blittable()->capabilities() & QBlittable::SolidRectCapability) { blittable()->unlock(); blittable()->fillRect(QRectF(0,0,w,h),color); - }else - blittable()->lock()->fill(color.rgba()); + }else { + uint pixel; + switch (blittable()->lock()->format()) { + case QImage::Format_ARGB32_Premultiplied: + pixel = PREMUL(color.rgba()); + break; + case QImage::Format_ARGB8565_Premultiplied: + pixel = qargb8565(color.rgba()).rawValue(); + break; + case QImage::Format_ARGB8555_Premultiplied: + pixel = qargb8555(color.rgba()).rawValue(); + break; + case QImage::Format_ARGB6666_Premultiplied: + pixel = qargb6666(color.rgba()).rawValue(); + break; + case QImage::Format_ARGB4444_Premultiplied: + pixel = qargb4444(color.rgba()).rawValue(); + break; + default: + pixel = color.rgba(); + break; + } + //so premultiplied formats are supported and ARGB32 and RGB32 + blittable()->lock()->fill(pixel); + } + } QImage *QBlittablePixmapData::buffer() diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 0f6b5cf..1a1d5e0 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -63,6 +63,8 @@ public: bool canBlitterDrawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) const { + if (pm.pixmapData()->classId() != QPixmapData::BlitterClass) + return false; if ((!drawPixmapState) || drawPixmapState & drawPixmapMask) { if (m_capabilities & (QBlittable::SourceOverPixmapCapability | QBlittable::SourceOverScaledPixmapCapability)) { diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index c2e4b4f..ded57d3 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -33,6 +33,7 @@ QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) QDirectFbBlitter::~QDirectFbBlitter() { + unlock(); m_surface->Release(m_surface); } @@ -55,6 +56,7 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con Q_ASSERT(data->classId() == QPixmapData::BlitterClass); QBlittablePixmapData *blitPm = static_cast(data); QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); + dfbBlitter->unlock(); IDirectFBSurface *s = dfbBlitter->m_surface; diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index 57d03fc..8594c09 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -5,11 +5,13 @@ IDirectFB *QDirectFbConvenience::dfbInterface() { - IDirectFB *dfb; - DFBResult result = DirectFBCreate(&dfb); - if (result != DFB_OK) { - DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result); - return 0; + static IDirectFB *dfb = 0; + if (!dfb) { + DFBResult result = DirectFBCreate(&dfb); + if (result != DFB_OK) { + DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result); + return 0; + } } return dfb; } diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index f1f2215..06ae800 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -130,6 +130,8 @@ QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() } delete[] argv; + //init directfb + QDirectFbConvenience::dfbInterface(); mPrimaryScreen = new QDirectFbGraphicsSystemScreen(0); mScreens.append(mPrimaryScreen); diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 7f3e165..4be61df 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -66,7 +66,7 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *sc qDebug() << "WindowSurface format " << QDirectFbConvenience::imageFormatFromSurfaceFormat(format,caps); - QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); + blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); m_pmdata->setBlittable(blitter); m_pixmap = new QPixmap(m_pmdata); @@ -88,7 +88,7 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const Q_UNUSED(widget); Q_UNUSED(offset); - m_dfbSurface->Unlock(m_dfbSurface); + blitter->unlock(); const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); @@ -102,6 +102,7 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const void QDirectFbWindowSurface::setGeometry(const QRect &rect) { + blitter->unlock(); QWindowSurface::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), rect.width(), rect.height()); @@ -123,6 +124,7 @@ static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) { + blitter->unlock(); if (!m_dfbSurface || area.isEmpty()) return false; m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); @@ -150,6 +152,7 @@ void QDirectFbWindowSurface::endPaint(const QRegion ®ion) void QDirectFbWindowSurface::setVisible(bool visible) { + blitter->unlock(); if (visible) { int x = this->geometry().x(); int y = this->geometry().y(); diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index f74fb29..088aeba 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE class QDirectFbGraphicsSystemScreen; +class QDirectFbBlitter; class QDirectFbWindowSurface : public QWindowSurface { @@ -80,6 +81,7 @@ private: IDirectFBWindow *m_dfbWindow; IDirectFBSurface *m_dfbSurface; + QDirectFbBlitter *blitter; }; QT_END_NAMESPACE -- cgit v0.12 From 8ef9ec9f2ca3e4c590330aec234a7bf1b4410252 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 27 Jan 2010 15:36:45 +0100 Subject: double click events --- src/gui/kernel/qapplication_lite.cpp | 26 +++++++++++++++++++++++--- src/gui/kernel/qapplication_p.h | 35 +++++++++++++++++++++++++---------- 2 files changed, 48 insertions(+), 13 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 4242ff7..42932ba 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -78,6 +78,12 @@ QPointer qt_last_mouse_receiver = 0; QList QApplicationPrivate::userEventQueue; static Qt::KeyboardModifiers modifiers = Qt::NoModifier; static Qt::MouseButtons buttons = Qt::NoButton; +static ulong mousePressTime; +static Qt::MouseButton mousePressButton = Qt::NoButton; +static int mousePressX; +static int mousePressY; +static int mouse_double_click_distance = 5; +QTime QApplicationPrivate::time; void QApplicationPrivate::processUserEvent(UserEvent *e) { @@ -555,7 +561,7 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) // move first Qt::MouseButtons stateChange = e->buttons ^ buttons; if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { - MouseEvent * newMouseEvent = new MouseEvent(e->tlw, e->localPos, e->globalPos, e->buttons); + MouseEvent * newMouseEvent = new MouseEvent(e->tlw, e->timestamp, e->localPos, e->globalPos, e->buttons); userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop stateChange = Qt::NoButton; } @@ -571,6 +577,9 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) type = QEvent::MouseMove; qt_last_x = globalPoint.x(); qt_last_y = globalPoint.y(); + if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance|| + qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance) + mousePressButton = Qt::NoButton; } else { // check to see if a new button has been pressed/released for (int check = Qt::LeftButton; @@ -586,8 +595,19 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) return; } buttons = e->buttons; - if (button & e->buttons) - type = QEvent::MouseButtonPress; + if (button & e->buttons) { + if ((e->timestamp - mousePressTime) < static_cast(QApplication::doubleClickInterval()) && button == mousePressButton) { + type = QEvent::MouseButtonDblClick; + mousePressButton = Qt::NoButton; + } + else { + type = QEvent::MouseButtonPress; + mousePressTime = e->timestamp; + mousePressButton = button; + mousePressX = qt_last_x; + mousePressY = qt_last_y; + } + } else type = QEvent::MouseButtonRelease; } diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 955a3fc..a2bded4 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -68,6 +68,7 @@ #include "QtGui/private/qshortcutmap_p.h" #include #include "QtCore/qpoint.h" +#include #ifdef Q_WS_QWS #include "QtGui/qscreen_qws.h" #include @@ -565,18 +566,20 @@ public: #endif #ifdef Q_WS_LITE + static QTime time; class UserEvent { public: - UserEvent(QWidget *w) { tlw = w; } + UserEvent(QWidget *w, QEvent::Type t, ulong time) { tlw = w; type = t; timestamp = time; } QWidget * tlw; QEvent::Type type; + unsigned long timestamp; }; class MouseEvent : public UserEvent { public: - MouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) - : UserEvent(w){ localPos = local; globalPos = global; buttons = b; type = QEvent::MouseMove; } + MouseEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b) + : UserEvent(w, QEvent::MouseMove, time){ localPos = local; globalPos = global; buttons = b; } QPoint localPos; QPoint globalPos; Qt::MouseButtons buttons; @@ -584,8 +587,8 @@ public: class WheelEvent : public UserEvent { public: - WheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) - : UserEvent(w) { localPos = local; globalPos = global; delta = d; orient = o; type = QEvent::Wheel; } + WheelEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) + : UserEvent(w, QEvent::Wheel, time) { localPos = local; globalPos = global; delta = d; orient = o; } int delta; QPoint localPos; QPoint globalPos; @@ -594,8 +597,8 @@ public: class KeyEvent : public UserEvent { public: - KeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) - :UserEvent(w){ type = t; key = k; unicode = text; repeat = autorep; repeatCount = count; modifiers = mods; } + KeyEvent(QWidget *w, QEvent::Type t, ulong time, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) + :UserEvent(w, t, time){ key = k; unicode = text; repeat = autorep; repeatCount = count; modifiers = mods; } int key; QString unicode; bool repeat; @@ -604,17 +607,29 @@ public: }; static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { - MouseEvent * e = new MouseEvent(w, local, global, b); + handleMouseEvent(w, local, global, b, time.elapsed()); + } + + static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b, ulong timestamp) { + MouseEvent * e = new MouseEvent(w, timestamp, local, global, b); queueUserEvent(e); } static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { - KeyEvent * e = new KeyEvent(w, t, k, mods, text, autorep, count); + handleKeyEvent(w, t, time.elapsed(), k, mods, text, autorep, count); + } + + static void handleKeyEvent(QWidget *w, QEvent::Type t, ulong timestamp, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { + KeyEvent * e = new KeyEvent(w, t, timestamp, k, mods, text, autorep, count); queueUserEvent(e); } static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { - WheelEvent *e = new WheelEvent(w, local, global, d, o); + handleWheelEvent(w, time.elapsed(), local, global, d, o); + } + + static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { + WheelEvent *e = new WheelEvent(w, timestamp, local, global, d, o); queueUserEvent(e); } -- cgit v0.12 From 00de571cfaba6eca36fea49a820b6af7111c450c Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 27 Jan 2010 16:41:37 +0100 Subject: make timestamp the second argument for QApplicationPrivate::handleMouseEvent() --- src/gui/kernel/qapplication_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index a2bded4..0741148 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -610,7 +610,7 @@ public: handleMouseEvent(w, local, global, b, time.elapsed()); } - static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b, ulong timestamp) { + static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { MouseEvent * e = new MouseEvent(w, timestamp, local, global, b); queueUserEvent(e); } -- cgit v0.12 From 5a14ca2ad6c601eeff4ed24085d10a7a57b9ebd9 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 27 Jan 2010 16:47:35 +0100 Subject: make timestamp the second argument ... part 2 --- src/gui/kernel/qapplication_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 0741148..75bc5bd 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -607,7 +607,7 @@ public: }; static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { - handleMouseEvent(w, local, global, b, time.elapsed()); + handleMouseEvent(w, time.elapsed(), local, global, b); } static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { -- cgit v0.12 From 03d4a4c11688e0338cad713c2b50aec4122824d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 28 Jan 2010 10:04:14 +0100 Subject: Minimaldfb: Make sure the right blitter is used in the windowsurface --- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 19 +++++++++++-------- .../minimaldfb/qwindowsurface_minimaldfb.h | 2 -- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 4be61df..1cb33f7 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -66,7 +66,7 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *sc qDebug() << "WindowSurface format " << QDirectFbConvenience::imageFormatFromSurfaceFormat(format,caps); - blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); m_pmdata->setBlittable(blitter); m_pixmap = new QPixmap(m_pmdata); @@ -88,7 +88,8 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const Q_UNUSED(widget); Q_UNUSED(offset); - blitter->unlock(); + m_pmdata->blittable()->unlock(); + const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); @@ -102,16 +103,16 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const void QDirectFbWindowSurface::setGeometry(const QRect &rect) { - blitter->unlock(); + m_pmdata->blittable()->unlock(); + QWindowSurface::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), rect.width(), rect.height()); //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable m_dfbSurface->AddRef(m_dfbSurface); - QBlittable *blittabler = new QDirectFbBlitter(rect,m_dfbSurface); - m_pmdata->setBlittable(blittabler); - + QDirectFbBlitter *blitter = new QDirectFbBlitter(rect,m_dfbSurface); + m_pmdata->setBlittable(blitter); } static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) @@ -124,7 +125,8 @@ static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) { - blitter->unlock(); + m_pmdata->blittable()->unlock(); + if (!m_dfbSurface || area.isEmpty()) return false; m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); @@ -152,7 +154,8 @@ void QDirectFbWindowSurface::endPaint(const QRegion ®ion) void QDirectFbWindowSurface::setVisible(bool visible) { - blitter->unlock(); + m_pmdata->blittable()->unlock(); + if (visible) { int x = this->geometry().x(); int y = this->geometry().y(); diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index 088aeba..f74fb29 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -50,7 +50,6 @@ QT_BEGIN_NAMESPACE class QDirectFbGraphicsSystemScreen; -class QDirectFbBlitter; class QDirectFbWindowSurface : public QWindowSurface { @@ -81,7 +80,6 @@ private: IDirectFBWindow *m_dfbWindow; IDirectFBSurface *m_dfbSurface; - QDirectFbBlitter *blitter; }; QT_END_NAMESPACE -- cgit v0.12 From 85e565c76d6a37d8231e8136d80d85e5fa0608ee Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 28 Jan 2010 11:23:46 +0100 Subject: glib event loop: check that an event is still available before fetching it --- src/gui/kernel/qeventdispatcher_glib_lite.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/kernel/qeventdispatcher_glib_lite.cpp b/src/gui/kernel/qeventdispatcher_glib_lite.cpp index b8d2a5b..6d80823 100644 --- a/src/gui/kernel/qeventdispatcher_glib_lite.cpp +++ b/src/gui/kernel/qeventdispatcher_glib_lite.cpp @@ -76,9 +76,8 @@ static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) { GUserEventSource * source = reinterpret_cast(s); - int i = QApplicationPrivate::userEventsQueued(); QApplicationPrivate::UserEvent * event; - while (i--) { + while (QApplicationPrivate::userEventsQueued()) { event = QApplicationPrivate::getUserEvent(); // send through event filter -- cgit v0.12 From 8733fcea9b9d9d587733613ee116549af0b5f8b5 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 28 Jan 2010 13:35:05 +0100 Subject: Don't crash when mouse grabber widget gets deleted --- src/gui/kernel/qapplication_lite.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 42932ba..efabf14 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -555,7 +555,7 @@ void QApplicationPrivate::handleLeaveEvent(QWidget *tlw) void QApplicationPrivate::processMouseEvent(MouseEvent *e) { // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); - static QWidget *implicit_mouse_grabber=0; + static QPointer implicit_mouse_grabber; QEvent::Type type; // move first -- cgit v0.12 From 77dadcc0824ba4c4900f6f3e3290772800ec1719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 28 Jan 2010 14:30:38 +0100 Subject: Minimaldfb: Making sure removing tlw doesn't cause crash --- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 25 ++++++++++- .../graphicssystems/minimaldfb/qdirectfbinput.h | 5 ++- .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 48 ++-------------------- .../minimaldfb/qgraphicssystem_minimaldfb.h | 4 -- .../minimaldfb/qwindowsurface_minimaldfb.cpp | 43 ++++++++++++++----- .../minimaldfb/qwindowsurface_minimaldfb.h | 4 +- 6 files changed, 63 insertions(+), 66 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 8809536..8e288ba 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -42,8 +42,17 @@ void InputSocketWaiter::run() m_cleanupMutex.unlock(); } -QDirectFbInput::QDirectFbInput(QObject *parent) - : QObject(parent) +QDirectFbInput *QDirectFbInput::instance() +{ + static QDirectFbInput *input = 0; + if (!input) { + input = new QDirectFbInput(); + } + return input; +} + +QDirectFbInput::QDirectFbInput() + : QObject() { dfbInterface = QDirectFbConvenience::dfbInterface(); @@ -68,6 +77,18 @@ void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) window->AttachEventBuffer(window,eventBuffer); } +void QDirectFbInput::removeWindow(QWidget *tlw) +{ + DFBWindowID id = tlwMap.key(tlw,0); + if (id) { + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,id, &window); + + window->DetachEventBuffer(window,eventBuffer); + tlwMap.remove(id); + } +} + void QDirectFbInput::handleEvents() { DFBResult hasEvent = eventBuffer->HasEvent(eventBuffer); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h index 74ccee2..31aa082 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h @@ -33,15 +33,16 @@ class QDirectFbInput : public QObject { Q_OBJECT public: - QDirectFbInput(QObject *parent = 0); - + static QDirectFbInput *instance(); void addWindow(DFBWindowID id, QWidget *tlw); + void removeWindow(QWidget *tlw); public slots: void handleEvents(); void applicationEnd(); private: + QDirectFbInput(); void handleMouseEvents(const DFBEvent &event); void handleWheelEvent(const DFBEvent &event); diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index 06ae800..4489e31 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) - :QGraphicsSystemScreen() , m_input(this) + :QGraphicsSystemScreen() { m_layer = QDirectFbConvenience::dfbDisplayLayer(display); m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); @@ -64,56 +64,19 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) m_layer->GetConfiguration(m_layer, &config); m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); - qDebug() << QDirectFbConvenience::pixelFomatHasAlpha(config.pixelformat); - qDebug() << QDirectFbConvenience::colorDepthForSurface(config.pixelformat); - qDebug() << "GraphcisSystemScreen has format: " << m_format; m_geometry = QRect(0,0,config.width,config.height); const int dpi = 72; const qreal inch = 25.4; m_depth = 32; m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); + + cursor = new QDirectFBCursor(this); } QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen() { } -IDirectFBWindow *QDirectFbGraphicsSystemScreen::createWindow(const QRect &rect, QWidget *tlw) -{ - IDirectFBWindow *window; - - DFBWindowDescription description; - memset(&description,0,sizeof(DFBWindowDescription)); - description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS -#if DIRECTFB_MINOR_VERSION >= 1 - |DWDESC_OPTIONS -#endif - |DWDESC_CAPS); - description.width = rect.width(); - description.height = rect.height(); - description.posx = rect.x(); - description.posy = rect.y(); -#if DIRECTFB_MINOR_VERSION >= 1 - description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); -#endif - description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); - description.surface_caps = DSCAPS_PREMULTIPLIED; - - DFBResult result = m_layer->CreateWindow(m_layer,&description,&window); - if (result != DFB_OK) { - DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); - } - - DFBWindowID id; - window->GetID(window, &id); - m_input.addWindow(id,tlw); - - cursor = new QDirectFBCursor(this); - - return window; -} - - QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() { const QStringList args = QCoreApplication::arguments(); @@ -130,9 +93,6 @@ QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() } delete[] argv; - //init directfb - QDirectFbConvenience::dfbInterface(); - mPrimaryScreen = new QDirectFbGraphicsSystemScreen(0); mScreens.append(mPrimaryScreen); } @@ -147,7 +107,7 @@ QPixmapData *QDirectFbGraphicsSystem::createPixmapData(QPixmapData::PixelType ty QWindowSurface *QDirectFbGraphicsSystem::createWindowSurface(QWidget *widget) const { - return new QDirectFbWindowSurface (mPrimaryScreen, widget); + return new QDirectFbWindowSurface (widget); } QBlittable *QDirectFbGraphicsSystem::createBlittable(const QRect &rect) const diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index 892bc58..b16153d 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -63,16 +63,12 @@ public: QImage::Format format() const { return m_format; } QSize physicalSize() const { return m_physicalSize; } - IDirectFBWindow *createWindow(const QRect &,QWidget *tlw); - public: QRect m_geometry; int m_depth; QImage::Format m_format; QSize m_physicalSize; - QDirectFbInput m_input; - IDirectFBDisplayLayer *m_layer; private: diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 1cb33f7..9a424cd 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -49,23 +49,43 @@ QT_BEGIN_NAMESPACE -QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), m_screen(screen), m_pixmap(0), m_pmdata(0), +QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) + : QWindowSurface(window), m_pixmap(0), m_pmdata(0), m_dfbWindow(0), m_dfbSurface(0) { window->setWindowSurface(this); - m_dfbWindow = m_screen->createWindow(window->rect(),window); - m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); - DFBSurfaceCapabilities caps; - m_dfbSurface->GetCapabilities(m_dfbSurface, &caps); - DFBSurfacePixelFormat format; - m_dfbSurface->GetPixelFormat(m_dfbSurface, &format); - qDebug() << QDirectFbConvenience::pixelFomatHasAlpha(format); - qDebug() << QDirectFbConvenience::colorDepthForSurface(format); - qDebug() << "WindowSurface format " << QDirectFbConvenience::imageFormatFromSurfaceFormat(format,caps); + DFBWindowDescription description; + memset(&description,0,sizeof(DFBWindowDescription)); + description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS +#if DIRECTFB_MINOR_VERSION >= 1 + |DWDESC_OPTIONS +#endif + |DWDESC_CAPS); + description.width = window->rect().width(); + description.height = window->rect().height(); + description.posx = window->rect().x(); + description.posy = window->rect().y(); +#if DIRECTFB_MINOR_VERSION >= 1 + description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); +#endif + description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); + description.surface_caps = DSCAPS_PREMULTIPLIED; + + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); + DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); + if (result != DFB_OK) { + DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); + } + + DFBWindowID id; + m_dfbWindow->GetID(m_dfbWindow, &id); + QDirectFbInput::instance()->addWindow(id,window); + + m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); m_pmdata->setBlittable(blitter); @@ -76,6 +96,7 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QDirectFbGraphicsSystemScreen *sc QDirectFbWindowSurface::~QDirectFbWindowSurface() { + QDirectFbInput::instance()->removeWindow(this->window()); } QPaintDevice *QDirectFbWindowSurface::paintDevice() diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index f74fb29..f6d48c6 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -54,8 +54,7 @@ class QDirectFbGraphicsSystemScreen; class QDirectFbWindowSurface : public QWindowSurface { public: - QDirectFbWindowSurface - (QDirectFbGraphicsSystemScreen *screen, QWidget *window); + QDirectFbWindowSurface(QWidget *window); ~QDirectFbWindowSurface(); QPaintDevice *paintDevice(); @@ -74,7 +73,6 @@ public: private: void lockSurfaceToImage(); - QDirectFbGraphicsSystemScreen *m_screen; QPixmap *m_pixmap; QBlittablePixmapData *m_pmdata; -- cgit v0.12 From 112a81b92ed7a45c9d1ae461eb6aa61e0ca45e8f Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 28 Jan 2010 15:59:05 +0100 Subject: Fix keyboard modifier state. --- .../testlite/qwindowsurface_testlite.cpp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 26a7675..cbb720e 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -562,6 +562,22 @@ static int lookupCode(unsigned int xkeycode) } +static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) +{ + switch (qtcode) { + case Qt::Key_Control: + return Qt::ControlModifier; + case Qt::Key_Alt: + return Qt::AltModifier; + case Qt::Key_Shift: + return Qt::ShiftModifier; + case Qt::Key_Meta: + return Qt::MetaModifier; + default: + return Qt::NoModifier; + } +} + void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) { XKeyEvent *e = static_cast(ev); @@ -581,6 +597,10 @@ void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) int qtcode = lookupCode(keySym); // qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers; + //X11 specifies state *before*, Qt expects state *after* the event + + modifiers ^= modifierFromKeyCode(qtcode); + if (qtcode) { QApplicationPrivate::handleKeyEvent(window(), type, qtcode, modifiers); } else if (chars[0]) { -- cgit v0.12 From ceb4feb8f5c65aa15213bc01dbf1268f3bc7119e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 28 Jan 2010 17:36:51 +0100 Subject: Make tlw update when resizing --- src/gui/kernel/qwidget_lite.cpp | 2 ++ .../graphicssystems/testlite/qwindowsurface_testlite.cpp | 14 +------------- .../graphicssystems/testlite/qwindowsurface_testlite.h | 1 - 3 files changed, 3 insertions(+), 14 deletions(-) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 8601855..3913708 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -507,6 +507,8 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) if (isResize) { QResizeEvent e(r.size(), olds); QApplication::sendEvent(q, &e); + if (q->isWindow()) + q->update(); } } else { // not visible if (isMove && q->pos() != oldPos) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index cbb720e..65407fd 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -90,24 +90,13 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const } -void QTestLiteWindowSurface::geometryChanged(const QRect &rect) -{ - bool resize = rect.size() != geometry().size(); - QWindowSurface::setGeometry(rect); - - if (resize) { - window()->update(); //### this is the wrong place for this... - } -} - - void QTestLiteWindowSurface::setGeometry(const QRect &rect) { QRect oldRect = geometry(); if (rect == oldRect) return; - QTestLiteWindowSurface::geometryChanged(rect); + QWindowSurface::setGeometry(rect); //if unchanged ### // xw->setSize(rect.width(), rect.height()); @@ -276,7 +265,6 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) void QTestLiteWindowSurface::handleGeometryChange(int x, int y, int w, int h) { - geometryChanged(QRect(x,y,w,h)); QApplicationPrivate::handleGeometryChange(window(), QRect(x,y,w,h)); } diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h index 9f9f052..0c4df1a 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h @@ -62,7 +62,6 @@ public: QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); void setGeometry(const QRect &rect); - void geometryChanged(const QRect &rect); bool scroll(const QRegion &area, int dx, int dy); void beginPaint(const QRegion ®ion); -- cgit v0.12 From 990968b87ef6bee329ba23227b78bac0e58bdd02 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 28 Jan 2010 17:38:18 +0100 Subject: minimaldfb: cleanup in dfb. Not using the DWET_DESTROY event yet in the input driver --- .../graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 9a424cd..422ed14 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -82,21 +82,18 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) m_dfbWindow->GetID(m_dfbWindow, &id); QDirectFbInput::instance()->addWindow(id,window); - - m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); m_pmdata->setBlittable(blitter); m_pixmap = new QPixmap(m_pmdata); - - } QDirectFbWindowSurface::~QDirectFbWindowSurface() { QDirectFbInput::instance()->removeWindow(this->window()); + m_dfbWindow->Destroy(m_dfbWindow); } QPaintDevice *QDirectFbWindowSurface::paintDevice() @@ -106,9 +103,6 @@ QPaintDevice *QDirectFbWindowSurface::paintDevice() void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { - Q_UNUSED(widget); - Q_UNUSED(offset); - m_pmdata->blittable()->unlock(); const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); -- cgit v0.12 From edd4a524c19283674402a7f0611e391358a5cdb4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 1 Feb 2010 12:28:36 +0100 Subject: Send events to popups --- src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 422ed14..d2b038c 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -188,7 +188,6 @@ void QDirectFbWindowSurface::setVisible(bool visible) Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags flags) { switch (flags & Qt::WindowType_Mask) { - case Qt::Popup: case Qt::ToolTip: { DFBWindowOptions options; m_dfbWindow->GetOptions(m_dfbWindow,&options); -- cgit v0.12 From 6fe259f696b5cc302bda6befcefe0a94e2676325 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 1 Feb 2010 11:38:03 +0100 Subject: QWeakPointer is the new QPointer --- src/gui/kernel/qapplication_lite.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index efabf14..8bbc756 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -555,7 +555,7 @@ void QApplicationPrivate::handleLeaveEvent(QWidget *tlw) void QApplicationPrivate::processMouseEvent(MouseEvent *e) { // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); - static QPointer implicit_mouse_grabber; + static QWeakPointer implicit_mouse_grabber; QEvent::Type type; // move first @@ -616,7 +616,7 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) //popup mouse handling is magical... mouseWindow = qApp->activePopupWidget(); - implicit_mouse_grabber = 0; + implicit_mouse_grabber.clear(); //### how should popup mode and implicit mouse grab interact? } else if (e->tlw && app_do_modal && !qt_try_modal(e->tlw, e->type) ) { @@ -657,7 +657,7 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) Q_ASSERT(mouseWindow); mouseWindow->activateWindow(); //focus } else if (implicit_mouse_grabber) { - mouseWidget = implicit_mouse_grabber; + mouseWidget = implicit_mouse_grabber.data(); mouseWindow = mouseWidget->window(); if (mouseWindow != e->tlw) localPoint = mouseWindow->mapFromGlobal(globalPoint); @@ -670,7 +670,7 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) if (buttons == Qt::NoButton) { //qDebug() << "resetting mouse grabber"; - implicit_mouse_grabber = 0; + implicit_mouse_grabber.clear(); } if (mouseWidget != qt_last_mouse_receiver) { -- cgit v0.12 From f4588871d38d244c83e50354da66d145ae40be8f Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 1 Feb 2010 13:42:56 +0100 Subject: Change mouse, key, and wheel events to use a window id instead of a pointer to a QWidget --- src/gui/kernel/qapplication_lite.cpp | 29 ++++++++++++++------ src/gui/kernel/qapplication_p.h | 32 +++++++++++----------- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 18 +++++++----- .../testlite/qwindowsurface_testlite.cpp | 8 +++--- 4 files changed, 51 insertions(+), 36 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 8bbc756..39cc29f 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -561,14 +561,20 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) // move first Qt::MouseButtons stateChange = e->buttons ^ buttons; if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { - MouseEvent * newMouseEvent = new MouseEvent(e->tlw, e->timestamp, e->localPos, e->globalPos, e->buttons); + MouseEvent * newMouseEvent = new MouseEvent(e->id, e->timestamp, e->localPos, e->globalPos, e->buttons); userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop stateChange = Qt::NoButton; } + QWidget * tlw; + if (e->id) + tlw = QWidget::find(e->id); + else + tlw = 0; + QPoint localPoint = e->localPos; QPoint globalPoint = e->globalPos; - QWidget *mouseWindow = e->tlw; + QWidget *mouseWindow = tlw; Qt::MouseButton button = Qt::NoButton; @@ -619,11 +625,11 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) implicit_mouse_grabber.clear(); //### how should popup mode and implicit mouse grab interact? - } else if (e->tlw && app_do_modal && !qt_try_modal(e->tlw, e->type) ) { + } else if (tlw && app_do_modal && !qt_try_modal(tlw, e->type) ) { //even if we're blocked by modality, we should deliver the mouse release event.. //### this code is not completely correct: multiple buttons can be pressed simultaneously if (!(implicit_mouse_grabber && buttons == Qt::NoButton)) { - qDebug() << "modal blocked mouse event to" << e->tlw; + qDebug() << "modal blocked mouse event to" << tlw; return; } } @@ -636,7 +642,7 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) if (!mouseWindow && !implicit_mouse_grabber) mouseWindow = QApplication::desktop(); - if (mouseWindow && mouseWindow != e->tlw) { + if (mouseWindow && mouseWindow != tlw) { //we did not get a sensible localPoint from the window system, so let's calculate it localPoint = mouseWindow->mapFromGlobal(globalPoint); } @@ -659,7 +665,7 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) } else if (implicit_mouse_grabber) { mouseWidget = implicit_mouse_grabber.data(); mouseWindow = mouseWidget->window(); - if (mouseWindow != e->tlw) + if (mouseWindow != tlw) localPoint = mouseWindow->mapFromGlobal(globalPoint); } @@ -705,7 +711,11 @@ void QApplicationPrivate::processWheelEvent(WheelEvent *e) qt_last_x = globalPoint.x(); qt_last_y = globalPoint.y(); - QWidget *mouseWindow = e->tlw; + QWidget *mouseWindow; + if (e->id) + mouseWindow = QWidget::find(e->id); + else + mouseWindow = 0; // find the tlw if we didn't get it from the plugin if (!mouseWindow) { @@ -746,8 +756,9 @@ void QApplicationPrivate::processKeyEvent(KeyEvent *e) } if (!focusW) focusW = QApplication::focusWidget(); - if (!focusW) - focusW = e->tlw; + if (!focusW && e->id) { + focusW = QWidget::find(e->id); + } if (!focusW) focusW = QApplication::activeWindow(); diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 75bc5bd..d07b83b 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -570,16 +570,16 @@ public: class UserEvent { public: - UserEvent(QWidget *w, QEvent::Type t, ulong time) { tlw = w; type = t; timestamp = time; } - QWidget * tlw; + UserEvent(WId w, ulong time, QEvent::Type t) { id = w; type = t; timestamp = time; } + WId id; QEvent::Type type; unsigned long timestamp; }; class MouseEvent : public UserEvent { public: - MouseEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b) - : UserEvent(w, QEvent::MouseMove, time){ localPos = local; globalPos = global; buttons = b; } + MouseEvent(WId w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b) + : UserEvent(w, time, QEvent::MouseMove){ localPos = local; globalPos = global; buttons = b; } QPoint localPos; QPoint globalPos; Qt::MouseButtons buttons; @@ -587,8 +587,8 @@ public: class WheelEvent : public UserEvent { public: - WheelEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) - : UserEvent(w, QEvent::Wheel, time) { localPos = local; globalPos = global; delta = d; orient = o; } + WheelEvent(WId w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) + : UserEvent(w, time, QEvent::Wheel) { localPos = local; globalPos = global; delta = d; orient = o; } int delta; QPoint localPos; QPoint globalPos; @@ -597,8 +597,8 @@ public: class KeyEvent : public UserEvent { public: - KeyEvent(QWidget *w, QEvent::Type t, ulong time, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) - :UserEvent(w, t, time){ key = k; unicode = text; repeat = autorep; repeatCount = count; modifiers = mods; } + KeyEvent(WId w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) + :UserEvent(w, time, t){ key = k; unicode = text; repeat = autorep; repeatCount = count; modifiers = mods; } int key; QString unicode; bool repeat; @@ -606,29 +606,29 @@ public: Qt::KeyboardModifiers modifiers; }; - static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { + static void handleMouseEvent(WId w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { handleMouseEvent(w, time.elapsed(), local, global, b); } - static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { + static void handleMouseEvent(WId w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { MouseEvent * e = new MouseEvent(w, timestamp, local, global, b); queueUserEvent(e); } - static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { - handleKeyEvent(w, t, time.elapsed(), k, mods, text, autorep, count); + static void handleKeyEvent(WId w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { + handleKeyEvent(w, time.elapsed(), t, k, mods, text, autorep, count); } - static void handleKeyEvent(QWidget *w, QEvent::Type t, ulong timestamp, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { - KeyEvent * e = new KeyEvent(w, t, timestamp, k, mods, text, autorep, count); + static void handleKeyEvent(WId w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { + KeyEvent * e = new KeyEvent(w, timestamp, t, k, mods, text, autorep, count); queueUserEvent(e); } - static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { + static void handleWheelEvent(WId w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { handleWheelEvent(w, time.elapsed(), local, global, d, o); } - static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { + static void handleWheelEvent(WId w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { WheelEvent *e = new WheelEvent(w, timestamp, local, global, d, o); queueUserEvent(e); } diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 8e288ba..6229b46 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -137,13 +137,14 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) IDirectFBWindow *window; layer->GetWindow(layer,event.window.window_id,&window); + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + timestamp /= 1000; + if (event.window.type == DWET_BUTTONDOWN) { static long prevTime = 0; static QWidget *prevWindow; static int prevX = -999; static int prevY = -999; - long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - timestamp /= 1000; if (tlw == prevWindow && timestamp - prevTime < QApplication::doubleClickInterval() && qAbs(event.window.cx - prevX) < 5 && qAbs(event.window.cy - prevY) < 5) { @@ -161,7 +162,7 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) window->UngrabPointer(window); } - QApplicationPrivate::handleMouseEvent(tlw, p, globalPos, buttons); + QApplicationPrivate::handleMouseEvent(event.window.window_id, timestamp, p, globalPos, buttons); } void QDirectFbInput::applicationEnd() @@ -174,9 +175,10 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event) { QPoint p(event.window.cx, event.window.cy); QPoint globalPos = globalPoint(event); - QWidget *tlw = tlwMap.value(event.window.window_id); + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + timestamp /= 1000; - QApplicationPrivate::handleWheelEvent(tlw, p, globalPos, + QApplicationPrivate::handleWheelEvent(event.window.window_id, timestamp, p, globalPos, event.window.step*120, Qt::Vertical); } @@ -187,8 +189,10 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event) Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol); Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers); - QWidget *tlw = tlwMap.value(event.window.window_id); - QApplicationPrivate::handleKeyEvent(tlw, type, key, modifiers, QChar(event.window.key_symbol)); + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + timestamp /= 1000; + + QApplicationPrivate::handleKeyEvent(event.window.window_id, timestamp, type, key, modifiers, QChar(event.window.key_symbol)); } void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 65407fd..0d277b8 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -243,7 +243,7 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) bool hor = (((e->button == Button4 || e->button == Button5) && (modifiers & Qt::AltModifier)) || (e->button == 6 || e->button == 7)); - QApplicationPrivate::handleWheelEvent(window(), + QApplicationPrivate::handleWheelEvent(winId(), e->time, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), delta, hor ? Qt::Horizontal : Qt::Vertical); @@ -256,7 +256,7 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) buttons ^= button; // X event uses state *before*, Qt uses state *after* - QApplicationPrivate::handleMouseEvent(window(), QPoint(e->x, e->y), + QApplicationPrivate::handleMouseEvent(winId(), e->time, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), buttons); @@ -590,12 +590,12 @@ void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) modifiers ^= modifierFromKeyCode(qtcode); if (qtcode) { - QApplicationPrivate::handleKeyEvent(window(), type, qtcode, modifiers); + QApplicationPrivate::handleKeyEvent(winId(), e->time, type, qtcode, modifiers); } else if (chars[0]) { int qtcode = chars.toUpper()[0]; //Not exactly right... if (modifiers & Qt::ControlModifier && qtcode < ' ') qtcode = chars[0] + '@'; - QApplicationPrivate::handleKeyEvent(window(), type, qtcode, modifiers, QString::fromLatin1(chars)); + QApplicationPrivate::handleKeyEvent(winId(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); } else { qWarning() << "unknown X keycode" << hex << e->keycode << keySym; } -- cgit v0.12 From 9f761b8d9af22796e7b20fee2a9a464e253cf267 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 1 Feb 2010 16:47:54 +0100 Subject: winId() support for minimaldfb --- .../graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 8 ++++++++ .../graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h | 3 +++ 2 files changed, 11 insertions(+) diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index d2b038c..d51498f 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -212,4 +212,12 @@ void QDirectFbWindowSurface::lower() m_dfbWindow->LowerToBottom(m_dfbWindow); } +WId QDirectFbWindowSurface::winId() const +{ + DFBWindowID id; + m_dfbWindow->GetID(m_dfbWindow, &id); + return WId(id); +} + + QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index f6d48c6..ca34cbf 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -70,6 +70,9 @@ public: void raise(); void lower(); + + WId winId() const; + private: void lockSurfaceToImage(); -- cgit v0.12 From 6a34243acbd6960502efefd1af4a560c245301da Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 1 Feb 2010 18:30:43 +0100 Subject: minimaldfb: dont send all key presses with character --- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 6229b46..cfe1807 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -192,7 +192,11 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event) long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); timestamp /= 1000; - QApplicationPrivate::handleKeyEvent(event.window.window_id, timestamp, type, key, modifiers, QChar(event.window.key_symbol)); + QChar character; + if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE) + character = QChar(event.window.key_symbol); + + QApplicationPrivate::handleKeyEvent(event.window.window_id, timestamp, type, key, modifiers, character); } void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) -- cgit v0.12 From 99ce03ef6c33a670d86706a8a7d701ac25e2e2b5 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 8 Feb 2010 12:53:15 +0100 Subject: Get rid of black flickering on resize --- src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp | 1 + src/plugins/graphicssystems/testlite/x11util.cpp | 9 +++++++-- src/plugins/graphicssystems/testlite/x11util.h | 1 + 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index 0d277b8..d50a59e 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -86,6 +86,7 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this; + xw->painted = true; //there is content in the buffer xw->paintEvent(); } diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 7ad3ed5..20d4241 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -468,7 +468,7 @@ MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) currentCursor = -1; image_info = 0; - + painted = false; } @@ -517,8 +517,11 @@ void MyWindow::closeEvent() void MyWindow::paintEvent() { #ifdef MYX11_DEBUG - qDebug() << "MyWindow::paintEvent" << shm_img.size(); + qDebug() << "MyWindow::paintEvent" << shm_img.size() << painted; #endif + if (!painted) + return; + #ifdef DONT_USE_MIT_SHM // just convert the image every time... if (!shm_img.isNull()) { @@ -596,6 +599,8 @@ void MyWindow::resizeShmImage(int width, int height) Q_ASSERT(shm_attach_status == True); shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); + + painted = false; #endif } diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index 76e029d..184c1ca 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -136,6 +136,7 @@ public: //### QTestLiteWindowSurface *windowSurface; int currentCursor; + bool painted; private: void resizeShmImage(int width, int height); -- cgit v0.12 From ece7ebb01c65ff0930881bff869b99c1f6889fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 5 Feb 2010 12:45:09 +0100 Subject: Second attemt on rasteroverlay in blitterpaintengine --- src/gui/image/qpixmap_blitter.cpp | 106 ++++++++++++++++++++++++++++-- src/gui/image/qpixmap_blitter_p.h | 87 ++++++++++++++++++++++++ src/gui/painting/qpaintengine_blitter.cpp | 97 ++++++++++++--------------- src/gui/painting/qpaintengine_blitter_p.h | 10 ++- 4 files changed, 236 insertions(+), 64 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 6e34fbd..f82a67d 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -1,6 +1,7 @@ #include "qpixmap_blitter_p.h" #include +#include #include #include @@ -11,6 +12,9 @@ static int global_ser_no = 0; QBlittablePixmapData::QBlittablePixmapData(QPixmapData::PixelType type) : QPixmapData(type,BlitterClass), m_engine(0), m_blittable(0) +#ifdef QT_BLITTER_RASTEROVERLAY + ,m_rasterOverlay(0), m_unmergedCopy(0) +#endif //QT_BLITTER_RASTEROVERLAY { setSerialNumber(++global_ser_no); } @@ -19,6 +23,10 @@ QBlittablePixmapData::~QBlittablePixmapData() { delete m_blittable; delete m_engine; +#ifdef QT_BLITTER_RASTEROVERLAY + delete m_rasterOverlay; + delete m_unmergedCopy; +#endif //QT_BLITTER_RASTEROVERLAY } QBlittable *QBlittablePixmapData::blittable() const @@ -132,18 +140,13 @@ void QBlittablePixmapData::fromImage(const QImage &image, Qt::ImageConversionFlags flags) { resize(image.width(),image.height()); + markRasterOverlay(QRect(0,0,w,h)); QImage *thisImg = buffer(); QImage correctFormatPic = image; if (correctFormatPic.format() != thisImg->format()) correctFormatPic = correctFormatPic.convertToFormat(thisImg->format(), flags); - //jl: This does not ALWAYS work as expected :( -// QPainter p(thisImg); -// p.setCompositionMode(QPainter::CompositionMode_Source); -// p.drawImage(0,0,image,flags); - - //So just copy strides by hand uchar *mem = thisImg->bits(); const uchar *bits = correctFormatPic.bits(); int bytesCopied = 0; @@ -163,3 +166,94 @@ QPaintEngine *QBlittablePixmapData::paintEngine() const } return m_engine; } + +#ifdef QT_BLITTER_RASTEROVERLAY + +static bool showRasterOverlay = !qgetenv("QT_BLITTER_RASTEROVERLAY").isEmpty(); + +void QBlittablePixmapData::mergeOverlay() +{ + if (m_unmergedCopy || !showRasterOverlay) + return; + m_unmergedCopy = new QImage(buffer()->copy()); + QPainter p(buffer()); + p.setCompositionMode(QPainter::CompositionMode_SourceOver); + p.drawImage(0,0,*overlay()); + p.end(); +} + +void QBlittablePixmapData::unmergeOverlay() +{ + if (!m_unmergedCopy || !showRasterOverlay) + return; + QPainter p(buffer()); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.drawImage(0,0,*m_unmergedCopy); + p.end(); + + delete m_unmergedCopy; + m_unmergedCopy = 0; +} + +QImage *QBlittablePixmapData::overlay() +{ + if (!m_rasterOverlay|| + m_rasterOverlay->size() != QSize(w,h)){ + m_rasterOverlay = new QImage(w,h,QImage::Format_ARGB32_Premultiplied); + m_rasterOverlay->fill(0x00000000); + uint color = (qrand() % 11)+7; + m_overlayColor = QColor(Qt::GlobalColor(color)); + m_overlayColor.setAlpha(0x88); + + } + return m_rasterOverlay; +} + +void QBlittablePixmapData::markRasterOverlayImpl(const QRectF &rect) +{ + if (!showRasterOverlay) + return; + QRectF transformationRect = clipAndTransformRect(rect); + if(!transformationRect.isEmpty()) { + QPainter p(overlay()); + p.setBrush(m_overlayColor); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.fillRect(transformationRect,QBrush(m_overlayColor)); + } +} + +void QBlittablePixmapData::unmarkRasterOverlayImpl(const QRectF &rect) +{ + if (!showRasterOverlay) + return; + QRectF transformationRect = clipAndTransformRect(rect); + if (!transformationRect.isEmpty()) { + QPainter p(overlay()); + QColor color(0x00,0x00,0x00,0x00); + p.setBrush(color); + p.setCompositionMode(QPainter::CompositionMode_Source); + p.fillRect(transformationRect,QBrush(color)); + } +} + +QRectF QBlittablePixmapData::clipAndTransformRect(const QRectF &rect) const +{ + QRectF transformationRect = rect; + paintEngine(); + if (m_engine->state()) { + transformationRect = m_engine->state()->matrix.mapRect(rect); + const QClipData *clipData = m_engine->clip(); + if (clipData) { + if (clipData->hasRectClip) { + transformationRect &= clipData->clipRect; + } else if (clipData->hasRegionClip) { + const QVector rects = clipData->clipRegion.rects(); + for (int i = 0; i < rects.size(); i++) { + transformationRect &= rects.at(i); + } + } + } + } + return transformationRect; +} +#endif //QT_BLITTER_RASTEROVERLAY diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index ca834dc..73f80a8 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -23,10 +23,97 @@ public: void fromImage(const QImage &image, Qt::ImageConversionFlags flags); QPaintEngine *paintEngine() const; + + void markRasterOverlay(const QRectF &); + void markRasterOverlay(const QPointF &, const QTextItem &); + void markRasterOverlay(const QVectorPath &); + void markRasterOverlay(const QRect *rects, int rectCount); + void markRasterOverlay(const QRectF *rects, int rectCount); + void unmarkRasterOverlay(const QRectF &); + +#ifdef QT_BLITTER_RASTEROVERLAY + void mergeOverlay(); + void unmergeOverlay(); + QImage *overlay(); + +#endif //QT_BLITTER_RASTEROVERLAY protected: QBlitterPaintEngine *m_engine; QBlittable *m_blittable; +#ifdef QT_BLITTER_RASTEROVERLAY + QImage *m_rasterOverlay; + QImage *m_unmergedCopy; + QColor m_overlayColor; + + void markRasterOverlayImpl(const QRectF &); + void unmarkRasterOverlayImpl(const QRectF &); + QRectF clipAndTransformRect(const QRectF &) const; +#endif //QT_BLITTER_RASTEROVERLAY + }; +inline void QBlittablePixmapData::markRasterOverlay(const QRectF &rect) +{ +#ifdef QT_BLITTER_RASTEROVERLAY + markRasterOverlayImpl(rect); +#else + Q_UNUSED(rect) +#endif +} + +inline void QBlittablePixmapData::markRasterOverlay(const QVectorPath &path) +{ +#ifdef QT_BLITTER_RASTEROVERLAY + markRasterOverlayImpl(path.convertToPainterPath().boundingRect()); +#else + Q_UNUSED(path) +#endif +} + +inline void QBlittablePixmapData::markRasterOverlay(const QPointF &pos, const QTextItem &ti) +{ +#ifdef QT_BLITTER_RASTEROVERLAY + QFontMetricsF fm(ti.font()); + QRectF rect = fm.tightBoundingRect(ti.text()); + rect.moveBottomLeft(pos); + markRasterOverlay(rect); +#else + Q_UNUSED(pos) + Q_UNUSED(ti) +#endif +} + +inline void QBlittablePixmapData::markRasterOverlay(const QRect *rects, int rectCount) +{ +#ifdef QT_BLITTER_RASTEROVERLAY + for (int i = 0; i < rectCount; i++) { + markRasterOverlay(rects[i]); + } +#else + Q_UNUSED(rects) + Q_UNUSED(rectCount) +#endif +} +inline void QBlittablePixmapData::markRasterOverlay(const QRectF *rects, int rectCount) +{ +#ifdef QT_BLITTER_RASTEROVERLAY + for (int i = 0; i < rectCount; i++) { + markRasterOverlay(rects[i]); + } +#else + Q_UNUSED(rects) + Q_UNUSED(rectCount) +#endif +} + +inline void QBlittablePixmapData::unmarkRasterOverlay(const QRectF &rect) +{ +#ifdef QT_BLITTER_RASTEROVERLAY + unmarkRasterOverlayImpl(rect); +#else + Q_UNUSED(rect) +#endif +} + #endif // QPIXMAP_BLITTER_P_H diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 1a1d5e0..0e7c96a 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -19,12 +19,6 @@ #define STATE_CLIPSYS_COMPLEX 0x00010000 #define STATE_CLIP_COMPLEX 0x00020000 -//#define RASTEROVERLAY - -#ifdef RASTEROVERLAY -QColor rasterColor(255,0,0,100); -QBrush rasterBrush(rasterColor); -#endif static inline void updateStateBits(uint *state, uint mask, bool on) { @@ -107,9 +101,10 @@ public: updateStateBits(&fillRectMask, STATE_BRUSH_PATTERN, false); updateStateBits(&fillRectMask, STATE_BRUSH_ALPHA, false); - updateStateBits(&fillRectMask, STATE_PEN_ENABLED, false); + updateStateBits(&fillRectMask, STATE_PEN_ENABLED, true); - updateStateBits(&fillRectMask, STATE_ANTIALIASING, false); + //Sub-pixel aliasing should not be sent to the blitter + updateStateBits(&fillRectMask, STATE_ANTIALIASING, true); updateStateBits(&fillRectMask, STATE_ALPHA, false); updateStateBits(&fillRectMask, STATE_BLENDING_COMPLEX, false); @@ -152,30 +147,31 @@ class QBlitterPaintEnginePrivate : public QPaintEngineExPrivate public: QBlitterPaintEnginePrivate(QBlittablePixmapData *p) : QPaintEngineExPrivate(), + pmData(p), isBlitterLocked(false), hasXForm(false) { - blitter= p->blittable(); raster = new QRasterPaintEngine(p->buffer()); - capabillities = new CapabilitiesToStateMask(blitter->capabilities()); + capabillities = new CapabilitiesToStateMask(pmData->blittable()->capabilities()); } inline void lock() { if (!isBlitterLocked) { - raster->d_func()->rasterBuffer->prepare(blitter->lock()); + raster->d_func()->rasterBuffer->prepare(pmData->blittable()->lock()); isBlitterLocked = true; } } inline void unlock() { if (isBlitterLocked) { - blitter->unlock(); + pmData->blittable()->unlock(); isBlitterLocked = false; } } void fillRect(const QRectF &rect, const QColor &color) { + pmData->unmarkRasterOverlay(rect); QRectF targetRect = rect; if (hasXForm) { targetRect = state->matrix.mapRect(rect); @@ -184,14 +180,14 @@ public: if (clipData) { if (clipData->hasRectClip) { unlock(); - blitter->fillRect(targetRect & clipData->clipRect, color); + pmData->blittable()->fillRect(targetRect & clipData->clipRect, color); } else if (clipData->hasRegionClip) { QVector rects = clipData->clipRegion.rects(); for ( int i = 0; i < rects.size(); i++ ) { QRect intersectRect = rects.at(i).intersected(targetRect.toRect()); if (!intersectRect.isEmpty()) { unlock(); - blitter->fillRect(intersectRect,color); + pmData->blittable()->fillRect(intersectRect,color); } } } @@ -200,11 +196,11 @@ public: && targetRect.width() <= raster->paintDevice()->width() && targetRect.height() <= raster->paintDevice()->height()) { unlock(); - blitter->fillRect(targetRect,color); + pmData->blittable()->fillRect(targetRect,color); } else { QRectF deviceRect(0,0,raster->paintDevice()->width(), raster->paintDevice()->height()); unlock(); - blitter->fillRect(deviceRect&targetRect,color); + pmData->blittable()->fillRect(deviceRect&targetRect,color); } } } @@ -222,7 +218,8 @@ public: qreal deltaRight = target.right() - intersectedRect.right(); source.adjust(-deltaLeft,-deltaTop,deltaRight,deltaBottom); } - blitter->drawPixmap(intersectedRect, pm, source); + pmData->unmarkRasterOverlay(intersectedRect); + pmData->blittable()->drawPixmap(intersectedRect, pm, source); } void updateClip() { @@ -235,11 +232,10 @@ public: raster->d_func()->systemStateChanged(); } - QPixmap pixmap; QRasterPaintEngine *raster; QRasterPaintEngineState *state; - QBlittable *blitter; + QBlittablePixmapData *pmData; bool isBlitterLocked; CapabilitiesToStateMask *capabillities; @@ -268,8 +264,11 @@ bool QBlitterPaintEngine::begin(QPaintDevice *pdev) d->raster->setSystemRect(systemRect()); d->raster->setSystemClip(systemClip()); - + setActive(true); bool ok = d->raster->begin(pdev); +#ifdef QT_BLITTER_RASTEROVERLAY + d->pmData->unmergeOverlay(); +#endif return ok; } @@ -280,6 +279,10 @@ bool QBlitterPaintEngine::end() d->raster->setPaintDevice(0); d->raster->setActive(false); + setActive(false); +#ifdef QT_BLITTER_RASTEROVERLAY + d->pmData->mergeOverlay(); +#endif return d->raster->end(); } @@ -287,16 +290,13 @@ bool QBlitterPaintEngine::end() void QBlitterPaintEngine::fill(const QVectorPath &path, const QBrush &brush) { Q_D(QBlitterPaintEngine); - if (path.shape() == QVectorPath::RectangleHint) { QRectF rect(((QPointF *) path.points())[0], ((QPointF *) path.points())[2]); fillRect(rect, brush); } else { d->lock(); + d->pmData->markRasterOverlay(path); d->raster->fill(path, brush); -#ifdef RASTEROVERLAY - d->raster->fill(path,rasterBrush); -#endif } } @@ -307,10 +307,8 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QColor &color) d->fillRect(rect, color); } else { d->lock(); + d->pmData->markRasterOverlay(rect); d->raster->fillRect(rect, color); -#ifdef RASTEROVERLAY - d->raster->fillRect(rect,rasterColor); -#endif } } @@ -354,7 +352,7 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) int tmpSrcX = srcX + (targetRect.x() - x); int tmpSrcY = srcY + (targetRect.y() - y); QRect srcRect(tmpSrcX,tmpSrcY,targetRect.width(),targetRect.height()); - d->blitter->drawPixmap(targetRect,pm,srcRect); + d->pmData->blittable()->drawPixmap(targetRect,pm,srcRect); } } else if (clipData->hasRegionClip) { QVector clipRects = clipData->clipRegion.rects(); @@ -368,9 +366,9 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) int tmpSrcX = srcX + (targetRect.x() - x); int tmpSrcY = srcY + (targetRect.y() - y); QRect srcRect(tmpSrcX,tmpSrcY,targetRect.width(),targetRect.height()); - d->blitter->drawPixmap(targetRect,pm,srcRect); + d->pmData->blittable()->drawPixmap(targetRect,pm,srcRect); } - } else Q_ASSERT(false);//should never happen + } x+=blitWidth; if (x>=transformedRect.right()) { x = transformedRect.x(); @@ -382,13 +380,10 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) } else srcX = 0; } - } else { d->lock(); + d->pmData->markRasterOverlay(rect); d->raster->fillRect(rect, brush); -#ifdef RASTEROVERLAY - d->raster->fillRect(rect,rasterBrush); -#endif } } @@ -397,10 +392,8 @@ void QBlitterPaintEngine::stroke(const QVectorPath &path, const QPen &pen) { Q_D(QBlitterPaintEngine); d->lock(); + d->pmData->markRasterOverlay(path.convertToPainterPath().boundingRect()); d->raster->stroke(path, pen); -#ifdef RASTEROVERLAY - d->raster->stroke(path,QPen(rasterColor)); -#endif } void QBlitterPaintEngine::clip(const QVectorPath &path, Qt::ClipOperation op) @@ -509,10 +502,8 @@ void QBlitterPaintEngine::drawRects(const QRect *rects, int rectCount) d->fillRect(rects[i], qbrush_color(d->state->brush)); } } else { + d->pmData->markRasterOverlay(rects,rectCount); QPaintEngineEx::drawRects(rects, rectCount); -#ifdef RASTEROVERLAY - d->raster->drawRects(rects,rectCount); -#endif } } @@ -524,10 +515,8 @@ void QBlitterPaintEngine::drawRects(const QRectF *rects, int rectCount) d->fillRect(rects[i], qbrush_color(d->state->brush)); } } else { + d->pmData->markRasterOverlay(rects,rectCount); QPaintEngineEx::drawRects(rects, rectCount); -#ifdef RASTEROVERLAY - d->raster->drawRects(rects,rectCount); -#endif } } @@ -557,10 +546,8 @@ void QBlitterPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const Q } }else { d->lock(); + d->pmData->markRasterOverlay(r); d->raster->drawPixmap(r, pm, sr); -#ifdef RASTEROVERLAY - d->raster->fillRect(r,rasterColor); -#endif } } @@ -569,10 +556,8 @@ void QBlitterPaintEngine::drawImage(const QRectF &r, const QImage &pm, const QRe { Q_D(QBlitterPaintEngine); d->lock(); + d->pmData->markRasterOverlay(r); d->raster->drawImage(r, pm, sr, flags); -#ifdef RASTEROVERLAY - d->raster->fillRect(r,rasterColor); -#endif } @@ -581,18 +566,14 @@ void QBlitterPaintEngine::drawTextItem(const QPointF &pos, const QTextItem &ti) Q_D(QBlitterPaintEngine); d->lock(); d->raster->drawTextItem(pos, ti); -#ifdef RASTEROVERLAY - QFontMetricsF fm(ti.font()); - QRectF rect = fm.tightBoundingRect(ti.text()); - rect.moveBottomLeft(pos); - d->raster->fillRect(rect, rasterColor); -#endif + d->pmData->markRasterOverlay(pos,ti); } void QBlitterPaintEngine::drawEllipse(const QRectF &r) { Q_D(QBlitterPaintEngine); d->lock(); + d->pmData->markRasterOverlay(r); d->raster->drawEllipse(r); } @@ -616,6 +597,12 @@ void QBlitterPaintEngine::setState(QPainterState *s) d->updateClip(); } +inline QRasterPaintEngine *QBlitterPaintEngine::raster() const +{ + Q_D(const QBlitterPaintEngine); + return d->raster; +} + class QBlittablePrivate { public: diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index cebaf21..2d9add9 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -2,8 +2,8 @@ #define QPAINTENGINE_BLITTER_P_H #include "private/qpaintengineex_p.h" +#include "private/qpaintengine_raster_p.h" -class QRasterPaintEngine; class QBlittablePrivate; class QBlitterPaintEnginePrivate; class QBlittablePixmapData; @@ -89,8 +89,12 @@ public: virtual void setState(QPainterState *s); - inline QPainterState *state() { return static_cast(QPaintEngine::state); } - inline const QPainterState *state() const { return static_cast(QPaintEngine::state); } + inline QPainterState *state() { return raster()->state(); } + inline const QPainterState *state() const { const QPainterState *state = raster()->state(); return state;} + inline const QClipData *clip(){return raster()->d_func()->clip();} + +private: + QRasterPaintEngine *raster() const; }; -- cgit v0.12 From b34f8552e08639cbaa8a3ce4551ae3b738764d25 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 9 Feb 2010 14:46:42 +0100 Subject: winId() for vnc and linuxfb --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 3 +++ src/plugins/graphicssystems/fb_base/fb_base.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index bd8d407..eeaa220 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -221,7 +221,10 @@ QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFb mScreen(screen), visibleFlag(false) { + static QAtomicInt winIdGenerator(1); + mImage = QImage(window->size(), mScreen->format()); + windowId = winIdGenerator.fetchAndAddRelaxed(1); } QGraphicsSystemFbWindowSurface::~QGraphicsSystemFbWindowSurface() diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index f21cd41..c46a99d 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -64,12 +64,15 @@ public: virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); virtual Qt::WindowFlags windowFlags() const; + WId winId() const { return windowId; } protected: QGraphicsSystemFbScreen *mScreen; QRect oldGeometry; QImage mImage; bool visibleFlag; Qt::WindowFlags flags; + + WId windowId; }; class QGraphicsSystemFbScreen : public QGraphicsSystemScreen -- cgit v0.12 From 5fbf7ba9657527a0cc5d732fa90ce4055ddb5eb2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 9 Feb 2010 16:23:36 +0100 Subject: Fix release build-error in qpaintengine_blitter.cpp --- src/gui/painting/qpaintengine_blitter.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 0e7c96a..04d3d5a 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -392,7 +392,7 @@ void QBlitterPaintEngine::stroke(const QVectorPath &path, const QPen &pen) { Q_D(QBlitterPaintEngine); d->lock(); - d->pmData->markRasterOverlay(path.convertToPainterPath().boundingRect()); + d->pmData->markRasterOverlay(path); d->raster->stroke(path, pen); } -- cgit v0.12 From 5e2b09a3dfd09e6bd85754e181a0b9026145a9d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 9 Feb 2010 17:24:50 +0100 Subject: Minimaldfb: fixed include error --- src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index cfe1807..c3b5522 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -7,7 +7,7 @@ #include #include -#include +#include InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) : QThread(parent), m_eventBuffer(eventBuffer),m_shouldStop(false) -- cgit v0.12 From e2ea7ff8e1e7795a34981c17daa5bcff90786653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 10 Feb 2010 10:46:13 +0100 Subject: Added basic fps calculation in qbackingstore --- src/gui/painting/qbackingstore.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index e1f47b5..cb0ff55 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -98,6 +98,21 @@ static inline void qt_flush(QWidget *widget, const QRegion ®ion, QWindowSurfa QWidgetBackingStore::showYellowThing(widget, region, flushUpdate * 10, false); #endif + //The performance hit by doing this should be negligible. However, be aware that + //using this FPS when you have > 1 windowsurface can give you inaccurate FPS + static bool fpsDebug = qgetenv("QT_DEBUG_FPS").toInt(); + if (fpsDebug) { + static QTime time = QTime::currentTime(); + static int frames = 0; + + frames++; + + if(time.elapsed() > 5000) { + double fps = double(frames * 1000) /time.restart(); + fprintf(stderr,"FPS: %.1f\n",fps); + frames = 0; + } + } if (widget != tlw) windowSurface->flush(widget, region, tlwOffset + widget->mapTo(tlw, QPoint())); else -- cgit v0.12 From 175605f736ce76a9c0296aa607a6a82ea6675542 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 8 Feb 2010 12:56:46 +0100 Subject: Don't resize back buffer for every window resize; only do it when we're painting --- .../testlite/qwindowsurface_testlite.cpp | 3 ++- src/plugins/graphicssystems/testlite/x11util.cpp | 22 ++++++++++++++-------- src/plugins/graphicssystems/testlite/x11util.h | 2 ++ 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index d50a59e..e159106 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -86,7 +86,6 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this; - xw->painted = true; //there is content in the buffer xw->paintEvent(); } @@ -169,11 +168,13 @@ bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); + xw->resizeBuffer(geometry().size()); } void QTestLiteWindowSurface::endPaint(const QRegion ®ion) { Q_UNUSED(region); + xw->painted = true; //there is content in the buffer } diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp index 20d4241..6d2966f 100644 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ b/src/plugins/graphicssystems/testlite/x11util.cpp @@ -599,11 +599,23 @@ void MyWindow::resizeShmImage(int width, int height) Q_ASSERT(shm_attach_status == True); shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); - - painted = false; #endif + painted = false; +} + + +void MyWindow::resizeBuffer(QSize s) +{ + if (shm_img.size() != s) + resizeShmImage(s.width(), s.height()); } +QSize MyWindow::bufferSize() const +{ + return shm_img.size(); +} + + void MyWindow::resizeEvent(XConfigureEvent *e) { @@ -620,8 +632,6 @@ void MyWindow::resizeEvent(XConfigureEvent *e) #ifdef MYX11_DEBUG qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height << "img:" << shm_img.size(); #endif - if (shm_img.size() != QSize(width, height)) - resizeShmImage(width, height); windowSurface->handleGeometryChange(xpos, ypos, width, height); } @@ -639,10 +649,6 @@ void MyWindow::setGeometry(int x, int y, int w, int h) qDebug() << "MyWindow::setGeometry" << hex << window << dec << x << y << w << h << "img:" << shm_img.size(); #endif XMoveResizeWindow(xd->display, window, x, y, w, h); - - if (shm_img.size() != QSize(w, h)) { - resizeShmImage(w, h); - } } diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h index 184c1ca..79e7461 100644 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ b/src/plugins/graphicssystems/testlite/x11util.h @@ -137,6 +137,8 @@ public: //### int currentCursor; bool painted; + void resizeBuffer(QSize); + QSize bufferSize() const; private: void resizeShmImage(int width, int height); -- cgit v0.12 From 5dcacb00fd68e6cc2bf3e6a467b603f387cb1a60 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 10 Feb 2010 16:31:13 +0100 Subject: Move user event handling into QWindowSystemInterface class This currently includes mouse, wheel, keyboard, enter, leave, geometry, and close events. Windowing system plugins should limit themselves to the QWindowSystemInterface::handle*Event() methods, as the other methods will likely become private. --- src/gui/embedded/qkbd_qws.cpp | 4 +- src/gui/kernel/kernel.pri | 6 +- src/gui/kernel/qapplication_lite.cpp | 71 +++--------- src/gui/kernel/qapplication_p.h | 104 +++-------------- src/gui/kernel/qeventdispatcher_glib_lite.cpp | 8 +- src/gui/kernel/qeventdispatcher_lite.cpp | 9 +- src/gui/kernel/qwindowsysteminterface.cpp | 112 ++++++++++++++++++ src/gui/kernel/qwindowsysteminterface.h | 129 +++++++++++++++++++++ src/plugins/generic/linuxinput/qlinuxinput.cpp | 10 +- src/plugins/graphicssystems/fb_base/fb_base.cpp | 4 +- .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 42 ++----- .../testlite/qwindowsurface_testlite.cpp | 18 +-- src/plugins/graphicssystems/vnc/qvncserver.cpp | 8 +- 13 files changed, 318 insertions(+), 207 deletions(-) create mode 100644 src/gui/kernel/qwindowsysteminterface.cpp create mode 100644 src/gui/kernel/qwindowsysteminterface.h diff --git a/src/gui/embedded/qkbd_qws.cpp b/src/gui/embedded/qkbd_qws.cpp index 97fb7a0..c4dd6bd 100644 --- a/src/gui/embedded/qkbd_qws.cpp +++ b/src/gui/embedded/qkbd_qws.cpp @@ -54,7 +54,7 @@ #endif #ifdef Q_WS_LITE -#include +#include #include #endif @@ -367,7 +367,7 @@ void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, Qt::KeyboardM QString str; if (unicode != 0xffff) str = QString(unicode); - QApplicationPrivate::handleKeyEvent(0, type, keycode, modifiers, str); + QWindowSystemInterface::handleKeyEvent(0, type, keycode, modifiers, str); #endif } diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index c32b84f..51167d4 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -201,7 +201,8 @@ embedded_lite { HEADERS += \ kernel/qgenericpluginfactory_lite.h \ kernel/qgenericplugin_lite.h \ - kernel/qeventdispatcher_lite_p.h + kernel/qeventdispatcher_lite_p.h \ + kernel/qwindowsysteminterface.h \ SOURCES += \ kernel/qapplication_lite.cpp \ @@ -214,7 +215,8 @@ embedded_lite { kernel/qkeymapper_qws.cpp \ kernel/qsound_lite.cpp \ kernel/qwidget_lite.cpp \ - kernel/qeventdispatcher_lite.cpp + kernel/qeventdispatcher_lite.cpp \ + kernel/qwindowsysteminterface.cpp contains(QT_CONFIG, glib) { SOURCES += \ diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 39cc29f..6142e15 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -59,9 +59,11 @@ #include "private/qgraphicssystem_p.h" #include "qgraphicssystemcursor.h" #include +#include QT_BEGIN_NAMESPACE +QList userEventQueue; static QString appName; static const char *appFont = 0; // application font @@ -75,7 +77,6 @@ int qt_last_x = 0; int qt_last_y = 0; QPointer qt_last_mouse_receiver = 0; -QList QApplicationPrivate::userEventQueue; static Qt::KeyboardModifiers modifiers = Qt::NoModifier; static Qt::MouseButtons buttons = Qt::NoButton; static ulong mousePressTime; @@ -83,23 +84,22 @@ static Qt::MouseButton mousePressButton = Qt::NoButton; static int mousePressX; static int mousePressY; static int mouse_double_click_distance = 5; -QTime QApplicationPrivate::time; -void QApplicationPrivate::processUserEvent(UserEvent *e) +void QApplicationPrivate::processUserEvent(QWindowSystemInterface::UserEvent *e) { switch(e->type) { case QEvent::MouseButtonDblClick: // if mouse event, calculate appropriate widget and local coordinates case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseMove: - QApplicationPrivate::processMouseEvent(static_cast(e)); + QApplicationPrivate::processMouseEvent(static_cast(e)); break; case QEvent::Wheel: - QApplicationPrivate::processWheelEvent(static_cast(e)); + QApplicationPrivate::processWheelEvent(static_cast(e)); break; case QEvent::KeyPress: case QEvent::KeyRelease: - QApplicationPrivate::processKeyEvent(static_cast(e)); + QApplicationPrivate::processKeyEvent(static_cast(e)); break; default: qWarning() << "Unknown user input event type:" << e->type; @@ -524,35 +524,7 @@ void QApplication::setMainWidget(QWidget *mainWidget) } #endif - -//------------------------------------------------------------ -// -// Callback functions for plugins: -// - -/*! - -\a tlw == 0 means that \a ev is in global coords only - - -*/ - - -void QApplicationPrivate::handleEnterEvent(QWidget *tlw) -{ - dispatchEnterLeave(tlw, 0); - qt_last_mouse_receiver = tlw; -} - -void QApplicationPrivate::handleLeaveEvent(QWidget *tlw) -{ - dispatchEnterLeave(0, qt_last_mouse_receiver); - if (!tlw->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen - dispatchEnterLeave(0, tlw); - qt_last_mouse_receiver = 0; -} - -void QApplicationPrivate::processMouseEvent(MouseEvent *e) +void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent *e) { // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); static QWeakPointer implicit_mouse_grabber; @@ -561,16 +533,12 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) // move first Qt::MouseButtons stateChange = e->buttons ^ buttons; if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { - MouseEvent * newMouseEvent = new MouseEvent(e->id, e->timestamp, e->localPos, e->globalPos, e->buttons); + QWindowSystemInterface::MouseEvent * newMouseEvent = new QWindowSystemInterface::MouseEvent(e->widget.data(), e->timestamp, e->localPos, e->globalPos, e->buttons); userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop stateChange = Qt::NoButton; } - QWidget * tlw; - if (e->id) - tlw = QWidget::find(e->id); - else - tlw = 0; + QWidget * tlw = e->widget.data(); QPoint localPoint = e->localPos; QPoint globalPoint = e->globalPos; @@ -701,7 +669,7 @@ void QApplicationPrivate::processMouseEvent(MouseEvent *e) //### there's a lot of duplicated logic here -- refactoring required! -void QApplicationPrivate::processWheelEvent(WheelEvent *e) +void QApplicationPrivate::processWheelEvent(QWindowSystemInterface::WheelEvent *e) { // QPoint localPoint = ev.pos(); QPoint globalPoint = e->globalPos; @@ -711,11 +679,7 @@ void QApplicationPrivate::processWheelEvent(WheelEvent *e) qt_last_x = globalPoint.x(); qt_last_y = globalPoint.y(); - QWidget *mouseWindow; - if (e->id) - mouseWindow = QWidget::find(e->id); - else - mouseWindow = 0; + QWidget *mouseWindow = e->widget.data(); // find the tlw if we didn't get it from the plugin if (!mouseWindow) { @@ -747,7 +711,7 @@ void QApplicationPrivate::processWheelEvent(WheelEvent *e) // Remember, Qt convention is: keyboard state is state *before* -void QApplicationPrivate::processKeyEvent(KeyEvent *e) +void QApplicationPrivate::processKeyEvent(QWindowSystemInterface::KeyEvent *e) { QWidget *focusW = 0; if (self->inPopupMode()) { @@ -756,8 +720,8 @@ void QApplicationPrivate::processKeyEvent(KeyEvent *e) } if (!focusW) focusW = QApplication::focusWidget(); - if (!focusW && e->id) { - focusW = QWidget::find(e->id); + if (!focusW) { + focusW = e->widget.data(); } if (!focusW) focusW = QApplication::activeWindow(); @@ -774,8 +738,7 @@ void QApplicationPrivate::processKeyEvent(KeyEvent *e) QApplication::sendSpontaneousEvent(focusW, &ev); } - -void QApplicationPrivate::handleGeometryChange(QWidget *tlw, const QRect &newRect) +void QApplicationPrivate::processGeometryChange(QWidget *tlw, const QRect &newRect) { QRect cr(tlw->geometry()); @@ -794,11 +757,9 @@ void QApplicationPrivate::handleGeometryChange(QWidget *tlw, const QRect &newRec } } - -void QApplicationPrivate::handleCloseEvent(QWidget *tlw) +void QApplicationPrivate::processCloseEvent(QWidget *tlw) { tlw->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); } - QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index f6e91f7..273e9ea 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -76,6 +76,9 @@ #ifdef Q_OS_SYMBIAN #include #endif +#ifdef Q_WS_LITE +#include +#endif QT_BEGIN_NAMESPACE @@ -462,6 +465,18 @@ public: static bool qt_mac_apply_settings(); #endif +#ifdef Q_WS_LITE + static void processMouseEvent(QWindowSystemInterface::MouseEvent *e); + static void processKeyEvent(QWindowSystemInterface::KeyEvent *e); + static void processWheelEvent(QWindowSystemInterface::WheelEvent *e); + + static void processCloseEvent(QWidget *tlw); + static void processGeometryChange(QWidget *tlw, const QRect &newRect); + + static void processUserEvent(QWindowSystemInterface::UserEvent *e); + +#endif + #ifdef Q_WS_QWS QPointer last_manager; QWSServerCleaner qwsServerCleaner; @@ -565,91 +580,6 @@ public: void _q_readRX71MultiTouchEvents(); #endif -#ifdef Q_WS_LITE - static QTime time; - - class UserEvent { - public: - UserEvent(WId w, ulong time, QEvent::Type t) { id = w; type = t; timestamp = time; } - WId id; - QEvent::Type type; - unsigned long timestamp; - }; - - class MouseEvent : public UserEvent { - public: - MouseEvent(WId w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b) - : UserEvent(w, time, QEvent::MouseMove){ localPos = local; globalPos = global; buttons = b; } - QPoint localPos; - QPoint globalPos; - Qt::MouseButtons buttons; - }; - - class WheelEvent : public UserEvent { - public: - WheelEvent(WId w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) - : UserEvent(w, time, QEvent::Wheel) { localPos = local; globalPos = global; delta = d; orient = o; } - int delta; - QPoint localPos; - QPoint globalPos; - Qt::Orientation orient; - }; - - class KeyEvent : public UserEvent { - public: - KeyEvent(WId w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) - :UserEvent(w, time, t){ key = k; unicode = text; repeat = autorep; repeatCount = count; modifiers = mods; } - int key; - QString unicode; - bool repeat; - ushort repeatCount; - Qt::KeyboardModifiers modifiers; - }; - - static void handleMouseEvent(WId w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { - handleMouseEvent(w, time.elapsed(), local, global, b); - } - - static void handleMouseEvent(WId w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { - MouseEvent * e = new MouseEvent(w, timestamp, local, global, b); - queueUserEvent(e); - } - - static void handleKeyEvent(WId w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { - handleKeyEvent(w, time.elapsed(), t, k, mods, text, autorep, count); - } - - static void handleKeyEvent(WId w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { - KeyEvent * e = new KeyEvent(w, timestamp, t, k, mods, text, autorep, count); - queueUserEvent(e); - } - - static void handleWheelEvent(WId w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { - handleWheelEvent(w, time.elapsed(), local, global, d, o); - } - - static void handleWheelEvent(WId w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { - WheelEvent *e = new WheelEvent(w, timestamp, local, global, d, o); - queueUserEvent(e); - } - - static void queueUserEvent(UserEvent *ev) { userEventQueue.append(ev); } - static void processUserEvent(UserEvent *e); - static int userEventsQueued() { return userEventQueue.count(); } - static UserEvent * getUserEvent() { return userEventQueue.takeFirst(); } - - // could be private, should only be used by deliverUserEvents() - static void processMouseEvent(MouseEvent *e); - static void processKeyEvent(KeyEvent *e); - static void processWheelEvent(WheelEvent *e); - - // delivered directly by the plugin via spontaneous events - static void handleGeometryChange(QWidget *tlw, const QRect &newRect); - static void handleCloseEvent(QWidget *tlw); - static void handleEnterEvent(QWidget *tlw); - static void handleLeaveEvent(QWidget *tlw); -#endif - #if defined(Q_WS_S60) int maxTouchPressure; QList appAllTouchPoints; @@ -664,10 +594,6 @@ private: static QHash scanCodeCache; #endif -#ifdef Q_WS_LITE - static QList userEventQueue; -#endif - static QApplicationPrivate *self; static void giveFocusAccordingToFocusPolicy(QWidget *w, diff --git a/src/gui/kernel/qeventdispatcher_glib_lite.cpp b/src/gui/kernel/qeventdispatcher_glib_lite.cpp index 6d80823..757bb00 100644 --- a/src/gui/kernel/qeventdispatcher_glib_lite.cpp +++ b/src/gui/kernel/qeventdispatcher_glib_lite.cpp @@ -64,7 +64,7 @@ static gboolean userEventSourcePrepare(GSource *s, gint *timeout) Q_UNUSED(s) Q_UNUSED(timeout) - return QApplicationPrivate::userEventsQueued() > 0; + return QWindowSystemInterface::userEventsQueued() > 0; } static gboolean userEventSourceCheck(GSource *source) @@ -76,9 +76,9 @@ static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) { GUserEventSource * source = reinterpret_cast(s); - QApplicationPrivate::UserEvent * event; - while (QApplicationPrivate::userEventsQueued()) { - event = QApplicationPrivate::getUserEvent(); + QWindowSystemInterface::UserEvent * event; + while (QWindowSystemInterface::userEventsQueued()) { + event = QWindowSystemInterface::getUserEvent(); // send through event filter if (source->q->filterEvent(event)) { diff --git a/src/gui/kernel/qeventdispatcher_lite.cpp b/src/gui/kernel/qeventdispatcher_lite.cpp index 39eef96..bd177cb 100644 --- a/src/gui/kernel/qeventdispatcher_lite.cpp +++ b/src/gui/kernel/qeventdispatcher_lite.cpp @@ -47,6 +47,7 @@ #ifndef QT_NO_THREAD # include "qmutex.h" #endif +#include #include QT_BEGIN_NAMESPACE @@ -83,11 +84,11 @@ bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) QApplication::sendPostedEvents(); while (!d->interrupt) { // also flushes output buffer ###can be optimized - QApplicationPrivate::UserEvent *event; + QWindowSystemInterface::UserEvent *event; if (!(flags & QEventLoop::ExcludeUserInputEvents) - && QApplicationPrivate::userEventsQueued() > 0) { + && QWindowSystemInterface::userEventsQueued() > 0) { // process a pending user input event - event = QApplicationPrivate::getUserEvent(); + event = QWindowSystemInterface::getUserEvent(); } else { break; } @@ -112,7 +113,7 @@ bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) bool QEventDispatcherLite::hasPendingEvents() { extern uint qGlobalPostedEventsCount(); // from qapplication.cpp - return qGlobalPostedEventsCount() || QApplicationPrivate::userEventsQueued();; + return qGlobalPostedEventsCount() || QWindowSystemInterface::userEventsQueued();; } void QEventDispatcherLite::startingUp() diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp new file mode 100644 index 0000000..e051533 --- /dev/null +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qwindowsysteminterface.h" +#include "qapplication_p.h" + +QT_BEGIN_NAMESPACE + + +QTime QWindowSystemInterface::eventTime; + +//------------------------------------------------------------ +// +// Callback functions for plugins: +// + +QList QWindowSystemInterface::userEventQueue; + +extern QPointer qt_last_mouse_receiver; +/*! + +\a tlw == 0 means that \a ev is in global coords only + + +*/ + + +void QWindowSystemInterface::handleEnterEvent(QWidget *tlw) +{ + if (tlw) { + QApplicationPrivate::dispatchEnterLeave(tlw, 0); + qt_last_mouse_receiver = tlw; + } +} + +void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw) +{ + QApplicationPrivate::dispatchEnterLeave(0, qt_last_mouse_receiver); + if (tlw && !tlw->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen + QApplicationPrivate::dispatchEnterLeave(0, tlw); + qt_last_mouse_receiver = 0; +} + +void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect) +{ + if (tlw) + QApplicationPrivate::processGeometryChange(tlw, newRect); +} + + +void QWindowSystemInterface::handleCloseEvent(QWidget *tlw) +{ + if (tlw) + QApplicationPrivate::processCloseEvent(tlw); +} + +void QWindowSystemInterface::handleMouseEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) +{ + MouseEvent * e = new MouseEvent(tlw, timestamp, local, global, b); + queueUserEvent(e); +} + +void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) +{ + KeyEvent * e = new KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count); + queueUserEvent(e); +} + +void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) +{ + WheelEvent *e = new WheelEvent(tlw, timestamp, local, global, d, o); + queueUserEvent(e); +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h new file mode 100644 index 0000000..caeacd3 --- /dev/null +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QWINDOWSYSTEMINTERFACE_H +#define QWINDOWSYSTEMINTERFACE_H + +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE +class Q_GUI_EXPORT QWindowSystemInterface +{ +public: + class UserEvent { + public: + UserEvent(QWidget * w, ulong time, QEvent::Type t) + { widget = QWeakPointer::QWeakPointer(w); type = t; timestamp = time; } + QWeakPointer widget; + QEvent::Type type; + unsigned long timestamp; + }; + + class MouseEvent : public UserEvent { + public: + MouseEvent(QWidget * w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b) + : UserEvent(w, time, QEvent::MouseMove){ localPos = local; globalPos = global; buttons = b; } + QPoint localPos; + QPoint globalPos; + Qt::MouseButtons buttons; + }; + + class WheelEvent : public UserEvent { + public: + WheelEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) + : UserEvent(w, time, QEvent::Wheel) { localPos = local; globalPos = global; delta = d; orient = o; } + int delta; + QPoint localPos; + QPoint globalPos; + Qt::Orientation orient; + }; + + class KeyEvent : public UserEvent { + public: + KeyEvent(QWidget *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) + :UserEvent(w, time, t){ key = k; unicode = text; repeat = autorep; repeatCount = count; modifiers = mods; } + int key; + QString unicode; + bool repeat; + ushort repeatCount; + Qt::KeyboardModifiers modifiers; + }; + + static QTime eventTime; + + static int userEventsQueued() { return userEventQueue.count(); } + static UserEvent * getUserEvent() { return userEventQueue.takeFirst(); } + static void queueUserEvent(UserEvent *ev) { userEventQueue.append(ev); } + + +public: + static QList userEventQueue; + + static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { + handleMouseEvent(w, eventTime.elapsed(), local, global, b); + } + + static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b); + + static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { + handleKeyEvent(w, eventTime.elapsed(), t, k, mods, text, autorep, count); + } + + static void handleKeyEvent(QWidget *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1); + + static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { + handleWheelEvent(w, eventTime.elapsed(), local, global, d, o); + } + + static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); + + // delivered directly by the plugin via spontaneous events + static void handleGeometryChange(QWidget *w, const QRect &newRect); + static void handleCloseEvent(QWidget *w); + static void handleEnterEvent(QWidget *w); + static void handleLeaveEvent(QWidget *w); +}; + +QT_END_NAMESPACE +#endif // QWINDOWSYSTEMINTERFACE_H diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 363e91f..32137ee 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -46,7 +46,7 @@ #include #include #include -#include +#include #include @@ -141,13 +141,13 @@ void QLinuxInputMouseHandler::readMouseData() } else if (data->code == ABS_WHEEL) { // vertical scroll // data->value: 1 == up, -1 == down int delta = 120 * data->value; - QApplicationPrivate::handleWheelEvent(0, QPoint(m_x, m_y), + QWindowSystemInterface::handleWheelEvent(0, QPoint(m_x, m_y), QPoint(m_x, m_y), delta, Qt::Vertical); } else if (data->code == ABS_THROTTLE) { // horizontal scroll // data->value: 1 == right, -1 == left int delta = 120 * -data->value; - QApplicationPrivate::handleWheelEvent(0, QPoint(m_x, m_y), + QWindowSystemInterface::handleWheelEvent(0, QPoint(m_x, m_y), QPoint(m_x, m_y), delta, Qt::Horizontal); } else { @@ -167,7 +167,7 @@ void QLinuxInputMouseHandler::readMouseData() else m_buttons &= ~button; - QApplicationPrivate::handleMouseEvent(0, QPoint(m_x, m_y), + QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), QPoint(m_x, m_y), m_buttons); } else if (data->type == EV_SYN && data->code == SYN_REPORT) { if (!posChanged) @@ -175,7 +175,7 @@ void QLinuxInputMouseHandler::readMouseData() posChanged = false; QPoint pos(m_x, m_y); - QApplicationPrivate::handleMouseEvent(0, pos, pos, m_buttons); + QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); // pos = m_handler->transform(pos); //m_handler->limitToScreen(pos); diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index eeaa220..6567e95 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -1,10 +1,10 @@ #include "fb_base.h" #include -#include #include #include #include +#include QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen *scr) : QGraphicsSystemCursor(scr), currentRect(QRect()), prevRect(QRect()) @@ -261,7 +261,7 @@ void QGraphicsSystemFbWindowSurface::setGeometry(const QRect &rect) if (mImage.size() != rect.size()) mImage = QImage(rect.size(), mScreen->format()); - QApplicationPrivate::handleGeometryChange(this->window(), rect); + QWindowSystemInterface::handleGeometryChange(window(), rect); QWindowSurface::setGeometry(rect); } diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index c3b5522..74a38a4 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -3,9 +3,10 @@ #include #include -#include +#include #include #include +#include #include @@ -65,7 +66,7 @@ QDirectFbInput::QDirectFbInput() m_inputHandler = new InputSocketWaiter(eventBuffer,this); connect(m_inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); - connect(qApp,SIGNAL(aboutToQuit()),SLOT(applicationEnd())); + connect(QApplication::instance(),SIGNAL(aboutToQuit()),SLOT(applicationEnd())); } void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) @@ -127,42 +128,23 @@ void QDirectFbInput::handleEvents() void QDirectFbInput::handleMouseEvents(const DFBEvent &event) { - QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); QPoint p(event.window.x, event.window.y); QPoint globalPos = globalPoint(event); Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); - QWidget *tlw = tlwMap.value(event.window.window_id); IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); IDirectFBWindow *window; layer->GetWindow(layer,event.window.window_id,&window); long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - timestamp /= 1000; if (event.window.type == DWET_BUTTONDOWN) { - static long prevTime = 0; - static QWidget *prevWindow; - static int prevX = -999; - static int prevY = -999; - - if (tlw == prevWindow && timestamp - prevTime < QApplication::doubleClickInterval() - && qAbs(event.window.cx - prevX) < 5 && qAbs(event.window.cy - prevY) < 5) { - type = QEvent::MouseButtonDblClick; - prevTime = timestamp - QApplication::doubleClickInterval(); //no double click next time - } else { - prevTime = timestamp; - } - prevWindow = tlw; - prevX = event.window.cx; - prevY = event.window.cy; - window->GrabPointer(window); } else if (event.window.type == DWET_BUTTONUP) { window->UngrabPointer(window); } - - QApplicationPrivate::handleMouseEvent(event.window.window_id, timestamp, p, globalPos, buttons); + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); } void QDirectFbInput::applicationEnd() @@ -176,9 +158,8 @@ void QDirectFbInput::handleWheelEvent(const DFBEvent &event) QPoint p(event.window.cx, event.window.cy); QPoint globalPos = globalPoint(event); long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - timestamp /= 1000; - - QApplicationPrivate::handleWheelEvent(event.window.window_id, timestamp, p, globalPos, + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos, event.window.step*120, Qt::Vertical); } @@ -190,13 +171,12 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event) Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers); long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - timestamp /= 1000; QChar character; if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE) character = QChar(event.window.key_symbol); - - QApplicationPrivate::handleKeyEvent(event.window.window_id, timestamp, type, key, modifiers, character); + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character); } void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) @@ -204,10 +184,10 @@ void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) QWidget *tlw = tlwMap.value(event.window.window_id); switch (event.window.type) { case DWET_ENTER: - QApplicationPrivate::handleEnterEvent(tlw); + QWindowSystemInterface::handleEnterEvent(tlw); break; case DWET_LEAVE: - QApplicationPrivate::handleLeaveEvent(tlw); + QWindowSystemInterface::handleLeaveEvent(tlw); break; default: break; diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp index e159106..c54f6eb 100644 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp @@ -43,7 +43,7 @@ #include "qgraphicssystem_testlite.h" #include -#include +#include #include "x11util.h" @@ -245,7 +245,7 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) bool hor = (((e->button == Button4 || e->button == Button5) && (modifiers & Qt::AltModifier)) || (e->button == 6 || e->button == 7)); - QApplicationPrivate::handleWheelEvent(winId(), e->time, + QWindowSystemInterface::handleWheelEvent(window(), e->time, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), delta, hor ? Qt::Horizontal : Qt::Vertical); @@ -258,7 +258,7 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) buttons ^= button; // X event uses state *before*, Qt uses state *after* - QApplicationPrivate::handleMouseEvent(winId(), e->time, QPoint(e->x, e->y), + QWindowSystemInterface::handleMouseEvent(window(), e->time, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), buttons); @@ -267,24 +267,24 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) void QTestLiteWindowSurface::handleGeometryChange(int x, int y, int w, int h) { - QApplicationPrivate::handleGeometryChange(window(), QRect(x,y,w,h)); + QWindowSystemInterface::handleGeometryChange(window(), QRect(x,y,w,h)); } void QTestLiteWindowSurface::handleCloseEvent() { - QApplicationPrivate::handleCloseEvent(window()); + QWindowSystemInterface::handleCloseEvent(window()); } void QTestLiteWindowSurface::handleEnterEvent() { - QApplicationPrivate::handleEnterEvent(window()); + QWindowSystemInterface::handleEnterEvent(window()); } void QTestLiteWindowSurface::handleLeaveEvent() { - QApplicationPrivate::handleLeaveEvent(window()); + QWindowSystemInterface::handleLeaveEvent(window()); } @@ -592,12 +592,12 @@ void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) modifiers ^= modifierFromKeyCode(qtcode); if (qtcode) { - QApplicationPrivate::handleKeyEvent(winId(), e->time, type, qtcode, modifiers); + QWindowSystemInterface::handleKeyEvent(window(), e->time, type, qtcode, modifiers); } else if (chars[0]) { int qtcode = chars.toUpper()[0]; //Not exactly right... if (modifiers & Qt::ControlModifier && qtcode < ' ') qtcode = chars[0] + '@'; - QApplicationPrivate::handleKeyEvent(winId(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); + QWindowSystemInterface::handleKeyEvent(window(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); } else { qWarning() << "unknown X keycode" << hex << e->keycode << keySym; } diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp index 490ca02..ea576d4 100644 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ b/src/plugins/graphicssystems/vnc/qvncserver.cpp @@ -48,7 +48,7 @@ #include #include -#include +#include #include @@ -844,7 +844,7 @@ void QVNCServer::pointerEvent() bool isPress; if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - QApplicationPrivate::handleMouseEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), ev.buttons); + QWindowSystemInterface::handleMouseEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), ev.buttons); } else { // No buttons or motion reported at the same time as wheel events Qt::Orientation orientation; @@ -853,7 +853,7 @@ void QVNCServer::pointerEvent() else orientation = Qt::Vertical; int delta = 120 * ((ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelUp) ? 1 : -1); - QApplicationPrivate::handleWheelEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, orientation); + QWindowSystemInterface::handleWheelEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, orientation); } handleMsg = false; } @@ -879,7 +879,7 @@ void QVNCServer::keyEvent() QString str; if (ev.unicode && ev.unicode != 0xffff) str = QString(ev.unicode); - QApplicationPrivate::handleKeyEvent(0, type, ev.keycode, keymod, str); + QWindowSystemInterface::handleKeyEvent(0, type, ev.keycode, keymod, str); } handleMsg = false; } -- cgit v0.12 From e4ba2795e8650a2aeb27b20ddf6d386509247e41 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 12 Feb 2010 16:31:30 +0100 Subject: move methods that shouldn't be used by plugins out of QWindowSystemInterface --- src/gui/kernel/qapplication_lite.cpp | 3 +- src/gui/kernel/qeventdispatcher_glib_lite.cpp | 6 +-- src/gui/kernel/qeventdispatcher_lite.cpp | 6 +-- src/gui/kernel/qwindowsysteminterface.cpp | 8 ++-- src/gui/kernel/qwindowsysteminterface.h | 62 ++++++++++++++------------- 5 files changed, 44 insertions(+), 41 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 6142e15..5ca6717 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -63,7 +63,6 @@ QT_BEGIN_NAMESPACE -QList userEventQueue; static QString appName; static const char *appFont = 0; // application font @@ -534,7 +533,7 @@ void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent * Qt::MouseButtons stateChange = e->buttons ^ buttons; if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { QWindowSystemInterface::MouseEvent * newMouseEvent = new QWindowSystemInterface::MouseEvent(e->widget.data(), e->timestamp, e->localPos, e->globalPos, e->buttons); - userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop + QWindowSystemInterfacePrivate::userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop stateChange = Qt::NoButton; } diff --git a/src/gui/kernel/qeventdispatcher_glib_lite.cpp b/src/gui/kernel/qeventdispatcher_glib_lite.cpp index 757bb00..0cfea8a 100644 --- a/src/gui/kernel/qeventdispatcher_glib_lite.cpp +++ b/src/gui/kernel/qeventdispatcher_glib_lite.cpp @@ -64,7 +64,7 @@ static gboolean userEventSourcePrepare(GSource *s, gint *timeout) Q_UNUSED(s) Q_UNUSED(timeout) - return QWindowSystemInterface::userEventsQueued() > 0; + return QWindowSystemInterfacePrivate::userEventsQueued() > 0; } static gboolean userEventSourceCheck(GSource *source) @@ -77,8 +77,8 @@ static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) GUserEventSource * source = reinterpret_cast(s); QWindowSystemInterface::UserEvent * event; - while (QWindowSystemInterface::userEventsQueued()) { - event = QWindowSystemInterface::getUserEvent(); + while (QWindowSystemInterfacePrivate::userEventsQueued()) { + event = QWindowSystemInterfacePrivate::getUserEvent(); // send through event filter if (source->q->filterEvent(event)) { diff --git a/src/gui/kernel/qeventdispatcher_lite.cpp b/src/gui/kernel/qeventdispatcher_lite.cpp index bd177cb..d500ad6 100644 --- a/src/gui/kernel/qeventdispatcher_lite.cpp +++ b/src/gui/kernel/qeventdispatcher_lite.cpp @@ -86,9 +86,9 @@ bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) while (!d->interrupt) { // also flushes output buffer ###can be optimized QWindowSystemInterface::UserEvent *event; if (!(flags & QEventLoop::ExcludeUserInputEvents) - && QWindowSystemInterface::userEventsQueued() > 0) { + && QWindowSystemInterfacePrivate::userEventsQueued() > 0) { // process a pending user input event - event = QWindowSystemInterface::getUserEvent(); + event = QWindowSystemInterfacePrivate::getUserEvent(); } else { break; } @@ -113,7 +113,7 @@ bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) bool QEventDispatcherLite::hasPendingEvents() { extern uint qGlobalPostedEventsCount(); // from qapplication.cpp - return qGlobalPostedEventsCount() || QWindowSystemInterface::userEventsQueued();; + return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::userEventsQueued();; } void QEventDispatcherLite::startingUp() diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index e051533..d7b5eef 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -51,7 +51,7 @@ QTime QWindowSystemInterface::eventTime; // Callback functions for plugins: // -QList QWindowSystemInterface::userEventQueue; +QList QWindowSystemInterfacePrivate::userEventQueue; extern QPointer qt_last_mouse_receiver; /*! @@ -94,19 +94,19 @@ void QWindowSystemInterface::handleCloseEvent(QWidget *tlw) void QWindowSystemInterface::handleMouseEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { MouseEvent * e = new MouseEvent(tlw, timestamp, local, global, b); - queueUserEvent(e); + QWindowSystemInterfacePrivate::queueUserEvent(e); } void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) { KeyEvent * e = new KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count); - queueUserEvent(e); + QWindowSystemInterfacePrivate::queueUserEvent(e); } void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { WheelEvent *e = new WheelEvent(tlw, timestamp, local, global, d, o); - queueUserEvent(e); + QWindowSystemInterfacePrivate::queueUserEvent(e); } QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index caeacd3..fee7e75 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -48,9 +48,35 @@ #include QT_BEGIN_NAMESPACE + class Q_GUI_EXPORT QWindowSystemInterface { public: + static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { + handleMouseEvent(w, eventTime.elapsed(), local, global, b); + } + + static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b); + + static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { + handleKeyEvent(w, eventTime.elapsed(), t, k, mods, text, autorep, count); + } + + static void handleKeyEvent(QWidget *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1); + + static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { + handleWheelEvent(w, eventTime.elapsed(), local, global, d, o); + } + + static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); + + // delivered directly by the plugin via spontaneous events + static void handleGeometryChange(QWidget *w, const QRect &newRect); + static void handleCloseEvent(QWidget *w); + static void handleEnterEvent(QWidget *w); + static void handleLeaveEvent(QWidget *w); + + class UserEvent { public: UserEvent(QWidget * w, ulong time, QEvent::Type t) @@ -90,40 +116,18 @@ public: Qt::KeyboardModifiers modifiers; }; +private: static QTime eventTime; - static int userEventsQueued() { return userEventQueue.count(); } - static UserEvent * getUserEvent() { return userEventQueue.takeFirst(); } - static void queueUserEvent(UserEvent *ev) { userEventQueue.append(ev); } - +}; +class QWindowSystemInterfacePrivate { public: - static QList userEventQueue; - - static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { - handleMouseEvent(w, eventTime.elapsed(), local, global, b); - } - - static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b); - - static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { - handleKeyEvent(w, eventTime.elapsed(), t, k, mods, text, autorep, count); - } - - static void handleKeyEvent(QWidget *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1); + static QList userEventQueue; - static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { - handleWheelEvent(w, eventTime.elapsed(), local, global, d, o); - } - - static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); - - // delivered directly by the plugin via spontaneous events - static void handleGeometryChange(QWidget *w, const QRect &newRect); - static void handleCloseEvent(QWidget *w); - static void handleEnterEvent(QWidget *w); - static void handleLeaveEvent(QWidget *w); + static int userEventsQueued() { return userEventQueue.count(); } + static QWindowSystemInterface::UserEvent * getUserEvent() { return userEventQueue.takeFirst(); } + static void queueUserEvent(QWindowSystemInterface::UserEvent *ev) { userEventQueue.append(ev); } }; - QT_END_NAMESPACE #endif // QWINDOWSYSTEMINTERFACE_H -- cgit v0.12 From 939a869b5856d05e8340e64edb66b1f07ba609cd Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 12 Feb 2010 16:32:20 +0100 Subject: make qvfb plugin compile - QApplicationPrivate -> QWindowSystemInterface --- src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp | 10 ++++------ src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp | 2 +- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp index 77942c9..19058a6 100644 --- a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp +++ b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp @@ -59,7 +59,8 @@ #include #include -#include +#include +#include QT_BEGIN_NAMESPACE @@ -147,8 +148,7 @@ void QVFbGraphicsSystemScreenKeyboardHandler::readKeyboardData() // qDebug() << "readKeyboardData" << type << hex << kd->keycode << kd->modifiers << text; - QKeyEvent ke(type, kd->keycode, kd->modifiers, text, kd->repeat, int(text.length())); - QApplicationPrivate::handleKeyEvent(0, &ke); + QWindowSystemInterface::handleKeyEvent(0, type, kd->keycode, kd->modifiers, text, kd->repeat, int(text.length())); idx += sizeof(QVFbKeyData); } @@ -237,9 +237,7 @@ void QVFbGraphicsSystemScreenMouseHandler::readMouseData() if (button) { type = (button & bstate) ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; } - QMouseEvent me(type, mousePos, mousePos, - Qt::MouseButton(button), Qt::MouseButtons(bstate), Qt::NoModifier); - QApplicationPrivate::handleMouseEvent(0, me); + QWindowSystemInterface::handleMouseEvent(0, mousePos, mousePos, Qt::MouseButtons(bstate)); // qDebug() << "readMouseData" << mousePos << button << bstate << oldButtonState << type; diff --git a/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp b/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp index c49f082..0aafe28 100644 --- a/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp +++ b/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp @@ -81,7 +81,7 @@ void QVFbWindowSurface::setGeometry(const QRect &) // any size you like as long as it's full-screen... QRect rect(mScreen->availableGeometry()); - QApplicationPrivate::handleGeometryChange(this->window(), rect); + QWindowSystemInterface::handleGeometryChange(this->window(), rect); QWindowSurface::setGeometry(rect); } -- cgit v0.12 From 53b0fc5d7fc7ad431cf91e41a75a9f6b740c830e Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 17 Feb 2010 11:34:30 +0100 Subject: added some documentation --- src/gui/painting/qgraphicssystemcursor.cpp | 76 +++++++++++++++++++++++++++++- 1 file changed, 75 insertions(+), 1 deletion(-) diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp index 9a0e135..f8d24b1 100644 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ b/src/gui/painting/qgraphicssystemcursor.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -495,6 +495,17 @@ void QGraphicsSystemCursorImage::createSystemCursor(int id) } } +/*! + \fn void set(Qt::CursorShape id) + + \brief Calling this method sets the cursor image to the specified shape + + \a id is one of the defined Qt::CursorShape values. + + If id is invalid, Qt::BitmapCursor, or unknown by the implementation, + Qt::ArrowCursor is used instead. +*/ + void QGraphicsSystemCursorImage::set(Qt::CursorShape id) { QGraphicsSystemCursorImage *cursor = 0; @@ -513,6 +524,18 @@ void QGraphicsSystemCursorImage::set(Qt::CursorShape id) hot = cursor->hot; } +/*! + \fn void set(const QImage * image, int hx, int hy) + + \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) + + \a image A pointer to a QImage + + \a hx The x coordinate of the cursor's hotspot + + \a hy the y coordinate of the cursor's hotspot +*/ + void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) { hot.setX(hx); @@ -520,6 +543,24 @@ void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) cursorImage = *image; } +/*! + \fn set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hx The X hotspot of the cursor graphic + + \a hy The Y hotspot of the cursor graphic +*/ void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) { @@ -577,4 +618,37 @@ void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, } +/*! + \fn QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hotX The X hotspot of the cursor graphic + + \a hotY The Y hotspot of the cursor graphic + + \sa set +*/ + +/*! + \fn QImage *image() + + \brief Return the cursor graphic as a pointer to a QImage +*/ + +/*! + \fn QPoint hotspot + + \brief Return the cursor's hotspot +*/ + QT_END_NAMESPACE -- cgit v0.12 From 196e1484c22f6347061fa433987a86d90e178a55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 22 Feb 2010 14:13:35 +0100 Subject: Minimaldfb: try to make pixelformat of window the same as the layer --- src/gui/image/qpixmap_blitter.cpp | 5 +++++ src/gui/image/qpixmap_blitter_p.h | 2 ++ src/gui/kernel/qeventdispatcher_qws_p.h | 2 +- src/gui/painting/qpaintengine_blitter.cpp | 4 ++++ src/gui/painting/qpaintengine_blitter_p.h | 3 +++ .../graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp | 10 +++++++++- 6 files changed, 24 insertions(+), 2 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index f82a67d..a22bd8f 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -8,6 +8,7 @@ #include +#ifndef QT_NO_BLITTABLE static int global_ser_no = 0; QBlittablePixmapData::QBlittablePixmapData(QPixmapData::PixelType type) @@ -52,7 +53,9 @@ void QBlittablePixmapData::resize(int width, int height) m_blittable = 0; delete m_engine; m_engine = 0; +#ifdef Q_WS_LITE d = QApplicationPrivate::graphicsSystem()->screens().at(0)->depth(); +#endif w = width; h = height; is_null = (w <= 0 || h <= 0); @@ -257,3 +260,5 @@ QRectF QBlittablePixmapData::clipAndTransformRect(const QRectF &rect) const return transformationRect; } #endif //QT_BLITTER_RASTEROVERLAY + +#endif //QT_NO_BLITTABLE diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index 73f80a8..1d85cd3 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -4,6 +4,7 @@ #include #include +#ifndef QT_NO_BLITTABLE class Q_GUI_EXPORT QBlittablePixmapData : public QPixmapData { // Q_DECLARE_PRIVATE(QBlittablePixmapData); @@ -116,4 +117,5 @@ inline void QBlittablePixmapData::unmarkRasterOverlay(const QRectF &rect) #endif } +#endif // QT_NO_BLITTABLE #endif // QPIXMAP_BLITTER_P_H diff --git a/src/gui/kernel/qeventdispatcher_qws_p.h b/src/gui/kernel/qeventdispatcher_qws_p.h index 5a2b016..8d8d61c 100644 --- a/src/gui/kernel/qeventdispatcher_qws_p.h +++ b/src/gui/kernel/qeventdispatcher_qws_p.h @@ -57,7 +57,7 @@ QT_BEGIN_NAMESPACE -class QEventDispatcherLitePrivate; +class QEventDispatcherQWSPrivate; class QEventDispatcherQWS : public QEventDispatcherUNIX { diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 04d3d5a..af76926 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -4,6 +4,8 @@ #include "private/qapplication_p.h" #include "private/qpixmap_blitter_p.h" +#ifndef QT_NO_BLITTABLE + #define STATE_XFORM_SCALE 0x00000001 #define STATE_XFORM_COMPLEX 0x00000002 @@ -658,3 +660,5 @@ void QBlittable::unlock() d->locked = false; } } + +#endif //QT_NO_BLITTABLE diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index 2d9add9..ecc29ba 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -4,6 +4,8 @@ #include "private/qpaintengineex_p.h" #include "private/qpaintengine_raster_p.h" +#ifndef QT_NO_BLITTABLE + class QBlittablePrivate; class QBlitterPaintEnginePrivate; class QBlittablePixmapData; @@ -98,4 +100,5 @@ private: }; +#endif //QT_NO_BLITTABLE #endif // QPAINTENGINE_BLITTER_P_H diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index d51498f..07a9b8a 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -55,6 +55,10 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) { window->setWindowSurface(this); + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); + DFBDisplayLayerConfig layerConfig; + layer->GetConfiguration(layer,&layerConfig); + DFBWindowDescription description; memset(&description,0,sizeof(DFBWindowDescription)); description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS @@ -66,13 +70,17 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) description.height = window->rect().height(); description.posx = window->rect().x(); description.posy = window->rect().y(); + + if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED) + description.surface_caps = DSCAPS_PREMULTIPLIED; + description.pixelformat = layerConfig.pixelformat; + #if DIRECTFB_MINOR_VERSION >= 1 description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); #endif description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); description.surface_caps = DSCAPS_PREMULTIPLIED; - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); if (result != DFB_OK) { DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); -- cgit v0.12 From cf7fe6c1c7bd1189d37b603b38a7fc7feb4b5f41 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 1 Mar 2010 14:18:05 +0100 Subject: Compile after QStaticText introduction --- src/gui/painting/qpaintengine_blitter.cpp | 12 ++++++++++++ src/gui/painting/qpaintengine_blitter_p.h | 1 + 2 files changed, 13 insertions(+) diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index af76926..1032852 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -571,6 +571,18 @@ void QBlitterPaintEngine::drawTextItem(const QPointF &pos, const QTextItem &ti) d->pmData->markRasterOverlay(pos,ti); } +void QBlitterPaintEngine::drawStaticTextItem(QStaticTextItem *sti) +{ + Q_D(QBlitterPaintEngine); + d->lock(); + d->raster->drawStaticTextItem(sti); + +//#### d->pmData->markRasterOverlay(sti); + qWarning("not implemented: markRasterOverlay for QStaticTextItem"); + +} + + void QBlitterPaintEngine::drawEllipse(const QRectF &r) { Q_D(QBlitterPaintEngine); diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index ecc29ba..1a2ad9e 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -86,6 +86,7 @@ public: virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr, Qt::ImageConversionFlags flags); virtual void drawTextItem(const QPointF &pos, const QTextItem &ti); + virtual void drawStaticTextItem(QStaticTextItem *); virtual void drawEllipse(const QRectF &r); -- cgit v0.12 From 19231680666727a07270c44153aeb4a68d67de47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 5 Mar 2010 16:23:03 +0100 Subject: install fonts for lighthouse --- src/qt_install.pri | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/qt_install.pri b/src/qt_install.pri index f906e92..3cea79c 100644 --- a/src/qt_install.pri +++ b/src/qt_install.pri @@ -38,7 +38,7 @@ qt_install_headers { } } -embedded:equals(TARGET, QtGui) { +embedded|embedded_lite: equals(TARGET, QtGui) { # install fonts for embedded INSTALLS += fonts fonts.path = $$[QT_INSTALL_LIBS]/fonts -- cgit v0.12 From 3eb3527db4cfe86ab51506636376d1b59878f42a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 8 Mar 2010 14:26:44 +0100 Subject: QGraphcissystemCursor is now in a file with a _ in it So that syncqt does not generate an entry for it in QtGui --- src/gui/kernel/qapplication_lite.cpp | 2 +- src/gui/kernel/qwidget_lite.cpp | 2 +- src/gui/painting/painting.pri | 4 +- src/gui/painting/qgraphicssystemcursor.cpp | 654 --------------------- src/gui/painting/qgraphicssystemcursor.h | 87 --- src/gui/painting/qgraphicssystemcursor_lite.cpp | 654 +++++++++++++++++++++ src/gui/painting/qgraphicssystemcursor_lite.h | 87 +++ src/plugins/graphicssystems/fb_base/fb_base.cpp | 2 +- src/plugins/graphicssystems/fb_base/fb_base.h | 2 +- .../testlite/qgraphicssystem_testlite.cpp | 2 +- 10 files changed, 748 insertions(+), 748 deletions(-) delete mode 100644 src/gui/painting/qgraphicssystemcursor.cpp delete mode 100644 src/gui/painting/qgraphicssystemcursor.h create mode 100644 src/gui/painting/qgraphicssystemcursor_lite.cpp create mode 100644 src/gui/painting/qgraphicssystemcursor_lite.h diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 5ca6717..5d7ab5a 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -57,7 +57,7 @@ #include #include "private/qgraphicssystem_p.h" -#include "qgraphicssystemcursor.h" +#include #include #include diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 3913708..bcbcd82 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -48,7 +48,7 @@ #include "private/qapplication_p.h" #include "qdesktopwidget.h" -#include "qgraphicssystemcursor.h" +#include QT_BEGIN_NAMESPACE static QGraphicsSystemScreen *qt_screenForWidget(const QWidget *w); diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 8fea4e6..8e7bba7 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -183,9 +183,9 @@ embedded_lite { SOURCES += \ painting/qcolormap_lite.cpp \ painting/qpaintdevice_lite.cpp \ - painting/qgraphicssystemcursor.cpp + painting/qgraphicssystemcursor_lite.cpp HEADERS += \ - painting/qgraphicssystemcursor.h + painting/qgraphicssystemcursor_lite.h } symbian { diff --git a/src/gui/painting/qgraphicssystemcursor.cpp b/src/gui/painting/qgraphicssystemcursor.cpp deleted file mode 100644 index f8d24b1..0000000 --- a/src/gui/painting/qgraphicssystemcursor.cpp +++ /dev/null @@ -1,654 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "qgraphicssystemcursor.h" - -#include -#include -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -QPointer QGraphicsSystemCursor::instance = 0; - -/*! - \class QGraphicsSystemCursor - - \brief The QGraphicsSystemCursor class provides information about - pointer device events (movement, buttons), and requests to change - the currently displayed cursor. - - Note that QGraphicsSystemCursor does not include any graphics for - display. An application that sets a QCursor may provide its own - graphics. - - \sa QGraphicsSystemCursorImage -*/ - -/*! - \fn virtual void pointerEvent(const QMouseEvent & event) - - This method is called by Qt whenever a QMouseEvent is generated by the - underlying pointer input. \a event is a reference to the QMouseEvent in - question. A default do-nothing implementation is provided. - - \sa QApplicationPrivate::handleMouseEvent() -*/ - -/*! - \fn virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) - - \brief This method is called by Qt whenever the cursor graphic should be changed. - - Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. - - \a widgetCursor is a pointer to the QCursor that should be displayed. - - \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note - that this may be 0 if the current position is not occupied by a displayed widget. - - \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() -*/ - -/*! - Constructs a QGraphicsSystemCursor - -*/ -QGraphicsSystemCursor::QGraphicsSystemCursor(QGraphicsSystemScreen *scr ) - : screen(scr) -{ - instance = this; -} - -// End of display and pointer event handling code -// Beginning of built-in cursor graphics -// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp - -static QGraphicsSystemCursorImage *systemCursorTable[Qt::LastCursor+1]; -static bool systemCursorTableInit = false; - -// 16 x 16 -static const uchar cur_arrow_bits[] = { - 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, - 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, - 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; -static const uchar mcur_arrow_bits[] = { - 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, - 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, - 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; - -static const unsigned char cur_up_arrow_bits[] = { - 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, - 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; -static const unsigned char mcur_up_arrow_bits[] = { - 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, - 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; - -static const unsigned char cur_cross_bits[] = { - 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; -static const unsigned char mcur_cross_bits[] = { - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; - -static const uchar cur_ibeam_bits[] = { - 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_ibeam_bits[] = { - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; - -static const uchar cur_ver_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, - 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; -static const uchar mcur_ver_bits[] = { - 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, - 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, - 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; - -static const uchar cur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, - 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, - 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, - 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; -static const uchar cur_bdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, - 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, - 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_bdiag_bits[] = { - 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, - 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, - 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; -static const uchar cur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, - 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, - 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, - 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, - 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; -static const uchar cur_blank_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -// 20 x 20 -static const uchar forbidden_bits[] = { - 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, - 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, - 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, - 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; - -static const uchar forbiddenm_bits[] = { - 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, - 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, - 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, - 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; - -// 32 x 32 -static const uchar wait_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, - 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, - 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, - 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar wait_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, - 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar hsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, - 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar hsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, - 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, - 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, - 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phand_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, - 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, - 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, - 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phandm_bits[] = { - 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, - 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, - 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, - 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, - 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar size_all_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, - 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar size_all_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, - 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar whatsthis_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, - 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, - 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, - 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, - 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, - 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static const uchar whatsthism_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, - 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, - 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, - 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, - 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, - 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - -static const uchar busy_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, - 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, - 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, - 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, - 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; -static const uchar busym_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, - 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, - 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, - 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, - 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -// 16 x 16 -static const uchar openhand_bits[] = { - 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, - 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, - 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; -static const uchar openhandm_bits[] = { - 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, - 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, - 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; -static const uchar closedhand_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, - 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, - 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; -static const uchar closedhandm_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, - 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, - 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; - -void QGraphicsSystemCursorImage::createSystemCursor(int id) -{ - if (!systemCursorTableInit) { - for (int i = 0; i <= Qt::LastCursor; i++) - systemCursorTable[i] = 0; - systemCursorTableInit = true; - } - switch (id) { - // 16x16 cursors - case Qt::ArrowCursor: - systemCursorTable[Qt::ArrowCursor] = - new QGraphicsSystemCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); - break; - - case Qt::UpArrowCursor: - systemCursorTable[Qt::UpArrowCursor] = - new QGraphicsSystemCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); - break; - - case Qt::CrossCursor: - systemCursorTable[Qt::CrossCursor] = - new QGraphicsSystemCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); - break; - - case Qt::IBeamCursor: - systemCursorTable[Qt::IBeamCursor] = - new QGraphicsSystemCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); - break; - - case Qt::SizeVerCursor: - systemCursorTable[Qt::SizeVerCursor] = - new QGraphicsSystemCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); - break; - - case Qt::SizeHorCursor: - systemCursorTable[Qt::SizeHorCursor] = - new QGraphicsSystemCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); - break; - - case Qt::SizeBDiagCursor: - systemCursorTable[Qt::SizeBDiagCursor] = - new QGraphicsSystemCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); - break; - - case Qt::SizeFDiagCursor: - systemCursorTable[Qt::SizeFDiagCursor] = - new QGraphicsSystemCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); - break; - - case Qt::BlankCursor: - systemCursorTable[Qt::BlankCursor] = - new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); - break; - - // 20x20 cursors - case Qt::ForbiddenCursor: - systemCursorTable[Qt::ForbiddenCursor] = - new QGraphicsSystemCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); - break; - - // 32x32 cursors - case Qt::WaitCursor: - systemCursorTable[Qt::WaitCursor] = - new QGraphicsSystemCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); - break; - - case Qt::SplitVCursor: - systemCursorTable[Qt::SplitVCursor] = - new QGraphicsSystemCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SplitHCursor: - systemCursorTable[Qt::SplitHCursor] = - new QGraphicsSystemCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SizeAllCursor: - systemCursorTable[Qt::SizeAllCursor] = - new QGraphicsSystemCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); - break; - - case Qt::PointingHandCursor: - systemCursorTable[Qt::PointingHandCursor] = - new QGraphicsSystemCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); - break; - - case Qt::WhatsThisCursor: - systemCursorTable[Qt::WhatsThisCursor] = - new QGraphicsSystemCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); - break; - case Qt::BusyCursor: - systemCursorTable[Qt::BusyCursor] = - new QGraphicsSystemCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); - break; - - case Qt::OpenHandCursor: - systemCursorTable[Qt::OpenHandCursor] = - new QGraphicsSystemCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); - break; - case Qt::ClosedHandCursor: - systemCursorTable[Qt::ClosedHandCursor] = - new QGraphicsSystemCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); - break; - default: - qWarning("Unknown system cursor %d", id); - } -} - -/*! - \fn void set(Qt::CursorShape id) - - \brief Calling this method sets the cursor image to the specified shape - - \a id is one of the defined Qt::CursorShape values. - - If id is invalid, Qt::BitmapCursor, or unknown by the implementation, - Qt::ArrowCursor is used instead. -*/ - -void QGraphicsSystemCursorImage::set(Qt::CursorShape id) -{ - QGraphicsSystemCursorImage *cursor = 0; - if (id >= 0 && id <= Qt::LastCursor) { - if (!systemCursorTable[id]) - createSystemCursor(id); - cursor = systemCursorTable[id]; - } - - if (cursor == 0) { - if (!systemCursorTable[Qt::ArrowCursor]) - createSystemCursor(Qt::ArrowCursor); - cursor = systemCursorTable[Qt::ArrowCursor]; - } - cursorImage = cursor->cursorImage; - hot = cursor->hot; -} - -/*! - \fn void set(const QImage * image, int hx, int hy) - - \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) - - \a image A pointer to a QImage - - \a hx The x coordinate of the cursor's hotspot - - \a hy the y coordinate of the cursor's hotspot -*/ - -void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - cursorImage = *image; -} - -/*! - \fn set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) - - \brief set the cursor image to the graphic represented by the combination of data, mask, - width, and height - - \a data The pixel data of the graphic - - \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn - - \a width The width of the graphic in pixels - - \a height The height of the graphic in pixels - - \a hx The X hotspot of the cursor graphic - - \a hy The Y hotspot of the cursor graphic -*/ -void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, - int width, int height, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - - cursorImage = QImage(width,height, QImage::Format_Indexed8); - - if (!width || !height || !data || !mask || cursorImage.isNull()) - return; - - cursorImage.setNumColors(3); - cursorImage.setColor(0, 0xff000000); - cursorImage.setColor(1, 0xffffffff); - cursorImage.setColor(2, 0x00000000); - - int bytesPerLine = (width + 7) / 8; - int p = 0; - int d, m; - - int x = -1, w = 0; - - uchar *cursor_data = cursorImage.bits(); - int bpl = cursorImage.bytesPerLine(); - for (int i = 0; i < height; i++) - { - for (int j = 0; j < bytesPerLine; j++, data++, mask++) - { - for (int b = 0; b < 8 && j*8+b < width; b++) - { - d = *data & (1 << b); - m = *mask & (1 << b); - if (d && m) p = 0; - else if (!d && m) p = 1; - else p = 2; - cursor_data[j*8+b] = p; - - // calc region - if (x < 0 && m) - x = j*8+b; - else if (x >= 0 && !m) { - x = -1; - w = 0; - } - if (m) - w++; - } - } - if (x >= 0) { - x = -1; - w = 0; - } - cursor_data += bpl; - } - -} - -/*! - \fn QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - - \brief set the cursor image to the graphic represented by the combination of data, mask, - width, and height - - \a data The pixel data of the graphic - - \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn - - \a width The width of the graphic in pixels - - \a height The height of the graphic in pixels - - \a hotX The X hotspot of the cursor graphic - - \a hotY The Y hotspot of the cursor graphic - - \sa set -*/ - -/*! - \fn QImage *image() - - \brief Return the cursor graphic as a pointer to a QImage -*/ - -/*! - \fn QPoint hotspot - - \brief Return the cursor's hotspot -*/ - -QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor.h b/src/gui/painting/qgraphicssystemcursor.h deleted file mode 100644 index 0d57d52..0000000 --- a/src/gui/painting/qgraphicssystemcursor.h +++ /dev/null @@ -1,87 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QGRAPHICSSYSTEMCURSOR_H -#define QGRAPHICSSYSTEMCURSOR_H - -#include -#include -#include -#include -#include -#include "qgraphicssystem_p.h" - -QT_BEGIN_NAMESPACE - -// Cursor graphics management -class Q_GUI_EXPORT QGraphicsSystemCursorImage { -public: - QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - { set(data, mask, width, height, hotX, hotY); } - QImage * image() { return &cursorImage; } - QPoint hotspot() { return hot; } - void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void set(const QImage * image, int hx, int hy); - void set(Qt::CursorShape); -private: - static void createSystemCursor(int id); - QImage cursorImage; - QPoint hot; -}; - -class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { -public: - QGraphicsSystemCursor(QGraphicsSystemScreen *); - - // input methods - virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } - virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; - - static QPointer getInstance() { return instance; } - -protected: - static QPointer instance; // limit 1 cursor at a time - - QGraphicsSystemScreen * screen; // Where to request an update -}; - -QT_END_NAMESPACE - -#endif // QGRAPHICSSYSTEMCURSOR_H diff --git a/src/gui/painting/qgraphicssystemcursor_lite.cpp b/src/gui/painting/qgraphicssystemcursor_lite.cpp new file mode 100644 index 0000000..76b7d97 --- /dev/null +++ b/src/gui/painting/qgraphicssystemcursor_lite.cpp @@ -0,0 +1,654 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qgraphicssystemcursor_lite.h" + +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +QPointer QGraphicsSystemCursor::instance = 0; + +/*! + \class QGraphicsSystemCursor + + \brief The QGraphicsSystemCursor class provides information about + pointer device events (movement, buttons), and requests to change + the currently displayed cursor. + + Note that QGraphicsSystemCursor does not include any graphics for + display. An application that sets a QCursor may provide its own + graphics. + + \sa QGraphicsSystemCursorImage +*/ + +/*! + \fn virtual void pointerEvent(const QMouseEvent & event) + + This method is called by Qt whenever a QMouseEvent is generated by the + underlying pointer input. \a event is a reference to the QMouseEvent in + question. A default do-nothing implementation is provided. + + \sa QApplicationPrivate::handleMouseEvent() +*/ + +/*! + \fn virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) + + \brief This method is called by Qt whenever the cursor graphic should be changed. + + Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. + + \a widgetCursor is a pointer to the QCursor that should be displayed. + + \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note + that this may be 0 if the current position is not occupied by a displayed widget. + + \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() +*/ + +/*! + Constructs a QGraphicsSystemCursor + +*/ +QGraphicsSystemCursor::QGraphicsSystemCursor(QGraphicsSystemScreen *scr ) + : screen(scr) +{ + instance = this; +} + +// End of display and pointer event handling code +// Beginning of built-in cursor graphics +// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp + +static QGraphicsSystemCursorImage *systemCursorTable[Qt::LastCursor+1]; +static bool systemCursorTableInit = false; + +// 16 x 16 +static const uchar cur_arrow_bits[] = { + 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, + 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, + 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; +static const uchar mcur_arrow_bits[] = { + 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, + 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, + 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; + +static const unsigned char cur_up_arrow_bits[] = { + 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, + 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; +static const unsigned char mcur_up_arrow_bits[] = { + 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, + 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; + +static const unsigned char cur_cross_bits[] = { + 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; +static const unsigned char mcur_cross_bits[] = { + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; + +static const uchar cur_ibeam_bits[] = { + 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_ibeam_bits[] = { + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; + +static const uchar cur_ver_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; +static const uchar mcur_ver_bits[] = { + 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, + 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, + 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; + +static const uchar cur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, + 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, + 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, + 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; +static const uchar cur_bdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, + 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, + 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_bdiag_bits[] = { + 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, + 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, + 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; +static const uchar cur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, + 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, + 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, + 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, + 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; +static const uchar cur_blank_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +// 20 x 20 +static const uchar forbidden_bits[] = { + 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, + 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, + 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, + 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; + +static const uchar forbiddenm_bits[] = { + 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, + 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, + 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, + 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; + +// 32 x 32 +static const uchar wait_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, + 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, + 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, + 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar wait_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, + 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar hsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, + 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar hsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, + 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, + 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, + 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phand_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, + 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, + 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phandm_bits[] = { + 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, + 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, + 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, + 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, + 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar size_all_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, + 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar size_all_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, + 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar whatsthis_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, + 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, + 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, + 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, + 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +static const uchar whatsthism_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, + 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, + 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, + 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, + 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, + 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; + +static const uchar busy_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, + 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, + 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, + 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, + 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static const uchar busym_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, + 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, + 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, + 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, + 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +// 16 x 16 +static const uchar openhand_bits[] = { + 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, + 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, + 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; +static const uchar openhandm_bits[] = { + 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, + 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, + 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; +static const uchar closedhand_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, + 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, + 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; +static const uchar closedhandm_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, + 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, + 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; + +void QGraphicsSystemCursorImage::createSystemCursor(int id) +{ + if (!systemCursorTableInit) { + for (int i = 0; i <= Qt::LastCursor; i++) + systemCursorTable[i] = 0; + systemCursorTableInit = true; + } + switch (id) { + // 16x16 cursors + case Qt::ArrowCursor: + systemCursorTable[Qt::ArrowCursor] = + new QGraphicsSystemCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); + break; + + case Qt::UpArrowCursor: + systemCursorTable[Qt::UpArrowCursor] = + new QGraphicsSystemCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); + break; + + case Qt::CrossCursor: + systemCursorTable[Qt::CrossCursor] = + new QGraphicsSystemCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); + break; + + case Qt::IBeamCursor: + systemCursorTable[Qt::IBeamCursor] = + new QGraphicsSystemCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); + break; + + case Qt::SizeVerCursor: + systemCursorTable[Qt::SizeVerCursor] = + new QGraphicsSystemCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); + break; + + case Qt::SizeHorCursor: + systemCursorTable[Qt::SizeHorCursor] = + new QGraphicsSystemCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); + break; + + case Qt::SizeBDiagCursor: + systemCursorTable[Qt::SizeBDiagCursor] = + new QGraphicsSystemCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); + break; + + case Qt::SizeFDiagCursor: + systemCursorTable[Qt::SizeFDiagCursor] = + new QGraphicsSystemCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); + break; + + case Qt::BlankCursor: + systemCursorTable[Qt::BlankCursor] = + new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); + break; + + // 20x20 cursors + case Qt::ForbiddenCursor: + systemCursorTable[Qt::ForbiddenCursor] = + new QGraphicsSystemCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); + break; + + // 32x32 cursors + case Qt::WaitCursor: + systemCursorTable[Qt::WaitCursor] = + new QGraphicsSystemCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); + break; + + case Qt::SplitVCursor: + systemCursorTable[Qt::SplitVCursor] = + new QGraphicsSystemCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SplitHCursor: + systemCursorTable[Qt::SplitHCursor] = + new QGraphicsSystemCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SizeAllCursor: + systemCursorTable[Qt::SizeAllCursor] = + new QGraphicsSystemCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); + break; + + case Qt::PointingHandCursor: + systemCursorTable[Qt::PointingHandCursor] = + new QGraphicsSystemCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); + break; + + case Qt::WhatsThisCursor: + systemCursorTable[Qt::WhatsThisCursor] = + new QGraphicsSystemCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); + break; + case Qt::BusyCursor: + systemCursorTable[Qt::BusyCursor] = + new QGraphicsSystemCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); + break; + + case Qt::OpenHandCursor: + systemCursorTable[Qt::OpenHandCursor] = + new QGraphicsSystemCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); + break; + case Qt::ClosedHandCursor: + systemCursorTable[Qt::ClosedHandCursor] = + new QGraphicsSystemCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); + break; + default: + qWarning("Unknown system cursor %d", id); + } +} + +/*! + \fn void set(Qt::CursorShape id) + + \brief Calling this method sets the cursor image to the specified shape + + \a id is one of the defined Qt::CursorShape values. + + If id is invalid, Qt::BitmapCursor, or unknown by the implementation, + Qt::ArrowCursor is used instead. +*/ + +void QGraphicsSystemCursorImage::set(Qt::CursorShape id) +{ + QGraphicsSystemCursorImage *cursor = 0; + if (id >= 0 && id <= Qt::LastCursor) { + if (!systemCursorTable[id]) + createSystemCursor(id); + cursor = systemCursorTable[id]; + } + + if (cursor == 0) { + if (!systemCursorTable[Qt::ArrowCursor]) + createSystemCursor(Qt::ArrowCursor); + cursor = systemCursorTable[Qt::ArrowCursor]; + } + cursorImage = cursor->cursorImage; + hot = cursor->hot; +} + +/*! + \fn void set(const QImage * image, int hx, int hy) + + \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) + + \a image A pointer to a QImage + + \a hx The x coordinate of the cursor's hotspot + + \a hy the y coordinate of the cursor's hotspot +*/ + +void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + cursorImage = *image; +} + +/*! + \fn set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hx The X hotspot of the cursor graphic + + \a hy The Y hotspot of the cursor graphic +*/ +void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, + int width, int height, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + + cursorImage = QImage(width,height, QImage::Format_Indexed8); + + if (!width || !height || !data || !mask || cursorImage.isNull()) + return; + + cursorImage.setNumColors(3); + cursorImage.setColor(0, 0xff000000); + cursorImage.setColor(1, 0xffffffff); + cursorImage.setColor(2, 0x00000000); + + int bytesPerLine = (width + 7) / 8; + int p = 0; + int d, m; + + int x = -1, w = 0; + + uchar *cursor_data = cursorImage.bits(); + int bpl = cursorImage.bytesPerLine(); + for (int i = 0; i < height; i++) + { + for (int j = 0; j < bytesPerLine; j++, data++, mask++) + { + for (int b = 0; b < 8 && j*8+b < width; b++) + { + d = *data & (1 << b); + m = *mask & (1 << b); + if (d && m) p = 0; + else if (!d && m) p = 1; + else p = 2; + cursor_data[j*8+b] = p; + + // calc region + if (x < 0 && m) + x = j*8+b; + else if (x >= 0 && !m) { + x = -1; + w = 0; + } + if (m) + w++; + } + } + if (x >= 0) { + x = -1; + w = 0; + } + cursor_data += bpl; + } + +} + +/*! + \fn QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hotX The X hotspot of the cursor graphic + + \a hotY The Y hotspot of the cursor graphic + + \sa set +*/ + +/*! + \fn QImage *image() + + \brief Return the cursor graphic as a pointer to a QImage +*/ + +/*! + \fn QPoint hotspot + + \brief Return the cursor's hotspot +*/ + +QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor_lite.h b/src/gui/painting/qgraphicssystemcursor_lite.h new file mode 100644 index 0000000..0d57d52 --- /dev/null +++ b/src/gui/painting/qgraphicssystemcursor_lite.h @@ -0,0 +1,87 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QGRAPHICSSYSTEMCURSOR_H +#define QGRAPHICSSYSTEMCURSOR_H + +#include +#include +#include +#include +#include +#include "qgraphicssystem_p.h" + +QT_BEGIN_NAMESPACE + +// Cursor graphics management +class Q_GUI_EXPORT QGraphicsSystemCursorImage { +public: + QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + { set(data, mask, width, height, hotX, hotY); } + QImage * image() { return &cursorImage; } + QPoint hotspot() { return hot; } + void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void set(const QImage * image, int hx, int hy); + void set(Qt::CursorShape); +private: + static void createSystemCursor(int id); + QImage cursorImage; + QPoint hot; +}; + +class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { +public: + QGraphicsSystemCursor(QGraphicsSystemScreen *); + + // input methods + virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } + virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; + + static QPointer getInstance() { return instance; } + +protected: + static QPointer instance; // limit 1 cursor at a time + + QGraphicsSystemScreen * screen; // Where to request an update +}; + +QT_END_NAMESPACE + +#endif // QGRAPHICSSYSTEMCURSOR_H diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index 6567e95..da7ddb8 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen *scr) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index c46a99d..8b130d2 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -6,7 +6,7 @@ #include #include #include -#include +#include class QMouseEvent; class QSize; diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp index ed8f883..92e0ebc 100644 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp @@ -44,7 +44,7 @@ #include #include -#include +#include #include "x11util.h" -- cgit v0.12 From e6b9bc4c4269be040c947a464acf2b5c65ba38cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 8 Mar 2010 16:55:29 +0100 Subject: Minimaldfb: cleanup how to compile Add variables DIRECTFB_LIBS and DIRECTFB_INCLUDEPATH to your mkspec --- src/plugins/graphicssystems/minimaldfb/minimaldfb.pro | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro index f5d2406..b6c2ea8 100644 --- a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro +++ b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro @@ -2,18 +2,14 @@ TARGET = qminimaldfb include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems -system(pkg-config --exists directfb) { - DIRECTFB_CFLAGS = $$system(pkg-config --cflags directfb) - DIRECTFB_LIBS = $$system(pkg-config --libs directfb) -} else { - directfb_config = $$SYSTEM(which directfb-config) - !isEmpty(directfb_config) { - DIRECTFB_CFLAGS = $$system(directfb-config --cflags) - DIRECTFB_LIBS = $$system(directfb-config --libs) - } +isEmpty(DIRECTFB_LIBS) { + DIRECTFB_LIBS = -ldirectfb -lfusion -ldirect -lpthread +} +isEmpty(DIRECTFB_INCLUDEPATH) { + DIRECTFB_INCLUDEPATH = /usr/include/directfb } -QMAKE_CXXFLAGS += $$DIRECTFB_CFLAGS +INCLUDEPATH += $$DIRECTFB_INCLUDEPATH LIBS += $$DIRECTFB_LIBS SOURCES = main.cpp \ -- cgit v0.12 From b9f8c1491550fe671d1809481ad7f70737034a3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 8 Mar 2010 16:57:54 +0100 Subject: LinuxFb: call initDevice So you turn off the cursor blinking and remove redundant forward class declaration --- src/plugins/graphicssystems/fb_base/fb_base.h | 1 - src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index 8b130d2..91b6d12 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -12,7 +12,6 @@ class QMouseEvent; class QSize; class QPainter; -class QGraphicsSystemFbWindowSurface; class QGraphicsSystemFbScreen; class QGraphicsSystemSoftwareCursor : public QGraphicsSystemCursor diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp index f5ca6e7..a373ba8 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp @@ -164,6 +164,7 @@ QLinuxFbGraphicsSystem::QLinuxFbGraphicsSystem() if (!connect(displaySpec)) qFatal("QLinuxFbGraphicsSystem: could not initialize screen"); + initDevice(); // Create a QImage directly on the screen's framebuffer. // This is the blit target for copying windows to the screen. -- cgit v0.12 From cf841986a5941047a37548c83810c96bcd600539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 11 Mar 2010 14:41:28 +0100 Subject: Make QNativeImage use the screen format --- src/gui/image/qnativeimage.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp index 8446387..3420778 100644 --- a/src/gui/image/qnativeimage.cpp +++ b/src/gui/image/qnativeimage.cpp @@ -45,6 +45,9 @@ #include "private/qpaintengine_raster_p.h" +#include "private/qapplication_p.h" +#include "private/qgraphicssystem_p.h" + #if defined(Q_WS_X11) && !defined(QT_NO_MITSHM) #include #include @@ -284,7 +287,11 @@ QNativeImage::~QNativeImage() QImage::Format QNativeImage::systemFormat() { +#ifdef Q_WS_LITE + return QApplicationPrivate::graphicsSystem()->screens().at(0)->format(); +#else return QImage::Format_RGB32; +#endif } #endif // platforms -- cgit v0.12 From a029628b5e626f4213031427aec0f62ffbef4cab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 15 Mar 2010 15:12:37 +0100 Subject: Add blendfunctions for "all" depths on all platforms and not only QWS --- src/gui/painting/qdrawhelper.cpp | 90 ++++++++++++++++++++-------------------- src/gui/painting/qdrawhelper_p.h | 2 - 2 files changed, 45 insertions(+), 47 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index 581b538..fd1ac00 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -4676,7 +4676,7 @@ void QT_FASTCALL blendUntransformed(int count, const QSpan *spans, void *userDat static void blend_untransformed_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) +#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -4689,7 +4689,7 @@ static void blend_untransformed_rgb888(int count, const QSpan *spans, static void blend_untransformed_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -4704,7 +4704,7 @@ static void blend_untransformed_argb6666(int count, const QSpan *spans, static void blend_untransformed_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -4719,7 +4719,7 @@ static void blend_untransformed_rgb666(int count, const QSpan *spans, static void blend_untransformed_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -4734,7 +4734,7 @@ static void blend_untransformed_argb8565(int count, const QSpan *spans, static void blend_untransformed_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -4749,7 +4749,7 @@ static void blend_untransformed_rgb565(int count, const QSpan *spans, static void blend_untransformed_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -4764,7 +4764,7 @@ static void blend_untransformed_argb8555(int count, const QSpan *spans, static void blend_untransformed_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -4779,7 +4779,7 @@ static void blend_untransformed_rgb555(int count, const QSpan *spans, static void blend_untransformed_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -4794,7 +4794,7 @@ static void blend_untransformed_argb4444(int count, const QSpan *spans, static void blend_untransformed_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -5018,7 +5018,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blendTiled(int count, const QSpan *spans, void * static void blend_tiled_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) +#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -5030,7 +5030,7 @@ static void blend_tiled_rgb888(int count, const QSpan *spans, void *userData) static void blend_tiled_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -5044,7 +5044,7 @@ static void blend_tiled_argb6666(int count, const QSpan *spans, void *userData) static void blend_tiled_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -5058,7 +5058,7 @@ static void blend_tiled_rgb666(int count, const QSpan *spans, void *userData) static void blend_tiled_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -5072,7 +5072,7 @@ static void blend_tiled_argb8565(int count, const QSpan *spans, void *userData) static void blend_tiled_rgb565(int count, const QSpan *spans, void *userData) { -#if !defined(Q_WS_QWS) || defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -5086,7 +5086,7 @@ static void blend_tiled_rgb565(int count, const QSpan *spans, void *userData) static void blend_tiled_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -5100,7 +5100,7 @@ static void blend_tiled_argb8555(int count, const QSpan *spans, void *userData) static void blend_tiled_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -5114,7 +5114,7 @@ static void blend_tiled_rgb555(int count, const QSpan *spans, void *userData) static void blend_tiled_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -5128,7 +5128,7 @@ static void blend_tiled_argb4444(int count, const QSpan *spans, void *userData) static void blend_tiled_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -5522,7 +5522,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blendTransformedBilinear(int count, const QSpan static void blend_transformed_bilinear_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) +#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -5534,7 +5534,7 @@ static void blend_transformed_bilinear_rgb888(int count, const QSpan *spans, voi static void blend_transformed_bilinear_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -5548,7 +5548,7 @@ static void blend_transformed_bilinear_argb6666(int count, const QSpan *spans, v static void blend_transformed_bilinear_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -5562,7 +5562,7 @@ static void blend_transformed_bilinear_rgb666(int count, const QSpan *spans, voi static void blend_transformed_bilinear_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -5577,7 +5577,7 @@ static void blend_transformed_bilinear_argb8565(int count, const QSpan *spans, v static void blend_transformed_bilinear_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB16) @@ -5591,7 +5591,7 @@ static void blend_transformed_bilinear_rgb565(int count, const QSpan *spans, static void blend_transformed_bilinear_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -5605,7 +5605,7 @@ static void blend_transformed_bilinear_argb8555(int count, const QSpan *spans, v static void blend_transformed_bilinear_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -5619,7 +5619,7 @@ static void blend_transformed_bilinear_rgb555(int count, const QSpan *spans, voi static void blend_transformed_bilinear_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -5633,7 +5633,7 @@ static void blend_transformed_bilinear_argb4444(int count, const QSpan *spans, v static void blend_transformed_bilinear_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -6106,7 +6106,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blendTransformed(int count, const QSpan *spans, static void blend_transformed_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) +#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -6119,7 +6119,7 @@ static void blend_transformed_rgb888(int count, const QSpan *spans, static void blend_transformed_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -6134,7 +6134,7 @@ static void blend_transformed_argb6666(int count, const QSpan *spans, static void blend_transformed_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -6149,7 +6149,7 @@ static void blend_transformed_rgb666(int count, const QSpan *spans, static void blend_transformed_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -6164,7 +6164,7 @@ static void blend_transformed_argb8565(int count, const QSpan *spans, static void blend_transformed_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -6179,7 +6179,7 @@ static void blend_transformed_rgb565(int count, const QSpan *spans, static void blend_transformed_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -6194,7 +6194,7 @@ static void blend_transformed_argb8555(int count, const QSpan *spans, static void blend_transformed_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -6209,7 +6209,7 @@ static void blend_transformed_rgb555(int count, const QSpan *spans, static void blend_transformed_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -6224,7 +6224,7 @@ static void blend_transformed_argb4444(int count, const QSpan *spans, static void blend_transformed_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -6519,7 +6519,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blendTransformedTiled(int count, const QSpan *sp static void blend_transformed_tiled_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) +#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -6532,7 +6532,7 @@ static void blend_transformed_tiled_rgb888(int count, const QSpan *spans, static void blend_transformed_tiled_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -6547,7 +6547,7 @@ static void blend_transformed_tiled_argb6666(int count, const QSpan *spans, static void blend_transformed_tiled_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) +#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -6562,7 +6562,7 @@ static void blend_transformed_tiled_rgb666(int count, const QSpan *spans, static void blend_transformed_tiled_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -6577,7 +6577,7 @@ static void blend_transformed_tiled_argb8565(int count, const QSpan *spans, static void blend_transformed_tiled_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) +#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -6592,7 +6592,7 @@ static void blend_transformed_tiled_rgb565(int count, const QSpan *spans, static void blend_transformed_tiled_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -6607,7 +6607,7 @@ static void blend_transformed_tiled_argb8555(int count, const QSpan *spans, static void blend_transformed_tiled_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) +#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -6622,7 +6622,7 @@ static void blend_transformed_tiled_rgb555(int count, const QSpan *spans, static void blend_transformed_tiled_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -6637,7 +6637,7 @@ static void blend_transformed_tiled_argb4444(int count, const QSpan *spans, static void blend_transformed_tiled_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) +#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index f5b17ea..a582793 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -1618,9 +1618,7 @@ QT_TRIVIAL_MEMCONVERT_IMPL(qrgb888) QT_TRIVIAL_MEMCONVERT_IMPL(qargb6666) QT_TRIVIAL_MEMCONVERT_IMPL(qrgb666) QT_TRIVIAL_MEMCONVERT_IMPL(quint16) -#ifdef Q_WS_QWS QT_TRIVIAL_MEMCONVERT_IMPL(qrgb565) -#endif QT_TRIVIAL_MEMCONVERT_IMPL(qargb8565) QT_TRIVIAL_MEMCONVERT_IMPL(qargb8555) QT_TRIVIAL_MEMCONVERT_IMPL(qrgb555) -- cgit v0.12 From fd3688cc931b7ea69027fa98847901c8212cf3da Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 16 Mar 2010 10:56:50 +0100 Subject: Don't use the QWS install target for Lighthouse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- configure | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/configure b/configure index 337c59a..461a6d9 100755 --- a/configure +++ b/configure @@ -3196,7 +3196,11 @@ if [ -z "$QT_INSTALL_PREFIX" ]; then if [ "$CFG_DEV" = "yes" ]; then QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default elif [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then - QT_INSTALL_PREFIX="/usr/local/Trolltech/QtEmbedded-${QT_VERSION}" + if [ "$PLATFORM_EMBLITE" = "yes" ]; then + QT_INSTALL_PREFIX="/usr/local/Trolltech/QtLighthouse-${QT_VERSION}" + else + QT_INSTALL_PREFIX="/usr/local/Trolltech/QtEmbedded-${QT_VERSION}" + fi if [ "$PLATFORM" != "$XPLATFORM" ]; then QT_INSTALL_PREFIX="${QT_INSTALL_PREFIX}-${CFG_ARCH}" fi -- cgit v0.12 From 349d2dd29cd6f4c90c1890e3f56850883f5ac07d Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 18 Mar 2010 14:23:04 +0100 Subject: Revert "Add blendfunctions for "all" depths on all platforms" Details: It turns out that the original code is more accurate and in most cases faster as well. This reverts commit a029628b5e626f4213031427aec0f62ffbef4cab. --- src/gui/painting/qdrawhelper.cpp | 90 ++++++++++++++++++++-------------------- src/gui/painting/qdrawhelper_p.h | 2 + 2 files changed, 47 insertions(+), 45 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index fd1ac00..581b538 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -4676,7 +4676,7 @@ void QT_FASTCALL blendUntransformed(int count, const QSpan *spans, void *userDat static void blend_untransformed_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_24) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -4689,7 +4689,7 @@ static void blend_untransformed_rgb888(int count, const QSpan *spans, static void blend_untransformed_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -4704,7 +4704,7 @@ static void blend_untransformed_argb6666(int count, const QSpan *spans, static void blend_untransformed_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -4719,7 +4719,7 @@ static void blend_untransformed_rgb666(int count, const QSpan *spans, static void blend_untransformed_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -4734,7 +4734,7 @@ static void blend_untransformed_argb8565(int count, const QSpan *spans, static void blend_untransformed_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -4749,7 +4749,7 @@ static void blend_untransformed_rgb565(int count, const QSpan *spans, static void blend_untransformed_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -4764,7 +4764,7 @@ static void blend_untransformed_argb8555(int count, const QSpan *spans, static void blend_untransformed_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -4779,7 +4779,7 @@ static void blend_untransformed_rgb555(int count, const QSpan *spans, static void blend_untransformed_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -4794,7 +4794,7 @@ static void blend_untransformed_argb4444(int count, const QSpan *spans, static void blend_untransformed_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -5018,7 +5018,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blendTiled(int count, const QSpan *spans, void * static void blend_tiled_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_24) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -5030,7 +5030,7 @@ static void blend_tiled_rgb888(int count, const QSpan *spans, void *userData) static void blend_tiled_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -5044,7 +5044,7 @@ static void blend_tiled_argb6666(int count, const QSpan *spans, void *userData) static void blend_tiled_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -5058,7 +5058,7 @@ static void blend_tiled_rgb666(int count, const QSpan *spans, void *userData) static void blend_tiled_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -5072,7 +5072,7 @@ static void blend_tiled_argb8565(int count, const QSpan *spans, void *userData) static void blend_tiled_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if !defined(Q_WS_QWS) || defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -5086,7 +5086,7 @@ static void blend_tiled_rgb565(int count, const QSpan *spans, void *userData) static void blend_tiled_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -5100,7 +5100,7 @@ static void blend_tiled_argb8555(int count, const QSpan *spans, void *userData) static void blend_tiled_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -5114,7 +5114,7 @@ static void blend_tiled_rgb555(int count, const QSpan *spans, void *userData) static void blend_tiled_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -5128,7 +5128,7 @@ static void blend_tiled_argb4444(int count, const QSpan *spans, void *userData) static void blend_tiled_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -5522,7 +5522,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blendTransformedBilinear(int count, const QSpan static void blend_transformed_bilinear_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_24) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -5534,7 +5534,7 @@ static void blend_transformed_bilinear_rgb888(int count, const QSpan *spans, voi static void blend_transformed_bilinear_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -5548,7 +5548,7 @@ static void blend_transformed_bilinear_argb6666(int count, const QSpan *spans, v static void blend_transformed_bilinear_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -5562,7 +5562,7 @@ static void blend_transformed_bilinear_rgb666(int count, const QSpan *spans, voi static void blend_transformed_bilinear_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -5577,7 +5577,7 @@ static void blend_transformed_bilinear_argb8565(int count, const QSpan *spans, v static void blend_transformed_bilinear_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB16) @@ -5591,7 +5591,7 @@ static void blend_transformed_bilinear_rgb565(int count, const QSpan *spans, static void blend_transformed_bilinear_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -5605,7 +5605,7 @@ static void blend_transformed_bilinear_argb8555(int count, const QSpan *spans, v static void blend_transformed_bilinear_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -5619,7 +5619,7 @@ static void blend_transformed_bilinear_rgb555(int count, const QSpan *spans, voi static void blend_transformed_bilinear_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -5633,7 +5633,7 @@ static void blend_transformed_bilinear_argb4444(int count, const QSpan *spans, v static void blend_transformed_bilinear_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -6106,7 +6106,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blendTransformed(int count, const QSpan *spans, static void blend_transformed_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_24) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -6119,7 +6119,7 @@ static void blend_transformed_rgb888(int count, const QSpan *spans, static void blend_transformed_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -6134,7 +6134,7 @@ static void blend_transformed_argb6666(int count, const QSpan *spans, static void blend_transformed_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -6149,7 +6149,7 @@ static void blend_transformed_rgb666(int count, const QSpan *spans, static void blend_transformed_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -6164,7 +6164,7 @@ static void blend_transformed_argb8565(int count, const QSpan *spans, static void blend_transformed_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -6179,7 +6179,7 @@ static void blend_transformed_rgb565(int count, const QSpan *spans, static void blend_transformed_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -6194,7 +6194,7 @@ static void blend_transformed_argb8555(int count, const QSpan *spans, static void blend_transformed_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -6209,7 +6209,7 @@ static void blend_transformed_rgb555(int count, const QSpan *spans, static void blend_transformed_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -6224,7 +6224,7 @@ static void blend_transformed_argb4444(int count, const QSpan *spans, static void blend_transformed_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -6519,7 +6519,7 @@ Q_STATIC_TEMPLATE_FUNCTION void blendTransformedTiled(int count, const QSpan *sp static void blend_transformed_tiled_rgb888(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_24) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_24) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_RGB888) @@ -6532,7 +6532,7 @@ static void blend_transformed_tiled_rgb888(int count, const QSpan *spans, static void blend_transformed_tiled_argb6666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -6547,7 +6547,7 @@ static void blend_transformed_tiled_argb6666(int count, const QSpan *spans, static void blend_transformed_tiled_rgb666(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_18) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_18) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB6666_Premultiplied) @@ -6562,7 +6562,7 @@ static void blend_transformed_tiled_rgb666(int count, const QSpan *spans, static void blend_transformed_tiled_argb8565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -6577,7 +6577,7 @@ static void blend_transformed_tiled_argb8565(int count, const QSpan *spans, static void blend_transformed_tiled_rgb565(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_16) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_16) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8565_Premultiplied) @@ -6592,7 +6592,7 @@ static void blend_transformed_tiled_rgb565(int count, const QSpan *spans, static void blend_transformed_tiled_argb8555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -6607,7 +6607,7 @@ static void blend_transformed_tiled_argb8555(int count, const QSpan *spans, static void blend_transformed_tiled_rgb555(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_15) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_15) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB8555_Premultiplied) @@ -6622,7 +6622,7 @@ static void blend_transformed_tiled_rgb555(int count, const QSpan *spans, static void blend_transformed_tiled_argb4444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) @@ -6637,7 +6637,7 @@ static void blend_transformed_tiled_argb4444(int count, const QSpan *spans, static void blend_transformed_tiled_rgb444(int count, const QSpan *spans, void *userData) { -#if defined(QT_QWS_DEPTH_12) || !defined(Q_WS_QWS) +#if defined(QT_QWS_DEPTH_12) QSpanData *data = reinterpret_cast(userData); if (data->texture.format == QImage::Format_ARGB4444_Premultiplied) diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h index a582793..f5b17ea 100644 --- a/src/gui/painting/qdrawhelper_p.h +++ b/src/gui/painting/qdrawhelper_p.h @@ -1618,7 +1618,9 @@ QT_TRIVIAL_MEMCONVERT_IMPL(qrgb888) QT_TRIVIAL_MEMCONVERT_IMPL(qargb6666) QT_TRIVIAL_MEMCONVERT_IMPL(qrgb666) QT_TRIVIAL_MEMCONVERT_IMPL(quint16) +#ifdef Q_WS_QWS QT_TRIVIAL_MEMCONVERT_IMPL(qrgb565) +#endif QT_TRIVIAL_MEMCONVERT_IMPL(qargb8565) QT_TRIVIAL_MEMCONVERT_IMPL(qargb8555) QT_TRIVIAL_MEMCONVERT_IMPL(qrgb555) -- cgit v0.12 From 1bbe84eb729b9b692910720cbf0805c9e485bad0 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 24 Mar 2010 15:50:41 +0100 Subject: don't draw changes under opaque windows --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 106 +++++++++++++++++---- src/plugins/graphicssystems/fb_base/fb_base.h | 12 ++- .../linuxfb/qgraphicssystem_linuxfb.cpp | 16 +++- .../linuxfb/qgraphicssystem_linuxfb.h | 2 + 4 files changed, 114 insertions(+), 22 deletions(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index da7ddb8..c1ce817 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -81,7 +81,7 @@ void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget screen->setDirty(currentRect); } -QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0) +QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) { mScreenImage = new QImage(mGeometry.size(), mFormat); redrawTimer.setSingleShot(true); @@ -94,6 +94,9 @@ void QGraphicsSystemFbScreen::setGeometry(QRect rect) delete mScreenImage; mGeometry = rect; mScreenImage = new QImage(mGeometry.size(), mFormat); + delete compositePainter; + compositePainter = 0; + invalidateRectCache(); } void QGraphicsSystemFbScreen::setDepth(int depth) @@ -111,10 +114,13 @@ void QGraphicsSystemFbScreen::setFormat(QImage::Format format) mFormat = format; delete mScreenImage; mScreenImage = new QImage(mGeometry.size(), mFormat); + delete compositePainter; + compositePainter = 0; } QGraphicsSystemFbScreen::~QGraphicsSystemFbScreen() { + delete compositePainter; delete mScreenImage; } @@ -126,6 +132,31 @@ void QGraphicsSystemFbScreen::setDirty(const QRect &rect) } } +void QGraphicsSystemFbScreen::generateRects() +{ + cachedRects.clear(); + QRegion remainingScreen(mGeometry); + + for (int i = 0; i < windowStack.length(); i++) { + if (remainingScreen.isEmpty()) + break; + if (!windowStack[i]->window()->testAttribute(Qt::WA_TranslucentBackground)) { + remainingScreen -= windowStack[i]->geometry(); + QRegion windowRegion(windowStack[i]->geometry()); + windowRegion -= remainingScreen; + foreach(QRect rect, windowRegion.rects()) { + cachedRects += QPair(rect, i); + } + } + } + foreach (QRect rect, remainingScreen.rects()) + cachedRects += QPair(rect, -1); + isUpToDate = true; + return; +} + + + QRegion QGraphicsSystemFbScreen::doRedraw() { QRegion touchedRegion; @@ -134,32 +165,65 @@ QRegion QGraphicsSystemFbScreen::doRedraw() if (repaintRegion.isEmpty()) return touchedRegion; - QPainter compositePainter(mScreenImage); QVector rects = repaintRegion.rects(); + if (!isUpToDate) + generateRects(); + + if (!compositePainter) + compositePainter = new QPainter(mScreenImage); for (int rectIndex = 0; rectIndex < repaintRegion.numRects(); rectIndex++) { - QRect rect = rects[rectIndex]; - // Blank the affected area, just in case there's nothing to display - compositePainter.fillRect(rect, Qt::black); - for (int i = windowStack.length() - 1; i >= 0; i--) { - if (!windowStack[i]->visible()) - continue; - if (windowStack[i]->window()->isMinimized()) - continue; - QRect windowRect = windowStack[i]->geometry(); - QRect intersect = windowRect.intersected(rect); - QRect windowIntersect = intersect.translated(-windowRect.left(), - -windowRect.top()); - if (intersect.isNull()) + QRegion rectRegion = rects[rectIndex]; + + for(int i = 0; i < cachedRects.length(); i++) { + QRect screenSubRect = cachedRects[i].first; + int layer = cachedRects[i].second; + QRegion intersect = rectRegion.intersected(screenSubRect); + + if (intersect.isEmpty()) continue; - compositePainter.drawImage(intersect, windowStack[i]->image(), - windowIntersect); + + rectRegion -= intersect; + + // we only expect one rectangle, but defensive coding... + foreach (QRect rect, intersect.rects()) { + bool firstLayer = true; + if (layer == -1) { + compositePainter->setCompositionMode(QPainter::CompositionMode_Source); + compositePainter->fillRect(rect, Qt::black); + compositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver); + firstLayer = false; + layer = windowStack.size() - 1; + } + + for (int layerIndex = layer; layerIndex != -1; layerIndex--) { + if (!windowStack[layerIndex]->visible()) + continue; + if (windowStack[layerIndex]->window()->isMinimized()) + continue; + QRect windowRect = windowStack[layerIndex]->geometry(); + QRect windowIntersect = rect.translated(-windowRect.left(), + -windowRect.top()); + if (firstLayer) + compositePainter->setCompositionMode(QPainter::CompositionMode_Source); + compositePainter->drawImage(rect, windowStack[layerIndex]->image(), + windowIntersect); + if (firstLayer) { + compositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver); + firstLayer = false; + } + } + } } + if (!rectRegion.isEmpty()) + qWarning() << "non-empty region!" << rectRegion; + // Everything on screen should be mapped to a sub-rectangle + // unless it's off the screen... } QRect cursorRect; if (cursor) { - cursorRect = cursor->drawCursor(compositePainter); + cursorRect = cursor->drawCursor(*compositePainter); touchedRegion += cursorRect; } touchedRegion += repaintRegion; @@ -171,6 +235,7 @@ QRegion QGraphicsSystemFbScreen::doRedraw() void QGraphicsSystemFbScreen::removeWindowSurface(QGraphicsSystemFbWindowSurface * surface) { windowStack.removeOne(surface); + invalidateRectCache(); setDirty(surface->geometry()); } @@ -186,6 +251,7 @@ void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) if (index <= 0) return; windowStack.move(index, 0); + invalidateRectCache(); setDirty(s->geometry()); } @@ -201,6 +267,7 @@ void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) if (index == -1 || index == (windowStack.size() - 1)) return; windowStack.move(index, windowStack.size() - 1); + invalidateRectCache(); setDirty(s->geometry()); } @@ -261,6 +328,7 @@ void QGraphicsSystemFbWindowSurface::setGeometry(const QRect &rect) if (mImage.size() != rect.size()) mImage = QImage(rect.size(), mScreen->format()); + mScreen->invalidateRectCache(); QWindowSystemInterface::handleGeometryChange(window(), rect); QWindowSurface::setGeometry(rect); @@ -284,12 +352,14 @@ void QGraphicsSystemFbWindowSurface::endPaint(const QRegion ®ion) void QGraphicsSystemFbWindowSurface::setVisible(bool visible) { visibleFlag = visible; + mScreen->invalidateRectCache(); mScreen->setDirty(geometry()); } Qt::WindowFlags QGraphicsSystemFbWindowSurface::setWindowFlags(Qt::WindowFlags type) { flags = type; + mScreen->invalidateRectCache(); return flags; } diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h index 91b6d12..7f9b005 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ b/src/plugins/graphicssystems/fb_base/fb_base.h @@ -94,7 +94,8 @@ public: virtual void setDirty(const QRect &rect); virtual void removeWindowSurface(QGraphicsSystemFbWindowSurface * surface); - virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { windowStack.prepend(surface); } + virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { + windowStack.prepend(surface); invalidateRectCache(); } virtual void raise(QWindowSurface * surface); virtual void lower(QWindowSurface * surface); virtual QWidget * topLevelAt(const QPoint & p) const; @@ -117,6 +118,15 @@ protected: QImage::Format mFormat; QSize mPhysicalSize; QImage *mScreenImage; + +private: + QPainter * compositePainter; + void generateRects(); + QList > cachedRects; + + void invalidateRectCache() { isUpToDate = false; } + friend class QGraphicsSystemFbWindowSurface; + bool isUpToDate; }; #endif // QLIGHTHOUSEGRAPHICSSCREEN_H diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp index a373ba8..21a5da3 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp @@ -797,7 +797,7 @@ QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurface(QWidget *widget) con } QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, - int h, int lstep, QImage::Format screenFormat) + int h, int lstep, QImage::Format screenFormat) : compositePainter(0) { data = d; mGeometry = QRect(0,0,w,h); @@ -817,6 +817,9 @@ void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) delete mFbScreenImage; mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), bytesPerLine, mFormat); + delete compositePainter; + compositePainter = 0; + delete mScreenImage; mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), mFormat); @@ -828,6 +831,9 @@ void QLinuxFbGraphicsSystemScreen::setFormat(QImage::Format format) delete mFbScreenImage; mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), bytesPerLine, mFormat); + delete compositePainter; + compositePainter = 0; + delete mScreenImage; mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), mFormat); @@ -838,10 +844,14 @@ QRegion QLinuxFbGraphicsSystemScreen::doRedraw() QRegion touched; touched = QGraphicsSystemFbScreen::doRedraw(); - QPainter compositePainter(mFbScreenImage); + if (!compositePainter) { + compositePainter = new QPainter(mFbScreenImage); + compositePainter->setCompositionMode(QPainter::CompositionMode_Source); + } + QVector rects = touched.rects(); for (int i = 0; i < rects.size(); i++) - compositePainter.drawImage(rects[i], *mScreenImage, rects[i]); + compositePainter->drawImage(rects[i], *mScreenImage, rects[i]); return touched; } QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h index f85718a..cc8ce7e 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h @@ -61,6 +61,8 @@ private: QImage * mFbScreenImage; uchar * data; int bytesPerLine; + + QPainter *compositePainter; }; class QLinuxFbGraphicsSystemPrivate; -- cgit v0.12 From 2c38550ddb064215f827f856110128f2bb4fd631 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 25 Mar 2010 15:00:44 +0100 Subject: don't set composition mode to source when painting the bottow layer Doing so kills performance on the painting benchmark --- src/plugins/graphicssystems/fb_base/fb_base.cpp | 5 ----- src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp | 1 - 2 files changed, 6 deletions(-) diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp index c1ce817..d30746a 100644 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ b/src/plugins/graphicssystems/fb_base/fb_base.cpp @@ -189,9 +189,7 @@ QRegion QGraphicsSystemFbScreen::doRedraw() foreach (QRect rect, intersect.rects()) { bool firstLayer = true; if (layer == -1) { - compositePainter->setCompositionMode(QPainter::CompositionMode_Source); compositePainter->fillRect(rect, Qt::black); - compositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver); firstLayer = false; layer = windowStack.size() - 1; } @@ -204,12 +202,9 @@ QRegion QGraphicsSystemFbScreen::doRedraw() QRect windowRect = windowStack[layerIndex]->geometry(); QRect windowIntersect = rect.translated(-windowRect.left(), -windowRect.top()); - if (firstLayer) - compositePainter->setCompositionMode(QPainter::CompositionMode_Source); compositePainter->drawImage(rect, windowStack[layerIndex]->image(), windowIntersect); if (firstLayer) { - compositePainter->setCompositionMode(QPainter::CompositionMode_SourceOver); firstLayer = false; } } diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp index 21a5da3..44960bb 100644 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp @@ -846,7 +846,6 @@ QRegion QLinuxFbGraphicsSystemScreen::doRedraw() if (!compositePainter) { compositePainter = new QPainter(mFbScreenImage); - compositePainter->setCompositionMode(QPainter::CompositionMode_Source); } QVector rects = touched.rects(); -- cgit v0.12 From 9e12625b31e1d95f023fe67deb50e8bf97903994 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 29 Mar 2010 09:37:55 +0200 Subject: Compile fix the openkode graphicssystem Does not work well yet though :( --- src/gui/egl/qegl_lite.cpp | 23 ++++++---- src/plugins/graphicssystems/openkode/openkode.pro | 2 +- .../openkode/qgraphicssystem_openkode.cpp | 13 +++--- .../openkode/qgraphicssystem_openkode.h | 2 +- .../openkode/qwindowsurface_openkode.cpp | 51 +++++++++++++--------- .../openkode/qwindowsurface_openkode.h | 3 +- 6 files changed, 55 insertions(+), 39 deletions(-) diff --git a/src/gui/egl/qegl_lite.cpp b/src/gui/egl/qegl_lite.cpp index 60b862b..2bbf22b 100644 --- a/src/gui/egl/qegl_lite.cpp +++ b/src/gui/egl/qegl_lite.cpp @@ -42,7 +42,7 @@ #include #include #include -#include "qegl_p.h" +#include "qeglcontext_p.h" #if !defined(QT_NO_EGL) @@ -52,19 +52,26 @@ QT_BEGIN_NAMESPACE -EGLSurface QEglContext::createSurface(QPaintDevice *device, const QEglProperties *properties) +EGLNativeDisplayType QEgl::nativeDisplay() { - Q_UNUSED(device); - Q_UNUSED(properties); - return 0; + return EGLNativeDisplayType(EGL_DEFAULT_DISPLAY); +} + +EGLNativeWindowType QEgl::nativeWindow(QWidget* widget) +{ + return (EGLNativeWindowType)(widget->winId()); } -EGLDisplay QEglContext::getDisplay(QPaintDevice *device) +EGLNativePixmapType QEgl::nativePixmap(QPixmap* pixmap) { - Q_UNUSED(device); - return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY)); + return 0; } +//EGLDisplay QEglContext::display() +//{ +// return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY)); +//} + static QGraphicsSystemScreen *screenForDevice(QPaintDevice *device) { QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); diff --git a/src/plugins/graphicssystems/openkode/openkode.pro b/src/plugins/graphicssystems/openkode/openkode.pro index f8f0bcb..055048d 100644 --- a/src/plugins/graphicssystems/openkode/openkode.pro +++ b/src/plugins/graphicssystems/openkode/openkode.pro @@ -11,4 +11,4 @@ INSTALLS += target # openkode specific stuff INCLUDEPATH += $(OPENKODE_DIR)/include -LIBS += $${QMAKE_RPATH}/$(OPENKODE_DIR)/lib-target -L$(OPENKODE_DIR)/lib-target -lKD -lEGL -lGLESv2_CM +LIBS += $${QMAKE_RPATH}/$(OPENKODE_DIR)/lib-target -L$(OPENKODE_DIR)/lib-target -lKD -lEGL -lGLESv2 diff --git a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp index 51364e4..7a07776 100644 --- a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp +++ b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp @@ -92,7 +92,7 @@ QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen() } // Once we've set up the desktop and display we don't need them anymore -// kdReleaseDisplayNV(kdDisplay); TODO!!! + kdReleaseDisplayNV(kdDisplay); kdReleaseDesktopNV(kdDesktop); const int defaultDpi = 72; @@ -102,12 +102,6 @@ QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen() mDepth = 24; mFormat = QImage::Format_RGB888; - if (!mContext.openDisplay(0)) { - qWarning("qEglContext: Unable to open display!"); - return; - } - - qDebug() << " - QEglContext::openDisplay OK"; QEglProperties properties; properties.setPixelFormat(QImage::Format_RGB888); @@ -119,6 +113,11 @@ QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen() return; } + if (!mContext.display()) { + qWarning("qEglContext: Unable to open display!"); + return; + } + qDebug() << " - QEglContext::openDisplay OK"; } diff --git a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h index 972c42e..7d73ae0 100644 --- a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h +++ b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h @@ -45,7 +45,7 @@ #include #include -#include +#include # include diff --git a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp index 33c76e4..b3f3965 100644 --- a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp +++ b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp @@ -51,12 +51,13 @@ QT_BEGIN_NAMESPACE QOpenKODEWindowSurface::QOpenKODEWindowSurface (QOpenKODEGraphicsSystemScreen *screen, QWidget *window) : QWindowSurface(window), - mScreen(screen) + mScreen(screen), + mSurface(0) { qDebug() << "QOpenKODEWindowSurface::QOpenKODEWindowSurface:" << window << window->width() << "x" << window->height() << "pos" << window->x() << "x" << window->y(); - if (!mContext.openDisplay(0)) { + if (!mContext.display()) { qWarning("qEglContext: Unable to open display!"); return; } @@ -76,6 +77,7 @@ QOpenKODEWindowSurface::QOpenKODEWindowSurface void QOpenKODEWindowSurface::createWindow(QWidget *window) { + qDebug() << "createWindow"; kdWindow = kdCreateWindow(mContext.display(), mContext.config(), KD_NULL); if (!kdWindow) { @@ -89,17 +91,17 @@ void QOpenKODEWindowSurface::createWindow(QWidget *window) return; } - const KDboolean windowExclusive[] = { false }; - if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { - qErrnoWarning(kdGetError(), "Could not set exclusive bit"); - return; - } + //const KDboolean windowExclusive[] = { false }; + //if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { + // qErrnoWarning(kdGetError(), "Could not set exclusive bit"); + // //return; + //} - const KDint windowPos[2] = { window->x(), window->y() }; - if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { - qErrnoWarning(kdGetError(), "Could not set native window position"); - return; - } + //const KDint windowPos[2] = { window->x(), window->y() }; + //if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + // qErrnoWarning(kdGetError(), "Could not set native window position"); + // //return; + //} EGLNativeWindowType nativeWindow; @@ -107,24 +109,29 @@ void QOpenKODEWindowSurface::createWindow(QWidget *window) qErrnoWarning(kdGetError(), "Could not realize native window"); return; } + qDebug() << "kdRealizeWindow" << nativeWindow; // Create an EGL window surface for the native window EGLint windowAttrs[3] = { EGL_NONE }; - EGLSurface eglSurface = eglCreateWindowSurface(mContext.display(), + qDebug() << "doing createwindowsurface"; + *mSurface = eglCreateWindowSurface(mContext.display(), mContext.config(), nativeWindow, windowAttrs); - if (!eglSurface) { + qDebug() << "create windowsurface"; + if (!mSurface) { qWarning("EGL couldn't create window surface: 0x%x", eglGetError()); return; } - mContext.setSurface(eglSurface); - + qDebug() << "making context"; if (!mContext.createContext()) { qDebug() << "Unable to create context!"; return; } + + qDebug() << "about to make current"; + mContext.makeCurrent(mSurface); } QOpenKODEWindowSurface::~QOpenKODEWindowSurface() @@ -133,19 +140,20 @@ QOpenKODEWindowSurface::~QOpenKODEWindowSurface() QPaintDevice *QOpenKODEWindowSurface::paintDevice() { - //qDebug() << "QOpenKODEWindowSurface::paintDevice"; + qDebug() << "QOpenKODEWindowSurface::paintDevice"; return &mImage; } // ### TODO - this updates the entire toplevel, should only update the region -void QOpenKODEWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoint &offset) { + qDebug() << "in flush"; if (!offset.isNull()) { qWarning("Offset flushing not supported yet"); return; } - if (!mContext.makeCurrent()) { + if (!mContext.makeCurrent(mSurface)) { qWarning("EGL couldn't make context/surface current: 0x%x", eglGetError()); return; } @@ -222,8 +230,8 @@ void QOpenKODEWindowSurface::flush(QWidget *widget, const QRegion ®ion, const if (texId) glDeleteTextures(1, &texId); - mContext.swapBuffers(); mContext.doneCurrent(); + mContext.swapBuffers(mSurface); } void QOpenKODEWindowSurface::setGeometry(const QRect &rect) @@ -233,9 +241,10 @@ void QOpenKODEWindowSurface::setGeometry(const QRect &rect) if (mImage.size() != rect.size()) mImage = QImage(rect.size(), mScreen->format()); - mContext.destroySurface(); + mContext.destroySurface(mSurface); kdDestroyWindow(kdWindow); createWindow(window()); + qDebug() << "set geometry workded"; } bool QOpenKODEWindowSurface::scroll(const QRegion &area, int dx, int dy) diff --git a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h index 1c70f55..bee94a5 100644 --- a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h +++ b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h @@ -43,7 +43,7 @@ #define QWINDOWSURFACE_OPENKODE_H #include -#include +#include QT_BEGIN_NAMESPACE @@ -68,6 +68,7 @@ private: QOpenKODEGraphicsSystemScreen *mScreen; QImage mImage; struct KDWindow *kdWindow; + EGLSurface *mSurface; QEglContext mContext; void createWindow(QWidget *window); -- cgit v0.12 From a5e1442d8960d3a9f363a8101d02e6fae804b6f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 29 Mar 2010 10:06:52 +0200 Subject: Make sure the blitter api works with Raster GS(x11 and win) and QWS --- src/gui/image/qpixmap_blitter.cpp | 9 ++- src/gui/image/qpixmap_blitter_p.h | 3 + src/gui/painting/painting.pri | 10 ++- src/gui/painting/qblittable.cpp | 64 +++++++++++++++++ src/gui/painting/qblittable_p.h | 48 +++++++++++++ src/gui/painting/qgraphicssystem_p.h | 4 +- src/gui/painting/qpaintengine_blitter.cpp | 61 ++-------------- src/gui/painting/qpaintengine_blitter_p.h | 40 ++--------- .../painting/qwindowsurface_rasterblittable.cpp | 26 +++++++ .../painting/qwindowsurface_rasterblittable_p.h | 21 ++++++ .../gfxdrivers/blittableqvfb/blittableqvfb.pro | 28 ++++++++ src/plugins/gfxdrivers/blittableqvfb/main.cpp | 81 ++++++++++++++++++++++ .../gfxdrivers/blittableqvfb/qblittable_image.h | 48 +++++++++++++ .../blittableqvfb/qgraphicssystem_blittableqvfb.h | 47 +++++++++++++ .../blittableqvfb/qscreen_blittableqvfb.h | 14 ++++ .../blittableqvfb/qwindowsurface_qwsblittable.cpp | 0 .../blittableqvfb/qwindowsurface_qwsblittable.h | 36 ++++++++++ .../graphicssystems/blittable/blittable.pro | 12 ++++ src/plugins/graphicssystems/blittable/main.cpp | 73 +++++++++++++++++++ .../graphicssystems/blittable/qblittable_image.h | 48 +++++++++++++ .../blittable/qgraphicssystem_blittable.h | 47 +++++++++++++ 21 files changed, 623 insertions(+), 97 deletions(-) create mode 100644 src/gui/painting/qblittable.cpp create mode 100644 src/gui/painting/qblittable_p.h create mode 100644 src/gui/painting/qwindowsurface_rasterblittable.cpp create mode 100644 src/gui/painting/qwindowsurface_rasterblittable_p.h create mode 100644 src/plugins/gfxdrivers/blittableqvfb/blittableqvfb.pro create mode 100644 src/plugins/gfxdrivers/blittableqvfb/main.cpp create mode 100644 src/plugins/gfxdrivers/blittableqvfb/qblittable_image.h create mode 100644 src/plugins/gfxdrivers/blittableqvfb/qgraphicssystem_blittableqvfb.h create mode 100644 src/plugins/gfxdrivers/blittableqvfb/qscreen_blittableqvfb.h create mode 100644 src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.cpp create mode 100644 src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.h create mode 100644 src/plugins/graphicssystems/blittable/blittable.pro create mode 100644 src/plugins/graphicssystems/blittable/main.cpp create mode 100644 src/plugins/graphicssystems/blittable/qblittable_image.h create mode 100644 src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index a22bd8f..6dcf7c7 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -5,10 +5,13 @@ #include #include +#include #include #ifndef QT_NO_BLITTABLE +QT_BEGIN_NAMESPACE + static int global_ser_no = 0; QBlittablePixmapData::QBlittablePixmapData(QPixmapData::PixelType type) @@ -34,7 +37,7 @@ QBlittable *QBlittablePixmapData::blittable() const { if (!m_blittable) { QBlittablePixmapData *that = const_cast(this); - that->m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,w,h)); + that->m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QSize(w,h)); } return m_blittable; @@ -42,7 +45,7 @@ QBlittable *QBlittablePixmapData::blittable() const void QBlittablePixmapData::setBlittable(QBlittable *blittable) { - resize(blittable->rect().width(),blittable->rect().height()); + resize(blittable->size().width(),blittable->size().height()); m_blittable = blittable; } @@ -259,6 +262,8 @@ QRectF QBlittablePixmapData::clipAndTransformRect(const QRectF &rect) const } return transformationRect; } + +QT_END_NAMESPACE #endif //QT_BLITTER_RASTEROVERLAY #endif //QT_NO_BLITTABLE diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index 1d85cd3..b9f7630 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -5,6 +5,8 @@ #include #ifndef QT_NO_BLITTABLE +QT_BEGIN_NAMESPACE + class Q_GUI_EXPORT QBlittablePixmapData : public QPixmapData { // Q_DECLARE_PRIVATE(QBlittablePixmapData); @@ -117,5 +119,6 @@ inline void QBlittablePixmapData::unmarkRasterOverlay(const QRectF &rect) #endif } +QT_END_NAMESPACE #endif // QT_NO_BLITTABLE #endif // QPIXMAP_BLITTER_P_H diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 8e7bba7..a3fe2e1 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -89,12 +89,16 @@ SOURCES += \ painting/qpaintengine_raster.cpp \ painting/qdrawhelper.cpp \ painting/qimagescale.cpp \ - painting/qgrayraster.c + painting/qgrayraster.c \ + painting/qpaintengine_blitter.cpp \ + painting/qblittable.cpp \ HEADERS += \ painting/qpaintengine_raster_p.h \ painting/qrasterdefs_p.h \ - painting/qgrayraster_p.h + painting/qgrayraster_p.h \ + painting/qpaintengine_blitter_p.h \ + painting/qblittable_p.h \ win32 { HEADERS += painting/qprintengine_win_p.h @@ -121,12 +125,14 @@ embedded { painting/qgraphicssystemfactory_p.h \ painting/qgraphicssystemplugin_p.h \ painting/qwindowsurface_raster_p.h \ + painting/qwindowsurface_rasterblittable_p.h \ SOURCES += \ painting/qgraphicssystem_raster.cpp \ painting/qgraphicssystemfactory.cpp \ painting/qgraphicssystemplugin.cpp \ painting/qwindowsurface_raster.cpp \ + painting/qwindowsurface_rasterblittable.cpp \ } unix:x11 { diff --git a/src/gui/painting/qblittable.cpp b/src/gui/painting/qblittable.cpp new file mode 100644 index 0000000..0b2bd64 --- /dev/null +++ b/src/gui/painting/qblittable.cpp @@ -0,0 +1,64 @@ +#include "qblittable_p.h" + +#ifndef QT_NO_BLITTABLE +QT_BEGIN_NAMESPACE + +class QBlittablePrivate +{ +public: + QBlittablePrivate(const QSize &size, QBlittable::Capabilities caps) + : caps(caps), m_size(size), locked(false), cachedImg(0) + {} + QBlittable::Capabilities caps; + QSize m_size; + bool locked; + QImage *cachedImg; +}; + + +QBlittable::QBlittable(const QSize &size, Capabilities caps) + : d_ptr(new QBlittablePrivate(size,caps)) +{ +} + +QBlittable::~QBlittable() +{ + delete d_ptr; +} + + +QBlittable::Capabilities QBlittable::capabilities() const +{ + Q_D(const QBlittable); + return d->caps; +} + +QSize QBlittable::size() const +{ + Q_D(const QBlittable); + return d->m_size; +} + +QImage *QBlittable::lock() +{ + Q_D(QBlittable); + if (!d->locked) { + d->cachedImg = doLock(); + d->locked = true; + } + + return d->cachedImg; +} + +void QBlittable::unlock() +{ + Q_D(QBlittable); + if (d->locked) { + doUnlock(); + d->locked = false; + } +} + +QT_END_NAMESPACE +#endif //QT_NO_BLITTABLE + diff --git a/src/gui/painting/qblittable_p.h b/src/gui/painting/qblittable_p.h new file mode 100644 index 0000000..98caab7d --- /dev/null +++ b/src/gui/painting/qblittable_p.h @@ -0,0 +1,48 @@ +#ifndef QBLITTABLE_P_H +#define QBLITTABLE_P_H + +#include + +#ifndef QT_NO_BLITTABLE +QT_BEGIN_NAMESPACE + +class QImage; +class QBlittablePrivate; + +class Q_GUI_EXPORT QBlittable +{ + Q_DECLARE_PRIVATE(QBlittable); +public: + enum Capability { + + SolidRectCapability = 0x0001, + SourcePixmapCapability = 0x0002, + SourceOverPixmapCapability = 0x0004, + SourceOverScaledPixmapCapability = 0x0008, + + // Internal ones + OutlineCapability = 0x0001000, + }; + Q_DECLARE_FLAGS (Capabilities, Capability); + + QBlittable(const QSize &size, Capabilities caps); + virtual ~QBlittable(); + + Capabilities capabilities() const; + QSize size() const; + + virtual void fillRect(const QRectF &rect, const QColor &color) = 0; + virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) = 0; + + QImage *lock(); + void unlock(); + +protected: + virtual QImage *doLock() = 0; + virtual void doUnlock() = 0; + QBlittablePrivate *d_ptr; +}; + +QT_END_NAMESPACE +#endif //QT_NO_BLITTABLE +#endif //QBLITTABLE_P_H diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index 8e35f9f..03b0f48 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -62,6 +62,7 @@ QT_BEGIN_NAMESPACE class QPixmapFilter; +class QBlittable; #ifdef Q_WS_LITE class Q_GUI_EXPORT QGraphicsSystemScreen : public QObject @@ -86,7 +87,7 @@ class Q_GUI_EXPORT QGraphicsSystem public: virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; virtual QWindowSurface *createWindowSurface(QWidget *widget) const = 0; - virtual QBlittable *createBlittable(const QRect &) const { return 0; } + virtual QBlittable *createBlittable(const QSize &) const { return 0; } virtual ~QGraphicsSystem() = 0; @@ -94,6 +95,7 @@ public: virtual QList screens() const; virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; #endif + //### Remove this & change qpixmap.cpp & qbitmap.cpp once every platform is gaurenteed // to have a graphics system. static QPixmapData *createDefaultPixmapData(QPixmapData::PixelType type); diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 1032852..0b74a4d 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -1,10 +1,13 @@ #include "private/qpaintengine_blitter_p.h" + +#include "private/qblittable_p.h" #include "private/qpaintengine_raster_p.h" #include "private/qpainter_p.h" #include "private/qapplication_p.h" #include "private/qpixmap_blitter_p.h" #ifndef QT_NO_BLITTABLE +QT_BEGIN_NAMESPACE #define STATE_XFORM_SCALE 0x00000001 #define STATE_XFORM_COMPLEX 0x00000002 @@ -617,60 +620,6 @@ inline QRasterPaintEngine *QBlitterPaintEngine::raster() const return d->raster; } -class QBlittablePrivate -{ -public: - QBlittablePrivate(const QRect &rect, QBlittable::Capabilities caps) - : caps(caps), m_rect(rect), locked(false), cachedImg(0) - {} - QBlittable::Capabilities caps; - QRect m_rect; - bool locked; - QImage *cachedImg; -}; - - -QBlittable::QBlittable(const QRect &rect, Capabilities caps) - : d_ptr(new QBlittablePrivate(rect,caps)) -{ -} - -QBlittable::~QBlittable() -{ - delete d_ptr; -} - - -QBlittable::Capabilities QBlittable::capabilities() const -{ - Q_D(const QBlittable); - return d->caps; -} - -QRect QBlittable::rect() const -{ - Q_D(const QBlittable); - return d->m_rect; -} - -QImage *QBlittable::lock() -{ - Q_D(QBlittable); - if (!d->locked) { - d->cachedImg = doLock(); - d->locked = true; - } - - return d->cachedImg; -} - -void QBlittable::unlock() -{ - Q_D(QBlittable); - if (d->locked) { - doUnlock(); - d->locked = false; - } -} - +QT_END_NAMESPACE #endif //QT_NO_BLITTABLE + diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index 1a2ad9e..d436993 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -5,45 +5,11 @@ #include "private/qpaintengine_raster_p.h" #ifndef QT_NO_BLITTABLE +QT_BEGIN_NAMESPACE -class QBlittablePrivate; class QBlitterPaintEnginePrivate; class QBlittablePixmapData; - -class Q_GUI_EXPORT QBlittable -{ - Q_DECLARE_PRIVATE(QBlittable); -public: - enum Capability { - - SolidRectCapability = 0x0001, - SourcePixmapCapability = 0x0002, - SourceOverPixmapCapability = 0x0004, - SourceOverScaledPixmapCapability = 0x0008, - - // Internal ones - OutlineCapability = 0x0001000, - }; - Q_DECLARE_FLAGS (Capabilities, Capability); - - QBlittable(const QRect &rect, Capabilities caps); - virtual ~QBlittable(); - - Capabilities capabilities() const; - QRect rect() const; - - virtual void fillRect(const QRectF &rect, const QColor &color) = 0; - virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect) = 0; - - QImage *lock(); - void unlock(); - -protected: - virtual QImage *doLock() = 0; - virtual void doUnlock() = 0; - QBlittablePrivate *d_ptr; -}; - +class QBlittable; class Q_GUI_EXPORT QBlitterPaintEngine : public QPaintEngineEx { @@ -101,5 +67,7 @@ private: }; +QT_END_NAMESPACE #endif //QT_NO_BLITTABLE #endif // QPAINTENGINE_BLITTER_P_H + diff --git a/src/gui/painting/qwindowsurface_rasterblittable.cpp b/src/gui/painting/qwindowsurface_rasterblittable.cpp new file mode 100644 index 0000000..56a79ba --- /dev/null +++ b/src/gui/painting/qwindowsurface_rasterblittable.cpp @@ -0,0 +1,26 @@ +#include "qwindowsurface_rasterblittable_p.h" + +#include +#include + +QRasterBlittableWindowSurface::QRasterBlittableWindowSurface(QWidget *widget) + : QRasterWindowSurface(widget), + m_currentImage(0), + m_blittable(0), + m_pmData(new QBlittablePixmapData(QPixmapData::PixmapType)), + m_pixmap(new QPixmap(m_pmData)) +{ +} + +QPaintDevice *QRasterBlittableWindowSurface::paintDevice() +{ + QPaintDevice *device = QRasterWindowSurface::paintDevice(); + if (m_currentImage != device) { + if (device->devType() == QInternal::Image) { + m_currentImage = static_cast(device); + m_blittable = createBlittable(m_currentImage); + m_pmData->setBlittable(m_blittable); + } + } + return m_pixmap; +} diff --git a/src/gui/painting/qwindowsurface_rasterblittable_p.h b/src/gui/painting/qwindowsurface_rasterblittable_p.h new file mode 100644 index 0000000..1e697c7 --- /dev/null +++ b/src/gui/painting/qwindowsurface_rasterblittable_p.h @@ -0,0 +1,21 @@ +#include +#include + +class QBlittable; +class QBlittablePixmapData; + +class Q_GUI_EXPORT QRasterBlittableWindowSurface : public QRasterWindowSurface +{ +public: + QRasterBlittableWindowSurface(QWidget *widget); + + virtual QBlittable *createBlittable(QImage *rasterSurface) = 0; + + QPaintDevice *paintDevice(); + +private: + QImage *m_currentImage; + QBlittable *m_blittable; + QBlittablePixmapData *m_pmData; + QPixmap *m_pixmap; +}; diff --git a/src/plugins/gfxdrivers/blittableqvfb/blittableqvfb.pro b/src/plugins/gfxdrivers/blittableqvfb/blittableqvfb.pro new file mode 100644 index 0000000..d6a2018 --- /dev/null +++ b/src/plugins/gfxdrivers/blittableqvfb/blittableqvfb.pro @@ -0,0 +1,28 @@ +TARGET = qscreenblittablevfb +include(../../qpluginbase.pri) + +DEFINES += QT_QWS_QVFB QT_QWS_MOUSE_QVFB QT_QWS_KBD_QVFB + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/gfxdrivers + +HEADERS = qgraphicssystem_blittableqvfb.h \ + qscreen_blittableqvfb.h \ + qwindowsurface_qwsblittable.h \ + qblittable_image.h + +SOURCES = main.cpp \ + qwindowsurface_qwsblittable.cpp + +#include qvfb sources +HEADERS += \ + $$QT_SOURCE_TREE/src/gui/embedded/qscreenvfb_qws.h \ + $$QT_SOURCE_TREE/src/gui/embedded/qkbdvfb_qws.h \ + $$QT_SOURCE_TREE/src/gui/embedded/qmousevfb_qws.h + +SOURCES += \ + $$QT_SOURCE_TREE/src/gui/embedded/qscreenvfb_qws.cpp \ + $$QT_SOURCE_TREE/src/gui/embedded/qkbdvfb_qws.cpp \ + $$QT_SOURCE_TREE/src/gui/embedded/qmousevfb_qws.cpp + +target.path += $$[QT_INSTALL_PLUGINS]/gfxdrivers +INSTALLS += target diff --git a/src/plugins/gfxdrivers/blittableqvfb/main.cpp b/src/plugins/gfxdrivers/blittableqvfb/main.cpp new file mode 100644 index 0000000..b6d2603 --- /dev/null +++ b/src/plugins/gfxdrivers/blittableqvfb/main.cpp @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include "qscreen_blittableqvfb.h" + +#ifndef QT_NO_LIBRARY +QT_BEGIN_NAMESPACE + +class ScreenBlittableVfbDriver : public QScreenDriverPlugin +{ +public: + ScreenBlittableVfbDriver(); + + QStringList keys() const; + QScreen *create(const QString&, int displayId); +}; + +ScreenBlittableVfbDriver::ScreenBlittableVfbDriver() +: QScreenDriverPlugin() +{ +} + +QStringList ScreenBlittableVfbDriver::keys() const +{ + QStringList list; + list << "BlittableQVFb"; + return list; +} + +QScreen* ScreenBlittableVfbDriver::create(const QString& driver, int displayId) +{ + if (driver.toLower() == "blittableqvfb") + return new QBlittableVFbScreen(displayId); + + return 0; +} + +Q_EXPORT_PLUGIN2(qscreenblittablevfb, ScreenBlittableVfbDriver) + +QT_END_NAMESPACE +#endif //QT_NO_LIBRARY diff --git a/src/plugins/gfxdrivers/blittableqvfb/qblittable_image.h b/src/plugins/gfxdrivers/blittableqvfb/qblittable_image.h new file mode 100644 index 0000000..3f8dc69 --- /dev/null +++ b/src/plugins/gfxdrivers/blittableqvfb/qblittable_image.h @@ -0,0 +1,48 @@ +#include + +#include + + +class QImageBlittable : public QBlittable +{ +public: + QImageBlittable(QImage *image, bool deleteImage) + : QBlittable(image->size(), QBlittable::Capabilities(QBlittable::SolidRectCapability + |QBlittable::SourcePixmapCapability + |QBlittable::SourceOverPixmapCapability + |QBlittable::SourceOverScaledPixmapCapability)), + m_image(image), m_deleteImage(deleteImage) + { + + } + + ~QImageBlittable() { + if (m_deleteImage) + delete m_image; + } + + void fillRect(const QRectF &rect, const QColor &color) + { + QPainter p(lock()); + p.fillRect(rect,color); + } + void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &source) + { + //here it is possible to do a pixmap.pixmapData()->buffer() + //but is like this to show how to get the the blitter + QPixmapData *data = pixmap.pixmapData(); + Q_ASSERT(data->width() && data->height()); + Q_ASSERT(data->classId() == QPixmapData::BlitterClass); + QBlittablePixmapData *blittableData = static_cast(data); + + QPainter p(lock()); + p.drawImage(rect, *blittableData->blittable()->lock(),source); + } + +protected: + QImage *doLock() { return m_image; } + void doUnlock() { } +private: + QImage *m_image; + bool m_deleteImage; +}; diff --git a/src/plugins/gfxdrivers/blittableqvfb/qgraphicssystem_blittableqvfb.h b/src/plugins/gfxdrivers/blittableqvfb/qgraphicssystem_blittableqvfb.h new file mode 100644 index 0000000..89940d0 --- /dev/null +++ b/src/plugins/gfxdrivers/blittableqvfb/qgraphicssystem_blittableqvfb.h @@ -0,0 +1,47 @@ +#include +#include +#include +#include + +#include "qwindowsurface_qwsblittable.h" +#include "qblittable_image.h" +#include + +class QBlittableVFbGraphicsSystem : public QGraphicsSystem +{ +public: + QPixmapData *createPixmapData(QPixmapData::PixelType type) const + { + if (type == QPixmapData::PixmapType) { + return new QBlittablePixmapData(type); + } else { + return new QRasterPixmapData(type); + } + } + + QWindowSurface *createWindowSurface(QWidget *widget) const + { + if (QApplication::type() == QApplication::GuiServer) + return new QWSBlittableMemSurface(widget); + else + return QScreen::instance()->createSurface(widget); + } + + QBlittable *createBlittable(const QSize &size) const + { + QImage *image = new QImage(size,QImage::Format_ARGB32); + return new QImageBlittable(image,true); + } + + static QGraphicsSystem *instance() + { + static QGraphicsSystem *system = 0; + if (!system) { + system = new QBlittableVFbGraphicsSystem; + } + return system; + } + +private: + QBlittableVFbGraphicsSystem() { } +}; diff --git a/src/plugins/gfxdrivers/blittableqvfb/qscreen_blittableqvfb.h b/src/plugins/gfxdrivers/blittableqvfb/qscreen_blittableqvfb.h new file mode 100644 index 0000000..645aeec --- /dev/null +++ b/src/plugins/gfxdrivers/blittableqvfb/qscreen_blittableqvfb.h @@ -0,0 +1,14 @@ +#include +#include "qgraphicssystem_blittableqvfb.h" + +class QBlittableVFbScreen : public QVFbScreen +{ +public: + explicit QBlittableVFbScreen(int display_id) + : QVFbScreen(display_id) + { + setGraphicsSystem(QBlittableVFbGraphicsSystem::instance()); + + } + +}; diff --git a/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.cpp b/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.h b/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.h new file mode 100644 index 0000000..b955322 --- /dev/null +++ b/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.h @@ -0,0 +1,36 @@ +#include "qblittable_image.h" + +#include +#include + +class QBlittablePixmapData; + +class Q_GUI_EXPORT QWSBlittableMemSurface : public QWSLocalMemSurface +{ +public: + QWSBlittableMemSurface( QWidget *window ) + : QWSLocalMemSurface(window), + m_currentPaintDevice(0), + pmData(new QBlittablePixmapData(QPixmapData::PixmapType)), + pm(pmData) + { + } + + QPaintDevice *paintDevice() + { + if (QWSLocalMemSurface::paintDevice() != m_currentPaintDevice) { + QPaintDevice *device = QWSLocalMemSurface::paintDevice(); + if (device->devType() == QInternal::Image) { + img = *static_cast(device); + pmData->setBlittable(new QImageBlittable(&img,false)); + } + } + return ± + } + +private: + QPaintDevice *m_currentPaintDevice; + QBlittablePixmapData *pmData; + QPixmap pm; +}; + diff --git a/src/plugins/graphicssystems/blittable/blittable.pro b/src/plugins/graphicssystems/blittable/blittable.pro new file mode 100644 index 0000000..596e92f --- /dev/null +++ b/src/plugins/graphicssystems/blittable/blittable.pro @@ -0,0 +1,12 @@ +TARGET = qblittablegraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp +HEADERS = qblittable_image.h \ + qgraphicssystem_blittable.h \ + qwindowsurface_imageblittable.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/graphicssystems/blittable/main.cpp b/src/plugins/graphicssystems/blittable/main.cpp new file mode 100644 index 0000000..06c3189 --- /dev/null +++ b/src/plugins/graphicssystems/blittable/main.cpp @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include "qgraphicssystem_blittable.h" + +QT_BEGIN_NAMESPACE + +class QBlittableGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QBlittableGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << QLatin1String("Blittable"); + return list; +} + +QGraphicsSystem* QBlittableGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == QLatin1String("blittable")) { + return new QBlittableGraphicsSystem; + } + + return 0; +} + +Q_EXPORT_PLUGIN2(blittable, QBlittableGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/blittable/qblittable_image.h b/src/plugins/graphicssystems/blittable/qblittable_image.h new file mode 100644 index 0000000..8ca86b7 --- /dev/null +++ b/src/plugins/graphicssystems/blittable/qblittable_image.h @@ -0,0 +1,48 @@ +#include + +#include + + +class QImageBlittable : public QBlittable +{ +public: + QImageBlittable(QImage *image, bool deleteImage) + : QBlittable(image->size(), QBlittable::Capabilities(QBlittable::SolidRectCapability + |QBlittable::SourcePixmapCapability + |QBlittable::SourceOverPixmapCapability + |QBlittable::SourceOverScaledPixmapCapability)), + m_image(image), m_deleteImage(deleteImage) + { + + } + + ~QImageBlittable() { + if (m_deleteImage) + delete m_image; + } + + void fillRect(const QRectF &rect, const QColor &color) + { + QPainter p(lock()); + p.fillRect(rect,color); + } + void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &source) + { + //here it is possible to do a pixmap.pixmapData()->buffer() + //but is like this to show how to get the the blitter + QPixmapData *data = pixmap.pixmapData(); + Q_ASSERT(data->width() && data->height()); + Q_ASSERT(data->classId() == QPixmapData::BlitterClass); + QBlittablePixmapData *blittableData = static_cast(data); + + QPainter p(lock()); + p.drawImage(rect, *blittableData->blittable()->lock(),source); + } + +protected: + QImage *doLock() { return m_image; } + void doUnlock() { } +private: + QImage *m_image; + bool m_deleteImage; +}; diff --git a/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h b/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h new file mode 100644 index 0000000..b42021e --- /dev/null +++ b/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h @@ -0,0 +1,47 @@ +#include +#include +#include +#include +#include + +#include "qblittable_image.h" + +class QImageBlittableWindowSurface : public QRasterBlittableWindowSurface +{ +public: + QImageBlittableWindowSurface(QWidget *widget) + : QRasterBlittableWindowSurface(widget) + {} + + QBlittable *createBlittable(QImage *rasterSurface) + { + return new QImageBlittable(rasterSurface,false); + } + +}; + +class QBlittableGraphicsSystem : public QGraphicsSystem +{ +public: + ~QBlittableGraphicsSystem() { } + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const + { + if (type == QPixmapData::PixmapType) + return new QBlittablePixmapData(type); + else + return new QRasterPixmapData(type); + } + + QWindowSurface *createWindowSurface(QWidget *widget) const + { + return new QImageBlittableWindowSurface(widget); + } + + QBlittable *createBlittable(const QSize &size) const + { + QImage *image = new QImage(size, QImage::Format_ARGB32_Premultiplied); + return new QImageBlittable(image,true); + } +}; + -- cgit v0.12 From a31270b5fc88460d6923ac1f2b5b6e90da59c9c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 29 Mar 2010 13:21:47 +0200 Subject: Compile fix from merging blitter examples. --- src/gui/painting/painting.pri | 2 -- src/plugins/graphicssystems/blittable/qblittable_image.h | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index a3fe2e1..3273cb3 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -17,7 +17,6 @@ HEADERS += \ painting/qpaintengine_p.h \ painting/qpaintengine_alpha_p.h \ painting/qpaintengine_preview_p.h \ - painting/qpaintengine_blitter_p.h \ painting/qpaintengineex_p.h \ painting/qpainter.h \ painting/qpainter_p.h \ @@ -64,7 +63,6 @@ SOURCES += \ painting/qpaintengine.cpp \ painting/qpaintengine_alpha.cpp \ painting/qpaintengine_preview.cpp \ - painting/qpaintengine_blitter.cpp \ painting/qpaintengineex.cpp \ painting/qpainter.cpp \ painting/qpainterpath.cpp \ diff --git a/src/plugins/graphicssystems/blittable/qblittable_image.h b/src/plugins/graphicssystems/blittable/qblittable_image.h index 8ca86b7..3f8dc69 100644 --- a/src/plugins/graphicssystems/blittable/qblittable_image.h +++ b/src/plugins/graphicssystems/blittable/qblittable_image.h @@ -1,6 +1,6 @@ #include -#include +#include class QImageBlittable : public QBlittable -- cgit v0.12 From a93f6b21f636df4840f86099c76d287afb978001 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 31 Mar 2010 09:41:39 +0200 Subject: Refactoring GraphicsSystem to QPlatformIntegration QPlatformIntegration is the "main" integration class which needs to be subclassed. This is done so that we don't pollute GraphicsSystem with functionality that really does not belong there. In lighthouse applications needs now to be started with -platform some_platform --- src/gui/image/qnativeimage.cpp | 2 +- src/gui/image/qpixmap_blitter.cpp | 2 +- src/gui/image/qpixmap_lite.cpp | 2 +- src/gui/kernel/kernel.pri | 10 +- src/gui/kernel/qapplication.cpp | 12 +- src/gui/kernel/qapplication_lite.cpp | 36 +- src/gui/kernel/qapplication_p.h | 15 +- src/gui/kernel/qdesktopwidget_lite.cpp | 24 +- src/gui/kernel/qplatformintegration_lite.cpp | 18 + src/gui/kernel/qplatformintegration_lite.h | 73 + .../kernel/qplatformintegrationfactory_lite.cpp | 88 + .../kernel/qplatformintegrationfactory_lite_p.h | 78 + src/gui/kernel/qplatformintegrationplugin_lite.cpp | 55 + src/gui/kernel/qplatformintegrationplugin_lite.h | 92 + src/gui/kernel/qplatformscreen_lite.cpp | 15 + src/gui/kernel/qplatformscreen_lite.h | 31 + src/gui/kernel/qwidget_lite.cpp | 14 +- src/gui/kernel/qwindowsysteminterface.h | 16 +- src/gui/painting/painting.pri | 6 +- src/gui/painting/qcolormap_lite.cpp | 8 +- src/gui/painting/qgraphicssystem.cpp | 54 +- src/gui/painting/qgraphicssystem_lite.cpp | 62 + src/gui/painting/qgraphicssystem_lite_p.h | 70 + src/gui/painting/qgraphicssystem_p.h | 27 +- src/gui/painting/qgraphicssystemcursor_lite.cpp | 2 +- src/gui/painting/qgraphicssystemcursor_lite.h | 5 +- .../graphicssystems/blittable/blittable.pro | 3 +- .../blittable/qgraphicssystem_blittable.h | 6 + src/plugins/graphicssystems/fb_base/fb_base.cpp | 364 ---- src/plugins/graphicssystems/fb_base/fb_base.h | 132 -- src/plugins/graphicssystems/fb_base/fb_base.pri | 2 - src/plugins/graphicssystems/fb_base/fb_base.pro | 23 - src/plugins/graphicssystems/graphicssystems.pro | 8 - src/plugins/graphicssystems/linuxfb/linuxfb.pro | 12 - src/plugins/graphicssystems/linuxfb/main.cpp | 71 - .../linuxfb/qgraphicssystem_linuxfb.cpp | 856 --------- .../linuxfb/qgraphicssystem_linuxfb.h | 128 -- src/plugins/graphicssystems/minimal/main.cpp | 71 - src/plugins/graphicssystems/minimal/minimal.pro | 10 - .../minimal/qgraphicssystem_minimal.cpp | 70 - .../minimal/qgraphicssystem_minimal.h | 85 - .../minimal/qwindowsurface_minimal.cpp | 101 - .../minimal/qwindowsurface_minimal.h | 73 - src/plugins/graphicssystems/minimaldfb/main.cpp | 71 - .../graphicssystems/minimaldfb/minimaldfb.pro | 29 - .../minimaldfb/qblitter_directfb.cpp | 110 -- .../graphicssystems/minimaldfb/qblitter_directfb.h | 29 - .../minimaldfb/qdirectfbconvenience.cpp | 335 ---- .../minimaldfb/qdirectfbconvenience.h | 43 - .../graphicssystems/minimaldfb/qdirectfbcursor.cpp | 42 - .../graphicssystems/minimaldfb/qdirectfbcursor.h | 22 - .../graphicssystems/minimaldfb/qdirectfbinput.cpp | 205 --- .../graphicssystems/minimaldfb/qdirectfbinput.h | 63 - .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 118 -- .../minimaldfb/qgraphicssystem_minimaldfb.h | 99 - .../minimaldfb/qwindowsurface_minimaldfb.cpp | 231 --- .../minimaldfb/qwindowsurface_minimaldfb.h | 88 - src/plugins/graphicssystems/openkode/frag.glslf | 8 - src/plugins/graphicssystems/openkode/frag.h | 37 - src/plugins/graphicssystems/openkode/main.cpp | 71 - src/plugins/graphicssystems/openkode/openkode.pro | 14 - .../openkode/qgraphicssystem_openkode.cpp | 236 --- .../openkode/qgraphicssystem_openkode.h | 95 - .../openkode/qwindowsurface_openkode.cpp | 265 --- .../openkode/qwindowsurface_openkode.h | 79 - src/plugins/graphicssystems/openkode/vert.glslv | 14 - src/plugins/graphicssystems/openkode/vert.h | 63 - src/plugins/graphicssystems/openvglite/main.cpp | 71 - .../graphicssystems/openvglite/openvglite.pro | 12 - .../openvglite/qgraphicssystem_vglite.cpp | 193 -- .../openvglite/qgraphicssystem_vglite.h | 93 - .../openvglite/qwindowsurface_vglite.cpp | 131 -- .../openvglite/qwindowsurface_vglite.h | 91 - src/plugins/graphicssystems/qvfb/main.cpp | 72 - .../graphicssystems/qvfb/qgraphicssystem_qvfb.cpp | 434 ----- .../graphicssystems/qvfb/qgraphicssystem_qvfb.h | 95 - src/plugins/graphicssystems/qvfb/qvfb.pro | 12 - .../graphicssystems/qvfb/qwindowsurface_qvfb.cpp | 104 -- .../graphicssystems/qvfb/qwindowsurface_qvfb.h | 74 - src/plugins/graphicssystems/testlite/main.cpp | 71 - .../testlite/qgraphicssystem_testlite.cpp | 121 -- .../testlite/qgraphicssystem_testlite.h | 91 - .../testlite/qwindowsurface_testlite.cpp | 661 ------- .../testlite/qwindowsurface_testlite.h | 96 - src/plugins/graphicssystems/testlite/testlite.pro | 17 - src/plugins/graphicssystems/testlite/x11util.cpp | 1215 ------------ src/plugins/graphicssystems/testlite/x11util.h | 204 --- src/plugins/graphicssystems/vnc/main.cpp | 72 - .../graphicssystems/vnc/qgraphicssystem_vnc.cpp | 115 -- .../graphicssystems/vnc/qgraphicssystem_vnc.h | 97 - src/plugins/graphicssystems/vnc/qvnccursor.cpp | 156 -- src/plugins/graphicssystems/vnc/qvnccursor.h | 76 - src/plugins/graphicssystems/vnc/qvncserver.cpp | 1935 -------------------- src/plugins/graphicssystems/vnc/qvncserver.h | 534 ------ src/plugins/graphicssystems/vnc/vnc.pro | 19 - src/plugins/platforms/fb_base/fb_base.cpp | 364 ++++ src/plugins/platforms/fb_base/fb_base.h | 132 ++ src/plugins/platforms/fb_base/fb_base.pri | 2 + src/plugins/platforms/fb_base/fb_base.pro | 23 + src/plugins/platforms/linuxfb/linuxfb.pro | 12 + src/plugins/platforms/linuxfb/main.cpp | 71 + .../platforms/linuxfb/qgraphicssystem_linuxfb.cpp | 856 +++++++++ .../platforms/linuxfb/qgraphicssystem_linuxfb.h | 128 ++ src/plugins/platforms/minimal/main.cpp | 71 + src/plugins/platforms/minimal/minimal.pro | 13 + .../minimal/qplatformintegration_minimal.cpp | 25 + .../minimal/qplatformintegration_minimal.h | 85 + .../platforms/minimal/qwindowsurface_minimal.cpp | 85 + .../platforms/minimal/qwindowsurface_minimal.h | 65 + src/plugins/platforms/minimaldfb/main.cpp | 71 + src/plugins/platforms/minimaldfb/minimaldfb.pro | 29 + .../platforms/minimaldfb/qblitter_directfb.cpp | 110 ++ .../platforms/minimaldfb/qblitter_directfb.h | 29 + .../platforms/minimaldfb/qdirectfbconvenience.cpp | 335 ++++ .../platforms/minimaldfb/qdirectfbconvenience.h | 43 + .../platforms/minimaldfb/qdirectfbcursor.cpp | 42 + src/plugins/platforms/minimaldfb/qdirectfbcursor.h | 22 + .../platforms/minimaldfb/qdirectfbinput.cpp | 205 +++ src/plugins/platforms/minimaldfb/qdirectfbinput.h | 63 + .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 118 ++ .../minimaldfb/qgraphicssystem_minimaldfb.h | 99 + .../minimaldfb/qwindowsurface_minimaldfb.cpp | 231 +++ .../minimaldfb/qwindowsurface_minimaldfb.h | 88 + src/plugins/platforms/openkode/frag.glslf | 8 + src/plugins/platforms/openkode/frag.h | 37 + src/plugins/platforms/openkode/main.cpp | 71 + src/plugins/platforms/openkode/openkode.pro | 14 + .../openkode/qgraphicssystem_openkode.cpp | 236 +++ .../platforms/openkode/qgraphicssystem_openkode.h | 95 + .../platforms/openkode/qwindowsurface_openkode.cpp | 265 +++ .../platforms/openkode/qwindowsurface_openkode.h | 79 + src/plugins/platforms/openkode/vert.glslv | 14 + src/plugins/platforms/openkode/vert.h | 63 + src/plugins/platforms/openvglite/main.cpp | 71 + src/plugins/platforms/openvglite/openvglite.pro | 12 + .../openvglite/qgraphicssystem_vglite.cpp | 193 ++ .../platforms/openvglite/qgraphicssystem_vglite.h | 93 + .../platforms/openvglite/qwindowsurface_vglite.cpp | 131 ++ .../platforms/openvglite/qwindowsurface_vglite.h | 91 + src/plugins/platforms/platforms.pro | 14 + src/plugins/platforms/qvfb/main.cpp | 72 + .../platforms/qvfb/qgraphicssystem_qvfb.cpp | 434 +++++ src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h | 95 + src/plugins/platforms/qvfb/qvfb.pro | 12 + src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp | 104 ++ src/plugins/platforms/qvfb/qwindowsurface_qvfb.h | 74 + src/plugins/platforms/testlite/main.cpp | 71 + .../testlite/qgraphicssystem_testlite.cpp | 121 ++ .../platforms/testlite/qgraphicssystem_testlite.h | 91 + .../platforms/testlite/qwindowsurface_testlite.cpp | 661 +++++++ .../platforms/testlite/qwindowsurface_testlite.h | 96 + src/plugins/platforms/testlite/testlite.pro | 17 + src/plugins/platforms/testlite/x11util.cpp | 1215 ++++++++++++ src/plugins/platforms/testlite/x11util.h | 204 +++ src/plugins/platforms/vnc/main.cpp | 72 + src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp | 115 ++ src/plugins/platforms/vnc/qgraphicssystem_vnc.h | 97 + src/plugins/platforms/vnc/qvnccursor.cpp | 156 ++ src/plugins/platforms/vnc/qvnccursor.h | 76 + src/plugins/platforms/vnc/qvncserver.cpp | 1935 ++++++++++++++++++++ src/plugins/platforms/vnc/qvncserver.h | 534 ++++++ src/plugins/platforms/vnc/vnc.pro | 19 + 162 files changed, 11867 insertions(+), 11369 deletions(-) create mode 100644 src/gui/kernel/qplatformintegration_lite.cpp create mode 100644 src/gui/kernel/qplatformintegration_lite.h create mode 100644 src/gui/kernel/qplatformintegrationfactory_lite.cpp create mode 100644 src/gui/kernel/qplatformintegrationfactory_lite_p.h create mode 100644 src/gui/kernel/qplatformintegrationplugin_lite.cpp create mode 100644 src/gui/kernel/qplatformintegrationplugin_lite.h create mode 100644 src/gui/kernel/qplatformscreen_lite.cpp create mode 100644 src/gui/kernel/qplatformscreen_lite.h create mode 100644 src/gui/painting/qgraphicssystem_lite.cpp create mode 100644 src/gui/painting/qgraphicssystem_lite_p.h delete mode 100644 src/plugins/graphicssystems/fb_base/fb_base.cpp delete mode 100644 src/plugins/graphicssystems/fb_base/fb_base.h delete mode 100644 src/plugins/graphicssystems/fb_base/fb_base.pri delete mode 100644 src/plugins/graphicssystems/fb_base/fb_base.pro delete mode 100644 src/plugins/graphicssystems/linuxfb/linuxfb.pro delete mode 100644 src/plugins/graphicssystems/linuxfb/main.cpp delete mode 100644 src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp delete mode 100644 src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h delete mode 100644 src/plugins/graphicssystems/minimal/main.cpp delete mode 100644 src/plugins/graphicssystems/minimal/minimal.pro delete mode 100644 src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp delete mode 100644 src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h delete mode 100644 src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp delete mode 100644 src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h delete mode 100644 src/plugins/graphicssystems/minimaldfb/main.cpp delete mode 100644 src/plugins/graphicssystems/minimaldfb/minimaldfb.pro delete mode 100644 src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp delete mode 100644 src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h delete mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp delete mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h delete mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp delete mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.h delete mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp delete mode 100644 src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h delete mode 100644 src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp delete mode 100644 src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h delete mode 100644 src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp delete mode 100644 src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h delete mode 100644 src/plugins/graphicssystems/openkode/frag.glslf delete mode 100644 src/plugins/graphicssystems/openkode/frag.h delete mode 100644 src/plugins/graphicssystems/openkode/main.cpp delete mode 100644 src/plugins/graphicssystems/openkode/openkode.pro delete mode 100644 src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp delete mode 100644 src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h delete mode 100644 src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp delete mode 100644 src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h delete mode 100644 src/plugins/graphicssystems/openkode/vert.glslv delete mode 100644 src/plugins/graphicssystems/openkode/vert.h delete mode 100644 src/plugins/graphicssystems/openvglite/main.cpp delete mode 100644 src/plugins/graphicssystems/openvglite/openvglite.pro delete mode 100644 src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp delete mode 100644 src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h delete mode 100644 src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp delete mode 100644 src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h delete mode 100644 src/plugins/graphicssystems/qvfb/main.cpp delete mode 100644 src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp delete mode 100644 src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.h delete mode 100644 src/plugins/graphicssystems/qvfb/qvfb.pro delete mode 100644 src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp delete mode 100644 src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.h delete mode 100644 src/plugins/graphicssystems/testlite/main.cpp delete mode 100644 src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp delete mode 100644 src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h delete mode 100644 src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp delete mode 100644 src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h delete mode 100644 src/plugins/graphicssystems/testlite/testlite.pro delete mode 100644 src/plugins/graphicssystems/testlite/x11util.cpp delete mode 100644 src/plugins/graphicssystems/testlite/x11util.h delete mode 100644 src/plugins/graphicssystems/vnc/main.cpp delete mode 100644 src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp delete mode 100644 src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h delete mode 100644 src/plugins/graphicssystems/vnc/qvnccursor.cpp delete mode 100644 src/plugins/graphicssystems/vnc/qvnccursor.h delete mode 100644 src/plugins/graphicssystems/vnc/qvncserver.cpp delete mode 100644 src/plugins/graphicssystems/vnc/qvncserver.h delete mode 100644 src/plugins/graphicssystems/vnc/vnc.pro create mode 100644 src/plugins/platforms/fb_base/fb_base.cpp create mode 100644 src/plugins/platforms/fb_base/fb_base.h create mode 100644 src/plugins/platforms/fb_base/fb_base.pri create mode 100644 src/plugins/platforms/fb_base/fb_base.pro create mode 100644 src/plugins/platforms/linuxfb/linuxfb.pro create mode 100644 src/plugins/platforms/linuxfb/main.cpp create mode 100644 src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp create mode 100644 src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h create mode 100644 src/plugins/platforms/minimal/main.cpp create mode 100644 src/plugins/platforms/minimal/minimal.pro create mode 100644 src/plugins/platforms/minimal/qplatformintegration_minimal.cpp create mode 100644 src/plugins/platforms/minimal/qplatformintegration_minimal.h create mode 100644 src/plugins/platforms/minimal/qwindowsurface_minimal.cpp create mode 100644 src/plugins/platforms/minimal/qwindowsurface_minimal.h create mode 100644 src/plugins/platforms/minimaldfb/main.cpp create mode 100644 src/plugins/platforms/minimaldfb/minimaldfb.pro create mode 100644 src/plugins/platforms/minimaldfb/qblitter_directfb.cpp create mode 100644 src/plugins/platforms/minimaldfb/qblitter_directfb.h create mode 100644 src/plugins/platforms/minimaldfb/qdirectfbconvenience.cpp create mode 100644 src/plugins/platforms/minimaldfb/qdirectfbconvenience.h create mode 100644 src/plugins/platforms/minimaldfb/qdirectfbcursor.cpp create mode 100644 src/plugins/platforms/minimaldfb/qdirectfbcursor.h create mode 100644 src/plugins/platforms/minimaldfb/qdirectfbinput.cpp create mode 100644 src/plugins/platforms/minimaldfb/qdirectfbinput.h create mode 100644 src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.cpp create mode 100644 src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.h create mode 100644 src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.cpp create mode 100644 src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.h create mode 100644 src/plugins/platforms/openkode/frag.glslf create mode 100644 src/plugins/platforms/openkode/frag.h create mode 100644 src/plugins/platforms/openkode/main.cpp create mode 100644 src/plugins/platforms/openkode/openkode.pro create mode 100644 src/plugins/platforms/openkode/qgraphicssystem_openkode.cpp create mode 100644 src/plugins/platforms/openkode/qgraphicssystem_openkode.h create mode 100644 src/plugins/platforms/openkode/qwindowsurface_openkode.cpp create mode 100644 src/plugins/platforms/openkode/qwindowsurface_openkode.h create mode 100644 src/plugins/platforms/openkode/vert.glslv create mode 100644 src/plugins/platforms/openkode/vert.h create mode 100644 src/plugins/platforms/openvglite/main.cpp create mode 100644 src/plugins/platforms/openvglite/openvglite.pro create mode 100644 src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp create mode 100644 src/plugins/platforms/openvglite/qgraphicssystem_vglite.h create mode 100644 src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp create mode 100644 src/plugins/platforms/openvglite/qwindowsurface_vglite.h create mode 100644 src/plugins/platforms/platforms.pro create mode 100644 src/plugins/platforms/qvfb/main.cpp create mode 100644 src/plugins/platforms/qvfb/qgraphicssystem_qvfb.cpp create mode 100644 src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h create mode 100644 src/plugins/platforms/qvfb/qvfb.pro create mode 100644 src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp create mode 100644 src/plugins/platforms/qvfb/qwindowsurface_qvfb.h create mode 100644 src/plugins/platforms/testlite/main.cpp create mode 100644 src/plugins/platforms/testlite/qgraphicssystem_testlite.cpp create mode 100644 src/plugins/platforms/testlite/qgraphicssystem_testlite.h create mode 100644 src/plugins/platforms/testlite/qwindowsurface_testlite.cpp create mode 100644 src/plugins/platforms/testlite/qwindowsurface_testlite.h create mode 100644 src/plugins/platforms/testlite/testlite.pro create mode 100644 src/plugins/platforms/testlite/x11util.cpp create mode 100644 src/plugins/platforms/testlite/x11util.h create mode 100644 src/plugins/platforms/vnc/main.cpp create mode 100644 src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp create mode 100644 src/plugins/platforms/vnc/qgraphicssystem_vnc.h create mode 100644 src/plugins/platforms/vnc/qvnccursor.cpp create mode 100644 src/plugins/platforms/vnc/qvnccursor.h create mode 100644 src/plugins/platforms/vnc/qvncserver.cpp create mode 100644 src/plugins/platforms/vnc/qvncserver.h create mode 100644 src/plugins/platforms/vnc/vnc.pro diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp index 3420778..d4cbdc6 100644 --- a/src/gui/image/qnativeimage.cpp +++ b/src/gui/image/qnativeimage.cpp @@ -288,7 +288,7 @@ QNativeImage::~QNativeImage() QImage::Format QNativeImage::systemFormat() { #ifdef Q_WS_LITE - return QApplicationPrivate::graphicsSystem()->screens().at(0)->format(); + return QApplicationPrivate::platformIntegration()->screens().at(0)->format(); #else return QImage::Format_RGB32; #endif diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 6dcf7c7..38a2f81 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -57,7 +57,7 @@ void QBlittablePixmapData::resize(int width, int height) delete m_engine; m_engine = 0; #ifdef Q_WS_LITE - d = QApplicationPrivate::graphicsSystem()->screens().at(0)->depth(); + d = QApplicationPrivate::platformIntegration()->screens().at(0)->depth(); #endif w = width; h = height; diff --git a/src/gui/image/qpixmap_lite.cpp b/src/gui/image/qpixmap_lite.cpp index d263855..61be216 100644 --- a/src/gui/image/qpixmap_lite.cpp +++ b/src/gui/image/qpixmap_lite.cpp @@ -45,5 +45,5 @@ QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h) { - return QApplicationPrivate::graphicsSystem()->grabWindow(window, x, y, w, h); + return QApplicationPrivate::platformIntegration()->grabWindow(window, x, y, w, h); } diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 96892d2..cf5ec92 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -203,6 +203,10 @@ embedded_lite { kernel/qgenericplugin_lite.h \ kernel/qeventdispatcher_lite_p.h \ kernel/qwindowsysteminterface.h \ + kernel/qplatformintegration_lite.h \ + kernel/qplatformscreen_lite.h \ + kernel/qplatformintegrationfactory_lite_p.h \ + kernel/qplatformintegrationplugin_lite.h \ SOURCES += \ kernel/qapplication_lite.cpp \ @@ -216,7 +220,11 @@ embedded_lite { kernel/qsound_lite.cpp \ kernel/qwidget_lite.cpp \ kernel/qeventdispatcher_lite.cpp \ - kernel/qwindowsysteminterface.cpp + kernel/qwindowsysteminterface.cpp \ + kernel/qplatformintegration_lite.cpp \ + kernel/qplatformscreen_lite.cpp \ + kernel/qplatformintegrationfactory_lite.cpp \ + kernel/qplatformintegrationplugin_lite.cpp contains(QT_CONFIG, glib) { SOURCES += \ diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 4782d7c..a188276 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -441,6 +441,9 @@ QPalette *QApplicationPrivate::sys_pal = 0; // default system palette QPalette *QApplicationPrivate::set_pal = 0; // default palette set by programmer QGraphicsSystem *QApplicationPrivate::graphics_system = 0; // default graphics system +#if defined(Q_WS_LITE) +QPlatformIntegration *QApplicationPrivate::platform_integration = 0; +#endif QString QApplicationPrivate::graphics_system_name; // graphics system id - for delayed initialization Q_GLOBAL_STATIC(QMutex, applicationFontMutex) @@ -771,7 +774,6 @@ void QApplicationPrivate::construct( ) { initResources(); - graphics_system_name = QLatin1String(qgetenv("QT_DEFAULT_GRAPHICS_SYSTEM")); qt_is_gui_used = (qt_appType != QApplication::Tty); @@ -939,10 +941,12 @@ void QApplicationPrivate::initialize() // Set up which span functions should be used in raster engine... qInitDrawhelperAsm(); -#if !defined(Q_WS_X11) && !defined(Q_WS_QWS) +#if !defined(Q_WS_X11) && !defined(Q_WS_QWS) && !defined(Q_WS_LITE) // initialize the graphics system - on X11 this is initialized inside // qt_init() in qapplication_x11.cpp because of several reasons. // On QWS, the graphics system is set by the QScreen plugin. + // For lighthouse it will be initialized to QLiteGraphicsSystem + // when the platformIntegration plugin is instansiated in qt_init( graphics_system = QGraphicsSystemFactory::create(graphics_system_name); #endif #ifndef QT_NO_WHEELEVENT @@ -1561,7 +1565,11 @@ QStyle* QApplication::setStyle(const QString& style) void QApplication::setGraphicsSystem(const QString &system) { +#if !defined(Q_WS_LITE) QApplicationPrivate::graphics_system_name = system; +#else + Q_UNUSED(system) +#endif } /*! diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 5d7ab5a..c8d65ff 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -53,13 +53,15 @@ #include "private/qwidget_p.h" #include "qgenericpluginfactory_lite.h" +#include "qplatformintegrationfactory_lite_p.h" #include #include -#include "private/qgraphicssystem_p.h" +#include #include #include #include +#include QT_BEGIN_NAMESPACE @@ -386,10 +388,9 @@ void QApplication::restoreOverrideCursor() QWidget *QApplication::topLevelAt(const QPoint &pos) { - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) - return 0; - QGraphicsSystemScreen *screen = gs->screens().first(); + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + + QPlatformScreen *screen = pi->screens().first(); if (!screen) return 0; QWidget *w = screen->topLevelAt(pos); @@ -404,6 +405,23 @@ void QApplication::alert(QWidget *, int) { } +static void init_platform(const QString &name) +{ + QApplicationPrivate::platform_integration = QPlatformIntegrationFactory::create(name); + QApplicationPrivate::graphics_system = new QLiteGraphicsSystem; + if (!QApplicationPrivate::platform_integration) { + QStringList keys = QPlatformIntegrationFactory::keys(); + QString fatalMessage = + QString::fromLatin1("Failed to load platform plugin \"%1\". Available platforms are: \n").arg(name); + foreach(QString key, keys) { + fatalMessage.append(key + QString::fromLatin1("\n")); + } + qFatal("%s", fatalMessage.toLocal8Bit().constData()); + + } + +} + static void init_plugins(const QList pluginList) { for (int i = 0; i < pluginList.count(); ++i) { @@ -447,6 +465,7 @@ void qt_init(QApplicationPrivate *priv, int type) } QList pluginList; + QString platformName = qgetenv("QT_LITE_PLATFORM"); // Get command line params @@ -460,6 +479,9 @@ void qt_init(QApplicationPrivate *priv, int type) if (arg == "-fn" || arg == "-font") { if (++i < argc) appFont = argv[i]; + } else if (arg == "-platform") { + if (++i < argc) + platformName = argv[i]; } else if (arg == "-plugin") { if (++i < argc) pluginList << argv[i]; @@ -473,9 +495,6 @@ void qt_init(QApplicationPrivate *priv, int type) priv->argc = j; } - - - #if 0 QByteArray pluginEnv = qgetenv("QT_LITE_PLUGINS"); if (!pluginEnv.isEmpty()) { @@ -483,6 +502,7 @@ void qt_init(QApplicationPrivate *priv, int type) } #endif + init_platform(platformName); init_plugins(pluginList); QColormap::initialize(); diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 2cf5fce..d0ab0c4 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -78,6 +78,7 @@ #endif #ifdef Q_WS_LITE #include +#include "QtGui/qplatformintegration_lite.h" #endif QT_BEGIN_NAMESPACE @@ -312,10 +313,15 @@ public: static QString desktopStyleKey(); static QGraphicsSystem *graphicsSystem() -#if !defined(Q_WS_QWS) - { return graphics_system; } -#else +#if defined(Q_WS_QWS) { return QScreen::instance()->graphicsSystem(); } +#else + { return graphics_system; } +#endif + +#if defined(Q_WS_LITE) + static QPlatformIntegration *platformIntegration() + { return platform_integration; } #endif void createEventDispatcher(); @@ -417,6 +423,9 @@ public: static QPalette *set_pal; static QGraphicsSystem *graphics_system; static QString graphics_system_name; +#if defined(Q_WS_LITE) + static QPlatformIntegration *platform_integration; +#endif private: static QFont *app_font; // private for a reason! Always use QApplication::font() instead! diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp index a3535fb..b077d57 100644 --- a/src/gui/kernel/qdesktopwidget_lite.cpp +++ b/src/gui/kernel/qdesktopwidget_lite.cpp @@ -69,10 +69,8 @@ int QDesktopWidget::primaryScreen() const int QDesktopWidget::numScreens() const { - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) - return 0; - return qMax(gs->screens().size(), 1); + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + return qMax(pi->screens().size(), 1); } QWidget *QDesktopWidget::screen(int) @@ -82,10 +80,8 @@ QWidget *QDesktopWidget::screen(int) const QRect QDesktopWidget::availableGeometry(int screenNo) const { - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) - return QRect(); - QList screens = gs->screens(); + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); if (screenNo == -1) screenNo = 0; if (screenNo < 0 || screenNo >= screens.size()) @@ -96,10 +92,8 @@ const QRect QDesktopWidget::availableGeometry(int screenNo) const const QRect QDesktopWidget::screenGeometry(int screenNo) const { - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) - return QRect(); - QList screens = gs->screens(); + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); if (screenNo == -1) screenNo = 0; if (screenNo < 0 || screenNo >= screens.size()) @@ -122,10 +116,8 @@ int QDesktopWidget::screenNumber(const QWidget *w) const int QDesktopWidget::screenNumber(const QPoint &p) const { - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) - return -1; - QList screens = gs->screens(); + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); for (int i = 0; i < screens.size(); ++i) if (screens[i]->geometry().contains(p)) diff --git a/src/gui/kernel/qplatformintegration_lite.cpp b/src/gui/kernel/qplatformintegration_lite.cpp new file mode 100644 index 0000000..0e28fc6 --- /dev/null +++ b/src/gui/kernel/qplatformintegration_lite.cpp @@ -0,0 +1,18 @@ +#include "qplatformintegration_lite.h" + +QT_BEGIN_NAMESPACE + +QBlittable *QPlatformIntegration::createBlittable(const QSize &) const +{ return 0; } + +QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, int height) const +{ + Q_UNUSED(window); + Q_UNUSED(x); + Q_UNUSED(y); + Q_UNUSED(width); + Q_UNUSED(height); + return QPixmap(); +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h new file mode 100644 index 0000000..543b7bc --- /dev/null +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATION_H +#define QPLATFORMINTEGRATION_H + +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class Q_GUI_EXPORT QPlatformIntegration +{ +public: + virtual ~QPlatformIntegration() { }; + +// GraphicsSystem functions + virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; + virtual QWindowSurface *createWindowSurface(QWidget *widget) const = 0; + virtual QBlittable *createBlittable(const QSize &size) const; + +// Window System functions + virtual QList screens() const = 0; + virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMINTEGRATION_H diff --git a/src/gui/kernel/qplatformintegrationfactory_lite.cpp b/src/gui/kernel/qplatformintegrationfactory_lite.cpp new file mode 100644 index 0000000..7f650e9 --- /dev/null +++ b/src/gui/kernel/qplatformintegrationfactory_lite.cpp @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformintegrationfactory_lite_p.h" +#include +#include "private/qfactoryloader_p.h" +#include "qmutex.h" + +#include "qapplication.h" +#include "qdebug.h" + +QT_BEGIN_NAMESPACE + +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, + (QPlatformIntegrationFactoryInterface_iid, QLatin1String("/platforms"), Qt::CaseInsensitive)) +#endif + +QPlatformIntegration *QPlatformIntegrationFactory::create(const QString& key) +{ + QPlatformIntegration *ret = 0; + QString platform = key.toLower(); + + qDebug() << loader()->keys(); +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) + if (QPlatformIntegrationFactoryInterface *factory = qobject_cast(loader()->instance(platform))) + ret = factory->create(platform); +#endif + + return ret; +} + +/*! + Returns the list of valid keys, i.e. the keys this factory can + create styles for. + + \sa create() +*/ +QStringList QPlatformIntegrationFactory::keys() +{ +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) + QStringList list = loader()->keys(); +#else + QStringList list; +#endif + return list; +} + +QT_END_NAMESPACE + diff --git a/src/gui/kernel/qplatformintegrationfactory_lite_p.h b/src/gui/kernel/qplatformintegrationfactory_lite_p.h new file mode 100644 index 0000000..ba02d2c --- /dev/null +++ b/src/gui/kernel/qplatformintegrationfactory_lite_p.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATIONFACTORY_H +#define QPLATFORMINTEGRATIONFACTORY_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class QPlatformIntegration; + +class QPlatformIntegrationFactory +{ +public: + static QStringList keys(); + static QPlatformIntegration *create(const QString&); +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMINTEGRATIONFACTORY_H + diff --git a/src/gui/kernel/qplatformintegrationplugin_lite.cpp b/src/gui/kernel/qplatformintegrationplugin_lite.cpp new file mode 100644 index 0000000..cb1ed83 --- /dev/null +++ b/src/gui/kernel/qplatformintegrationplugin_lite.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformintegrationplugin_lite.h" + +QT_BEGIN_NAMESPACE + +QPlatformIntegrationPlugin::QPlatformIntegrationPlugin(QObject *parent) + : QObject(parent) +{ +} + +QPlatformIntegrationPlugin::~QPlatformIntegrationPlugin() +{ +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegrationplugin_lite.h b/src/gui/kernel/qplatformintegrationplugin_lite.h new file mode 100644 index 0000000..0e116f2 --- /dev/null +++ b/src/gui/kernel/qplatformintegrationplugin_lite.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATIONPLUGIN_H +#define QPLATFORMINTEGRATIONPLUGIN_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class QPlatformIntegration; + +struct QPlatformIntegrationFactoryInterface : public QFactoryInterface +{ + virtual QPlatformIntegration *create(const QString &key) = 0; +}; + +#define QPlatformIntegrationFactoryInterface_iid "com.nokia.Qt.QPlatformIntegrationFactoryInterface" + +Q_DECLARE_INTERFACE(QPlatformIntegrationFactoryInterface, QPlatformIntegrationFactoryInterface_iid) + +class Q_GUI_EXPORT QPlatformIntegrationPlugin : public QObject, public QPlatformIntegrationFactoryInterface +{ + Q_OBJECT + Q_INTERFACES(QPlatformIntegrationFactoryInterface:QFactoryInterface) +public: + explicit QPlatformIntegrationPlugin(QObject *parent = 0); + ~QPlatformIntegrationPlugin(); + + virtual QStringList keys() const = 0; + virtual QPlatformIntegration *create(const QString &key) = 0; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMINTEGRATIONPLUGIN_H diff --git a/src/gui/kernel/qplatformscreen_lite.cpp b/src/gui/kernel/qplatformscreen_lite.cpp new file mode 100644 index 0000000..f2ea2f8 --- /dev/null +++ b/src/gui/kernel/qplatformscreen_lite.cpp @@ -0,0 +1,15 @@ +#include "qplatformscreen_lite.h" + +QWidget *QPlatformScreen::topLevelAt(const QPoint & pos) const +{ + QWidgetList list = QApplication::topLevelWidgets(); + for (int i = list.size()-1; i >= 0; --i) { + QWidget *w = list[i]; + //### mask is ignored + if (w != QApplication::desktop() && w->isVisible() && w->geometry().contains(pos)) + return w; + } + + return 0; +} + diff --git a/src/gui/kernel/qplatformscreen_lite.h b/src/gui/kernel/qplatformscreen_lite.h new file mode 100644 index 0000000..ef90dee --- /dev/null +++ b/src/gui/kernel/qplatformscreen_lite.h @@ -0,0 +1,31 @@ +#ifndef QPLATFORMSCREEN_H +#define QPLATFORMSCREEN_H + +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class Q_GUI_EXPORT QPlatformScreen +{ +public: + virtual ~QPlatformScreen() { } + + virtual QRect geometry() const = 0; + virtual QRect availableGeometry() const {return geometry();}; + virtual int depth() const = 0; + virtual QImage::Format format() const = 0; + virtual QSize physicalSize() const = 0; + virtual void setDirty(const QRect &) {} + virtual QWidget *topLevelAt(const QPoint &point) const; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMSCREEN_H diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index bcbcd82..add5592 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -51,7 +51,7 @@ #include QT_BEGIN_NAMESPACE -static QGraphicsSystemScreen *qt_screenForWidget(const QWidget *w); +static QPlatformScreen *qt_screenForWidget(const QWidget *w); void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool /*destroyOldWindow*/) { @@ -535,7 +535,7 @@ void QWidgetPrivate::scroll_sys(int dx, int dy, const QRect &r) scrollRect(r, dx, dy); } -static QGraphicsSystemScreen *qt_screenForWidget(const QWidget *w) +static QPlatformScreen *qt_screenForWidget(const QWidget *w) { if (!w) return 0; @@ -544,12 +544,8 @@ static QGraphicsSystemScreen *qt_screenForWidget(const QWidget *w) frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0))); const QPoint p = (frame.topLeft() + frame.bottomRight()) / 2; - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) { - qWarning("qt_screenForWidget: no graphics system"); - return 0; - } - QList screens = gs->screens(); + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); for (int i = 0; i < screens.size(); ++i) { if (screens[i]->geometry().contains(p)) @@ -569,7 +565,7 @@ int QWidget::metric(PaintDeviceMetric m) const { Q_D(const QWidget); - QGraphicsSystemScreen *screen = qt_screenForWidget(this); + QPlatformScreen *screen = qt_screenForWidget(this); if (!screen) { if (m == PdmDpiX || m == PdmDpiY) return 72; diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index fee7e75..70b2830 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -41,14 +41,18 @@ #ifndef QWINDOWSYSTEMINTERFACE_H #define QWINDOWSYSTEMINTERFACE_H -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include + +QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +QT_MODULE(Gui) + class Q_GUI_EXPORT QWindowSystemInterface { public: @@ -129,5 +133,7 @@ public: static QWindowSystemInterface::UserEvent * getUserEvent() { return userEventQueue.takeFirst(); } static void queueUserEvent(QWindowSystemInterface::UserEvent *ev) { userEventQueue.append(ev); } }; + QT_END_NAMESPACE +QT_END_HEADER #endif // QWINDOWSYSTEMINTERFACE_H diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 3273cb3..c4e8f7a 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -187,9 +187,11 @@ embedded_lite { SOURCES += \ painting/qcolormap_lite.cpp \ painting/qpaintdevice_lite.cpp \ - painting/qgraphicssystemcursor_lite.cpp + painting/qgraphicssystemcursor_lite.cpp \ + painting/qgraphicssystem_lite.cpp HEADERS += \ - painting/qgraphicssystemcursor_lite.h + painting/qgraphicssystemcursor_lite.h \ + painting/qgraphicssystem_lite_p.h } symbian { diff --git a/src/gui/painting/qcolormap_lite.cpp b/src/gui/painting/qcolormap_lite.cpp index 1c1e9cf..1f4fea8 100644 --- a/src/gui/painting/qcolormap_lite.cpp +++ b/src/gui/painting/qcolormap_lite.cpp @@ -67,12 +67,8 @@ void QColormap::initialize() { screenMap = new QColormapPrivate; - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) - return; - QList screens = gs->screens(); - if (screens.isEmpty()) - return; + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); screenMap->depth = screens[0]->depth(); if (screenMap->depth < 8) { diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp index ebc504b..c9866ae 100644 --- a/src/gui/painting/qgraphicssystem.cpp +++ b/src/gui/painting/qgraphicssystem.cpp @@ -51,9 +51,7 @@ # include #endif #ifdef Q_WS_LITE -# include -# include -# include +# include #endif #ifdef Q_WS_S60 # include @@ -65,6 +63,9 @@ QGraphicsSystem::~QGraphicsSystem() { } +QBlittable *QGraphicsSystem::createBlittable(const QSize &) const +{ return 0; } + QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType type) { #ifdef Q_WS_QWS @@ -77,7 +78,7 @@ QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType typ #elif defined(Q_WS_MAC) return new QMacPixmapData(type); #elif defined(Q_WS_LITE) - return new QRasterPixmapData(type); + return QApplicationPrivate::platformIntegration()->createPixmapData(type); #elif defined(Q_WS_S60) return new QS60PixmapData(type); #elif !defined(Q_WS_QWS) @@ -86,49 +87,4 @@ QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType typ return 0; } -#ifdef Q_WS_LITE -QWidget *QGraphicsSystemScreen::topLevelAt(const QPoint & pos) const -{ - QWidgetList list = QApplication::topLevelWidgets(); - for (int i = list.size()-1; i >= 0; --i) { - QWidget *w = list[i]; - //### mask is ignored - if (w != QApplication::desktop() && w->isVisible() && w->geometry().contains(pos)) - return w; - } - - return 0; -} - -QList QGraphicsSystem::screens() const -{ - return QList(); -} - -QPixmap QGraphicsSystem::grabWindow(WId window, int x, int y, int width, int height) const -{ - Q_UNUSED(window); - Q_UNUSED(x); - Q_UNUSED(y); - Q_UNUSED(width); - Q_UNUSED(height); - return QPixmap(); -} - - -QGraphicsSystemScreen::QGraphicsSystemScreen(QObject *parent) - : QObject(parent) -{} - -QGraphicsSystemScreen::~QGraphicsSystemScreen() -{ -} - -QRect QGraphicsSystemScreen::availableGeometry() const -{ - return geometry(); -} - -#endif //Q_WS_LITE - QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystem_lite.cpp b/src/gui/painting/qgraphicssystem_lite.cpp new file mode 100644 index 0000000..42e7238 --- /dev/null +++ b/src/gui/painting/qgraphicssystem_lite.cpp @@ -0,0 +1,62 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_lite_p.h" +#include + +QT_BEGIN_NAMESPACE + +QPixmapData *QLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return QApplicationPrivate::platformIntegration()->createPixmapData(type); +} + +QWindowSurface *QLiteGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + return QApplicationPrivate::platformIntegration()->createWindowSurface(widget); +} + +QBlittable *QLiteGraphicsSystem::createBlittable(const QSize &size) const +{ + return QApplicationPrivate::platformIntegration()->createBlittable(size); +} + +QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystem_lite_p.h b/src/gui/painting/qgraphicssystem_lite_p.h new file mode 100644 index 0000000..e29fa83 --- /dev/null +++ b/src/gui/painting/qgraphicssystem_lite_p.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_MAC_P_H +#define QGRAPHICSSYSTEM_MAC_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "private/qgraphicssystem_p.h" + +QT_BEGIN_NAMESPACE + +class Q_GUI_EXPORT QLiteGraphicsSystem : public QGraphicsSystem +{ +public: + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + QBlittable *createBlittable(const QSize &size) const; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index 03b0f48..e1e15e0 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -64,37 +64,14 @@ QT_BEGIN_NAMESPACE class QPixmapFilter; class QBlittable; -#ifdef Q_WS_LITE -class Q_GUI_EXPORT QGraphicsSystemScreen : public QObject -{ - Q_OBJECT -public: - QGraphicsSystemScreen(QObject *parent = 0); - virtual ~QGraphicsSystemScreen(); - - virtual QRect geometry() const = 0; - virtual QRect availableGeometry() const; - virtual int depth() const = 0; - virtual QImage::Format format() const = 0; - virtual QSize physicalSize() const = 0; - virtual void setDirty(const QRect &) {} - virtual QWidget *topLevelAt(const QPoint &point) const; -}; -#endif // Q_WS_LITE - class Q_GUI_EXPORT QGraphicsSystem { public: virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; virtual QWindowSurface *createWindowSurface(QWidget *widget) const = 0; - virtual QBlittable *createBlittable(const QSize &) const { return 0; } - - virtual ~QGraphicsSystem() = 0; + virtual QBlittable *createBlittable(const QSize &size) const; -#ifdef Q_WS_LITE - virtual QList screens() const; - virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; -#endif + virtual ~QGraphicsSystem(); //### Remove this & change qpixmap.cpp & qbitmap.cpp once every platform is gaurenteed // to have a graphics system. diff --git a/src/gui/painting/qgraphicssystemcursor_lite.cpp b/src/gui/painting/qgraphicssystemcursor_lite.cpp index 76b7d97..fdb026c 100644 --- a/src/gui/painting/qgraphicssystemcursor_lite.cpp +++ b/src/gui/painting/qgraphicssystemcursor_lite.cpp @@ -94,7 +94,7 @@ QPointer QGraphicsSystemCursor::instance = 0; Constructs a QGraphicsSystemCursor */ -QGraphicsSystemCursor::QGraphicsSystemCursor(QGraphicsSystemScreen *scr ) +QGraphicsSystemCursor::QGraphicsSystemCursor(QPlatformScreen *scr ) : screen(scr) { instance = this; diff --git a/src/gui/painting/qgraphicssystemcursor_lite.h b/src/gui/painting/qgraphicssystemcursor_lite.h index 0d57d52..5288b83 100644 --- a/src/gui/painting/qgraphicssystemcursor_lite.h +++ b/src/gui/painting/qgraphicssystemcursor_lite.h @@ -47,6 +47,7 @@ #include #include #include "qgraphicssystem_p.h" +#include QT_BEGIN_NAMESPACE @@ -68,7 +69,7 @@ private: class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { public: - QGraphicsSystemCursor(QGraphicsSystemScreen *); + QGraphicsSystemCursor(QPlatformScreen *); // input methods virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } @@ -79,7 +80,7 @@ public: protected: static QPointer instance; // limit 1 cursor at a time - QGraphicsSystemScreen * screen; // Where to request an update + QPlatformScreen* screen; // Where to request an update }; QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/blittable/blittable.pro b/src/plugins/graphicssystems/blittable/blittable.pro index 596e92f..34c4165 100644 --- a/src/plugins/graphicssystems/blittable/blittable.pro +++ b/src/plugins/graphicssystems/blittable/blittable.pro @@ -5,8 +5,7 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems SOURCES = main.cpp HEADERS = qblittable_image.h \ - qgraphicssystem_blittable.h \ - qwindowsurface_imageblittable.h + qgraphicssystem_blittable.h target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target diff --git a/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h b/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h index b42021e..d45907f 100644 --- a/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h +++ b/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h @@ -43,5 +43,11 @@ public: QImage *image = new QImage(size, QImage::Format_ARGB32_Premultiplied); return new QImageBlittable(image,true); } + + QList screens() + { return m_screens; } + + QList m_screens; }; + diff --git a/src/plugins/graphicssystems/fb_base/fb_base.cpp b/src/plugins/graphicssystems/fb_base/fb_base.cpp deleted file mode 100644 index d30746a..0000000 --- a/src/plugins/graphicssystems/fb_base/fb_base.cpp +++ /dev/null @@ -1,364 +0,0 @@ -#include "fb_base.h" - -#include -#include -#include -#include -#include - -QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen *scr) - : QGraphicsSystemCursor(scr), currentRect(QRect()), prevRect(QRect()) -{ - graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); - setCursor(Qt::ArrowCursor); -} - -QRect QGraphicsSystemSoftwareCursor::getCurrentRect() -{ - QRect rect = graphic->image()->rect().translated(-graphic->hotspot().x(), - -graphic->hotspot().y()); - rect.translate(QCursor::pos()); - return rect; -} - - -void QGraphicsSystemSoftwareCursor::pointerEvent(const QMouseEvent & e) -{ - Q_UNUSED(e); - currentRect = getCurrentRect(); - screen->setDirty(currentRect); -} - -QRect QGraphicsSystemSoftwareCursor::drawCursor(QPainter & painter) -{ - if (currentRect.isNull()) - return QRect(); - - prevRect = currentRect; - painter.drawImage(prevRect, *graphic->image()); - return prevRect; -} - -QRect QGraphicsSystemSoftwareCursor::dirtyRect() -{ - if (!prevRect.isNull()) { - QRect rect = prevRect; - prevRect = QRect(); - return rect; - } - return QRect(); -} - -void QGraphicsSystemSoftwareCursor::setCursor(Qt::CursorShape shape) -{ - graphic->set(shape); -} - -void QGraphicsSystemSoftwareCursor::setCursor(const QImage * image, int hotx, int hoty) -{ - graphic->set(image, hotx, hoty); -} - -void QGraphicsSystemSoftwareCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) -{ - graphic->set(data, mask, width, height, hotX, hotY); -} - -void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) -{ - Q_UNUSED(widget); - Qt::CursorShape shape = widgetCursor->shape(); - - if (shape == Qt::BitmapCursor) { - // application supplied cursor - QPoint spot = widgetCursor->hotSpot(); - setCursor(&widgetCursor->pixmap().toImage(), spot.x(), spot.y()); - } else { - // system cursor - setCursor(shape); - } - currentRect = getCurrentRect(); - screen->setDirty(currentRect); -} - -QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) -{ - mScreenImage = new QImage(mGeometry.size(), mFormat); - redrawTimer.setSingleShot(true); - redrawTimer.setInterval(0); - QObject::connect(&redrawTimer, SIGNAL(timeout()), this, SLOT(doRedraw())); -} - -void QGraphicsSystemFbScreen::setGeometry(QRect rect) -{ - delete mScreenImage; - mGeometry = rect; - mScreenImage = new QImage(mGeometry.size(), mFormat); - delete compositePainter; - compositePainter = 0; - invalidateRectCache(); -} - -void QGraphicsSystemFbScreen::setDepth(int depth) -{ - mDepth = depth; -} - -void QGraphicsSystemFbScreen::setPhysicalSize(QSize size) -{ - mPhysicalSize = size; -} - -void QGraphicsSystemFbScreen::setFormat(QImage::Format format) -{ - mFormat = format; - delete mScreenImage; - mScreenImage = new QImage(mGeometry.size(), mFormat); - delete compositePainter; - compositePainter = 0; -} - -QGraphicsSystemFbScreen::~QGraphicsSystemFbScreen() -{ - delete compositePainter; - delete mScreenImage; -} - -void QGraphicsSystemFbScreen::setDirty(const QRect &rect) -{ - repaintRegion += rect; - if (!redrawTimer.isActive()) { - redrawTimer.start(); - } -} - -void QGraphicsSystemFbScreen::generateRects() -{ - cachedRects.clear(); - QRegion remainingScreen(mGeometry); - - for (int i = 0; i < windowStack.length(); i++) { - if (remainingScreen.isEmpty()) - break; - if (!windowStack[i]->window()->testAttribute(Qt::WA_TranslucentBackground)) { - remainingScreen -= windowStack[i]->geometry(); - QRegion windowRegion(windowStack[i]->geometry()); - windowRegion -= remainingScreen; - foreach(QRect rect, windowRegion.rects()) { - cachedRects += QPair(rect, i); - } - } - } - foreach (QRect rect, remainingScreen.rects()) - cachedRects += QPair(rect, -1); - isUpToDate = true; - return; -} - - - -QRegion QGraphicsSystemFbScreen::doRedraw() -{ - QRegion touchedRegion; - if (cursor) - repaintRegion += cursor->dirtyRect(); - if (repaintRegion.isEmpty()) - return touchedRegion; - - QVector rects = repaintRegion.rects(); - - if (!isUpToDate) - generateRects(); - - if (!compositePainter) - compositePainter = new QPainter(mScreenImage); - for (int rectIndex = 0; rectIndex < repaintRegion.numRects(); rectIndex++) { - QRegion rectRegion = rects[rectIndex]; - - for(int i = 0; i < cachedRects.length(); i++) { - QRect screenSubRect = cachedRects[i].first; - int layer = cachedRects[i].second; - QRegion intersect = rectRegion.intersected(screenSubRect); - - if (intersect.isEmpty()) - continue; - - rectRegion -= intersect; - - // we only expect one rectangle, but defensive coding... - foreach (QRect rect, intersect.rects()) { - bool firstLayer = true; - if (layer == -1) { - compositePainter->fillRect(rect, Qt::black); - firstLayer = false; - layer = windowStack.size() - 1; - } - - for (int layerIndex = layer; layerIndex != -1; layerIndex--) { - if (!windowStack[layerIndex]->visible()) - continue; - if (windowStack[layerIndex]->window()->isMinimized()) - continue; - QRect windowRect = windowStack[layerIndex]->geometry(); - QRect windowIntersect = rect.translated(-windowRect.left(), - -windowRect.top()); - compositePainter->drawImage(rect, windowStack[layerIndex]->image(), - windowIntersect); - if (firstLayer) { - firstLayer = false; - } - } - } - } - if (!rectRegion.isEmpty()) - qWarning() << "non-empty region!" << rectRegion; - // Everything on screen should be mapped to a sub-rectangle - // unless it's off the screen... - } - - QRect cursorRect; - if (cursor) { - cursorRect = cursor->drawCursor(*compositePainter); - touchedRegion += cursorRect; - } - touchedRegion += repaintRegion; - repaintRegion = QRegion(); - - return touchedRegion; -} - -void QGraphicsSystemFbScreen::removeWindowSurface(QGraphicsSystemFbWindowSurface * surface) -{ - windowStack.removeOne(surface); - invalidateRectCache(); - setDirty(surface->geometry()); -} - -void QGraphicsSystemFbWindowSurface::raise() -{ - mScreen->raise(this); -} - -void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) -{ - QGraphicsSystemFbWindowSurface *s = static_cast(surface); - int index = windowStack.indexOf(s); - if (index <= 0) - return; - windowStack.move(index, 0); - invalidateRectCache(); - setDirty(s->geometry()); -} - -void QGraphicsSystemFbWindowSurface::lower() -{ - mScreen->lower(this); -} - -void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) -{ - QGraphicsSystemFbWindowSurface *s = static_cast(surface); - int index = windowStack.indexOf(s); - if (index == -1 || index == (windowStack.size() - 1)) - return; - windowStack.move(index, windowStack.size() - 1); - invalidateRectCache(); - setDirty(s->geometry()); -} - -QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const -{ - for(int i = 0; i < windowStack.size(); i++) { - if (windowStack[i]->geometry().contains(p, false) && - windowStack[i]->visible() && - !windowStack[i]->window()->isMinimized()) { - return windowStack[i]->window(); - } - } - return 0; -} - -QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window) - : QWindowSurface(window), - mScreen(screen), - visibleFlag(false) -{ - static QAtomicInt winIdGenerator(1); - - mImage = QImage(window->size(), mScreen->format()); - windowId = winIdGenerator.fetchAndAddRelaxed(1); -} - -QGraphicsSystemFbWindowSurface::~QGraphicsSystemFbWindowSurface() -{ - mScreen->removeWindowSurface(this); -} - -void QGraphicsSystemFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(offset); - - QRect currentGeometry = geometry(); - // If this is a move, redraw the previous location - if (oldGeometry != currentGeometry) { - mScreen->setDirty(oldGeometry); - oldGeometry = currentGeometry; - } - - QRect dirtyClient = region.boundingRect(); - QRect dirtyRegion(currentGeometry.left() + dirtyClient.left(), - currentGeometry.top() + dirtyClient.top(), - dirtyClient.width(), - dirtyClient.height()); - mScreen->setDirty(dirtyRegion); -} - -void QGraphicsSystemFbWindowSurface::setGeometry(const QRect &rect) -{ - // store previous geometry for screen update - oldGeometry = geometry(); - - // change the widget's QImage if this is a resize - if (mImage.size() != rect.size()) - mImage = QImage(rect.size(), mScreen->format()); - - mScreen->invalidateRectCache(); - QWindowSystemInterface::handleGeometryChange(window(), rect); - - QWindowSurface::setGeometry(rect); -} - -bool QGraphicsSystemFbWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} - -void QGraphicsSystemFbWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QGraphicsSystemFbWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QGraphicsSystemFbWindowSurface::setVisible(bool visible) -{ - visibleFlag = visible; - mScreen->invalidateRectCache(); - mScreen->setDirty(geometry()); -} - -Qt::WindowFlags QGraphicsSystemFbWindowSurface::setWindowFlags(Qt::WindowFlags type) -{ - flags = type; - mScreen->invalidateRectCache(); - return flags; -} - -Qt::WindowFlags QGraphicsSystemFbWindowSurface::windowFlags() const -{ - return flags; -} diff --git a/src/plugins/graphicssystems/fb_base/fb_base.h b/src/plugins/graphicssystems/fb_base/fb_base.h deleted file mode 100644 index 7f9b005..0000000 --- a/src/plugins/graphicssystems/fb_base/fb_base.h +++ /dev/null @@ -1,132 +0,0 @@ -#ifndef QLIGHTHOUSEGRAPHICSSCREEN_H -#define QLIGHTHOUSEGRAPHICSSCREEN_H - -#include -#include -#include -#include -#include -#include - -class QMouseEvent; -class QSize; -class QPainter; - -class QGraphicsSystemFbScreen; - -class QGraphicsSystemSoftwareCursor : public QGraphicsSystemCursor -{ -public: - QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen * scr); - - // output methods - QRect dirtyRect(); - virtual QRect drawCursor(QPainter & painter); - - // input methods - virtual void pointerEvent(const QMouseEvent & event); - virtual void changeCursor(QCursor * widgetCursor, QWidget * widget); - -protected: - QGraphicsSystemCursorImage * graphic; - -private: - void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void setCursor(Qt::CursorShape shape); - void setCursor(const QImage * image, int hotx, int hoty); - QRect currentRect; // next place to draw the cursor - QRect prevRect; // last place the cursor was drawn - QRect getCurrentRect(); -}; - -class QGraphicsSystemFbWindowSurface : public QWindowSurface -{ -public: - QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window); - ~QGraphicsSystemFbWindowSurface(); - - virtual QPaintDevice *paintDevice() { return &mImage; } - virtual void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - virtual bool scroll(const QRegion &area, int dx, int dy); - - virtual void beginPaint(const QRegion ®ion); - virtual void endPaint(const QRegion ®ion); - virtual void setVisible(bool visible); - virtual bool visible() { return visibleFlag; } - - const QImage image() { return mImage; } - void setGeometry(const QRect &rect); - - virtual void raise(); - virtual void lower(); - - virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - virtual Qt::WindowFlags windowFlags() const; - - WId winId() const { return windowId; } -protected: - QGraphicsSystemFbScreen *mScreen; - QRect oldGeometry; - QImage mImage; - bool visibleFlag; - Qt::WindowFlags flags; - - WId windowId; -}; - -class QGraphicsSystemFbScreen : public QGraphicsSystemScreen -{ - Q_OBJECT -public: - QGraphicsSystemFbScreen(); - ~QGraphicsSystemFbScreen(); - - virtual QRect geometry() const { return mGeometry; } - virtual int depth() const { return mDepth; } - virtual QImage::Format format() const { return mFormat; } - virtual QSize physicalSize() const { return mPhysicalSize; } - - virtual void setGeometry(QRect rect); - virtual void setDepth(int depth); - virtual void setFormat(QImage::Format format); - virtual void setPhysicalSize(QSize size); - - virtual void setDirty(const QRect &rect); - - virtual void removeWindowSurface(QGraphicsSystemFbWindowSurface * surface); - virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { - windowStack.prepend(surface); invalidateRectCache(); } - virtual void raise(QWindowSurface * surface); - virtual void lower(QWindowSurface * surface); - virtual QWidget * topLevelAt(const QPoint & p) const; - - QImage * image() const { return mScreenImage; } - QPaintDevice * paintDevice() const { return mScreenImage; } - -protected: - QList windowStack; - QRegion repaintRegion; - QGraphicsSystemSoftwareCursor * cursor; - QTimer redrawTimer; - -protected slots: - virtual QRegion doRedraw(); - -protected: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; - QImage *mScreenImage; - -private: - QPainter * compositePainter; - void generateRects(); - QList > cachedRects; - - void invalidateRectCache() { isUpToDate = false; } - friend class QGraphicsSystemFbWindowSurface; - bool isUpToDate; -}; - -#endif // QLIGHTHOUSEGRAPHICSSCREEN_H diff --git a/src/plugins/graphicssystems/fb_base/fb_base.pri b/src/plugins/graphicssystems/fb_base/fb_base.pri deleted file mode 100644 index 41bd87f..0000000 --- a/src/plugins/graphicssystems/fb_base/fb_base.pri +++ /dev/null @@ -1,2 +0,0 @@ -SOURCES += ../fb_base/fb_base.cpp -HEADERS += ../fb_base/fb_base.h diff --git a/src/plugins/graphicssystems/fb_base/fb_base.pro b/src/plugins/graphicssystems/fb_base/fb_base.pro deleted file mode 100644 index e08c0c5..0000000 --- a/src/plugins/graphicssystems/fb_base/fb_base.pro +++ /dev/null @@ -1,23 +0,0 @@ -#------------------------------------------------- -# -# Project created by QtCreator 2009-11-05T13:22:31 -# -#------------------------------------------------- - -#QT -= core gui -TARGET = fb_base -#include(../../qpluginbase.pri) - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -TEMPLATE = lib - -#DEFINES += STATIC_LIBRARY -CONFIG += staticlib - -SOURCES += fb_base.cpp - -HEADERS += fb_base.h - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/graphicssystems/graphicssystems.pro b/src/plugins/graphicssystems/graphicssystems.pro index a5116d0..c00c9ff 100644 --- a/src/plugins/graphicssystems/graphicssystems.pro +++ b/src/plugins/graphicssystems/graphicssystems.pro @@ -13,11 +13,3 @@ contains(QT_CONFIG, shivavg) { # Only works under X11 at present !win32:!embedded:!mac:SUBDIRS += shivavg } - -embedded_lite: { - SUBDIRS += minimal -} - -embedded_lite:x11 { - SUBDIRS += linuxfb -} diff --git a/src/plugins/graphicssystems/linuxfb/linuxfb.pro b/src/plugins/graphicssystems/linuxfb/linuxfb.pro deleted file mode 100644 index 031b843..0000000 --- a/src/plugins/graphicssystems/linuxfb/linuxfb.pro +++ /dev/null @@ -1,12 +0,0 @@ -TARGET = qlinuxfbgraphicssystem -include(../../qpluginbase.pri) - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -SOURCES = main.cpp qgraphicssystem_linuxfb.cpp -HEADERS = qgraphicssystem_linuxfb.h - -include(../fb_base/fb_base.pri) - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/graphicssystems/linuxfb/main.cpp b/src/plugins/graphicssystems/linuxfb/main.cpp deleted file mode 100644 index 4d03fe5..0000000 --- a/src/plugins/graphicssystems/linuxfb/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_linuxfb.h" - -QT_BEGIN_NAMESPACE - -class QLinuxFbGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QLinuxFbGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "LinuxFb"; - return list; -} - -QGraphicsSystem* QLinuxFbGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "linuxfb") - return new QLinuxFbGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(linuxfb, QLinuxFbGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp deleted file mode 100644 index 44960bb..0000000 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.cpp +++ /dev/null @@ -1,856 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_linuxfb.h" -#include "../fb_base/fb_base.h" -#include -#include // overrides QT_OPEN -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if !defined(Q_OS_DARWIN) && !defined(Q_OS_FREEBSD) -#include - -#ifdef __i386__ -#include -#endif -#endif - -QT_BEGIN_NAMESPACE - -class QLinuxFbGraphicsSystemPrivate -{ -public: - QLinuxFbGraphicsSystemPrivate(); - ~QLinuxFbGraphicsSystemPrivate(); - - void openTty(); - void closeTty(); - - int fd; - int startupw; - int startuph; - int startupd; - bool blank; - - bool doGraphicsMode; -#ifdef QT_QWS_DEPTH_GENERIC - bool doGenericColors; -#endif - int ttyfd; - long oldKdMode; - QString ttyDevice; - QString displaySpec; -}; - -QLinuxFbGraphicsSystemPrivate::QLinuxFbGraphicsSystemPrivate() - : fd(-1), blank(true), doGraphicsMode(true), -#ifdef QT_QWS_DEPTH_GENERIC - doGenericColors(false), -#endif - ttyfd(-1), oldKdMode(KD_TEXT) -{ -} - -QLinuxFbGraphicsSystemPrivate::~QLinuxFbGraphicsSystemPrivate() -{ - closeTty(); -} - -void QLinuxFbGraphicsSystemPrivate::openTty() -{ - const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0}; - - if (ttyDevice.isEmpty()) { - for (const char * const *dev = devs; *dev; ++dev) { - ttyfd = QT_OPEN(*dev, O_RDWR); - if (ttyfd != -1) - break; - } - } else { - ttyfd = QT_OPEN(ttyDevice.toAscii().constData(), O_RDWR); - } - - if (ttyfd == -1) - return; - - if (doGraphicsMode) { - ioctl(ttyfd, KDGETMODE, &oldKdMode); - if (oldKdMode != KD_GRAPHICS) { - int ret = ioctl(ttyfd, KDSETMODE, KD_GRAPHICS); - if (ret == -1) - doGraphicsMode = false; - } - } - - // No blankin' screen, no blinkin' cursor!, no cursor! - const char termctl[] = "\033[9;0]\033[?33l\033[?25l\033[?1c"; - QT_WRITE(ttyfd, termctl, sizeof(termctl)); -} - -void QLinuxFbGraphicsSystemPrivate::closeTty() -{ - if (ttyfd == -1) - return; - - if (doGraphicsMode) - ioctl(ttyfd, KDSETMODE, oldKdMode); - - // Blankin' screen, blinkin' cursor! - const char termctl[] = "\033[9;15]\033[?33h\033[?25h\033[?0c"; - QT_WRITE(ttyfd, termctl, sizeof(termctl)); - - QT_CLOSE(ttyfd); - ttyfd = -1; -} - -QLinuxFbGraphicsSystem::QLinuxFbGraphicsSystem() -{ - d_ptr = new QLinuxFbGraphicsSystemPrivate(); - - // XXX - QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); - - if (!connect(displaySpec)) - qFatal("QLinuxFbGraphicsSystem: could not initialize screen"); - initDevice(); - - // Create a QImage directly on the screen's framebuffer. - // This is the blit target for copying windows to the screen. - mPrimaryScreen = new QLinuxFbGraphicsSystemScreen(data, w, h, lstep, - screenFormat); - mPrimaryScreen->setPhysicalSize(QSize(physWidth, physHeight)); - - mScreens.append(mPrimaryScreen); -} - -QLinuxFbGraphicsSystem::~QLinuxFbGraphicsSystem() -{ - delete mPrimaryScreen; - delete d_ptr; -} - -bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) -{ - const QStringList args = displaySpec.split(QLatin1Char(':')); - - if (args.contains(QLatin1String("nographicsmodeswitch"))) - d_ptr->doGraphicsMode = false; - -#ifdef QT_QWS_DEPTH_GENERIC - if (args.contains(QLatin1String("genericcolors"))) - d_ptr->doGenericColors = true; -#endif - - QRegExp ttyRegExp(QLatin1String("tty=(.*)")); - if (args.indexOf(ttyRegExp) != -1) - d_ptr->ttyDevice = ttyRegExp.cap(1); - -#if 0 -#if Q_BYTE_ORDER == Q_BIG_ENDIAN -#ifndef QT_QWS_FRAMEBUFFER_LITTLE_ENDIAN - if (args.contains(QLatin1String("littleendian"))) -#endif - QScreen::setFrameBufferLittleEndian(true); -#endif -#endif - - // Check for explicitly specified device - const int len = 8; // "/dev/fbx" - int m = displaySpec.indexOf(QLatin1String("/dev/fb")); - - QString dev; - if (m > 0) - dev = displaySpec.mid(m, len); - else - dev = QLatin1String("/dev/fb0"); - - if (access(dev.toLatin1().constData(), R_OK|W_OK) == 0) - d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDWR); - if (d_ptr->fd == -1) { - if (access(dev.toLatin1().constData(), R_OK) == 0) - d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDONLY); - if (d_ptr->fd == 1) { - qWarning("Error opening framebuffer device %s", qPrintable(dev)); - return false; - } - } - - fb_fix_screeninfo finfo; - fb_var_screeninfo vinfo; - //####################### - // Shut up Valgrind - memset(&vinfo, 0, sizeof(vinfo)); - memset(&finfo, 0, sizeof(finfo)); - //####################### - - /* Get fixed screen information */ - if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { - perror("QLinuxFbGraphicsSystem::connect"); - qWarning("Error reading fixed information"); - return false; - } - - if (finfo.type == FB_TYPE_VGA_PLANES) { - qWarning("VGA16 video mode not supported"); - return false; - } - - /* Get variable screen information */ - if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { - perror("QLinuxFbGraphicsSystem::connect"); - qWarning("Error reading variable information"); - return false; - } - - grayscale = vinfo.grayscale; - d = vinfo.bits_per_pixel; - if (d == 24) { - d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; - if (d <= 0) - d = 24; // reset if color component lengths are not reported - } else if (d == 16) { - d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; - if (d <= 0) - d = 16; - } - lstep = finfo.line_length; - - int xoff = vinfo.xoffset; - int yoff = vinfo.yoffset; - const char* qwssize; - if((qwssize=::getenv("QWS_SIZE")) && sscanf(qwssize,"%dx%d",&w,&h)==2) { - if (d_ptr->fd != -1) { - if ((uint)w > vinfo.xres) w = vinfo.xres; - if ((uint)h > vinfo.yres) h = vinfo.yres; - } - dw=w; - dh=h; - int xxoff, yyoff; - if (sscanf(qwssize, "%*dx%*d+%d+%d", &xxoff, &yyoff) == 2) { - if (xxoff < 0 || xxoff + w > (int)(vinfo.xres)) - xxoff = vinfo.xres - w; - if (yyoff < 0 || yyoff + h > (int)(vinfo.yres)) - yyoff = vinfo.yres - h; - xoff += xxoff; - yoff += yyoff; - } else { - xoff += (vinfo.xres - w)/2; - yoff += (vinfo.yres - h)/2; - } - } else { - dw=w=vinfo.xres; - dh=h=vinfo.yres; - } - - if (w == 0 || h == 0) { - qWarning("QLinuxFbGraphicsSystem::connect(): Unable to find screen geometry, " - "will use 320x240."); - dw = w = 320; - dh = h = 240; - } - - setPixelFormat(vinfo); - - // Handle display physical size spec. - QStringList displayArgs = displaySpec.split(QLatin1Char(':')); - QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)")); - int dimIdxW = displayArgs.indexOf(mmWidthRx); - QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)")); - int dimIdxH = displayArgs.indexOf(mmHeightRx); - if (dimIdxW >= 0) { - mmWidthRx.exactMatch(displayArgs.at(dimIdxW)); - physWidth = mmWidthRx.cap(1).toInt(); - if (dimIdxH < 0) - physHeight = dh*physWidth/dw; - } - if (dimIdxH >= 0) { - mmHeightRx.exactMatch(displayArgs.at(dimIdxH)); - physHeight = mmHeightRx.cap(1).toInt(); - if (dimIdxW < 0) - physWidth = dw*physHeight/dh; - } - if (dimIdxW < 0 && dimIdxH < 0) { - if (vinfo.width != 0 && vinfo.height != 0 - && vinfo.width != UINT_MAX && vinfo.height != UINT_MAX) { - physWidth = vinfo.width; - physHeight = vinfo.height; - } else { - const int dpi = 72; - physWidth = qRound(dw * 25.4 / dpi); - physHeight = qRound(dh * 25.4 / dpi); - } - } - - dataoffset = yoff * lstep + xoff * d / 8; - //qDebug("Using %dx%dx%d screen",w,h,d); - - /* Figure out the size of the screen in bytes */ - size = h * lstep; - - mapsize = finfo.smem_len; - - data = (unsigned char *)-1; - if (d_ptr->fd != -1) - data = (unsigned char *)mmap(0, mapsize, PROT_READ | PROT_WRITE, - MAP_SHARED, d_ptr->fd, 0); - - if ((long)data == -1) { - perror("QLinuxFbGraphicsSystem::connect"); - qWarning("Error: failed to map framebuffer device to memory."); - return false; - } else { - data += dataoffset; - } - -#if 0 - canaccel = useOffscreen(); - if(canaccel) - setupOffScreen(); -#endif - canaccel = false; - - // Now read in palette - if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { - screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; - int loopc; - fb_cmap startcmap; - startcmap.start=0; - startcmap.len=screencols; - startcmap.red=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - startcmap.green=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - startcmap.blue=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - startcmap.transp=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - if (d_ptr->fd == -1 || ioctl(d_ptr->fd, FBIOGETCMAP, &startcmap)) { - perror("QLinuxFbGraphicsSystem::connect"); - qWarning("Error reading palette from framebuffer, using default palette"); - createPalette(startcmap, vinfo, finfo); - } - int bits_used = 0; - for(loopc=0;loopc> 8, - startcmap.green[loopc] >> 8, - startcmap.blue[loopc] >> 8); - bits_used |= startcmap.red[loopc] - | startcmap.green[loopc] - | startcmap.blue[loopc]; - } - // WORKAROUND: Some framebuffer drivers only return 8 bit - // color values, so we need to not bit shift them.. - if ((bits_used & 0x00ff) && !(bits_used & 0xff00)) { - for(loopc=0;loopcopenTty(); - - // Grab current mode so we can reset it - fb_var_screeninfo vinfo; - fb_fix_screeninfo finfo; - //####################### - // Shut up Valgrind - memset(&vinfo, 0, sizeof(vinfo)); - memset(&finfo, 0, sizeof(finfo)); - //####################### - - if (ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { - perror("QLinuxFbScreen::initDevice"); - qFatal("Error reading variable information in card init"); - return false; - } - -#ifdef DEBUG_VINFO - qDebug("Greyscale %d",vinfo.grayscale); - qDebug("Nonstd %d",vinfo.nonstd); - qDebug("Red %d %d %d",vinfo.red.offset,vinfo.red.length, - vinfo.red.msb_right); - qDebug("Green %d %d %d",vinfo.green.offset,vinfo.green.length, - vinfo.green.msb_right); - qDebug("Blue %d %d %d",vinfo.blue.offset,vinfo.blue.length, - vinfo.blue.msb_right); - qDebug("Transparent %d %d %d",vinfo.transp.offset,vinfo.transp.length, - vinfo.transp.msb_right); -#endif - - d_ptr->startupw=vinfo.xres; - d_ptr->startuph=vinfo.yres; - d_ptr->startupd=vinfo.bits_per_pixel; - grayscale = vinfo.grayscale; - - if (ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { - perror("QLinuxFbScreen::initDevice"); - qCritical("Error reading fixed information in card init"); - // It's not an /error/ as such, though definitely a bad sign - // so we return true - return true; - } - -#ifdef __i386__ - // Now init mtrr - if(!::getenv("QWS_NOMTRR")) { - int mfd=QT_OPEN("/proc/mtrr",O_WRONLY,0); - // MTRR entry goes away when file is closed - i.e. - // hopefully when QWS is killed - if(mfd != -1) { - mtrr_sentry sentry; - sentry.base=(unsigned long int)finfo.smem_start; - //qDebug("Physical framebuffer address %p",(void*)finfo.smem_start); - // Size needs to be in 4k chunks, but that's not always - // what we get thanks to graphics card registers. Write combining - // these is Not Good, so we write combine what we can - // (which is not much - 4 megs on an 8 meg card, it seems) - unsigned int size=finfo.smem_len; - size=size >> 22; - size=size << 22; - sentry.size=size; - sentry.type=MTRR_TYPE_WRCOMB; - if(ioctl(mfd,MTRRIOC_ADD_ENTRY,&sentry)==-1) { - //printf("Couldn't add mtrr entry for %lx %lx, %s\n", - //sentry.base,sentry.size,strerror(errno)); - } - } - - // Should we close mfd here? - //QT_CLOSE(mfd); - } -#endif - if ((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4) || (finfo.visual==FB_VISUAL_DIRECTCOLOR)) - { - fb_cmap cmap; - createPalette(cmap, vinfo, finfo); - if (ioctl(d_ptr->fd, FBIOPUTCMAP, &cmap)) { - perror("QLinuxFbScreen::initDevice"); - qWarning("Error writing palette to framebuffer"); - } - free(cmap.red); - free(cmap.green); - free(cmap.blue); - free(cmap.transp); - } - -#if 0 - if (canaccel) { - *entryp=0; - *lowest = mapsize; - insert_entry(*entryp, *lowest, *lowest); // dummy entry to mark start - } - - shared->fifocount = 0; - shared->buffer_offset = 0xffffffff; // 0 would be a sensible offset (screen) - shared->linestep = 0; - shared->cliptop = 0xffffffff; - shared->clipleft = 0xffffffff; - shared->clipright = 0xffffffff; - shared->clipbottom = 0xffffffff; - shared->rop = 0xffffffff; -#endif - -#ifdef QT_QWS_DEPTH_GENERIC - if (pixelFormat() == QImage::Format_Invalid && screencols == 0 - && d_ptr->doGenericColors) - { - qt_set_generic_blit(this, vinfo.bits_per_pixel, - vinfo.red.length, vinfo.green.length, - vinfo.blue.length, vinfo.transp.length, - vinfo.red.offset, vinfo.green.offset, - vinfo.blue.offset, vinfo.transp.offset); - } -#endif - -#if 0 -#ifndef QT_NO_QWS_CURSOR - QScreenCursor::initSoftwareCursor(); -#endif -#endif - blank(false); - - return true; -} - -void QLinuxFbGraphicsSystem::setPixelFormat(struct fb_var_screeninfo info) -{ - const fb_bitfield rgba[4] = { info.red, info.green, - info.blue, info.transp }; - - QImage::Format format = QImage::Format_Invalid; - - switch (d) { - case 32: { - const fb_bitfield argb8888[4] = {{16, 8, 0}, {8, 8, 0}, - {0, 8, 0}, {24, 8, 0}}; - const fb_bitfield abgr8888[4] = {{0, 8, 0}, {8, 8, 0}, - {16, 8, 0}, {24, 8, 0}}; - if (memcmp(rgba, argb8888, 4 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_ARGB32; - } else if (memcmp(rgba, argb8888, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB32; - } else if (memcmp(rgba, abgr8888, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB32; - pixeltype = BGRPixel; - } - break; - } - case 24: { - const fb_bitfield rgb888[4] = {{16, 8, 0}, {8, 8, 0}, - {0, 8, 0}, {0, 0, 0}}; - const fb_bitfield bgr888[4] = {{0, 8, 0}, {8, 8, 0}, - {16, 8, 0}, {0, 0, 0}}; - if (memcmp(rgba, rgb888, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB888; - } else if (memcmp(rgba, bgr888, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB888; - pixeltype = BGRPixel; - } - break; - } - case 18: { - const fb_bitfield rgb666[4] = {{12, 6, 0}, {6, 6, 0}, - {0, 6, 0}, {0, 0, 0}}; - if (memcmp(rgba, rgb666, 3 * sizeof(fb_bitfield)) == 0) - format = QImage::Format_RGB666; - break; - } - case 16: { - const fb_bitfield rgb565[4] = {{11, 5, 0}, {5, 6, 0}, - {0, 5, 0}, {0, 0, 0}}; - const fb_bitfield bgr565[4] = {{0, 5, 0}, {5, 6, 0}, - {11, 5, 0}, {0, 0, 0}}; - if (memcmp(rgba, rgb565, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB16; - } else if (memcmp(rgba, bgr565, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB16; - pixeltype = BGRPixel; - } - break; - } - case 15: { - const fb_bitfield rgb1555[4] = {{10, 5, 0}, {5, 5, 0}, - {0, 5, 0}, {15, 1, 0}}; - const fb_bitfield bgr1555[4] = {{0, 5, 0}, {5, 5, 0}, - {10, 5, 0}, {15, 1, 0}}; - if (memcmp(rgba, rgb1555, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB555; - } else if (memcmp(rgba, bgr1555, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB555; - pixeltype = BGRPixel; - } - break; - } - case 12: { - const fb_bitfield rgb444[4] = {{8, 4, 0}, {4, 4, 0}, - {0, 4, 0}, {0, 0, 0}}; - if (memcmp(rgba, rgb444, 3 * sizeof(fb_bitfield)) == 0) - format = QImage::Format_RGB444; - break; - } - case 8: - break; - case 1: - format = QImage::Format_Mono; //###: LSB??? - break; - default: - break; - } - - screenFormat = format; -} - -void QLinuxFbGraphicsSystem::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) -{ - if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { - screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; - cmap.start=0; - cmap.len=screencols; - cmap.red=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - cmap.green=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - cmap.blue=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - cmap.transp=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - - if (screencols==16) { - if (finfo.type == FB_TYPE_PACKED_PIXELS) { - // We'll setup a grayscale cmap for 4bpp linear - int val = 0; - for (int idx = 0; idx < 16; ++idx, val += 17) { - cmap.red[idx] = (val<<8)|val; - cmap.green[idx] = (val<<8)|val; - cmap.blue[idx] = (val<<8)|val; - screenclut[idx]=qRgb(val, val, val); - } - } else { - // Default 16 colour palette - // Green is now trolltech green so certain images look nicer - // black d_gray l_gray white red green blue cyan magenta yellow - unsigned char reds[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0xFF, 0xA2, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x82 }; - unsigned char greens[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0xC5, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F }; - unsigned char blues[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0x11, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00 }; - - for (int idx = 0; idx < 16; ++idx) { - cmap.red[idx] = ((reds[idx]) << 8)|reds[idx]; - cmap.green[idx] = ((greens[idx]) << 8)|greens[idx]; - cmap.blue[idx] = ((blues[idx]) << 8)|blues[idx]; - cmap.transp[idx] = 0; - screenclut[idx]=qRgb(reds[idx], greens[idx], blues[idx]); - } - } - } else { - if (grayscale) { - // Build grayscale palette - int i; - for(i=0;iblank == on) - return; - -#if defined(QT_QWS_IPAQ) - if (on) - system("apm -suspend"); -#else - if (d_ptr->fd == -1) - return; -// Some old kernel versions don't have this. These defines should go -// away eventually -#if defined(FBIOBLANK) -#if defined(VESA_POWERDOWN) && defined(VESA_NO_BLANKING) - ioctl(d_ptr->fd, FBIOBLANK, on ? VESA_POWERDOWN : VESA_NO_BLANKING); -#else - ioctl(d_ptr->fd, FBIOBLANK, on ? 1 : 0); -#endif -#endif -#endif - - d_ptr->blank = on; -} - -QPixmapData *QLinuxFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. - QGraphicsSystemFbWindowSurface * surface = - new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); - mPrimaryScreen->addWindowSurface(surface); - return surface; -} - -QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, - int h, int lstep, QImage::Format screenFormat) : compositePainter(0) -{ - data = d; - mGeometry = QRect(0,0,w,h); - bytesPerLine = lstep; - mFormat = screenFormat; - mDepth = 16; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - cursor = new QGraphicsSystemSoftwareCursor(this); -} - -void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) -{ - mGeometry = rect; - delete mFbScreenImage; - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - delete compositePainter; - compositePainter = 0; - - delete mScreenImage; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); -} - -void QLinuxFbGraphicsSystemScreen::setFormat(QImage::Format format) -{ - mFormat = format; - delete mFbScreenImage; - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - delete compositePainter; - compositePainter = 0; - - delete mScreenImage; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); -} - -QRegion QLinuxFbGraphicsSystemScreen::doRedraw() -{ - QRegion touched; - touched = QGraphicsSystemFbScreen::doRedraw(); - - if (!compositePainter) { - compositePainter = new QPainter(mFbScreenImage); - } - - QVector rects = touched.rects(); - for (int i = 0; i < rects.size(); i++) - compositePainter->drawImage(rects[i], *mScreenImage, rects[i]); - return touched; -} -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h deleted file mode 100644 index cc8ce7e..0000000 --- a/src/plugins/graphicssystems/linuxfb/qgraphicssystem_linuxfb.h +++ /dev/null @@ -1,128 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_LINUXFB_H -#define QGRAPHICSSYSTEM_LINUXFB_H - -#include -#include "../fb_base/fb_base.h" - -QT_BEGIN_NAMESPACE - -class QLinuxFbGraphicsSystemScreen : public QGraphicsSystemFbScreen -{ -public: - QLinuxFbGraphicsSystemScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); - void setGeometry(QRect rect); - void setFormat(QImage::Format format); - -public slots: - QRegion doRedraw(); - -private: - QImage * mFbScreenImage; - uchar * data; - int bytesPerLine; - - QPainter *compositePainter; -}; - -class QLinuxFbGraphicsSystemPrivate; -struct fb_cmap; -struct fb_var_screeninfo; -struct fb_fix_screeninfo; - -class QLinuxFbGraphicsSystem : public QGraphicsSystem -{ -public: - QLinuxFbGraphicsSystem(); - ~QLinuxFbGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QList screens() const { return mScreens; } - -private: - QLinuxFbGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; - QLinuxFbGraphicsSystemPrivate *d_ptr; - - enum PixelType { NormalPixel, BGRPixel }; - - QRgb screenclut[256]; - int screencols; - - uchar * data; - - QImage::Format screenFormat; - int w; - int lstep; - int h; - int d; - PixelType pixeltype; - bool grayscale; - - int dw; - int dh; - - int size; // Screen size - int mapsize; // Total mapped memory - - int displayId; - - int physWidth; - int physHeight; - - bool canaccel; - int dataoffset; - int cacheStart; - - bool connect(const QString &displaySpec); - bool initDevice(); - void setPixelFormat(struct fb_var_screeninfo); - void createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo); - void blank(bool on); -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/minimal/main.cpp b/src/plugins/graphicssystems/minimal/main.cpp deleted file mode 100644 index 2e9d80e..0000000 --- a/src/plugins/graphicssystems/minimal/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_minimal.h" - -QT_BEGIN_NAMESPACE - -class QMinimalGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QMinimalGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "Minimal"; - return list; -} - -QGraphicsSystem* QMinimalGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "minimal") - return new QMinimalGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(minimal, QMinimalGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimal/minimal.pro b/src/plugins/graphicssystems/minimal/minimal.pro deleted file mode 100644 index 11604dd..0000000 --- a/src/plugins/graphicssystems/minimal/minimal.pro +++ /dev/null @@ -1,10 +0,0 @@ -TARGET = qminimalgraphicssystem -include(../../qpluginbase.pri) - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -SOURCES = main.cpp qgraphicssystem_minimal.cpp qwindowsurface_minimal.cpp -HEADERS = qgraphicssystem_minimal.h qwindowsurface_minimal.h - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp deleted file mode 100644 index 78aff06..0000000 --- a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.cpp +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_minimal.h" -#include "qwindowsurface_minimal.h" -#include - -QT_BEGIN_NAMESPACE - -QMinimalGraphicsSystem::QMinimalGraphicsSystem() -{ - mPrimaryScreen = new QMinimalGraphicsSystemScreen(); - - mPrimaryScreen->mGeometry = QRect(0, 0, 240, 320); - mPrimaryScreen->mDepth = 16; - mPrimaryScreen->mFormat = QImage::Format_RGB16; - mPrimaryScreen->mPhysicalSize = QSize(40, 54); - - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QMinimalGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QMinimalGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - return new QMinimalWindowSurface(mPrimaryScreen, widget); -} - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h b/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h deleted file mode 100644 index 5bf230f..0000000 --- a/src/plugins/graphicssystems/minimal/qgraphicssystem_minimal.h +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_MINIMAL_H -#define QGRAPHICSSYSTEM_MINIMAL_H - -#include - -QT_BEGIN_NAMESPACE - -class QMinimalGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QMinimalGraphicsSystemScreen() - : mDepth(16), mFormat(QImage::Format_RGB16) {} - ~QMinimalGraphicsSystemScreen() {} - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - -public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; -}; - -class QMinimalGraphicsSystem : public QGraphicsSystem -{ -public: - QMinimalGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QList screens() const { return mScreens; } - -private: - QMinimalGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp deleted file mode 100644 index a87e690..0000000 --- a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.cpp +++ /dev/null @@ -1,101 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_minimal.h" -#include "qgraphicssystem_minimal.h" -#include - -QT_BEGIN_NAMESPACE - -QMinimalWindowSurface::QMinimalWindowSurface - (QMinimalGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), - mScreen(screen) -{ - //qDebug() << "QMinimalWindowSurface::QMinimalWindowSurface:" << (long)this; -} - -QMinimalWindowSurface::~QMinimalWindowSurface() -{ -} - -QPaintDevice *QMinimalWindowSurface::paintDevice() -{ - //qDebug() << "QMinimalWindowSurface::paintDevice"; - return &mImage; -} - -void QMinimalWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); - - static int c = 0; - QString filename = QString("output%1.png").arg(c++, 4, 10, QLatin1Char('0')); - qDebug() << "QMinimalWindowSurface::flush() saving contents to" << filename.toLocal8Bit().constData(); - mImage.save(filename); -} - -void QMinimalWindowSurface::setGeometry(const QRect &rect) -{ - //qDebug() << "QMinimalWindowSurface::setGeometry:" << (long)this << rect; - QWindowSurface::setGeometry(rect); - if (mImage.size() != rect.size()) - mImage = QImage(rect.size(), mScreen->format()); -} - -bool QMinimalWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} - -void QMinimalWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QMinimalWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h b/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h deleted file mode 100644 index c7593e7..0000000 --- a/src/plugins/graphicssystems/minimal/qwindowsurface_minimal.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_MINIMAL_H -#define QWINDOWSURFACE_MINIMAL_H - -#include - -QT_BEGIN_NAMESPACE - -class QMinimalGraphicsSystemScreen; - -class QMinimalWindowSurface : public QWindowSurface -{ -public: - QMinimalWindowSurface - (QMinimalGraphicsSystemScreen *screen, QWidget *window); - ~QMinimalWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - QMinimalGraphicsSystemScreen *mScreen; - QImage mImage; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/minimaldfb/main.cpp b/src/plugins/graphicssystems/minimaldfb/main.cpp deleted file mode 100644 index fe9407c..0000000 --- a/src/plugins/graphicssystems/minimaldfb/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_minimaldfb.h" - -QT_BEGIN_NAMESPACE - -class QDirectFbGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QDirectFbGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "MinimalDfb"; - return list; -} - -QGraphicsSystem* QDirectFbGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "minimaldfb") - return new QDirectFbGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(directfb, QDirectFbGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro b/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro deleted file mode 100644 index b6c2ea8..0000000 --- a/src/plugins/graphicssystems/minimaldfb/minimaldfb.pro +++ /dev/null @@ -1,29 +0,0 @@ -TARGET = qminimaldfb -include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -isEmpty(DIRECTFB_LIBS) { - DIRECTFB_LIBS = -ldirectfb -lfusion -ldirect -lpthread -} -isEmpty(DIRECTFB_INCLUDEPATH) { - DIRECTFB_INCLUDEPATH = /usr/include/directfb -} - -INCLUDEPATH += $$DIRECTFB_INCLUDEPATH -LIBS += $$DIRECTFB_LIBS - -SOURCES = main.cpp \ - qgraphicssystem_minimaldfb.cpp \ - qwindowsurface_minimaldfb.cpp \ - qblitter_directfb.cpp \ - qdirectfbconvenience.cpp \ - qdirectfbinput.cpp \ - qdirectfbcursor.cpp -HEADERS = qgraphicssystem_minimaldfb.h \ - qwindowsurface_minimaldfb.h \ - qblitter_directfb.h \ - qdirectfbconvenience.h \ - qdirectfbinput.h \ - qdirectfbcursor.h -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp deleted file mode 100644 index ded57d3..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include "qblitter_directfb.h" -#include "qgraphicssystem_minimaldfb.h" -#include "qdirectfbconvenience.h" - -#include - -#include - -#include - -QDirectFbBlitter::QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface) - : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability - |QBlittable::SourcePixmapCapability - |QBlittable::SourceOverPixmapCapability - |QBlittable::SourceOverScaledPixmapCapability)) -{ - if (surface) { - m_surface = surface; - } else { - DFBSurfaceDescription surfaceDesc; - memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); - surfaceDesc.width = rect.width(); - surfaceDesc.height = rect.height(); - surfaceDesc.caps = DSCAPS_PREMULTIPLIED; - surfaceDesc.pixelformat = DSPF_ARGB; - surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); - - IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); - dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); - m_surface->Clear(m_surface,0,0,0,0); - } -} - -QDirectFbBlitter::~QDirectFbBlitter() -{ - unlock(); - m_surface->Release(m_surface); -} - -void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) -{ - m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); -// When the blitter api supports non opaque blits, also remember to change -// qpixmap_blitter.cpp::fill -// DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX; -// m_surface->SetDrawingFlags(m_surface, drawingFlags); - m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); - m_surface->FillRectangle(m_surface, rect.x(), rect.y(), - rect.width(), rect.height()); -} - -void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect) -{ - QPixmapData *data = pixmap.pixmapData(); - Q_ASSERT(data->width() && data->height()); - Q_ASSERT(data->classId() == QPixmapData::BlitterClass); - QBlittablePixmapData *blitPm = static_cast(data); - QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); - dfbBlitter->unlock(); - - IDirectFBSurface *s = dfbBlitter->m_surface; - - quint32 blittingFlags = pixmap.hasAlpha()? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; - - s->SetBlittingFlags(s, DFBSurfaceBlittingFlags(blittingFlags)); - m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); - m_surface->SetPorterDuff(m_surface,DSPD_SRC_OVER); - m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); - - const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; - - DFBResult result; - if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) - result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y()); - else { - const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; - result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect); - } - if (result != DFB_OK) - DirectFBError("QDirectFBBlitter::drawPixmap()", result); -} - -QImage *QDirectFbBlitter::doLock() -{ - Q_ASSERT(m_surface); - Q_ASSERT(rect().isValid()); - - void *mem; - int bpl; - const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); - if (result == DFB_OK) { - DFBSurfacePixelFormat dfbFormat; - DFBSurfaceCapabilities dfbCaps; - m_surface->GetPixelFormat(m_surface,&dfbFormat); - m_surface->GetCapabilities(m_surface,&dfbCaps); - QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); - int w, h; - m_surface->GetSize(m_surface,&w,&h); - m_image = QImage(static_cast(mem),w,h,bpl,format); - } else { - DirectFBError("Failed to lock image", result); - } - - return &m_image; -} - -void QDirectFbBlitter::doUnlock() -{ - m_surface->Unlock(m_surface); -} diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h deleted file mode 100644 index 8d24678..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef QDIRECTFBBLITTER_H -#define QDIRECTFBBLITTER_H - -#include "qdirectfbconvenience.h" - -#include - -#include - -class QDirectFbBlitter : public QBlittable -{ -public: - QDirectFbBlitter(const QRect &rect, IDirectFBSurface *surface = 0); - virtual ~QDirectFbBlitter(); - - virtual void fillRect(const QRectF &rect, const QColor &color); - virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); - -protected: - virtual QImage *doLock(); - virtual void doUnlock(); - - IDirectFBSurface *m_surface; - QImage m_image; - - friend class QDirectFbConvenience; -}; - -#endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp deleted file mode 100644 index 8594c09..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ /dev/null @@ -1,335 +0,0 @@ -#include "qdirectfbconvenience.h" -#include "qblitter_directfb.h" - -#include - -IDirectFB *QDirectFbConvenience::dfbInterface() -{ - static IDirectFB *dfb = 0; - if (!dfb) { - DFBResult result = DirectFBCreate(&dfb); - if (result != DFB_OK) { - DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result); - return 0; - } - } - return dfb; -} - -IDirectFBDisplayLayer *QDirectFbConvenience::dfbDisplayLayer(int display) -{ - IDirectFBDisplayLayer *layer; - DFBResult result = QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),display,&layer); - if (result != DFB_OK) { - DirectFBError("QDirectFbConvenience: " - "Unable to get primary display layer!", result); - } - return layer; -} - -QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps) -{ - switch (format) { - case DSPF_LUT8: - return QImage::Format_Indexed8; - case DSPF_RGB24: - return QImage::Format_RGB888; - case DSPF_ARGB4444: - return QImage::Format_ARGB4444_Premultiplied; - case DSPF_RGB444: - return QImage::Format_RGB444; - case DSPF_RGB555: - case DSPF_ARGB1555: - return QImage::Format_RGB555; - case DSPF_RGB16: - return QImage::Format_RGB16; - case DSPF_ARGB6666: - return QImage::Format_ARGB6666_Premultiplied; - case DSPF_RGB18: - return QImage::Format_RGB666; - case DSPF_RGB32: - return QImage::Format_RGB32; - case DSPF_ARGB: { - if (caps & DSCAPS_PREMULTIPLIED) - return QImage::Format_ARGB32_Premultiplied; - else return QImage::Format_ARGB32; } - default: - break; - } - return QImage::Format_Invalid; - -} - -int QDirectFbConvenience::colorDepthForSurface(const DFBSurfacePixelFormat format) -{ - return ((0x1f << 7) & format) >> 7; -} - -IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPixmapData(QPixmapData *pixmapData) -{ - QBlittablePixmapData *blittablePmData = static_cast(pixmapData); - if (blittablePmData) { - QBlittable *blittable = blittablePmData->blittable(); - QDirectFbBlitter *dfbBlitter = static_cast(blittable); - return dfbBlitter->m_surface; - } - return 0; -} - -Qt::MouseButton QDirectFbConvenience::mouseButton(DFBInputDeviceButtonIdentifier identifier) -{ - switch (identifier){ - case DIBI_LEFT: - return Qt::LeftButton; - case DIBI_MIDDLE: - return Qt::MidButton; - case DIBI_RIGHT: - return Qt::RightButton; - default: - return Qt::NoButton; - } -} - -Qt::MouseButtons QDirectFbConvenience::mouseButtons(DFBInputDeviceButtonMask mask) -{ - Qt::MouseButtons buttons = Qt::NoButton; - - if (mask & DIBM_LEFT) { - buttons |= Qt::LeftButton; - } - if (mask & DIBM_MIDDLE) { - buttons |= Qt::MidButton; - } - if (mask & DIBM_RIGHT) { - buttons |= Qt::RightButton; - } - return buttons; -} - -Qt::KeyboardModifiers QDirectFbConvenience::keyboardModifiers(DFBInputDeviceModifierMask mask) -{ - Qt::KeyboardModifiers modifiers = Qt::NoModifier; - - if (mask & DIMM_SHIFT) { - modifiers |= Qt::ShiftModifier; - } - if (mask & DIMM_ALT) { - modifiers |= Qt::AltModifier; - } - if (mask & DIMM_ALTGR) { - modifiers |= Qt::MetaModifier; - } - if (mask & DIMM_CONTROL) { - modifiers |= Qt::ControlModifier; - } - if (mask & DIMM_META) { - modifiers | Qt::MetaModifier; - } - return modifiers; -} - -QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type) -{ - switch(type) { - case DWET_BUTTONDOWN: - return QEvent::MouseButtonPress; - case DWET_BUTTONUP: - return QEvent::MouseButtonRelease; - case DWET_MOTION: - return QEvent::MouseMove; - case DWET_WHEEL: - return QEvent::Wheel; - case DWET_KEYDOWN: - return QEvent::KeyPress; - case DWET_KEYUP: - return QEvent::KeyRelease; - default: - return QEvent::None; - } -} -QDirectFbKeyMap *QDirectFbConvenience::dfbKeymap = 0; -QDirectFbKeyMap *QDirectFbConvenience::keyMap() -{ - if (!dfbKeymap) - dfbKeymap = new QDirectFbKeyMap(); - return dfbKeymap; -} - -QDirectFbKeyMap::QDirectFbKeyMap() -{ - insert(DIKS_BACKSPACE , Qt::Key_Backspace); - insert(DIKS_TAB , Qt::Key_Tab); - insert(DIKS_RETURN , Qt::Key_Return); - insert(DIKS_ESCAPE , Qt::Key_Escape); - insert(DIKS_DELETE , Qt::Key_Delete); - - insert(DIKS_CURSOR_LEFT , Qt::Key_Left); - insert(DIKS_CURSOR_RIGHT , Qt::Key_Right); - insert(DIKS_CURSOR_UP , Qt::Key_Up); - insert(DIKS_CURSOR_DOWN , Qt::Key_Down); - insert(DIKS_INSERT , Qt::Key_Insert); - insert(DIKS_HOME , Qt::Key_Home); - insert(DIKS_END , Qt::Key_End); - insert(DIKS_PAGE_UP , Qt::Key_PageUp); - insert(DIKS_PAGE_DOWN , Qt::Key_PageDown); - insert(DIKS_PRINT , Qt::Key_Print); - insert(DIKS_PAUSE , Qt::Key_Pause); - insert(DIKS_SELECT , Qt::Key_Select); - insert(DIKS_GOTO , Qt::Key_OpenUrl); - insert(DIKS_CLEAR , Qt::Key_Clear); - insert(DIKS_MENU , Qt::Key_Menu); - insert(DIKS_HELP , Qt::Key_Help); - - insert(DIKS_INTERNET , Qt::Key_HomePage); - insert(DIKS_MAIL , Qt::Key_LaunchMail); - insert(DIKS_FAVORITES , Qt::Key_Favorites); - - insert(DIKS_BACK , Qt::Key_Back); - insert(DIKS_FORWARD , Qt::Key_Forward); - insert(DIKS_VOLUME_UP , Qt::Key_VolumeUp); - insert(DIKS_VOLUME_DOWN , Qt::Key_VolumeDown); - insert(DIKS_MUTE , Qt::Key_VolumeMute); - insert(DIKS_PLAYPAUSE , Qt::Key_Pause); - insert(DIKS_PLAY , Qt::Key_MediaPlay); - insert(DIKS_STOP , Qt::Key_MediaStop); - insert(DIKS_RECORD , Qt::Key_MediaRecord); - insert(DIKS_PREVIOUS , Qt::Key_MediaPrevious); - insert(DIKS_NEXT , Qt::Key_MediaNext); - - insert(DIKS_F1 , Qt::Key_F1); - insert(DIKS_F2 , Qt::Key_F2); - insert(DIKS_F3 , Qt::Key_F3); - insert(DIKS_F4 , Qt::Key_F4); - insert(DIKS_F5 , Qt::Key_F5); - insert(DIKS_F6 , Qt::Key_F6); - insert(DIKS_F7 , Qt::Key_F7); - insert(DIKS_F8 , Qt::Key_F8); - insert(DIKS_F9 , Qt::Key_F9); - insert(DIKS_F10 , Qt::Key_F10); - insert(DIKS_F11 , Qt::Key_F11); - insert(DIKS_F12 , Qt::Key_F12); - - insert(DIKS_SHIFT , Qt::Key_Shift); - insert(DIKS_CONTROL , Qt::Key_Control); - insert(DIKS_ALT , Qt::Key_Alt); - insert(DIKS_ALTGR , Qt::Key_AltGr); - - insert(DIKS_META , Qt::Key_Meta); - insert(DIKS_SUPER , Qt::Key_Super_L); // ??? - insert(DIKS_HYPER , Qt::Key_Hyper_L); // ??? - - insert(DIKS_CAPS_LOCK , Qt::Key_CapsLock); - insert(DIKS_NUM_LOCK , Qt::Key_NumLock); - insert(DIKS_SCROLL_LOCK , Qt::Key_ScrollLock); - - insert(DIKS_DEAD_ABOVEDOT , Qt::Key_Dead_Abovedot); - insert(DIKS_DEAD_ABOVERING , Qt::Key_Dead_Abovering); - insert(DIKS_DEAD_ACUTE , Qt::Key_Dead_Acute); - insert(DIKS_DEAD_BREVE , Qt::Key_Dead_Breve); - insert(DIKS_DEAD_CARON , Qt::Key_Dead_Caron); - insert(DIKS_DEAD_CEDILLA , Qt::Key_Dead_Cedilla); - insert(DIKS_DEAD_CIRCUMFLEX , Qt::Key_Dead_Circumflex); - insert(DIKS_DEAD_DIAERESIS , Qt::Key_Dead_Diaeresis); - insert(DIKS_DEAD_DOUBLEACUTE , Qt::Key_Dead_Doubleacute); - insert(DIKS_DEAD_GRAVE , Qt::Key_Dead_Grave); - insert(DIKS_DEAD_IOTA , Qt::Key_Dead_Iota); - insert(DIKS_DEAD_MACRON , Qt::Key_Dead_Macron); - insert(DIKS_DEAD_OGONEK , Qt::Key_Dead_Ogonek); - insert(DIKS_DEAD_SEMIVOICED_SOUND , Qt::Key_Dead_Semivoiced_Sound); - insert(DIKS_DEAD_TILDE , Qt::Key_Dead_Tilde); - insert(DIKS_DEAD_VOICED_SOUND , Qt::Key_Dead_Voiced_Sound); - insert(DIKS_SPACE , Qt::Key_Space); - insert(DIKS_EXCLAMATION_MARK , Qt::Key_Exclam); - insert(DIKS_QUOTATION , Qt::Key_QuoteDbl); - insert(DIKS_NUMBER_SIGN , Qt::Key_NumberSign); - insert(DIKS_DOLLAR_SIGN , Qt::Key_Dollar); - insert(DIKS_PERCENT_SIGN , Qt::Key_Percent); - insert(DIKS_AMPERSAND , Qt::Key_Ampersand); - insert(DIKS_APOSTROPHE , Qt::Key_Apostrophe); - insert(DIKS_PARENTHESIS_LEFT , Qt::Key_ParenLeft); - insert(DIKS_PARENTHESIS_RIGHT , Qt::Key_ParenRight); - insert(DIKS_ASTERISK , Qt::Key_Asterisk); - insert(DIKS_PLUS_SIGN , Qt::Key_Plus); - insert(DIKS_COMMA , Qt::Key_Comma); - insert(DIKS_MINUS_SIGN , Qt::Key_Minus); - insert(DIKS_PERIOD , Qt::Key_Period); - insert(DIKS_SLASH , Qt::Key_Slash); - insert(DIKS_0 , Qt::Key_0); - insert(DIKS_1 , Qt::Key_1); - insert(DIKS_2 , Qt::Key_2); - insert(DIKS_3 , Qt::Key_3); - insert(DIKS_4 , Qt::Key_4); - insert(DIKS_5 , Qt::Key_5); - insert(DIKS_6 , Qt::Key_6); - insert(DIKS_7 , Qt::Key_7); - insert(DIKS_8 , Qt::Key_8); - insert(DIKS_9 , Qt::Key_9); - insert(DIKS_COLON , Qt::Key_Colon); - insert(DIKS_SEMICOLON , Qt::Key_Semicolon); - insert(DIKS_LESS_THAN_SIGN , Qt::Key_Less); - insert(DIKS_EQUALS_SIGN , Qt::Key_Equal); - insert(DIKS_GREATER_THAN_SIGN , Qt::Key_Greater); - insert(DIKS_QUESTION_MARK , Qt::Key_Question); - insert(DIKS_AT , Qt::Key_At); - insert(DIKS_CAPITAL_A , Qt::Key_A); - insert(DIKS_CAPITAL_B , Qt::Key_B); - insert(DIKS_CAPITAL_C , Qt::Key_C); - insert(DIKS_CAPITAL_D , Qt::Key_D); - insert(DIKS_CAPITAL_E , Qt::Key_E); - insert(DIKS_CAPITAL_F , Qt::Key_F); - insert(DIKS_CAPITAL_G , Qt::Key_G); - insert(DIKS_CAPITAL_H , Qt::Key_H); - insert(DIKS_CAPITAL_I , Qt::Key_I); - insert(DIKS_CAPITAL_J , Qt::Key_J); - insert(DIKS_CAPITAL_K , Qt::Key_K); - insert(DIKS_CAPITAL_L , Qt::Key_L); - insert(DIKS_CAPITAL_M , Qt::Key_M); - insert(DIKS_CAPITAL_N , Qt::Key_N); - insert(DIKS_CAPITAL_O , Qt::Key_O); - insert(DIKS_CAPITAL_P , Qt::Key_P); - insert(DIKS_CAPITAL_Q , Qt::Key_Q); - insert(DIKS_CAPITAL_R , Qt::Key_R); - insert(DIKS_CAPITAL_S , Qt::Key_S); - insert(DIKS_CAPITAL_T , Qt::Key_T); - insert(DIKS_CAPITAL_U , Qt::Key_U); - insert(DIKS_CAPITAL_V , Qt::Key_V); - insert(DIKS_CAPITAL_W , Qt::Key_W); - insert(DIKS_CAPITAL_X , Qt::Key_X); - insert(DIKS_CAPITAL_Y , Qt::Key_Y); - insert(DIKS_CAPITAL_Z , Qt::Key_Z); - insert(DIKS_SQUARE_BRACKET_LEFT , Qt::Key_BracketLeft); - insert(DIKS_BACKSLASH , Qt::Key_Backslash); - insert(DIKS_SQUARE_BRACKET_RIGHT , Qt::Key_BracketRight); - insert(DIKS_CIRCUMFLEX_ACCENT , Qt::Key_AsciiCircum); - insert(DIKS_UNDERSCORE , Qt::Key_Underscore); - insert(DIKS_SMALL_A , Qt::Key_A); - insert(DIKS_SMALL_B , Qt::Key_B); - insert(DIKS_SMALL_C , Qt::Key_C); - insert(DIKS_SMALL_D , Qt::Key_D); - insert(DIKS_SMALL_E , Qt::Key_E); - insert(DIKS_SMALL_F , Qt::Key_F); - insert(DIKS_SMALL_G , Qt::Key_G); - insert(DIKS_SMALL_H , Qt::Key_H); - insert(DIKS_SMALL_I , Qt::Key_I); - insert(DIKS_SMALL_J , Qt::Key_J); - insert(DIKS_SMALL_K , Qt::Key_K); - insert(DIKS_SMALL_L , Qt::Key_L); - insert(DIKS_SMALL_M , Qt::Key_M); - insert(DIKS_SMALL_N , Qt::Key_N); - insert(DIKS_SMALL_O , Qt::Key_O); - insert(DIKS_SMALL_P , Qt::Key_P); - insert(DIKS_SMALL_Q , Qt::Key_Q); - insert(DIKS_SMALL_R , Qt::Key_R); - insert(DIKS_SMALL_S , Qt::Key_S); - insert(DIKS_SMALL_T , Qt::Key_T); - insert(DIKS_SMALL_U , Qt::Key_U); - insert(DIKS_SMALL_V , Qt::Key_V); - insert(DIKS_SMALL_W , Qt::Key_W); - insert(DIKS_SMALL_X , Qt::Key_X); - insert(DIKS_SMALL_Y , Qt::Key_Y); - insert(DIKS_SMALL_Z , Qt::Key_Z); - insert(DIKS_CURLY_BRACKET_LEFT , Qt::Key_BraceLeft); - insert(DIKS_VERTICAL_BAR , Qt::Key_Bar); - insert(DIKS_CURLY_BRACKET_RIGHT , Qt::Key_BraceRight); - insert(DIKS_TILDE , Qt::Key_AsciiTilde); -} diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h deleted file mode 100644 index 0b1a24f..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef QDIRECTFBCONVENIENCE_H -#define QDIRECTFBCONVENIENCE_H - -#include -#include -#include -#include - -#include - -class QDirectFbKeyMap: public QHash -{ -public: - QDirectFbKeyMap(); -}; - - -class QDirectFbConvenience -{ -public: - static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps); - static bool pixelFomatHasAlpha(const DFBSurfacePixelFormat format) { return (1 << 16) & format; } - static int colorDepthForSurface(const DFBSurfacePixelFormat format); - - //This is set by the graphicssystem constructor - static IDirectFB *dfbInterface(); - static IDirectFBDisplayLayer *dfbDisplayLayer(int display = DLID_PRIMARY); - - static IDirectFBSurface *dfbSurfaceForPixmapData(QPixmapData *); - - static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier); - static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask); - static Qt::KeyboardModifiers keyboardModifiers(DFBInputDeviceModifierMask mask); - static QEvent::Type eventType(DFBWindowEventType type); - - static QDirectFbKeyMap *keyMap(); - -private: - static QDirectFbKeyMap *dfbKeymap; - friend class QDirectFbGraphicsSystem; -}; - -#endif // QDIRECTFBCONVENIENCE_H diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp deleted file mode 100644 index 229a875..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include "qdirectfbcursor.h" -#include "qblitter_directfb.h" -#include "qgraphicssystem_minimaldfb.h" -#include "qdirectfbconvenience.h" - -#include - -QDirectFBCursor::QDirectFBCursor(QGraphicsSystemScreen * screen) : - QGraphicsSystemCursor(screen), surface(0) -{ - QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer); - image = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); -} - -void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) -{ - Q_UNUSED(widget); - int xSpot; - int ySpot; - QPixmap map; - - if (cursor->shape() != Qt::BitmapCursor) { - image->set(cursor->shape()); - xSpot = image->hotspot().x(); - ySpot = image->hotspot().y(); - QImage *i = image->image(); - map = QPixmap::fromImage(*i); - } else { - QPoint point = cursor->hotSpot(); - xSpot = point.x(); - ySpot = point.y(); - map = cursor->pixmap(); - } - - IDirectFBSurface *surface = QDirectFbConvenience::dfbSurfaceForPixmapData(map.pixmapData()); - - if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) { - return; - } - m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot); - m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED); -} diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.h deleted file mode 100644 index 064a336..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbcursor.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef QDIRECTFBCURSOR_H -#define QDIRECTFBCURSOR_H - -#include -#include -class QDirectFbGraphicsSystemScreen; -class QDirectFbBlitter; - -class QDirectFBCursor : public QGraphicsSystemCursor -{ -public: - QDirectFBCursor(QGraphicsSystemScreen *screem); - void changeCursor(QCursor * cursor, QWidget * widget); - -private: - IDirectFBDisplayLayer * m_layer; - IDirectFBSurface * surface; - QGraphicsSystemCursorImage * image; - QDirectFbBlitter *blitter; -}; - -#endif // QDIRECTFBCURSOR_H diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp deleted file mode 100644 index 74a38a4..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ /dev/null @@ -1,205 +0,0 @@ -#include "qdirectfbinput.h" -#include "qdirectfbconvenience.h" - -#include -#include -#include -#include -#include -#include - -#include - -InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) - : QThread(parent), m_eventBuffer(eventBuffer),m_shouldStop(false) -{ - this->start(); -} - -InputSocketWaiter::~InputSocketWaiter() -{ - m_shouldStop = true; - m_eventBuffer->WakeUp(m_eventBuffer); - m_cleanupMutex.lock(); -} - -void InputSocketWaiter::continueWaitingForEvents() -{ - m_finishedProcessingEvents.wakeAll(); -} - -void InputSocketWaiter::run() -{ - m_cleanupMutex.lock(); - while (1) { - m_eventBuffer->WaitForEvent(m_eventBuffer); - if (m_shouldStop) - break; - emit newEvent(); - QMutex waitForProcessingMutex; - waitForProcessingMutex.lock(); - m_finishedProcessingEvents.wait(&waitForProcessingMutex); - } - m_cleanupMutex.unlock(); -} - -QDirectFbInput *QDirectFbInput::instance() -{ - static QDirectFbInput *input = 0; - if (!input) { - input = new QDirectFbInput(); - } - return input; -} - -QDirectFbInput::QDirectFbInput() - : QObject() -{ - dfbInterface = QDirectFbConvenience::dfbInterface(); - - DFBResult ok = dfbInterface->CreateEventBuffer(dfbInterface,&eventBuffer); - if (ok != DFB_OK) - DirectFBError("Failed to initialise eventbuffer", ok); - - dfbInterface->GetDisplayLayer(dfbInterface,DLID_PRIMARY, &dfbDisplayLayer); - - m_inputHandler = new InputSocketWaiter(eventBuffer,this); - connect(m_inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); - - connect(QApplication::instance(),SIGNAL(aboutToQuit()),SLOT(applicationEnd())); -} - -void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) -{ - tlwMap.insert(id,tlw); - IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); - - window->AttachEventBuffer(window,eventBuffer); -} - -void QDirectFbInput::removeWindow(QWidget *tlw) -{ - DFBWindowID id = tlwMap.key(tlw,0); - if (id) { - IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,id, &window); - - window->DetachEventBuffer(window,eventBuffer); - tlwMap.remove(id); - } -} - -void QDirectFbInput::handleEvents() -{ - DFBResult hasEvent = eventBuffer->HasEvent(eventBuffer); - while(hasEvent == DFB_OK){ - DFBEvent event; - DFBResult ok = eventBuffer->GetEvent(eventBuffer,&event); - if (ok != DFB_OK) - DirectFBError("Failed to get event",ok); - if (event.clazz == DFEC_WINDOW) { - switch (event.window.type) { - case DWET_BUTTONDOWN: - case DWET_BUTTONUP: - case DWET_MOTION: - handleMouseEvents(event); - break; - case DWET_WHEEL: - handleWheelEvent(event); - break; - case DWET_KEYDOWN: - case DWET_KEYUP: - handleKeyEvents(event); - break; - case DWET_ENTER: - case DWET_LEAVE: - handleEnterLeaveEvents(event); - default: - break; - } - - } - - hasEvent = eventBuffer->HasEvent(eventBuffer); - } - m_inputHandler->continueWaitingForEvents(); -} - -void QDirectFbInput::handleMouseEvents(const DFBEvent &event) -{ - QPoint p(event.window.x, event.window.y); - QPoint globalPos = globalPoint(event); - Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); - - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); - IDirectFBWindow *window; - layer->GetWindow(layer,event.window.window_id,&window); - - long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - - if (event.window.type == DWET_BUTTONDOWN) { - window->GrabPointer(window); - } else if (event.window.type == DWET_BUTTONUP) { - window->UngrabPointer(window); - } - QWidget *tlw = tlwMap.value(event.window.window_id); - QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); -} - -void QDirectFbInput::applicationEnd() -{ - delete m_inputHandler; - m_inputHandler = 0; -} - -void QDirectFbInput::handleWheelEvent(const DFBEvent &event) -{ - QPoint p(event.window.cx, event.window.cy); - QPoint globalPos = globalPoint(event); - long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - QWidget *tlw = tlwMap.value(event.window.window_id); - QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos, - event.window.step*120, - Qt::Vertical); -} - -void QDirectFbInput::handleKeyEvents(const DFBEvent &event) -{ - QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); - Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol); - Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers); - - long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - - QChar character; - if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE) - character = QChar(event.window.key_symbol); - QWidget *tlw = tlwMap.value(event.window.window_id); - QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character); -} - -void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) -{ - QWidget *tlw = tlwMap.value(event.window.window_id); - switch (event.window.type) { - case DWET_ENTER: - QWindowSystemInterface::handleEnterEvent(tlw); - break; - case DWET_LEAVE: - QWindowSystemInterface::handleLeaveEvent(tlw); - break; - default: - break; - } -} - -inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const -{ - IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,event.window.window_id,&window); - int x,y; - window->GetPosition(window,&x,&y); - return QPoint(event.window.cx +x, event.window.cy + y); -} - diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h deleted file mode 100644 index 31aa082..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef QDIRECTFBINPUT_H -#define QDIRECTFBINPUT_H - -#include -#include -#include -#include -#include -#include -#include - -#include - -class InputSocketWaiter : public QThread -{ - Q_OBJECT -public: - InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent); - virtual ~InputSocketWaiter(); - void continueWaitingForEvents(); -protected: - void run(); -signals: - void newEvent(); -private: - IDirectFBEventBuffer *m_eventBuffer; - bool m_shouldStop; - QMutex m_cleanupMutex; - QWaitCondition m_finishedProcessingEvents; -}; - -class QDirectFbInput : public QObject -{ - Q_OBJECT -public: - static QDirectFbInput *instance(); - void addWindow(DFBWindowID id, QWidget *tlw); - void removeWindow(QWidget *tlw); - -public slots: - void handleEvents(); - void applicationEnd(); - -private: - QDirectFbInput(); - - void handleMouseEvents(const DFBEvent &event); - void handleWheelEvent(const DFBEvent &event); - void handleKeyEvents(const DFBEvent &event); - void handleEnterLeaveEvents(const DFBEvent &event); - IDirectFB *dfbInterface; - IDirectFBDisplayLayer *dfbDisplayLayer; - IDirectFBEventBuffer *eventBuffer; - - QHashtlwMap; - - inline QPoint globalPoint(const DFBEvent &event) const; - - InputSocketWaiter *m_inputHandler; - -}; - -#endif // QDIRECTFBINPUT_H diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp deleted file mode 100644 index 4489e31..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_minimaldfb.h" -#include "qwindowsurface_minimaldfb.h" -#include "qblitter_directfb.h" -#include "qdirectfbconvenience.h" -#include "qdirectfbcursor.h" - -#include -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) - :QGraphicsSystemScreen() -{ - m_layer = QDirectFbConvenience::dfbDisplayLayer(display); - m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); - - DFBDisplayLayerConfig config; - m_layer->GetConfiguration(m_layer, &config); - - m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); - m_geometry = QRect(0,0,config.width,config.height); - const int dpi = 72; - const qreal inch = 25.4; - m_depth = 32; - m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); - - cursor = new QDirectFBCursor(this); -} - -QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen() -{ -} - -QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() -{ - const QStringList args = QCoreApplication::arguments(); - int argc = args.size(); - char **argv = new char*[argc]; - - for (int i = 0; i < argc; ++i) - argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); - - DFBResult result = DirectFBInit(&argc, &argv); - if (result != DFB_OK) { - DirectFBError("QDirectFBScreen: error initializing DirectFB", - result); - } - delete[] argv; - - mPrimaryScreen = new QDirectFbGraphicsSystemScreen(0); - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QDirectFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - if (type == QPixmapData::BitmapType) - return new QRasterPixmapData(type); - else - return new QBlittablePixmapData(type); -} - -QWindowSurface *QDirectFbGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - return new QDirectFbWindowSurface (widget); -} - -QBlittable *QDirectFbGraphicsSystem::createBlittable(const QRect &rect) const -{ - return new QDirectFbBlitter(rect); -} - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h deleted file mode 100644 index b16153d..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_MINIMAL_H -#define QGRAPHICSSYSTEM_MINIMAL_H - -#include "qdirectfbinput.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QDirectFBCursor; - -class QDirectFbGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QDirectFbGraphicsSystemScreen(int display); - ~QDirectFbGraphicsSystemScreen(); - - QRect geometry() const { return m_geometry; } - int depth() const { return m_depth; } - QImage::Format format() const { return m_format; } - QSize physicalSize() const { return m_physicalSize; } - -public: - QRect m_geometry; - int m_depth; - QImage::Format m_format; - QSize m_physicalSize; - - IDirectFBDisplayLayer *m_layer; - -private: - QDirectFBCursor * cursor; - -}; - -class QDirectFbGraphicsSystem : public QGraphicsSystem -{ -public: - QDirectFbGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - QBlittable *createBlittable(const QRect &rect) const; - - QList screens() const { return mScreens; } - - - -private: - QDirectFbGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp deleted file mode 100644 index 07a9b8a..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_minimaldfb.h" -#include "qgraphicssystem_minimaldfb.h" -#include "qblitter_directfb.h" -#include "qdirectfbconvenience.h" -#include - -#include - -QT_BEGIN_NAMESPACE - -QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) - : QWindowSurface(window), m_pixmap(0), m_pmdata(0), - m_dfbWindow(0), m_dfbSurface(0) -{ - window->setWindowSurface(this); - - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); - DFBDisplayLayerConfig layerConfig; - layer->GetConfiguration(layer,&layerConfig); - - DFBWindowDescription description; - memset(&description,0,sizeof(DFBWindowDescription)); - description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS -#if DIRECTFB_MINOR_VERSION >= 1 - |DWDESC_OPTIONS -#endif - |DWDESC_CAPS); - description.width = window->rect().width(); - description.height = window->rect().height(); - description.posx = window->rect().x(); - description.posy = window->rect().y(); - - if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED) - description.surface_caps = DSCAPS_PREMULTIPLIED; - description.pixelformat = layerConfig.pixelformat; - -#if DIRECTFB_MINOR_VERSION >= 1 - description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); -#endif - description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); - description.surface_caps = DSCAPS_PREMULTIPLIED; - - DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); - if (result != DFB_OK) { - DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); - } - - DFBWindowID id; - m_dfbWindow->GetID(m_dfbWindow, &id); - QDirectFbInput::instance()->addWindow(id,window); - - m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); - - QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect(), m_dfbSurface); - m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); - m_pmdata->setBlittable(blitter); - m_pixmap = new QPixmap(m_pmdata); -} - -QDirectFbWindowSurface::~QDirectFbWindowSurface() -{ - QDirectFbInput::instance()->removeWindow(this->window()); - m_dfbWindow->Destroy(m_dfbWindow); -} - -QPaintDevice *QDirectFbWindowSurface::paintDevice() -{ - return m_pixmap; -} - -void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - m_pmdata->blittable()->unlock(); - - const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); - m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); - - QVector rects = region.rects(); - for (int i = 0 ; i < rects.size(); i++) { - const QRect rect = rects.at(i); - DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; - m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); - } -} - -void QDirectFbWindowSurface::setGeometry(const QRect &rect) -{ - m_pmdata->blittable()->unlock(); - - QWindowSurface::setGeometry(rect); - m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), - rect.width(), rect.height()); - - //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable - m_dfbSurface->AddRef(m_dfbSurface); - QDirectFbBlitter *blitter = new QDirectFbBlitter(rect,m_dfbSurface); - m_pmdata->setBlittable(blitter); -} - -static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) -{ - const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() }; - surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy); - const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy }; - surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT)); -} - -bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - m_pmdata->blittable()->unlock(); - - if (!m_dfbSurface || area.isEmpty()) - return false; - m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); - if (area.rectCount() == 1) { - scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy); - } else { - const QVector rects = area.rects(); - const int n = rects.size(); - for (int i=0; iblittable()->unlock(); - - if (visible) { - int x = this->geometry().x(); - int y = this->geometry().y(); - m_dfbWindow->MoveTo(m_dfbWindow,x,y); - } else { - IDirectFBDisplayLayer *displayLayer; - QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); - - DFBDisplayLayerConfig config; - displayLayer->GetConfiguration(displayLayer,&config); - m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); - } -} - -Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags flags) -{ - switch (flags & Qt::WindowType_Mask) { - case Qt::ToolTip: { - DFBWindowOptions options; - m_dfbWindow->GetOptions(m_dfbWindow,&options); - options = DFBWindowOptions(options | DWOP_GHOST); - m_dfbWindow->SetOptions(m_dfbWindow,options); - break; } - default: - break; - } - - m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); - return flags; -} - -void QDirectFbWindowSurface::raise() -{ - m_dfbWindow->RaiseToTop(m_dfbWindow); -} - -void QDirectFbWindowSurface::lower() -{ - m_dfbWindow->LowerToBottom(m_dfbWindow); -} - -WId QDirectFbWindowSurface::winId() const -{ - DFBWindowID id; - m_dfbWindow->GetID(m_dfbWindow, &id); - return WId(id); -} - - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h deleted file mode 100644 index ca34cbf..0000000 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_MINIMAL_H -#define QWINDOWSURFACE_MINIMAL_H - -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -class QDirectFbGraphicsSystemScreen; - -class QDirectFbWindowSurface : public QWindowSurface -{ -public: - QDirectFbWindowSurface(QWidget *window); - ~QDirectFbWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - - void setVisible(bool visible); - Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - - void raise(); - void lower(); - - WId winId() const; - -private: - void lockSurfaceToImage(); - - QPixmap *m_pixmap; - QBlittablePixmapData *m_pmdata; - - IDirectFBWindow *m_dfbWindow; - IDirectFBSurface *m_dfbSurface; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/openkode/frag.glslf b/src/plugins/graphicssystems/openkode/frag.glslf deleted file mode 100644 index a593434..0000000 --- a/src/plugins/graphicssystems/openkode/frag.glslf +++ /dev/null @@ -1,8 +0,0 @@ -uniform sampler2D tex_samp; - -varying vec2 texcoord_var; - -void main() -{ - gl_FragColor = texture2D(tex_samp, texcoord_var); -} diff --git a/src/plugins/graphicssystems/openkode/frag.h b/src/plugins/graphicssystems/openkode/frag.h deleted file mode 100644 index 6575cb5..0000000 --- a/src/plugins/graphicssystems/openkode/frag.h +++ /dev/null @@ -1,37 +0,0 @@ -0x4e,0x56,0x75,0x63,0x01,0x00,0x00,0x00,0x09,0x00,0x06,0x00,0x06,0x00,0x50,0x00, -0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x68,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x90,0x00,0x02,0x01,0x82,0x04,0x02,0x02,0x82, -0x01,0x00,0x40,0xf6,0x85,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2a,0x00,0x06,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0x3b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x04,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x74,0x65,0x78,0x5f,0x73,0x61,0x6d,0x70,0x00,0x00,0x00,0x74,0x65,0x78,0x63, -0x6f,0x6f,0x72,0x64,0x5f,0x76,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/src/plugins/graphicssystems/openkode/main.cpp b/src/plugins/graphicssystems/openkode/main.cpp deleted file mode 100644 index e9c1083..0000000 --- a/src/plugins/graphicssystems/openkode/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_openkode.h" - -QT_BEGIN_NAMESPACE - -class QOpenKODEGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QOpenKODEGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "OpenKODE"; - return list; -} - -QGraphicsSystem* QOpenKODEGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "openkode") - return new QOpenKODEGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(openkode, QOpenKODEGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openkode/openkode.pro b/src/plugins/graphicssystems/openkode/openkode.pro deleted file mode 100644 index 055048d..0000000 --- a/src/plugins/graphicssystems/openkode/openkode.pro +++ /dev/null @@ -1,14 +0,0 @@ -TARGET = qopenkodegraphicssystem -include(../../qpluginbase.pri) - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -SOURCES = main.cpp qgraphicssystem_openkode.cpp qwindowsurface_openkode.cpp -HEADERS = qgraphicssystem_openkode.h qwindowsurface_openkode.h - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target - -# openkode specific stuff -INCLUDEPATH += $(OPENKODE_DIR)/include -LIBS += $${QMAKE_RPATH}/$(OPENKODE_DIR)/lib-target -L$(OPENKODE_DIR)/lib-target -lKD -lEGL -lGLESv2 diff --git a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp deleted file mode 100644 index 7a07776..0000000 --- a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.cpp +++ /dev/null @@ -1,236 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_openkode.h" -#include "qwindowsurface_openkode.h" -#include - -#include -#include - -#include -#include -#include - -#include "GLES2/gl2ext.h" - - -QT_BEGIN_NAMESPACE - -QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen() -{ - KDDesktopNV *kdDesktop = KD_NULL; - KDDisplayNV *kdDisplay = KD_NULL; - - qDebug() << "QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen()"; - - // Get the default desktop and display - kdDesktop = kdGetDesktopNV(KD_DEFAULT_DESKTOP_NV, KD_NULL); - if (!kdDesktop || kdDesktop == (void*)-1) { - qErrnoWarning(kdGetError(), "Could not obtain KDDesktopNV pointer"); - return; - } - - kdDisplay = kdGetDisplayNV(KD_DEFAULT_DISPLAY_NV, KD_NULL); - if (!kdDisplay || kdDisplay == (void*)-1) { - qErrnoWarning(kdGetError(), "Could not obtain KDDisplayNV pointer"); - kdReleaseDesktopNV(kdDesktop); - return; - } - - KDDisplayModeNV mode; - if (kdGetDisplayModeNV(kdDisplay, &mode)) { - qErrnoWarning(kdGetError(), "Could not get display mode"); - return; - } - - qDebug() << " - display mode " << mode.width << "x" << mode.height << " refresh " << mode.refresh; - - KDint desktopSize[] = { mode.width, mode.height }; - - if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { - qErrnoWarning(kdGetError(), "Could not set desktop size"); - return; - } - - // Once we've set up the desktop and display we don't need them anymore - kdReleaseDisplayNV(kdDisplay); - kdReleaseDesktopNV(kdDesktop); - - const int defaultDpi = 72; - mGeometry = QRect(0, 0, mode.width, mode.height); - mPhysicalSize = QSize(mode.width * 25.4 / defaultDpi, mode.height * 25.4 / defaultDpi); - - mDepth = 24; - mFormat = QImage::Format_RGB888; - - - QEglProperties properties; - properties.setPixelFormat(QImage::Format_RGB888); - properties.setValue(EGL_BUFFER_SIZE, EGL_DONT_CARE); - properties.setRenderableType(QEgl::OpenGL); - - if (!mContext.chooseConfig(properties, QEgl::BestPixelFormat)) { - qWarning("qEglContext: Unable to choose config!"); - return; - } - - if (!mContext.display()) { - qWarning("qEglContext: Unable to open display!"); - return; - } - - qDebug() << " - QEglContext::openDisplay OK"; -} - -static GLuint NvKdTestLoadShaders(const char *vertex_shader_binary, - const char *fragment_shader_binary, - GLuint vertex_shader_binary_size, - GLuint fragment_shader_binary_size) -{ - GLuint prog; - GLuint vertShader; - GLuint fragShader; - - // Create the program - prog = glCreateProgram(); - - // Create the GL shader objects - vertShader = glCreateShader(GL_VERTEX_SHADER); - fragShader = glCreateShader(GL_FRAGMENT_SHADER); - - // Load the binary data into the shader objects - glShaderBinary(1, &vertShader, - GL_NVIDIA_PLATFORM_BINARY_NV, vertex_shader_binary, vertex_shader_binary_size); - glShaderBinary(1, &fragShader, - GL_NVIDIA_PLATFORM_BINARY_NV, fragment_shader_binary, fragment_shader_binary_size); - - // Attach the shaders to the program - glAttachShader(prog, vertShader); - glAttachShader(prog, fragShader); - - // Delete the shaders - glDeleteShader(vertShader); - glDeleteShader(fragShader); - - // Link and validate the shader program - glLinkProgram(prog); - glValidateProgram(prog); - - return prog; -} - -class QOpenKODEEventLoopHelper : public QThread -{ -public: - QOpenKODEEventLoopHelper(QSemaphore *m) - : eventMutex(m) - { - m->acquire(); - } - -protected: - void run() - { - qDebug() << "initializing KD"; - kdInitializeNV(); - qDebug() << "done initializing KD"; - eventMutex->release(); - - const KDEvent *event; - while ((event = kdWaitEvent(-1)) != 0) { - qDebug() << "!!! received event!"; - kdDefaultEvent(event); - } - - qDebug() << "exiting event loop"; - } - -private: - QSemaphore *eventMutex; -}; - -QOpenKODEGraphicsSystem::QOpenKODEGraphicsSystem() - : eventMutex(1) -{ - QOpenKODEEventLoopHelper *loop = new QOpenKODEEventLoopHelper(&eventMutex); - loop->start(); - eventMutex.acquire(); // block until initialization done - - mPrimaryScreen = new QOpenKODEGraphicsSystemScreen(); - - mScreens.append(mPrimaryScreen); - -} - -QPixmapData *QOpenKODEGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QOpenKODEGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - return new QOpenKODEWindowSurface(mPrimaryScreen, widget); -} - -GLuint QOpenKODEGraphicsSystem::blitterProgram() -{ - static GLuint shaderProgram = 0; - if (!shaderProgram) { - - const char vertShaderBinary[] = { -# include "vert.h" - }; - const char fragShaderBinary[] = { -# include "frag.h" - }; - - shaderProgram = NvKdTestLoadShaders(vertShaderBinary, fragShaderBinary, - sizeof(vertShaderBinary), sizeof(fragShaderBinary)); - - if (!shaderProgram) - qFatal("QOpenKodeGraphicsSystem(): Cannot load shaders!"); - } - return shaderProgram; -} - - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h b/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h deleted file mode 100644 index 7d73ae0..0000000 --- a/src/plugins/graphicssystems/openkode/qgraphicssystem_openkode.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_OPENKODE_H -#define QGRAPHICSSYSTEM_OPENKODE_H - -#include - -#include -#include - -# include - -QT_BEGIN_NAMESPACE - -struct KDDesktopNV; - -class QOpenKODEGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QOpenKODEGraphicsSystemScreen(); - ~QOpenKODEGraphicsSystemScreen() {} - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - -public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; - QEglContext mContext; -}; - -class QOpenKODEGraphicsSystem : public QGraphicsSystem -{ -public: - QOpenKODEGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QList screens() const { return mScreens; } - - static GLuint blitterProgram(); - -private: - QOpenKODEGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; - QSemaphore eventMutex; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp deleted file mode 100644 index b3f3965..0000000 --- a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_openkode.h" -#include "qgraphicssystem_openkode.h" -#include - -#include "KD/kd.h" -#include "KD/NV_display.h" - -QT_BEGIN_NAMESPACE - -QOpenKODEWindowSurface::QOpenKODEWindowSurface - (QOpenKODEGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), - mScreen(screen), - mSurface(0) -{ - qDebug() << "QOpenKODEWindowSurface::QOpenKODEWindowSurface:" << window << window->width() << "x" << window->height() - << "pos" << window->x() << "x" << window->y(); - - if (!mContext.display()) { - qWarning("qEglContext: Unable to open display!"); - return; - } - - QEglProperties properties; - properties.setPixelFormat(QImage::Format_RGB888); - properties.setValue(EGL_BUFFER_SIZE, EGL_DONT_CARE); - properties.setRenderableType(QEgl::OpenGL); - - if (!mContext.chooseConfig(properties, QEgl::BestPixelFormat)) { - qWarning("qEglContext: Unable to choose config!"); - return; - } - - createWindow(window); -} - -void QOpenKODEWindowSurface::createWindow(QWidget *window) -{ - qDebug() << "createWindow"; - kdWindow = kdCreateWindow(mContext.display(), mContext.config(), KD_NULL); - - if (!kdWindow) { - qErrnoWarning(kdGetError(), "Error creating native window"); - return; - } - - const KDint windowSize[2] = { window->width(), window->height() }; - if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { - qErrnoWarning(kdGetError(), "Could not set native window size"); - return; - } - - //const KDboolean windowExclusive[] = { false }; - //if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { - // qErrnoWarning(kdGetError(), "Could not set exclusive bit"); - // //return; - //} - - //const KDint windowPos[2] = { window->x(), window->y() }; - //if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { - // qErrnoWarning(kdGetError(), "Could not set native window position"); - // //return; - //} - - EGLNativeWindowType nativeWindow; - - if (kdRealizeWindow(kdWindow, &nativeWindow)) { - qErrnoWarning(kdGetError(), "Could not realize native window"); - return; - } - qDebug() << "kdRealizeWindow" << nativeWindow; - - // Create an EGL window surface for the native window - EGLint windowAttrs[3] = { EGL_NONE }; - qDebug() << "doing createwindowsurface"; - *mSurface = eglCreateWindowSurface(mContext.display(), - mContext.config(), - nativeWindow, - windowAttrs); - qDebug() << "create windowsurface"; - if (!mSurface) { - qWarning("EGL couldn't create window surface: 0x%x", eglGetError()); - return; - } - - qDebug() << "making context"; - if (!mContext.createContext()) { - qDebug() << "Unable to create context!"; - return; - } - - qDebug() << "about to make current"; - mContext.makeCurrent(mSurface); -} - -QOpenKODEWindowSurface::~QOpenKODEWindowSurface() -{ -} - -QPaintDevice *QOpenKODEWindowSurface::paintDevice() -{ - qDebug() << "QOpenKODEWindowSurface::paintDevice"; - return &mImage; -} - -// ### TODO - this updates the entire toplevel, should only update the region -void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoint &offset) -{ - qDebug() << "in flush"; - if (!offset.isNull()) { - qWarning("Offset flushing not supported yet"); - return; - } - - if (!mContext.makeCurrent(mSurface)) { - qWarning("EGL couldn't make context/surface current: 0x%x", eglGetError()); - return; - } - - QRect boundingRect = region.boundingRect(); - - int x, y, w, h; - QImage blitImage; - if (true || boundingRect == mImage.rect()) { // TODO - check optimization - blitImage = mImage; - x = y = 0; - w = mImage.width(); - h = mImage.height(); - } else { - blitImage = mImage.copy(boundingRect); - w = boundingRect.width(); - h = boundingRect.height(); - x = boundingRect.x(); - y = boundingRect.y(); - } - -// qDebug() << "flush" << widget << offset << region.boundingRect() << mImage.format() << blitImage.format(); - - GLuint shaderProgram = QOpenKODEGraphicsSystem::blitterProgram(); - - glUseProgram(shaderProgram); - - GLuint index = glGetUniformLocation(shaderProgram, "window"); - glUniform2f(index, GLfloat(mImage.width()), GLfloat(mImage.height())); - - // attributes - GLuint posId = glGetAttribLocation(shaderProgram, "pos_attr"); - GLuint texcoordId = glGetAttribLocation(shaderProgram, "texcoord_attr"); - - // sampler - index = glGetUniformLocation(shaderProgram, "tex_samp"); - - glUniform1i(index, 0); - - glDisable(GL_DEPTH_TEST); - glActiveTexture(GL_TEXTURE0); - - GLuint texId; - GLfloat coords[8] = {x, y, x, y + h, x + w, y + h, x + w, y }; - GLfloat texcoords[8] = { 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 }; - - // Generate texture for checkered background - glPixelStorei(GL_UNPACK_ALIGNMENT, 4); - glGenTextures(1, &texId); - glBindTexture(GL_TEXTURE_2D, texId); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, blitImage.bits()); - - // Enable vertex attribute associated with vertex position - glEnableVertexAttribArray(posId); - glEnableVertexAttribArray(texcoordId); - - // Set the quad vertices - glVertexAttribPointer(posId, 2, GL_FLOAT, 0, 0, coords); - glVertexAttribPointer(texcoordId, 2, GL_FLOAT, 0, 0, texcoords); - - // Draw the quad - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - // Cleanup - glDisableVertexAttribArray(posId); - glDisableVertexAttribArray(texcoordId); - - // Release all textures - glBindTexture(GL_TEXTURE_2D, 0); - if (texId) - glDeleteTextures(1, &texId); - - mContext.doneCurrent(); - mContext.swapBuffers(mSurface); -} - -void QOpenKODEWindowSurface::setGeometry(const QRect &rect) -{ - qDebug() << "QOpenKODEWindowSurface::setGeometry:" << rect; - QWindowSurface::setGeometry(rect); - if (mImage.size() != rect.size()) - mImage = QImage(rect.size(), mScreen->format()); - - mContext.destroySurface(mSurface); - kdDestroyWindow(kdWindow); - createWindow(window()); - qDebug() << "set geometry workded"; -} - -bool QOpenKODEWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} - -void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QOpenKODEWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h b/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h deleted file mode 100644 index bee94a5..0000000 --- a/src/plugins/graphicssystems/openkode/qwindowsurface_openkode.h +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_OPENKODE_H -#define QWINDOWSURFACE_OPENKODE_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class QOpenKODEGraphicsSystemScreen; - -class QOpenKODEWindowSurface : public QWindowSurface -{ -public: - QOpenKODEWindowSurface - (QOpenKODEGraphicsSystemScreen *screen, QWidget *window); - ~QOpenKODEWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - QOpenKODEGraphicsSystemScreen *mScreen; - QImage mImage; - struct KDWindow *kdWindow; - EGLSurface *mSurface; - QEglContext mContext; - - void createWindow(QWidget *window); -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/openkode/vert.glslv b/src/plugins/graphicssystems/openkode/vert.glslv deleted file mode 100644 index 57b5866..0000000 --- a/src/plugins/graphicssystems/openkode/vert.glslv +++ /dev/null @@ -1,14 +0,0 @@ -uniform vec2 window; // window size - -// Per-vertex attributes] -attribute vec2 pos_attr; -attribute vec2 texcoord_attr; - -// Output vertex color -varying vec2 texcoord_var; - -void main() -{ - gl_Position = vec4( (2.0 * pos_attr / window -1.0) * vec2(1.0, -1.0), 0.0, 1.0); - texcoord_var = texcoord_attr; -} diff --git a/src/plugins/graphicssystems/openkode/vert.h b/src/plugins/graphicssystems/openkode/vert.h deleted file mode 100644 index bdf564d..0000000 --- a/src/plugins/graphicssystems/openkode/vert.h +++ /dev/null @@ -1,63 +0,0 @@ -0x4e,0x56,0x75,0x63,0x01,0x00,0x00,0x00,0x0a,0x00,0x06,0x00,0x06,0x00,0x50,0x00, -0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x30,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x05,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x01,0x02,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0x04,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x80,0xbf,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x10,0x80,0xc7,0x00,0x24,0x05,0x02,0x00,0x10,0x80,0xc7,0x00,0x24, -0x01,0x02,0x81,0xc0,0x80,0x07,0x60,0x00,0x05,0x02,0x00,0x90,0x80,0x07,0x00,0x00, -0x09,0x00,0x01,0xe1,0x80,0x87,0x40,0x00,0x05,0x00,0x00,0x10,0x80,0xc7,0x00,0x24, -0x01,0x00,0x81,0xc0,0x80,0x07,0x60,0x00,0x09,0x04,0x00,0xa0,0x80,0x47,0x00,0xe4, -0x05,0x02,0x00,0x90,0x80,0x07,0x00,0x00,0x05,0x04,0x00,0x10,0x88,0xc7,0x03,0x04, -0x01,0x00,0x01,0xe1,0x88,0x87,0x40,0x00,0x09,0xf8,0x00,0x10,0x88,0xc7,0x03,0x04, -0x0d,0x00,0x00,0x10,0x88,0xc7,0x40,0x24,0x11,0x04,0x00,0x10,0x88,0xc7,0x23,0x04, -0x15,0x06,0x00,0x10,0x89,0xc7,0x23,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xad,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x28,0x00,0x02,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xb6,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xb7,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xbe,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x05,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xbf,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xc9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xca,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xd9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xda,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xdb,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xe8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0x50,0x4f,0x53, -0x49,0x54,0x49,0x4f,0x4e,0x00,0x00,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00, -0x70,0x6f,0x73,0x5f,0x61,0x74,0x74,0x72,0x00,0x00,0x00,0x74,0x65,0x78,0x63,0x6f, -0x6f,0x72,0x64,0x5f,0x61,0x74,0x74,0x72,0x00,0x00,0x00,0x74,0x65,0x78,0x63,0x6f, -0x6f,0x72,0x64,0x5f,0x76,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/src/plugins/graphicssystems/openvglite/main.cpp b/src/plugins/graphicssystems/openvglite/main.cpp deleted file mode 100644 index dc0b4a8..0000000 --- a/src/plugins/graphicssystems/openvglite/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_vglite.h" - -QT_BEGIN_NAMESPACE - -class QVGGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QVGGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "OpenVG"; - return list; -} - -QGraphicsSystem* QVGGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "openvg") - return new QVGLiteGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(openvg, QVGGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openvglite/openvglite.pro b/src/plugins/graphicssystems/openvglite/openvglite.pro deleted file mode 100644 index 9d7860a..0000000 --- a/src/plugins/graphicssystems/openvglite/openvglite.pro +++ /dev/null @@ -1,12 +0,0 @@ -TARGET = qvglitegraphicssystem -include(../../qpluginbase.pri) - -QT += openvg - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -SOURCES = main.cpp qgraphicssystem_vglite.cpp qwindowsurface_vglite.cpp -HEADERS = qgraphicssystem_vglite.h qwindowsurface_vglite.h - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp deleted file mode 100644 index 41b2303..0000000 --- a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.cpp +++ /dev/null @@ -1,193 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_vglite.h" -#include "qwindowsurface_vglite.h" -#include -#include -#include -#ifdef OPENVG_USBHP_INIT -extern "C" { -#include -}; -#endif - -QT_BEGIN_NAMESPACE - -QVGLiteGraphicsSystem::QVGLiteGraphicsSystem() - : w(0), h(0), d(0), dw(0), dh(0), physWidth(0), physHeight(0), - surface(0), context(0), rootWindow(0), - screenFormat(QImage::Format_RGB16), preservedSwap(false) -{ -#ifdef OPENVG_USBHP_INIT - initLibrary(); -#endif - - // The graphics system is also the screen definition. - mScreens.append(this); - - QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); - QStringList displayArgs = displaySpec.split(QLatin1Char(':')); - - // Initialize EGL and create the global EGL context. - context = qt_vg_create_context(0); - if (!context) { - qFatal("QVGLiteGraphicsSystem: could not initialize EGL"); - return; - } - - // Get the root window handle to use. Default to zero. - QRegExp winidRx(QLatin1String("winid=?(\\d+)")); - int winidIdx = displayArgs.indexOf(winidRx); - int handle = 0; - if (winidIdx >= 0) { - winidRx.exactMatch(displayArgs.at(winidIdx)); - handle = winidRx.cap(1).toInt(); - } - - // Create a full-screen window based on the native handle. - // If the context is premultiplied, the window should be too. - QEglProperties props; -#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT - EGLint surfaceType = 0; - if (context->configAttrib(EGL_SURFACE_TYPE, &surfaceType) && - (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) != 0) - props.setValue(EGL_VG_ALPHA_FORMAT, EGL_VG_ALPHA_FORMAT_PRE); -#endif - rootWindow = eglCreateWindowSurface - (context->display(), context->config(), - (EGLNativeWindowType)handle, props.properties()); - if (rootWindow == EGL_NO_SURFACE) { - delete context; - context = 0; - qFatal("QVGLiteGraphicsSystem: could not create full-screen window"); - return; - } - - // Try to turn on preserved swap behaviour on the root window. - // This will allow us to optimize compositing to focus on just - // the screen region that has changed. Otherwise we must - // re-composite the entire screen every frame. -#if !defined(QVG_NO_PRESERVED_SWAP) - eglGetError(); // Clear error state first. - eglSurfaceAttrib(context->display(), rootWindow, - EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED); - preservedSwap = (eglGetError() == EGL_SUCCESS); -#else - preservedSwap = false; -#endif - - // Fetch the root window properties. - eglQuerySurface(context->display(), rootWindow, EGL_WIDTH, &w); - eglQuerySurface(context->display(), rootWindow, EGL_HEIGHT, &h); - screenFormat = qt_vg_config_to_image_format(context); - switch (screenFormat) { - case QImage::Format_ARGB32_Premultiplied: - case QImage::Format_ARGB32: - case QImage::Format_RGB32: - default: - d = 32; - break; - case QImage::Format_RGB16: - case QImage::Format_ARGB4444_Premultiplied: - d = 16; - break; - } - dw = w; - dh = h; - qDebug("screen size: %dx%dx%d", w, h, d); - - // Handle display physical size spec. From qscreenlinuxfb_qws.cpp. - QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)")); - int dimIdxW = displayArgs.indexOf(mmWidthRx); - QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)")); - int dimIdxH = displayArgs.indexOf(mmHeightRx); - if (dimIdxW >= 0) { - mmWidthRx.exactMatch(displayArgs.at(dimIdxW)); - physWidth = mmWidthRx.cap(1).toInt(); - if (dimIdxH < 0) - physHeight = dh*physWidth/dw; - } - if (dimIdxH >= 0) { - mmHeightRx.exactMatch(displayArgs.at(dimIdxH)); - physHeight = mmHeightRx.cap(1).toInt(); - if (dimIdxW < 0) - physWidth = dw*physHeight/dh; - } - if (dimIdxW < 0 && dimIdxH < 0) { - const int dpi = 72; - physWidth = qRound(dw * 25.4 / dpi); - physHeight = qRound(dh * 25.4 / dpi); - } -} - -QVGLiteGraphicsSystem::~QVGLiteGraphicsSystem() -{ -} - -QPixmapData *QVGLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ -#if !defined(QVGLite_NO_SINGLE_CONTEXT) && !defined(QVGLite_NO_PIXMAP_DATA) - // Pixmaps can use QVGLitePixmapData; bitmaps must use raster. - if (type == QPixmapData::PixmapType) - return new QVGPixmapData(type); - else - return new QRasterPixmapData(type); -#else - return new QRasterPixmapData(type); -#endif -} - -QWindowSurface *QVGLiteGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. - if (surface) { - qWarning() << "QVGLiteGraphicsSystem: only one window surface " - "is supported at a time"; - return 0; - } - surface = new QVGLiteWindowSurface - (const_cast(this), widget); - return surface; -} - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h b/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h deleted file mode 100644 index 512793d..0000000 --- a/src/plugins/graphicssystems/openvglite/qgraphicssystem_vglite.h +++ /dev/null @@ -1,93 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_VGLITE_H -#define QGRAPHICSSYSTEM_VGLITE_H - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QVGLiteWindowSurface; - -class QVGLiteGraphicsSystem : public QGraphicsSystem, - public QGraphicsSystemScreen -{ -public: - QVGLiteGraphicsSystem(); - ~QVGLiteGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - QList screens() const { return mScreens; } - - QRect geometry() const { return QRect(0, 0, w, h); } - int depth() const { return d; } - QImage::Format format() const { return screenFormat; } - QSize physicalSize() const { return QSize(physWidth, physHeight); } - -private: - friend class QVGLiteWindowSurface; - - int w; - int h; - int d; - - int dw; - int dh; - - int physWidth; - int physHeight; - - mutable QVGLiteWindowSurface *surface; - QEglContext *context; - EGLSurface rootWindow; - QImage::Format screenFormat; - bool preservedSwap; - - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp deleted file mode 100644 index c73e35a..0000000 --- a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_vglite.h" -#include "qgraphicssystem_vglite.h" -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QVGLiteWindowSurface::QVGLiteWindowSurface - (QVGLiteGraphicsSystem *gs, QWidget *window) - : QWindowSurface(window), graphicsSystem(gs), - isPaintingActive(false), engine(0) -{ -} - -QVGLiteWindowSurface::~QVGLiteWindowSurface() -{ - graphicsSystem->surface = 0; - if (engine) - qt_vg_destroy_paint_engine(engine); -} - -QPaintDevice *QVGLiteWindowSurface::paintDevice() -{ - qt_vg_make_current(graphicsSystem->context, graphicsSystem->rootWindow); - isPaintingActive = true; - // TODO: clear the parts of the back buffer that are not - // covered by the window surface to black. - return this; -} - -void QVGLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); - QEglContext *context = graphicsSystem->context; - if (context) { - if (!isPaintingActive) - qt_vg_make_current(context, graphicsSystem->rootWindow); - context->swapBuffers(); - qt_vg_done_current(context); - context->setSurface(EGL_NO_SURFACE); - isPaintingActive = false; - } -} - -void QVGLiteWindowSurface::setGeometry(const QRect &rect) -{ - QWindowSurface::setGeometry(rect); -} - -bool QVGLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} - -void QVGLiteWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QVGLiteWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -QPaintEngine *QVGLiteWindowSurface::paintEngine() const -{ - if (!engine) - engine = qt_vg_create_paint_engine(); - return engine; -} - -// We need to get access to QWidget::metric() from QVGLiteWindowSurface::metric, -// but it is not a friend of QWidget. To get around this, we create a -// fake QX11PaintEngine class, which is a friend. -class QX11PaintEngine -{ -public: - static int metric(const QWidget *widget, QPaintDevice::PaintDeviceMetric met) - { - return widget->metric(met); - } -}; - -int QVGLiteWindowSurface::metric(PaintDeviceMetric met) const -{ - return QX11PaintEngine::metric(window(), met); -} diff --git a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h b/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h deleted file mode 100644 index 59faba8..0000000 --- a/src/plugins/graphicssystems/openvglite/qwindowsurface_vglite.h +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_VGLITE_H -#define QWINDOWSURFACE_VGLITE_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_NAMESPACE - -class QVGLiteGraphicsSystem; -class QVGPaintEngine; - -class Q_OPENVG_EXPORT QVGLiteWindowSurface : public QWindowSurface, public QPaintDevice -{ -public: - QVGLiteWindowSurface(QVGLiteGraphicsSystem *gs, QWidget *window); - ~QVGLiteWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - - QPaintEngine *paintEngine() const; - -protected: - int metric(PaintDeviceMetric metric) const; - -private: - QVGLiteGraphicsSystem *graphicsSystem; - bool isPaintingActive; - mutable QVGPaintEngine *engine; -}; - -QT_END_NAMESPACE - -#endif // QWINDOWSURFACE_VGLITE_H diff --git a/src/plugins/graphicssystems/qvfb/main.cpp b/src/plugins/graphicssystems/qvfb/main.cpp deleted file mode 100644 index b28dde8..0000000 --- a/src/plugins/graphicssystems/qvfb/main.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_qvfb.h" -#include - -QT_BEGIN_NAMESPACE - -class QVFbGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QVFbGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "QVFb"; - return list; -} - -QGraphicsSystem* QVFbGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "qvfb") - return new QVFbGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(qvfb, QVFbGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp deleted file mode 100644 index 19058a6..0000000 --- a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.cpp +++ /dev/null @@ -1,434 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include // overrides QT_OPEN - -#include -#include - -#include "qgraphicssystem_qvfb.h" -#include "qwindowsurface_qvfb.h" -#include -#include -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - - -class QVFbGraphicsSystemScreenKeyboardHandler : public QObject -{ - Q_OBJECT -public: - QVFbGraphicsSystemScreenKeyboardHandler(); - ~QVFbGraphicsSystemScreenKeyboardHandler(); - -private slots: - void readKeyboardData(); - -private: - int kbdFD; - int kbdIdx; - int kbdBufferLen; - unsigned char *kbdBuffer; - QSocketNotifier *keyNotifier; -}; - -QVFbGraphicsSystemScreenKeyboardHandler::QVFbGraphicsSystemScreenKeyboardHandler() -{ - int displayId = 0; //TODO displayId - const QString keyboardDev = QT_VFB_KEYBOARD_PIPE(displayId); - - - kbdFD = -1; - kbdIdx = 0; - kbdBufferLen = sizeof(QVFbKeyData) * 5; - kbdBuffer = new unsigned char [kbdBufferLen]; - - kbdFD = QT_OPEN(keyboardDev.toLatin1().constData(), O_RDWR | O_NDELAY); - - if (kbdFD == -1) { - perror("QVFbGraphicsSystemScreenKeyboardHandler"); - qWarning("QVFbGraphicsSystemScreenKeyboardHandler: Unable to open device %s", - qPrintable(keyboardDev)); - return; - } - - // Clear pending input - char buf[2]; - while (QT_READ(kbdFD, buf, 1) > 0) { } - - keyNotifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this); - connect(keyNotifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData())); - -} - -QVFbGraphicsSystemScreenKeyboardHandler::~QVFbGraphicsSystemScreenKeyboardHandler() -{ - if (kbdFD >= 0) - QT_CLOSE(kbdFD); - delete [] kbdBuffer; -} - - -void QVFbGraphicsSystemScreenKeyboardHandler::readKeyboardData() -{ - int n; - do { - n = QT_READ(kbdFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx); - if (n > 0) - kbdIdx += n; - } while (n > 0); - - int idx = 0; - while (kbdIdx - idx >= (int)sizeof(QVFbKeyData)) { - QVFbKeyData *kd = (QVFbKeyData *)(kbdBuffer + idx); - if (kd->unicode == 0 && kd->keycode == 0 && kd->modifiers == 0 && kd->press) { - // magic exit key - qWarning("Instructed to quit by Virtual Keyboard"); - qApp->quit(); - } - - //QWSServer::processKeyEvent(kd->unicode ? kd->unicode : 0xffff, kd->keycode, kd->modifiers, kd->press, kd->repeat); - - QEvent::Type type = kd->press ? QEvent::KeyPress : QEvent::KeyRelease; - - QString text; - if (kd->unicode && kd->unicode != 0xffff) - text += QChar(kd->unicode); - -// qDebug() << "readKeyboardData" << type << hex << kd->keycode << kd->modifiers << text; - - QWindowSystemInterface::handleKeyEvent(0, type, kd->keycode, kd->modifiers, text, kd->repeat, int(text.length())); - idx += sizeof(QVFbKeyData); - } - - int surplus = kbdIdx - idx; - for (int i = 0; i < surplus; i++) - kbdBuffer[i] = kbdBuffer[idx+i]; - kbdIdx = surplus; -} - - - - -class QVFbGraphicsSystemScreenMouseHandler : public QObject -{ - Q_OBJECT -public: - QVFbGraphicsSystemScreenMouseHandler(); - ~QVFbGraphicsSystemScreenMouseHandler(); - -private slots: - void readMouseData(); - -private: - int mouseFD; - int mouseIdx; - enum {mouseBufSize = 128}; - uchar mouseBuf[mouseBufSize]; - QSocketNotifier *mouseNotifier; - - int oldButtonState; -}; - -QVFbGraphicsSystemScreenMouseHandler::QVFbGraphicsSystemScreenMouseHandler() -{ - int displayId = 0; //TODO: displayId - QString mouseDev = QT_VFB_MOUSE_PIPE(displayId); - - mouseFD = QT_OPEN(mouseDev.toLatin1().constData(), O_RDWR | O_NDELAY); - - if (mouseFD == -1) { - perror("QVFbMouseHandler::QVFbMouseHandler"); - qWarning("QVFbMouseHander: Unable to open device %s", - qPrintable(mouseDev)); - return; - } - - // Clear pending input - char buf[2]; - while (QT_READ(mouseFD, buf, 1) > 0) { } - - mouseIdx = 0; - oldButtonState = 0; - mouseNotifier = new QSocketNotifier(mouseFD, QSocketNotifier::Read, this); - connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); -} - - -QVFbGraphicsSystemScreenMouseHandler::~QVFbGraphicsSystemScreenMouseHandler() -{ - if (mouseFD >= 0) - QT_CLOSE(mouseFD); -} - -void QVFbGraphicsSystemScreenMouseHandler::readMouseData() -{ - int n; - do { - n = QT_READ(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx); - if (n > 0) - mouseIdx += n; - } while (n > 0); - - int idx = 0; - static const int packetsize = sizeof(QPoint) + 2*sizeof(int); - while (mouseIdx-idx >= packetsize) { - uchar *mb = mouseBuf+idx; - QPoint mousePos = *reinterpret_cast(mb); - mb += sizeof(QPoint); - int bstate = *reinterpret_cast(mb); - mb += sizeof(int); - int wheel = *reinterpret_cast(mb); - - int button = bstate ^ oldButtonState; - QEvent::Type type = QEvent::MouseMove; - - if (button) { - type = (button & bstate) ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - } - QWindowSystemInterface::handleMouseEvent(0, mousePos, mousePos, Qt::MouseButtons(bstate)); - -// qDebug() << "readMouseData" << mousePos << button << bstate << oldButtonState << type; - - oldButtonState = bstate; - - idx += packetsize; - } - - int surplus = mouseIdx - idx; - for (int i = 0; i < surplus; i++) - mouseBuf[i] = mouseBuf[idx+i]; - mouseIdx = surplus; - -} - - -class QVFbGraphicsSystemScreenPrivate -{ -public: - QVFbGraphicsSystemScreenPrivate(QVFbGraphicsSystemScreen *) - : shmrgn(0), hdr(0), data(0), mouseHandler(0), keyboardHandler(0) - { - connect(0); //for now we only handle one screen - } - - ~QVFbGraphicsSystemScreenPrivate() { disconnect(); } - void setDirty(const QRect &r); - - bool connect(int displayId); - void disconnect(); - - QImage *screenImage() { return &img; } - QSize screenSize() { return img.size(); } - - int depth() const { return img.depth(); } - QImage::Format format() const { return img.format(); } - -private: - unsigned char *shmrgn; - QVFbHeader *hdr; - uchar *data; - QVFbGraphicsSystemScreenMouseHandler *mouseHandler; - QVFbGraphicsSystemScreenKeyboardHandler *keyboardHandler; - - - QImage img; -}; - - -void QVFbGraphicsSystemScreenPrivate::setDirty(const QRect &r) -{ - hdr->dirty = true; - hdr->update = hdr->update.united(r); -} - - -bool QVFbGraphicsSystemScreenPrivate::connect(int displayId) -{ - - key_t key = ftok(QT_VFB_MOUSE_PIPE(displayId).toLatin1(), 'b'); - - if (key == -1) - return false; - - - int shmId = shmget(key, 0, 0); - if (shmId != -1) - shmrgn = (unsigned char *)shmat(shmId, 0, 0); - else - return false; - - if ((long)shmrgn == -1 || shmrgn == 0) { - qDebug("No shmrgn %ld", (long)shmrgn); - return false; - } - - hdr = (QVFbHeader *)shmrgn; - data = shmrgn + hdr->dataoffset; - - int w = hdr->width; - int h = hdr->height; - int d = hdr->depth; - int lstep = hdr->linestep; - - QImage::Format format = QImage::Format_Invalid; - if (d == 32) - format = QImage::Format_ARGB32_Premultiplied; - else if (d == 16) - format = QImage::Format_RGB16; - - - if (format == QImage::Format_Invalid) { - img = QImage(); - return false; - } - - img = QImage(data, w, h, lstep, format); - - qDebug("connected %dx%d %d bpp", w, h, d); - - - mouseHandler = new QVFbGraphicsSystemScreenMouseHandler; - keyboardHandler = new QVFbGraphicsSystemScreenKeyboardHandler; - return true; -} - -void QVFbGraphicsSystemScreenPrivate::disconnect() -{ - if ((long)shmrgn != -1 && shmrgn) { - shmdt((char*)shmrgn); - shmrgn = 0; - } - delete mouseHandler; - mouseHandler = 0; - delete keyboardHandler; - keyboardHandler = 0; -} - - -QVFbGraphicsSystemScreen::QVFbGraphicsSystemScreen() -{ - d_ptr = new QVFbGraphicsSystemScreenPrivate(this); -} - - -QVFbGraphicsSystemScreen::~QVFbGraphicsSystemScreen() -{ - delete d_ptr; -} - -void QVFbGraphicsSystemScreen::setDirty(const QRect &rect) -{ - d_ptr->setDirty(rect); -} - - - -QRect QVFbGraphicsSystemScreen::geometry() const { - return QRect(QPoint(), d_ptr->screenSize()); -} - - -int QVFbGraphicsSystemScreen::depth() const -{ - return d_ptr->depth(); -} - -QImage::Format QVFbGraphicsSystemScreen::format() const -{ - return d_ptr->format(); -} - -QSize QVFbGraphicsSystemScreen::physicalSize() const { - return (d_ptr->screenSize()*254)/720; -} - -#if 0 -int QVFbGraphicsSystemScreen::linestep() const { - return d_ptr->screenImage() ? d_ptr->screenImage()->bytesPerLine() : 0; -} - -uchar *QVFbGraphicsSystemScreen::base() const { - return d_ptr->screenImage() ? d_ptr->screenImage()->bits() : 0; -} -#endif - -QImage *QVFbGraphicsSystemScreen::screenImage() -{ - return d_ptr->screenImage(); -} - -QVFbGraphicsSystem::QVFbGraphicsSystem() -{ - mPrimaryScreen = new QVFbGraphicsSystemScreen(); - - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QVFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QVFbGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. - return new QVFbWindowSurface - (const_cast(this), mPrimaryScreen, widget); -} - -QT_END_NAMESPACE - -#include "qgraphicssystem_qvfb.moc" diff --git a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.h b/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.h deleted file mode 100644 index b31869c..0000000 --- a/src/plugins/graphicssystems/qvfb/qgraphicssystem_qvfb.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_QVFB_H -#define QGRAPHICSSYSTEM_QVFB_H - -#include - -QT_BEGIN_NAMESPACE - - -class QVFbGraphicsSystemScreenPrivate; - -class QVFbGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QVFbGraphicsSystemScreen(); - ~QVFbGraphicsSystemScreen(); - - QRect geometry() const; - int depth() const; - QImage::Format format() const; - QSize physicalSize() const; - - QImage *screenImage(); - - void setDirty(const QRect &rect); - -public: - - QVFbGraphicsSystemScreenPrivate *d_ptr; -}; - -class QVFbGraphicsSystemPrivate; - - -class QVFbGraphicsSystem : public QGraphicsSystem -{ -public: - QVFbGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QList screens() const { return mScreens; } - -private: - QVFbGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; -}; - - - -QT_END_NAMESPACE - - -#endif diff --git a/src/plugins/graphicssystems/qvfb/qvfb.pro b/src/plugins/graphicssystems/qvfb/qvfb.pro deleted file mode 100644 index b321725..0000000 --- a/src/plugins/graphicssystems/qvfb/qvfb.pro +++ /dev/null @@ -1,12 +0,0 @@ -TARGET = qvfbgraphicssystem -include(../../qpluginbase.pri) - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - - - -SOURCES = main.cpp qgraphicssystem_qvfb.cpp qwindowsurface_qvfb.cpp -HEADERS = qgraphicssystem_qvfb.h qwindowsurface_qvfb.h - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp b/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp deleted file mode 100644 index 0aafe28..0000000 --- a/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.cpp +++ /dev/null @@ -1,104 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include "qwindowsurface_qvfb.h" -#include "qgraphicssystem_qvfb.h" -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QVFbWindowSurface::QVFbWindowSurface(QVFbGraphicsSystem *graphicsSystem, - QVFbGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), - mScreen(screen) -{ -} - -QVFbWindowSurface::~QVFbWindowSurface() -{ -} - -QPaintDevice *QVFbWindowSurface::paintDevice() -{ - return mScreen->screenImage(); -} - -void QVFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(offset); - - QRect rect = geometry(); - QPoint topLeft = rect.topLeft(); - - mScreen->setDirty(region.boundingRect()); -} - -void QVFbWindowSurface::setGeometry(const QRect &) -{ - -// any size you like as long as it's full-screen... - - QRect rect(mScreen->availableGeometry()); - QWindowSystemInterface::handleGeometryChange(this->window(), rect); - - QWindowSurface::setGeometry(rect); -} - -bool QVFbWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} - -void QVFbWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QVFbWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.h b/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.h deleted file mode 100644 index 1971caa..0000000 --- a/src/plugins/graphicssystems/qvfb/qwindowsurface_qvfb.h +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_QVFB_H -#define QWINDOWSURFACE_QVFB_H - -#include - -QT_BEGIN_NAMESPACE - -class QVFbGraphicsSystem; -class QVFbGraphicsSystemScreen; - -class QVFbWindowSurface : public QWindowSurface -{ -public: - QVFbWindowSurface(QVFbGraphicsSystem *graphicsSystem, - QVFbGraphicsSystemScreen *screen, QWidget *window); - ~QVFbWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - QVFbGraphicsSystem *mGraphicsSystem; - QVFbGraphicsSystemScreen *mScreen; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/testlite/main.cpp b/src/plugins/graphicssystems/testlite/main.cpp deleted file mode 100644 index 28caea7..0000000 --- a/src/plugins/graphicssystems/testlite/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_testlite.h" - -QT_BEGIN_NAMESPACE - -class QTestLiteGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QTestLiteGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "TestLite"; - return list; -} - -QGraphicsSystem* QTestLiteGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "testlite") - return new QTestLiteGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(testlite, QTestLiteGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp deleted file mode 100644 index 92e0ebc..0000000 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_testlite.h" -#include "qwindowsurface_testlite.h" -#include -#include - -#include - - -#include "x11util.h" - -QT_BEGIN_NAMESPACE - -class MyCursor : QGraphicsSystemCursor -{ -public: - MyCursor(QGraphicsSystemScreen *screen) : QGraphicsSystemCursor(screen) {} - - void changeCursor(QCursor * cursor, QWidget * widget) { - QTestLiteWindowSurface *ws = 0; - if (widget) { - QWidget *window = widget->window(); - ws = static_cast(window->windowSurface()); - } else { - // No X11 cursor control when there is no widget under the cursor - return; - } - - //qDebug() << "changeCursor" << widget << ws; - if (!ws) - return; - - ws->setCursor(cursor); - } -}; - - -QTestLiteGraphicsSystem::QTestLiteGraphicsSystem() -{ - - xd = new MyDisplay; - - mPrimaryScreen = new QTestLiteGraphicsSystemScreen(); - - mPrimaryScreen->mGeometry = QRect - (0, 0, xd->width, xd->height); - mPrimaryScreen->mDepth = 32; - mPrimaryScreen->mFormat = QImage::Format_RGB32; - mPrimaryScreen->mPhysicalSize = - QSize(xd->physicalWidth, xd->physicalHeight); - - mScreens.append(mPrimaryScreen); - - - (void)new MyCursor(mPrimaryScreen); - -} - -QPixmapData *QTestLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QTestLiteGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. - return new QTestLiteWindowSurface - (const_cast(this), mPrimaryScreen, widget); -} - - -QPixmap QTestLiteGraphicsSystem::grabWindow(WId window, int x, int y, int width, int height) const -{ - QImage img = xd->grabWindow(window, x, y, width, height); - return QPixmap::fromImage(img); -} - - - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h b/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h deleted file mode 100644 index b2cd496..0000000 --- a/src/plugins/graphicssystems/testlite/qgraphicssystem_testlite.h +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_TESTLITE_H -#define QGRAPHICSSYSTEM_TESTLITE_H - -#include - -QT_BEGIN_NAMESPACE - -class MyDisplay; - -class QTestLiteGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QTestLiteGraphicsSystemScreen() - : mDepth(16), mFormat(QImage::Format_RGB16) {} - ~QTestLiteGraphicsSystemScreen() {} - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - -public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; -}; - -class QTestLiteGraphicsSystem : public QGraphicsSystem -{ -public: - QTestLiteGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QPixmap grabWindow(WId window, int x, int y, int width, int height) const; - - QList screens() const { return mScreens; } - - MyDisplay *xd; - -private: - QTestLiteGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp deleted file mode 100644 index c54f6eb..0000000 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.cpp +++ /dev/null @@ -1,661 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_testlite.h" -#include "qgraphicssystem_testlite.h" - -#include -#include - -#include "x11util.h" - -QT_BEGIN_NAMESPACE - -QTestLiteWindowSurface::QTestLiteWindowSurface - (QTestLiteGraphicsSystem *graphicsSystem, - QTestLiteGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), - mGraphicsSystem(graphicsSystem), - mScreen(screen), - xw(0) -{ - - - xw = new MyWindow(graphicsSystem->xd, 0,0,300,300); - xw->windowSurface = this; - -// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; - - setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility -} - -QTestLiteWindowSurface::~QTestLiteWindowSurface() -{ -// qDebug() << "~QTestLiteWindowSurface" << xw->window; - delete xw; -} - -QPaintDevice *QTestLiteWindowSurface::paintDevice() -{ - return xw->image(); -} - -void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); - - // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this; - - xw->paintEvent(); -} - - -void QTestLiteWindowSurface::setGeometry(const QRect &rect) -{ - QRect oldRect = geometry(); - if (rect == oldRect) - return; - - QWindowSurface::setGeometry(rect); - - //if unchanged ### -// xw->setSize(rect.width(), rect.height()); - xw->setGeometry(rect.x(), rect.y(), rect.width(), rect.height()); -} - -//### scroll logic copied from QRasterWindowSurface, we should make better API for this - -void copied_qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) -{ - // make sure we don't detach - uchar *mem = const_cast(const_cast(img).bits()); - - int lineskip = img.bytesPerLine(); - int depth = img.depth() >> 3; - - const QRect imageRect(0, 0, img.width(), img.height()); - const QRect r = rect & imageRect & imageRect.translated(-offset); - const QPoint p = rect.topLeft() + offset; - - if (r.isEmpty()) - return; - - const uchar *src; - uchar *dest; - - if (r.top() < p.y()) { - src = mem + r.bottom() * lineskip + r.left() * depth; - dest = mem + (p.y() + r.height() - 1) * lineskip + p.x() * depth; - lineskip = -lineskip; - } else { - src = mem + r.top() * lineskip + r.left() * depth; - dest = mem + p.y() * lineskip + p.x() * depth; - } - - const int w = r.width(); - int h = r.height(); - const int bytes = w * depth; - - // overlapping segments? - if (offset.y() == 0 && qAbs(offset.x()) < w) { - do { - ::memmove(dest, src, bytes); - dest += lineskip; - src += lineskip; - } while (--h); - } else { - do { - ::memcpy(dest, src, bytes); - dest += lineskip; - src += lineskip; - } while (--h); - } -} - -bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - if (!xw->image() || xw->image()->isNull()) - return false; - - const QVector rects = area.rects(); - for (int i = 0; i < rects.size(); ++i) - copied_qt_scrollRectInImage(*xw->image(), rects.at(i), QPoint(dx, dy)); - - return true; -} - - -void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - xw->resizeBuffer(geometry().size()); -} - -void QTestLiteWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - xw->painted = true; //there is content in the buffer -} - - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Mouse event stuff - - - - -static Qt::MouseButtons translateMouseButtons(int s) -{ - Qt::MouseButtons ret = 0; - if (s & Button1Mask) - ret |= Qt::LeftButton; - if (s & Button2Mask) - ret |= Qt::MidButton; - if (s & Button3Mask) - ret |= Qt::RightButton; - return ret; -} - - -static Qt::KeyboardModifiers translateModifiers(int s) -{ - const uchar qt_alt_mask = Mod1Mask; - const uchar qt_meta_mask = Mod4Mask; - - - Qt::KeyboardModifiers ret = 0; - if (s & ShiftMask) - ret |= Qt::ShiftModifier; - if (s & ControlMask) - ret |= Qt::ControlModifier; - if (s & qt_alt_mask) - ret |= Qt::AltModifier; - if (s & qt_meta_mask) - ret |= Qt::MetaModifier; -#if 0 - if (s & qt_mode_switch_mask) - ret |= Qt::GroupSwitchModifier; -#endif - return ret; -} - -void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) -{ - static QPoint mousePoint; - - XButtonEvent *e = static_cast(ev); - - Qt::MouseButton button = Qt::NoButton; - Qt::MouseButtons buttons = translateMouseButtons(e->state); - Qt::KeyboardModifiers modifiers = translateModifiers(e->state); - if (type != QEvent::MouseMove) { - switch (e->button) { - case Button1: button = Qt::LeftButton; break; - case Button2: button = Qt::MidButton; break; - case Button3: button = Qt::RightButton; break; - case Button4: - case Button5: - case 6: - case 7: { - //mouse wheel - if (type == QEvent::MouseButtonPress) { - //logic borrowed from qapplication_x11.cpp - int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); - bool hor = (((e->button == Button4 || e->button == Button5) - && (modifiers & Qt::AltModifier)) - || (e->button == 6 || e->button == 7)); - QWindowSystemInterface::handleWheelEvent(window(), e->time, - QPoint(e->x, e->y), - QPoint(e->x_root, e->y_root), - delta, hor ? Qt::Horizontal : Qt::Vertical); - } - return; - } - default: break; - } - } - - buttons ^= button; // X event uses state *before*, Qt uses state *after* - - QWindowSystemInterface::handleMouseEvent(window(), e->time, QPoint(e->x, e->y), - QPoint(e->x_root, e->y_root), - buttons); - - mousePoint = QPoint(e->x_root, e->y_root); -} - -void QTestLiteWindowSurface::handleGeometryChange(int x, int y, int w, int h) -{ - QWindowSystemInterface::handleGeometryChange(window(), QRect(x,y,w,h)); -} - - -void QTestLiteWindowSurface::handleCloseEvent() -{ - QWindowSystemInterface::handleCloseEvent(window()); -} - - -void QTestLiteWindowSurface::handleEnterEvent() -{ - QWindowSystemInterface::handleEnterEvent(window()); -} - -void QTestLiteWindowSurface::handleLeaveEvent() -{ - QWindowSystemInterface::handleLeaveEvent(window()); -} - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Key event stuff -- not pretty either -// -// What we want to do is to port Robert's keytable code properly - - - - - - - -// keyboard mapping table -static const unsigned int keyTbl[] = { - - // misc keys - - XK_Escape, Qt::Key_Escape, - XK_Tab, Qt::Key_Tab, - XK_ISO_Left_Tab, Qt::Key_Backtab, - XK_BackSpace, Qt::Key_Backspace, - XK_Return, Qt::Key_Return, - XK_Insert, Qt::Key_Insert, - XK_Delete, Qt::Key_Delete, - XK_Clear, Qt::Key_Delete, - XK_Pause, Qt::Key_Pause, - XK_Print, Qt::Key_Print, - 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq - 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq - - // cursor movement - - XK_Home, Qt::Key_Home, - XK_End, Qt::Key_End, - XK_Left, Qt::Key_Left, - XK_Up, Qt::Key_Up, - XK_Right, Qt::Key_Right, - XK_Down, Qt::Key_Down, - XK_Prior, Qt::Key_PageUp, - XK_Next, Qt::Key_PageDown, - - // modifiers - - XK_Shift_L, Qt::Key_Shift, - XK_Shift_R, Qt::Key_Shift, - XK_Shift_Lock, Qt::Key_Shift, - XK_Control_L, Qt::Key_Control, - XK_Control_R, Qt::Key_Control, - XK_Meta_L, Qt::Key_Meta, - XK_Meta_R, Qt::Key_Meta, - XK_Alt_L, Qt::Key_Alt, - XK_Alt_R, Qt::Key_Alt, - XK_Caps_Lock, Qt::Key_CapsLock, - XK_Num_Lock, Qt::Key_NumLock, - XK_Scroll_Lock, Qt::Key_ScrollLock, - XK_Super_L, Qt::Key_Super_L, - XK_Super_R, Qt::Key_Super_R, - XK_Menu, Qt::Key_Menu, - XK_Hyper_L, Qt::Key_Hyper_L, - XK_Hyper_R, Qt::Key_Hyper_R, - XK_Help, Qt::Key_Help, - 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab - 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) - 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) - - // numeric and function keypad keys - - XK_KP_Space, Qt::Key_Space, - XK_KP_Tab, Qt::Key_Tab, - XK_KP_Enter, Qt::Key_Enter, - //XK_KP_F1, Qt::Key_F1, - //XK_KP_F2, Qt::Key_F2, - //XK_KP_F3, Qt::Key_F3, - //XK_KP_F4, Qt::Key_F4, - XK_KP_Home, Qt::Key_Home, - XK_KP_Left, Qt::Key_Left, - XK_KP_Up, Qt::Key_Up, - XK_KP_Right, Qt::Key_Right, - XK_KP_Down, Qt::Key_Down, - XK_KP_Prior, Qt::Key_PageUp, - XK_KP_Next, Qt::Key_PageDown, - XK_KP_End, Qt::Key_End, - XK_KP_Begin, Qt::Key_Clear, - XK_KP_Insert, Qt::Key_Insert, - XK_KP_Delete, Qt::Key_Delete, - XK_KP_Equal, Qt::Key_Equal, - XK_KP_Multiply, Qt::Key_Asterisk, - XK_KP_Add, Qt::Key_Plus, - XK_KP_Separator, Qt::Key_Comma, - XK_KP_Subtract, Qt::Key_Minus, - XK_KP_Decimal, Qt::Key_Period, - XK_KP_Divide, Qt::Key_Slash, - - // International input method support keys - - // International & multi-key character composition - XK_ISO_Level3_Shift, Qt::Key_AltGr, - XK_Multi_key, Qt::Key_Multi_key, - XK_Codeinput, Qt::Key_Codeinput, - XK_SingleCandidate, Qt::Key_SingleCandidate, - XK_MultipleCandidate, Qt::Key_MultipleCandidate, - XK_PreviousCandidate, Qt::Key_PreviousCandidate, - - // Misc Functions - XK_Mode_switch, Qt::Key_Mode_switch, - XK_script_switch, Qt::Key_Mode_switch, - - // Japanese keyboard support - XK_Kanji, Qt::Key_Kanji, - XK_Muhenkan, Qt::Key_Muhenkan, - //XK_Henkan_Mode, Qt::Key_Henkan_Mode, - XK_Henkan_Mode, Qt::Key_Henkan, - XK_Henkan, Qt::Key_Henkan, - XK_Romaji, Qt::Key_Romaji, - XK_Hiragana, Qt::Key_Hiragana, - XK_Katakana, Qt::Key_Katakana, - XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana, - XK_Zenkaku, Qt::Key_Zenkaku, - XK_Hankaku, Qt::Key_Hankaku, - XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku, - XK_Touroku, Qt::Key_Touroku, - XK_Massyo, Qt::Key_Massyo, - XK_Kana_Lock, Qt::Key_Kana_Lock, - XK_Kana_Shift, Qt::Key_Kana_Shift, - XK_Eisu_Shift, Qt::Key_Eisu_Shift, - XK_Eisu_toggle, Qt::Key_Eisu_toggle, - //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou, - //XK_Zen_Koho, Qt::Key_Zen_Koho, - //XK_Mae_Koho, Qt::Key_Mae_Koho, - XK_Kanji_Bangou, Qt::Key_Codeinput, - XK_Zen_Koho, Qt::Key_MultipleCandidate, - XK_Mae_Koho, Qt::Key_PreviousCandidate, - -#ifdef XK_KOREAN - // Korean keyboard support - XK_Hangul, Qt::Key_Hangul, - XK_Hangul_Start, Qt::Key_Hangul_Start, - XK_Hangul_End, Qt::Key_Hangul_End, - XK_Hangul_Hanja, Qt::Key_Hangul_Hanja, - XK_Hangul_Jamo, Qt::Key_Hangul_Jamo, - XK_Hangul_Romaja, Qt::Key_Hangul_Romaja, - //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput, - XK_Hangul_Codeinput, Qt::Key_Codeinput, - XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja, - XK_Hangul_Banja, Qt::Key_Hangul_Banja, - XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja, - XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja, - //XK_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate, - //XK_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate, - //XK_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate, - XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate, - XK_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate, - XK_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate, - XK_Hangul_Special, Qt::Key_Hangul_Special, - //XK_Hangul_switch, Qt::Key_Hangul_switch, - XK_Hangul_switch, Qt::Key_Mode_switch, -#endif // XK_KOREAN - - // dead keys - XK_dead_grave, Qt::Key_Dead_Grave, - XK_dead_acute, Qt::Key_Dead_Acute, - XK_dead_circumflex, Qt::Key_Dead_Circumflex, - XK_dead_tilde, Qt::Key_Dead_Tilde, - XK_dead_macron, Qt::Key_Dead_Macron, - XK_dead_breve, Qt::Key_Dead_Breve, - XK_dead_abovedot, Qt::Key_Dead_Abovedot, - XK_dead_diaeresis, Qt::Key_Dead_Diaeresis, - XK_dead_abovering, Qt::Key_Dead_Abovering, - XK_dead_doubleacute, Qt::Key_Dead_Doubleacute, - XK_dead_caron, Qt::Key_Dead_Caron, - XK_dead_cedilla, Qt::Key_Dead_Cedilla, - XK_dead_ogonek, Qt::Key_Dead_Ogonek, - XK_dead_iota, Qt::Key_Dead_Iota, - XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound, - XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound, - XK_dead_belowdot, Qt::Key_Dead_Belowdot, - XK_dead_hook, Qt::Key_Dead_Hook, - XK_dead_horn, Qt::Key_Dead_Horn, - -#if 0 - // Special multimedia keys - // currently only tested with MS internet keyboard - - // browsing keys - XF86XK_Back, Qt::Key_Back, - XF86XK_Forward, Qt::Key_Forward, - XF86XK_Stop, Qt::Key_Stop, - XF86XK_Refresh, Qt::Key_Refresh, - XF86XK_Favorites, Qt::Key_Favorites, - XF86XK_AudioMedia, Qt::Key_LaunchMedia, - XF86XK_OpenURL, Qt::Key_OpenUrl, - XF86XK_HomePage, Qt::Key_HomePage, - XF86XK_Search, Qt::Key_Search, - - // media keys - XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, - XF86XK_AudioMute, Qt::Key_VolumeMute, - XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, - XF86XK_AudioPlay, Qt::Key_MediaPlay, - XF86XK_AudioStop, Qt::Key_MediaStop, - XF86XK_AudioPrev, Qt::Key_MediaPrevious, - XF86XK_AudioNext, Qt::Key_MediaNext, - XF86XK_AudioRecord, Qt::Key_MediaRecord, - - // launch keys - XF86XK_Mail, Qt::Key_LaunchMail, - XF86XK_MyComputer, Qt::Key_Launch0, - XF86XK_Calculator, Qt::Key_Launch1, - XF86XK_Standby, Qt::Key_Standby, - - XF86XK_Launch0, Qt::Key_Launch2, - XF86XK_Launch1, Qt::Key_Launch3, - XF86XK_Launch2, Qt::Key_Launch4, - XF86XK_Launch3, Qt::Key_Launch5, - XF86XK_Launch4, Qt::Key_Launch6, - XF86XK_Launch5, Qt::Key_Launch7, - XF86XK_Launch6, Qt::Key_Launch8, - XF86XK_Launch7, Qt::Key_Launch9, - XF86XK_Launch8, Qt::Key_LaunchA, - XF86XK_Launch9, Qt::Key_LaunchB, - XF86XK_LaunchA, Qt::Key_LaunchC, - XF86XK_LaunchB, Qt::Key_LaunchD, - XF86XK_LaunchC, Qt::Key_LaunchE, - XF86XK_LaunchD, Qt::Key_LaunchF, -#endif - -#if 0 - // Qtopia keys - QTOPIAXK_Select, Qt::Key_Select, - QTOPIAXK_Yes, Qt::Key_Yes, - QTOPIAXK_No, Qt::Key_No, - QTOPIAXK_Cancel, Qt::Key_Cancel, - QTOPIAXK_Printer, Qt::Key_Printer, - QTOPIAXK_Execute, Qt::Key_Execute, - QTOPIAXK_Sleep, Qt::Key_Sleep, - QTOPIAXK_Play, Qt::Key_Play, - QTOPIAXK_Zoom, Qt::Key_Zoom, - QTOPIAXK_Context1, Qt::Key_Context1, - QTOPIAXK_Context2, Qt::Key_Context2, - QTOPIAXK_Context3, Qt::Key_Context3, - QTOPIAXK_Context4, Qt::Key_Context4, - QTOPIAXK_Call, Qt::Key_Call, - QTOPIAXK_Hangup, Qt::Key_Hangup, - QTOPIAXK_Flip, Qt::Key_Flip, -#endif - 0, 0 -}; - - -static int lookupCode(unsigned int xkeycode) -{ - if (xkeycode >= XK_F1 && xkeycode <= XK_F35) - return Qt::Key_F1 + (int(xkeycode) - XK_F1); - - const unsigned int *p = keyTbl; - while (*p) { - if (*p == xkeycode) - return *++p; - p += 2; - } - - return 0; -} - - -static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) -{ - switch (qtcode) { - case Qt::Key_Control: - return Qt::ControlModifier; - case Qt::Key_Alt: - return Qt::AltModifier; - case Qt::Key_Shift: - return Qt::ShiftModifier; - case Qt::Key_Meta: - return Qt::MetaModifier; - default: - return Qt::NoModifier; - } -} - -void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) -{ - XKeyEvent *e = static_cast(ev); - - KeySym keySym; - QByteArray chars; - chars.resize(513); - - int count = XLookupString(e, chars.data(), chars.size(), &keySym, 0); - -// qDebug() << "QTLWS::handleKeyEvent" << count << hex << "XKeysym:" << keySym; -// if (count) -// qDebug() << hex << int(chars[0]) << "String:" << chars; - - Qt::KeyboardModifiers modifiers = translateModifiers(e->state); - - int qtcode = lookupCode(keySym); -// qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers; - - //X11 specifies state *before*, Qt expects state *after* the event - - modifiers ^= modifierFromKeyCode(qtcode); - - if (qtcode) { - QWindowSystemInterface::handleKeyEvent(window(), e->time, type, qtcode, modifiers); - } else if (chars[0]) { - int qtcode = chars.toUpper()[0]; //Not exactly right... - if (modifiers & Qt::ControlModifier && qtcode < ' ') - qtcode = chars[0] + '@'; - QWindowSystemInterface::handleKeyEvent(window(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); - } else { - qWarning() << "unknown X keycode" << hex << e->keycode << keySym; - } -} - - - -Qt::WindowFlags QTestLiteWindowSurface::setWindowFlags(Qt::WindowFlags flags) -{ - Q_ASSERT(flags & Qt::Window); - - window_flags = flags; - - xw->setWindowFlags(flags); - - return window_flags; - -} - -Qt::WindowFlags QTestLiteWindowSurface::windowFlags() const -{ - return window_flags; -} - -void QTestLiteWindowSurface::setVisible(bool visible) -{ - //qDebug() << "QTestLiteWindowSurface::setVisible" << visible << xw->window; - xw->setVisible(visible); -} - - -WId QTestLiteWindowSurface::winId() const -{ - if (xw) - return (WId) xw->window; - else - return WId(0); -} - -void QTestLiteWindowSurface::raise() -{ - WId window = winId(); - XRaiseWindow(mGraphicsSystem->xd->display, window); -} - -void QTestLiteWindowSurface::lower() -{ - WId window = winId(); - XLowerWindow(mGraphicsSystem->xd->display, window); -} - -void QTestLiteWindowSurface::setWindowTitle(const QString &title) -{ - xw->setWindowTitle(title); -} - -void QTestLiteWindowSurface::setCursor(QCursor *cursor) -{ - xw->setCursor(cursor); -} -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h b/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h deleted file mode 100644 index 0c4df1a..0000000 --- a/src/plugins/graphicssystems/testlite/qwindowsurface_testlite.h +++ /dev/null @@ -1,96 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_TESTLITE_H -#define QWINDOWSURFACE_TESTLITE_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class MyWindow; -class QTestLiteGraphicsSystem; -class QTestLiteGraphicsSystemScreen; - -class QTestLiteWindowSurface : public QWindowSurface -{ -public: - QTestLiteWindowSurface - (QTestLiteGraphicsSystem *graphicsSystem, - QTestLiteGraphicsSystemScreen *screen, QWidget *window); - ~QTestLiteWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - - void handleMouseEvent(QEvent::Type, void *); //forwarding X types is apparently impossible :( - void handleKeyEvent(QEvent::Type, void *); - void handleGeometryChange(int x, int y, int w, int h); - void handleCloseEvent(); - void handleEnterEvent(); - void handleLeaveEvent(); - - Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - Qt::WindowFlags windowFlags() const; - void setVisible(bool visible); - WId winId() const; - void raise(); - void lower(); - void setWindowTitle(const QString &title); - - void setCursor(QCursor * cursor); - -private: - QTestLiteGraphicsSystem *mGraphicsSystem; - QTestLiteGraphicsSystemScreen *mScreen; - Qt::WindowFlags window_flags; - MyWindow *xw; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/graphicssystems/testlite/testlite.pro b/src/plugins/graphicssystems/testlite/testlite.pro deleted file mode 100644 index d483f45..0000000 --- a/src/plugins/graphicssystems/testlite/testlite.pro +++ /dev/null @@ -1,17 +0,0 @@ -TARGET = qtestlitegraphicssystem -include(../../qpluginbase.pri) - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -SOURCES = main.cpp qgraphicssystem_testlite.cpp qwindowsurface_testlite.cpp -HEADERS = qgraphicssystem_testlite.h qwindowsurface_testlite.h - - -HEADERS += x11util.h -SOURCES += x11util.cpp - -LIBS += -lX11 -lXext - - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/graphicssystems/testlite/x11util.cpp b/src/plugins/graphicssystems/testlite/x11util.cpp deleted file mode 100644 index 6d2966f..0000000 --- a/src/plugins/graphicssystems/testlite/x11util.cpp +++ /dev/null @@ -1,1215 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -#include -#include -#include - -#include "x11util.h" -#include "qwindowsurface_testlite.h" - -#include -#include - - -#include - -#include - -# include -# include -# include - - -#include -#include -#include -#include - -//### remove stuff we don't want from qt_x11_p.h -#undef ATOM -#undef X11 - -//#define MYX11_DEBUG - -//#define DONT_USE_MIT_SHM - -static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); -static bool seen_badwindow; - - -static Atom wmProtocolsAtom; -static Atom wmDeleteWindowAtom; - -//### copied from qapplication_x11.cpp - -static int qt_x_errhandler(Display *dpy, XErrorEvent *err) -{ - -qDebug() << "qt_x_errhandler" << err->error_code; - - switch (err->error_code) { - case BadAtom: -#if 0 - if (err->request_code == 20 /* X_GetProperty */ - && (err->resourceid == XA_RESOURCE_MANAGER - || err->resourceid == XA_RGB_DEFAULT_MAP - || err->resourceid == ATOM(_NET_SUPPORTED) - || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) - || err->resourceid == ATOM(KDE_FULL_SESSION) - || err->resourceid == ATOM(KWIN_RUNNING) - || err->resourceid == ATOM(XdndProxy) - || err->resourceid == ATOM(XdndAware)) - - - ) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } -#endif - qDebug() << "BadAtom"; - break; - - case BadWindow: - if (err->request_code == 2 /* X_ChangeWindowAttributes */ - || err->request_code == 38 /* X_QueryPointer */) { - for (int i = 0; i < ScreenCount(dpy); ++i) { - if (err->resourceid == RootWindow(dpy, i)) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } - } - } - seen_badwindow = true; - if (err->request_code == 25 /* X_SendEvent */) { - for (int i = 0; i < ScreenCount(dpy); ++i) { - if (err->resourceid == RootWindow(dpy, i)) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } - } -#if 0 - if (X11->xdndHandleBadwindow()) { - qDebug("xdndHandleBadwindow returned true"); - return 0; - } -#endif - } -#if 0 - if (X11->ignore_badwindow) - return 0; -#endif - break; - - case BadMatch: - if (err->request_code == 42 /* X_SetInputFocus */) - return 0; - break; - - default: -#if 0 //!defined(QT_NO_XINPUT) - if (err->request_code == X11->xinput_major - && err->error_code == (X11->xinput_errorbase + XI_BadDevice) - && err->minor_code == 3 /* X_OpenDevice */) { - return 0; - } -#endif - break; - } - - char errstr[256]; - XGetErrorText( dpy, err->error_code, errstr, 256 ); - char buffer[256]; - char request_str[256]; - qsnprintf(buffer, 256, "%d", err->request_code); - XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); - if (err->request_code < 128) { - // X error for a normal protocol request - qWarning( "X Error: %s %d\n" - " Major opcode: %d (%s)\n" - " Resource id: 0x%lx", - errstr, err->error_code, - err->request_code, - request_str, - err->resourceid ); - } else { - // X error for an extension request - const char *extensionName = 0; -#if 0 - if (err->request_code == X11->xrender_major) - extensionName = "RENDER"; - else if (err->request_code == X11->xrandr_major) - extensionName = "RANDR"; - else if (err->request_code == X11->xinput_major) - extensionName = "XInputExtension"; - else if (err->request_code == X11->mitshm_major) - extensionName = "MIT-SHM"; -#endif - char minor_str[256]; - if (extensionName) { - qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); - XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); - } else { - extensionName = "Uknown extension"; - qsnprintf(minor_str, 256, "Unknown request"); - } - qWarning( "X Error: %s %d\n" - " Extension: %d (%s)\n" - " Minor opcode: %d (%s)\n" - " Resource id: 0x%lx", - errstr, err->error_code, - err->request_code, - extensionName, - err->minor_code, - minor_str, - err->resourceid ); - } - - // ### we really should distinguish between severe, non-severe and - // ### application specific errors - - return 0; -} - - - - - - - - - -bool MyDisplay::handleEvent(XEvent *xe) -{ - //qDebug() << "handleEvent" << xe->xany.type << xe->xany.window; - int quit = false; - MyWindow *xw = 0; - foreach (MyWindow *w, windowList) { - if (w->window == xe->xany.window) { - xw = w; - break; - } - } - if (!xw) { -#ifdef MYX11_DEBUG - qWarning() << "Unknown window" << hex << xe->xany.window << "received event" << xe->type; -#endif - return quit; - } - - switch (xe->type) { - - case ClientMessage: - if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { - Atom a = xe->xclient.data.l[0]; - if (a == wmDeleteWindowAtom) - xw->closeEvent(); -#ifdef MYX11_DEBUG - qDebug() << "ClientMessage WM_PROTOCOLS" << a; -#endif - } -#ifdef MYX11_DEBUG - else - qDebug() << "ClientMessage" << xe->xclient.format << xe->xclient.message_type; -#endif - break; - - case Expose: - if (xw) - if (xe->xexpose.count == 0) - xw->paintEvent(); - break; - case ConfigureNotify: - if (xw) - xw->resizeEvent(&xe->xconfigure); - break; - - case ButtonPress: - xw->mousePressEvent(&xe->xbutton); - break; - - case ButtonRelease: - xw->mouseReleaseEvent(&xe->xbutton); - break; - - case MotionNotify: - xw->mouseMoveEvent(&xe->xbutton); - break; - - case XKeyPress: - xw->keyPressEvent(&xe->xkey); - break; - - case XKeyRelease: - xw->keyReleaseEvent(&xe->xkey); - break; - - case EnterNotify: - xw->enterEvent(&xe->xcrossing); - break; - - case LeaveNotify: - xw->leaveEvent(&xe->xcrossing); - break; - - default: -#ifdef MYX11_DEBUG - qDebug() << hex << xe->xany.window << "Other X event" << xe->type; -#endif - break; - } - return quit; -}; - - - -MyDisplay::MyDisplay() -{ - char *display_name = getenv("DISPLAY"); - display = XOpenDisplay(display_name); - if (!display) { - fprintf(stderr, "Cannot connect to X server: %s\n", - display_name); - exit(1); - } - -#ifndef DONT_USE_MIT_SHM - Status MIT_SHM_extension_supported = XShmQueryExtension (display); - Q_ASSERT(MIT_SHM_extension_supported == True); -#endif - original_x_errhandler = XSetErrorHandler(qt_x_errhandler); - - if (qgetenv("DO_X_SYNCHRONIZE").toInt()) - XSynchronize(display, true); - - screen = DefaultScreen(display); - width = DisplayWidth(display, screen); - height = DisplayHeight(display, screen); - physicalWidth = DisplayWidthMM(display, screen); - physicalHeight = DisplayHeightMM(display, screen); - - int xSocketNumber = XConnectionNumber(display); -#ifdef MYX11_DEBUG - qDebug() << "X socket:"<< xSocketNumber; -#endif - QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); - connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); - - wmProtocolsAtom = XInternAtom (display, "WM_PROTOCOLS", False); - wmDeleteWindowAtom = XInternAtom (display, "WM_DELETE_WINDOW", False); - - cursors = new MyX11Cursors(display); -} - - -MyDisplay::~MyDisplay() -{ - XCloseDisplay(display); -} - - -void MyDisplay::eventDispatcher() -{ -// qDebug() << "eventDispatcher"; - - - ulong marker = XNextRequest(display); -// int i = 0; - while (XPending(display)) { - XEvent event; - XNextEvent(display, &event); - /* done = */ - handleEvent(&event); - - if (event.xany.serial >= marker) { -#ifdef MYX11_DEBUG - qDebug() << "potential livelock averted"; -#endif -#if 0 - if (XEventsQueued(display, QueuedAfterFlush)) { - qDebug() << " with events queued"; - QTimer::singleShot(0, this, SLOT(eventDispatcher())); - } -#endif - break; - } - } -} - - -QImage MyDisplay::grabWindow(Window window, int x, int y, int w, int h) -{ - if (w == 0 || h ==0) - return QImage(); - - //WinId 0 means the desktop widget - if (!window) - window = rootWindow(); - - XWindowAttributes window_attr; - if (!XGetWindowAttributes(display, window, &window_attr)) - return QImage(); - - if (w < 0) - w = window_attr.width - x; - if (h < 0) - h = window_attr.height - y; - - // Ideally, we should also limit ourselves to the screen area, but the Qt docs say - // that it's "unsafe" to go outside the screen, so we can ignore that problem. - - //We're definitely not optimizing for speed... - XImage *xi = XGetImage(display, window, x, y, w, h, AllPlanes, ZPixmap); - - if (!xi) - return QImage(); - - //taking a copy to make sure we have ownership -- not fast - QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); - - XDestroyImage(xi); - - return result; -} - - - - -struct MyShmImageInfo { - MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} - ~MyShmImageInfo() { destroy(); } - - void destroy(); - - XShmSegmentInfo shminfo; - XImage *image; - Display *display; -}; - -MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) -{ - xd = display; - - xd->windowList.append(this); - - window = XCreateSimpleWindow(xd->display, xd->rootWindow(), - x, y, w, h, 0 /*border_width*/, - xd->blackPixel(), xd->whitePixel()); - - -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::MyWindow" << hex << window; -#endif - - - width = -1; - height = -1; - xpos = -1; - ypos = -1; - - XSetWindowBackgroundPixmap(xd->display, window, XNone); - - XSelectInput(xd->display, window, ExposureMask | KeyPressMask | KeyReleaseMask | - EnterWindowMask | LeaveWindowMask | FocusChangeMask | - PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | - StructureNotifyMask); - - gc = createGC(); - - XChangeProperty (xd->display, window, - wmProtocolsAtom, - XA_ATOM, 32, PropModeAppend, - (unsigned char *) &wmDeleteWindowAtom, 1); - - - setWindowTitle(QLatin1String("Qt Lighthouse")); - - currentCursor = -1; - - image_info = 0; - painted = false; -} - - -void MyWindow::setWindowTitle(const QString &title) - -{ - QByteArray ba = title.toLatin1(); //We're not making a general solution here... - XTextProperty windowName; - windowName.value = (unsigned char *)ba.constData(); - windowName.encoding = XA_STRING; - windowName.format = 8; - windowName.nitems = ba.length(); - - XSetWMName(xd->display, window, &windowName); -} - -MyWindow::~MyWindow() -{ -#ifdef MYX11_DEBUG - qDebug() << "~MyWindow" << hex << window; -#endif - XFreeGC(xd->display, gc); - XDestroyWindow(xd->display, window); - - xd->windowList.removeAll(this); - - delete image_info; -} - -GC MyWindow::createGC() -{ - GC gc; - - gc = XCreateGC(xd->display, window, 0, 0); - if (gc < 0) { - qWarning("MyWindow::createGC() could not create GC"); - } - return gc; -} - -void MyWindow::closeEvent() -{ - windowSurface->handleCloseEvent(); -} - -void MyWindow::paintEvent() -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::paintEvent" << shm_img.size() << painted; -#endif - if (!painted) - return; - -#ifdef DONT_USE_MIT_SHM - // just convert the image every time... - if (!shm_img.isNull()) { - Visual *visual = DefaultVisual(xd->display, xd->screen); - - QImage image = shm_img; - //img.convertToFormat( - XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, - 0, (char *) image.scanLine(0), image.width(), image.height(), - 32, image.bytesPerLine()); - - int x = 0; - int y = 0; - - /*int r =*/ XPutImage(xd->display, window, gc, xi, 0, 0, x, y, image.width(), image.height()); - - xi->data = 0; // QImage owns these bits - XDestroyImage(xi); - } -#else - // Use MIT_SHM - if (image_info->image) { - //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; - int x = 0; - int y = 0; - - // We could set send_event to true, and then use the ShmCompletion to synchronize, - // but let's do like Qt/11 and just use XSync - XShmPutImage (xd->display, window, gc, image_info->image, 0, 0, - x, y, image_info->image->width, image_info->image->height, - /*send_event*/ False); - - XSync(xd->display, False); - } -#endif -} - -#ifndef DONT_USE_MIT_SHM -void MyShmImageInfo::destroy() -{ - XShmDetach (display, &shminfo); - XDestroyImage (image); - shmdt (shminfo.shmaddr); - shmctl (shminfo.shmid, IPC_RMID, 0); -} -#endif - -void MyWindow::resizeShmImage(int width, int height) -{ -#ifdef DONT_USE_MIT_SHM - shm_img = QImage(width, height, QImage::Format_RGB32); -#else - if (image_info) - image_info->destroy(); - else - image_info = new MyShmImageInfo(xd->display); - - Visual *visual = DefaultVisual(xd->display, xd->screen); - - - XImage *image = XShmCreateImage (xd->display, visual, 24, ZPixmap, 0, - &image_info->shminfo, width, height); - - - image_info->shminfo.shmid = shmget (IPC_PRIVATE, - image->bytes_per_line * image->height, IPC_CREAT|0777); - - image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); - image_info->shminfo.readOnly = False; - - image_info->image = image; - - Status shm_attach_status = XShmAttach(xd->display, &image_info->shminfo); - - Q_ASSERT(shm_attach_status == True); - - shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); -#endif - painted = false; -} - - -void MyWindow::resizeBuffer(QSize s) -{ - if (shm_img.size() != s) - resizeShmImage(s.width(), s.height()); -} - -QSize MyWindow::bufferSize() const -{ - return shm_img.size(); -} - - -void MyWindow::resizeEvent(XConfigureEvent *e) -{ - - if ((e->width != width || e->height != height) && e->x == 0 && e->y == 0) { - //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; - } else { - //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; - xpos = e->x; - ypos = e->y; - } - width = e->width; - height = e->height; - -#ifdef MYX11_DEBUG - qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height << "img:" << shm_img.size(); -#endif - - windowSurface->handleGeometryChange(xpos, ypos, width, height); -} - -#if 0 -void MyWindow::setSize(int w, int h) -{ - XResizeWindow(xd->display, window, w, h); -} -#endif - -void MyWindow::setGeometry(int x, int y, int w, int h) -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::setGeometry" << hex << window << dec << x << y << w << h << "img:" << shm_img.size(); -#endif - XMoveResizeWindow(xd->display, window, x, y, w, h); -} - - -void MyWindow::enterEvent(XCrossingEvent *) -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::enterEvent" << hex << window; -#endif - windowSurface->handleEnterEvent(); -} - -void MyWindow::leaveEvent(XCrossingEvent *) -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::enterEvent" << hex << window; -#endif - windowSurface->handleLeaveEvent(); -} - -void MyWindow::mousePressEvent(XButtonEvent *e) -{ - static long prevTime = 0; - static Window prevWindow; - static int prevX = -999; - static int prevY = -999; - - QEvent::Type type = QEvent::MouseButtonPress; - - if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() - && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { - type = QEvent::MouseButtonDblClick; - prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time - } else { - prevTime = e->time; - } - prevWindow = e->window; - prevX = e->x; - prevY = e->y; - - windowSurface->handleMouseEvent(type, e); -} - -void MyWindow::mouseReleaseEvent(XButtonEvent *e) -{ - windowSurface->handleMouseEvent(QEvent::MouseButtonRelease, e); -} - -void MyWindow::mouseMoveEvent(XButtonEvent *e) -{ - windowSurface->handleMouseEvent(QEvent::MouseMove, e); -} - -#ifdef KeyPress -#undef KeyPress -#endif - -void MyWindow::keyPressEvent(XKeyEvent *e) -{ - windowSurface->handleKeyEvent(QEvent::KeyPress, e); -} - -#ifdef KeyRelease -#undef KeyRelease -#endif - -void MyWindow::keyReleaseEvent(XKeyEvent *e) -{ - windowSurface->handleKeyEvent(QEvent::KeyRelease, e); -} - - -// WindowFlag stuff, lots of copied code from qwidget_x11.cpp... - -//We're hacking here... - - -// MWM support -struct QtMWMHints { - ulong flags, functions, decorations; - long input_mode; - ulong status; -}; - -enum { - MWM_HINTS_FUNCTIONS = (1L << 0), - - MWM_FUNC_ALL = (1L << 0), - MWM_FUNC_RESIZE = (1L << 1), - MWM_FUNC_MOVE = (1L << 2), - MWM_FUNC_MINIMIZE = (1L << 3), - MWM_FUNC_MAXIMIZE = (1L << 4), - MWM_FUNC_CLOSE = (1L << 5), - - MWM_HINTS_DECORATIONS = (1L << 1), - - MWM_DECOR_ALL = (1L << 0), - MWM_DECOR_BORDER = (1L << 1), - MWM_DECOR_RESIZEH = (1L << 2), - MWM_DECOR_TITLE = (1L << 3), - MWM_DECOR_MENU = (1L << 4), - MWM_DECOR_MINIMIZE = (1L << 5), - MWM_DECOR_MAXIMIZE = (1L << 6), - - MWM_HINTS_INPUT_MODE = (1L << 2), - - MWM_INPUT_MODELESS = 0L, - MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, - MWM_INPUT_FULL_APPLICATION_MODAL = 3L -}; - -static Atom mwm_hint_atom = XNone; - -static QtMWMHints GetMWMHints(Display *display, Window window) -{ - QtMWMHints mwmhints; - - Atom type; - int format; - ulong nitems, bytesLeft; - uchar *data = 0; - if ((XGetWindowProperty(display, window, mwm_hint_atom, 0, 5, false, - mwm_hint_atom, &type, &format, &nitems, &bytesLeft, - &data) == Success) - && (type == mwm_hint_atom - && format == 32 - && nitems >= 5)) { - mwmhints = *(reinterpret_cast(data)); - } else { - mwmhints.flags = 0L; - mwmhints.functions = MWM_FUNC_ALL; - mwmhints.decorations = MWM_DECOR_ALL; - mwmhints.input_mode = 0L; - mwmhints.status = 0L; - } - - if (data) - XFree(data); - - return mwmhints; -} - -static void SetMWMHints(Display *display, Window window, const QtMWMHints &mwmhints) -{ - if (mwmhints.flags != 0l) { - XChangeProperty(display, window, mwm_hint_atom, mwm_hint_atom, 32, - PropModeReplace, (unsigned char *) &mwmhints, 5); - } else { - XDeleteProperty(display, window, mwm_hint_atom); - } -} - -// Returns true if we should set WM_TRANSIENT_FOR on \a w -static inline bool isTransient(const QWidget *w) -{ - return ((w->windowType() == Qt::Dialog - || w->windowType() == Qt::Sheet - || w->windowType() == Qt::Tool - || w->windowType() == Qt::SplashScreen - || w->windowType() == Qt::ToolTip - || w->windowType() == Qt::Drawer - || w->windowType() == Qt::Popup) - && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); -} - - - -Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) -{ - - if (mwm_hint_atom == XNone) { - mwm_hint_atom = XInternAtom(xd->display, "_MOTIF_WM_HINTS\0", False); - } - -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::setWindowFlags" << hex << window << "flags" << flags; -#endif - Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); - - if (type == Qt::ToolTip) - flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; - if (type == Qt::Popup) - flags |= Qt::X11BypassWindowManagerHint; - - bool topLevel = (flags & Qt::Window); - bool popup = (type == Qt::Popup); - bool dialog = (type == Qt::Dialog - || type == Qt::Sheet); - bool desktop = (type == Qt::Desktop); - bool tool = (type == Qt::Tool || type == Qt::SplashScreen - || type == Qt::ToolTip || type == Qt::Drawer); - - bool tooltip = (type == Qt::ToolTip); - - XSetWindowAttributes wsa; - - QtMWMHints mwmhints; - mwmhints.flags = 0L; - mwmhints.functions = 0L; - mwmhints.decorations = 0; - mwmhints.input_mode = 0L; - mwmhints.status = 0L; - - - ulong wsa_mask = 0; - if (type != Qt::SplashScreen) { // && customize) { - mwmhints.flags |= MWM_HINTS_DECORATIONS; - - bool customize = flags & Qt::CustomizeWindowHint; - if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { - mwmhints.decorations |= MWM_DECOR_BORDER; - mwmhints.decorations |= MWM_DECOR_RESIZEH; - - if (flags & Qt::WindowTitleHint) - mwmhints.decorations |= MWM_DECOR_TITLE; - - if (flags & Qt::WindowSystemMenuHint) - mwmhints.decorations |= MWM_DECOR_MENU; - - if (flags & Qt::WindowMinimizeButtonHint) { - mwmhints.decorations |= MWM_DECOR_MINIMIZE; - mwmhints.functions |= MWM_FUNC_MINIMIZE; - } - - if (flags & Qt::WindowMaximizeButtonHint) { - mwmhints.decorations |= MWM_DECOR_MAXIMIZE; - mwmhints.functions |= MWM_FUNC_MAXIMIZE; - } - - if (flags & Qt::WindowCloseButtonHint) - mwmhints.functions |= MWM_FUNC_CLOSE; - } - } else { - // if type == Qt::SplashScreen - mwmhints.decorations = MWM_DECOR_ALL; - } - - if (tool) { - wsa.save_under = True; - wsa_mask |= CWSaveUnder; - } - - if (flags & Qt::X11BypassWindowManagerHint) { - wsa.override_redirect = True; - wsa_mask |= CWOverrideRedirect; - } -#if 0 - if (wsa_mask && initializeWindow) { - Q_ASSERT(id); - XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); - } -#endif - if (mwmhints.functions != 0) { - mwmhints.flags |= MWM_HINTS_FUNCTIONS; - mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; - } else { - mwmhints.functions = MWM_FUNC_ALL; - } - - if (!(flags & Qt::FramelessWindowHint) - && flags & Qt::CustomizeWindowHint - && flags & Qt::WindowTitleHint - && !(flags & - (Qt::WindowMinimizeButtonHint - | Qt::WindowMaximizeButtonHint - | Qt::WindowCloseButtonHint))) { - // a special case - only the titlebar without any button - mwmhints.flags = MWM_HINTS_FUNCTIONS; - mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; - mwmhints.decorations = 0; - } - - SetMWMHints(xd->display, window, mwmhints); - -//##### only if initializeWindow??? - - if (popup || tooltip) { // popup widget -#ifdef MYX11_DEBUG - qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; -#endif - // set EWMH window types - // setNetWmWindowTypes(); - - wsa.override_redirect = True; - wsa.save_under = True; - XChangeWindowAttributes(xd->display, window, CWOverrideRedirect | CWSaveUnder, - &wsa); - } else { -#ifdef MYX11_DEBUG - qDebug() << "Doing XChangeWindowAttributes for non-popup"; -#endif - } - - return flags; -} - -void MyWindow::setVisible(bool visible) -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::setVisible" << visible << hex << window; -#endif - if (visible) - XMapWindow(xd->display, window); - else - XUnmapWindow(xd->display, window); -} - -MyX11Cursors::MyX11Cursors(Display * d) : firstExpired(0), lastExpired(0), display(d), removalDelay(3) -{ - connect(&timer, SIGNAL(timeout()), this, SLOT(timeout())); -} - -void MyX11Cursors::insertNode(MyX11CursorNode * node) -{ - QDateTime now = QDateTime::currentDateTime(); - QDateTime timeout = now.addSecs(removalDelay); - node->setExpiration(timeout); - node->setPost(0); - if (lastExpired) { - lastExpired->setPost(node); - node->setAnte(lastExpired); - } - lastExpired = node; - if (!firstExpired) { - firstExpired = node; - node->setAnte(0); - int interval = removalDelay * 1000; - timer.setInterval(interval); - timer.start(); - } -} - -void MyX11Cursors::removeNode(MyX11CursorNode * node) -{ - MyX11CursorNode *pre = node->ante(); - MyX11CursorNode *post = node->post(); - if (pre) - pre->setPost(post); - if (post) - post->setAnte(pre); - if (node == lastExpired) - lastExpired = pre; - if (node == firstExpired) { - firstExpired = post; - if (!firstExpired) { - timer.stop(); - return; - } - int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; - timer.stop(); - timer.setInterval(interval); - timer.start(); - } -} - -void MyX11Cursors::incrementUseCount(int id) -{ - MyX11CursorNode * node = lookupMap.value(id); - Q_ASSERT(node); - if (!node->refCount) - removeNode(node); - node->refCount++; -} - -void MyX11Cursors::decrementUseCount(int id) -{ - MyX11CursorNode * node = lookupMap.value(id); - Q_ASSERT(node); - node->refCount--; - if (!node->refCount) - insertNode(node); -} - -void MyX11Cursors::createNode(int id, Cursor c) -{ - MyX11CursorNode * node = new MyX11CursorNode(id, c); - lookupMap.insert(id, node); -} - -void MyX11Cursors::timeout() -{ - MyX11CursorNode * node; - node = firstExpired; - QDateTime now = QDateTime::currentDateTime(); - while (node && now.secsTo(node->expiration()) < 1) { - Cursor c = node->cursor(); - int id = node->id(); - lookupMap.take(id); - MyX11CursorNode * tmp = node; - node = node->post(); - delete tmp; - XFreeCursor(display, c); - } - firstExpired = node; - if (node == 0) { - timer.stop(); - lastExpired = 0; - } - else { - int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; - timer.setInterval(interval); - timer.start(); - } -} - -Cursor MyX11Cursors::cursor(int id) -{ - MyX11CursorNode * node = lookupMap.value(id); - Q_ASSERT(node); - return node->cursor(); -} - -void MyWindow::setCursor(QCursor * cursor) -{ - int id = cursor->handle(); - if (id == currentCursor) - return; - Cursor c; - if (!xd->cursors->exists(id)) { - if (cursor->shape() == Qt::BitmapCursor) - c = createCursorBitmap(cursor); - else - c = createCursorShape(cursor->shape()); - if (!c) { - return; - } - xd->cursors->createNode(id, c); - } else { - xd->cursors->incrementUseCount(id); - c = xd->cursors->cursor(id); - } - - if (currentCursor != -1) - xd->cursors->decrementUseCount(currentCursor); - currentCursor = id; - - XDefineCursor(xd->display, window, c); - XFlush(xd->display); -} - -Cursor MyWindow::createCursorBitmap(QCursor * cursor) -{ - XColor bg, fg; - bg.red = 255 << 8; - bg.green = 255 << 8; - bg.blue = 255 << 8; - fg.red = 0; - fg.green = 0; - fg.blue = 0; - QPoint spot = cursor->hotSpot(); - Window rootwin = window; - - QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); - QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); - - int width = cursor->bitmap()->width(); - int height = cursor->bitmap()->height(); - int bytesPerLine = mapImage.bytesPerLine(); - int destLineSize = width / 8; - if (width % 8) - destLineSize++; - - const uchar * map = mapImage.bits(); - const uchar * mask = maskImage.bits(); - - char * mapBits = new char[height * destLineSize]; - char * maskBits = new char[height * destLineSize]; - for (int i = 0; i < height; i++) { - memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); - memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); - } - - Pixmap cp = XCreateBitmapFromData(xd->display, rootwin, mapBits, width, height); - Pixmap mp = XCreateBitmapFromData(xd->display, rootwin, maskBits, width, height); - Cursor c = XCreatePixmapCursor(xd->display, cp, mp, &fg, &bg, spot.x(), spot.y()); - XFreePixmap(xd->display, cp); - XFreePixmap(xd->display, mp); - delete[] mapBits; - delete[] maskBits; - - return c; -} - -Cursor MyWindow::createCursorShape(int cshape) -{ - Cursor cursor = 0; - - if (cshape < 0 || cshape > Qt::LastCursor) - return 0; - - switch (cshape) { - case Qt::ArrowCursor: - cursor = XCreateFontCursor(xd->display, XC_left_ptr); - break; - case Qt::UpArrowCursor: - cursor = XCreateFontCursor(xd->display, XC_center_ptr); - break; - case Qt::CrossCursor: - cursor = XCreateFontCursor(xd->display, XC_crosshair); - break; - case Qt::WaitCursor: - cursor = XCreateFontCursor(xd->display, XC_watch); - break; - case Qt::IBeamCursor: - cursor = XCreateFontCursor(xd->display, XC_xterm); - break; - case Qt::SizeAllCursor: - cursor = XCreateFontCursor(xd->display, XC_fleur); - break; - case Qt::PointingHandCursor: - cursor = XCreateFontCursor(xd->display, XC_hand2); - break; - case Qt::SizeBDiagCursor: - cursor = XCreateFontCursor(xd->display, XC_top_right_corner); - break; - case Qt::SizeFDiagCursor: - cursor = XCreateFontCursor(xd->display, XC_bottom_right_corner); - break; - case Qt::SizeVerCursor: - case Qt::SplitVCursor: - cursor = XCreateFontCursor(xd->display, XC_sb_v_double_arrow); - break; - case Qt::SizeHorCursor: - case Qt::SplitHCursor: - cursor = XCreateFontCursor(xd->display, XC_sb_h_double_arrow); - break; - case Qt::WhatsThisCursor: - cursor = XCreateFontCursor(xd->display, XC_question_arrow); - break; - case Qt::ForbiddenCursor: - cursor = XCreateFontCursor(xd->display, XC_circle); - break; - case Qt::BusyCursor: - cursor = XCreateFontCursor(xd->display, XC_watch); - break; - - default: //default cursor for all the rest - break; - } - return cursor; -} - - -#if 0 - - - switch (cshape) { // map Q cursor to X cursor - case Qt::BlankCursor: - XColor bg, fg; - bg.red = 255 << 8; - bg.green = 255 << 8; - bg.blue = 255 << 8; - fg.red = 0; - fg.green = 0; - fg.blue = 0; - pm = XCreateBitmapFromData(dpy, rootwin, cur_blank_bits, 16, 16); - pmm = XCreateBitmapFromData(dpy, rootwin, cur_blank_bits, 16, 16); - hcurs = XCreatePixmapCursor(dpy, pm, pmm, &fg, &bg, 8, 8); - return; - break; - default: - qWarning("QCursor::update: Invalid cursor shape %d", cshape); - return; - } -#endif diff --git a/src/plugins/graphicssystems/testlite/x11util.h b/src/plugins/graphicssystems/testlite/x11util.h deleted file mode 100644 index 79e7461..0000000 --- a/src/plugins/graphicssystems/testlite/x11util.h +++ /dev/null @@ -1,204 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef MYX11UTIL_H -#define MYX11UTIL_H - -#include -#include -#include -#include - -#include - -#include -#include - - -class MyWindow; -class MyX11Cursors; - -class MyDisplay : public QObject -{ - Q_OBJECT; -public: - MyDisplay(); - ~MyDisplay(); - - Window rootWindow() { return RootWindow(display, screen); } - unsigned long blackPixel() { return BlackPixel(display, screen); } - unsigned long whitePixel() { return WhitePixel(display, screen); } - - bool handleEvent(XEvent *xe); - QImage grabWindow(Window window, int x, int y, int w, int h); - -public slots: - void eventDispatcher(); - -public: //### - Display * display; - int screen; - int width, height; - int physicalWidth; - int physicalHeight; - - QList windowList; - - MyX11Cursors * cursors; -}; - -class QTestLiteWindowSurface; //### abstract callback interface, anyone? - -struct MyShmImageInfo; - -class MyWindow : public QObject -{ - Q_OBJECT; -public: - MyWindow(MyDisplay *xd, int x, int y, int w, int h); - ~MyWindow(); - - - void mousePressEvent(XButtonEvent*); - void mouseReleaseEvent(XButtonEvent*); - void mouseMoveEvent(XButtonEvent*); - - void keyPressEvent(XKeyEvent*); - void keyReleaseEvent(XKeyEvent*); - - void enterEvent(XCrossingEvent*); - void leaveEvent(XCrossingEvent*); - - void closeEvent(); - void paintEvent(); - void resizeEvent(XConfigureEvent *configure_event); -// void setSize(int w, int h); - void setGeometry(int x, int y, int w, int h); - - GC createGC(); - - Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); - void setVisible(bool visible); - void setCursor(QCursor * cursor); - Cursor createCursorShape(int cshape); - Cursor createCursorBitmap(QCursor * cursor); - - void setWindowTitle(const QString &title); - - QImage *image() { return &shm_img; } - -public: //### - - int xpos, ypos; - int width, height; - Window window; - MyDisplay *xd; - GC gc; - - QTestLiteWindowSurface *windowSurface; - - int currentCursor; - bool painted; - void resizeBuffer(QSize); - QSize bufferSize() const; - -private: - void resizeShmImage(int width, int height); - - QImage shm_img; - MyShmImageInfo *image_info; -}; - -class MyX11CursorNode -{ -public: - MyX11CursorNode(int id, Cursor c) { idValue = id; cursorValue = c; refCount = 1; } - QDateTime expiration() { return t; } - void setExpiration(QDateTime val) { t = val; } - MyX11CursorNode * ante() { return before; } - void setAnte(MyX11CursorNode *node) { before = node; } - MyX11CursorNode * post() { return after; } - void setPost(MyX11CursorNode *node) { after = node; } - Cursor cursor() { return cursorValue; } - int id() { return idValue; } - unsigned int refCount; - -private: - MyX11CursorNode *before; - MyX11CursorNode *after; - QDateTime t; - Cursor cursorValue; - int idValue; - - Display * display; -}; - -class MyX11Cursors : public QObject -{ - Q_OBJECT -public: - MyX11Cursors(Display * d); - ~MyX11Cursors() { timer.stop(); } - void incrementUseCount(int id); - void decrementUseCount(int id); - void createNode(int id, Cursor c); - bool exists(int id) { return lookupMap.contains(id); } - Cursor cursor(int id); -public slots: - void timeout(); - -private: - void removeNode(MyX11CursorNode *node); - void insertNode(MyX11CursorNode *node); - - // linked list of cursors currently not assigned to any window - MyX11CursorNode *firstExpired; - MyX11CursorNode *lastExpired; - - QHash lookupMap; - QTimer timer; - - Display *display; - - int removalDelay; -}; - -#endif // MYX11UTIL_H diff --git a/src/plugins/graphicssystems/vnc/main.cpp b/src/plugins/graphicssystems/vnc/main.cpp deleted file mode 100644 index f10748a..0000000 --- a/src/plugins/graphicssystems/vnc/main.cpp +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_vnc.h" -#include - -QT_BEGIN_NAMESPACE - -class QVNCGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QVNCGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "VNC"; - return list; -} - -QGraphicsSystem* QVNCGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "vnc") - return new QVNCGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(vnc, QVNCGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp deleted file mode 100644 index 7815f24..0000000 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_vnc.h" -#include "../fb_base/fb_base.h" -#include -#include -#include - -#include -#include - -#include - - -QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() - : QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() -{ - int w = 800; - int h = 600; - int ew, eh; - const char *str; - if ((str=::getenv("QT_VNC_SIZE")) && sscanf(str,"%dx%d",&ew,&eh)==2) { - w = ew; - h = eh; - } - - setGeometry(QRect(0,0,w, h)); - setDepth(32); - setFormat(QImage::Format_RGB32); - setPhysicalSize((geometry().size()*254)/720); - - - d_ptr = new QVNCGraphicsSystemScreenPrivate(this); - - cursor = new QVNCCursor(d_ptr->vncServer, this); - d_ptr->vncServer->setCursor(static_cast(cursor)); -} - -QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() -{ - return d_ptr->dirty; -} - -QRegion QVNCGraphicsSystemScreen::doRedraw() -{ - QRegion touched; - touched = QGraphicsSystemFbScreen::doRedraw(); - - QVector rects = touched.rects(); - for (int i = 0; i < rects.size(); i++) - d_ptr->setDirty(rects[i]); - return touched; -} - - -QVNCGraphicsSystem::QVNCGraphicsSystem() -{ - mPrimaryScreen = new QVNCGraphicsSystemScreen(); - - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QVNCGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. - QGraphicsSystemFbWindowSurface * surface; - surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); - mPrimaryScreen->addWindowSurface(surface); - return surface; -} diff --git a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h b/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h deleted file mode 100644 index b3349b7..0000000 --- a/src/plugins/graphicssystems/vnc/qgraphicssystem_vnc.h +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_VNC_H -#define QGRAPHICSSYSTEM_VNC_H - -#include -#include "qvnccursor.h" -#include "../fb_base/fb_base.h" - -QT_BEGIN_NAMESPACE - -class QVNCServer; -class QVNCDirtyMap; - -class QVNCGraphicsSystemScreenPrivate; - -class QVNCGraphicsSystemScreen : public QGraphicsSystemFbScreen -{ -public: - QVNCGraphicsSystemScreen(); - - int linestep() const { return image() ? image()->bytesPerLine() : 0; } - uchar *base() const { return image() ? image()->bits() : 0; } - QVNCDirtyMap *dirtyMap(); - -public: - QVNCGraphicsSystemScreenPrivate *d_ptr; - -private: - QVNCServer *server; - QRegion doRedraw(); -}; - -class QVNCGraphicsSystemPrivate; - - -class QVNCGraphicsSystem : public QGraphicsSystem -{ -public: - QVNCGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QList screens() const { return mScreens; } - - -private: - QVNCGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; -}; - - - -QT_END_NAMESPACE - -#endif //QGRAPHICSSYSTEM_VNC_H - diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.cpp b/src/plugins/graphicssystems/vnc/qvnccursor.cpp deleted file mode 100644 index fb214d8..0000000 --- a/src/plugins/graphicssystems/vnc/qvnccursor.cpp +++ /dev/null @@ -1,156 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include -#include - -#include - -#include "qvnccursor.h" -#include "qvncserver.h" -#include "qgraphicssystem_vnc.h" - -QT_BEGIN_NAMESPACE - -QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) - :QGraphicsSystemSoftwareCursor(scr), useVncCursor(false), server(srvr) -{ -} - -void QVNCCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) -{ - QGraphicsSystemSoftwareCursor::changeCursor(widgetCursor, widget); - if (useVncCursor) { - server->setDirtyCursor(); - } else { - screen->setDirty(QRect(0,0,1,1)); - } -} - -void QVNCCursor::setCursorMode(bool vnc) -{ - if (vnc) { - screen->setDirty(dirtyRect()); - server->setDirtyCursor(); - } else { - server->setDirtyCursor(); - } - useVncCursor = vnc; -} - -QRect QVNCCursor::drawCursor(QPainter & painter) -{ - if (useVncCursor) - return QRect(); - - return QGraphicsSystemSoftwareCursor::drawCursor(painter); -} - -void QVNCCursor::clearClientCursor() -{ - QTcpSocket *socket = server->clientSocket(); - if (!socket) { - return; - } - // FramebufferUpdate header - { - const quint16 tmp[6] = { htons(0), - htons(1), - htons(0), htons(0), - htons(0), - htons(0) }; - socket->write((char*)tmp, sizeof(tmp)); - - const quint32 encoding = htonl(-239); - socket->write((char*)(&encoding), sizeof(encoding)); - } -} - -void QVNCCursor::sendClientCursor() -{ - if (useVncCursor == false) { - clearClientCursor(); - return; - } - QImage *image = graphic->image(); - if (image->isNull()) - return; - QTcpSocket *socket = server->clientSocket(); - if (!socket) { - return; - } - // FramebufferUpdate header - { - const quint16 tmp[6] = { htons(0), - htons(1), - htons(graphic->hotspot().x()), htons(graphic->hotspot().y()), - htons(image->width()), - htons(image->height()) }; - socket->write((char*)tmp, sizeof(tmp)); - - const quint32 encoding = htonl(-239); - socket->write((char*)(&encoding), sizeof(encoding)); - } - - // write pixels - //Q_ASSERT(cursor->hasAlphaChannel()); - const QImage img = image->convertToFormat(QImage::Format_RGB32); - const int n = server->clientBytesPerPixel() * img.width(); - char *buffer = new char[n]; - for (int i = 0; i < img.height(); ++i) { - server->convertPixels(buffer, (const char*)img.scanLine(i), img.width()); - socket->write(buffer, n); - } - delete[] buffer; - - // write mask - const QImage bitmap = image->createAlphaMask().convertToFormat(QImage::Format_Mono); - Q_ASSERT(bitmap.depth() == 1); - Q_ASSERT(bitmap.size() == img.size()); - const int width = (bitmap.width() + 7) / 8; - for (int i = 0; i < bitmap.height(); ++i) - socket->write((const char*)bitmap.scanLine(i), width); -} - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qvnccursor.h b/src/plugins/graphicssystems/vnc/qvnccursor.h deleted file mode 100644 index 8ea0f45..0000000 --- a/src/plugins/graphicssystems/vnc/qvnccursor.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QVNCCURSOR_H -#define QVNCCURSOR_H - -#include "../fb_base/fb_base.h" -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QVNCGraphicsSystemScreen; -class QVNCServer; - -class QVNCCursor : public QGraphicsSystemSoftwareCursor { -public: - QVNCCursor(QVNCServer *, QVNCGraphicsSystemScreen *); - - // input methods - void setCursorMode(bool vnc); - void changeCursor(QCursor * widgetCursor, QWidget * widget); - - // output methods - QRect drawCursor(QPainter &); - - // VNC client communication - void sendClientCursor(); - void clearClientCursor(); -private: - bool useVncCursor; // VNC or local - - QVNCServer * server; // VNC server to get events from -}; - -QT_END_NAMESPACE - -#endif // QVNCCURSOR_H diff --git a/src/plugins/graphicssystems/vnc/qvncserver.cpp b/src/plugins/graphicssystems/vnc/qvncserver.cpp deleted file mode 100644 index ea576d4..0000000 --- a/src/plugins/graphicssystems/vnc/qvncserver.cpp +++ /dev/null @@ -1,1935 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qvncserver.h" - -#include -#include -#include -#include -#include - -#include -#include - -#include - -#include - -#include - - -#define QT_QWS_VNC_DEBUG -#define QT_NO_QWS_CURSOR //### - - -QT_BEGIN_NAMESPACE - - - -//copied from qscreen_qws.h -#ifndef QT_QWS_DEPTH16_RGB -#define QT_QWS_DEPTH16_RGB 565 -#endif -static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100); -static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10); -static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10); -static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits); -static const int qt_green_shift = qt_bbits-(8-qt_gbits); -static const int qt_neg_blue_shift = 8-qt_bbits; -static const int qt_blue_mask = (1<> qt_red_shift | r >> qt_red_rounding_shift; - const int tg = g >> qt_green_shift | g >> qt_green_rounding_shift; - const int tb = b << qt_neg_blue_shift | b >> qt_blue_rounding_shift; - - return qRgb(tr,tg,tb); -} - - - -//=========================================================================== - -static const struct { - int keysym; - int keycode; -} keyMap[] = { - { 0xff08, Qt::Key_Backspace }, - { 0xff09, Qt::Key_Tab }, - { 0xff0d, Qt::Key_Return }, - { 0xff1b, Qt::Key_Escape }, - { 0xff63, Qt::Key_Insert }, - { 0xffff, Qt::Key_Delete }, - { 0xff50, Qt::Key_Home }, - { 0xff57, Qt::Key_End }, - { 0xff55, Qt::Key_PageUp }, - { 0xff56, Qt::Key_PageDown }, - { 0xff51, Qt::Key_Left }, - { 0xff52, Qt::Key_Up }, - { 0xff53, Qt::Key_Right }, - { 0xff54, Qt::Key_Down }, - { 0xffbe, Qt::Key_F1 }, - { 0xffbf, Qt::Key_F2 }, - { 0xffc0, Qt::Key_F3 }, - { 0xffc1, Qt::Key_F4 }, - { 0xffc2, Qt::Key_F5 }, - { 0xffc3, Qt::Key_F6 }, - { 0xffc4, Qt::Key_F7 }, - { 0xffc5, Qt::Key_F8 }, - { 0xffc6, Qt::Key_F9 }, - { 0xffc7, Qt::Key_F10 }, - { 0xffc8, Qt::Key_F11 }, - { 0xffc9, Qt::Key_F12 }, - { 0xffe1, Qt::Key_Shift }, - { 0xffe2, Qt::Key_Shift }, - { 0xffe3, Qt::Key_Control }, - { 0xffe4, Qt::Key_Control }, - { 0xffe7, Qt::Key_Meta }, - { 0xffe8, Qt::Key_Meta }, - { 0xffe9, Qt::Key_Alt }, - { 0xffea, Qt::Key_Alt }, - { 0, 0 } -}; - -void QRfbRect::read(QTcpSocket *s) -{ - quint16 buf[4]; - s->read((char*)buf, 8); - x = ntohs(buf[0]); - y = ntohs(buf[1]); - w = ntohs(buf[2]); - h = ntohs(buf[3]); -} - -void QRfbRect::write(QTcpSocket *s) const -{ - quint16 buf[4]; - buf[0] = htons(x); - buf[1] = htons(y); - buf[2] = htons(w); - buf[3] = htons(h); - s->write((char*)buf, 8); -} - -void QRfbPixelFormat::read(QTcpSocket *s) -{ - char buf[16]; - s->read(buf, 16); - bitsPerPixel = buf[0]; - depth = buf[1]; - bigEndian = buf[2]; - trueColor = buf[3]; - - quint16 a = ntohs(*(quint16 *)(buf + 4)); - redBits = 0; - while (a) { a >>= 1; redBits++; } - - a = ntohs(*(quint16 *)(buf + 6)); - greenBits = 0; - while (a) { a >>= 1; greenBits++; } - - a = ntohs(*(quint16 *)(buf + 8)); - blueBits = 0; - while (a) { a >>= 1; blueBits++; } - - redShift = buf[10]; - greenShift = buf[11]; - blueShift = buf[12]; -} - -void QRfbPixelFormat::write(QTcpSocket *s) -{ - char buf[16]; - buf[0] = bitsPerPixel; - buf[1] = depth; - buf[2] = bigEndian; - buf[3] = trueColor; - - quint16 a = 0; - for (int i = 0; i < redBits; i++) a = (a << 1) | 1; - *(quint16 *)(buf + 4) = htons(a); - - a = 0; - for (int i = 0; i < greenBits; i++) a = (a << 1) | 1; - *(quint16 *)(buf + 6) = htons(a); - - a = 0; - for (int i = 0; i < blueBits; i++) a = (a << 1) | 1; - *(quint16 *)(buf + 8) = htons(a); - - buf[10] = redShift; - buf[11] = greenShift; - buf[12] = blueShift; - s->write(buf, 16); -} - - -void QRfbServerInit::setName(const char *n) -{ - delete[] name; - name = new char [strlen(n) + 1]; - strcpy(name, n); -} - -void QRfbServerInit::read(QTcpSocket *s) -{ - s->read((char *)&width, 2); - width = ntohs(width); - s->read((char *)&height, 2); - height = ntohs(height); - format.read(s); - - quint32 len; - s->read((char *)&len, 4); - len = ntohl(len); - - name = new char [len + 1]; - s->read(name, len); - name[len] = '\0'; -} - -void QRfbServerInit::write(QTcpSocket *s) -{ - quint16 t = htons(width); - s->write((char *)&t, 2); - t = htons(height); - s->write((char *)&t, 2); - format.write(s); - quint32 len = strlen(name); - len = htonl(len); - s->write((char *)&len, 4); - s->write(name, strlen(name)); -} - -bool QRfbSetEncodings::read(QTcpSocket *s) -{ - if (s->bytesAvailable() < 3) - return false; - - char tmp; - s->read(&tmp, 1); // padding - s->read((char *)&count, 2); - count = ntohs(count); - - return true; -} - -bool QRfbFrameBufferUpdateRequest::read(QTcpSocket *s) -{ - if (s->bytesAvailable() < 9) - return false; - - s->read(&incremental, 1); - rect.read(s); - - return true; -} - -bool QRfbKeyEvent::read(QTcpSocket *s) -{ - if (s->bytesAvailable() < 7) - return false; - - s->read(&down, 1); - quint16 tmp; - s->read((char *)&tmp, 2); // padding - - quint32 key; - s->read((char *)&key, 4); - key = ntohl(key); - - unicode = 0; - keycode = 0; - int i = 0; - while (keyMap[i].keysym && !keycode) { - if (keyMap[i].keysym == (int)key) - keycode = keyMap[i].keycode; - i++; - } - if (!keycode) { - if (key <= 0xff) { - unicode = key; - if (key >= 'a' && key <= 'z') - keycode = Qt::Key_A + key - 'a'; - else if (key >= ' ' && key <= '~') - keycode = Qt::Key_Space + key - ' '; - } - } - - return true; -} - -bool QRfbPointerEvent::read(QTcpSocket *s) -{ - if (s->bytesAvailable() < 5) - return false; - - char buttonMask; - s->read(&buttonMask, 1); - - buttons = Qt::NoButton; - wheelDirection = WheelNone; - if (buttonMask & 1) - buttons |= Qt::LeftButton; - if (buttonMask & 2) - buttons |= Qt::MidButton; - if (buttonMask & 4) - buttons |= Qt::RightButton; - if (buttonMask & 8) - wheelDirection = WheelUp; - if (buttonMask & 16) - wheelDirection = WheelDown; - if (buttonMask & 32) - wheelDirection = WheelLeft; - if (buttonMask & 64) - wheelDirection = WheelRight; - - quint16 tmp; - s->read((char *)&tmp, 2); - x = ntohs(tmp); - s->read((char *)&tmp, 2); - y = ntohs(tmp); - - return true; -} - -bool QRfbClientCutText::read(QTcpSocket *s) -{ - if (s->bytesAvailable() < 7) - return false; - - char tmp[3]; - s->read(tmp, 3); // padding - s->read((char *)&length, 4); - length = ntohl(length); - - return true; -} - -//=========================================================================== - -QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen) - : qvnc_screen(screen), cursor(0) -{ - init(5900); -} - -QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen, int id) - : qvnc_screen(screen), cursor(0) -{ - init(5900 + id); -} - -void QVNCServer::init(uint port) -{ - qDebug() << "QVNCServer::init" << port; - - handleMsg = false; - client = 0; - encodingsPending = 0; - cutTextPending = 0; - keymod = 0; - state = Unconnected; - dirtyCursor = false; - - refreshRate = 25; - timer = new QTimer(this); - timer->setSingleShot(true); - connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate())); - - serverSocket = new QTcpServer(this); - if (!serverSocket->listen(QHostAddress::Any, port)) - qDebug() << "QVNCServer could not connect:" << serverSocket->errorString(); - else - qDebug("QVNCServer created on port %d", port); - - connect(serverSocket, SIGNAL(newConnection()), this, SLOT(newConnection())); - -#ifndef QT_NO_QWS_CURSOR - qvnc_cursor = 0; -#endif - encoder = 0; -} - -QVNCServer::~QVNCServer() -{ - delete encoder; - encoder = 0; - delete client; - client = 0; -#ifndef QT_NO_QWS_CURSOR - delete qvnc_cursor; - qvnc_cursor = 0; -#endif -} - -void QVNCServer::setDirty() -{ - if (state == Connected && !timer->isActive() && - ((dirtyMap()->numDirty > 0) || dirtyCursor)) { - timer->start(); - } -} - -void QVNCServer::newConnection() -{ - if (client) - delete client; - - client = serverSocket->nextPendingConnection(); - connect(client,SIGNAL(readyRead()),this,SLOT(readClient())); - connect(client,SIGNAL(disconnected()),this,SLOT(discardClient())); - handleMsg = false; - encodingsPending = 0; - cutTextPending = 0; - supportHextile = false; - wantUpdate = false; - - timer->start(1000 / refreshRate); - dirtyMap()->reset(); - - // send protocol version - const char *proto = "RFB 003.003\n"; - client->write(proto, 12); - state = Protocol; - -// if (!qvnc_screen->screen()) -// QWSServer::instance()->enablePainting(true); -} - -void QVNCServer::readClient() -{ - switch (state) { - case Protocol: - if (client->bytesAvailable() >= 12) { - char proto[13]; - client->read(proto, 12); - proto[12] = '\0'; - qDebug("Client protocol version %s", proto); - // No authentication - quint32 auth = htonl(1); - client->write((char *) &auth, sizeof(auth)); - state = Init; - } - break; - - case Init: - if (client->bytesAvailable() >= 1) { - quint8 shared; - client->read((char *) &shared, 1); - - // Server Init msg - QRfbServerInit sim; - QRfbPixelFormat &format = sim.format; - switch (qvnc_screen->depth()) { - case 32: - format.bitsPerPixel = 32; - format.depth = 32; - format.bigEndian = 0; - format.trueColor = true; - format.redBits = 8; - format.greenBits = 8; - format.blueBits = 8; - format.redShift = 16; - format.greenShift = 8; - format.blueShift = 0; - break; - - case 24: - format.bitsPerPixel = 24; - format.depth = 24; - format.bigEndian = 0; - format.trueColor = true; - format.redBits = 8; - format.greenBits = 8; - format.blueBits = 8; - format.redShift = 16; - format.greenShift = 8; - format.blueShift = 0; - break; - - case 18: - format.bitsPerPixel = 24; - format.depth = 18; - format.bigEndian = 0; - format.trueColor = true; - format.redBits = 6; - format.greenBits = 6; - format.blueBits = 6; - format.redShift = 12; - format.greenShift = 6; - format.blueShift = 0; - break; - - case 16: - format.bitsPerPixel = 16; - format.depth = 16; - format.bigEndian = 0; - format.trueColor = true; - format.redBits = 5; - format.greenBits = 6; - format.blueBits = 5; - format.redShift = 11; - format.greenShift = 5; - format.blueShift = 0; - break; - - case 15: - format.bitsPerPixel = 16; - format.depth = 15; - format.bigEndian = 0; - format.trueColor = true; - format.redBits = 5; - format.greenBits = 5; - format.blueBits = 5; - format.redShift = 10; - format.greenShift = 5; - format.blueShift = 0; - break; - - case 12: - format.bitsPerPixel = 16; - format.depth = 12; - format.bigEndian = 0; - format.trueColor = true; - format.redBits = 4; - format.greenBits = 4; - format.blueBits = 4; - format.redShift = 8; - format.greenShift = 4; - format.blueShift = 0; - break; - - case 8: - case 4: - format.bitsPerPixel = 8; - format.depth = 8; - format.bigEndian = 0; - format.trueColor = false; - format.redBits = 0; - format.greenBits = 0; - format.blueBits = 0; - format.redShift = 0; - format.greenShift = 0; - format.blueShift = 0; - break; - - default: - qDebug("QVNC cannot drive depth %d", qvnc_screen->depth()); - discardClient(); - return; - } - sim.width = qvnc_screen->geometry().width(); - sim.height = qvnc_screen->geometry().height(); - sim.setName("Qt for Embedded Linux VNC Server"); - sim.write(client); - state = Connected; - } - break; - - case Connected: - do { - if (!handleMsg) { - client->read((char *)&msgType, 1); - handleMsg = true; - } - if (handleMsg) { - switch (msgType ) { - case SetPixelFormat: - setPixelFormat(); - break; - case FixColourMapEntries: - qDebug("Not supported: FixColourMapEntries"); - handleMsg = false; - break; - case SetEncodings: - setEncodings(); - break; - case FramebufferUpdateRequest: - frameBufferUpdateRequest(); - break; - case KeyEvent: - keyEvent(); - break; - case PointerEvent: - pointerEvent(); - break; - case ClientCutText: - clientCutText(); - break; - default: - qDebug("Unknown message type: %d", (int)msgType); - handleMsg = false; - } - } - } while (!handleMsg && client->bytesAvailable()); - break; - default: - break; - } -} - -#if 0//Q_BYTE_ORDER == Q_BIG_ENDIAN -bool QVNCGraphicsSystemScreen::swapBytes() const -{ - if (depth() != 16) - return false; - - if (screen()) - return screen()->frameBufferLittleEndian(); - return frameBufferLittleEndian(); -} -#endif - -void QVNCServer::setPixelFormat() -{ - if (client->bytesAvailable() >= 19) { - char buf[3]; - client->read(buf, 3); // just padding - pixelFormat.read(client); -#ifdef QT_QWS_VNC_DEBUG - qDebug("Want format: %d %d %d %d %d %d %d %d %d %d", - int(pixelFormat.bitsPerPixel), - int(pixelFormat.depth), - int(pixelFormat.bigEndian), - int(pixelFormat.trueColor), - int(pixelFormat.redBits), - int(pixelFormat.greenBits), - int(pixelFormat.blueBits), - int(pixelFormat.redShift), - int(pixelFormat.greenShift), - int(pixelFormat.blueShift)); -#endif - if (!pixelFormat.trueColor) { - qDebug("Can only handle true color clients"); - discardClient(); - } - handleMsg = false; - sameEndian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) == !!pixelFormat.bigEndian; - needConversion = pixelConversionNeeded(); -#if Q_BYTE_ORDER == Q_BIG_ENDIAN - swapBytes = qvnc_screen->swapBytes(); -#endif - } -} - -void QVNCServer::setEncodings() -{ - QRfbSetEncodings enc; - - if (!encodingsPending && enc.read(client)) { - encodingsPending = enc.count; - if (!encodingsPending) - handleMsg = false; - } - - if (encoder) { - delete encoder; - encoder = 0; - } - - enum Encodings { - Raw = 0, - CopyRect = 1, - RRE = 2, - CoRRE = 4, - Hextile = 5, - ZRLE = 16, - Cursor = -239, - DesktopSize = -223 - }; - - supportCursor = false; - - if (encodingsPending && (unsigned)client->bytesAvailable() >= - encodingsPending * sizeof(quint32)) { - for (int i = 0; i < encodingsPending; ++i) { - qint32 enc; - client->read((char *)&enc, sizeof(qint32)); - enc = ntohl(enc); -#ifdef QT_QWS_VNC_DEBUG - qDebug("QVNCServer::setEncodings: %d", enc); -#endif - switch (enc) { - case Raw: - if (!encoder) { - encoder = new QRfbRawEncoder(this); -#ifdef QT_QWS_VNC_DEBUG - qDebug("QVNCServer::setEncodings: using raw"); -#endif - } - break; - case CopyRect: - supportCopyRect = true; - break; - case RRE: - supportRRE = true; - break; - case CoRRE: - supportCoRRE = true; - break; - case Hextile: - supportHextile = true; - if (encoder) - break; - switch (qvnc_screen->depth()) { -#ifdef QT_QWS_DEPTH_8 - case 8: - encoder = new QRfbHextileEncoder(this); - break; -#endif -#ifdef QT_QWS_DEPTH_12 - case 12: - encoder = new QRfbHextileEncoder(this); - break; -#endif -#ifdef QT_QWS_DEPTH_15 - case 15: - encoder = new QRfbHextileEncoder(this); - break; -#endif -#ifdef QT_QWS_DEPTH_16 - case 16: - encoder = new QRfbHextileEncoder(this); - break; -#endif -#ifdef QT_QWS_DEPTH_18 - case 18: - encoder = new QRfbHextileEncoder(this); - break; -#endif -#ifdef QT_QWS_DEPTH_24 - case 24: - encoder = new QRfbHextileEncoder(this); - break; -#endif -#ifdef QT_QWS_DEPTH_32 - case 32: - encoder = new QRfbHextileEncoder(this); - break; -#endif - default: - break; - } -#ifdef QT_QWS_VNC_DEBUG - qDebug("QVNCServer::setEncodings: using hextile"); -#endif - break; - case ZRLE: - supportZRLE = true; - break; - case Cursor: - supportCursor = true; -#ifndef QT_NO_QWS_CURSOR - if (!qvnc_screen->screen() || qt_screencursor->isAccelerated()) { - delete qvnc_cursor; - qvnc_cursor = new QVNCClientCursor(this); - } -#endif - break; - case DesktopSize: - supportDesktopSize = true; - break; - default: - break; - } - } - handleMsg = false; - encodingsPending = 0; - } - - if (!encoder) { - encoder = new QRfbRawEncoder(this); -#ifdef QT_QWS_VNC_DEBUG - qDebug("QVNCServer::setEncodings: fallback using raw"); -#endif - } - - if (cursor) - cursor->setCursorMode(supportCursor); -} - -void QVNCServer::frameBufferUpdateRequest() -{ - QRfbFrameBufferUpdateRequest ev; - - if (ev.read(client)) { - if (!ev.incremental) { - QRect r(ev.rect.x, ev.rect.y, ev.rect.w, ev.rect.h); -////### r.translate(qvnc_screen->offset()); - qvnc_screen->d_ptr->setDirty(r, true); - } - wantUpdate = true; - checkUpdate(); - handleMsg = false; - } -} - -static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::MouseButton *button, bool *isPress) -{ - if (before == after) - return false; - for (int b = Qt::LeftButton; b <= Qt::MidButton; b<<=1) { - if ((before & b) != (after & b)) { - *button = static_cast(b); - *isPress = (after & b); - return true; - } - } - return false; -} - -void QVNCServer::pointerEvent() -{ - QRfbPointerEvent ev; - if (ev.read(client)) { -// const QPoint offset = qvnc_screen->offset(); -// QWSServer::sendMouseEvent(offset + QPoint(ev.x, ev.y), ev.buttons); - - - //qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons; - if (ev.wheelDirection == ev.WheelNone) { - QEvent::Type type = QEvent::MouseMove; - Qt::MouseButton button = Qt::NoButton; - bool isPress; - if (buttonChange(buttons, ev.buttons, &button, &isPress)) - type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - QWindowSystemInterface::handleMouseEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), ev.buttons); - } else { - // No buttons or motion reported at the same time as wheel events - Qt::Orientation orientation; - if (ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelRight) - orientation = Qt::Horizontal; - else - orientation = Qt::Vertical; - int delta = 120 * ((ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelUp) ? 1 : -1); - QWindowSystemInterface::handleWheelEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, orientation); - } - handleMsg = false; - } -} - -void QVNCServer::keyEvent() -{ - QRfbKeyEvent ev; - - if (ev.read(client)) { - if (ev.keycode == Qt::Key_Shift) - keymod = ev.down ? keymod | Qt::ShiftModifier : - keymod & ~Qt::ShiftModifier; - else if (ev.keycode == Qt::Key_Control) - keymod = ev.down ? keymod | Qt::ControlModifier : - keymod & ~Qt::ControlModifier; - else if (ev.keycode == Qt::Key_Alt) - keymod = ev.down ? keymod | Qt::AltModifier : - keymod & ~Qt::AltModifier; - if (ev.unicode || ev.keycode) { -// qDebug() << "keyEvent" << hex << ev.unicode << ev.keycode << keymod << ev.down; - QEvent::Type type = ev.down ? QEvent::KeyPress : QEvent::KeyRelease; - QString str; - if (ev.unicode && ev.unicode != 0xffff) - str = QString(ev.unicode); - QWindowSystemInterface::handleKeyEvent(0, type, ev.keycode, keymod, str); - } - handleMsg = false; - } -} - -void QVNCServer::clientCutText() -{ - QRfbClientCutText ev; - - if (ev.read(client)) { - cutTextPending = ev.length; - if (!cutTextPending) - handleMsg = false; - } - - if (cutTextPending && client->bytesAvailable() >= cutTextPending) { - char *text = new char [cutTextPending+1]; - client->read(text, cutTextPending); - delete [] text; - cutTextPending = 0; - handleMsg = false; - } -} - -// stride in bytes -template -bool QRfbSingleColorHextile::read(const uchar *data, - int width, int height, int stride) -{ - const int depth = encoder->server->screen()->depth(); - if (width % (depth / 8)) // hw: should rather fallback to simple loop - return false; - - static int alwaysFalse = qgetenv("QT_VNC_NOCHECKFILL").toInt(); - if (alwaysFalse) - return false; - - switch (depth) { - case 4: { - const quint8 *data8 = reinterpret_cast(data); - if ((data8[0] & 0xf) != (data8[0] >> 4)) - return false; - width /= 2; - } // fallthrough - case 8: { - const quint8 *data8 = reinterpret_cast(data); - if (data8[0] != data8[1]) - return false; - width /= 2; - } // fallthrough - case 12: - case 15: - case 16: { - const quint16 *data16 = reinterpret_cast(data); - if (data16[0] != data16[1]) - return false; - width /= 2; - } // fallthrough - case 18: - case 24: - case 32: { - const quint32 *data32 = reinterpret_cast(data); - const quint32 first = data32[0]; - const int linestep = (stride / sizeof(quint32)) - width; - for (int y = 0; y < height; ++y) { - for (int x = 0; x < width; ++x) { - if (*(data32++) != first) - return false; - } - data32 += linestep; - } - break; - } - default: - return false; - } - - SRC color = reinterpret_cast(data)[0]; - encoder->newBg |= (color != encoder->bg); - encoder->bg = color; - return true; -} - -template -void QRfbSingleColorHextile::write(QTcpSocket *socket) const -{ - if (true || encoder->newBg) { - const int bpp = encoder->server->clientBytesPerPixel(); - const int padding = 3; - QVarLengthArray buffer(padding + 1 + bpp); - buffer[padding] = 2; // BackgroundSpecified - encoder->server->convertPixels(buffer.data() + padding + 1, - reinterpret_cast(&encoder->bg), - 1); - socket->write(buffer.data() + padding, bpp + 1); -// encoder->newBg = false; - } else { - char subenc = 0; - socket->write(&subenc, 1); - } -} - -template -bool QRfbDualColorHextile::read(const uchar *data, - int width, int height, int stride) -{ - const SRC *ptr = reinterpret_cast(data); - const int linestep = (stride / sizeof(SRC)) - width; - - SRC c1; - SRC c2 = 0; - int n1 = 0; - int n2 = 0; - int x = 0; - int y = 0; - - c1 = *ptr; - - // find second color - while (y < height) { - while (x < width) { - if (*ptr == c1) { - ++n1; - } else { - c2 = *ptr; - goto found_second_color; - } - ++ptr; - ++x; - } - x = 0; - ptr += linestep; - ++y; - } - -found_second_color: - // finish counting - while (y < height) { - while (x < width) { - if (*ptr == c1) { - ++n1; - } else if (*ptr == c2) { - ++n2; - } else { - return false; - } - ++ptr; - ++x; - } - x = 0; - ptr += linestep; - ++y; - } - - if (n2 > n1) { - const quint32 tmpC = c1; - c1 = c2; - c2 = tmpC; - } - - encoder->newBg |= (c1 != encoder->bg); - encoder->newFg |= (c2 != encoder->fg); - - encoder->bg = c1; - encoder->fg = c2; - - // create map - bool inRect = false; - numRects = 0; - ptr = reinterpret_cast(data); - for (y = 0; y < height; ++y) { - for (x = 0; x < width; ++x) { - if (inRect && *ptr == encoder->bg) { - // rect finished - setWidth(x - lastx()); - next(); - inRect = false; - } else if (!inRect && *ptr == encoder->fg) { - // rect start - setX(x); - setY(y); - setHeight(1); - inRect = true; - } - ++ptr; - } - if (inRect) { - // finish rect - setWidth(width - lastx()); - next(); - inRect = false; - } - ptr += linestep; - } - - return true; -} - -template -void QRfbDualColorHextile::write(QTcpSocket *socket) const -{ - const int bpp = encoder->server->clientBytesPerPixel(); - const int padding = 3; - QVarLengthArray buffer(padding + 2 * bpp + sizeof(char) + sizeof(numRects)); - char &subenc = buffer[padding]; - int n = padding + sizeof(subenc); - - subenc = 0x8; // AnySubrects - - if (encoder->newBg) { - subenc |= 0x2; // Background - encoder->server->convertPixels(buffer.data() + n, (char*)&encoder->bg, 1); - n += bpp; -// encoder->newBg = false; - } - - if (encoder->newFg) { - subenc |= 0x4; // Foreground - encoder->server->convertPixels(buffer.data() + n, (char*)&encoder->fg, 1); - n += bpp; -// encoder->newFg = false; - } - buffer[n] = numRects; - n += sizeof(numRects); - - socket->write(buffer.data() + padding, n - padding); - socket->write((char*)rects, numRects * sizeof(Rect)); -} - -template -void QRfbDualColorHextile::next() -{ - for (int r = numRects - 1; r >= 0; --r) { - if (recty(r) == lasty()) - continue; - if (recty(r) < lasty() - 1) // only search previous scanline - break; - if (rectx(r) == lastx() && width(r) == width(numRects)) { - ++rects[r].wh; - return; - } - } - ++numRects; -} - -template -inline void QRfbMultiColorHextile::setColor(SRC color) -{ - encoder->server->convertPixels(reinterpret_cast(rect(numRects)), - (const char*)&color, 1); -} - -template -inline bool QRfbMultiColorHextile::beginRect() -{ - if ((rects.size() + bpp + 2) > maxRectsSize) - return false; - rects.resize(rects.size() + bpp + 2); - return true; -} - -template -inline void QRfbMultiColorHextile::endRect() -{ - setHeight(numRects, 1); - ++numRects; -} - -template -bool QRfbMultiColorHextile::read(const uchar *data, - int width, int height, int stride) -{ - const SRC *ptr = reinterpret_cast(data); - const int linestep = (stride / sizeof(SRC)) - width; - - bpp = encoder->server->clientBytesPerPixel(); - - if (encoder->newBg) - encoder->bg = ptr[0]; - - const SRC bg = encoder->bg; - SRC color = bg; - bool inRect = false; - - numRects = 0; - rects.clear(); - - for (int y = 0; y < height; ++y) { - for (int x = 0; x < width; ++x) { - if (inRect && *ptr != color) { // end rect - setWidth(numRects, x - rectx(numRects)); - endRect(); - inRect = false; - } - - if (!inRect && *ptr != bg) { // begin rect - if (!beginRect()) - return false; - inRect = true; - color = *ptr; - setColor(color); - setX(numRects, x); - setY(numRects, y); - } - ++ptr; - } - if (inRect) { // end rect - setWidth(numRects, width - rectx(numRects)); - endRect(); - inRect = false; - } - ptr += linestep; - } - - return true; -} - -template -void QRfbMultiColorHextile::write(QTcpSocket *socket) const -{ - const int padding = 3; - QVarLengthArray buffer(bpp + padding + sizeof(quint8) + sizeof(numRects)); - - quint8 &subenc = buffer[padding]; - int n = padding + sizeof(quint8); - - subenc = 8 | 16; // AnySubrects | SubrectsColoured - - if (encoder->newBg) { - subenc |= 0x2; // Background - encoder->server->convertPixels(reinterpret_cast(buffer.data() + n), - reinterpret_cast(&encoder->bg), - 1); - n += bpp; -// encoder->newBg = false; - } - - buffer[n] = numRects; - n += sizeof(numRects); - - socket->write(reinterpret_cast(buffer.data() + padding), - n - padding); - socket->write(reinterpret_cast(rects.constData()), - rects.size()); -} - -bool QVNCServer::pixelConversionNeeded() const -{ - if (!sameEndian) - return true; - -#if Q_BYTE_ORDER == Q_BIG_ENDIAN - if (qvnc_screen->swapBytes()) - return true; -#endif - - const int screendepth = qvnc_screen->depth(); - if (screendepth != pixelFormat.bitsPerPixel) - return true; - - switch (screendepth) { - case 32: - case 24: - return false; - case 18: - return (pixelFormat.redBits == 6 - && pixelFormat.greenBits == 6 - && pixelFormat.blueBits == 6); - case 16: - return (pixelFormat.redBits == 5 - && pixelFormat.greenBits == 6 - && pixelFormat.blueBits == 5); - case 15: - return (pixelFormat.redBits == 5 - && pixelFormat.greenBits == 5 - && pixelFormat.blueBits == 5); - case 12: - return (pixelFormat.redBits == 4 - && pixelFormat.greenBits == 4 - && pixelFormat.blueBits == 4); - } - return true; -} - -// count: number of pixels -void QVNCServer::convertPixels(char *dst, const char *src, int count) const -{ - const int screendepth = qvnc_screen->depth(); - const bool isBgr = false; //### qvnc_screen->pixelType() == QScreen::BGRPixel; - - // cutoffs -#if Q_BYTE_ORDER == Q_BIG_ENDIAN - if (!swapBytes) -#endif - if (sameEndian) { - if (screendepth == pixelFormat.bitsPerPixel) { // memcpy cutoffs - - switch (screendepth) { - case 32: - memcpy(dst, src, count * sizeof(quint32)); - return; - case 16: - if (pixelFormat.redBits == 5 - && pixelFormat.greenBits == 6 - && pixelFormat.blueBits == 5) - { - memcpy(dst, src, count * sizeof(quint16)); - return; - } - } - } else if (screendepth == 16 && pixelFormat.bitsPerPixel == 32) { -#if defined(__i386__) // Currently fails on ARM if dst is not 4 byte aligned - const quint32 *src32 = reinterpret_cast(src); - quint32 *dst32 = reinterpret_cast(dst); - int count32 = count * sizeof(quint16) / sizeof(quint32); - while (count32--) { - const quint32 s = *src32++; - quint32 result1; - quint32 result2; - - // red - result1 = ((s & 0xf8000000) | ((s & 0xe0000000) >> 5)) >> 8; - result2 = ((s & 0x0000f800) | ((s & 0x0000e000) >> 5)) << 8; - - // green - result1 |= ((s & 0x07e00000) | ((s & 0x06000000) >> 6)) >> 11; - result2 |= ((s & 0x000007e0) | ((s & 0x00000600) >> 6)) << 5; - - // blue - result1 |= ((s & 0x001f0000) | ((s & 0x001c0000) >> 5)) >> 13; - result2 |= ((s & 0x0000001f) | ((s & 0x0000001c) >> 5)) << 3; - - *dst32++ = result2; - *dst32++ = result1; - } - if (count & 0x1) { - const quint16 *src16 = reinterpret_cast(src); - dst32[count - 1] = qt_conv16ToRgb(src16[count - 1]); - } - return; -#endif - } - } - - const int bytesPerPixel = (pixelFormat.bitsPerPixel + 7) / 8; - -// nibble = 0; - - for (int i = 0; i < count; ++i) { - int r, g, b; - - switch (screendepth) { -#if 0 - case 4: { - if (!nibble) { - r = ((*src) & 0x0f) << 4; - } else { - r = (*src) & 0xf0; - src++; - } - nibble = !nibble; - g = b = r; - break; - } -#endif -#if 0 - case 8: { - QRgb rgb = qvnc_screen->clut()[int(*src)]; - r = qRed(rgb); - g = qGreen(rgb); - b = qBlue(rgb); - src++; - break; - } -#endif -#ifdef QT_QWS_DEPTH_12 - case 12: { - quint32 p = quint32(*reinterpret_cast(src)); - r = qRed(p); - g = qGreen(p); - b = qBlue(p); - src += sizeof(qrgb444); - break; - } -#endif -#ifdef QT_QWS_DEPTH_15 - case 15: { - quint32 p = quint32(*reinterpret_cast(src)); - r = qRed(p); - g = qGreen(p); - b = qBlue(p); - src += sizeof(qrgb555); - break; - } -#endif - case 16: { - quint16 p = *reinterpret_cast(src); -#if Q_BYTE_ORDER == Q_BIG_ENDIAN - if (swapBytes) - p = ((p & 0xff) << 8) | ((p & 0xff00) >> 8); -#endif - r = (p >> 11) & 0x1f; - g = (p >> 5) & 0x3f; - b = p & 0x1f; - r <<= 3; - g <<= 2; - b <<= 3; - src += sizeof(quint16); - break; - } -#ifdef QT_QWS_DEPTH_18 - case 18: { - quint32 p = quint32(*reinterpret_cast(src)); - r = qRed(p); - g = qGreen(p); - b = qBlue(p); - src += sizeof(qrgb666); - break; - } -#endif -#ifdef QT_QWS_DEPTH_24 - case 24: { - quint32 p = quint32(*reinterpret_cast(src)); - r = qRed(p); - g = qGreen(p); - b = qBlue(p); - src += sizeof(qrgb888); - break; - } -#endif - case 32: { - quint32 p = *reinterpret_cast(src); - r = (p >> 16) & 0xff; - g = (p >> 8) & 0xff; - b = p & 0xff; - src += sizeof(quint32); - break; - } - default: { - r = g = b = 0; - qDebug("QVNCServer: don't support %dbpp display", screendepth); - return; - } - } - -#if Q_BYTE_ORDER == Q_BIG_ENDIAN - if (swapBytes ^ isBgr) -#else - if (isBgr) -#endif - qSwap(r, b); - - r >>= (8 - pixelFormat.redBits); - g >>= (8 - pixelFormat.greenBits); - b >>= (8 - pixelFormat.blueBits); - - int pixel = (r << pixelFormat.redShift) | - (g << pixelFormat.greenShift) | - (b << pixelFormat.blueShift); - - if (sameEndian || pixelFormat.bitsPerPixel == 8) { - memcpy(dst, &pixel, bytesPerPixel); // XXX: do a simple for-loop instead? - dst += bytesPerPixel; - continue; - } - - - if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { - switch (pixelFormat.bitsPerPixel) { - case 16: - pixel = (((pixel & 0x0000ff00) << 8) | - ((pixel & 0x000000ff) << 24)); - break; - case 32: - pixel = (((pixel & 0xff000000) >> 24) | - ((pixel & 0x00ff0000) >> 8) | - ((pixel & 0x0000ff00) << 8) | - ((pixel & 0x000000ff) << 24)); - break; - default: - qDebug("Cannot handle %d bpp client", pixelFormat.bitsPerPixel); - } - } else { // QSysInfo::ByteOrder == QSysInfo::LittleEndian - switch (pixelFormat.bitsPerPixel) { - case 16: - pixel = (((pixel & 0xff000000) >> 8) | - ((pixel & 0x00ff0000) << 8)); - break; - case 32: - pixel = (((pixel & 0xff000000) >> 24) | - ((pixel & 0x00ff0000) >> 8) | - ((pixel & 0x0000ff00) << 8) | - ((pixel & 0x000000ff) << 24)); - break; - default: - qDebug("Cannot handle %d bpp client", - pixelFormat.bitsPerPixel); - break; - } - } - memcpy(dst, &pixel, bytesPerPixel); // XXX: simple for-loop instead? - dst += bytesPerPixel; - } -} - -#ifndef QT_NO_QWS_CURSOR -static void blendCursor(QImage &image, const QRect &imageRect) -{ - const QRect cursorRect = qt_screencursor->boundingRect(); - const QRect intersection = (cursorRect & imageRect); - const QRect destRect = intersection.translated(-imageRect.topLeft()); - const QRect srcRect = intersection.translated(-cursorRect.topLeft()); - - QPainter painter(&image); - painter.drawImage(destRect, qt_screencursor->image(), srcRect); - painter.end(); -} -#endif // QT_NO_QWS_CURSOR - -QVNCDirtyMap::QVNCDirtyMap(QVNCGraphicsSystemScreen *s) - : bytesPerPixel(0), numDirty(0), screen(s) -{ - bytesPerPixel = (screen->depth() + 7) / 8; - QSize screenSize = screen->geometry().size(); - bufferWidth = screenSize.width(); - bufferHeight = screenSize.height(); - bufferStride = bufferWidth * bytesPerPixel; - buffer = new uchar[bufferHeight * bufferStride]; - - mapWidth = (bufferWidth + MAP_TILE_SIZE - 1) / MAP_TILE_SIZE; - mapHeight = (bufferHeight + MAP_TILE_SIZE - 1) / MAP_TILE_SIZE; - numTiles = mapWidth * mapHeight; - map = new uchar[numTiles]; -} - -QVNCDirtyMap::~QVNCDirtyMap() -{ - delete[] map; - delete[] buffer; -} - -void QVNCDirtyMap::reset() -{ - memset(map, 1, numTiles); - memset(buffer, 0, bufferHeight * bufferStride); - numDirty = numTiles; -} - -inline bool QVNCDirtyMap::dirty(int x, int y) const -{ - return map[y * mapWidth + x]; -} - -inline void QVNCDirtyMap::setClean(int x, int y) -{ - map[y * mapWidth + x] = 0; - --numDirty; -} - -template -void QVNCDirtyMapOptimized::setDirty(int tileX, int tileY, bool force) -{ - static bool alwaysForce = qgetenv("QT_VNC_NO_COMPAREBUFFER").toInt(); - if (alwaysForce) - force = true; - - bool changed = false; - - if (!force) { - const int lstep = screen->linestep(); - const int startX = tileX * MAP_TILE_SIZE; - const int startY = tileY * MAP_TILE_SIZE; - const uchar *scrn = screen->base() - + startY * lstep + startX * bytesPerPixel; - uchar *old = buffer + startY * bufferStride + startX * sizeof(T); - - const int tileHeight = (startY + MAP_TILE_SIZE > bufferHeight ? - bufferHeight - startY : MAP_TILE_SIZE); - const int tileWidth = (startX + MAP_TILE_SIZE > bufferWidth ? - bufferWidth - startX : MAP_TILE_SIZE); - const bool doInlines = (tileWidth == MAP_TILE_SIZE); - - int y = tileHeight; - - if (doInlines) { // hw: memcmp/memcpy is inlined when using constants - while (y) { - if (memcmp(old, scrn, sizeof(T) * MAP_TILE_SIZE)) { - changed = true; - break; - } - scrn += lstep; - old += bufferStride; - --y; - } - - while (y) { - memcpy(old, scrn, sizeof(T) * MAP_TILE_SIZE); - scrn += lstep; - old += bufferStride; - --y; - } - } else { - while (y) { - if (memcmp(old, scrn, sizeof(T) * tileWidth)) { - changed = true; - break; - } - scrn += lstep; - old += bufferStride; - --y; - } - - while (y) { - memcpy(old, scrn, sizeof(T) * tileWidth); - scrn += lstep; - old += bufferStride; - --y; - } - } - } - - const int mapIndex = tileY * mapWidth + tileX; - if ((force || changed) && !map[mapIndex]) { - map[mapIndex] = 1; - ++numDirty; - } -} - -template -QRfbHextileEncoder::QRfbHextileEncoder(QVNCServer *s) - : QRfbEncoder(s), - singleColorHextile(this), dualColorHextile(this), multiColorHextile(this) -{ -} - -/* - \internal - Send dirty rects using hextile encoding. -*/ -template -void QRfbHextileEncoder::write() -{ -// QWSDisplay::grab(true); - - QVNCDirtyMap *map = server->dirtyMap(); - QTcpSocket *socket = server->clientSocket(); - - const quint32 encoding = htonl(5); // hextile encoding - const int bytesPerPixel = server->clientBytesPerPixel(); - - { - const char tmp[2] = { 0, 0 }; // msg type, padding - socket->write(tmp, sizeof(tmp)); - } - { - const quint16 count = htons(map->numDirty); - socket->write((char *)&count, sizeof(count)); - } - - if (map->numDirty <= 0) { -// QWSDisplay::ungrab(); - return; - } - - newBg = true; - newFg = true; - - const QImage screenImage = server->screenImage(); - QRfbRect rect(0, 0, MAP_TILE_SIZE, MAP_TILE_SIZE); - - QSize screenSize = server->screen()->geometry().size(); - - for (int y = 0; y < map->mapHeight; ++y) { - if (rect.y + MAP_TILE_SIZE > screenSize.height()) - rect.h = screenSize.height() - rect.y; - rect.w = MAP_TILE_SIZE; - for (int x = 0; x < map->mapWidth; ++x) { - if (!map->dirty(x, y)) - continue; - map->setClean(x, y); - - rect.x = x * MAP_TILE_SIZE; - if (rect.x + MAP_TILE_SIZE > screenSize.width()) //###deviceWidth ??? - rect.w = screenSize.width() - rect.x; - rect.write(socket); - - socket->write((char *)&encoding, sizeof(encoding)); - - const uchar *screendata = screenImage.scanLine(rect.y) - + rect.x * screenImage.depth() / 8; - int linestep = screenImage.bytesPerLine(); - -#ifndef QT_NO_QWS_CURSOR - // hardware cursors must be blended with the screen memory - const bool doBlendCursor = qt_screencursor - && !server->hasClientCursor() - && qt_screencursor->isAccelerated(); - QImage tileImage; - if (doBlendCursor) { - const QRect tileRect(rect.x, rect.y, rect.w, rect.h); - const QRect cursorRect = qt_screencursor->boundingRect() - .translated(-server->screen()->offset()); - if (tileRect.intersects(cursorRect)) { - tileImage = screenImage.copy(tileRect); - blendCursor(tileImage, - tileRect.translated(server->screen()->offset())); - screendata = tileImage.bits(); - linestep = tileImage.bytesPerLine(); - } - } -#endif // QT_NO_QWS_CURSOR - - if (singleColorHextile.read(screendata, rect.w, rect.h, linestep)) { - singleColorHextile.write(socket); - } else if (dualColorHextile.read(screendata, rect.w, rect.h, linestep)) { - dualColorHextile.write(socket); - } else if (multiColorHextile.read(screendata, rect.w, rect.h, linestep)) { - multiColorHextile.write(socket); - } else if (server->doPixelConversion()) { - const int bufferSize = rect.w * rect.h * bytesPerPixel + 1; - const int padding = sizeof(quint32) - sizeof(char); - buffer.resize(bufferSize + padding); - - buffer[padding] = 1; // Raw subencoding - - // convert pixels - char *b = buffer.data() + padding + 1; - const int bstep = rect.w * bytesPerPixel; - for (int i = 0; i < rect.h; ++i) { - server->convertPixels(b, (const char*)screendata, rect.w); - screendata += linestep; - b += bstep; - } - socket->write(buffer.constData() + padding, bufferSize); - } else { - quint8 subenc = 1; // Raw subencoding - socket->write((char *)&subenc, 1); - - // send pixels - for (int i = 0; i < rect.h; ++i) { - socket->write((const char*)screendata, - rect.w * bytesPerPixel); - screendata += linestep; - } - } - } - if (socket->state() == QAbstractSocket::UnconnectedState) - break; - rect.y += MAP_TILE_SIZE; - } - socket->flush(); - Q_ASSERT(map->numDirty == 0); - -// QWSDisplay::ungrab(); -} - -void QRfbRawEncoder::write() -{ -// QWSDisplay::grab(false); - - QVNCDirtyMap *map = server->dirtyMap(); - QTcpSocket *socket = server->clientSocket(); - - const int bytesPerPixel = server->clientBytesPerPixel(); - QSize screenSize = server->screen()->geometry().size(); - - // create a region from the dirty rects and send the region's merged rects. - QRegion rgn; - if (map) { - for (int y = 0; y < map->mapHeight; ++y) { - for (int x = 0; x < map->mapWidth; ++x) { - if (!map->dirty(x, y)) - continue; - rgn += QRect(x * MAP_TILE_SIZE, y * MAP_TILE_SIZE, - MAP_TILE_SIZE, MAP_TILE_SIZE); - map->setClean(x, y); - } - } - - rgn &= QRect(0, 0, screenSize.width(), - screenSize.height()); - } - const QVector rects = rgn.rects(); - - { - const char tmp[2] = { 0, 0 }; // msg type, padding - socket->write(tmp, sizeof(tmp)); - } - - { - const quint16 count = htons(rects.size()); - socket->write((char *)&count, sizeof(count)); - } - - if (rects.size() <= 0) { -// QWSDisplay::ungrab(); - return; - } - - const QImage *screenImage = server->screenImage(); - - for (int i = 0; i < rects.size(); ++i) { - const QRect tileRect = rects.at(i); - const QRfbRect rect(tileRect.x(), tileRect.y(), - tileRect.width(), tileRect.height()); - rect.write(socket); - - const quint32 encoding = htonl(0); // raw encoding - socket->write((char *)&encoding, sizeof(encoding)); - - int linestep = screenImage->bytesPerLine(); - const uchar *screendata = screenImage->scanLine(rect.y) - + rect.x * screenImage->depth() / 8; - -#ifndef QT_NO_QWS_CURSOR - // hardware cursors must be blended with the screen memory - const bool doBlendCursor = qt_screencursor - && !server->hasClientCursor() - && qt_screencursor->isAccelerated(); - QImage tileImage; - if (doBlendCursor) { - const QRect cursorRect = qt_screencursor->boundingRect() - .translated(-server->screen()->offset()); - if (tileRect.intersects(cursorRect)) { - tileImage = screenImage->copy(tileRect); - blendCursor(tileImage, - tileRect.translated(server->screen()->offset())); - screendata = tileImage.bits(); - linestep = tileImage.bytesPerLine(); - } - } -#endif // QT_NO_QWS_CURSOR - - if (server->doPixelConversion()) { - const int bufferSize = rect.w * rect.h * bytesPerPixel; - if (bufferSize > buffer.size()) - buffer.resize(bufferSize); - - // convert pixels - char *b = buffer.data(); - const int bstep = rect.w * bytesPerPixel; - for (int i = 0; i < rect.h; ++i) { - server->convertPixels(b, (const char*)screendata, rect.w); - screendata += linestep; - b += bstep; - } - socket->write(buffer.constData(), bufferSize); - } else { - for (int i = 0; i < rect.h; ++i) { - socket->write((const char*)screendata, rect.w * bytesPerPixel); - screendata += linestep; - } - } - if (socket->state() == QAbstractSocket::UnconnectedState) - break; - } - socket->flush(); - -// QWSDisplay::ungrab(); -} - -inline QImage *QVNCServer::screenImage() const -{ - return qvnc_screen->image(); -} - -void QVNCServer::checkUpdate() -{ - if (!wantUpdate) - return; - - if (dirtyCursor) { -#ifndef QT_NO_QWS_CURSOR - Q_ASSERT(qvnc_cursor); - qvnc_cursor->write(); -#endif - cursor->sendClientCursor(); - dirtyCursor = false; - wantUpdate = false; - return; - } - - if (dirtyMap()->numDirty > 0) { - if (encoder) - encoder->write(); - wantUpdate = false; - } -} - -void QVNCServer::discardClient() -{ - timer->stop(); - state = Unconnected; - delete encoder; - encoder = 0; -#ifndef QT_NO_QWS_CURSOR - delete qvnc_cursor; - qvnc_cursor = 0; -#endif -// if (!qvnc_screen->screen()) -// QWSServer::instance()->enablePainting(false); -} - - - -QVNCGraphicsSystemScreenPrivate::QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent) - : dpiX(72), dpiY(72), doOnScreenSurface(false), refreshRate(25), - vncServer(0), q_ptr(parent) -{ -#if 0//ndef QT_NO_QWS_SIGNALHANDLER - QWSSignalHandler::instance()->addObject(this); -#endif - - vncServer = new QVNCServer(q_ptr); - vncServer->setRefreshRate(refreshRate); - - - Q_ASSERT(q_ptr->depth() == 32); - - dirty = new QVNCDirtyMapOptimized(q_ptr); -} - -QVNCGraphicsSystemScreenPrivate::~QVNCGraphicsSystemScreenPrivate() -{ -} - - -void QVNCGraphicsSystemScreenPrivate::setDirty(const QRect& rect, bool force) -{ - if (rect.isEmpty()) - return; - -// if (q_ptr->screen()) -// q_ptr->screen()->setDirty(rect); - - if (!vncServer || !vncServer->isConnected()) { -// qDebug() << "QVNCGraphicsSystemScreenPrivate::setDirty() - Not connected"; - return; - } - const QRect r = rect; // .translated(-q_ptr->offset()); - const int x1 = r.x() / MAP_TILE_SIZE; - int y = r.y() / MAP_TILE_SIZE; - for (; (y <= r.bottom() / MAP_TILE_SIZE) && y < dirty->mapHeight; y++) - for (int x = x1; (x <= r.right() / MAP_TILE_SIZE) && x < dirty->mapWidth; x++) - dirty->setDirty(x, y, force); - - vncServer->setDirty(); -} - - - - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/vnc/qvncserver.h b/src/plugins/graphicssystems/vnc/qvncserver.h deleted file mode 100644 index 4fcdbae..0000000 --- a/src/plugins/graphicssystems/vnc/qvncserver.h +++ /dev/null @@ -1,534 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QSCREENVNC_P_H -#define QSCREENVNC_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the QLibrary class. This header file may change from version to version -// without notice, or even be removed. -// -// We mean it. -// - -#include "qgraphicssystem_vnc.h" -#include "qvnccursor.h" -#define QT_NO_QWS_CURSOR - -#ifndef QT_NO_QWS_VNC - -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QVNCServer; - -#ifndef QT_NO_QWS_CURSOR -class QVNCCursor : public QProxyScreenCursor -{ -public: - QVNCCursor(QVNCGraphicsSystemScreen *s); - ~QVNCCursor(); - - void hide(); - void show(); - void set(const QImage &image, int hotx, int hoty); - void move(int x, int y); - -private: - void setDirty(const QRect &r) const; - QVNCGraphicsSystemScreen *screen; -}; - -class QVNCClientCursor : public QProxyScreenCursor -{ -public: - QVNCClientCursor(QVNCServer *s); - ~QVNCClientCursor(); - - void set(const QImage &image, int hotx, int hoty); - void write() const; - -private: - QVNCServer *server; -}; -#endif // QT_NO_QWS_CURSOR - -#define MAP_TILE_SIZE 16 -#define MAP_WIDTH 1280 / MAP_TILE_SIZE -#define MAP_HEIGHT 1024 / MAP_TILE_SIZE - -class QVNCDirtyMap -{ -public: - QVNCDirtyMap(QVNCGraphicsSystemScreen *screen); - virtual ~QVNCDirtyMap(); - - void reset(); - bool dirty(int x, int y) const; - virtual void setDirty(int x, int y, bool force = false) = 0; - void setClean(int x, int y); - - int bytesPerPixel; - - int numDirty; - int mapWidth; - int mapHeight; - -protected: - uchar *map; - QVNCGraphicsSystemScreen *screen; - uchar *buffer; - int bufferWidth; - int bufferHeight; - int bufferStride; - int numTiles; -}; - -template -class QVNCDirtyMapOptimized : public QVNCDirtyMap -{ -public: - QVNCDirtyMapOptimized(QVNCGraphicsSystemScreen *screen) : QVNCDirtyMap(screen) {} - ~QVNCDirtyMapOptimized() {} - - void setDirty(int x, int y, bool force = false); -}; - -class QRfbRect -{ -public: - QRfbRect() {} - QRfbRect(quint16 _x, quint16 _y, quint16 _w, quint16 _h) { - x = _x; y = _y; w = _w; h = _h; - } - - void read(QTcpSocket *s); - void write(QTcpSocket *s) const; - - quint16 x; - quint16 y; - quint16 w; - quint16 h; -}; - -class QRfbPixelFormat -{ -public: - static int size() { return 16; } - - void read(QTcpSocket *s); - void write(QTcpSocket *s); - - int bitsPerPixel; - int depth; - bool bigEndian; - bool trueColor; - int redBits; - int greenBits; - int blueBits; - int redShift; - int greenShift; - int blueShift; -}; - -class QRfbServerInit -{ -public: - QRfbServerInit() { name = 0; } - ~QRfbServerInit() { delete[] name; } - - int size() const { return QRfbPixelFormat::size() + 8 + strlen(name); } - void setName(const char *n); - - void read(QTcpSocket *s); - void write(QTcpSocket *s); - - quint16 width; - quint16 height; - QRfbPixelFormat format; - char *name; -}; - -class QRfbSetEncodings -{ -public: - bool read(QTcpSocket *s); - - quint16 count; -}; - -class QRfbFrameBufferUpdateRequest -{ -public: - bool read(QTcpSocket *s); - - char incremental; - QRfbRect rect; -}; - -class QRfbKeyEvent -{ -public: - bool read(QTcpSocket *s); - - char down; - int keycode; - int unicode; -}; - -class QRfbPointerEvent -{ -public: - bool read(QTcpSocket *s); - - Qt::MouseButtons buttons; - enum { WheelNone, - WheelUp, - WheelDown, - WheelLeft, - WheelRight - } wheelDirection; - quint16 x; - quint16 y; -}; - -class QRfbClientCutText -{ -public: - bool read(QTcpSocket *s); - - quint32 length; -}; - -class QVNCGraphicsSystemScreenPrivate : public QObject -{ -public: - QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent); - ~QVNCGraphicsSystemScreenPrivate(); - - void setDirty(const QRect &rect, bool force = false); - void configure(); - - qreal dpiX; - qreal dpiY; - bool doOnScreenSurface; - QVNCDirtyMap *dirty; - int refreshRate; - QVNCServer *vncServer; - -#if !defined(QT_NO_QWS_MULTIPROCESS) && !defined(QT_NO_SHAREDMEMORY) - QSharedMemory shm; -#endif - - QVNCGraphicsSystemScreen *q_ptr; -}; - -class QRfbEncoder -{ -public: - QRfbEncoder(QVNCServer *s) : server(s) {} - virtual ~QRfbEncoder() {} - - virtual void write() = 0; - -protected: - QVNCServer *server; -}; - -class QRfbRawEncoder : public QRfbEncoder -{ -public: - QRfbRawEncoder(QVNCServer *s) : QRfbEncoder(s) {} - - void write(); - -private: - QByteArray buffer; -}; - -template class QRfbHextileEncoder; - -template -class QRfbSingleColorHextile -{ -public: - QRfbSingleColorHextile(QRfbHextileEncoder *e) : encoder(e) {} - bool read(const uchar *data, int width, int height, int stride); - void write(QTcpSocket *socket) const; - -private: - QRfbHextileEncoder *encoder; -}; - -template -class QRfbDualColorHextile -{ -public: - QRfbDualColorHextile(QRfbHextileEncoder *e) : encoder(e) {} - bool read(const uchar *data, int width, int height, int stride); - void write(QTcpSocket *socket) const; - -private: - struct Rect { - quint8 xy; - quint8 wh; - } Q_PACKED rects[8 * 16]; - - quint8 numRects; - QRfbHextileEncoder *encoder; - -private: - inline int lastx() const { return rectx(numRects); } - inline int lasty() const { return recty(numRects); } - inline int rectx(int r) const { return rects[r].xy >> 4; } - inline int recty(int r) const { return rects[r].xy & 0x0f; } - inline int width(int r) const { return (rects[r].wh >> 4) + 1; } - inline int height(int r) const { return (rects[r].wh & 0x0f) + 1; } - - inline void setX(int r, int x) { - rects[r].xy = (x << 4) | (rects[r].xy & 0x0f); - } - inline void setY(int r, int y) { - rects[r].xy = (rects[r].xy & 0xf0) | y; - } - inline void setWidth(int r, int width) { - rects[r].wh = ((width - 1) << 4) | (rects[r].wh & 0x0f); - } - inline void setHeight(int r, int height) { - rects[r].wh = (rects[r].wh & 0xf0) | (height - 1); - } - - inline void setWidth(int width) { setWidth(numRects, width); } - inline void setHeight(int height) { setHeight(numRects, height); } - inline void setX(int x) { setX(numRects, x); } - inline void setY(int y) { setY(numRects, y); } - void next(); -}; - -template -class QRfbMultiColorHextile -{ -public: - QRfbMultiColorHextile(QRfbHextileEncoder *e) : encoder(e) {} - bool read(const uchar *data, int width, int height, int stride); - void write(QTcpSocket *socket) const; - -private: - inline quint8* rect(int r) { - return rects.data() + r * (bpp + 2); - } - inline const quint8* rect(int r) const { - return rects.constData() + r * (bpp + 2); - } - inline void setX(int r, int x) { - quint8 *ptr = rect(r) + bpp; - *ptr = (x << 4) | (*ptr & 0x0f); - } - inline void setY(int r, int y) { - quint8 *ptr = rect(r) + bpp; - *ptr = (*ptr & 0xf0) | y; - } - void setColor(SRC color); - inline int rectx(int r) const { - const quint8 *ptr = rect(r) + bpp; - return *ptr >> 4; - } - inline int recty(int r) const { - const quint8 *ptr = rect(r) + bpp; - return *ptr & 0x0f; - } - inline void setWidth(int r, int width) { - quint8 *ptr = rect(r) + bpp + 1; - *ptr = ((width - 1) << 4) | (*ptr & 0x0f); - } - inline void setHeight(int r, int height) { - quint8 *ptr = rect(r) + bpp + 1; - *ptr = (*ptr & 0xf0) | (height - 1); - } - - bool beginRect(); - void endRect(); - - static const int maxRectsSize = 16 * 16; - QVarLengthArray rects; - - quint8 bpp; - quint8 numRects; - QRfbHextileEncoder *encoder; -}; - -template -class QRfbHextileEncoder : public QRfbEncoder -{ -public: - QRfbHextileEncoder(QVNCServer *s); - void write(); - -private: - enum SubEncoding { - Raw = 1, - BackgroundSpecified = 2, - ForegroundSpecified = 4, - AnySubrects = 8, - SubrectsColoured = 16 - }; - - QByteArray buffer; - QRfbSingleColorHextile singleColorHextile; - QRfbDualColorHextile dualColorHextile; - QRfbMultiColorHextile multiColorHextile; - - SRC bg; - SRC fg; - bool newBg; - bool newFg; - - friend class QRfbSingleColorHextile; - friend class QRfbDualColorHextile; - friend class QRfbMultiColorHextile; -}; - -class QVNCServer : public QObject -{ - Q_OBJECT -public: - QVNCServer(QVNCGraphicsSystemScreen *screen); - QVNCServer(QVNCGraphicsSystemScreen *screen, int id); - ~QVNCServer(); - - void setDirty(); - void setDirtyCursor() { dirtyCursor = true; setDirty(); } - inline bool isConnected() const { return state == Connected; } - inline void setRefreshRate(int rate) { refreshRate = rate; } - - enum ClientMsg { SetPixelFormat = 0, - FixColourMapEntries = 1, - SetEncodings = 2, - FramebufferUpdateRequest = 3, - KeyEvent = 4, - PointerEvent = 5, - ClientCutText = 6 }; - - enum ServerMsg { FramebufferUpdate = 0, - SetColourMapEntries = 1 }; - - void convertPixels(char *dst, const char *src, int count) const; - - inline int clientBytesPerPixel() const { - return pixelFormat.bitsPerPixel / 8; - } - - inline QVNCGraphicsSystemScreen* screen() const { return qvnc_screen; } - inline QVNCDirtyMap* dirtyMap() const { return qvnc_screen->dirtyMap(); } - inline QTcpSocket* clientSocket() const { return client; } - QImage *screenImage() const; - inline bool doPixelConversion() const { return needConversion; } -#ifndef QT_NO_QWS_CURSOR - inline bool hasClientCursor() const { return qvnc_cursor != 0; } -#endif - - void setCursor(QVNCCursor * c) { cursor = c; } -private: - void setPixelFormat(); - void setEncodings(); - void frameBufferUpdateRequest(); - void pointerEvent(); - void keyEvent(); - void clientCutText(); - bool pixelConversionNeeded() const; - -private slots: - void newConnection(); - void readClient(); - void checkUpdate(); - void discardClient(); - void sendInputEvents(); - -private: - void init(uint port); - enum ClientState { Unconnected, Protocol, Init, Connected }; - QTimer *timer; - QTcpServer *serverSocket; - QTcpSocket *client; - ClientState state; - quint8 msgType; - bool handleMsg; - QRfbPixelFormat pixelFormat; - Qt::KeyboardModifiers keymod; - Qt::MouseButtons buttons; - int encodingsPending; - int cutTextPending; - uint supportCopyRect : 1; - uint supportRRE : 1; - uint supportCoRRE : 1; - uint supportHextile : 1; - uint supportZRLE : 1; - uint supportCursor : 1; - uint supportDesktopSize : 1; - bool wantUpdate; - bool sameEndian; - bool needConversion; -#if Q_BYTE_ORDER == Q_BIG_ENDIAN - bool swapBytes; -#endif - bool dirtyCursor; - int refreshRate; - QVNCGraphicsSystemScreen *qvnc_screen; -#ifndef QT_NO_QWS_CURSOR - QVNCClientCursor *qvnc_cursor; -#endif - - QRfbEncoder *encoder; - QVNCCursor *cursor; -}; - - -QT_END_NAMESPACE -#endif // QT_NO_QWS_VNC -#endif // QSCREENVNC_P_H diff --git a/src/plugins/graphicssystems/vnc/vnc.pro b/src/plugins/graphicssystems/vnc/vnc.pro deleted file mode 100644 index 0b73b5b..0000000 --- a/src/plugins/graphicssystems/vnc/vnc.pro +++ /dev/null @@ -1,19 +0,0 @@ -TARGET = qvncgraphicssystem -include(../../qpluginbase.pri) - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -SOURCES = main.cpp qgraphicssystem_vnc.cpp -HEADERS = qgraphicssystem_vnc.h - -HEADERS += qvncserver.h -SOURCES += qvncserver.cpp - -HEADERS += qvnccursor.h -SOURCES += qvnccursor.cpp - -include(../fb_base/fb_base.pri) - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems - -INSTALLS += target diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp new file mode 100644 index 0000000..d30746a --- /dev/null +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -0,0 +1,364 @@ +#include "fb_base.h" + +#include +#include +#include +#include +#include + +QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen *scr) + : QGraphicsSystemCursor(scr), currentRect(QRect()), prevRect(QRect()) +{ + graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); + setCursor(Qt::ArrowCursor); +} + +QRect QGraphicsSystemSoftwareCursor::getCurrentRect() +{ + QRect rect = graphic->image()->rect().translated(-graphic->hotspot().x(), + -graphic->hotspot().y()); + rect.translate(QCursor::pos()); + return rect; +} + + +void QGraphicsSystemSoftwareCursor::pointerEvent(const QMouseEvent & e) +{ + Q_UNUSED(e); + currentRect = getCurrentRect(); + screen->setDirty(currentRect); +} + +QRect QGraphicsSystemSoftwareCursor::drawCursor(QPainter & painter) +{ + if (currentRect.isNull()) + return QRect(); + + prevRect = currentRect; + painter.drawImage(prevRect, *graphic->image()); + return prevRect; +} + +QRect QGraphicsSystemSoftwareCursor::dirtyRect() +{ + if (!prevRect.isNull()) { + QRect rect = prevRect; + prevRect = QRect(); + return rect; + } + return QRect(); +} + +void QGraphicsSystemSoftwareCursor::setCursor(Qt::CursorShape shape) +{ + graphic->set(shape); +} + +void QGraphicsSystemSoftwareCursor::setCursor(const QImage * image, int hotx, int hoty) +{ + graphic->set(image, hotx, hoty); +} + +void QGraphicsSystemSoftwareCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) +{ + graphic->set(data, mask, width, height, hotX, hotY); +} + +void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) +{ + Q_UNUSED(widget); + Qt::CursorShape shape = widgetCursor->shape(); + + if (shape == Qt::BitmapCursor) { + // application supplied cursor + QPoint spot = widgetCursor->hotSpot(); + setCursor(&widgetCursor->pixmap().toImage(), spot.x(), spot.y()); + } else { + // system cursor + setCursor(shape); + } + currentRect = getCurrentRect(); + screen->setDirty(currentRect); +} + +QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) +{ + mScreenImage = new QImage(mGeometry.size(), mFormat); + redrawTimer.setSingleShot(true); + redrawTimer.setInterval(0); + QObject::connect(&redrawTimer, SIGNAL(timeout()), this, SLOT(doRedraw())); +} + +void QGraphicsSystemFbScreen::setGeometry(QRect rect) +{ + delete mScreenImage; + mGeometry = rect; + mScreenImage = new QImage(mGeometry.size(), mFormat); + delete compositePainter; + compositePainter = 0; + invalidateRectCache(); +} + +void QGraphicsSystemFbScreen::setDepth(int depth) +{ + mDepth = depth; +} + +void QGraphicsSystemFbScreen::setPhysicalSize(QSize size) +{ + mPhysicalSize = size; +} + +void QGraphicsSystemFbScreen::setFormat(QImage::Format format) +{ + mFormat = format; + delete mScreenImage; + mScreenImage = new QImage(mGeometry.size(), mFormat); + delete compositePainter; + compositePainter = 0; +} + +QGraphicsSystemFbScreen::~QGraphicsSystemFbScreen() +{ + delete compositePainter; + delete mScreenImage; +} + +void QGraphicsSystemFbScreen::setDirty(const QRect &rect) +{ + repaintRegion += rect; + if (!redrawTimer.isActive()) { + redrawTimer.start(); + } +} + +void QGraphicsSystemFbScreen::generateRects() +{ + cachedRects.clear(); + QRegion remainingScreen(mGeometry); + + for (int i = 0; i < windowStack.length(); i++) { + if (remainingScreen.isEmpty()) + break; + if (!windowStack[i]->window()->testAttribute(Qt::WA_TranslucentBackground)) { + remainingScreen -= windowStack[i]->geometry(); + QRegion windowRegion(windowStack[i]->geometry()); + windowRegion -= remainingScreen; + foreach(QRect rect, windowRegion.rects()) { + cachedRects += QPair(rect, i); + } + } + } + foreach (QRect rect, remainingScreen.rects()) + cachedRects += QPair(rect, -1); + isUpToDate = true; + return; +} + + + +QRegion QGraphicsSystemFbScreen::doRedraw() +{ + QRegion touchedRegion; + if (cursor) + repaintRegion += cursor->dirtyRect(); + if (repaintRegion.isEmpty()) + return touchedRegion; + + QVector rects = repaintRegion.rects(); + + if (!isUpToDate) + generateRects(); + + if (!compositePainter) + compositePainter = new QPainter(mScreenImage); + for (int rectIndex = 0; rectIndex < repaintRegion.numRects(); rectIndex++) { + QRegion rectRegion = rects[rectIndex]; + + for(int i = 0; i < cachedRects.length(); i++) { + QRect screenSubRect = cachedRects[i].first; + int layer = cachedRects[i].second; + QRegion intersect = rectRegion.intersected(screenSubRect); + + if (intersect.isEmpty()) + continue; + + rectRegion -= intersect; + + // we only expect one rectangle, but defensive coding... + foreach (QRect rect, intersect.rects()) { + bool firstLayer = true; + if (layer == -1) { + compositePainter->fillRect(rect, Qt::black); + firstLayer = false; + layer = windowStack.size() - 1; + } + + for (int layerIndex = layer; layerIndex != -1; layerIndex--) { + if (!windowStack[layerIndex]->visible()) + continue; + if (windowStack[layerIndex]->window()->isMinimized()) + continue; + QRect windowRect = windowStack[layerIndex]->geometry(); + QRect windowIntersect = rect.translated(-windowRect.left(), + -windowRect.top()); + compositePainter->drawImage(rect, windowStack[layerIndex]->image(), + windowIntersect); + if (firstLayer) { + firstLayer = false; + } + } + } + } + if (!rectRegion.isEmpty()) + qWarning() << "non-empty region!" << rectRegion; + // Everything on screen should be mapped to a sub-rectangle + // unless it's off the screen... + } + + QRect cursorRect; + if (cursor) { + cursorRect = cursor->drawCursor(*compositePainter); + touchedRegion += cursorRect; + } + touchedRegion += repaintRegion; + repaintRegion = QRegion(); + + return touchedRegion; +} + +void QGraphicsSystemFbScreen::removeWindowSurface(QGraphicsSystemFbWindowSurface * surface) +{ + windowStack.removeOne(surface); + invalidateRectCache(); + setDirty(surface->geometry()); +} + +void QGraphicsSystemFbWindowSurface::raise() +{ + mScreen->raise(this); +} + +void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) +{ + QGraphicsSystemFbWindowSurface *s = static_cast(surface); + int index = windowStack.indexOf(s); + if (index <= 0) + return; + windowStack.move(index, 0); + invalidateRectCache(); + setDirty(s->geometry()); +} + +void QGraphicsSystemFbWindowSurface::lower() +{ + mScreen->lower(this); +} + +void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) +{ + QGraphicsSystemFbWindowSurface *s = static_cast(surface); + int index = windowStack.indexOf(s); + if (index == -1 || index == (windowStack.size() - 1)) + return; + windowStack.move(index, windowStack.size() - 1); + invalidateRectCache(); + setDirty(s->geometry()); +} + +QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const +{ + for(int i = 0; i < windowStack.size(); i++) { + if (windowStack[i]->geometry().contains(p, false) && + windowStack[i]->visible() && + !windowStack[i]->window()->isMinimized()) { + return windowStack[i]->window(); + } + } + return 0; +} + +QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen), + visibleFlag(false) +{ + static QAtomicInt winIdGenerator(1); + + mImage = QImage(window->size(), mScreen->format()); + windowId = winIdGenerator.fetchAndAddRelaxed(1); +} + +QGraphicsSystemFbWindowSurface::~QGraphicsSystemFbWindowSurface() +{ + mScreen->removeWindowSurface(this); +} + +void QGraphicsSystemFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + QRect currentGeometry = geometry(); + // If this is a move, redraw the previous location + if (oldGeometry != currentGeometry) { + mScreen->setDirty(oldGeometry); + oldGeometry = currentGeometry; + } + + QRect dirtyClient = region.boundingRect(); + QRect dirtyRegion(currentGeometry.left() + dirtyClient.left(), + currentGeometry.top() + dirtyClient.top(), + dirtyClient.width(), + dirtyClient.height()); + mScreen->setDirty(dirtyRegion); +} + +void QGraphicsSystemFbWindowSurface::setGeometry(const QRect &rect) +{ + // store previous geometry for screen update + oldGeometry = geometry(); + + // change the widget's QImage if this is a resize + if (mImage.size() != rect.size()) + mImage = QImage(rect.size(), mScreen->format()); + + mScreen->invalidateRectCache(); + QWindowSystemInterface::handleGeometryChange(window(), rect); + + QWindowSurface::setGeometry(rect); +} + +bool QGraphicsSystemFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QGraphicsSystemFbWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QGraphicsSystemFbWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QGraphicsSystemFbWindowSurface::setVisible(bool visible) +{ + visibleFlag = visible; + mScreen->invalidateRectCache(); + mScreen->setDirty(geometry()); +} + +Qt::WindowFlags QGraphicsSystemFbWindowSurface::setWindowFlags(Qt::WindowFlags type) +{ + flags = type; + mScreen->invalidateRectCache(); + return flags; +} + +Qt::WindowFlags QGraphicsSystemFbWindowSurface::windowFlags() const +{ + return flags; +} diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h new file mode 100644 index 0000000..7f9b005 --- /dev/null +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -0,0 +1,132 @@ +#ifndef QLIGHTHOUSEGRAPHICSSCREEN_H +#define QLIGHTHOUSEGRAPHICSSCREEN_H + +#include +#include +#include +#include +#include +#include + +class QMouseEvent; +class QSize; +class QPainter; + +class QGraphicsSystemFbScreen; + +class QGraphicsSystemSoftwareCursor : public QGraphicsSystemCursor +{ +public: + QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen * scr); + + // output methods + QRect dirtyRect(); + virtual QRect drawCursor(QPainter & painter); + + // input methods + virtual void pointerEvent(const QMouseEvent & event); + virtual void changeCursor(QCursor * widgetCursor, QWidget * widget); + +protected: + QGraphicsSystemCursorImage * graphic; + +private: + void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void setCursor(Qt::CursorShape shape); + void setCursor(const QImage * image, int hotx, int hoty); + QRect currentRect; // next place to draw the cursor + QRect prevRect; // last place the cursor was drawn + QRect getCurrentRect(); +}; + +class QGraphicsSystemFbWindowSurface : public QWindowSurface +{ +public: + QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window); + ~QGraphicsSystemFbWindowSurface(); + + virtual QPaintDevice *paintDevice() { return &mImage; } + virtual void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + virtual bool scroll(const QRegion &area, int dx, int dy); + + virtual void beginPaint(const QRegion ®ion); + virtual void endPaint(const QRegion ®ion); + virtual void setVisible(bool visible); + virtual bool visible() { return visibleFlag; } + + const QImage image() { return mImage; } + void setGeometry(const QRect &rect); + + virtual void raise(); + virtual void lower(); + + virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + virtual Qt::WindowFlags windowFlags() const; + + WId winId() const { return windowId; } +protected: + QGraphicsSystemFbScreen *mScreen; + QRect oldGeometry; + QImage mImage; + bool visibleFlag; + Qt::WindowFlags flags; + + WId windowId; +}; + +class QGraphicsSystemFbScreen : public QGraphicsSystemScreen +{ + Q_OBJECT +public: + QGraphicsSystemFbScreen(); + ~QGraphicsSystemFbScreen(); + + virtual QRect geometry() const { return mGeometry; } + virtual int depth() const { return mDepth; } + virtual QImage::Format format() const { return mFormat; } + virtual QSize physicalSize() const { return mPhysicalSize; } + + virtual void setGeometry(QRect rect); + virtual void setDepth(int depth); + virtual void setFormat(QImage::Format format); + virtual void setPhysicalSize(QSize size); + + virtual void setDirty(const QRect &rect); + + virtual void removeWindowSurface(QGraphicsSystemFbWindowSurface * surface); + virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { + windowStack.prepend(surface); invalidateRectCache(); } + virtual void raise(QWindowSurface * surface); + virtual void lower(QWindowSurface * surface); + virtual QWidget * topLevelAt(const QPoint & p) const; + + QImage * image() const { return mScreenImage; } + QPaintDevice * paintDevice() const { return mScreenImage; } + +protected: + QList windowStack; + QRegion repaintRegion; + QGraphicsSystemSoftwareCursor * cursor; + QTimer redrawTimer; + +protected slots: + virtual QRegion doRedraw(); + +protected: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; + QImage *mScreenImage; + +private: + QPainter * compositePainter; + void generateRects(); + QList > cachedRects; + + void invalidateRectCache() { isUpToDate = false; } + friend class QGraphicsSystemFbWindowSurface; + bool isUpToDate; +}; + +#endif // QLIGHTHOUSEGRAPHICSSCREEN_H diff --git a/src/plugins/platforms/fb_base/fb_base.pri b/src/plugins/platforms/fb_base/fb_base.pri new file mode 100644 index 0000000..41bd87f --- /dev/null +++ b/src/plugins/platforms/fb_base/fb_base.pri @@ -0,0 +1,2 @@ +SOURCES += ../fb_base/fb_base.cpp +HEADERS += ../fb_base/fb_base.h diff --git a/src/plugins/platforms/fb_base/fb_base.pro b/src/plugins/platforms/fb_base/fb_base.pro new file mode 100644 index 0000000..e08c0c5 --- /dev/null +++ b/src/plugins/platforms/fb_base/fb_base.pro @@ -0,0 +1,23 @@ +#------------------------------------------------- +# +# Project created by QtCreator 2009-11-05T13:22:31 +# +#------------------------------------------------- + +#QT -= core gui +TARGET = fb_base +#include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +TEMPLATE = lib + +#DEFINES += STATIC_LIBRARY +CONFIG += staticlib + +SOURCES += fb_base.cpp + +HEADERS += fb_base.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro new file mode 100644 index 0000000..031b843 --- /dev/null +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -0,0 +1,12 @@ +TARGET = qlinuxfbgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_linuxfb.cpp +HEADERS = qgraphicssystem_linuxfb.h + +include(../fb_base/fb_base.pri) + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp new file mode 100644 index 0000000..4d03fe5 --- /dev/null +++ b/src/plugins/platforms/linuxfb/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_linuxfb.h" + +QT_BEGIN_NAMESPACE + +class QLinuxFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QLinuxFbGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "LinuxFb"; + return list; +} + +QGraphicsSystem* QLinuxFbGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "linuxfb") + return new QLinuxFbGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(linuxfb, QLinuxFbGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp new file mode 100644 index 0000000..44960bb --- /dev/null +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp @@ -0,0 +1,856 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_linuxfb.h" +#include "../fb_base/fb_base.h" +#include +#include // overrides QT_OPEN +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !defined(Q_OS_DARWIN) && !defined(Q_OS_FREEBSD) +#include + +#ifdef __i386__ +#include +#endif +#endif + +QT_BEGIN_NAMESPACE + +class QLinuxFbGraphicsSystemPrivate +{ +public: + QLinuxFbGraphicsSystemPrivate(); + ~QLinuxFbGraphicsSystemPrivate(); + + void openTty(); + void closeTty(); + + int fd; + int startupw; + int startuph; + int startupd; + bool blank; + + bool doGraphicsMode; +#ifdef QT_QWS_DEPTH_GENERIC + bool doGenericColors; +#endif + int ttyfd; + long oldKdMode; + QString ttyDevice; + QString displaySpec; +}; + +QLinuxFbGraphicsSystemPrivate::QLinuxFbGraphicsSystemPrivate() + : fd(-1), blank(true), doGraphicsMode(true), +#ifdef QT_QWS_DEPTH_GENERIC + doGenericColors(false), +#endif + ttyfd(-1), oldKdMode(KD_TEXT) +{ +} + +QLinuxFbGraphicsSystemPrivate::~QLinuxFbGraphicsSystemPrivate() +{ + closeTty(); +} + +void QLinuxFbGraphicsSystemPrivate::openTty() +{ + const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0}; + + if (ttyDevice.isEmpty()) { + for (const char * const *dev = devs; *dev; ++dev) { + ttyfd = QT_OPEN(*dev, O_RDWR); + if (ttyfd != -1) + break; + } + } else { + ttyfd = QT_OPEN(ttyDevice.toAscii().constData(), O_RDWR); + } + + if (ttyfd == -1) + return; + + if (doGraphicsMode) { + ioctl(ttyfd, KDGETMODE, &oldKdMode); + if (oldKdMode != KD_GRAPHICS) { + int ret = ioctl(ttyfd, KDSETMODE, KD_GRAPHICS); + if (ret == -1) + doGraphicsMode = false; + } + } + + // No blankin' screen, no blinkin' cursor!, no cursor! + const char termctl[] = "\033[9;0]\033[?33l\033[?25l\033[?1c"; + QT_WRITE(ttyfd, termctl, sizeof(termctl)); +} + +void QLinuxFbGraphicsSystemPrivate::closeTty() +{ + if (ttyfd == -1) + return; + + if (doGraphicsMode) + ioctl(ttyfd, KDSETMODE, oldKdMode); + + // Blankin' screen, blinkin' cursor! + const char termctl[] = "\033[9;15]\033[?33h\033[?25h\033[?0c"; + QT_WRITE(ttyfd, termctl, sizeof(termctl)); + + QT_CLOSE(ttyfd); + ttyfd = -1; +} + +QLinuxFbGraphicsSystem::QLinuxFbGraphicsSystem() +{ + d_ptr = new QLinuxFbGraphicsSystemPrivate(); + + // XXX + QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); + + if (!connect(displaySpec)) + qFatal("QLinuxFbGraphicsSystem: could not initialize screen"); + initDevice(); + + // Create a QImage directly on the screen's framebuffer. + // This is the blit target for copying windows to the screen. + mPrimaryScreen = new QLinuxFbGraphicsSystemScreen(data, w, h, lstep, + screenFormat); + mPrimaryScreen->setPhysicalSize(QSize(physWidth, physHeight)); + + mScreens.append(mPrimaryScreen); +} + +QLinuxFbGraphicsSystem::~QLinuxFbGraphicsSystem() +{ + delete mPrimaryScreen; + delete d_ptr; +} + +bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) +{ + const QStringList args = displaySpec.split(QLatin1Char(':')); + + if (args.contains(QLatin1String("nographicsmodeswitch"))) + d_ptr->doGraphicsMode = false; + +#ifdef QT_QWS_DEPTH_GENERIC + if (args.contains(QLatin1String("genericcolors"))) + d_ptr->doGenericColors = true; +#endif + + QRegExp ttyRegExp(QLatin1String("tty=(.*)")); + if (args.indexOf(ttyRegExp) != -1) + d_ptr->ttyDevice = ttyRegExp.cap(1); + +#if 0 +#if Q_BYTE_ORDER == Q_BIG_ENDIAN +#ifndef QT_QWS_FRAMEBUFFER_LITTLE_ENDIAN + if (args.contains(QLatin1String("littleendian"))) +#endif + QScreen::setFrameBufferLittleEndian(true); +#endif +#endif + + // Check for explicitly specified device + const int len = 8; // "/dev/fbx" + int m = displaySpec.indexOf(QLatin1String("/dev/fb")); + + QString dev; + if (m > 0) + dev = displaySpec.mid(m, len); + else + dev = QLatin1String("/dev/fb0"); + + if (access(dev.toLatin1().constData(), R_OK|W_OK) == 0) + d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDWR); + if (d_ptr->fd == -1) { + if (access(dev.toLatin1().constData(), R_OK) == 0) + d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDONLY); + if (d_ptr->fd == 1) { + qWarning("Error opening framebuffer device %s", qPrintable(dev)); + return false; + } + } + + fb_fix_screeninfo finfo; + fb_var_screeninfo vinfo; + //####################### + // Shut up Valgrind + memset(&vinfo, 0, sizeof(vinfo)); + memset(&finfo, 0, sizeof(finfo)); + //####################### + + /* Get fixed screen information */ + if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { + perror("QLinuxFbGraphicsSystem::connect"); + qWarning("Error reading fixed information"); + return false; + } + + if (finfo.type == FB_TYPE_VGA_PLANES) { + qWarning("VGA16 video mode not supported"); + return false; + } + + /* Get variable screen information */ + if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { + perror("QLinuxFbGraphicsSystem::connect"); + qWarning("Error reading variable information"); + return false; + } + + grayscale = vinfo.grayscale; + d = vinfo.bits_per_pixel; + if (d == 24) { + d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; + if (d <= 0) + d = 24; // reset if color component lengths are not reported + } else if (d == 16) { + d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; + if (d <= 0) + d = 16; + } + lstep = finfo.line_length; + + int xoff = vinfo.xoffset; + int yoff = vinfo.yoffset; + const char* qwssize; + if((qwssize=::getenv("QWS_SIZE")) && sscanf(qwssize,"%dx%d",&w,&h)==2) { + if (d_ptr->fd != -1) { + if ((uint)w > vinfo.xres) w = vinfo.xres; + if ((uint)h > vinfo.yres) h = vinfo.yres; + } + dw=w; + dh=h; + int xxoff, yyoff; + if (sscanf(qwssize, "%*dx%*d+%d+%d", &xxoff, &yyoff) == 2) { + if (xxoff < 0 || xxoff + w > (int)(vinfo.xres)) + xxoff = vinfo.xres - w; + if (yyoff < 0 || yyoff + h > (int)(vinfo.yres)) + yyoff = vinfo.yres - h; + xoff += xxoff; + yoff += yyoff; + } else { + xoff += (vinfo.xres - w)/2; + yoff += (vinfo.yres - h)/2; + } + } else { + dw=w=vinfo.xres; + dh=h=vinfo.yres; + } + + if (w == 0 || h == 0) { + qWarning("QLinuxFbGraphicsSystem::connect(): Unable to find screen geometry, " + "will use 320x240."); + dw = w = 320; + dh = h = 240; + } + + setPixelFormat(vinfo); + + // Handle display physical size spec. + QStringList displayArgs = displaySpec.split(QLatin1Char(':')); + QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)")); + int dimIdxW = displayArgs.indexOf(mmWidthRx); + QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)")); + int dimIdxH = displayArgs.indexOf(mmHeightRx); + if (dimIdxW >= 0) { + mmWidthRx.exactMatch(displayArgs.at(dimIdxW)); + physWidth = mmWidthRx.cap(1).toInt(); + if (dimIdxH < 0) + physHeight = dh*physWidth/dw; + } + if (dimIdxH >= 0) { + mmHeightRx.exactMatch(displayArgs.at(dimIdxH)); + physHeight = mmHeightRx.cap(1).toInt(); + if (dimIdxW < 0) + physWidth = dw*physHeight/dh; + } + if (dimIdxW < 0 && dimIdxH < 0) { + if (vinfo.width != 0 && vinfo.height != 0 + && vinfo.width != UINT_MAX && vinfo.height != UINT_MAX) { + physWidth = vinfo.width; + physHeight = vinfo.height; + } else { + const int dpi = 72; + physWidth = qRound(dw * 25.4 / dpi); + physHeight = qRound(dh * 25.4 / dpi); + } + } + + dataoffset = yoff * lstep + xoff * d / 8; + //qDebug("Using %dx%dx%d screen",w,h,d); + + /* Figure out the size of the screen in bytes */ + size = h * lstep; + + mapsize = finfo.smem_len; + + data = (unsigned char *)-1; + if (d_ptr->fd != -1) + data = (unsigned char *)mmap(0, mapsize, PROT_READ | PROT_WRITE, + MAP_SHARED, d_ptr->fd, 0); + + if ((long)data == -1) { + perror("QLinuxFbGraphicsSystem::connect"); + qWarning("Error: failed to map framebuffer device to memory."); + return false; + } else { + data += dataoffset; + } + +#if 0 + canaccel = useOffscreen(); + if(canaccel) + setupOffScreen(); +#endif + canaccel = false; + + // Now read in palette + if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { + screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; + int loopc; + fb_cmap startcmap; + startcmap.start=0; + startcmap.len=screencols; + startcmap.red=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.green=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.blue=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.transp=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + if (d_ptr->fd == -1 || ioctl(d_ptr->fd, FBIOGETCMAP, &startcmap)) { + perror("QLinuxFbGraphicsSystem::connect"); + qWarning("Error reading palette from framebuffer, using default palette"); + createPalette(startcmap, vinfo, finfo); + } + int bits_used = 0; + for(loopc=0;loopc> 8, + startcmap.green[loopc] >> 8, + startcmap.blue[loopc] >> 8); + bits_used |= startcmap.red[loopc] + | startcmap.green[loopc] + | startcmap.blue[loopc]; + } + // WORKAROUND: Some framebuffer drivers only return 8 bit + // color values, so we need to not bit shift them.. + if ((bits_used & 0x00ff) && !(bits_used & 0xff00)) { + for(loopc=0;loopcopenTty(); + + // Grab current mode so we can reset it + fb_var_screeninfo vinfo; + fb_fix_screeninfo finfo; + //####################### + // Shut up Valgrind + memset(&vinfo, 0, sizeof(vinfo)); + memset(&finfo, 0, sizeof(finfo)); + //####################### + + if (ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { + perror("QLinuxFbScreen::initDevice"); + qFatal("Error reading variable information in card init"); + return false; + } + +#ifdef DEBUG_VINFO + qDebug("Greyscale %d",vinfo.grayscale); + qDebug("Nonstd %d",vinfo.nonstd); + qDebug("Red %d %d %d",vinfo.red.offset,vinfo.red.length, + vinfo.red.msb_right); + qDebug("Green %d %d %d",vinfo.green.offset,vinfo.green.length, + vinfo.green.msb_right); + qDebug("Blue %d %d %d",vinfo.blue.offset,vinfo.blue.length, + vinfo.blue.msb_right); + qDebug("Transparent %d %d %d",vinfo.transp.offset,vinfo.transp.length, + vinfo.transp.msb_right); +#endif + + d_ptr->startupw=vinfo.xres; + d_ptr->startuph=vinfo.yres; + d_ptr->startupd=vinfo.bits_per_pixel; + grayscale = vinfo.grayscale; + + if (ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { + perror("QLinuxFbScreen::initDevice"); + qCritical("Error reading fixed information in card init"); + // It's not an /error/ as such, though definitely a bad sign + // so we return true + return true; + } + +#ifdef __i386__ + // Now init mtrr + if(!::getenv("QWS_NOMTRR")) { + int mfd=QT_OPEN("/proc/mtrr",O_WRONLY,0); + // MTRR entry goes away when file is closed - i.e. + // hopefully when QWS is killed + if(mfd != -1) { + mtrr_sentry sentry; + sentry.base=(unsigned long int)finfo.smem_start; + //qDebug("Physical framebuffer address %p",(void*)finfo.smem_start); + // Size needs to be in 4k chunks, but that's not always + // what we get thanks to graphics card registers. Write combining + // these is Not Good, so we write combine what we can + // (which is not much - 4 megs on an 8 meg card, it seems) + unsigned int size=finfo.smem_len; + size=size >> 22; + size=size << 22; + sentry.size=size; + sentry.type=MTRR_TYPE_WRCOMB; + if(ioctl(mfd,MTRRIOC_ADD_ENTRY,&sentry)==-1) { + //printf("Couldn't add mtrr entry for %lx %lx, %s\n", + //sentry.base,sentry.size,strerror(errno)); + } + } + + // Should we close mfd here? + //QT_CLOSE(mfd); + } +#endif + if ((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4) || (finfo.visual==FB_VISUAL_DIRECTCOLOR)) + { + fb_cmap cmap; + createPalette(cmap, vinfo, finfo); + if (ioctl(d_ptr->fd, FBIOPUTCMAP, &cmap)) { + perror("QLinuxFbScreen::initDevice"); + qWarning("Error writing palette to framebuffer"); + } + free(cmap.red); + free(cmap.green); + free(cmap.blue); + free(cmap.transp); + } + +#if 0 + if (canaccel) { + *entryp=0; + *lowest = mapsize; + insert_entry(*entryp, *lowest, *lowest); // dummy entry to mark start + } + + shared->fifocount = 0; + shared->buffer_offset = 0xffffffff; // 0 would be a sensible offset (screen) + shared->linestep = 0; + shared->cliptop = 0xffffffff; + shared->clipleft = 0xffffffff; + shared->clipright = 0xffffffff; + shared->clipbottom = 0xffffffff; + shared->rop = 0xffffffff; +#endif + +#ifdef QT_QWS_DEPTH_GENERIC + if (pixelFormat() == QImage::Format_Invalid && screencols == 0 + && d_ptr->doGenericColors) + { + qt_set_generic_blit(this, vinfo.bits_per_pixel, + vinfo.red.length, vinfo.green.length, + vinfo.blue.length, vinfo.transp.length, + vinfo.red.offset, vinfo.green.offset, + vinfo.blue.offset, vinfo.transp.offset); + } +#endif + +#if 0 +#ifndef QT_NO_QWS_CURSOR + QScreenCursor::initSoftwareCursor(); +#endif +#endif + blank(false); + + return true; +} + +void QLinuxFbGraphicsSystem::setPixelFormat(struct fb_var_screeninfo info) +{ + const fb_bitfield rgba[4] = { info.red, info.green, + info.blue, info.transp }; + + QImage::Format format = QImage::Format_Invalid; + + switch (d) { + case 32: { + const fb_bitfield argb8888[4] = {{16, 8, 0}, {8, 8, 0}, + {0, 8, 0}, {24, 8, 0}}; + const fb_bitfield abgr8888[4] = {{0, 8, 0}, {8, 8, 0}, + {16, 8, 0}, {24, 8, 0}}; + if (memcmp(rgba, argb8888, 4 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_ARGB32; + } else if (memcmp(rgba, argb8888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB32; + } else if (memcmp(rgba, abgr8888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB32; + pixeltype = BGRPixel; + } + break; + } + case 24: { + const fb_bitfield rgb888[4] = {{16, 8, 0}, {8, 8, 0}, + {0, 8, 0}, {0, 0, 0}}; + const fb_bitfield bgr888[4] = {{0, 8, 0}, {8, 8, 0}, + {16, 8, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB888; + } else if (memcmp(rgba, bgr888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB888; + pixeltype = BGRPixel; + } + break; + } + case 18: { + const fb_bitfield rgb666[4] = {{12, 6, 0}, {6, 6, 0}, + {0, 6, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb666, 3 * sizeof(fb_bitfield)) == 0) + format = QImage::Format_RGB666; + break; + } + case 16: { + const fb_bitfield rgb565[4] = {{11, 5, 0}, {5, 6, 0}, + {0, 5, 0}, {0, 0, 0}}; + const fb_bitfield bgr565[4] = {{0, 5, 0}, {5, 6, 0}, + {11, 5, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb565, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB16; + } else if (memcmp(rgba, bgr565, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB16; + pixeltype = BGRPixel; + } + break; + } + case 15: { + const fb_bitfield rgb1555[4] = {{10, 5, 0}, {5, 5, 0}, + {0, 5, 0}, {15, 1, 0}}; + const fb_bitfield bgr1555[4] = {{0, 5, 0}, {5, 5, 0}, + {10, 5, 0}, {15, 1, 0}}; + if (memcmp(rgba, rgb1555, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB555; + } else if (memcmp(rgba, bgr1555, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB555; + pixeltype = BGRPixel; + } + break; + } + case 12: { + const fb_bitfield rgb444[4] = {{8, 4, 0}, {4, 4, 0}, + {0, 4, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb444, 3 * sizeof(fb_bitfield)) == 0) + format = QImage::Format_RGB444; + break; + } + case 8: + break; + case 1: + format = QImage::Format_Mono; //###: LSB??? + break; + default: + break; + } + + screenFormat = format; +} + +void QLinuxFbGraphicsSystem::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) +{ + if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { + screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; + cmap.start=0; + cmap.len=screencols; + cmap.red=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.green=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.blue=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.transp=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + + if (screencols==16) { + if (finfo.type == FB_TYPE_PACKED_PIXELS) { + // We'll setup a grayscale cmap for 4bpp linear + int val = 0; + for (int idx = 0; idx < 16; ++idx, val += 17) { + cmap.red[idx] = (val<<8)|val; + cmap.green[idx] = (val<<8)|val; + cmap.blue[idx] = (val<<8)|val; + screenclut[idx]=qRgb(val, val, val); + } + } else { + // Default 16 colour palette + // Green is now trolltech green so certain images look nicer + // black d_gray l_gray white red green blue cyan magenta yellow + unsigned char reds[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0xFF, 0xA2, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x82 }; + unsigned char greens[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0xC5, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F }; + unsigned char blues[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0x11, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00 }; + + for (int idx = 0; idx < 16; ++idx) { + cmap.red[idx] = ((reds[idx]) << 8)|reds[idx]; + cmap.green[idx] = ((greens[idx]) << 8)|greens[idx]; + cmap.blue[idx] = ((blues[idx]) << 8)|blues[idx]; + cmap.transp[idx] = 0; + screenclut[idx]=qRgb(reds[idx], greens[idx], blues[idx]); + } + } + } else { + if (grayscale) { + // Build grayscale palette + int i; + for(i=0;iblank == on) + return; + +#if defined(QT_QWS_IPAQ) + if (on) + system("apm -suspend"); +#else + if (d_ptr->fd == -1) + return; +// Some old kernel versions don't have this. These defines should go +// away eventually +#if defined(FBIOBLANK) +#if defined(VESA_POWERDOWN) && defined(VESA_NO_BLANKING) + ioctl(d_ptr->fd, FBIOBLANK, on ? VESA_POWERDOWN : VESA_NO_BLANKING); +#else + ioctl(d_ptr->fd, FBIOBLANK, on ? 1 : 0); +#endif +#endif +#endif + + d_ptr->blank = on; +} + +QPixmapData *QLinuxFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + QGraphicsSystemFbWindowSurface * surface = + new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); + mPrimaryScreen->addWindowSurface(surface); + return surface; +} + +QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, + int h, int lstep, QImage::Format screenFormat) : compositePainter(0) +{ + data = d; + mGeometry = QRect(0,0,w,h); + bytesPerLine = lstep; + mFormat = screenFormat; + mDepth = 16; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + cursor = new QGraphicsSystemSoftwareCursor(this); +} + +void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) +{ + mGeometry = rect; + delete mFbScreenImage; + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + delete compositePainter; + compositePainter = 0; + + delete mScreenImage; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); +} + +void QLinuxFbGraphicsSystemScreen::setFormat(QImage::Format format) +{ + mFormat = format; + delete mFbScreenImage; + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + delete compositePainter; + compositePainter = 0; + + delete mScreenImage; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); +} + +QRegion QLinuxFbGraphicsSystemScreen::doRedraw() +{ + QRegion touched; + touched = QGraphicsSystemFbScreen::doRedraw(); + + if (!compositePainter) { + compositePainter = new QPainter(mFbScreenImage); + } + + QVector rects = touched.rects(); + for (int i = 0; i < rects.size(); i++) + compositePainter->drawImage(rects[i], *mScreenImage, rects[i]); + return touched; +} +QT_END_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h new file mode 100644 index 0000000..cc8ce7e --- /dev/null +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_LINUXFB_H +#define QGRAPHICSSYSTEM_LINUXFB_H + +#include +#include "../fb_base/fb_base.h" + +QT_BEGIN_NAMESPACE + +class QLinuxFbGraphicsSystemScreen : public QGraphicsSystemFbScreen +{ +public: + QLinuxFbGraphicsSystemScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); + void setGeometry(QRect rect); + void setFormat(QImage::Format format); + +public slots: + QRegion doRedraw(); + +private: + QImage * mFbScreenImage; + uchar * data; + int bytesPerLine; + + QPainter *compositePainter; +}; + +class QLinuxFbGraphicsSystemPrivate; +struct fb_cmap; +struct fb_var_screeninfo; +struct fb_fix_screeninfo; + +class QLinuxFbGraphicsSystem : public QGraphicsSystem +{ +public: + QLinuxFbGraphicsSystem(); + ~QLinuxFbGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + +private: + QLinuxFbGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; + QLinuxFbGraphicsSystemPrivate *d_ptr; + + enum PixelType { NormalPixel, BGRPixel }; + + QRgb screenclut[256]; + int screencols; + + uchar * data; + + QImage::Format screenFormat; + int w; + int lstep; + int h; + int d; + PixelType pixeltype; + bool grayscale; + + int dw; + int dh; + + int size; // Screen size + int mapsize; // Total mapped memory + + int displayId; + + int physWidth; + int physHeight; + + bool canaccel; + int dataoffset; + int cacheStart; + + bool connect(const QString &displaySpec); + bool initDevice(); + void setPixelFormat(struct fb_var_screeninfo); + void createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo); + void blank(bool on); +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/minimal/main.cpp b/src/plugins/platforms/minimal/main.cpp new file mode 100644 index 0000000..44c274b --- /dev/null +++ b/src/plugins/platforms/minimal/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qplatformintegration_minimal.h" + +QT_BEGIN_NAMESPACE + +class QMinimalIntegrationPlugin : public QPlatformIntegrationPlugin +{ +public: + QStringList keys() const; + QPlatformIntegration *create(const QString&); +}; + +QStringList QMinimalIntegrationPlugin::keys() const +{ + QStringList list; + list << "Minimal"; + return list; +} + +QPlatformIntegration *QMinimalIntegrationPlugin::create(const QString& system) +{ + if (system.toLower() == "minimal") + return new QMinimalIntegration; + + return 0; +} + +Q_EXPORT_PLUGIN2(minimal, QMinimalIntegrationPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro new file mode 100644 index 0000000..567b551 --- /dev/null +++ b/src/plugins/platforms/minimal/minimal.pro @@ -0,0 +1,13 @@ +TARGET = qminimalgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms + +SOURCES = main.cpp \ + qplatformintegration_minimal.cpp \ + qwindowsurface_minimal.cpp +HEADERS = qplatformintegration_minimal.h \ + qwindowsurface_minimal.h + +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp new file mode 100644 index 0000000..693e0c3 --- /dev/null +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp @@ -0,0 +1,25 @@ +#include "qplatformintegration_minimal.h" +#include "qwindowsurface_minimal.h" + +#include + +QMinimalIntegration::QMinimalIntegration() +{ + QMinimalScreen *mPrimaryScreen = new QMinimalScreen(); + + mPrimaryScreen->mGeometry = QRect(0, 0, 240, 320); + mPrimaryScreen->mDepth = 16; + mPrimaryScreen->mFormat = QImage::Format_RGB16; + mPrimaryScreen->mPhysicalSize = QSize(40, 54); + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QMinimalIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} +QWindowSurface *QMinimalIntegration::createWindowSurface(QWidget *widget) const +{ + return new QMinimalWindowSurface(widget); +} diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.h b/src/plugins/platforms/minimal/qplatformintegration_minimal.h new file mode 100644 index 0000000..d4eb78b --- /dev/null +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.h @@ -0,0 +1,85 @@ + +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATION_MINIMAL_H +#define QPLATFORMINTEGRATION_MINIMAL_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QMinimalScreen : public QPlatformScreen +{ +public: + QMinimalScreen() + : mDepth(16), mFormat(QImage::Format_RGB16) {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; +}; + +class QMinimalIntegration : public QPlatformIntegration +{ +public: + QMinimalIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + +private: + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp b/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp new file mode 100644 index 0000000..0b2bdd2 --- /dev/null +++ b/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_minimal.h" +#include +#include + +QT_BEGIN_NAMESPACE + +QMinimalWindowSurface::QMinimalWindowSurface(QWidget *window) + : QWindowSurface(window) +{ + //qDebug() << "QMinimalWindowSurface::QMinimalWindowSurface:" << (long)this; +} + +QMinimalWindowSurface::~QMinimalWindowSurface() +{ +} + +QPaintDevice *QMinimalWindowSurface::paintDevice() +{ + //qDebug() << "QMinimalWindowSurface::paintDevice"; + return &mImage; +} + +void QMinimalWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + + static int c = 0; + QString filename = QString("output%1.png").arg(c++, 4, 10, QLatin1Char('0')); + qDebug() << "QMinimalWindowSurface::flush() saving contents to" << filename.toLocal8Bit().constData(); + mImage.save(filename); +} + +void QMinimalWindowSurface::setGeometry(const QRect &rect) +{ + //qDebug() << "QMinimalWindowSurface::setGeometry:" << (long)this << rect; + QWindowSurface::setGeometry(rect); + QImage::Format format = QApplicationPrivate::platformIntegration()->screens().first()->format(); + if (mImage.size() != rect.size()) + mImage = QImage(rect.size(), format); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimal/qwindowsurface_minimal.h b/src/plugins/platforms/minimal/qwindowsurface_minimal.h new file mode 100644 index 0000000..959a731 --- /dev/null +++ b/src/plugins/platforms/minimal/qwindowsurface_minimal.h @@ -0,0 +1,65 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_MINIMAL_H +#define QWINDOWSURFACE_MINIMAL_H + +#include + +QT_BEGIN_NAMESPACE + +class QMinimalWindowSurface : public QWindowSurface +{ +public: + QMinimalWindowSurface(QWidget *window); + ~QMinimalWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + +private: + QImage mImage; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/minimaldfb/main.cpp b/src/plugins/platforms/minimaldfb/main.cpp new file mode 100644 index 0000000..fe9407c --- /dev/null +++ b/src/plugins/platforms/minimaldfb/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_minimaldfb.h" + +QT_BEGIN_NAMESPACE + +class QDirectFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QDirectFbGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "MinimalDfb"; + return list; +} + +QGraphicsSystem* QDirectFbGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "minimaldfb") + return new QDirectFbGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(directfb, QDirectFbGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimaldfb/minimaldfb.pro b/src/plugins/platforms/minimaldfb/minimaldfb.pro new file mode 100644 index 0000000..b6c2ea8 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/minimaldfb.pro @@ -0,0 +1,29 @@ +TARGET = qminimaldfb +include(../../qpluginbase.pri) +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +isEmpty(DIRECTFB_LIBS) { + DIRECTFB_LIBS = -ldirectfb -lfusion -ldirect -lpthread +} +isEmpty(DIRECTFB_INCLUDEPATH) { + DIRECTFB_INCLUDEPATH = /usr/include/directfb +} + +INCLUDEPATH += $$DIRECTFB_INCLUDEPATH +LIBS += $$DIRECTFB_LIBS + +SOURCES = main.cpp \ + qgraphicssystem_minimaldfb.cpp \ + qwindowsurface_minimaldfb.cpp \ + qblitter_directfb.cpp \ + qdirectfbconvenience.cpp \ + qdirectfbinput.cpp \ + qdirectfbcursor.cpp +HEADERS = qgraphicssystem_minimaldfb.h \ + qwindowsurface_minimaldfb.h \ + qblitter_directfb.h \ + qdirectfbconvenience.h \ + qdirectfbinput.h \ + qdirectfbcursor.h +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/platforms/minimaldfb/qblitter_directfb.cpp b/src/plugins/platforms/minimaldfb/qblitter_directfb.cpp new file mode 100644 index 0000000..070c563 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qblitter_directfb.cpp @@ -0,0 +1,110 @@ +#include "qblitter_directfb.h" +#include "qgraphicssystem_minimaldfb.h" +#include "qdirectfbconvenience.h" + +#include + +#include + +#include + +QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface) + : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability + |QBlittable::SourcePixmapCapability + |QBlittable::SourceOverPixmapCapability + |QBlittable::SourceOverScaledPixmapCapability)) +{ + if (surface) { + m_surface = surface; + } else { + DFBSurfaceDescription surfaceDesc; + memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); + surfaceDesc.width = rect.width(); + surfaceDesc.height = rect.height(); + surfaceDesc.caps = DSCAPS_PREMULTIPLIED; + surfaceDesc.pixelformat = DSPF_ARGB; + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); + + IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); + dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); + m_surface->Clear(m_surface,0,0,0,0); + } +} + +QDirectFbBlitter::~QDirectFbBlitter() +{ + unlock(); + m_surface->Release(m_surface); +} + +void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) +{ + m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); +// When the blitter api supports non opaque blits, also remember to change +// qpixmap_blitter.cpp::fill +// DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX; +// m_surface->SetDrawingFlags(m_surface, drawingFlags); + m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); + m_surface->FillRectangle(m_surface, rect.x(), rect.y(), + rect.width(), rect.height()); +} + +void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect) +{ + QPixmapData *data = pixmap.pixmapData(); + Q_ASSERT(data->width() && data->height()); + Q_ASSERT(data->classId() == QPixmapData::BlitterClass); + QBlittablePixmapData *blitPm = static_cast(data); + QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); + dfbBlitter->unlock(); + + IDirectFBSurface *s = dfbBlitter->m_surface; + + quint32 blittingFlags = pixmap.hasAlpha()? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; + + s->SetBlittingFlags(s, DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetPorterDuff(m_surface,DSPD_SRC_OVER); + m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); + + const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; + + DFBResult result; + if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) + result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y()); + else { + const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; + result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect); + } + if (result != DFB_OK) + DirectFBError("QDirectFBBlitter::drawPixmap()", result); +} + +QImage *QDirectFbBlitter::doLock() +{ + Q_ASSERT(m_surface); + Q_ASSERT(size().isValid()); + + void *mem; + int bpl; + const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); + if (result == DFB_OK) { + DFBSurfacePixelFormat dfbFormat; + DFBSurfaceCapabilities dfbCaps; + m_surface->GetPixelFormat(m_surface,&dfbFormat); + m_surface->GetCapabilities(m_surface,&dfbCaps); + QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); + int w, h; + m_surface->GetSize(m_surface,&w,&h); + m_image = QImage(static_cast(mem),w,h,bpl,format); + } else { + DirectFBError("Failed to lock image", result); + } + + return &m_image; +} + +void QDirectFbBlitter::doUnlock() +{ + m_surface->Unlock(m_surface); +} diff --git a/src/plugins/platforms/minimaldfb/qblitter_directfb.h b/src/plugins/platforms/minimaldfb/qblitter_directfb.h new file mode 100644 index 0000000..85a303a --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qblitter_directfb.h @@ -0,0 +1,29 @@ +#ifndef QDIRECTFBBLITTER_H +#define QDIRECTFBBLITTER_H + +#include "qdirectfbconvenience.h" + +#include + +#include + +class QDirectFbBlitter : public QBlittable +{ +public: + QDirectFbBlitter(const QSize &size, IDirectFBSurface *surface = 0); + virtual ~QDirectFbBlitter(); + + virtual void fillRect(const QRectF &rect, const QColor &color); + virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); + +protected: + virtual QImage *doLock(); + virtual void doUnlock(); + + IDirectFBSurface *m_surface; + QImage m_image; + + friend class QDirectFbConvenience; +}; + +#endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/platforms/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/platforms/minimaldfb/qdirectfbconvenience.cpp new file mode 100644 index 0000000..8594c09 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qdirectfbconvenience.cpp @@ -0,0 +1,335 @@ +#include "qdirectfbconvenience.h" +#include "qblitter_directfb.h" + +#include + +IDirectFB *QDirectFbConvenience::dfbInterface() +{ + static IDirectFB *dfb = 0; + if (!dfb) { + DFBResult result = DirectFBCreate(&dfb); + if (result != DFB_OK) { + DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result); + return 0; + } + } + return dfb; +} + +IDirectFBDisplayLayer *QDirectFbConvenience::dfbDisplayLayer(int display) +{ + IDirectFBDisplayLayer *layer; + DFBResult result = QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),display,&layer); + if (result != DFB_OK) { + DirectFBError("QDirectFbConvenience: " + "Unable to get primary display layer!", result); + } + return layer; +} + +QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps) +{ + switch (format) { + case DSPF_LUT8: + return QImage::Format_Indexed8; + case DSPF_RGB24: + return QImage::Format_RGB888; + case DSPF_ARGB4444: + return QImage::Format_ARGB4444_Premultiplied; + case DSPF_RGB444: + return QImage::Format_RGB444; + case DSPF_RGB555: + case DSPF_ARGB1555: + return QImage::Format_RGB555; + case DSPF_RGB16: + return QImage::Format_RGB16; + case DSPF_ARGB6666: + return QImage::Format_ARGB6666_Premultiplied; + case DSPF_RGB18: + return QImage::Format_RGB666; + case DSPF_RGB32: + return QImage::Format_RGB32; + case DSPF_ARGB: { + if (caps & DSCAPS_PREMULTIPLIED) + return QImage::Format_ARGB32_Premultiplied; + else return QImage::Format_ARGB32; } + default: + break; + } + return QImage::Format_Invalid; + +} + +int QDirectFbConvenience::colorDepthForSurface(const DFBSurfacePixelFormat format) +{ + return ((0x1f << 7) & format) >> 7; +} + +IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPixmapData(QPixmapData *pixmapData) +{ + QBlittablePixmapData *blittablePmData = static_cast(pixmapData); + if (blittablePmData) { + QBlittable *blittable = blittablePmData->blittable(); + QDirectFbBlitter *dfbBlitter = static_cast(blittable); + return dfbBlitter->m_surface; + } + return 0; +} + +Qt::MouseButton QDirectFbConvenience::mouseButton(DFBInputDeviceButtonIdentifier identifier) +{ + switch (identifier){ + case DIBI_LEFT: + return Qt::LeftButton; + case DIBI_MIDDLE: + return Qt::MidButton; + case DIBI_RIGHT: + return Qt::RightButton; + default: + return Qt::NoButton; + } +} + +Qt::MouseButtons QDirectFbConvenience::mouseButtons(DFBInputDeviceButtonMask mask) +{ + Qt::MouseButtons buttons = Qt::NoButton; + + if (mask & DIBM_LEFT) { + buttons |= Qt::LeftButton; + } + if (mask & DIBM_MIDDLE) { + buttons |= Qt::MidButton; + } + if (mask & DIBM_RIGHT) { + buttons |= Qt::RightButton; + } + return buttons; +} + +Qt::KeyboardModifiers QDirectFbConvenience::keyboardModifiers(DFBInputDeviceModifierMask mask) +{ + Qt::KeyboardModifiers modifiers = Qt::NoModifier; + + if (mask & DIMM_SHIFT) { + modifiers |= Qt::ShiftModifier; + } + if (mask & DIMM_ALT) { + modifiers |= Qt::AltModifier; + } + if (mask & DIMM_ALTGR) { + modifiers |= Qt::MetaModifier; + } + if (mask & DIMM_CONTROL) { + modifiers |= Qt::ControlModifier; + } + if (mask & DIMM_META) { + modifiers | Qt::MetaModifier; + } + return modifiers; +} + +QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type) +{ + switch(type) { + case DWET_BUTTONDOWN: + return QEvent::MouseButtonPress; + case DWET_BUTTONUP: + return QEvent::MouseButtonRelease; + case DWET_MOTION: + return QEvent::MouseMove; + case DWET_WHEEL: + return QEvent::Wheel; + case DWET_KEYDOWN: + return QEvent::KeyPress; + case DWET_KEYUP: + return QEvent::KeyRelease; + default: + return QEvent::None; + } +} +QDirectFbKeyMap *QDirectFbConvenience::dfbKeymap = 0; +QDirectFbKeyMap *QDirectFbConvenience::keyMap() +{ + if (!dfbKeymap) + dfbKeymap = new QDirectFbKeyMap(); + return dfbKeymap; +} + +QDirectFbKeyMap::QDirectFbKeyMap() +{ + insert(DIKS_BACKSPACE , Qt::Key_Backspace); + insert(DIKS_TAB , Qt::Key_Tab); + insert(DIKS_RETURN , Qt::Key_Return); + insert(DIKS_ESCAPE , Qt::Key_Escape); + insert(DIKS_DELETE , Qt::Key_Delete); + + insert(DIKS_CURSOR_LEFT , Qt::Key_Left); + insert(DIKS_CURSOR_RIGHT , Qt::Key_Right); + insert(DIKS_CURSOR_UP , Qt::Key_Up); + insert(DIKS_CURSOR_DOWN , Qt::Key_Down); + insert(DIKS_INSERT , Qt::Key_Insert); + insert(DIKS_HOME , Qt::Key_Home); + insert(DIKS_END , Qt::Key_End); + insert(DIKS_PAGE_UP , Qt::Key_PageUp); + insert(DIKS_PAGE_DOWN , Qt::Key_PageDown); + insert(DIKS_PRINT , Qt::Key_Print); + insert(DIKS_PAUSE , Qt::Key_Pause); + insert(DIKS_SELECT , Qt::Key_Select); + insert(DIKS_GOTO , Qt::Key_OpenUrl); + insert(DIKS_CLEAR , Qt::Key_Clear); + insert(DIKS_MENU , Qt::Key_Menu); + insert(DIKS_HELP , Qt::Key_Help); + + insert(DIKS_INTERNET , Qt::Key_HomePage); + insert(DIKS_MAIL , Qt::Key_LaunchMail); + insert(DIKS_FAVORITES , Qt::Key_Favorites); + + insert(DIKS_BACK , Qt::Key_Back); + insert(DIKS_FORWARD , Qt::Key_Forward); + insert(DIKS_VOLUME_UP , Qt::Key_VolumeUp); + insert(DIKS_VOLUME_DOWN , Qt::Key_VolumeDown); + insert(DIKS_MUTE , Qt::Key_VolumeMute); + insert(DIKS_PLAYPAUSE , Qt::Key_Pause); + insert(DIKS_PLAY , Qt::Key_MediaPlay); + insert(DIKS_STOP , Qt::Key_MediaStop); + insert(DIKS_RECORD , Qt::Key_MediaRecord); + insert(DIKS_PREVIOUS , Qt::Key_MediaPrevious); + insert(DIKS_NEXT , Qt::Key_MediaNext); + + insert(DIKS_F1 , Qt::Key_F1); + insert(DIKS_F2 , Qt::Key_F2); + insert(DIKS_F3 , Qt::Key_F3); + insert(DIKS_F4 , Qt::Key_F4); + insert(DIKS_F5 , Qt::Key_F5); + insert(DIKS_F6 , Qt::Key_F6); + insert(DIKS_F7 , Qt::Key_F7); + insert(DIKS_F8 , Qt::Key_F8); + insert(DIKS_F9 , Qt::Key_F9); + insert(DIKS_F10 , Qt::Key_F10); + insert(DIKS_F11 , Qt::Key_F11); + insert(DIKS_F12 , Qt::Key_F12); + + insert(DIKS_SHIFT , Qt::Key_Shift); + insert(DIKS_CONTROL , Qt::Key_Control); + insert(DIKS_ALT , Qt::Key_Alt); + insert(DIKS_ALTGR , Qt::Key_AltGr); + + insert(DIKS_META , Qt::Key_Meta); + insert(DIKS_SUPER , Qt::Key_Super_L); // ??? + insert(DIKS_HYPER , Qt::Key_Hyper_L); // ??? + + insert(DIKS_CAPS_LOCK , Qt::Key_CapsLock); + insert(DIKS_NUM_LOCK , Qt::Key_NumLock); + insert(DIKS_SCROLL_LOCK , Qt::Key_ScrollLock); + + insert(DIKS_DEAD_ABOVEDOT , Qt::Key_Dead_Abovedot); + insert(DIKS_DEAD_ABOVERING , Qt::Key_Dead_Abovering); + insert(DIKS_DEAD_ACUTE , Qt::Key_Dead_Acute); + insert(DIKS_DEAD_BREVE , Qt::Key_Dead_Breve); + insert(DIKS_DEAD_CARON , Qt::Key_Dead_Caron); + insert(DIKS_DEAD_CEDILLA , Qt::Key_Dead_Cedilla); + insert(DIKS_DEAD_CIRCUMFLEX , Qt::Key_Dead_Circumflex); + insert(DIKS_DEAD_DIAERESIS , Qt::Key_Dead_Diaeresis); + insert(DIKS_DEAD_DOUBLEACUTE , Qt::Key_Dead_Doubleacute); + insert(DIKS_DEAD_GRAVE , Qt::Key_Dead_Grave); + insert(DIKS_DEAD_IOTA , Qt::Key_Dead_Iota); + insert(DIKS_DEAD_MACRON , Qt::Key_Dead_Macron); + insert(DIKS_DEAD_OGONEK , Qt::Key_Dead_Ogonek); + insert(DIKS_DEAD_SEMIVOICED_SOUND , Qt::Key_Dead_Semivoiced_Sound); + insert(DIKS_DEAD_TILDE , Qt::Key_Dead_Tilde); + insert(DIKS_DEAD_VOICED_SOUND , Qt::Key_Dead_Voiced_Sound); + insert(DIKS_SPACE , Qt::Key_Space); + insert(DIKS_EXCLAMATION_MARK , Qt::Key_Exclam); + insert(DIKS_QUOTATION , Qt::Key_QuoteDbl); + insert(DIKS_NUMBER_SIGN , Qt::Key_NumberSign); + insert(DIKS_DOLLAR_SIGN , Qt::Key_Dollar); + insert(DIKS_PERCENT_SIGN , Qt::Key_Percent); + insert(DIKS_AMPERSAND , Qt::Key_Ampersand); + insert(DIKS_APOSTROPHE , Qt::Key_Apostrophe); + insert(DIKS_PARENTHESIS_LEFT , Qt::Key_ParenLeft); + insert(DIKS_PARENTHESIS_RIGHT , Qt::Key_ParenRight); + insert(DIKS_ASTERISK , Qt::Key_Asterisk); + insert(DIKS_PLUS_SIGN , Qt::Key_Plus); + insert(DIKS_COMMA , Qt::Key_Comma); + insert(DIKS_MINUS_SIGN , Qt::Key_Minus); + insert(DIKS_PERIOD , Qt::Key_Period); + insert(DIKS_SLASH , Qt::Key_Slash); + insert(DIKS_0 , Qt::Key_0); + insert(DIKS_1 , Qt::Key_1); + insert(DIKS_2 , Qt::Key_2); + insert(DIKS_3 , Qt::Key_3); + insert(DIKS_4 , Qt::Key_4); + insert(DIKS_5 , Qt::Key_5); + insert(DIKS_6 , Qt::Key_6); + insert(DIKS_7 , Qt::Key_7); + insert(DIKS_8 , Qt::Key_8); + insert(DIKS_9 , Qt::Key_9); + insert(DIKS_COLON , Qt::Key_Colon); + insert(DIKS_SEMICOLON , Qt::Key_Semicolon); + insert(DIKS_LESS_THAN_SIGN , Qt::Key_Less); + insert(DIKS_EQUALS_SIGN , Qt::Key_Equal); + insert(DIKS_GREATER_THAN_SIGN , Qt::Key_Greater); + insert(DIKS_QUESTION_MARK , Qt::Key_Question); + insert(DIKS_AT , Qt::Key_At); + insert(DIKS_CAPITAL_A , Qt::Key_A); + insert(DIKS_CAPITAL_B , Qt::Key_B); + insert(DIKS_CAPITAL_C , Qt::Key_C); + insert(DIKS_CAPITAL_D , Qt::Key_D); + insert(DIKS_CAPITAL_E , Qt::Key_E); + insert(DIKS_CAPITAL_F , Qt::Key_F); + insert(DIKS_CAPITAL_G , Qt::Key_G); + insert(DIKS_CAPITAL_H , Qt::Key_H); + insert(DIKS_CAPITAL_I , Qt::Key_I); + insert(DIKS_CAPITAL_J , Qt::Key_J); + insert(DIKS_CAPITAL_K , Qt::Key_K); + insert(DIKS_CAPITAL_L , Qt::Key_L); + insert(DIKS_CAPITAL_M , Qt::Key_M); + insert(DIKS_CAPITAL_N , Qt::Key_N); + insert(DIKS_CAPITAL_O , Qt::Key_O); + insert(DIKS_CAPITAL_P , Qt::Key_P); + insert(DIKS_CAPITAL_Q , Qt::Key_Q); + insert(DIKS_CAPITAL_R , Qt::Key_R); + insert(DIKS_CAPITAL_S , Qt::Key_S); + insert(DIKS_CAPITAL_T , Qt::Key_T); + insert(DIKS_CAPITAL_U , Qt::Key_U); + insert(DIKS_CAPITAL_V , Qt::Key_V); + insert(DIKS_CAPITAL_W , Qt::Key_W); + insert(DIKS_CAPITAL_X , Qt::Key_X); + insert(DIKS_CAPITAL_Y , Qt::Key_Y); + insert(DIKS_CAPITAL_Z , Qt::Key_Z); + insert(DIKS_SQUARE_BRACKET_LEFT , Qt::Key_BracketLeft); + insert(DIKS_BACKSLASH , Qt::Key_Backslash); + insert(DIKS_SQUARE_BRACKET_RIGHT , Qt::Key_BracketRight); + insert(DIKS_CIRCUMFLEX_ACCENT , Qt::Key_AsciiCircum); + insert(DIKS_UNDERSCORE , Qt::Key_Underscore); + insert(DIKS_SMALL_A , Qt::Key_A); + insert(DIKS_SMALL_B , Qt::Key_B); + insert(DIKS_SMALL_C , Qt::Key_C); + insert(DIKS_SMALL_D , Qt::Key_D); + insert(DIKS_SMALL_E , Qt::Key_E); + insert(DIKS_SMALL_F , Qt::Key_F); + insert(DIKS_SMALL_G , Qt::Key_G); + insert(DIKS_SMALL_H , Qt::Key_H); + insert(DIKS_SMALL_I , Qt::Key_I); + insert(DIKS_SMALL_J , Qt::Key_J); + insert(DIKS_SMALL_K , Qt::Key_K); + insert(DIKS_SMALL_L , Qt::Key_L); + insert(DIKS_SMALL_M , Qt::Key_M); + insert(DIKS_SMALL_N , Qt::Key_N); + insert(DIKS_SMALL_O , Qt::Key_O); + insert(DIKS_SMALL_P , Qt::Key_P); + insert(DIKS_SMALL_Q , Qt::Key_Q); + insert(DIKS_SMALL_R , Qt::Key_R); + insert(DIKS_SMALL_S , Qt::Key_S); + insert(DIKS_SMALL_T , Qt::Key_T); + insert(DIKS_SMALL_U , Qt::Key_U); + insert(DIKS_SMALL_V , Qt::Key_V); + insert(DIKS_SMALL_W , Qt::Key_W); + insert(DIKS_SMALL_X , Qt::Key_X); + insert(DIKS_SMALL_Y , Qt::Key_Y); + insert(DIKS_SMALL_Z , Qt::Key_Z); + insert(DIKS_CURLY_BRACKET_LEFT , Qt::Key_BraceLeft); + insert(DIKS_VERTICAL_BAR , Qt::Key_Bar); + insert(DIKS_CURLY_BRACKET_RIGHT , Qt::Key_BraceRight); + insert(DIKS_TILDE , Qt::Key_AsciiTilde); +} diff --git a/src/plugins/platforms/minimaldfb/qdirectfbconvenience.h b/src/plugins/platforms/minimaldfb/qdirectfbconvenience.h new file mode 100644 index 0000000..0b1a24f --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qdirectfbconvenience.h @@ -0,0 +1,43 @@ +#ifndef QDIRECTFBCONVENIENCE_H +#define QDIRECTFBCONVENIENCE_H + +#include +#include +#include +#include + +#include + +class QDirectFbKeyMap: public QHash +{ +public: + QDirectFbKeyMap(); +}; + + +class QDirectFbConvenience +{ +public: + static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps); + static bool pixelFomatHasAlpha(const DFBSurfacePixelFormat format) { return (1 << 16) & format; } + static int colorDepthForSurface(const DFBSurfacePixelFormat format); + + //This is set by the graphicssystem constructor + static IDirectFB *dfbInterface(); + static IDirectFBDisplayLayer *dfbDisplayLayer(int display = DLID_PRIMARY); + + static IDirectFBSurface *dfbSurfaceForPixmapData(QPixmapData *); + + static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier); + static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask); + static Qt::KeyboardModifiers keyboardModifiers(DFBInputDeviceModifierMask mask); + static QEvent::Type eventType(DFBWindowEventType type); + + static QDirectFbKeyMap *keyMap(); + +private: + static QDirectFbKeyMap *dfbKeymap; + friend class QDirectFbGraphicsSystem; +}; + +#endif // QDIRECTFBCONVENIENCE_H diff --git a/src/plugins/platforms/minimaldfb/qdirectfbcursor.cpp b/src/plugins/platforms/minimaldfb/qdirectfbcursor.cpp new file mode 100644 index 0000000..229a875 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qdirectfbcursor.cpp @@ -0,0 +1,42 @@ +#include "qdirectfbcursor.h" +#include "qblitter_directfb.h" +#include "qgraphicssystem_minimaldfb.h" +#include "qdirectfbconvenience.h" + +#include + +QDirectFBCursor::QDirectFBCursor(QGraphicsSystemScreen * screen) : + QGraphicsSystemCursor(screen), surface(0) +{ + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer); + image = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); +} + +void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) +{ + Q_UNUSED(widget); + int xSpot; + int ySpot; + QPixmap map; + + if (cursor->shape() != Qt::BitmapCursor) { + image->set(cursor->shape()); + xSpot = image->hotspot().x(); + ySpot = image->hotspot().y(); + QImage *i = image->image(); + map = QPixmap::fromImage(*i); + } else { + QPoint point = cursor->hotSpot(); + xSpot = point.x(); + ySpot = point.y(); + map = cursor->pixmap(); + } + + IDirectFBSurface *surface = QDirectFbConvenience::dfbSurfaceForPixmapData(map.pixmapData()); + + if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) { + return; + } + m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot); + m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED); +} diff --git a/src/plugins/platforms/minimaldfb/qdirectfbcursor.h b/src/plugins/platforms/minimaldfb/qdirectfbcursor.h new file mode 100644 index 0000000..064a336 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qdirectfbcursor.h @@ -0,0 +1,22 @@ +#ifndef QDIRECTFBCURSOR_H +#define QDIRECTFBCURSOR_H + +#include +#include +class QDirectFbGraphicsSystemScreen; +class QDirectFbBlitter; + +class QDirectFBCursor : public QGraphicsSystemCursor +{ +public: + QDirectFBCursor(QGraphicsSystemScreen *screem); + void changeCursor(QCursor * cursor, QWidget * widget); + +private: + IDirectFBDisplayLayer * m_layer; + IDirectFBSurface * surface; + QGraphicsSystemCursorImage * image; + QDirectFbBlitter *blitter; +}; + +#endif // QDIRECTFBCURSOR_H diff --git a/src/plugins/platforms/minimaldfb/qdirectfbinput.cpp b/src/plugins/platforms/minimaldfb/qdirectfbinput.cpp new file mode 100644 index 0000000..74a38a4 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qdirectfbinput.cpp @@ -0,0 +1,205 @@ +#include "qdirectfbinput.h" +#include "qdirectfbconvenience.h" + +#include +#include +#include +#include +#include +#include + +#include + +InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) + : QThread(parent), m_eventBuffer(eventBuffer),m_shouldStop(false) +{ + this->start(); +} + +InputSocketWaiter::~InputSocketWaiter() +{ + m_shouldStop = true; + m_eventBuffer->WakeUp(m_eventBuffer); + m_cleanupMutex.lock(); +} + +void InputSocketWaiter::continueWaitingForEvents() +{ + m_finishedProcessingEvents.wakeAll(); +} + +void InputSocketWaiter::run() +{ + m_cleanupMutex.lock(); + while (1) { + m_eventBuffer->WaitForEvent(m_eventBuffer); + if (m_shouldStop) + break; + emit newEvent(); + QMutex waitForProcessingMutex; + waitForProcessingMutex.lock(); + m_finishedProcessingEvents.wait(&waitForProcessingMutex); + } + m_cleanupMutex.unlock(); +} + +QDirectFbInput *QDirectFbInput::instance() +{ + static QDirectFbInput *input = 0; + if (!input) { + input = new QDirectFbInput(); + } + return input; +} + +QDirectFbInput::QDirectFbInput() + : QObject() +{ + dfbInterface = QDirectFbConvenience::dfbInterface(); + + DFBResult ok = dfbInterface->CreateEventBuffer(dfbInterface,&eventBuffer); + if (ok != DFB_OK) + DirectFBError("Failed to initialise eventbuffer", ok); + + dfbInterface->GetDisplayLayer(dfbInterface,DLID_PRIMARY, &dfbDisplayLayer); + + m_inputHandler = new InputSocketWaiter(eventBuffer,this); + connect(m_inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); + + connect(QApplication::instance(),SIGNAL(aboutToQuit()),SLOT(applicationEnd())); +} + +void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) +{ + tlwMap.insert(id,tlw); + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); + + window->AttachEventBuffer(window,eventBuffer); +} + +void QDirectFbInput::removeWindow(QWidget *tlw) +{ + DFBWindowID id = tlwMap.key(tlw,0); + if (id) { + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,id, &window); + + window->DetachEventBuffer(window,eventBuffer); + tlwMap.remove(id); + } +} + +void QDirectFbInput::handleEvents() +{ + DFBResult hasEvent = eventBuffer->HasEvent(eventBuffer); + while(hasEvent == DFB_OK){ + DFBEvent event; + DFBResult ok = eventBuffer->GetEvent(eventBuffer,&event); + if (ok != DFB_OK) + DirectFBError("Failed to get event",ok); + if (event.clazz == DFEC_WINDOW) { + switch (event.window.type) { + case DWET_BUTTONDOWN: + case DWET_BUTTONUP: + case DWET_MOTION: + handleMouseEvents(event); + break; + case DWET_WHEEL: + handleWheelEvent(event); + break; + case DWET_KEYDOWN: + case DWET_KEYUP: + handleKeyEvents(event); + break; + case DWET_ENTER: + case DWET_LEAVE: + handleEnterLeaveEvents(event); + default: + break; + } + + } + + hasEvent = eventBuffer->HasEvent(eventBuffer); + } + m_inputHandler->continueWaitingForEvents(); +} + +void QDirectFbInput::handleMouseEvents(const DFBEvent &event) +{ + QPoint p(event.window.x, event.window.y); + QPoint globalPos = globalPoint(event); + Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); + + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); + IDirectFBWindow *window; + layer->GetWindow(layer,event.window.window_id,&window); + + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + + if (event.window.type == DWET_BUTTONDOWN) { + window->GrabPointer(window); + } else if (event.window.type == DWET_BUTTONUP) { + window->UngrabPointer(window); + } + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); +} + +void QDirectFbInput::applicationEnd() +{ + delete m_inputHandler; + m_inputHandler = 0; +} + +void QDirectFbInput::handleWheelEvent(const DFBEvent &event) +{ + QPoint p(event.window.cx, event.window.cy); + QPoint globalPos = globalPoint(event); + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos, + event.window.step*120, + Qt::Vertical); +} + +void QDirectFbInput::handleKeyEvents(const DFBEvent &event) +{ + QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); + Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol); + Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers); + + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + + QChar character; + if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE) + character = QChar(event.window.key_symbol); + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character); +} + +void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) +{ + QWidget *tlw = tlwMap.value(event.window.window_id); + switch (event.window.type) { + case DWET_ENTER: + QWindowSystemInterface::handleEnterEvent(tlw); + break; + case DWET_LEAVE: + QWindowSystemInterface::handleLeaveEvent(tlw); + break; + default: + break; + } +} + +inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const +{ + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,event.window.window_id,&window); + int x,y; + window->GetPosition(window,&x,&y); + return QPoint(event.window.cx +x, event.window.cy + y); +} + diff --git a/src/plugins/platforms/minimaldfb/qdirectfbinput.h b/src/plugins/platforms/minimaldfb/qdirectfbinput.h new file mode 100644 index 0000000..31aa082 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qdirectfbinput.h @@ -0,0 +1,63 @@ +#ifndef QDIRECTFBINPUT_H +#define QDIRECTFBINPUT_H + +#include +#include +#include +#include +#include +#include +#include + +#include + +class InputSocketWaiter : public QThread +{ + Q_OBJECT +public: + InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent); + virtual ~InputSocketWaiter(); + void continueWaitingForEvents(); +protected: + void run(); +signals: + void newEvent(); +private: + IDirectFBEventBuffer *m_eventBuffer; + bool m_shouldStop; + QMutex m_cleanupMutex; + QWaitCondition m_finishedProcessingEvents; +}; + +class QDirectFbInput : public QObject +{ + Q_OBJECT +public: + static QDirectFbInput *instance(); + void addWindow(DFBWindowID id, QWidget *tlw); + void removeWindow(QWidget *tlw); + +public slots: + void handleEvents(); + void applicationEnd(); + +private: + QDirectFbInput(); + + void handleMouseEvents(const DFBEvent &event); + void handleWheelEvent(const DFBEvent &event); + void handleKeyEvents(const DFBEvent &event); + void handleEnterLeaveEvents(const DFBEvent &event); + IDirectFB *dfbInterface; + IDirectFBDisplayLayer *dfbDisplayLayer; + IDirectFBEventBuffer *eventBuffer; + + QHashtlwMap; + + inline QPoint globalPoint(const DFBEvent &event) const; + + InputSocketWaiter *m_inputHandler; + +}; + +#endif // QDIRECTFBINPUT_H diff --git a/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.cpp new file mode 100644 index 0000000..212f3a9 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_minimaldfb.h" +#include "qwindowsurface_minimaldfb.h" +#include "qblitter_directfb.h" +#include "qdirectfbconvenience.h" +#include "qdirectfbcursor.h" + +#include +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) + :QGraphicsSystemScreen() +{ + m_layer = QDirectFbConvenience::dfbDisplayLayer(display); + m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); + + DFBDisplayLayerConfig config; + m_layer->GetConfiguration(m_layer, &config); + + m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); + m_geometry = QRect(0,0,config.width,config.height); + const int dpi = 72; + const qreal inch = 25.4; + m_depth = 32; + m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); + + cursor = new QDirectFBCursor(this); +} + +QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen() +{ +} + +QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() +{ + const QStringList args = QCoreApplication::arguments(); + int argc = args.size(); + char **argv = new char*[argc]; + + for (int i = 0; i < argc; ++i) + argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); + + DFBResult result = DirectFBInit(&argc, &argv); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen: error initializing DirectFB", + result); + } + delete[] argv; + + mPrimaryScreen = new QDirectFbGraphicsSystemScreen(0); + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QDirectFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + if (type == QPixmapData::BitmapType) + return new QRasterPixmapData(type); + else + return new QBlittablePixmapData(type); +} + +QWindowSurface *QDirectFbGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + return new QDirectFbWindowSurface (widget); +} + +QBlittable *QDirectFbGraphicsSystem::createBlittable(const QSize &size) const +{ + return new QDirectFbBlitter(size); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.h new file mode 100644 index 0000000..27bddfb --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.h @@ -0,0 +1,99 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_MINIMAL_H +#define QGRAPHICSSYSTEM_MINIMAL_H + +#include "qdirectfbinput.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QDirectFBCursor; + +class QDirectFbGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QDirectFbGraphicsSystemScreen(int display); + ~QDirectFbGraphicsSystemScreen(); + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + QSize physicalSize() const { return m_physicalSize; } + +public: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + QSize m_physicalSize; + + IDirectFBDisplayLayer *m_layer; + +private: + QDirectFBCursor * cursor; + +}; + +class QDirectFbGraphicsSystem : public QGraphicsSystem +{ +public: + QDirectFbGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + QBlittable *createBlittable(const QSize &size) const; + + QList screens() const { return mScreens; } + + + +private: + QDirectFbGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.cpp new file mode 100644 index 0000000..68d5aa0 --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -0,0 +1,231 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_minimaldfb.h" +#include "qgraphicssystem_minimaldfb.h" +#include "qblitter_directfb.h" +#include "qdirectfbconvenience.h" +#include + +#include + +QT_BEGIN_NAMESPACE + +QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) + : QWindowSurface(window), m_pixmap(0), m_pmdata(0), + m_dfbWindow(0), m_dfbSurface(0) +{ + window->setWindowSurface(this); + + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); + DFBDisplayLayerConfig layerConfig; + layer->GetConfiguration(layer,&layerConfig); + + DFBWindowDescription description; + memset(&description,0,sizeof(DFBWindowDescription)); + description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS +#if DIRECTFB_MINOR_VERSION >= 1 + |DWDESC_OPTIONS +#endif + |DWDESC_CAPS); + description.width = window->rect().width(); + description.height = window->rect().height(); + description.posx = window->rect().x(); + description.posy = window->rect().y(); + + if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED) + description.surface_caps = DSCAPS_PREMULTIPLIED; + description.pixelformat = layerConfig.pixelformat; + +#if DIRECTFB_MINOR_VERSION >= 1 + description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); +#endif + description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); + description.surface_caps = DSCAPS_PREMULTIPLIED; + + DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); + if (result != DFB_OK) { + DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); + } + + DFBWindowID id; + m_dfbWindow->GetID(m_dfbWindow, &id); + QDirectFbInput::instance()->addWindow(id,window); + + m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); + + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface); + m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); + m_pmdata->setBlittable(blitter); + m_pixmap = new QPixmap(m_pmdata); +} + +QDirectFbWindowSurface::~QDirectFbWindowSurface() +{ + QDirectFbInput::instance()->removeWindow(this->window()); + m_dfbWindow->Destroy(m_dfbWindow); +} + +QPaintDevice *QDirectFbWindowSurface::paintDevice() +{ + return m_pixmap; +} + +void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + m_pmdata->blittable()->unlock(); + + const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); + m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); + + QVector rects = region.rects(); + for (int i = 0 ; i < rects.size(); i++) { + const QRect rect = rects.at(i); + DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; + m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); + } +} + +void QDirectFbWindowSurface::setGeometry(const QRect &rect) +{ + m_pmdata->blittable()->unlock(); + + QWindowSurface::setGeometry(rect); + m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), + rect.width(), rect.height()); + + //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable + m_dfbSurface->AddRef(m_dfbSurface); + QDirectFbBlitter *blitter = new QDirectFbBlitter(rect.size(),m_dfbSurface); + m_pmdata->setBlittable(blitter); +} + +static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) +{ + const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() }; + surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy); + const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy }; + surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT)); +} + +bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + m_pmdata->blittable()->unlock(); + + if (!m_dfbSurface || area.isEmpty()) + return false; + m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); + if (area.rectCount() == 1) { + scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy); + } else { + const QVector rects = area.rects(); + const int n = rects.size(); + for (int i=0; iblittable()->unlock(); + + if (visible) { + int x = this->geometry().x(); + int y = this->geometry().y(); + m_dfbWindow->MoveTo(m_dfbWindow,x,y); + } else { + IDirectFBDisplayLayer *displayLayer; + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); + + DFBDisplayLayerConfig config; + displayLayer->GetConfiguration(displayLayer,&config); + m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); + } +} + +Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags flags) +{ + switch (flags & Qt::WindowType_Mask) { + case Qt::ToolTip: { + DFBWindowOptions options; + m_dfbWindow->GetOptions(m_dfbWindow,&options); + options = DFBWindowOptions(options | DWOP_GHOST); + m_dfbWindow->SetOptions(m_dfbWindow,options); + break; } + default: + break; + } + + m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); + return flags; +} + +void QDirectFbWindowSurface::raise() +{ + m_dfbWindow->RaiseToTop(m_dfbWindow); +} + +void QDirectFbWindowSurface::lower() +{ + m_dfbWindow->LowerToBottom(m_dfbWindow); +} + +WId QDirectFbWindowSurface::winId() const +{ + DFBWindowID id; + m_dfbWindow->GetID(m_dfbWindow, &id); + return WId(id); +} + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.h new file mode 100644 index 0000000..ca34cbf --- /dev/null +++ b/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_MINIMAL_H +#define QWINDOWSURFACE_MINIMAL_H + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +class QDirectFbGraphicsSystemScreen; + +class QDirectFbWindowSurface : public QWindowSurface +{ +public: + QDirectFbWindowSurface(QWidget *window); + ~QDirectFbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + + void setVisible(bool visible); + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + + void raise(); + void lower(); + + WId winId() const; + +private: + void lockSurfaceToImage(); + + QPixmap *m_pixmap; + QBlittablePixmapData *m_pmdata; + + IDirectFBWindow *m_dfbWindow; + IDirectFBSurface *m_dfbSurface; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/openkode/frag.glslf b/src/plugins/platforms/openkode/frag.glslf new file mode 100644 index 0000000..a593434 --- /dev/null +++ b/src/plugins/platforms/openkode/frag.glslf @@ -0,0 +1,8 @@ +uniform sampler2D tex_samp; + +varying vec2 texcoord_var; + +void main() +{ + gl_FragColor = texture2D(tex_samp, texcoord_var); +} diff --git a/src/plugins/platforms/openkode/frag.h b/src/plugins/platforms/openkode/frag.h new file mode 100644 index 0000000..6575cb5 --- /dev/null +++ b/src/plugins/platforms/openkode/frag.h @@ -0,0 +1,37 @@ +0x4e,0x56,0x75,0x63,0x01,0x00,0x00,0x00,0x09,0x00,0x06,0x00,0x06,0x00,0x50,0x00, +0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x27,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x0b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x2b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x2c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x68,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, +0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x90,0x00,0x02,0x01,0x82,0x04,0x02,0x02,0x82, +0x01,0x00,0x40,0xf6,0x85,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x3a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2a,0x00,0x06,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x3b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x49,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x04,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x00,0x74,0x65,0x78,0x5f,0x73,0x61,0x6d,0x70,0x00,0x00,0x00,0x74,0x65,0x78,0x63, +0x6f,0x6f,0x72,0x64,0x5f,0x76,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/src/plugins/platforms/openkode/main.cpp b/src/plugins/platforms/openkode/main.cpp new file mode 100644 index 0000000..e9c1083 --- /dev/null +++ b/src/plugins/platforms/openkode/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_openkode.h" + +QT_BEGIN_NAMESPACE + +class QOpenKODEGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QOpenKODEGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "OpenKODE"; + return list; +} + +QGraphicsSystem* QOpenKODEGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "openkode") + return new QOpenKODEGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(openkode, QOpenKODEGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro new file mode 100644 index 0000000..055048d --- /dev/null +++ b/src/plugins/platforms/openkode/openkode.pro @@ -0,0 +1,14 @@ +TARGET = qopenkodegraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_openkode.cpp qwindowsurface_openkode.cpp +HEADERS = qgraphicssystem_openkode.h qwindowsurface_openkode.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target + +# openkode specific stuff +INCLUDEPATH += $(OPENKODE_DIR)/include +LIBS += $${QMAKE_RPATH}/$(OPENKODE_DIR)/lib-target -L$(OPENKODE_DIR)/lib-target -lKD -lEGL -lGLESv2 diff --git a/src/plugins/platforms/openkode/qgraphicssystem_openkode.cpp b/src/plugins/platforms/openkode/qgraphicssystem_openkode.cpp new file mode 100644 index 0000000..7a07776 --- /dev/null +++ b/src/plugins/platforms/openkode/qgraphicssystem_openkode.cpp @@ -0,0 +1,236 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_openkode.h" +#include "qwindowsurface_openkode.h" +#include + +#include +#include + +#include +#include +#include + +#include "GLES2/gl2ext.h" + + +QT_BEGIN_NAMESPACE + +QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen() +{ + KDDesktopNV *kdDesktop = KD_NULL; + KDDisplayNV *kdDisplay = KD_NULL; + + qDebug() << "QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen()"; + + // Get the default desktop and display + kdDesktop = kdGetDesktopNV(KD_DEFAULT_DESKTOP_NV, KD_NULL); + if (!kdDesktop || kdDesktop == (void*)-1) { + qErrnoWarning(kdGetError(), "Could not obtain KDDesktopNV pointer"); + return; + } + + kdDisplay = kdGetDisplayNV(KD_DEFAULT_DISPLAY_NV, KD_NULL); + if (!kdDisplay || kdDisplay == (void*)-1) { + qErrnoWarning(kdGetError(), "Could not obtain KDDisplayNV pointer"); + kdReleaseDesktopNV(kdDesktop); + return; + } + + KDDisplayModeNV mode; + if (kdGetDisplayModeNV(kdDisplay, &mode)) { + qErrnoWarning(kdGetError(), "Could not get display mode"); + return; + } + + qDebug() << " - display mode " << mode.width << "x" << mode.height << " refresh " << mode.refresh; + + KDint desktopSize[] = { mode.width, mode.height }; + + if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { + qErrnoWarning(kdGetError(), "Could not set desktop size"); + return; + } + + // Once we've set up the desktop and display we don't need them anymore + kdReleaseDisplayNV(kdDisplay); + kdReleaseDesktopNV(kdDesktop); + + const int defaultDpi = 72; + mGeometry = QRect(0, 0, mode.width, mode.height); + mPhysicalSize = QSize(mode.width * 25.4 / defaultDpi, mode.height * 25.4 / defaultDpi); + + mDepth = 24; + mFormat = QImage::Format_RGB888; + + + QEglProperties properties; + properties.setPixelFormat(QImage::Format_RGB888); + properties.setValue(EGL_BUFFER_SIZE, EGL_DONT_CARE); + properties.setRenderableType(QEgl::OpenGL); + + if (!mContext.chooseConfig(properties, QEgl::BestPixelFormat)) { + qWarning("qEglContext: Unable to choose config!"); + return; + } + + if (!mContext.display()) { + qWarning("qEglContext: Unable to open display!"); + return; + } + + qDebug() << " - QEglContext::openDisplay OK"; +} + +static GLuint NvKdTestLoadShaders(const char *vertex_shader_binary, + const char *fragment_shader_binary, + GLuint vertex_shader_binary_size, + GLuint fragment_shader_binary_size) +{ + GLuint prog; + GLuint vertShader; + GLuint fragShader; + + // Create the program + prog = glCreateProgram(); + + // Create the GL shader objects + vertShader = glCreateShader(GL_VERTEX_SHADER); + fragShader = glCreateShader(GL_FRAGMENT_SHADER); + + // Load the binary data into the shader objects + glShaderBinary(1, &vertShader, + GL_NVIDIA_PLATFORM_BINARY_NV, vertex_shader_binary, vertex_shader_binary_size); + glShaderBinary(1, &fragShader, + GL_NVIDIA_PLATFORM_BINARY_NV, fragment_shader_binary, fragment_shader_binary_size); + + // Attach the shaders to the program + glAttachShader(prog, vertShader); + glAttachShader(prog, fragShader); + + // Delete the shaders + glDeleteShader(vertShader); + glDeleteShader(fragShader); + + // Link and validate the shader program + glLinkProgram(prog); + glValidateProgram(prog); + + return prog; +} + +class QOpenKODEEventLoopHelper : public QThread +{ +public: + QOpenKODEEventLoopHelper(QSemaphore *m) + : eventMutex(m) + { + m->acquire(); + } + +protected: + void run() + { + qDebug() << "initializing KD"; + kdInitializeNV(); + qDebug() << "done initializing KD"; + eventMutex->release(); + + const KDEvent *event; + while ((event = kdWaitEvent(-1)) != 0) { + qDebug() << "!!! received event!"; + kdDefaultEvent(event); + } + + qDebug() << "exiting event loop"; + } + +private: + QSemaphore *eventMutex; +}; + +QOpenKODEGraphicsSystem::QOpenKODEGraphicsSystem() + : eventMutex(1) +{ + QOpenKODEEventLoopHelper *loop = new QOpenKODEEventLoopHelper(&eventMutex); + loop->start(); + eventMutex.acquire(); // block until initialization done + + mPrimaryScreen = new QOpenKODEGraphicsSystemScreen(); + + mScreens.append(mPrimaryScreen); + +} + +QPixmapData *QOpenKODEGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QOpenKODEGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + return new QOpenKODEWindowSurface(mPrimaryScreen, widget); +} + +GLuint QOpenKODEGraphicsSystem::blitterProgram() +{ + static GLuint shaderProgram = 0; + if (!shaderProgram) { + + const char vertShaderBinary[] = { +# include "vert.h" + }; + const char fragShaderBinary[] = { +# include "frag.h" + }; + + shaderProgram = NvKdTestLoadShaders(vertShaderBinary, fragShaderBinary, + sizeof(vertShaderBinary), sizeof(fragShaderBinary)); + + if (!shaderProgram) + qFatal("QOpenKodeGraphicsSystem(): Cannot load shaders!"); + } + return shaderProgram; +} + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qgraphicssystem_openkode.h b/src/plugins/platforms/openkode/qgraphicssystem_openkode.h new file mode 100644 index 0000000..7d73ae0 --- /dev/null +++ b/src/plugins/platforms/openkode/qgraphicssystem_openkode.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_OPENKODE_H +#define QGRAPHICSSYSTEM_OPENKODE_H + +#include + +#include +#include + +# include + +QT_BEGIN_NAMESPACE + +struct KDDesktopNV; + +class QOpenKODEGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QOpenKODEGraphicsSystemScreen(); + ~QOpenKODEGraphicsSystemScreen() {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; + QEglContext mContext; +}; + +class QOpenKODEGraphicsSystem : public QGraphicsSystem +{ +public: + QOpenKODEGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + + static GLuint blitterProgram(); + +private: + QOpenKODEGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; + QSemaphore eventMutex; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/openkode/qwindowsurface_openkode.cpp b/src/plugins/platforms/openkode/qwindowsurface_openkode.cpp new file mode 100644 index 0000000..b3f3965 --- /dev/null +++ b/src/plugins/platforms/openkode/qwindowsurface_openkode.cpp @@ -0,0 +1,265 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_openkode.h" +#include "qgraphicssystem_openkode.h" +#include + +#include "KD/kd.h" +#include "KD/NV_display.h" + +QT_BEGIN_NAMESPACE + +QOpenKODEWindowSurface::QOpenKODEWindowSurface + (QOpenKODEGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen), + mSurface(0) +{ + qDebug() << "QOpenKODEWindowSurface::QOpenKODEWindowSurface:" << window << window->width() << "x" << window->height() + << "pos" << window->x() << "x" << window->y(); + + if (!mContext.display()) { + qWarning("qEglContext: Unable to open display!"); + return; + } + + QEglProperties properties; + properties.setPixelFormat(QImage::Format_RGB888); + properties.setValue(EGL_BUFFER_SIZE, EGL_DONT_CARE); + properties.setRenderableType(QEgl::OpenGL); + + if (!mContext.chooseConfig(properties, QEgl::BestPixelFormat)) { + qWarning("qEglContext: Unable to choose config!"); + return; + } + + createWindow(window); +} + +void QOpenKODEWindowSurface::createWindow(QWidget *window) +{ + qDebug() << "createWindow"; + kdWindow = kdCreateWindow(mContext.display(), mContext.config(), KD_NULL); + + if (!kdWindow) { + qErrnoWarning(kdGetError(), "Error creating native window"); + return; + } + + const KDint windowSize[2] = { window->width(), window->height() }; + if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { + qErrnoWarning(kdGetError(), "Could not set native window size"); + return; + } + + //const KDboolean windowExclusive[] = { false }; + //if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { + // qErrnoWarning(kdGetError(), "Could not set exclusive bit"); + // //return; + //} + + //const KDint windowPos[2] = { window->x(), window->y() }; + //if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + // qErrnoWarning(kdGetError(), "Could not set native window position"); + // //return; + //} + + EGLNativeWindowType nativeWindow; + + if (kdRealizeWindow(kdWindow, &nativeWindow)) { + qErrnoWarning(kdGetError(), "Could not realize native window"); + return; + } + qDebug() << "kdRealizeWindow" << nativeWindow; + + // Create an EGL window surface for the native window + EGLint windowAttrs[3] = { EGL_NONE }; + qDebug() << "doing createwindowsurface"; + *mSurface = eglCreateWindowSurface(mContext.display(), + mContext.config(), + nativeWindow, + windowAttrs); + qDebug() << "create windowsurface"; + if (!mSurface) { + qWarning("EGL couldn't create window surface: 0x%x", eglGetError()); + return; + } + + qDebug() << "making context"; + if (!mContext.createContext()) { + qDebug() << "Unable to create context!"; + return; + } + + qDebug() << "about to make current"; + mContext.makeCurrent(mSurface); +} + +QOpenKODEWindowSurface::~QOpenKODEWindowSurface() +{ +} + +QPaintDevice *QOpenKODEWindowSurface::paintDevice() +{ + qDebug() << "QOpenKODEWindowSurface::paintDevice"; + return &mImage; +} + +// ### TODO - this updates the entire toplevel, should only update the region +void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoint &offset) +{ + qDebug() << "in flush"; + if (!offset.isNull()) { + qWarning("Offset flushing not supported yet"); + return; + } + + if (!mContext.makeCurrent(mSurface)) { + qWarning("EGL couldn't make context/surface current: 0x%x", eglGetError()); + return; + } + + QRect boundingRect = region.boundingRect(); + + int x, y, w, h; + QImage blitImage; + if (true || boundingRect == mImage.rect()) { // TODO - check optimization + blitImage = mImage; + x = y = 0; + w = mImage.width(); + h = mImage.height(); + } else { + blitImage = mImage.copy(boundingRect); + w = boundingRect.width(); + h = boundingRect.height(); + x = boundingRect.x(); + y = boundingRect.y(); + } + +// qDebug() << "flush" << widget << offset << region.boundingRect() << mImage.format() << blitImage.format(); + + GLuint shaderProgram = QOpenKODEGraphicsSystem::blitterProgram(); + + glUseProgram(shaderProgram); + + GLuint index = glGetUniformLocation(shaderProgram, "window"); + glUniform2f(index, GLfloat(mImage.width()), GLfloat(mImage.height())); + + // attributes + GLuint posId = glGetAttribLocation(shaderProgram, "pos_attr"); + GLuint texcoordId = glGetAttribLocation(shaderProgram, "texcoord_attr"); + + // sampler + index = glGetUniformLocation(shaderProgram, "tex_samp"); + + glUniform1i(index, 0); + + glDisable(GL_DEPTH_TEST); + glActiveTexture(GL_TEXTURE0); + + GLuint texId; + GLfloat coords[8] = {x, y, x, y + h, x + w, y + h, x + w, y }; + GLfloat texcoords[8] = { 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 }; + + // Generate texture for checkered background + glPixelStorei(GL_UNPACK_ALIGNMENT, 4); + glGenTextures(1, &texId); + glBindTexture(GL_TEXTURE_2D, texId); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, blitImage.bits()); + + // Enable vertex attribute associated with vertex position + glEnableVertexAttribArray(posId); + glEnableVertexAttribArray(texcoordId); + + // Set the quad vertices + glVertexAttribPointer(posId, 2, GL_FLOAT, 0, 0, coords); + glVertexAttribPointer(texcoordId, 2, GL_FLOAT, 0, 0, texcoords); + + // Draw the quad + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + // Cleanup + glDisableVertexAttribArray(posId); + glDisableVertexAttribArray(texcoordId); + + // Release all textures + glBindTexture(GL_TEXTURE_2D, 0); + if (texId) + glDeleteTextures(1, &texId); + + mContext.doneCurrent(); + mContext.swapBuffers(mSurface); +} + +void QOpenKODEWindowSurface::setGeometry(const QRect &rect) +{ + qDebug() << "QOpenKODEWindowSurface::setGeometry:" << rect; + QWindowSurface::setGeometry(rect); + if (mImage.size() != rect.size()) + mImage = QImage(rect.size(), mScreen->format()); + + mContext.destroySurface(mSurface); + kdDestroyWindow(kdWindow); + createWindow(window()); + qDebug() << "set geometry workded"; +} + +bool QOpenKODEWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QOpenKODEWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qwindowsurface_openkode.h b/src/plugins/platforms/openkode/qwindowsurface_openkode.h new file mode 100644 index 0000000..bee94a5 --- /dev/null +++ b/src/plugins/platforms/openkode/qwindowsurface_openkode.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_OPENKODE_H +#define QWINDOWSURFACE_OPENKODE_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QOpenKODEGraphicsSystemScreen; + +class QOpenKODEWindowSurface : public QWindowSurface +{ +public: + QOpenKODEWindowSurface + (QOpenKODEGraphicsSystemScreen *screen, QWidget *window); + ~QOpenKODEWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + QOpenKODEGraphicsSystemScreen *mScreen; + QImage mImage; + struct KDWindow *kdWindow; + EGLSurface *mSurface; + QEglContext mContext; + + void createWindow(QWidget *window); +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/openkode/vert.glslv b/src/plugins/platforms/openkode/vert.glslv new file mode 100644 index 0000000..57b5866 --- /dev/null +++ b/src/plugins/platforms/openkode/vert.glslv @@ -0,0 +1,14 @@ +uniform vec2 window; // window size + +// Per-vertex attributes] +attribute vec2 pos_attr; +attribute vec2 texcoord_attr; + +// Output vertex color +varying vec2 texcoord_var; + +void main() +{ + gl_Position = vec4( (2.0 * pos_attr / window -1.0) * vec2(1.0, -1.0), 0.0, 1.0); + texcoord_var = texcoord_attr; +} diff --git a/src/plugins/platforms/openkode/vert.h b/src/plugins/platforms/openkode/vert.h new file mode 100644 index 0000000..bdf564d --- /dev/null +++ b/src/plugins/platforms/openkode/vert.h @@ -0,0 +1,63 @@ +0x4e,0x56,0x75,0x63,0x01,0x00,0x00,0x00,0x0a,0x00,0x06,0x00,0x06,0x00,0x50,0x00, +0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x24,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x26,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x05,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x01,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x2b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, +0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x30,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x04,0x05,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x0f,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x01,0x02,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0x04,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x80,0xbf,0x00,0x00,0x00,0x00, +0x05,0x00,0x00,0x10,0x80,0xc7,0x00,0x24,0x05,0x02,0x00,0x10,0x80,0xc7,0x00,0x24, +0x01,0x02,0x81,0xc0,0x80,0x07,0x60,0x00,0x05,0x02,0x00,0x90,0x80,0x07,0x00,0x00, +0x09,0x00,0x01,0xe1,0x80,0x87,0x40,0x00,0x05,0x00,0x00,0x10,0x80,0xc7,0x00,0x24, +0x01,0x00,0x81,0xc0,0x80,0x07,0x60,0x00,0x09,0x04,0x00,0xa0,0x80,0x47,0x00,0xe4, +0x05,0x02,0x00,0x90,0x80,0x07,0x00,0x00,0x05,0x04,0x00,0x10,0x88,0xc7,0x03,0x04, +0x01,0x00,0x01,0xe1,0x88,0x87,0x40,0x00,0x09,0xf8,0x00,0x10,0x88,0xc7,0x03,0x04, +0x0d,0x00,0x00,0x10,0x88,0xc7,0x40,0x24,0x11,0x04,0x00,0x10,0x88,0xc7,0x23,0x04, +0x15,0x06,0x00,0x10,0x89,0xc7,0x23,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, +0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xad,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x28,0x00,0x02,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00, +0xb6,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xb7,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xbe,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x05,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xbf,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xc9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x01,0x00,0x00,0x00, +0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xca,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xd9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x01,0x00,0x00,0x00, +0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0xda,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xdb,0x03,0x00,0x00,0x00,0x00,0x00,0x00, +0xe8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x02,0x00,0x00,0x00, +0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, +0x00,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0x50,0x4f,0x53, +0x49,0x54,0x49,0x4f,0x4e,0x00,0x00,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00, +0x70,0x6f,0x73,0x5f,0x61,0x74,0x74,0x72,0x00,0x00,0x00,0x74,0x65,0x78,0x63,0x6f, +0x6f,0x72,0x64,0x5f,0x61,0x74,0x74,0x72,0x00,0x00,0x00,0x74,0x65,0x78,0x63,0x6f, +0x6f,0x72,0x64,0x5f,0x76,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/src/plugins/platforms/openvglite/main.cpp b/src/plugins/platforms/openvglite/main.cpp new file mode 100644 index 0000000..dc0b4a8 --- /dev/null +++ b/src/plugins/platforms/openvglite/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_vglite.h" + +QT_BEGIN_NAMESPACE + +class QVGGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QVGGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "OpenVG"; + return list; +} + +QGraphicsSystem* QVGGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "openvg") + return new QVGLiteGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(openvg, QVGGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openvglite/openvglite.pro b/src/plugins/platforms/openvglite/openvglite.pro new file mode 100644 index 0000000..9d7860a --- /dev/null +++ b/src/plugins/platforms/openvglite/openvglite.pro @@ -0,0 +1,12 @@ +TARGET = qvglitegraphicssystem +include(../../qpluginbase.pri) + +QT += openvg + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_vglite.cpp qwindowsurface_vglite.cpp +HEADERS = qgraphicssystem_vglite.h qwindowsurface_vglite.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp new file mode 100644 index 0000000..41b2303 --- /dev/null +++ b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.cpp @@ -0,0 +1,193 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_vglite.h" +#include "qwindowsurface_vglite.h" +#include +#include +#include +#ifdef OPENVG_USBHP_INIT +extern "C" { +#include +}; +#endif + +QT_BEGIN_NAMESPACE + +QVGLiteGraphicsSystem::QVGLiteGraphicsSystem() + : w(0), h(0), d(0), dw(0), dh(0), physWidth(0), physHeight(0), + surface(0), context(0), rootWindow(0), + screenFormat(QImage::Format_RGB16), preservedSwap(false) +{ +#ifdef OPENVG_USBHP_INIT + initLibrary(); +#endif + + // The graphics system is also the screen definition. + mScreens.append(this); + + QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); + QStringList displayArgs = displaySpec.split(QLatin1Char(':')); + + // Initialize EGL and create the global EGL context. + context = qt_vg_create_context(0); + if (!context) { + qFatal("QVGLiteGraphicsSystem: could not initialize EGL"); + return; + } + + // Get the root window handle to use. Default to zero. + QRegExp winidRx(QLatin1String("winid=?(\\d+)")); + int winidIdx = displayArgs.indexOf(winidRx); + int handle = 0; + if (winidIdx >= 0) { + winidRx.exactMatch(displayArgs.at(winidIdx)); + handle = winidRx.cap(1).toInt(); + } + + // Create a full-screen window based on the native handle. + // If the context is premultiplied, the window should be too. + QEglProperties props; +#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT + EGLint surfaceType = 0; + if (context->configAttrib(EGL_SURFACE_TYPE, &surfaceType) && + (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) != 0) + props.setValue(EGL_VG_ALPHA_FORMAT, EGL_VG_ALPHA_FORMAT_PRE); +#endif + rootWindow = eglCreateWindowSurface + (context->display(), context->config(), + (EGLNativeWindowType)handle, props.properties()); + if (rootWindow == EGL_NO_SURFACE) { + delete context; + context = 0; + qFatal("QVGLiteGraphicsSystem: could not create full-screen window"); + return; + } + + // Try to turn on preserved swap behaviour on the root window. + // This will allow us to optimize compositing to focus on just + // the screen region that has changed. Otherwise we must + // re-composite the entire screen every frame. +#if !defined(QVG_NO_PRESERVED_SWAP) + eglGetError(); // Clear error state first. + eglSurfaceAttrib(context->display(), rootWindow, + EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED); + preservedSwap = (eglGetError() == EGL_SUCCESS); +#else + preservedSwap = false; +#endif + + // Fetch the root window properties. + eglQuerySurface(context->display(), rootWindow, EGL_WIDTH, &w); + eglQuerySurface(context->display(), rootWindow, EGL_HEIGHT, &h); + screenFormat = qt_vg_config_to_image_format(context); + switch (screenFormat) { + case QImage::Format_ARGB32_Premultiplied: + case QImage::Format_ARGB32: + case QImage::Format_RGB32: + default: + d = 32; + break; + case QImage::Format_RGB16: + case QImage::Format_ARGB4444_Premultiplied: + d = 16; + break; + } + dw = w; + dh = h; + qDebug("screen size: %dx%dx%d", w, h, d); + + // Handle display physical size spec. From qscreenlinuxfb_qws.cpp. + QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)")); + int dimIdxW = displayArgs.indexOf(mmWidthRx); + QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)")); + int dimIdxH = displayArgs.indexOf(mmHeightRx); + if (dimIdxW >= 0) { + mmWidthRx.exactMatch(displayArgs.at(dimIdxW)); + physWidth = mmWidthRx.cap(1).toInt(); + if (dimIdxH < 0) + physHeight = dh*physWidth/dw; + } + if (dimIdxH >= 0) { + mmHeightRx.exactMatch(displayArgs.at(dimIdxH)); + physHeight = mmHeightRx.cap(1).toInt(); + if (dimIdxW < 0) + physWidth = dw*physHeight/dh; + } + if (dimIdxW < 0 && dimIdxH < 0) { + const int dpi = 72; + physWidth = qRound(dw * 25.4 / dpi); + physHeight = qRound(dh * 25.4 / dpi); + } +} + +QVGLiteGraphicsSystem::~QVGLiteGraphicsSystem() +{ +} + +QPixmapData *QVGLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ +#if !defined(QVGLite_NO_SINGLE_CONTEXT) && !defined(QVGLite_NO_PIXMAP_DATA) + // Pixmaps can use QVGLitePixmapData; bitmaps must use raster. + if (type == QPixmapData::PixmapType) + return new QVGPixmapData(type); + else + return new QRasterPixmapData(type); +#else + return new QRasterPixmapData(type); +#endif +} + +QWindowSurface *QVGLiteGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + if (surface) { + qWarning() << "QVGLiteGraphicsSystem: only one window surface " + "is supported at a time"; + return 0; + } + surface = new QVGLiteWindowSurface + (const_cast(this), widget); + return surface; +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h new file mode 100644 index 0000000..512793d --- /dev/null +++ b/src/plugins/platforms/openvglite/qgraphicssystem_vglite.h @@ -0,0 +1,93 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_VGLITE_H +#define QGRAPHICSSYSTEM_VGLITE_H + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QVGLiteWindowSurface; + +class QVGLiteGraphicsSystem : public QGraphicsSystem, + public QGraphicsSystemScreen +{ +public: + QVGLiteGraphicsSystem(); + ~QVGLiteGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + QList screens() const { return mScreens; } + + QRect geometry() const { return QRect(0, 0, w, h); } + int depth() const { return d; } + QImage::Format format() const { return screenFormat; } + QSize physicalSize() const { return QSize(physWidth, physHeight); } + +private: + friend class QVGLiteWindowSurface; + + int w; + int h; + int d; + + int dw; + int dh; + + int physWidth; + int physHeight; + + mutable QVGLiteWindowSurface *surface; + QEglContext *context; + EGLSurface rootWindow; + QImage::Format screenFormat; + bool preservedSwap; + + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp b/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp new file mode 100644 index 0000000..c73e35a --- /dev/null +++ b/src/plugins/platforms/openvglite/qwindowsurface_vglite.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_vglite.h" +#include "qgraphicssystem_vglite.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QVGLiteWindowSurface::QVGLiteWindowSurface + (QVGLiteGraphicsSystem *gs, QWidget *window) + : QWindowSurface(window), graphicsSystem(gs), + isPaintingActive(false), engine(0) +{ +} + +QVGLiteWindowSurface::~QVGLiteWindowSurface() +{ + graphicsSystem->surface = 0; + if (engine) + qt_vg_destroy_paint_engine(engine); +} + +QPaintDevice *QVGLiteWindowSurface::paintDevice() +{ + qt_vg_make_current(graphicsSystem->context, graphicsSystem->rootWindow); + isPaintingActive = true; + // TODO: clear the parts of the back buffer that are not + // covered by the window surface to black. + return this; +} + +void QVGLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + QEglContext *context = graphicsSystem->context; + if (context) { + if (!isPaintingActive) + qt_vg_make_current(context, graphicsSystem->rootWindow); + context->swapBuffers(); + qt_vg_done_current(context); + context->setSurface(EGL_NO_SURFACE); + isPaintingActive = false; + } +} + +void QVGLiteWindowSurface::setGeometry(const QRect &rect) +{ + QWindowSurface::setGeometry(rect); +} + +bool QVGLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QVGLiteWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QVGLiteWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QPaintEngine *QVGLiteWindowSurface::paintEngine() const +{ + if (!engine) + engine = qt_vg_create_paint_engine(); + return engine; +} + +// We need to get access to QWidget::metric() from QVGLiteWindowSurface::metric, +// but it is not a friend of QWidget. To get around this, we create a +// fake QX11PaintEngine class, which is a friend. +class QX11PaintEngine +{ +public: + static int metric(const QWidget *widget, QPaintDevice::PaintDeviceMetric met) + { + return widget->metric(met); + } +}; + +int QVGLiteWindowSurface::metric(PaintDeviceMetric met) const +{ + return QX11PaintEngine::metric(window(), met); +} diff --git a/src/plugins/platforms/openvglite/qwindowsurface_vglite.h b/src/plugins/platforms/openvglite/qwindowsurface_vglite.h new file mode 100644 index 0000000..59faba8 --- /dev/null +++ b/src/plugins/platforms/openvglite/qwindowsurface_vglite.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_VGLITE_H +#define QWINDOWSURFACE_VGLITE_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_NAMESPACE + +class QVGLiteGraphicsSystem; +class QVGPaintEngine; + +class Q_OPENVG_EXPORT QVGLiteWindowSurface : public QWindowSurface, public QPaintDevice +{ +public: + QVGLiteWindowSurface(QVGLiteGraphicsSystem *gs, QWidget *window); + ~QVGLiteWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + + QPaintEngine *paintEngine() const; + +protected: + int metric(PaintDeviceMetric metric) const; + +private: + QVGLiteGraphicsSystem *graphicsSystem; + bool isPaintingActive; + mutable QVGPaintEngine *engine; +}; + +QT_END_NAMESPACE + +#endif // QWINDOWSURFACE_VGLITE_H diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro new file mode 100644 index 0000000..9688443 --- /dev/null +++ b/src/plugins/platforms/platforms.pro @@ -0,0 +1,14 @@ +TEMPLATE = subdirs +contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl) { + embedded_lite { + SUBDIRS += openvglite + } +} + +embedded_lite { + SUBDIRS += minimal +} + +embedded_lite:x11 { + SUBDIRS += testlite +} diff --git a/src/plugins/platforms/qvfb/main.cpp b/src/plugins/platforms/qvfb/main.cpp new file mode 100644 index 0000000..b28dde8 --- /dev/null +++ b/src/plugins/platforms/qvfb/main.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_qvfb.h" +#include + +QT_BEGIN_NAMESPACE + +class QVFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QVFbGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "QVFb"; + return list; +} + +QGraphicsSystem* QVFbGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "qvfb") + return new QVFbGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(qvfb, QVFbGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.cpp b/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.cpp new file mode 100644 index 0000000..19058a6 --- /dev/null +++ b/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.cpp @@ -0,0 +1,434 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include // overrides QT_OPEN + +#include +#include + +#include "qgraphicssystem_qvfb.h" +#include "qwindowsurface_qvfb.h" +#include +#include +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + + +class QVFbGraphicsSystemScreenKeyboardHandler : public QObject +{ + Q_OBJECT +public: + QVFbGraphicsSystemScreenKeyboardHandler(); + ~QVFbGraphicsSystemScreenKeyboardHandler(); + +private slots: + void readKeyboardData(); + +private: + int kbdFD; + int kbdIdx; + int kbdBufferLen; + unsigned char *kbdBuffer; + QSocketNotifier *keyNotifier; +}; + +QVFbGraphicsSystemScreenKeyboardHandler::QVFbGraphicsSystemScreenKeyboardHandler() +{ + int displayId = 0; //TODO displayId + const QString keyboardDev = QT_VFB_KEYBOARD_PIPE(displayId); + + + kbdFD = -1; + kbdIdx = 0; + kbdBufferLen = sizeof(QVFbKeyData) * 5; + kbdBuffer = new unsigned char [kbdBufferLen]; + + kbdFD = QT_OPEN(keyboardDev.toLatin1().constData(), O_RDWR | O_NDELAY); + + if (kbdFD == -1) { + perror("QVFbGraphicsSystemScreenKeyboardHandler"); + qWarning("QVFbGraphicsSystemScreenKeyboardHandler: Unable to open device %s", + qPrintable(keyboardDev)); + return; + } + + // Clear pending input + char buf[2]; + while (QT_READ(kbdFD, buf, 1) > 0) { } + + keyNotifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this); + connect(keyNotifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData())); + +} + +QVFbGraphicsSystemScreenKeyboardHandler::~QVFbGraphicsSystemScreenKeyboardHandler() +{ + if (kbdFD >= 0) + QT_CLOSE(kbdFD); + delete [] kbdBuffer; +} + + +void QVFbGraphicsSystemScreenKeyboardHandler::readKeyboardData() +{ + int n; + do { + n = QT_READ(kbdFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx); + if (n > 0) + kbdIdx += n; + } while (n > 0); + + int idx = 0; + while (kbdIdx - idx >= (int)sizeof(QVFbKeyData)) { + QVFbKeyData *kd = (QVFbKeyData *)(kbdBuffer + idx); + if (kd->unicode == 0 && kd->keycode == 0 && kd->modifiers == 0 && kd->press) { + // magic exit key + qWarning("Instructed to quit by Virtual Keyboard"); + qApp->quit(); + } + + //QWSServer::processKeyEvent(kd->unicode ? kd->unicode : 0xffff, kd->keycode, kd->modifiers, kd->press, kd->repeat); + + QEvent::Type type = kd->press ? QEvent::KeyPress : QEvent::KeyRelease; + + QString text; + if (kd->unicode && kd->unicode != 0xffff) + text += QChar(kd->unicode); + +// qDebug() << "readKeyboardData" << type << hex << kd->keycode << kd->modifiers << text; + + QWindowSystemInterface::handleKeyEvent(0, type, kd->keycode, kd->modifiers, text, kd->repeat, int(text.length())); + idx += sizeof(QVFbKeyData); + } + + int surplus = kbdIdx - idx; + for (int i = 0; i < surplus; i++) + kbdBuffer[i] = kbdBuffer[idx+i]; + kbdIdx = surplus; +} + + + + +class QVFbGraphicsSystemScreenMouseHandler : public QObject +{ + Q_OBJECT +public: + QVFbGraphicsSystemScreenMouseHandler(); + ~QVFbGraphicsSystemScreenMouseHandler(); + +private slots: + void readMouseData(); + +private: + int mouseFD; + int mouseIdx; + enum {mouseBufSize = 128}; + uchar mouseBuf[mouseBufSize]; + QSocketNotifier *mouseNotifier; + + int oldButtonState; +}; + +QVFbGraphicsSystemScreenMouseHandler::QVFbGraphicsSystemScreenMouseHandler() +{ + int displayId = 0; //TODO: displayId + QString mouseDev = QT_VFB_MOUSE_PIPE(displayId); + + mouseFD = QT_OPEN(mouseDev.toLatin1().constData(), O_RDWR | O_NDELAY); + + if (mouseFD == -1) { + perror("QVFbMouseHandler::QVFbMouseHandler"); + qWarning("QVFbMouseHander: Unable to open device %s", + qPrintable(mouseDev)); + return; + } + + // Clear pending input + char buf[2]; + while (QT_READ(mouseFD, buf, 1) > 0) { } + + mouseIdx = 0; + oldButtonState = 0; + mouseNotifier = new QSocketNotifier(mouseFD, QSocketNotifier::Read, this); + connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); +} + + +QVFbGraphicsSystemScreenMouseHandler::~QVFbGraphicsSystemScreenMouseHandler() +{ + if (mouseFD >= 0) + QT_CLOSE(mouseFD); +} + +void QVFbGraphicsSystemScreenMouseHandler::readMouseData() +{ + int n; + do { + n = QT_READ(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx); + if (n > 0) + mouseIdx += n; + } while (n > 0); + + int idx = 0; + static const int packetsize = sizeof(QPoint) + 2*sizeof(int); + while (mouseIdx-idx >= packetsize) { + uchar *mb = mouseBuf+idx; + QPoint mousePos = *reinterpret_cast(mb); + mb += sizeof(QPoint); + int bstate = *reinterpret_cast(mb); + mb += sizeof(int); + int wheel = *reinterpret_cast(mb); + + int button = bstate ^ oldButtonState; + QEvent::Type type = QEvent::MouseMove; + + if (button) { + type = (button & bstate) ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; + } + QWindowSystemInterface::handleMouseEvent(0, mousePos, mousePos, Qt::MouseButtons(bstate)); + +// qDebug() << "readMouseData" << mousePos << button << bstate << oldButtonState << type; + + oldButtonState = bstate; + + idx += packetsize; + } + + int surplus = mouseIdx - idx; + for (int i = 0; i < surplus; i++) + mouseBuf[i] = mouseBuf[idx+i]; + mouseIdx = surplus; + +} + + +class QVFbGraphicsSystemScreenPrivate +{ +public: + QVFbGraphicsSystemScreenPrivate(QVFbGraphicsSystemScreen *) + : shmrgn(0), hdr(0), data(0), mouseHandler(0), keyboardHandler(0) + { + connect(0); //for now we only handle one screen + } + + ~QVFbGraphicsSystemScreenPrivate() { disconnect(); } + void setDirty(const QRect &r); + + bool connect(int displayId); + void disconnect(); + + QImage *screenImage() { return &img; } + QSize screenSize() { return img.size(); } + + int depth() const { return img.depth(); } + QImage::Format format() const { return img.format(); } + +private: + unsigned char *shmrgn; + QVFbHeader *hdr; + uchar *data; + QVFbGraphicsSystemScreenMouseHandler *mouseHandler; + QVFbGraphicsSystemScreenKeyboardHandler *keyboardHandler; + + + QImage img; +}; + + +void QVFbGraphicsSystemScreenPrivate::setDirty(const QRect &r) +{ + hdr->dirty = true; + hdr->update = hdr->update.united(r); +} + + +bool QVFbGraphicsSystemScreenPrivate::connect(int displayId) +{ + + key_t key = ftok(QT_VFB_MOUSE_PIPE(displayId).toLatin1(), 'b'); + + if (key == -1) + return false; + + + int shmId = shmget(key, 0, 0); + if (shmId != -1) + shmrgn = (unsigned char *)shmat(shmId, 0, 0); + else + return false; + + if ((long)shmrgn == -1 || shmrgn == 0) { + qDebug("No shmrgn %ld", (long)shmrgn); + return false; + } + + hdr = (QVFbHeader *)shmrgn; + data = shmrgn + hdr->dataoffset; + + int w = hdr->width; + int h = hdr->height; + int d = hdr->depth; + int lstep = hdr->linestep; + + QImage::Format format = QImage::Format_Invalid; + if (d == 32) + format = QImage::Format_ARGB32_Premultiplied; + else if (d == 16) + format = QImage::Format_RGB16; + + + if (format == QImage::Format_Invalid) { + img = QImage(); + return false; + } + + img = QImage(data, w, h, lstep, format); + + qDebug("connected %dx%d %d bpp", w, h, d); + + + mouseHandler = new QVFbGraphicsSystemScreenMouseHandler; + keyboardHandler = new QVFbGraphicsSystemScreenKeyboardHandler; + return true; +} + +void QVFbGraphicsSystemScreenPrivate::disconnect() +{ + if ((long)shmrgn != -1 && shmrgn) { + shmdt((char*)shmrgn); + shmrgn = 0; + } + delete mouseHandler; + mouseHandler = 0; + delete keyboardHandler; + keyboardHandler = 0; +} + + +QVFbGraphicsSystemScreen::QVFbGraphicsSystemScreen() +{ + d_ptr = new QVFbGraphicsSystemScreenPrivate(this); +} + + +QVFbGraphicsSystemScreen::~QVFbGraphicsSystemScreen() +{ + delete d_ptr; +} + +void QVFbGraphicsSystemScreen::setDirty(const QRect &rect) +{ + d_ptr->setDirty(rect); +} + + + +QRect QVFbGraphicsSystemScreen::geometry() const { + return QRect(QPoint(), d_ptr->screenSize()); +} + + +int QVFbGraphicsSystemScreen::depth() const +{ + return d_ptr->depth(); +} + +QImage::Format QVFbGraphicsSystemScreen::format() const +{ + return d_ptr->format(); +} + +QSize QVFbGraphicsSystemScreen::physicalSize() const { + return (d_ptr->screenSize()*254)/720; +} + +#if 0 +int QVFbGraphicsSystemScreen::linestep() const { + return d_ptr->screenImage() ? d_ptr->screenImage()->bytesPerLine() : 0; +} + +uchar *QVFbGraphicsSystemScreen::base() const { + return d_ptr->screenImage() ? d_ptr->screenImage()->bits() : 0; +} +#endif + +QImage *QVFbGraphicsSystemScreen::screenImage() +{ + return d_ptr->screenImage(); +} + +QVFbGraphicsSystem::QVFbGraphicsSystem() +{ + mPrimaryScreen = new QVFbGraphicsSystemScreen(); + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QVFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QVFbGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + return new QVFbWindowSurface + (const_cast(this), mPrimaryScreen, widget); +} + +QT_END_NAMESPACE + +#include "qgraphicssystem_qvfb.moc" diff --git a/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h b/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h new file mode 100644 index 0000000..b31869c --- /dev/null +++ b/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_QVFB_H +#define QGRAPHICSSYSTEM_QVFB_H + +#include + +QT_BEGIN_NAMESPACE + + +class QVFbGraphicsSystemScreenPrivate; + +class QVFbGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QVFbGraphicsSystemScreen(); + ~QVFbGraphicsSystemScreen(); + + QRect geometry() const; + int depth() const; + QImage::Format format() const; + QSize physicalSize() const; + + QImage *screenImage(); + + void setDirty(const QRect &rect); + +public: + + QVFbGraphicsSystemScreenPrivate *d_ptr; +}; + +class QVFbGraphicsSystemPrivate; + + +class QVFbGraphicsSystem : public QGraphicsSystem +{ +public: + QVFbGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + +private: + QVFbGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + + + +QT_END_NAMESPACE + + +#endif diff --git a/src/plugins/platforms/qvfb/qvfb.pro b/src/plugins/platforms/qvfb/qvfb.pro new file mode 100644 index 0000000..b321725 --- /dev/null +++ b/src/plugins/platforms/qvfb/qvfb.pro @@ -0,0 +1,12 @@ +TARGET = qvfbgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + + + +SOURCES = main.cpp qgraphicssystem_qvfb.cpp qwindowsurface_qvfb.cpp +HEADERS = qgraphicssystem_qvfb.h qwindowsurface_qvfb.h + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp new file mode 100644 index 0000000..0aafe28 --- /dev/null +++ b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "qwindowsurface_qvfb.h" +#include "qgraphicssystem_qvfb.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QVFbWindowSurface::QVFbWindowSurface(QVFbGraphicsSystem *graphicsSystem, + QVFbGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen) +{ +} + +QVFbWindowSurface::~QVFbWindowSurface() +{ +} + +QPaintDevice *QVFbWindowSurface::paintDevice() +{ + return mScreen->screenImage(); +} + +void QVFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + QRect rect = geometry(); + QPoint topLeft = rect.topLeft(); + + mScreen->setDirty(region.boundingRect()); +} + +void QVFbWindowSurface::setGeometry(const QRect &) +{ + +// any size you like as long as it's full-screen... + + QRect rect(mScreen->availableGeometry()); + QWindowSystemInterface::handleGeometryChange(this->window(), rect); + + QWindowSurface::setGeometry(rect); +} + +bool QVFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + return QWindowSurface::scroll(area, dx, dy); +} + +void QVFbWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +void QVFbWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h new file mode 100644 index 0000000..1971caa --- /dev/null +++ b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_QVFB_H +#define QWINDOWSURFACE_QVFB_H + +#include + +QT_BEGIN_NAMESPACE + +class QVFbGraphicsSystem; +class QVFbGraphicsSystemScreen; + +class QVFbWindowSurface : public QWindowSurface +{ +public: + QVFbWindowSurface(QVFbGraphicsSystem *graphicsSystem, + QVFbGraphicsSystemScreen *screen, QWidget *window); + ~QVFbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + QVFbGraphicsSystem *mGraphicsSystem; + QVFbGraphicsSystemScreen *mScreen; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/testlite/main.cpp b/src/plugins/platforms/testlite/main.cpp new file mode 100644 index 0000000..28caea7 --- /dev/null +++ b/src/plugins/platforms/testlite/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_testlite.h" + +QT_BEGIN_NAMESPACE + +class QTestLiteGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QTestLiteGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "TestLite"; + return list; +} + +QGraphicsSystem* QTestLiteGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "testlite") + return new QTestLiteGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(testlite, QTestLiteGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qgraphicssystem_testlite.cpp b/src/plugins/platforms/testlite/qgraphicssystem_testlite.cpp new file mode 100644 index 0000000..92e0ebc --- /dev/null +++ b/src/plugins/platforms/testlite/qgraphicssystem_testlite.cpp @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_testlite.h" +#include "qwindowsurface_testlite.h" +#include +#include + +#include + + +#include "x11util.h" + +QT_BEGIN_NAMESPACE + +class MyCursor : QGraphicsSystemCursor +{ +public: + MyCursor(QGraphicsSystemScreen *screen) : QGraphicsSystemCursor(screen) {} + + void changeCursor(QCursor * cursor, QWidget * widget) { + QTestLiteWindowSurface *ws = 0; + if (widget) { + QWidget *window = widget->window(); + ws = static_cast(window->windowSurface()); + } else { + // No X11 cursor control when there is no widget under the cursor + return; + } + + //qDebug() << "changeCursor" << widget << ws; + if (!ws) + return; + + ws->setCursor(cursor); + } +}; + + +QTestLiteGraphicsSystem::QTestLiteGraphicsSystem() +{ + + xd = new MyDisplay; + + mPrimaryScreen = new QTestLiteGraphicsSystemScreen(); + + mPrimaryScreen->mGeometry = QRect + (0, 0, xd->width, xd->height); + mPrimaryScreen->mDepth = 32; + mPrimaryScreen->mFormat = QImage::Format_RGB32; + mPrimaryScreen->mPhysicalSize = + QSize(xd->physicalWidth, xd->physicalHeight); + + mScreens.append(mPrimaryScreen); + + + (void)new MyCursor(mPrimaryScreen); + +} + +QPixmapData *QTestLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QTestLiteGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + return new QTestLiteWindowSurface + (const_cast(this), mPrimaryScreen, widget); +} + + +QPixmap QTestLiteGraphicsSystem::grabWindow(WId window, int x, int y, int width, int height) const +{ + QImage img = xd->grabWindow(window, x, y, width, height); + return QPixmap::fromImage(img); +} + + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qgraphicssystem_testlite.h b/src/plugins/platforms/testlite/qgraphicssystem_testlite.h new file mode 100644 index 0000000..b2cd496 --- /dev/null +++ b/src/plugins/platforms/testlite/qgraphicssystem_testlite.h @@ -0,0 +1,91 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_TESTLITE_H +#define QGRAPHICSSYSTEM_TESTLITE_H + +#include + +QT_BEGIN_NAMESPACE + +class MyDisplay; + +class QTestLiteGraphicsSystemScreen : public QGraphicsSystemScreen +{ +public: + QTestLiteGraphicsSystemScreen() + : mDepth(16), mFormat(QImage::Format_RGB16) {} + ~QTestLiteGraphicsSystemScreen() {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; +}; + +class QTestLiteGraphicsSystem : public QGraphicsSystem +{ +public: + QTestLiteGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + + QList screens() const { return mScreens; } + + MyDisplay *xd; + +private: + QTestLiteGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp new file mode 100644 index 0000000..c54f6eb --- /dev/null +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp @@ -0,0 +1,661 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_testlite.h" +#include "qgraphicssystem_testlite.h" + +#include +#include + +#include "x11util.h" + +QT_BEGIN_NAMESPACE + +QTestLiteWindowSurface::QTestLiteWindowSurface + (QTestLiteGraphicsSystem *graphicsSystem, + QTestLiteGraphicsSystemScreen *screen, QWidget *window) + : QWindowSurface(window), + mGraphicsSystem(graphicsSystem), + mScreen(screen), + xw(0) +{ + + + xw = new MyWindow(graphicsSystem->xd, 0,0,300,300); + xw->windowSurface = this; + +// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; + + setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility +} + +QTestLiteWindowSurface::~QTestLiteWindowSurface() +{ +// qDebug() << "~QTestLiteWindowSurface" << xw->window; + delete xw; +} + +QPaintDevice *QTestLiteWindowSurface::paintDevice() +{ + return xw->image(); +} + +void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + + // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this; + + xw->paintEvent(); +} + + +void QTestLiteWindowSurface::setGeometry(const QRect &rect) +{ + QRect oldRect = geometry(); + if (rect == oldRect) + return; + + QWindowSurface::setGeometry(rect); + + //if unchanged ### +// xw->setSize(rect.width(), rect.height()); + xw->setGeometry(rect.x(), rect.y(), rect.width(), rect.height()); +} + +//### scroll logic copied from QRasterWindowSurface, we should make better API for this + +void copied_qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) +{ + // make sure we don't detach + uchar *mem = const_cast(const_cast(img).bits()); + + int lineskip = img.bytesPerLine(); + int depth = img.depth() >> 3; + + const QRect imageRect(0, 0, img.width(), img.height()); + const QRect r = rect & imageRect & imageRect.translated(-offset); + const QPoint p = rect.topLeft() + offset; + + if (r.isEmpty()) + return; + + const uchar *src; + uchar *dest; + + if (r.top() < p.y()) { + src = mem + r.bottom() * lineskip + r.left() * depth; + dest = mem + (p.y() + r.height() - 1) * lineskip + p.x() * depth; + lineskip = -lineskip; + } else { + src = mem + r.top() * lineskip + r.left() * depth; + dest = mem + p.y() * lineskip + p.x() * depth; + } + + const int w = r.width(); + int h = r.height(); + const int bytes = w * depth; + + // overlapping segments? + if (offset.y() == 0 && qAbs(offset.x()) < w) { + do { + ::memmove(dest, src, bytes); + dest += lineskip; + src += lineskip; + } while (--h); + } else { + do { + ::memcpy(dest, src, bytes); + dest += lineskip; + src += lineskip; + } while (--h); + } +} + +bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + if (!xw->image() || xw->image()->isNull()) + return false; + + const QVector rects = area.rects(); + for (int i = 0; i < rects.size(); ++i) + copied_qt_scrollRectInImage(*xw->image(), rects.at(i), QPoint(dx, dy)); + + return true; +} + + +void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + xw->resizeBuffer(geometry().size()); +} + +void QTestLiteWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + xw->painted = true; //there is content in the buffer +} + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Mouse event stuff + + + + +static Qt::MouseButtons translateMouseButtons(int s) +{ + Qt::MouseButtons ret = 0; + if (s & Button1Mask) + ret |= Qt::LeftButton; + if (s & Button2Mask) + ret |= Qt::MidButton; + if (s & Button3Mask) + ret |= Qt::RightButton; + return ret; +} + + +static Qt::KeyboardModifiers translateModifiers(int s) +{ + const uchar qt_alt_mask = Mod1Mask; + const uchar qt_meta_mask = Mod4Mask; + + + Qt::KeyboardModifiers ret = 0; + if (s & ShiftMask) + ret |= Qt::ShiftModifier; + if (s & ControlMask) + ret |= Qt::ControlModifier; + if (s & qt_alt_mask) + ret |= Qt::AltModifier; + if (s & qt_meta_mask) + ret |= Qt::MetaModifier; +#if 0 + if (s & qt_mode_switch_mask) + ret |= Qt::GroupSwitchModifier; +#endif + return ret; +} + +void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) +{ + static QPoint mousePoint; + + XButtonEvent *e = static_cast(ev); + + Qt::MouseButton button = Qt::NoButton; + Qt::MouseButtons buttons = translateMouseButtons(e->state); + Qt::KeyboardModifiers modifiers = translateModifiers(e->state); + if (type != QEvent::MouseMove) { + switch (e->button) { + case Button1: button = Qt::LeftButton; break; + case Button2: button = Qt::MidButton; break; + case Button3: button = Qt::RightButton; break; + case Button4: + case Button5: + case 6: + case 7: { + //mouse wheel + if (type == QEvent::MouseButtonPress) { + //logic borrowed from qapplication_x11.cpp + int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); + bool hor = (((e->button == Button4 || e->button == Button5) + && (modifiers & Qt::AltModifier)) + || (e->button == 6 || e->button == 7)); + QWindowSystemInterface::handleWheelEvent(window(), e->time, + QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + delta, hor ? Qt::Horizontal : Qt::Vertical); + } + return; + } + default: break; + } + } + + buttons ^= button; // X event uses state *before*, Qt uses state *after* + + QWindowSystemInterface::handleMouseEvent(window(), e->time, QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + buttons); + + mousePoint = QPoint(e->x_root, e->y_root); +} + +void QTestLiteWindowSurface::handleGeometryChange(int x, int y, int w, int h) +{ + QWindowSystemInterface::handleGeometryChange(window(), QRect(x,y,w,h)); +} + + +void QTestLiteWindowSurface::handleCloseEvent() +{ + QWindowSystemInterface::handleCloseEvent(window()); +} + + +void QTestLiteWindowSurface::handleEnterEvent() +{ + QWindowSystemInterface::handleEnterEvent(window()); +} + +void QTestLiteWindowSurface::handleLeaveEvent() +{ + QWindowSystemInterface::handleLeaveEvent(window()); +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Key event stuff -- not pretty either +// +// What we want to do is to port Robert's keytable code properly + + + + + + + +// keyboard mapping table +static const unsigned int keyTbl[] = { + + // misc keys + + XK_Escape, Qt::Key_Escape, + XK_Tab, Qt::Key_Tab, + XK_ISO_Left_Tab, Qt::Key_Backtab, + XK_BackSpace, Qt::Key_Backspace, + XK_Return, Qt::Key_Return, + XK_Insert, Qt::Key_Insert, + XK_Delete, Qt::Key_Delete, + XK_Clear, Qt::Key_Delete, + XK_Pause, Qt::Key_Pause, + XK_Print, Qt::Key_Print, + 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq + 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq + + // cursor movement + + XK_Home, Qt::Key_Home, + XK_End, Qt::Key_End, + XK_Left, Qt::Key_Left, + XK_Up, Qt::Key_Up, + XK_Right, Qt::Key_Right, + XK_Down, Qt::Key_Down, + XK_Prior, Qt::Key_PageUp, + XK_Next, Qt::Key_PageDown, + + // modifiers + + XK_Shift_L, Qt::Key_Shift, + XK_Shift_R, Qt::Key_Shift, + XK_Shift_Lock, Qt::Key_Shift, + XK_Control_L, Qt::Key_Control, + XK_Control_R, Qt::Key_Control, + XK_Meta_L, Qt::Key_Meta, + XK_Meta_R, Qt::Key_Meta, + XK_Alt_L, Qt::Key_Alt, + XK_Alt_R, Qt::Key_Alt, + XK_Caps_Lock, Qt::Key_CapsLock, + XK_Num_Lock, Qt::Key_NumLock, + XK_Scroll_Lock, Qt::Key_ScrollLock, + XK_Super_L, Qt::Key_Super_L, + XK_Super_R, Qt::Key_Super_R, + XK_Menu, Qt::Key_Menu, + XK_Hyper_L, Qt::Key_Hyper_L, + XK_Hyper_R, Qt::Key_Hyper_R, + XK_Help, Qt::Key_Help, + 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab + 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) + 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) + + // numeric and function keypad keys + + XK_KP_Space, Qt::Key_Space, + XK_KP_Tab, Qt::Key_Tab, + XK_KP_Enter, Qt::Key_Enter, + //XK_KP_F1, Qt::Key_F1, + //XK_KP_F2, Qt::Key_F2, + //XK_KP_F3, Qt::Key_F3, + //XK_KP_F4, Qt::Key_F4, + XK_KP_Home, Qt::Key_Home, + XK_KP_Left, Qt::Key_Left, + XK_KP_Up, Qt::Key_Up, + XK_KP_Right, Qt::Key_Right, + XK_KP_Down, Qt::Key_Down, + XK_KP_Prior, Qt::Key_PageUp, + XK_KP_Next, Qt::Key_PageDown, + XK_KP_End, Qt::Key_End, + XK_KP_Begin, Qt::Key_Clear, + XK_KP_Insert, Qt::Key_Insert, + XK_KP_Delete, Qt::Key_Delete, + XK_KP_Equal, Qt::Key_Equal, + XK_KP_Multiply, Qt::Key_Asterisk, + XK_KP_Add, Qt::Key_Plus, + XK_KP_Separator, Qt::Key_Comma, + XK_KP_Subtract, Qt::Key_Minus, + XK_KP_Decimal, Qt::Key_Period, + XK_KP_Divide, Qt::Key_Slash, + + // International input method support keys + + // International & multi-key character composition + XK_ISO_Level3_Shift, Qt::Key_AltGr, + XK_Multi_key, Qt::Key_Multi_key, + XK_Codeinput, Qt::Key_Codeinput, + XK_SingleCandidate, Qt::Key_SingleCandidate, + XK_MultipleCandidate, Qt::Key_MultipleCandidate, + XK_PreviousCandidate, Qt::Key_PreviousCandidate, + + // Misc Functions + XK_Mode_switch, Qt::Key_Mode_switch, + XK_script_switch, Qt::Key_Mode_switch, + + // Japanese keyboard support + XK_Kanji, Qt::Key_Kanji, + XK_Muhenkan, Qt::Key_Muhenkan, + //XK_Henkan_Mode, Qt::Key_Henkan_Mode, + XK_Henkan_Mode, Qt::Key_Henkan, + XK_Henkan, Qt::Key_Henkan, + XK_Romaji, Qt::Key_Romaji, + XK_Hiragana, Qt::Key_Hiragana, + XK_Katakana, Qt::Key_Katakana, + XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana, + XK_Zenkaku, Qt::Key_Zenkaku, + XK_Hankaku, Qt::Key_Hankaku, + XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku, + XK_Touroku, Qt::Key_Touroku, + XK_Massyo, Qt::Key_Massyo, + XK_Kana_Lock, Qt::Key_Kana_Lock, + XK_Kana_Shift, Qt::Key_Kana_Shift, + XK_Eisu_Shift, Qt::Key_Eisu_Shift, + XK_Eisu_toggle, Qt::Key_Eisu_toggle, + //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou, + //XK_Zen_Koho, Qt::Key_Zen_Koho, + //XK_Mae_Koho, Qt::Key_Mae_Koho, + XK_Kanji_Bangou, Qt::Key_Codeinput, + XK_Zen_Koho, Qt::Key_MultipleCandidate, + XK_Mae_Koho, Qt::Key_PreviousCandidate, + +#ifdef XK_KOREAN + // Korean keyboard support + XK_Hangul, Qt::Key_Hangul, + XK_Hangul_Start, Qt::Key_Hangul_Start, + XK_Hangul_End, Qt::Key_Hangul_End, + XK_Hangul_Hanja, Qt::Key_Hangul_Hanja, + XK_Hangul_Jamo, Qt::Key_Hangul_Jamo, + XK_Hangul_Romaja, Qt::Key_Hangul_Romaja, + //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput, + XK_Hangul_Codeinput, Qt::Key_Codeinput, + XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja, + XK_Hangul_Banja, Qt::Key_Hangul_Banja, + XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja, + XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja, + //XK_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate, + //XK_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate, + //XK_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate, + XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate, + XK_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate, + XK_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate, + XK_Hangul_Special, Qt::Key_Hangul_Special, + //XK_Hangul_switch, Qt::Key_Hangul_switch, + XK_Hangul_switch, Qt::Key_Mode_switch, +#endif // XK_KOREAN + + // dead keys + XK_dead_grave, Qt::Key_Dead_Grave, + XK_dead_acute, Qt::Key_Dead_Acute, + XK_dead_circumflex, Qt::Key_Dead_Circumflex, + XK_dead_tilde, Qt::Key_Dead_Tilde, + XK_dead_macron, Qt::Key_Dead_Macron, + XK_dead_breve, Qt::Key_Dead_Breve, + XK_dead_abovedot, Qt::Key_Dead_Abovedot, + XK_dead_diaeresis, Qt::Key_Dead_Diaeresis, + XK_dead_abovering, Qt::Key_Dead_Abovering, + XK_dead_doubleacute, Qt::Key_Dead_Doubleacute, + XK_dead_caron, Qt::Key_Dead_Caron, + XK_dead_cedilla, Qt::Key_Dead_Cedilla, + XK_dead_ogonek, Qt::Key_Dead_Ogonek, + XK_dead_iota, Qt::Key_Dead_Iota, + XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound, + XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound, + XK_dead_belowdot, Qt::Key_Dead_Belowdot, + XK_dead_hook, Qt::Key_Dead_Hook, + XK_dead_horn, Qt::Key_Dead_Horn, + +#if 0 + // Special multimedia keys + // currently only tested with MS internet keyboard + + // browsing keys + XF86XK_Back, Qt::Key_Back, + XF86XK_Forward, Qt::Key_Forward, + XF86XK_Stop, Qt::Key_Stop, + XF86XK_Refresh, Qt::Key_Refresh, + XF86XK_Favorites, Qt::Key_Favorites, + XF86XK_AudioMedia, Qt::Key_LaunchMedia, + XF86XK_OpenURL, Qt::Key_OpenUrl, + XF86XK_HomePage, Qt::Key_HomePage, + XF86XK_Search, Qt::Key_Search, + + // media keys + XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, + XF86XK_AudioMute, Qt::Key_VolumeMute, + XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, + XF86XK_AudioPlay, Qt::Key_MediaPlay, + XF86XK_AudioStop, Qt::Key_MediaStop, + XF86XK_AudioPrev, Qt::Key_MediaPrevious, + XF86XK_AudioNext, Qt::Key_MediaNext, + XF86XK_AudioRecord, Qt::Key_MediaRecord, + + // launch keys + XF86XK_Mail, Qt::Key_LaunchMail, + XF86XK_MyComputer, Qt::Key_Launch0, + XF86XK_Calculator, Qt::Key_Launch1, + XF86XK_Standby, Qt::Key_Standby, + + XF86XK_Launch0, Qt::Key_Launch2, + XF86XK_Launch1, Qt::Key_Launch3, + XF86XK_Launch2, Qt::Key_Launch4, + XF86XK_Launch3, Qt::Key_Launch5, + XF86XK_Launch4, Qt::Key_Launch6, + XF86XK_Launch5, Qt::Key_Launch7, + XF86XK_Launch6, Qt::Key_Launch8, + XF86XK_Launch7, Qt::Key_Launch9, + XF86XK_Launch8, Qt::Key_LaunchA, + XF86XK_Launch9, Qt::Key_LaunchB, + XF86XK_LaunchA, Qt::Key_LaunchC, + XF86XK_LaunchB, Qt::Key_LaunchD, + XF86XK_LaunchC, Qt::Key_LaunchE, + XF86XK_LaunchD, Qt::Key_LaunchF, +#endif + +#if 0 + // Qtopia keys + QTOPIAXK_Select, Qt::Key_Select, + QTOPIAXK_Yes, Qt::Key_Yes, + QTOPIAXK_No, Qt::Key_No, + QTOPIAXK_Cancel, Qt::Key_Cancel, + QTOPIAXK_Printer, Qt::Key_Printer, + QTOPIAXK_Execute, Qt::Key_Execute, + QTOPIAXK_Sleep, Qt::Key_Sleep, + QTOPIAXK_Play, Qt::Key_Play, + QTOPIAXK_Zoom, Qt::Key_Zoom, + QTOPIAXK_Context1, Qt::Key_Context1, + QTOPIAXK_Context2, Qt::Key_Context2, + QTOPIAXK_Context3, Qt::Key_Context3, + QTOPIAXK_Context4, Qt::Key_Context4, + QTOPIAXK_Call, Qt::Key_Call, + QTOPIAXK_Hangup, Qt::Key_Hangup, + QTOPIAXK_Flip, Qt::Key_Flip, +#endif + 0, 0 +}; + + +static int lookupCode(unsigned int xkeycode) +{ + if (xkeycode >= XK_F1 && xkeycode <= XK_F35) + return Qt::Key_F1 + (int(xkeycode) - XK_F1); + + const unsigned int *p = keyTbl; + while (*p) { + if (*p == xkeycode) + return *++p; + p += 2; + } + + return 0; +} + + +static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) +{ + switch (qtcode) { + case Qt::Key_Control: + return Qt::ControlModifier; + case Qt::Key_Alt: + return Qt::AltModifier; + case Qt::Key_Shift: + return Qt::ShiftModifier; + case Qt::Key_Meta: + return Qt::MetaModifier; + default: + return Qt::NoModifier; + } +} + +void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) +{ + XKeyEvent *e = static_cast(ev); + + KeySym keySym; + QByteArray chars; + chars.resize(513); + + int count = XLookupString(e, chars.data(), chars.size(), &keySym, 0); + +// qDebug() << "QTLWS::handleKeyEvent" << count << hex << "XKeysym:" << keySym; +// if (count) +// qDebug() << hex << int(chars[0]) << "String:" << chars; + + Qt::KeyboardModifiers modifiers = translateModifiers(e->state); + + int qtcode = lookupCode(keySym); +// qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers; + + //X11 specifies state *before*, Qt expects state *after* the event + + modifiers ^= modifierFromKeyCode(qtcode); + + if (qtcode) { + QWindowSystemInterface::handleKeyEvent(window(), e->time, type, qtcode, modifiers); + } else if (chars[0]) { + int qtcode = chars.toUpper()[0]; //Not exactly right... + if (modifiers & Qt::ControlModifier && qtcode < ' ') + qtcode = chars[0] + '@'; + QWindowSystemInterface::handleKeyEvent(window(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); + } else { + qWarning() << "unknown X keycode" << hex << e->keycode << keySym; + } +} + + + +Qt::WindowFlags QTestLiteWindowSurface::setWindowFlags(Qt::WindowFlags flags) +{ + Q_ASSERT(flags & Qt::Window); + + window_flags = flags; + + xw->setWindowFlags(flags); + + return window_flags; + +} + +Qt::WindowFlags QTestLiteWindowSurface::windowFlags() const +{ + return window_flags; +} + +void QTestLiteWindowSurface::setVisible(bool visible) +{ + //qDebug() << "QTestLiteWindowSurface::setVisible" << visible << xw->window; + xw->setVisible(visible); +} + + +WId QTestLiteWindowSurface::winId() const +{ + if (xw) + return (WId) xw->window; + else + return WId(0); +} + +void QTestLiteWindowSurface::raise() +{ + WId window = winId(); + XRaiseWindow(mGraphicsSystem->xd->display, window); +} + +void QTestLiteWindowSurface::lower() +{ + WId window = winId(); + XLowerWindow(mGraphicsSystem->xd->display, window); +} + +void QTestLiteWindowSurface::setWindowTitle(const QString &title) +{ + xw->setWindowTitle(title); +} + +void QTestLiteWindowSurface::setCursor(QCursor *cursor) +{ + xw->setCursor(cursor); +} +QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.h b/src/plugins/platforms/testlite/qwindowsurface_testlite.h new file mode 100644 index 0000000..0c4df1a --- /dev/null +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_TESTLITE_H +#define QWINDOWSURFACE_TESTLITE_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class MyWindow; +class QTestLiteGraphicsSystem; +class QTestLiteGraphicsSystemScreen; + +class QTestLiteWindowSurface : public QWindowSurface +{ +public: + QTestLiteWindowSurface + (QTestLiteGraphicsSystem *graphicsSystem, + QTestLiteGraphicsSystemScreen *screen, QWidget *window); + ~QTestLiteWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + + void handleMouseEvent(QEvent::Type, void *); //forwarding X types is apparently impossible :( + void handleKeyEvent(QEvent::Type, void *); + void handleGeometryChange(int x, int y, int w, int h); + void handleCloseEvent(); + void handleEnterEvent(); + void handleLeaveEvent(); + + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + Qt::WindowFlags windowFlags() const; + void setVisible(bool visible); + WId winId() const; + void raise(); + void lower(); + void setWindowTitle(const QString &title); + + void setCursor(QCursor * cursor); + +private: + QTestLiteGraphicsSystem *mGraphicsSystem; + QTestLiteGraphicsSystemScreen *mScreen; + Qt::WindowFlags window_flags; + MyWindow *xw; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro new file mode 100644 index 0000000..d483f45 --- /dev/null +++ b/src/plugins/platforms/testlite/testlite.pro @@ -0,0 +1,17 @@ +TARGET = qtestlitegraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_testlite.cpp qwindowsurface_testlite.cpp +HEADERS = qgraphicssystem_testlite.h qwindowsurface_testlite.h + + +HEADERS += x11util.h +SOURCES += x11util.cpp + +LIBS += -lX11 -lXext + + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +INSTALLS += target diff --git a/src/plugins/platforms/testlite/x11util.cpp b/src/plugins/platforms/testlite/x11util.cpp new file mode 100644 index 0000000..6d2966f --- /dev/null +++ b/src/plugins/platforms/testlite/x11util.cpp @@ -0,0 +1,1215 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include +#include +#include + +#include "x11util.h" +#include "qwindowsurface_testlite.h" + +#include +#include + + +#include + +#include + +# include +# include +# include + + +#include +#include +#include +#include + +//### remove stuff we don't want from qt_x11_p.h +#undef ATOM +#undef X11 + +//#define MYX11_DEBUG + +//#define DONT_USE_MIT_SHM + +static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); +static bool seen_badwindow; + + +static Atom wmProtocolsAtom; +static Atom wmDeleteWindowAtom; + +//### copied from qapplication_x11.cpp + +static int qt_x_errhandler(Display *dpy, XErrorEvent *err) +{ + +qDebug() << "qt_x_errhandler" << err->error_code; + + switch (err->error_code) { + case BadAtom: +#if 0 + if (err->request_code == 20 /* X_GetProperty */ + && (err->resourceid == XA_RESOURCE_MANAGER + || err->resourceid == XA_RGB_DEFAULT_MAP + || err->resourceid == ATOM(_NET_SUPPORTED) + || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) + || err->resourceid == ATOM(KDE_FULL_SESSION) + || err->resourceid == ATOM(KWIN_RUNNING) + || err->resourceid == ATOM(XdndProxy) + || err->resourceid == ATOM(XdndAware)) + + + ) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } +#endif + qDebug() << "BadAtom"; + break; + + case BadWindow: + if (err->request_code == 2 /* X_ChangeWindowAttributes */ + || err->request_code == 38 /* X_QueryPointer */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } + } + seen_badwindow = true; + if (err->request_code == 25 /* X_SendEvent */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } +#if 0 + if (X11->xdndHandleBadwindow()) { + qDebug("xdndHandleBadwindow returned true"); + return 0; + } +#endif + } +#if 0 + if (X11->ignore_badwindow) + return 0; +#endif + break; + + case BadMatch: + if (err->request_code == 42 /* X_SetInputFocus */) + return 0; + break; + + default: +#if 0 //!defined(QT_NO_XINPUT) + if (err->request_code == X11->xinput_major + && err->error_code == (X11->xinput_errorbase + XI_BadDevice) + && err->minor_code == 3 /* X_OpenDevice */) { + return 0; + } +#endif + break; + } + + char errstr[256]; + XGetErrorText( dpy, err->error_code, errstr, 256 ); + char buffer[256]; + char request_str[256]; + qsnprintf(buffer, 256, "%d", err->request_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); + if (err->request_code < 128) { + // X error for a normal protocol request + qWarning( "X Error: %s %d\n" + " Major opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + request_str, + err->resourceid ); + } else { + // X error for an extension request + const char *extensionName = 0; +#if 0 + if (err->request_code == X11->xrender_major) + extensionName = "RENDER"; + else if (err->request_code == X11->xrandr_major) + extensionName = "RANDR"; + else if (err->request_code == X11->xinput_major) + extensionName = "XInputExtension"; + else if (err->request_code == X11->mitshm_major) + extensionName = "MIT-SHM"; +#endif + char minor_str[256]; + if (extensionName) { + qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); + } else { + extensionName = "Uknown extension"; + qsnprintf(minor_str, 256, "Unknown request"); + } + qWarning( "X Error: %s %d\n" + " Extension: %d (%s)\n" + " Minor opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + extensionName, + err->minor_code, + minor_str, + err->resourceid ); + } + + // ### we really should distinguish between severe, non-severe and + // ### application specific errors + + return 0; +} + + + + + + + + + +bool MyDisplay::handleEvent(XEvent *xe) +{ + //qDebug() << "handleEvent" << xe->xany.type << xe->xany.window; + int quit = false; + MyWindow *xw = 0; + foreach (MyWindow *w, windowList) { + if (w->window == xe->xany.window) { + xw = w; + break; + } + } + if (!xw) { +#ifdef MYX11_DEBUG + qWarning() << "Unknown window" << hex << xe->xany.window << "received event" << xe->type; +#endif + return quit; + } + + switch (xe->type) { + + case ClientMessage: + if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { + Atom a = xe->xclient.data.l[0]; + if (a == wmDeleteWindowAtom) + xw->closeEvent(); +#ifdef MYX11_DEBUG + qDebug() << "ClientMessage WM_PROTOCOLS" << a; +#endif + } +#ifdef MYX11_DEBUG + else + qDebug() << "ClientMessage" << xe->xclient.format << xe->xclient.message_type; +#endif + break; + + case Expose: + if (xw) + if (xe->xexpose.count == 0) + xw->paintEvent(); + break; + case ConfigureNotify: + if (xw) + xw->resizeEvent(&xe->xconfigure); + break; + + case ButtonPress: + xw->mousePressEvent(&xe->xbutton); + break; + + case ButtonRelease: + xw->mouseReleaseEvent(&xe->xbutton); + break; + + case MotionNotify: + xw->mouseMoveEvent(&xe->xbutton); + break; + + case XKeyPress: + xw->keyPressEvent(&xe->xkey); + break; + + case XKeyRelease: + xw->keyReleaseEvent(&xe->xkey); + break; + + case EnterNotify: + xw->enterEvent(&xe->xcrossing); + break; + + case LeaveNotify: + xw->leaveEvent(&xe->xcrossing); + break; + + default: +#ifdef MYX11_DEBUG + qDebug() << hex << xe->xany.window << "Other X event" << xe->type; +#endif + break; + } + return quit; +}; + + + +MyDisplay::MyDisplay() +{ + char *display_name = getenv("DISPLAY"); + display = XOpenDisplay(display_name); + if (!display) { + fprintf(stderr, "Cannot connect to X server: %s\n", + display_name); + exit(1); + } + +#ifndef DONT_USE_MIT_SHM + Status MIT_SHM_extension_supported = XShmQueryExtension (display); + Q_ASSERT(MIT_SHM_extension_supported == True); +#endif + original_x_errhandler = XSetErrorHandler(qt_x_errhandler); + + if (qgetenv("DO_X_SYNCHRONIZE").toInt()) + XSynchronize(display, true); + + screen = DefaultScreen(display); + width = DisplayWidth(display, screen); + height = DisplayHeight(display, screen); + physicalWidth = DisplayWidthMM(display, screen); + physicalHeight = DisplayHeightMM(display, screen); + + int xSocketNumber = XConnectionNumber(display); +#ifdef MYX11_DEBUG + qDebug() << "X socket:"<< xSocketNumber; +#endif + QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); + connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); + + wmProtocolsAtom = XInternAtom (display, "WM_PROTOCOLS", False); + wmDeleteWindowAtom = XInternAtom (display, "WM_DELETE_WINDOW", False); + + cursors = new MyX11Cursors(display); +} + + +MyDisplay::~MyDisplay() +{ + XCloseDisplay(display); +} + + +void MyDisplay::eventDispatcher() +{ +// qDebug() << "eventDispatcher"; + + + ulong marker = XNextRequest(display); +// int i = 0; + while (XPending(display)) { + XEvent event; + XNextEvent(display, &event); + /* done = */ + handleEvent(&event); + + if (event.xany.serial >= marker) { +#ifdef MYX11_DEBUG + qDebug() << "potential livelock averted"; +#endif +#if 0 + if (XEventsQueued(display, QueuedAfterFlush)) { + qDebug() << " with events queued"; + QTimer::singleShot(0, this, SLOT(eventDispatcher())); + } +#endif + break; + } + } +} + + +QImage MyDisplay::grabWindow(Window window, int x, int y, int w, int h) +{ + if (w == 0 || h ==0) + return QImage(); + + //WinId 0 means the desktop widget + if (!window) + window = rootWindow(); + + XWindowAttributes window_attr; + if (!XGetWindowAttributes(display, window, &window_attr)) + return QImage(); + + if (w < 0) + w = window_attr.width - x; + if (h < 0) + h = window_attr.height - y; + + // Ideally, we should also limit ourselves to the screen area, but the Qt docs say + // that it's "unsafe" to go outside the screen, so we can ignore that problem. + + //We're definitely not optimizing for speed... + XImage *xi = XGetImage(display, window, x, y, w, h, AllPlanes, ZPixmap); + + if (!xi) + return QImage(); + + //taking a copy to make sure we have ownership -- not fast + QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); + + XDestroyImage(xi); + + return result; +} + + + + +struct MyShmImageInfo { + MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} + ~MyShmImageInfo() { destroy(); } + + void destroy(); + + XShmSegmentInfo shminfo; + XImage *image; + Display *display; +}; + +MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) +{ + xd = display; + + xd->windowList.append(this); + + window = XCreateSimpleWindow(xd->display, xd->rootWindow(), + x, y, w, h, 0 /*border_width*/, + xd->blackPixel(), xd->whitePixel()); + + +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::MyWindow" << hex << window; +#endif + + + width = -1; + height = -1; + xpos = -1; + ypos = -1; + + XSetWindowBackgroundPixmap(xd->display, window, XNone); + + XSelectInput(xd->display, window, ExposureMask | KeyPressMask | KeyReleaseMask | + EnterWindowMask | LeaveWindowMask | FocusChangeMask | + PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | + StructureNotifyMask); + + gc = createGC(); + + XChangeProperty (xd->display, window, + wmProtocolsAtom, + XA_ATOM, 32, PropModeAppend, + (unsigned char *) &wmDeleteWindowAtom, 1); + + + setWindowTitle(QLatin1String("Qt Lighthouse")); + + currentCursor = -1; + + image_info = 0; + painted = false; +} + + +void MyWindow::setWindowTitle(const QString &title) + +{ + QByteArray ba = title.toLatin1(); //We're not making a general solution here... + XTextProperty windowName; + windowName.value = (unsigned char *)ba.constData(); + windowName.encoding = XA_STRING; + windowName.format = 8; + windowName.nitems = ba.length(); + + XSetWMName(xd->display, window, &windowName); +} + +MyWindow::~MyWindow() +{ +#ifdef MYX11_DEBUG + qDebug() << "~MyWindow" << hex << window; +#endif + XFreeGC(xd->display, gc); + XDestroyWindow(xd->display, window); + + xd->windowList.removeAll(this); + + delete image_info; +} + +GC MyWindow::createGC() +{ + GC gc; + + gc = XCreateGC(xd->display, window, 0, 0); + if (gc < 0) { + qWarning("MyWindow::createGC() could not create GC"); + } + return gc; +} + +void MyWindow::closeEvent() +{ + windowSurface->handleCloseEvent(); +} + +void MyWindow::paintEvent() +{ +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::paintEvent" << shm_img.size() << painted; +#endif + if (!painted) + return; + +#ifdef DONT_USE_MIT_SHM + // just convert the image every time... + if (!shm_img.isNull()) { + Visual *visual = DefaultVisual(xd->display, xd->screen); + + QImage image = shm_img; + //img.convertToFormat( + XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, + 0, (char *) image.scanLine(0), image.width(), image.height(), + 32, image.bytesPerLine()); + + int x = 0; + int y = 0; + + /*int r =*/ XPutImage(xd->display, window, gc, xi, 0, 0, x, y, image.width(), image.height()); + + xi->data = 0; // QImage owns these bits + XDestroyImage(xi); + } +#else + // Use MIT_SHM + if (image_info->image) { + //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; + int x = 0; + int y = 0; + + // We could set send_event to true, and then use the ShmCompletion to synchronize, + // but let's do like Qt/11 and just use XSync + XShmPutImage (xd->display, window, gc, image_info->image, 0, 0, + x, y, image_info->image->width, image_info->image->height, + /*send_event*/ False); + + XSync(xd->display, False); + } +#endif +} + +#ifndef DONT_USE_MIT_SHM +void MyShmImageInfo::destroy() +{ + XShmDetach (display, &shminfo); + XDestroyImage (image); + shmdt (shminfo.shmaddr); + shmctl (shminfo.shmid, IPC_RMID, 0); +} +#endif + +void MyWindow::resizeShmImage(int width, int height) +{ +#ifdef DONT_USE_MIT_SHM + shm_img = QImage(width, height, QImage::Format_RGB32); +#else + if (image_info) + image_info->destroy(); + else + image_info = new MyShmImageInfo(xd->display); + + Visual *visual = DefaultVisual(xd->display, xd->screen); + + + XImage *image = XShmCreateImage (xd->display, visual, 24, ZPixmap, 0, + &image_info->shminfo, width, height); + + + image_info->shminfo.shmid = shmget (IPC_PRIVATE, + image->bytes_per_line * image->height, IPC_CREAT|0777); + + image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); + image_info->shminfo.readOnly = False; + + image_info->image = image; + + Status shm_attach_status = XShmAttach(xd->display, &image_info->shminfo); + + Q_ASSERT(shm_attach_status == True); + + shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); +#endif + painted = false; +} + + +void MyWindow::resizeBuffer(QSize s) +{ + if (shm_img.size() != s) + resizeShmImage(s.width(), s.height()); +} + +QSize MyWindow::bufferSize() const +{ + return shm_img.size(); +} + + +void MyWindow::resizeEvent(XConfigureEvent *e) +{ + + if ((e->width != width || e->height != height) && e->x == 0 && e->y == 0) { + //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; + } else { + //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; + xpos = e->x; + ypos = e->y; + } + width = e->width; + height = e->height; + +#ifdef MYX11_DEBUG + qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height << "img:" << shm_img.size(); +#endif + + windowSurface->handleGeometryChange(xpos, ypos, width, height); +} + +#if 0 +void MyWindow::setSize(int w, int h) +{ + XResizeWindow(xd->display, window, w, h); +} +#endif + +void MyWindow::setGeometry(int x, int y, int w, int h) +{ +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::setGeometry" << hex << window << dec << x << y << w << h << "img:" << shm_img.size(); +#endif + XMoveResizeWindow(xd->display, window, x, y, w, h); +} + + +void MyWindow::enterEvent(XCrossingEvent *) +{ +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::enterEvent" << hex << window; +#endif + windowSurface->handleEnterEvent(); +} + +void MyWindow::leaveEvent(XCrossingEvent *) +{ +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::enterEvent" << hex << window; +#endif + windowSurface->handleLeaveEvent(); +} + +void MyWindow::mousePressEvent(XButtonEvent *e) +{ + static long prevTime = 0; + static Window prevWindow; + static int prevX = -999; + static int prevY = -999; + + QEvent::Type type = QEvent::MouseButtonPress; + + if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() + && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { + type = QEvent::MouseButtonDblClick; + prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time + } else { + prevTime = e->time; + } + prevWindow = e->window; + prevX = e->x; + prevY = e->y; + + windowSurface->handleMouseEvent(type, e); +} + +void MyWindow::mouseReleaseEvent(XButtonEvent *e) +{ + windowSurface->handleMouseEvent(QEvent::MouseButtonRelease, e); +} + +void MyWindow::mouseMoveEvent(XButtonEvent *e) +{ + windowSurface->handleMouseEvent(QEvent::MouseMove, e); +} + +#ifdef KeyPress +#undef KeyPress +#endif + +void MyWindow::keyPressEvent(XKeyEvent *e) +{ + windowSurface->handleKeyEvent(QEvent::KeyPress, e); +} + +#ifdef KeyRelease +#undef KeyRelease +#endif + +void MyWindow::keyReleaseEvent(XKeyEvent *e) +{ + windowSurface->handleKeyEvent(QEvent::KeyRelease, e); +} + + +// WindowFlag stuff, lots of copied code from qwidget_x11.cpp... + +//We're hacking here... + + +// MWM support +struct QtMWMHints { + ulong flags, functions, decorations; + long input_mode; + ulong status; +}; + +enum { + MWM_HINTS_FUNCTIONS = (1L << 0), + + MWM_FUNC_ALL = (1L << 0), + MWM_FUNC_RESIZE = (1L << 1), + MWM_FUNC_MOVE = (1L << 2), + MWM_FUNC_MINIMIZE = (1L << 3), + MWM_FUNC_MAXIMIZE = (1L << 4), + MWM_FUNC_CLOSE = (1L << 5), + + MWM_HINTS_DECORATIONS = (1L << 1), + + MWM_DECOR_ALL = (1L << 0), + MWM_DECOR_BORDER = (1L << 1), + MWM_DECOR_RESIZEH = (1L << 2), + MWM_DECOR_TITLE = (1L << 3), + MWM_DECOR_MENU = (1L << 4), + MWM_DECOR_MINIMIZE = (1L << 5), + MWM_DECOR_MAXIMIZE = (1L << 6), + + MWM_HINTS_INPUT_MODE = (1L << 2), + + MWM_INPUT_MODELESS = 0L, + MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, + MWM_INPUT_FULL_APPLICATION_MODAL = 3L +}; + +static Atom mwm_hint_atom = XNone; + +static QtMWMHints GetMWMHints(Display *display, Window window) +{ + QtMWMHints mwmhints; + + Atom type; + int format; + ulong nitems, bytesLeft; + uchar *data = 0; + if ((XGetWindowProperty(display, window, mwm_hint_atom, 0, 5, false, + mwm_hint_atom, &type, &format, &nitems, &bytesLeft, + &data) == Success) + && (type == mwm_hint_atom + && format == 32 + && nitems >= 5)) { + mwmhints = *(reinterpret_cast(data)); + } else { + mwmhints.flags = 0L; + mwmhints.functions = MWM_FUNC_ALL; + mwmhints.decorations = MWM_DECOR_ALL; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + } + + if (data) + XFree(data); + + return mwmhints; +} + +static void SetMWMHints(Display *display, Window window, const QtMWMHints &mwmhints) +{ + if (mwmhints.flags != 0l) { + XChangeProperty(display, window, mwm_hint_atom, mwm_hint_atom, 32, + PropModeReplace, (unsigned char *) &mwmhints, 5); + } else { + XDeleteProperty(display, window, mwm_hint_atom); + } +} + +// Returns true if we should set WM_TRANSIENT_FOR on \a w +static inline bool isTransient(const QWidget *w) +{ + return ((w->windowType() == Qt::Dialog + || w->windowType() == Qt::Sheet + || w->windowType() == Qt::Tool + || w->windowType() == Qt::SplashScreen + || w->windowType() == Qt::ToolTip + || w->windowType() == Qt::Drawer + || w->windowType() == Qt::Popup) + && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); +} + + + +Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) +{ + + if (mwm_hint_atom == XNone) { + mwm_hint_atom = XInternAtom(xd->display, "_MOTIF_WM_HINTS\0", False); + } + +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::setWindowFlags" << hex << window << "flags" << flags; +#endif + Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); + + if (type == Qt::ToolTip) + flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; + if (type == Qt::Popup) + flags |= Qt::X11BypassWindowManagerHint; + + bool topLevel = (flags & Qt::Window); + bool popup = (type == Qt::Popup); + bool dialog = (type == Qt::Dialog + || type == Qt::Sheet); + bool desktop = (type == Qt::Desktop); + bool tool = (type == Qt::Tool || type == Qt::SplashScreen + || type == Qt::ToolTip || type == Qt::Drawer); + + bool tooltip = (type == Qt::ToolTip); + + XSetWindowAttributes wsa; + + QtMWMHints mwmhints; + mwmhints.flags = 0L; + mwmhints.functions = 0L; + mwmhints.decorations = 0; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + + + ulong wsa_mask = 0; + if (type != Qt::SplashScreen) { // && customize) { + mwmhints.flags |= MWM_HINTS_DECORATIONS; + + bool customize = flags & Qt::CustomizeWindowHint; + if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { + mwmhints.decorations |= MWM_DECOR_BORDER; + mwmhints.decorations |= MWM_DECOR_RESIZEH; + + if (flags & Qt::WindowTitleHint) + mwmhints.decorations |= MWM_DECOR_TITLE; + + if (flags & Qt::WindowSystemMenuHint) + mwmhints.decorations |= MWM_DECOR_MENU; + + if (flags & Qt::WindowMinimizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MINIMIZE; + mwmhints.functions |= MWM_FUNC_MINIMIZE; + } + + if (flags & Qt::WindowMaximizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MAXIMIZE; + mwmhints.functions |= MWM_FUNC_MAXIMIZE; + } + + if (flags & Qt::WindowCloseButtonHint) + mwmhints.functions |= MWM_FUNC_CLOSE; + } + } else { + // if type == Qt::SplashScreen + mwmhints.decorations = MWM_DECOR_ALL; + } + + if (tool) { + wsa.save_under = True; + wsa_mask |= CWSaveUnder; + } + + if (flags & Qt::X11BypassWindowManagerHint) { + wsa.override_redirect = True; + wsa_mask |= CWOverrideRedirect; + } +#if 0 + if (wsa_mask && initializeWindow) { + Q_ASSERT(id); + XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); + } +#endif + if (mwmhints.functions != 0) { + mwmhints.flags |= MWM_HINTS_FUNCTIONS; + mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + } else { + mwmhints.functions = MWM_FUNC_ALL; + } + + if (!(flags & Qt::FramelessWindowHint) + && flags & Qt::CustomizeWindowHint + && flags & Qt::WindowTitleHint + && !(flags & + (Qt::WindowMinimizeButtonHint + | Qt::WindowMaximizeButtonHint + | Qt::WindowCloseButtonHint))) { + // a special case - only the titlebar without any button + mwmhints.flags = MWM_HINTS_FUNCTIONS; + mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + mwmhints.decorations = 0; + } + + SetMWMHints(xd->display, window, mwmhints); + +//##### only if initializeWindow??? + + if (popup || tooltip) { // popup widget +#ifdef MYX11_DEBUG + qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; +#endif + // set EWMH window types + // setNetWmWindowTypes(); + + wsa.override_redirect = True; + wsa.save_under = True; + XChangeWindowAttributes(xd->display, window, CWOverrideRedirect | CWSaveUnder, + &wsa); + } else { +#ifdef MYX11_DEBUG + qDebug() << "Doing XChangeWindowAttributes for non-popup"; +#endif + } + + return flags; +} + +void MyWindow::setVisible(bool visible) +{ +#ifdef MYX11_DEBUG + qDebug() << "MyWindow::setVisible" << visible << hex << window; +#endif + if (visible) + XMapWindow(xd->display, window); + else + XUnmapWindow(xd->display, window); +} + +MyX11Cursors::MyX11Cursors(Display * d) : firstExpired(0), lastExpired(0), display(d), removalDelay(3) +{ + connect(&timer, SIGNAL(timeout()), this, SLOT(timeout())); +} + +void MyX11Cursors::insertNode(MyX11CursorNode * node) +{ + QDateTime now = QDateTime::currentDateTime(); + QDateTime timeout = now.addSecs(removalDelay); + node->setExpiration(timeout); + node->setPost(0); + if (lastExpired) { + lastExpired->setPost(node); + node->setAnte(lastExpired); + } + lastExpired = node; + if (!firstExpired) { + firstExpired = node; + node->setAnte(0); + int interval = removalDelay * 1000; + timer.setInterval(interval); + timer.start(); + } +} + +void MyX11Cursors::removeNode(MyX11CursorNode * node) +{ + MyX11CursorNode *pre = node->ante(); + MyX11CursorNode *post = node->post(); + if (pre) + pre->setPost(post); + if (post) + post->setAnte(pre); + if (node == lastExpired) + lastExpired = pre; + if (node == firstExpired) { + firstExpired = post; + if (!firstExpired) { + timer.stop(); + return; + } + int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; + timer.stop(); + timer.setInterval(interval); + timer.start(); + } +} + +void MyX11Cursors::incrementUseCount(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + if (!node->refCount) + removeNode(node); + node->refCount++; +} + +void MyX11Cursors::decrementUseCount(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + node->refCount--; + if (!node->refCount) + insertNode(node); +} + +void MyX11Cursors::createNode(int id, Cursor c) +{ + MyX11CursorNode * node = new MyX11CursorNode(id, c); + lookupMap.insert(id, node); +} + +void MyX11Cursors::timeout() +{ + MyX11CursorNode * node; + node = firstExpired; + QDateTime now = QDateTime::currentDateTime(); + while (node && now.secsTo(node->expiration()) < 1) { + Cursor c = node->cursor(); + int id = node->id(); + lookupMap.take(id); + MyX11CursorNode * tmp = node; + node = node->post(); + delete tmp; + XFreeCursor(display, c); + } + firstExpired = node; + if (node == 0) { + timer.stop(); + lastExpired = 0; + } + else { + int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; + timer.setInterval(interval); + timer.start(); + } +} + +Cursor MyX11Cursors::cursor(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + return node->cursor(); +} + +void MyWindow::setCursor(QCursor * cursor) +{ + int id = cursor->handle(); + if (id == currentCursor) + return; + Cursor c; + if (!xd->cursors->exists(id)) { + if (cursor->shape() == Qt::BitmapCursor) + c = createCursorBitmap(cursor); + else + c = createCursorShape(cursor->shape()); + if (!c) { + return; + } + xd->cursors->createNode(id, c); + } else { + xd->cursors->incrementUseCount(id); + c = xd->cursors->cursor(id); + } + + if (currentCursor != -1) + xd->cursors->decrementUseCount(currentCursor); + currentCursor = id; + + XDefineCursor(xd->display, window, c); + XFlush(xd->display); +} + +Cursor MyWindow::createCursorBitmap(QCursor * cursor) +{ + XColor bg, fg; + bg.red = 255 << 8; + bg.green = 255 << 8; + bg.blue = 255 << 8; + fg.red = 0; + fg.green = 0; + fg.blue = 0; + QPoint spot = cursor->hotSpot(); + Window rootwin = window; + + QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); + QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); + + int width = cursor->bitmap()->width(); + int height = cursor->bitmap()->height(); + int bytesPerLine = mapImage.bytesPerLine(); + int destLineSize = width / 8; + if (width % 8) + destLineSize++; + + const uchar * map = mapImage.bits(); + const uchar * mask = maskImage.bits(); + + char * mapBits = new char[height * destLineSize]; + char * maskBits = new char[height * destLineSize]; + for (int i = 0; i < height; i++) { + memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); + memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); + } + + Pixmap cp = XCreateBitmapFromData(xd->display, rootwin, mapBits, width, height); + Pixmap mp = XCreateBitmapFromData(xd->display, rootwin, maskBits, width, height); + Cursor c = XCreatePixmapCursor(xd->display, cp, mp, &fg, &bg, spot.x(), spot.y()); + XFreePixmap(xd->display, cp); + XFreePixmap(xd->display, mp); + delete[] mapBits; + delete[] maskBits; + + return c; +} + +Cursor MyWindow::createCursorShape(int cshape) +{ + Cursor cursor = 0; + + if (cshape < 0 || cshape > Qt::LastCursor) + return 0; + + switch (cshape) { + case Qt::ArrowCursor: + cursor = XCreateFontCursor(xd->display, XC_left_ptr); + break; + case Qt::UpArrowCursor: + cursor = XCreateFontCursor(xd->display, XC_center_ptr); + break; + case Qt::CrossCursor: + cursor = XCreateFontCursor(xd->display, XC_crosshair); + break; + case Qt::WaitCursor: + cursor = XCreateFontCursor(xd->display, XC_watch); + break; + case Qt::IBeamCursor: + cursor = XCreateFontCursor(xd->display, XC_xterm); + break; + case Qt::SizeAllCursor: + cursor = XCreateFontCursor(xd->display, XC_fleur); + break; + case Qt::PointingHandCursor: + cursor = XCreateFontCursor(xd->display, XC_hand2); + break; + case Qt::SizeBDiagCursor: + cursor = XCreateFontCursor(xd->display, XC_top_right_corner); + break; + case Qt::SizeFDiagCursor: + cursor = XCreateFontCursor(xd->display, XC_bottom_right_corner); + break; + case Qt::SizeVerCursor: + case Qt::SplitVCursor: + cursor = XCreateFontCursor(xd->display, XC_sb_v_double_arrow); + break; + case Qt::SizeHorCursor: + case Qt::SplitHCursor: + cursor = XCreateFontCursor(xd->display, XC_sb_h_double_arrow); + break; + case Qt::WhatsThisCursor: + cursor = XCreateFontCursor(xd->display, XC_question_arrow); + break; + case Qt::ForbiddenCursor: + cursor = XCreateFontCursor(xd->display, XC_circle); + break; + case Qt::BusyCursor: + cursor = XCreateFontCursor(xd->display, XC_watch); + break; + + default: //default cursor for all the rest + break; + } + return cursor; +} + + +#if 0 + + + switch (cshape) { // map Q cursor to X cursor + case Qt::BlankCursor: + XColor bg, fg; + bg.red = 255 << 8; + bg.green = 255 << 8; + bg.blue = 255 << 8; + fg.red = 0; + fg.green = 0; + fg.blue = 0; + pm = XCreateBitmapFromData(dpy, rootwin, cur_blank_bits, 16, 16); + pmm = XCreateBitmapFromData(dpy, rootwin, cur_blank_bits, 16, 16); + hcurs = XCreatePixmapCursor(dpy, pm, pmm, &fg, &bg, 8, 8); + return; + break; + default: + qWarning("QCursor::update: Invalid cursor shape %d", cshape); + return; + } +#endif diff --git a/src/plugins/platforms/testlite/x11util.h b/src/plugins/platforms/testlite/x11util.h new file mode 100644 index 0000000..79e7461 --- /dev/null +++ b/src/plugins/platforms/testlite/x11util.h @@ -0,0 +1,204 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef MYX11UTIL_H +#define MYX11UTIL_H + +#include +#include +#include +#include + +#include + +#include +#include + + +class MyWindow; +class MyX11Cursors; + +class MyDisplay : public QObject +{ + Q_OBJECT; +public: + MyDisplay(); + ~MyDisplay(); + + Window rootWindow() { return RootWindow(display, screen); } + unsigned long blackPixel() { return BlackPixel(display, screen); } + unsigned long whitePixel() { return WhitePixel(display, screen); } + + bool handleEvent(XEvent *xe); + QImage grabWindow(Window window, int x, int y, int w, int h); + +public slots: + void eventDispatcher(); + +public: //### + Display * display; + int screen; + int width, height; + int physicalWidth; + int physicalHeight; + + QList windowList; + + MyX11Cursors * cursors; +}; + +class QTestLiteWindowSurface; //### abstract callback interface, anyone? + +struct MyShmImageInfo; + +class MyWindow : public QObject +{ + Q_OBJECT; +public: + MyWindow(MyDisplay *xd, int x, int y, int w, int h); + ~MyWindow(); + + + void mousePressEvent(XButtonEvent*); + void mouseReleaseEvent(XButtonEvent*); + void mouseMoveEvent(XButtonEvent*); + + void keyPressEvent(XKeyEvent*); + void keyReleaseEvent(XKeyEvent*); + + void enterEvent(XCrossingEvent*); + void leaveEvent(XCrossingEvent*); + + void closeEvent(); + void paintEvent(); + void resizeEvent(XConfigureEvent *configure_event); +// void setSize(int w, int h); + void setGeometry(int x, int y, int w, int h); + + GC createGC(); + + Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); + void setVisible(bool visible); + void setCursor(QCursor * cursor); + Cursor createCursorShape(int cshape); + Cursor createCursorBitmap(QCursor * cursor); + + void setWindowTitle(const QString &title); + + QImage *image() { return &shm_img; } + +public: //### + + int xpos, ypos; + int width, height; + Window window; + MyDisplay *xd; + GC gc; + + QTestLiteWindowSurface *windowSurface; + + int currentCursor; + bool painted; + void resizeBuffer(QSize); + QSize bufferSize() const; + +private: + void resizeShmImage(int width, int height); + + QImage shm_img; + MyShmImageInfo *image_info; +}; + +class MyX11CursorNode +{ +public: + MyX11CursorNode(int id, Cursor c) { idValue = id; cursorValue = c; refCount = 1; } + QDateTime expiration() { return t; } + void setExpiration(QDateTime val) { t = val; } + MyX11CursorNode * ante() { return before; } + void setAnte(MyX11CursorNode *node) { before = node; } + MyX11CursorNode * post() { return after; } + void setPost(MyX11CursorNode *node) { after = node; } + Cursor cursor() { return cursorValue; } + int id() { return idValue; } + unsigned int refCount; + +private: + MyX11CursorNode *before; + MyX11CursorNode *after; + QDateTime t; + Cursor cursorValue; + int idValue; + + Display * display; +}; + +class MyX11Cursors : public QObject +{ + Q_OBJECT +public: + MyX11Cursors(Display * d); + ~MyX11Cursors() { timer.stop(); } + void incrementUseCount(int id); + void decrementUseCount(int id); + void createNode(int id, Cursor c); + bool exists(int id) { return lookupMap.contains(id); } + Cursor cursor(int id); +public slots: + void timeout(); + +private: + void removeNode(MyX11CursorNode *node); + void insertNode(MyX11CursorNode *node); + + // linked list of cursors currently not assigned to any window + MyX11CursorNode *firstExpired; + MyX11CursorNode *lastExpired; + + QHash lookupMap; + QTimer timer; + + Display *display; + + int removalDelay; +}; + +#endif // MYX11UTIL_H diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp new file mode 100644 index 0000000..f10748a --- /dev/null +++ b/src/plugins/platforms/vnc/main.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qgraphicssystem_vnc.h" +#include + +QT_BEGIN_NAMESPACE + +class QVNCGraphicsSystemPlugin : public QGraphicsSystemPlugin +{ +public: + QStringList keys() const; + QGraphicsSystem *create(const QString&); +}; + +QStringList QVNCGraphicsSystemPlugin::keys() const +{ + QStringList list; + list << "VNC"; + return list; +} + +QGraphicsSystem* QVNCGraphicsSystemPlugin::create(const QString& system) +{ + if (system.toLower() == "vnc") + return new QVNCGraphicsSystem; + + return 0; +} + +Q_EXPORT_PLUGIN2(vnc, QVNCGraphicsSystemPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp new file mode 100644 index 0000000..7815f24 --- /dev/null +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgraphicssystem_vnc.h" +#include "../fb_base/fb_base.h" +#include +#include +#include + +#include +#include + +#include + + +QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() + : QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() +{ + int w = 800; + int h = 600; + int ew, eh; + const char *str; + if ((str=::getenv("QT_VNC_SIZE")) && sscanf(str,"%dx%d",&ew,&eh)==2) { + w = ew; + h = eh; + } + + setGeometry(QRect(0,0,w, h)); + setDepth(32); + setFormat(QImage::Format_RGB32); + setPhysicalSize((geometry().size()*254)/720); + + + d_ptr = new QVNCGraphicsSystemScreenPrivate(this); + + cursor = new QVNCCursor(d_ptr->vncServer, this); + d_ptr->vncServer->setCursor(static_cast(cursor)); +} + +QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() +{ + return d_ptr->dirty; +} + +QRegion QVNCGraphicsSystemScreen::doRedraw() +{ + QRegion touched; + touched = QGraphicsSystemFbScreen::doRedraw(); + + QVector rects = touched.rects(); + for (int i = 0; i < rects.size(); i++) + d_ptr->setDirty(rects[i]); + return touched; +} + + +QVNCGraphicsSystem::QVNCGraphicsSystem() +{ + mPrimaryScreen = new QVNCGraphicsSystemScreen(); + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QVNCGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + QGraphicsSystemFbWindowSurface * surface; + surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); + mPrimaryScreen->addWindowSurface(surface); + return surface; +} diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h new file mode 100644 index 0000000..b3349b7 --- /dev/null +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_VNC_H +#define QGRAPHICSSYSTEM_VNC_H + +#include +#include "qvnccursor.h" +#include "../fb_base/fb_base.h" + +QT_BEGIN_NAMESPACE + +class QVNCServer; +class QVNCDirtyMap; + +class QVNCGraphicsSystemScreenPrivate; + +class QVNCGraphicsSystemScreen : public QGraphicsSystemFbScreen +{ +public: + QVNCGraphicsSystemScreen(); + + int linestep() const { return image() ? image()->bytesPerLine() : 0; } + uchar *base() const { return image() ? image()->bits() : 0; } + QVNCDirtyMap *dirtyMap(); + +public: + QVNCGraphicsSystemScreenPrivate *d_ptr; + +private: + QVNCServer *server; + QRegion doRedraw(); +}; + +class QVNCGraphicsSystemPrivate; + + +class QVNCGraphicsSystem : public QGraphicsSystem +{ +public: + QVNCGraphicsSystem(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QList screens() const { return mScreens; } + + +private: + QVNCGraphicsSystemScreen *mPrimaryScreen; + QList mScreens; +}; + + + +QT_END_NAMESPACE + +#endif //QGRAPHICSSYSTEM_VNC_H + diff --git a/src/plugins/platforms/vnc/qvnccursor.cpp b/src/plugins/platforms/vnc/qvnccursor.cpp new file mode 100644 index 0000000..fb214d8 --- /dev/null +++ b/src/plugins/platforms/vnc/qvnccursor.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include + +#include + +#include "qvnccursor.h" +#include "qvncserver.h" +#include "qgraphicssystem_vnc.h" + +QT_BEGIN_NAMESPACE + +QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) + :QGraphicsSystemSoftwareCursor(scr), useVncCursor(false), server(srvr) +{ +} + +void QVNCCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) +{ + QGraphicsSystemSoftwareCursor::changeCursor(widgetCursor, widget); + if (useVncCursor) { + server->setDirtyCursor(); + } else { + screen->setDirty(QRect(0,0,1,1)); + } +} + +void QVNCCursor::setCursorMode(bool vnc) +{ + if (vnc) { + screen->setDirty(dirtyRect()); + server->setDirtyCursor(); + } else { + server->setDirtyCursor(); + } + useVncCursor = vnc; +} + +QRect QVNCCursor::drawCursor(QPainter & painter) +{ + if (useVncCursor) + return QRect(); + + return QGraphicsSystemSoftwareCursor::drawCursor(painter); +} + +void QVNCCursor::clearClientCursor() +{ + QTcpSocket *socket = server->clientSocket(); + if (!socket) { + return; + } + // FramebufferUpdate header + { + const quint16 tmp[6] = { htons(0), + htons(1), + htons(0), htons(0), + htons(0), + htons(0) }; + socket->write((char*)tmp, sizeof(tmp)); + + const quint32 encoding = htonl(-239); + socket->write((char*)(&encoding), sizeof(encoding)); + } +} + +void QVNCCursor::sendClientCursor() +{ + if (useVncCursor == false) { + clearClientCursor(); + return; + } + QImage *image = graphic->image(); + if (image->isNull()) + return; + QTcpSocket *socket = server->clientSocket(); + if (!socket) { + return; + } + // FramebufferUpdate header + { + const quint16 tmp[6] = { htons(0), + htons(1), + htons(graphic->hotspot().x()), htons(graphic->hotspot().y()), + htons(image->width()), + htons(image->height()) }; + socket->write((char*)tmp, sizeof(tmp)); + + const quint32 encoding = htonl(-239); + socket->write((char*)(&encoding), sizeof(encoding)); + } + + // write pixels + //Q_ASSERT(cursor->hasAlphaChannel()); + const QImage img = image->convertToFormat(QImage::Format_RGB32); + const int n = server->clientBytesPerPixel() * img.width(); + char *buffer = new char[n]; + for (int i = 0; i < img.height(); ++i) { + server->convertPixels(buffer, (const char*)img.scanLine(i), img.width()); + socket->write(buffer, n); + } + delete[] buffer; + + // write mask + const QImage bitmap = image->createAlphaMask().convertToFormat(QImage::Format_Mono); + Q_ASSERT(bitmap.depth() == 1); + Q_ASSERT(bitmap.size() == img.size()); + const int width = (bitmap.width() + 7) / 8; + for (int i = 0; i < bitmap.height(); ++i) + socket->write((const char*)bitmap.scanLine(i), width); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/vnc/qvnccursor.h b/src/plugins/platforms/vnc/qvnccursor.h new file mode 100644 index 0000000..8ea0f45 --- /dev/null +++ b/src/plugins/platforms/vnc/qvnccursor.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QVNCCURSOR_H +#define QVNCCURSOR_H + +#include "../fb_base/fb_base.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QVNCGraphicsSystemScreen; +class QVNCServer; + +class QVNCCursor : public QGraphicsSystemSoftwareCursor { +public: + QVNCCursor(QVNCServer *, QVNCGraphicsSystemScreen *); + + // input methods + void setCursorMode(bool vnc); + void changeCursor(QCursor * widgetCursor, QWidget * widget); + + // output methods + QRect drawCursor(QPainter &); + + // VNC client communication + void sendClientCursor(); + void clearClientCursor(); +private: + bool useVncCursor; // VNC or local + + QVNCServer * server; // VNC server to get events from +}; + +QT_END_NAMESPACE + +#endif // QVNCCURSOR_H diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp new file mode 100644 index 0000000..ea576d4 --- /dev/null +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -0,0 +1,1935 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qvncserver.h" + +#include +#include +#include +#include +#include + +#include +#include + +#include + +#include + +#include + + +#define QT_QWS_VNC_DEBUG +#define QT_NO_QWS_CURSOR //### + + +QT_BEGIN_NAMESPACE + + + +//copied from qscreen_qws.h +#ifndef QT_QWS_DEPTH16_RGB +#define QT_QWS_DEPTH16_RGB 565 +#endif +static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100); +static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10); +static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10); +static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits); +static const int qt_green_shift = qt_bbits-(8-qt_gbits); +static const int qt_neg_blue_shift = 8-qt_bbits; +static const int qt_blue_mask = (1<> qt_red_shift | r >> qt_red_rounding_shift; + const int tg = g >> qt_green_shift | g >> qt_green_rounding_shift; + const int tb = b << qt_neg_blue_shift | b >> qt_blue_rounding_shift; + + return qRgb(tr,tg,tb); +} + + + +//=========================================================================== + +static const struct { + int keysym; + int keycode; +} keyMap[] = { + { 0xff08, Qt::Key_Backspace }, + { 0xff09, Qt::Key_Tab }, + { 0xff0d, Qt::Key_Return }, + { 0xff1b, Qt::Key_Escape }, + { 0xff63, Qt::Key_Insert }, + { 0xffff, Qt::Key_Delete }, + { 0xff50, Qt::Key_Home }, + { 0xff57, Qt::Key_End }, + { 0xff55, Qt::Key_PageUp }, + { 0xff56, Qt::Key_PageDown }, + { 0xff51, Qt::Key_Left }, + { 0xff52, Qt::Key_Up }, + { 0xff53, Qt::Key_Right }, + { 0xff54, Qt::Key_Down }, + { 0xffbe, Qt::Key_F1 }, + { 0xffbf, Qt::Key_F2 }, + { 0xffc0, Qt::Key_F3 }, + { 0xffc1, Qt::Key_F4 }, + { 0xffc2, Qt::Key_F5 }, + { 0xffc3, Qt::Key_F6 }, + { 0xffc4, Qt::Key_F7 }, + { 0xffc5, Qt::Key_F8 }, + { 0xffc6, Qt::Key_F9 }, + { 0xffc7, Qt::Key_F10 }, + { 0xffc8, Qt::Key_F11 }, + { 0xffc9, Qt::Key_F12 }, + { 0xffe1, Qt::Key_Shift }, + { 0xffe2, Qt::Key_Shift }, + { 0xffe3, Qt::Key_Control }, + { 0xffe4, Qt::Key_Control }, + { 0xffe7, Qt::Key_Meta }, + { 0xffe8, Qt::Key_Meta }, + { 0xffe9, Qt::Key_Alt }, + { 0xffea, Qt::Key_Alt }, + { 0, 0 } +}; + +void QRfbRect::read(QTcpSocket *s) +{ + quint16 buf[4]; + s->read((char*)buf, 8); + x = ntohs(buf[0]); + y = ntohs(buf[1]); + w = ntohs(buf[2]); + h = ntohs(buf[3]); +} + +void QRfbRect::write(QTcpSocket *s) const +{ + quint16 buf[4]; + buf[0] = htons(x); + buf[1] = htons(y); + buf[2] = htons(w); + buf[3] = htons(h); + s->write((char*)buf, 8); +} + +void QRfbPixelFormat::read(QTcpSocket *s) +{ + char buf[16]; + s->read(buf, 16); + bitsPerPixel = buf[0]; + depth = buf[1]; + bigEndian = buf[2]; + trueColor = buf[3]; + + quint16 a = ntohs(*(quint16 *)(buf + 4)); + redBits = 0; + while (a) { a >>= 1; redBits++; } + + a = ntohs(*(quint16 *)(buf + 6)); + greenBits = 0; + while (a) { a >>= 1; greenBits++; } + + a = ntohs(*(quint16 *)(buf + 8)); + blueBits = 0; + while (a) { a >>= 1; blueBits++; } + + redShift = buf[10]; + greenShift = buf[11]; + blueShift = buf[12]; +} + +void QRfbPixelFormat::write(QTcpSocket *s) +{ + char buf[16]; + buf[0] = bitsPerPixel; + buf[1] = depth; + buf[2] = bigEndian; + buf[3] = trueColor; + + quint16 a = 0; + for (int i = 0; i < redBits; i++) a = (a << 1) | 1; + *(quint16 *)(buf + 4) = htons(a); + + a = 0; + for (int i = 0; i < greenBits; i++) a = (a << 1) | 1; + *(quint16 *)(buf + 6) = htons(a); + + a = 0; + for (int i = 0; i < blueBits; i++) a = (a << 1) | 1; + *(quint16 *)(buf + 8) = htons(a); + + buf[10] = redShift; + buf[11] = greenShift; + buf[12] = blueShift; + s->write(buf, 16); +} + + +void QRfbServerInit::setName(const char *n) +{ + delete[] name; + name = new char [strlen(n) + 1]; + strcpy(name, n); +} + +void QRfbServerInit::read(QTcpSocket *s) +{ + s->read((char *)&width, 2); + width = ntohs(width); + s->read((char *)&height, 2); + height = ntohs(height); + format.read(s); + + quint32 len; + s->read((char *)&len, 4); + len = ntohl(len); + + name = new char [len + 1]; + s->read(name, len); + name[len] = '\0'; +} + +void QRfbServerInit::write(QTcpSocket *s) +{ + quint16 t = htons(width); + s->write((char *)&t, 2); + t = htons(height); + s->write((char *)&t, 2); + format.write(s); + quint32 len = strlen(name); + len = htonl(len); + s->write((char *)&len, 4); + s->write(name, strlen(name)); +} + +bool QRfbSetEncodings::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 3) + return false; + + char tmp; + s->read(&tmp, 1); // padding + s->read((char *)&count, 2); + count = ntohs(count); + + return true; +} + +bool QRfbFrameBufferUpdateRequest::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 9) + return false; + + s->read(&incremental, 1); + rect.read(s); + + return true; +} + +bool QRfbKeyEvent::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 7) + return false; + + s->read(&down, 1); + quint16 tmp; + s->read((char *)&tmp, 2); // padding + + quint32 key; + s->read((char *)&key, 4); + key = ntohl(key); + + unicode = 0; + keycode = 0; + int i = 0; + while (keyMap[i].keysym && !keycode) { + if (keyMap[i].keysym == (int)key) + keycode = keyMap[i].keycode; + i++; + } + if (!keycode) { + if (key <= 0xff) { + unicode = key; + if (key >= 'a' && key <= 'z') + keycode = Qt::Key_A + key - 'a'; + else if (key >= ' ' && key <= '~') + keycode = Qt::Key_Space + key - ' '; + } + } + + return true; +} + +bool QRfbPointerEvent::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 5) + return false; + + char buttonMask; + s->read(&buttonMask, 1); + + buttons = Qt::NoButton; + wheelDirection = WheelNone; + if (buttonMask & 1) + buttons |= Qt::LeftButton; + if (buttonMask & 2) + buttons |= Qt::MidButton; + if (buttonMask & 4) + buttons |= Qt::RightButton; + if (buttonMask & 8) + wheelDirection = WheelUp; + if (buttonMask & 16) + wheelDirection = WheelDown; + if (buttonMask & 32) + wheelDirection = WheelLeft; + if (buttonMask & 64) + wheelDirection = WheelRight; + + quint16 tmp; + s->read((char *)&tmp, 2); + x = ntohs(tmp); + s->read((char *)&tmp, 2); + y = ntohs(tmp); + + return true; +} + +bool QRfbClientCutText::read(QTcpSocket *s) +{ + if (s->bytesAvailable() < 7) + return false; + + char tmp[3]; + s->read(tmp, 3); // padding + s->read((char *)&length, 4); + length = ntohl(length); + + return true; +} + +//=========================================================================== + +QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen) + : qvnc_screen(screen), cursor(0) +{ + init(5900); +} + +QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen, int id) + : qvnc_screen(screen), cursor(0) +{ + init(5900 + id); +} + +void QVNCServer::init(uint port) +{ + qDebug() << "QVNCServer::init" << port; + + handleMsg = false; + client = 0; + encodingsPending = 0; + cutTextPending = 0; + keymod = 0; + state = Unconnected; + dirtyCursor = false; + + refreshRate = 25; + timer = new QTimer(this); + timer->setSingleShot(true); + connect(timer, SIGNAL(timeout()), this, SLOT(checkUpdate())); + + serverSocket = new QTcpServer(this); + if (!serverSocket->listen(QHostAddress::Any, port)) + qDebug() << "QVNCServer could not connect:" << serverSocket->errorString(); + else + qDebug("QVNCServer created on port %d", port); + + connect(serverSocket, SIGNAL(newConnection()), this, SLOT(newConnection())); + +#ifndef QT_NO_QWS_CURSOR + qvnc_cursor = 0; +#endif + encoder = 0; +} + +QVNCServer::~QVNCServer() +{ + delete encoder; + encoder = 0; + delete client; + client = 0; +#ifndef QT_NO_QWS_CURSOR + delete qvnc_cursor; + qvnc_cursor = 0; +#endif +} + +void QVNCServer::setDirty() +{ + if (state == Connected && !timer->isActive() && + ((dirtyMap()->numDirty > 0) || dirtyCursor)) { + timer->start(); + } +} + +void QVNCServer::newConnection() +{ + if (client) + delete client; + + client = serverSocket->nextPendingConnection(); + connect(client,SIGNAL(readyRead()),this,SLOT(readClient())); + connect(client,SIGNAL(disconnected()),this,SLOT(discardClient())); + handleMsg = false; + encodingsPending = 0; + cutTextPending = 0; + supportHextile = false; + wantUpdate = false; + + timer->start(1000 / refreshRate); + dirtyMap()->reset(); + + // send protocol version + const char *proto = "RFB 003.003\n"; + client->write(proto, 12); + state = Protocol; + +// if (!qvnc_screen->screen()) +// QWSServer::instance()->enablePainting(true); +} + +void QVNCServer::readClient() +{ + switch (state) { + case Protocol: + if (client->bytesAvailable() >= 12) { + char proto[13]; + client->read(proto, 12); + proto[12] = '\0'; + qDebug("Client protocol version %s", proto); + // No authentication + quint32 auth = htonl(1); + client->write((char *) &auth, sizeof(auth)); + state = Init; + } + break; + + case Init: + if (client->bytesAvailable() >= 1) { + quint8 shared; + client->read((char *) &shared, 1); + + // Server Init msg + QRfbServerInit sim; + QRfbPixelFormat &format = sim.format; + switch (qvnc_screen->depth()) { + case 32: + format.bitsPerPixel = 32; + format.depth = 32; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 8; + format.greenBits = 8; + format.blueBits = 8; + format.redShift = 16; + format.greenShift = 8; + format.blueShift = 0; + break; + + case 24: + format.bitsPerPixel = 24; + format.depth = 24; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 8; + format.greenBits = 8; + format.blueBits = 8; + format.redShift = 16; + format.greenShift = 8; + format.blueShift = 0; + break; + + case 18: + format.bitsPerPixel = 24; + format.depth = 18; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 6; + format.greenBits = 6; + format.blueBits = 6; + format.redShift = 12; + format.greenShift = 6; + format.blueShift = 0; + break; + + case 16: + format.bitsPerPixel = 16; + format.depth = 16; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 5; + format.greenBits = 6; + format.blueBits = 5; + format.redShift = 11; + format.greenShift = 5; + format.blueShift = 0; + break; + + case 15: + format.bitsPerPixel = 16; + format.depth = 15; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 5; + format.greenBits = 5; + format.blueBits = 5; + format.redShift = 10; + format.greenShift = 5; + format.blueShift = 0; + break; + + case 12: + format.bitsPerPixel = 16; + format.depth = 12; + format.bigEndian = 0; + format.trueColor = true; + format.redBits = 4; + format.greenBits = 4; + format.blueBits = 4; + format.redShift = 8; + format.greenShift = 4; + format.blueShift = 0; + break; + + case 8: + case 4: + format.bitsPerPixel = 8; + format.depth = 8; + format.bigEndian = 0; + format.trueColor = false; + format.redBits = 0; + format.greenBits = 0; + format.blueBits = 0; + format.redShift = 0; + format.greenShift = 0; + format.blueShift = 0; + break; + + default: + qDebug("QVNC cannot drive depth %d", qvnc_screen->depth()); + discardClient(); + return; + } + sim.width = qvnc_screen->geometry().width(); + sim.height = qvnc_screen->geometry().height(); + sim.setName("Qt for Embedded Linux VNC Server"); + sim.write(client); + state = Connected; + } + break; + + case Connected: + do { + if (!handleMsg) { + client->read((char *)&msgType, 1); + handleMsg = true; + } + if (handleMsg) { + switch (msgType ) { + case SetPixelFormat: + setPixelFormat(); + break; + case FixColourMapEntries: + qDebug("Not supported: FixColourMapEntries"); + handleMsg = false; + break; + case SetEncodings: + setEncodings(); + break; + case FramebufferUpdateRequest: + frameBufferUpdateRequest(); + break; + case KeyEvent: + keyEvent(); + break; + case PointerEvent: + pointerEvent(); + break; + case ClientCutText: + clientCutText(); + break; + default: + qDebug("Unknown message type: %d", (int)msgType); + handleMsg = false; + } + } + } while (!handleMsg && client->bytesAvailable()); + break; + default: + break; + } +} + +#if 0//Q_BYTE_ORDER == Q_BIG_ENDIAN +bool QVNCGraphicsSystemScreen::swapBytes() const +{ + if (depth() != 16) + return false; + + if (screen()) + return screen()->frameBufferLittleEndian(); + return frameBufferLittleEndian(); +} +#endif + +void QVNCServer::setPixelFormat() +{ + if (client->bytesAvailable() >= 19) { + char buf[3]; + client->read(buf, 3); // just padding + pixelFormat.read(client); +#ifdef QT_QWS_VNC_DEBUG + qDebug("Want format: %d %d %d %d %d %d %d %d %d %d", + int(pixelFormat.bitsPerPixel), + int(pixelFormat.depth), + int(pixelFormat.bigEndian), + int(pixelFormat.trueColor), + int(pixelFormat.redBits), + int(pixelFormat.greenBits), + int(pixelFormat.blueBits), + int(pixelFormat.redShift), + int(pixelFormat.greenShift), + int(pixelFormat.blueShift)); +#endif + if (!pixelFormat.trueColor) { + qDebug("Can only handle true color clients"); + discardClient(); + } + handleMsg = false; + sameEndian = (QSysInfo::ByteOrder == QSysInfo::BigEndian) == !!pixelFormat.bigEndian; + needConversion = pixelConversionNeeded(); +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + swapBytes = qvnc_screen->swapBytes(); +#endif + } +} + +void QVNCServer::setEncodings() +{ + QRfbSetEncodings enc; + + if (!encodingsPending && enc.read(client)) { + encodingsPending = enc.count; + if (!encodingsPending) + handleMsg = false; + } + + if (encoder) { + delete encoder; + encoder = 0; + } + + enum Encodings { + Raw = 0, + CopyRect = 1, + RRE = 2, + CoRRE = 4, + Hextile = 5, + ZRLE = 16, + Cursor = -239, + DesktopSize = -223 + }; + + supportCursor = false; + + if (encodingsPending && (unsigned)client->bytesAvailable() >= + encodingsPending * sizeof(quint32)) { + for (int i = 0; i < encodingsPending; ++i) { + qint32 enc; + client->read((char *)&enc, sizeof(qint32)); + enc = ntohl(enc); +#ifdef QT_QWS_VNC_DEBUG + qDebug("QVNCServer::setEncodings: %d", enc); +#endif + switch (enc) { + case Raw: + if (!encoder) { + encoder = new QRfbRawEncoder(this); +#ifdef QT_QWS_VNC_DEBUG + qDebug("QVNCServer::setEncodings: using raw"); +#endif + } + break; + case CopyRect: + supportCopyRect = true; + break; + case RRE: + supportRRE = true; + break; + case CoRRE: + supportCoRRE = true; + break; + case Hextile: + supportHextile = true; + if (encoder) + break; + switch (qvnc_screen->depth()) { +#ifdef QT_QWS_DEPTH_8 + case 8: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_12 + case 12: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_15 + case 15: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_16 + case 16: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_18 + case 18: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_24 + case 24: + encoder = new QRfbHextileEncoder(this); + break; +#endif +#ifdef QT_QWS_DEPTH_32 + case 32: + encoder = new QRfbHextileEncoder(this); + break; +#endif + default: + break; + } +#ifdef QT_QWS_VNC_DEBUG + qDebug("QVNCServer::setEncodings: using hextile"); +#endif + break; + case ZRLE: + supportZRLE = true; + break; + case Cursor: + supportCursor = true; +#ifndef QT_NO_QWS_CURSOR + if (!qvnc_screen->screen() || qt_screencursor->isAccelerated()) { + delete qvnc_cursor; + qvnc_cursor = new QVNCClientCursor(this); + } +#endif + break; + case DesktopSize: + supportDesktopSize = true; + break; + default: + break; + } + } + handleMsg = false; + encodingsPending = 0; + } + + if (!encoder) { + encoder = new QRfbRawEncoder(this); +#ifdef QT_QWS_VNC_DEBUG + qDebug("QVNCServer::setEncodings: fallback using raw"); +#endif + } + + if (cursor) + cursor->setCursorMode(supportCursor); +} + +void QVNCServer::frameBufferUpdateRequest() +{ + QRfbFrameBufferUpdateRequest ev; + + if (ev.read(client)) { + if (!ev.incremental) { + QRect r(ev.rect.x, ev.rect.y, ev.rect.w, ev.rect.h); +////### r.translate(qvnc_screen->offset()); + qvnc_screen->d_ptr->setDirty(r, true); + } + wantUpdate = true; + checkUpdate(); + handleMsg = false; + } +} + +static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::MouseButton *button, bool *isPress) +{ + if (before == after) + return false; + for (int b = Qt::LeftButton; b <= Qt::MidButton; b<<=1) { + if ((before & b) != (after & b)) { + *button = static_cast(b); + *isPress = (after & b); + return true; + } + } + return false; +} + +void QVNCServer::pointerEvent() +{ + QRfbPointerEvent ev; + if (ev.read(client)) { +// const QPoint offset = qvnc_screen->offset(); +// QWSServer::sendMouseEvent(offset + QPoint(ev.x, ev.y), ev.buttons); + + + //qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons; + if (ev.wheelDirection == ev.WheelNone) { + QEvent::Type type = QEvent::MouseMove; + Qt::MouseButton button = Qt::NoButton; + bool isPress; + if (buttonChange(buttons, ev.buttons, &button, &isPress)) + type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; + QWindowSystemInterface::handleMouseEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), ev.buttons); + } else { + // No buttons or motion reported at the same time as wheel events + Qt::Orientation orientation; + if (ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelRight) + orientation = Qt::Horizontal; + else + orientation = Qt::Vertical; + int delta = 120 * ((ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelUp) ? 1 : -1); + QWindowSystemInterface::handleWheelEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, orientation); + } + handleMsg = false; + } +} + +void QVNCServer::keyEvent() +{ + QRfbKeyEvent ev; + + if (ev.read(client)) { + if (ev.keycode == Qt::Key_Shift) + keymod = ev.down ? keymod | Qt::ShiftModifier : + keymod & ~Qt::ShiftModifier; + else if (ev.keycode == Qt::Key_Control) + keymod = ev.down ? keymod | Qt::ControlModifier : + keymod & ~Qt::ControlModifier; + else if (ev.keycode == Qt::Key_Alt) + keymod = ev.down ? keymod | Qt::AltModifier : + keymod & ~Qt::AltModifier; + if (ev.unicode || ev.keycode) { +// qDebug() << "keyEvent" << hex << ev.unicode << ev.keycode << keymod << ev.down; + QEvent::Type type = ev.down ? QEvent::KeyPress : QEvent::KeyRelease; + QString str; + if (ev.unicode && ev.unicode != 0xffff) + str = QString(ev.unicode); + QWindowSystemInterface::handleKeyEvent(0, type, ev.keycode, keymod, str); + } + handleMsg = false; + } +} + +void QVNCServer::clientCutText() +{ + QRfbClientCutText ev; + + if (ev.read(client)) { + cutTextPending = ev.length; + if (!cutTextPending) + handleMsg = false; + } + + if (cutTextPending && client->bytesAvailable() >= cutTextPending) { + char *text = new char [cutTextPending+1]; + client->read(text, cutTextPending); + delete [] text; + cutTextPending = 0; + handleMsg = false; + } +} + +// stride in bytes +template +bool QRfbSingleColorHextile::read(const uchar *data, + int width, int height, int stride) +{ + const int depth = encoder->server->screen()->depth(); + if (width % (depth / 8)) // hw: should rather fallback to simple loop + return false; + + static int alwaysFalse = qgetenv("QT_VNC_NOCHECKFILL").toInt(); + if (alwaysFalse) + return false; + + switch (depth) { + case 4: { + const quint8 *data8 = reinterpret_cast(data); + if ((data8[0] & 0xf) != (data8[0] >> 4)) + return false; + width /= 2; + } // fallthrough + case 8: { + const quint8 *data8 = reinterpret_cast(data); + if (data8[0] != data8[1]) + return false; + width /= 2; + } // fallthrough + case 12: + case 15: + case 16: { + const quint16 *data16 = reinterpret_cast(data); + if (data16[0] != data16[1]) + return false; + width /= 2; + } // fallthrough + case 18: + case 24: + case 32: { + const quint32 *data32 = reinterpret_cast(data); + const quint32 first = data32[0]; + const int linestep = (stride / sizeof(quint32)) - width; + for (int y = 0; y < height; ++y) { + for (int x = 0; x < width; ++x) { + if (*(data32++) != first) + return false; + } + data32 += linestep; + } + break; + } + default: + return false; + } + + SRC color = reinterpret_cast(data)[0]; + encoder->newBg |= (color != encoder->bg); + encoder->bg = color; + return true; +} + +template +void QRfbSingleColorHextile::write(QTcpSocket *socket) const +{ + if (true || encoder->newBg) { + const int bpp = encoder->server->clientBytesPerPixel(); + const int padding = 3; + QVarLengthArray buffer(padding + 1 + bpp); + buffer[padding] = 2; // BackgroundSpecified + encoder->server->convertPixels(buffer.data() + padding + 1, + reinterpret_cast(&encoder->bg), + 1); + socket->write(buffer.data() + padding, bpp + 1); +// encoder->newBg = false; + } else { + char subenc = 0; + socket->write(&subenc, 1); + } +} + +template +bool QRfbDualColorHextile::read(const uchar *data, + int width, int height, int stride) +{ + const SRC *ptr = reinterpret_cast(data); + const int linestep = (stride / sizeof(SRC)) - width; + + SRC c1; + SRC c2 = 0; + int n1 = 0; + int n2 = 0; + int x = 0; + int y = 0; + + c1 = *ptr; + + // find second color + while (y < height) { + while (x < width) { + if (*ptr == c1) { + ++n1; + } else { + c2 = *ptr; + goto found_second_color; + } + ++ptr; + ++x; + } + x = 0; + ptr += linestep; + ++y; + } + +found_second_color: + // finish counting + while (y < height) { + while (x < width) { + if (*ptr == c1) { + ++n1; + } else if (*ptr == c2) { + ++n2; + } else { + return false; + } + ++ptr; + ++x; + } + x = 0; + ptr += linestep; + ++y; + } + + if (n2 > n1) { + const quint32 tmpC = c1; + c1 = c2; + c2 = tmpC; + } + + encoder->newBg |= (c1 != encoder->bg); + encoder->newFg |= (c2 != encoder->fg); + + encoder->bg = c1; + encoder->fg = c2; + + // create map + bool inRect = false; + numRects = 0; + ptr = reinterpret_cast(data); + for (y = 0; y < height; ++y) { + for (x = 0; x < width; ++x) { + if (inRect && *ptr == encoder->bg) { + // rect finished + setWidth(x - lastx()); + next(); + inRect = false; + } else if (!inRect && *ptr == encoder->fg) { + // rect start + setX(x); + setY(y); + setHeight(1); + inRect = true; + } + ++ptr; + } + if (inRect) { + // finish rect + setWidth(width - lastx()); + next(); + inRect = false; + } + ptr += linestep; + } + + return true; +} + +template +void QRfbDualColorHextile::write(QTcpSocket *socket) const +{ + const int bpp = encoder->server->clientBytesPerPixel(); + const int padding = 3; + QVarLengthArray buffer(padding + 2 * bpp + sizeof(char) + sizeof(numRects)); + char &subenc = buffer[padding]; + int n = padding + sizeof(subenc); + + subenc = 0x8; // AnySubrects + + if (encoder->newBg) { + subenc |= 0x2; // Background + encoder->server->convertPixels(buffer.data() + n, (char*)&encoder->bg, 1); + n += bpp; +// encoder->newBg = false; + } + + if (encoder->newFg) { + subenc |= 0x4; // Foreground + encoder->server->convertPixels(buffer.data() + n, (char*)&encoder->fg, 1); + n += bpp; +// encoder->newFg = false; + } + buffer[n] = numRects; + n += sizeof(numRects); + + socket->write(buffer.data() + padding, n - padding); + socket->write((char*)rects, numRects * sizeof(Rect)); +} + +template +void QRfbDualColorHextile::next() +{ + for (int r = numRects - 1; r >= 0; --r) { + if (recty(r) == lasty()) + continue; + if (recty(r) < lasty() - 1) // only search previous scanline + break; + if (rectx(r) == lastx() && width(r) == width(numRects)) { + ++rects[r].wh; + return; + } + } + ++numRects; +} + +template +inline void QRfbMultiColorHextile::setColor(SRC color) +{ + encoder->server->convertPixels(reinterpret_cast(rect(numRects)), + (const char*)&color, 1); +} + +template +inline bool QRfbMultiColorHextile::beginRect() +{ + if ((rects.size() + bpp + 2) > maxRectsSize) + return false; + rects.resize(rects.size() + bpp + 2); + return true; +} + +template +inline void QRfbMultiColorHextile::endRect() +{ + setHeight(numRects, 1); + ++numRects; +} + +template +bool QRfbMultiColorHextile::read(const uchar *data, + int width, int height, int stride) +{ + const SRC *ptr = reinterpret_cast(data); + const int linestep = (stride / sizeof(SRC)) - width; + + bpp = encoder->server->clientBytesPerPixel(); + + if (encoder->newBg) + encoder->bg = ptr[0]; + + const SRC bg = encoder->bg; + SRC color = bg; + bool inRect = false; + + numRects = 0; + rects.clear(); + + for (int y = 0; y < height; ++y) { + for (int x = 0; x < width; ++x) { + if (inRect && *ptr != color) { // end rect + setWidth(numRects, x - rectx(numRects)); + endRect(); + inRect = false; + } + + if (!inRect && *ptr != bg) { // begin rect + if (!beginRect()) + return false; + inRect = true; + color = *ptr; + setColor(color); + setX(numRects, x); + setY(numRects, y); + } + ++ptr; + } + if (inRect) { // end rect + setWidth(numRects, width - rectx(numRects)); + endRect(); + inRect = false; + } + ptr += linestep; + } + + return true; +} + +template +void QRfbMultiColorHextile::write(QTcpSocket *socket) const +{ + const int padding = 3; + QVarLengthArray buffer(bpp + padding + sizeof(quint8) + sizeof(numRects)); + + quint8 &subenc = buffer[padding]; + int n = padding + sizeof(quint8); + + subenc = 8 | 16; // AnySubrects | SubrectsColoured + + if (encoder->newBg) { + subenc |= 0x2; // Background + encoder->server->convertPixels(reinterpret_cast(buffer.data() + n), + reinterpret_cast(&encoder->bg), + 1); + n += bpp; +// encoder->newBg = false; + } + + buffer[n] = numRects; + n += sizeof(numRects); + + socket->write(reinterpret_cast(buffer.data() + padding), + n - padding); + socket->write(reinterpret_cast(rects.constData()), + rects.size()); +} + +bool QVNCServer::pixelConversionNeeded() const +{ + if (!sameEndian) + return true; + +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + if (qvnc_screen->swapBytes()) + return true; +#endif + + const int screendepth = qvnc_screen->depth(); + if (screendepth != pixelFormat.bitsPerPixel) + return true; + + switch (screendepth) { + case 32: + case 24: + return false; + case 18: + return (pixelFormat.redBits == 6 + && pixelFormat.greenBits == 6 + && pixelFormat.blueBits == 6); + case 16: + return (pixelFormat.redBits == 5 + && pixelFormat.greenBits == 6 + && pixelFormat.blueBits == 5); + case 15: + return (pixelFormat.redBits == 5 + && pixelFormat.greenBits == 5 + && pixelFormat.blueBits == 5); + case 12: + return (pixelFormat.redBits == 4 + && pixelFormat.greenBits == 4 + && pixelFormat.blueBits == 4); + } + return true; +} + +// count: number of pixels +void QVNCServer::convertPixels(char *dst, const char *src, int count) const +{ + const int screendepth = qvnc_screen->depth(); + const bool isBgr = false; //### qvnc_screen->pixelType() == QScreen::BGRPixel; + + // cutoffs +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + if (!swapBytes) +#endif + if (sameEndian) { + if (screendepth == pixelFormat.bitsPerPixel) { // memcpy cutoffs + + switch (screendepth) { + case 32: + memcpy(dst, src, count * sizeof(quint32)); + return; + case 16: + if (pixelFormat.redBits == 5 + && pixelFormat.greenBits == 6 + && pixelFormat.blueBits == 5) + { + memcpy(dst, src, count * sizeof(quint16)); + return; + } + } + } else if (screendepth == 16 && pixelFormat.bitsPerPixel == 32) { +#if defined(__i386__) // Currently fails on ARM if dst is not 4 byte aligned + const quint32 *src32 = reinterpret_cast(src); + quint32 *dst32 = reinterpret_cast(dst); + int count32 = count * sizeof(quint16) / sizeof(quint32); + while (count32--) { + const quint32 s = *src32++; + quint32 result1; + quint32 result2; + + // red + result1 = ((s & 0xf8000000) | ((s & 0xe0000000) >> 5)) >> 8; + result2 = ((s & 0x0000f800) | ((s & 0x0000e000) >> 5)) << 8; + + // green + result1 |= ((s & 0x07e00000) | ((s & 0x06000000) >> 6)) >> 11; + result2 |= ((s & 0x000007e0) | ((s & 0x00000600) >> 6)) << 5; + + // blue + result1 |= ((s & 0x001f0000) | ((s & 0x001c0000) >> 5)) >> 13; + result2 |= ((s & 0x0000001f) | ((s & 0x0000001c) >> 5)) << 3; + + *dst32++ = result2; + *dst32++ = result1; + } + if (count & 0x1) { + const quint16 *src16 = reinterpret_cast(src); + dst32[count - 1] = qt_conv16ToRgb(src16[count - 1]); + } + return; +#endif + } + } + + const int bytesPerPixel = (pixelFormat.bitsPerPixel + 7) / 8; + +// nibble = 0; + + for (int i = 0; i < count; ++i) { + int r, g, b; + + switch (screendepth) { +#if 0 + case 4: { + if (!nibble) { + r = ((*src) & 0x0f) << 4; + } else { + r = (*src) & 0xf0; + src++; + } + nibble = !nibble; + g = b = r; + break; + } +#endif +#if 0 + case 8: { + QRgb rgb = qvnc_screen->clut()[int(*src)]; + r = qRed(rgb); + g = qGreen(rgb); + b = qBlue(rgb); + src++; + break; + } +#endif +#ifdef QT_QWS_DEPTH_12 + case 12: { + quint32 p = quint32(*reinterpret_cast(src)); + r = qRed(p); + g = qGreen(p); + b = qBlue(p); + src += sizeof(qrgb444); + break; + } +#endif +#ifdef QT_QWS_DEPTH_15 + case 15: { + quint32 p = quint32(*reinterpret_cast(src)); + r = qRed(p); + g = qGreen(p); + b = qBlue(p); + src += sizeof(qrgb555); + break; + } +#endif + case 16: { + quint16 p = *reinterpret_cast(src); +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + if (swapBytes) + p = ((p & 0xff) << 8) | ((p & 0xff00) >> 8); +#endif + r = (p >> 11) & 0x1f; + g = (p >> 5) & 0x3f; + b = p & 0x1f; + r <<= 3; + g <<= 2; + b <<= 3; + src += sizeof(quint16); + break; + } +#ifdef QT_QWS_DEPTH_18 + case 18: { + quint32 p = quint32(*reinterpret_cast(src)); + r = qRed(p); + g = qGreen(p); + b = qBlue(p); + src += sizeof(qrgb666); + break; + } +#endif +#ifdef QT_QWS_DEPTH_24 + case 24: { + quint32 p = quint32(*reinterpret_cast(src)); + r = qRed(p); + g = qGreen(p); + b = qBlue(p); + src += sizeof(qrgb888); + break; + } +#endif + case 32: { + quint32 p = *reinterpret_cast(src); + r = (p >> 16) & 0xff; + g = (p >> 8) & 0xff; + b = p & 0xff; + src += sizeof(quint32); + break; + } + default: { + r = g = b = 0; + qDebug("QVNCServer: don't support %dbpp display", screendepth); + return; + } + } + +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + if (swapBytes ^ isBgr) +#else + if (isBgr) +#endif + qSwap(r, b); + + r >>= (8 - pixelFormat.redBits); + g >>= (8 - pixelFormat.greenBits); + b >>= (8 - pixelFormat.blueBits); + + int pixel = (r << pixelFormat.redShift) | + (g << pixelFormat.greenShift) | + (b << pixelFormat.blueShift); + + if (sameEndian || pixelFormat.bitsPerPixel == 8) { + memcpy(dst, &pixel, bytesPerPixel); // XXX: do a simple for-loop instead? + dst += bytesPerPixel; + continue; + } + + + if (QSysInfo::ByteOrder == QSysInfo::BigEndian) { + switch (pixelFormat.bitsPerPixel) { + case 16: + pixel = (((pixel & 0x0000ff00) << 8) | + ((pixel & 0x000000ff) << 24)); + break; + case 32: + pixel = (((pixel & 0xff000000) >> 24) | + ((pixel & 0x00ff0000) >> 8) | + ((pixel & 0x0000ff00) << 8) | + ((pixel & 0x000000ff) << 24)); + break; + default: + qDebug("Cannot handle %d bpp client", pixelFormat.bitsPerPixel); + } + } else { // QSysInfo::ByteOrder == QSysInfo::LittleEndian + switch (pixelFormat.bitsPerPixel) { + case 16: + pixel = (((pixel & 0xff000000) >> 8) | + ((pixel & 0x00ff0000) << 8)); + break; + case 32: + pixel = (((pixel & 0xff000000) >> 24) | + ((pixel & 0x00ff0000) >> 8) | + ((pixel & 0x0000ff00) << 8) | + ((pixel & 0x000000ff) << 24)); + break; + default: + qDebug("Cannot handle %d bpp client", + pixelFormat.bitsPerPixel); + break; + } + } + memcpy(dst, &pixel, bytesPerPixel); // XXX: simple for-loop instead? + dst += bytesPerPixel; + } +} + +#ifndef QT_NO_QWS_CURSOR +static void blendCursor(QImage &image, const QRect &imageRect) +{ + const QRect cursorRect = qt_screencursor->boundingRect(); + const QRect intersection = (cursorRect & imageRect); + const QRect destRect = intersection.translated(-imageRect.topLeft()); + const QRect srcRect = intersection.translated(-cursorRect.topLeft()); + + QPainter painter(&image); + painter.drawImage(destRect, qt_screencursor->image(), srcRect); + painter.end(); +} +#endif // QT_NO_QWS_CURSOR + +QVNCDirtyMap::QVNCDirtyMap(QVNCGraphicsSystemScreen *s) + : bytesPerPixel(0), numDirty(0), screen(s) +{ + bytesPerPixel = (screen->depth() + 7) / 8; + QSize screenSize = screen->geometry().size(); + bufferWidth = screenSize.width(); + bufferHeight = screenSize.height(); + bufferStride = bufferWidth * bytesPerPixel; + buffer = new uchar[bufferHeight * bufferStride]; + + mapWidth = (bufferWidth + MAP_TILE_SIZE - 1) / MAP_TILE_SIZE; + mapHeight = (bufferHeight + MAP_TILE_SIZE - 1) / MAP_TILE_SIZE; + numTiles = mapWidth * mapHeight; + map = new uchar[numTiles]; +} + +QVNCDirtyMap::~QVNCDirtyMap() +{ + delete[] map; + delete[] buffer; +} + +void QVNCDirtyMap::reset() +{ + memset(map, 1, numTiles); + memset(buffer, 0, bufferHeight * bufferStride); + numDirty = numTiles; +} + +inline bool QVNCDirtyMap::dirty(int x, int y) const +{ + return map[y * mapWidth + x]; +} + +inline void QVNCDirtyMap::setClean(int x, int y) +{ + map[y * mapWidth + x] = 0; + --numDirty; +} + +template +void QVNCDirtyMapOptimized::setDirty(int tileX, int tileY, bool force) +{ + static bool alwaysForce = qgetenv("QT_VNC_NO_COMPAREBUFFER").toInt(); + if (alwaysForce) + force = true; + + bool changed = false; + + if (!force) { + const int lstep = screen->linestep(); + const int startX = tileX * MAP_TILE_SIZE; + const int startY = tileY * MAP_TILE_SIZE; + const uchar *scrn = screen->base() + + startY * lstep + startX * bytesPerPixel; + uchar *old = buffer + startY * bufferStride + startX * sizeof(T); + + const int tileHeight = (startY + MAP_TILE_SIZE > bufferHeight ? + bufferHeight - startY : MAP_TILE_SIZE); + const int tileWidth = (startX + MAP_TILE_SIZE > bufferWidth ? + bufferWidth - startX : MAP_TILE_SIZE); + const bool doInlines = (tileWidth == MAP_TILE_SIZE); + + int y = tileHeight; + + if (doInlines) { // hw: memcmp/memcpy is inlined when using constants + while (y) { + if (memcmp(old, scrn, sizeof(T) * MAP_TILE_SIZE)) { + changed = true; + break; + } + scrn += lstep; + old += bufferStride; + --y; + } + + while (y) { + memcpy(old, scrn, sizeof(T) * MAP_TILE_SIZE); + scrn += lstep; + old += bufferStride; + --y; + } + } else { + while (y) { + if (memcmp(old, scrn, sizeof(T) * tileWidth)) { + changed = true; + break; + } + scrn += lstep; + old += bufferStride; + --y; + } + + while (y) { + memcpy(old, scrn, sizeof(T) * tileWidth); + scrn += lstep; + old += bufferStride; + --y; + } + } + } + + const int mapIndex = tileY * mapWidth + tileX; + if ((force || changed) && !map[mapIndex]) { + map[mapIndex] = 1; + ++numDirty; + } +} + +template +QRfbHextileEncoder::QRfbHextileEncoder(QVNCServer *s) + : QRfbEncoder(s), + singleColorHextile(this), dualColorHextile(this), multiColorHextile(this) +{ +} + +/* + \internal + Send dirty rects using hextile encoding. +*/ +template +void QRfbHextileEncoder::write() +{ +// QWSDisplay::grab(true); + + QVNCDirtyMap *map = server->dirtyMap(); + QTcpSocket *socket = server->clientSocket(); + + const quint32 encoding = htonl(5); // hextile encoding + const int bytesPerPixel = server->clientBytesPerPixel(); + + { + const char tmp[2] = { 0, 0 }; // msg type, padding + socket->write(tmp, sizeof(tmp)); + } + { + const quint16 count = htons(map->numDirty); + socket->write((char *)&count, sizeof(count)); + } + + if (map->numDirty <= 0) { +// QWSDisplay::ungrab(); + return; + } + + newBg = true; + newFg = true; + + const QImage screenImage = server->screenImage(); + QRfbRect rect(0, 0, MAP_TILE_SIZE, MAP_TILE_SIZE); + + QSize screenSize = server->screen()->geometry().size(); + + for (int y = 0; y < map->mapHeight; ++y) { + if (rect.y + MAP_TILE_SIZE > screenSize.height()) + rect.h = screenSize.height() - rect.y; + rect.w = MAP_TILE_SIZE; + for (int x = 0; x < map->mapWidth; ++x) { + if (!map->dirty(x, y)) + continue; + map->setClean(x, y); + + rect.x = x * MAP_TILE_SIZE; + if (rect.x + MAP_TILE_SIZE > screenSize.width()) //###deviceWidth ??? + rect.w = screenSize.width() - rect.x; + rect.write(socket); + + socket->write((char *)&encoding, sizeof(encoding)); + + const uchar *screendata = screenImage.scanLine(rect.y) + + rect.x * screenImage.depth() / 8; + int linestep = screenImage.bytesPerLine(); + +#ifndef QT_NO_QWS_CURSOR + // hardware cursors must be blended with the screen memory + const bool doBlendCursor = qt_screencursor + && !server->hasClientCursor() + && qt_screencursor->isAccelerated(); + QImage tileImage; + if (doBlendCursor) { + const QRect tileRect(rect.x, rect.y, rect.w, rect.h); + const QRect cursorRect = qt_screencursor->boundingRect() + .translated(-server->screen()->offset()); + if (tileRect.intersects(cursorRect)) { + tileImage = screenImage.copy(tileRect); + blendCursor(tileImage, + tileRect.translated(server->screen()->offset())); + screendata = tileImage.bits(); + linestep = tileImage.bytesPerLine(); + } + } +#endif // QT_NO_QWS_CURSOR + + if (singleColorHextile.read(screendata, rect.w, rect.h, linestep)) { + singleColorHextile.write(socket); + } else if (dualColorHextile.read(screendata, rect.w, rect.h, linestep)) { + dualColorHextile.write(socket); + } else if (multiColorHextile.read(screendata, rect.w, rect.h, linestep)) { + multiColorHextile.write(socket); + } else if (server->doPixelConversion()) { + const int bufferSize = rect.w * rect.h * bytesPerPixel + 1; + const int padding = sizeof(quint32) - sizeof(char); + buffer.resize(bufferSize + padding); + + buffer[padding] = 1; // Raw subencoding + + // convert pixels + char *b = buffer.data() + padding + 1; + const int bstep = rect.w * bytesPerPixel; + for (int i = 0; i < rect.h; ++i) { + server->convertPixels(b, (const char*)screendata, rect.w); + screendata += linestep; + b += bstep; + } + socket->write(buffer.constData() + padding, bufferSize); + } else { + quint8 subenc = 1; // Raw subencoding + socket->write((char *)&subenc, 1); + + // send pixels + for (int i = 0; i < rect.h; ++i) { + socket->write((const char*)screendata, + rect.w * bytesPerPixel); + screendata += linestep; + } + } + } + if (socket->state() == QAbstractSocket::UnconnectedState) + break; + rect.y += MAP_TILE_SIZE; + } + socket->flush(); + Q_ASSERT(map->numDirty == 0); + +// QWSDisplay::ungrab(); +} + +void QRfbRawEncoder::write() +{ +// QWSDisplay::grab(false); + + QVNCDirtyMap *map = server->dirtyMap(); + QTcpSocket *socket = server->clientSocket(); + + const int bytesPerPixel = server->clientBytesPerPixel(); + QSize screenSize = server->screen()->geometry().size(); + + // create a region from the dirty rects and send the region's merged rects. + QRegion rgn; + if (map) { + for (int y = 0; y < map->mapHeight; ++y) { + for (int x = 0; x < map->mapWidth; ++x) { + if (!map->dirty(x, y)) + continue; + rgn += QRect(x * MAP_TILE_SIZE, y * MAP_TILE_SIZE, + MAP_TILE_SIZE, MAP_TILE_SIZE); + map->setClean(x, y); + } + } + + rgn &= QRect(0, 0, screenSize.width(), + screenSize.height()); + } + const QVector rects = rgn.rects(); + + { + const char tmp[2] = { 0, 0 }; // msg type, padding + socket->write(tmp, sizeof(tmp)); + } + + { + const quint16 count = htons(rects.size()); + socket->write((char *)&count, sizeof(count)); + } + + if (rects.size() <= 0) { +// QWSDisplay::ungrab(); + return; + } + + const QImage *screenImage = server->screenImage(); + + for (int i = 0; i < rects.size(); ++i) { + const QRect tileRect = rects.at(i); + const QRfbRect rect(tileRect.x(), tileRect.y(), + tileRect.width(), tileRect.height()); + rect.write(socket); + + const quint32 encoding = htonl(0); // raw encoding + socket->write((char *)&encoding, sizeof(encoding)); + + int linestep = screenImage->bytesPerLine(); + const uchar *screendata = screenImage->scanLine(rect.y) + + rect.x * screenImage->depth() / 8; + +#ifndef QT_NO_QWS_CURSOR + // hardware cursors must be blended with the screen memory + const bool doBlendCursor = qt_screencursor + && !server->hasClientCursor() + && qt_screencursor->isAccelerated(); + QImage tileImage; + if (doBlendCursor) { + const QRect cursorRect = qt_screencursor->boundingRect() + .translated(-server->screen()->offset()); + if (tileRect.intersects(cursorRect)) { + tileImage = screenImage->copy(tileRect); + blendCursor(tileImage, + tileRect.translated(server->screen()->offset())); + screendata = tileImage.bits(); + linestep = tileImage.bytesPerLine(); + } + } +#endif // QT_NO_QWS_CURSOR + + if (server->doPixelConversion()) { + const int bufferSize = rect.w * rect.h * bytesPerPixel; + if (bufferSize > buffer.size()) + buffer.resize(bufferSize); + + // convert pixels + char *b = buffer.data(); + const int bstep = rect.w * bytesPerPixel; + for (int i = 0; i < rect.h; ++i) { + server->convertPixels(b, (const char*)screendata, rect.w); + screendata += linestep; + b += bstep; + } + socket->write(buffer.constData(), bufferSize); + } else { + for (int i = 0; i < rect.h; ++i) { + socket->write((const char*)screendata, rect.w * bytesPerPixel); + screendata += linestep; + } + } + if (socket->state() == QAbstractSocket::UnconnectedState) + break; + } + socket->flush(); + +// QWSDisplay::ungrab(); +} + +inline QImage *QVNCServer::screenImage() const +{ + return qvnc_screen->image(); +} + +void QVNCServer::checkUpdate() +{ + if (!wantUpdate) + return; + + if (dirtyCursor) { +#ifndef QT_NO_QWS_CURSOR + Q_ASSERT(qvnc_cursor); + qvnc_cursor->write(); +#endif + cursor->sendClientCursor(); + dirtyCursor = false; + wantUpdate = false; + return; + } + + if (dirtyMap()->numDirty > 0) { + if (encoder) + encoder->write(); + wantUpdate = false; + } +} + +void QVNCServer::discardClient() +{ + timer->stop(); + state = Unconnected; + delete encoder; + encoder = 0; +#ifndef QT_NO_QWS_CURSOR + delete qvnc_cursor; + qvnc_cursor = 0; +#endif +// if (!qvnc_screen->screen()) +// QWSServer::instance()->enablePainting(false); +} + + + +QVNCGraphicsSystemScreenPrivate::QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent) + : dpiX(72), dpiY(72), doOnScreenSurface(false), refreshRate(25), + vncServer(0), q_ptr(parent) +{ +#if 0//ndef QT_NO_QWS_SIGNALHANDLER + QWSSignalHandler::instance()->addObject(this); +#endif + + vncServer = new QVNCServer(q_ptr); + vncServer->setRefreshRate(refreshRate); + + + Q_ASSERT(q_ptr->depth() == 32); + + dirty = new QVNCDirtyMapOptimized(q_ptr); +} + +QVNCGraphicsSystemScreenPrivate::~QVNCGraphicsSystemScreenPrivate() +{ +} + + +void QVNCGraphicsSystemScreenPrivate::setDirty(const QRect& rect, bool force) +{ + if (rect.isEmpty()) + return; + +// if (q_ptr->screen()) +// q_ptr->screen()->setDirty(rect); + + if (!vncServer || !vncServer->isConnected()) { +// qDebug() << "QVNCGraphicsSystemScreenPrivate::setDirty() - Not connected"; + return; + } + const QRect r = rect; // .translated(-q_ptr->offset()); + const int x1 = r.x() / MAP_TILE_SIZE; + int y = r.y() / MAP_TILE_SIZE; + for (; (y <= r.bottom() / MAP_TILE_SIZE) && y < dirty->mapHeight; y++) + for (int x = x1; (x <= r.right() / MAP_TILE_SIZE) && x < dirty->mapWidth; x++) + dirty->setDirty(x, y, force); + + vncServer->setDirty(); +} + + + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h new file mode 100644 index 0000000..4fcdbae --- /dev/null +++ b/src/plugins/platforms/vnc/qvncserver.h @@ -0,0 +1,534 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QSCREENVNC_P_H +#define QSCREENVNC_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the QLibrary class. This header file may change from version to version +// without notice, or even be removed. +// +// We mean it. +// + +#include "qgraphicssystem_vnc.h" +#include "qvnccursor.h" +#define QT_NO_QWS_CURSOR + +#ifndef QT_NO_QWS_VNC + +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QVNCServer; + +#ifndef QT_NO_QWS_CURSOR +class QVNCCursor : public QProxyScreenCursor +{ +public: + QVNCCursor(QVNCGraphicsSystemScreen *s); + ~QVNCCursor(); + + void hide(); + void show(); + void set(const QImage &image, int hotx, int hoty); + void move(int x, int y); + +private: + void setDirty(const QRect &r) const; + QVNCGraphicsSystemScreen *screen; +}; + +class QVNCClientCursor : public QProxyScreenCursor +{ +public: + QVNCClientCursor(QVNCServer *s); + ~QVNCClientCursor(); + + void set(const QImage &image, int hotx, int hoty); + void write() const; + +private: + QVNCServer *server; +}; +#endif // QT_NO_QWS_CURSOR + +#define MAP_TILE_SIZE 16 +#define MAP_WIDTH 1280 / MAP_TILE_SIZE +#define MAP_HEIGHT 1024 / MAP_TILE_SIZE + +class QVNCDirtyMap +{ +public: + QVNCDirtyMap(QVNCGraphicsSystemScreen *screen); + virtual ~QVNCDirtyMap(); + + void reset(); + bool dirty(int x, int y) const; + virtual void setDirty(int x, int y, bool force = false) = 0; + void setClean(int x, int y); + + int bytesPerPixel; + + int numDirty; + int mapWidth; + int mapHeight; + +protected: + uchar *map; + QVNCGraphicsSystemScreen *screen; + uchar *buffer; + int bufferWidth; + int bufferHeight; + int bufferStride; + int numTiles; +}; + +template +class QVNCDirtyMapOptimized : public QVNCDirtyMap +{ +public: + QVNCDirtyMapOptimized(QVNCGraphicsSystemScreen *screen) : QVNCDirtyMap(screen) {} + ~QVNCDirtyMapOptimized() {} + + void setDirty(int x, int y, bool force = false); +}; + +class QRfbRect +{ +public: + QRfbRect() {} + QRfbRect(quint16 _x, quint16 _y, quint16 _w, quint16 _h) { + x = _x; y = _y; w = _w; h = _h; + } + + void read(QTcpSocket *s); + void write(QTcpSocket *s) const; + + quint16 x; + quint16 y; + quint16 w; + quint16 h; +}; + +class QRfbPixelFormat +{ +public: + static int size() { return 16; } + + void read(QTcpSocket *s); + void write(QTcpSocket *s); + + int bitsPerPixel; + int depth; + bool bigEndian; + bool trueColor; + int redBits; + int greenBits; + int blueBits; + int redShift; + int greenShift; + int blueShift; +}; + +class QRfbServerInit +{ +public: + QRfbServerInit() { name = 0; } + ~QRfbServerInit() { delete[] name; } + + int size() const { return QRfbPixelFormat::size() + 8 + strlen(name); } + void setName(const char *n); + + void read(QTcpSocket *s); + void write(QTcpSocket *s); + + quint16 width; + quint16 height; + QRfbPixelFormat format; + char *name; +}; + +class QRfbSetEncodings +{ +public: + bool read(QTcpSocket *s); + + quint16 count; +}; + +class QRfbFrameBufferUpdateRequest +{ +public: + bool read(QTcpSocket *s); + + char incremental; + QRfbRect rect; +}; + +class QRfbKeyEvent +{ +public: + bool read(QTcpSocket *s); + + char down; + int keycode; + int unicode; +}; + +class QRfbPointerEvent +{ +public: + bool read(QTcpSocket *s); + + Qt::MouseButtons buttons; + enum { WheelNone, + WheelUp, + WheelDown, + WheelLeft, + WheelRight + } wheelDirection; + quint16 x; + quint16 y; +}; + +class QRfbClientCutText +{ +public: + bool read(QTcpSocket *s); + + quint32 length; +}; + +class QVNCGraphicsSystemScreenPrivate : public QObject +{ +public: + QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent); + ~QVNCGraphicsSystemScreenPrivate(); + + void setDirty(const QRect &rect, bool force = false); + void configure(); + + qreal dpiX; + qreal dpiY; + bool doOnScreenSurface; + QVNCDirtyMap *dirty; + int refreshRate; + QVNCServer *vncServer; + +#if !defined(QT_NO_QWS_MULTIPROCESS) && !defined(QT_NO_SHAREDMEMORY) + QSharedMemory shm; +#endif + + QVNCGraphicsSystemScreen *q_ptr; +}; + +class QRfbEncoder +{ +public: + QRfbEncoder(QVNCServer *s) : server(s) {} + virtual ~QRfbEncoder() {} + + virtual void write() = 0; + +protected: + QVNCServer *server; +}; + +class QRfbRawEncoder : public QRfbEncoder +{ +public: + QRfbRawEncoder(QVNCServer *s) : QRfbEncoder(s) {} + + void write(); + +private: + QByteArray buffer; +}; + +template class QRfbHextileEncoder; + +template +class QRfbSingleColorHextile +{ +public: + QRfbSingleColorHextile(QRfbHextileEncoder *e) : encoder(e) {} + bool read(const uchar *data, int width, int height, int stride); + void write(QTcpSocket *socket) const; + +private: + QRfbHextileEncoder *encoder; +}; + +template +class QRfbDualColorHextile +{ +public: + QRfbDualColorHextile(QRfbHextileEncoder *e) : encoder(e) {} + bool read(const uchar *data, int width, int height, int stride); + void write(QTcpSocket *socket) const; + +private: + struct Rect { + quint8 xy; + quint8 wh; + } Q_PACKED rects[8 * 16]; + + quint8 numRects; + QRfbHextileEncoder *encoder; + +private: + inline int lastx() const { return rectx(numRects); } + inline int lasty() const { return recty(numRects); } + inline int rectx(int r) const { return rects[r].xy >> 4; } + inline int recty(int r) const { return rects[r].xy & 0x0f; } + inline int width(int r) const { return (rects[r].wh >> 4) + 1; } + inline int height(int r) const { return (rects[r].wh & 0x0f) + 1; } + + inline void setX(int r, int x) { + rects[r].xy = (x << 4) | (rects[r].xy & 0x0f); + } + inline void setY(int r, int y) { + rects[r].xy = (rects[r].xy & 0xf0) | y; + } + inline void setWidth(int r, int width) { + rects[r].wh = ((width - 1) << 4) | (rects[r].wh & 0x0f); + } + inline void setHeight(int r, int height) { + rects[r].wh = (rects[r].wh & 0xf0) | (height - 1); + } + + inline void setWidth(int width) { setWidth(numRects, width); } + inline void setHeight(int height) { setHeight(numRects, height); } + inline void setX(int x) { setX(numRects, x); } + inline void setY(int y) { setY(numRects, y); } + void next(); +}; + +template +class QRfbMultiColorHextile +{ +public: + QRfbMultiColorHextile(QRfbHextileEncoder *e) : encoder(e) {} + bool read(const uchar *data, int width, int height, int stride); + void write(QTcpSocket *socket) const; + +private: + inline quint8* rect(int r) { + return rects.data() + r * (bpp + 2); + } + inline const quint8* rect(int r) const { + return rects.constData() + r * (bpp + 2); + } + inline void setX(int r, int x) { + quint8 *ptr = rect(r) + bpp; + *ptr = (x << 4) | (*ptr & 0x0f); + } + inline void setY(int r, int y) { + quint8 *ptr = rect(r) + bpp; + *ptr = (*ptr & 0xf0) | y; + } + void setColor(SRC color); + inline int rectx(int r) const { + const quint8 *ptr = rect(r) + bpp; + return *ptr >> 4; + } + inline int recty(int r) const { + const quint8 *ptr = rect(r) + bpp; + return *ptr & 0x0f; + } + inline void setWidth(int r, int width) { + quint8 *ptr = rect(r) + bpp + 1; + *ptr = ((width - 1) << 4) | (*ptr & 0x0f); + } + inline void setHeight(int r, int height) { + quint8 *ptr = rect(r) + bpp + 1; + *ptr = (*ptr & 0xf0) | (height - 1); + } + + bool beginRect(); + void endRect(); + + static const int maxRectsSize = 16 * 16; + QVarLengthArray rects; + + quint8 bpp; + quint8 numRects; + QRfbHextileEncoder *encoder; +}; + +template +class QRfbHextileEncoder : public QRfbEncoder +{ +public: + QRfbHextileEncoder(QVNCServer *s); + void write(); + +private: + enum SubEncoding { + Raw = 1, + BackgroundSpecified = 2, + ForegroundSpecified = 4, + AnySubrects = 8, + SubrectsColoured = 16 + }; + + QByteArray buffer; + QRfbSingleColorHextile singleColorHextile; + QRfbDualColorHextile dualColorHextile; + QRfbMultiColorHextile multiColorHextile; + + SRC bg; + SRC fg; + bool newBg; + bool newFg; + + friend class QRfbSingleColorHextile; + friend class QRfbDualColorHextile; + friend class QRfbMultiColorHextile; +}; + +class QVNCServer : public QObject +{ + Q_OBJECT +public: + QVNCServer(QVNCGraphicsSystemScreen *screen); + QVNCServer(QVNCGraphicsSystemScreen *screen, int id); + ~QVNCServer(); + + void setDirty(); + void setDirtyCursor() { dirtyCursor = true; setDirty(); } + inline bool isConnected() const { return state == Connected; } + inline void setRefreshRate(int rate) { refreshRate = rate; } + + enum ClientMsg { SetPixelFormat = 0, + FixColourMapEntries = 1, + SetEncodings = 2, + FramebufferUpdateRequest = 3, + KeyEvent = 4, + PointerEvent = 5, + ClientCutText = 6 }; + + enum ServerMsg { FramebufferUpdate = 0, + SetColourMapEntries = 1 }; + + void convertPixels(char *dst, const char *src, int count) const; + + inline int clientBytesPerPixel() const { + return pixelFormat.bitsPerPixel / 8; + } + + inline QVNCGraphicsSystemScreen* screen() const { return qvnc_screen; } + inline QVNCDirtyMap* dirtyMap() const { return qvnc_screen->dirtyMap(); } + inline QTcpSocket* clientSocket() const { return client; } + QImage *screenImage() const; + inline bool doPixelConversion() const { return needConversion; } +#ifndef QT_NO_QWS_CURSOR + inline bool hasClientCursor() const { return qvnc_cursor != 0; } +#endif + + void setCursor(QVNCCursor * c) { cursor = c; } +private: + void setPixelFormat(); + void setEncodings(); + void frameBufferUpdateRequest(); + void pointerEvent(); + void keyEvent(); + void clientCutText(); + bool pixelConversionNeeded() const; + +private slots: + void newConnection(); + void readClient(); + void checkUpdate(); + void discardClient(); + void sendInputEvents(); + +private: + void init(uint port); + enum ClientState { Unconnected, Protocol, Init, Connected }; + QTimer *timer; + QTcpServer *serverSocket; + QTcpSocket *client; + ClientState state; + quint8 msgType; + bool handleMsg; + QRfbPixelFormat pixelFormat; + Qt::KeyboardModifiers keymod; + Qt::MouseButtons buttons; + int encodingsPending; + int cutTextPending; + uint supportCopyRect : 1; + uint supportRRE : 1; + uint supportCoRRE : 1; + uint supportHextile : 1; + uint supportZRLE : 1; + uint supportCursor : 1; + uint supportDesktopSize : 1; + bool wantUpdate; + bool sameEndian; + bool needConversion; +#if Q_BYTE_ORDER == Q_BIG_ENDIAN + bool swapBytes; +#endif + bool dirtyCursor; + int refreshRate; + QVNCGraphicsSystemScreen *qvnc_screen; +#ifndef QT_NO_QWS_CURSOR + QVNCClientCursor *qvnc_cursor; +#endif + + QRfbEncoder *encoder; + QVNCCursor *cursor; +}; + + +QT_END_NAMESPACE +#endif // QT_NO_QWS_VNC +#endif // QSCREENVNC_P_H diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro new file mode 100644 index 0000000..0b73b5b --- /dev/null +++ b/src/plugins/platforms/vnc/vnc.pro @@ -0,0 +1,19 @@ +TARGET = qvncgraphicssystem +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems + +SOURCES = main.cpp qgraphicssystem_vnc.cpp +HEADERS = qgraphicssystem_vnc.h + +HEADERS += qvncserver.h +SOURCES += qvncserver.cpp + +HEADERS += qvnccursor.h +SOURCES += qvnccursor.cpp + +include(../fb_base/fb_base.pri) + +target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems + +INSTALLS += target -- cgit v0.12 From bf36f88b92fa95704f117124c15ef896f553939c Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 31 Mar 2010 12:16:07 +0200 Subject: Compile fix --- src/gui/kernel/qplatformintegration_lite.cpp | 41 ++++++++++++++++++++++++++ src/gui/kernel/qplatformscreen_lite.cpp | 43 ++++++++++++++++++++++++++++ src/gui/kernel/qplatformscreen_lite.h | 41 ++++++++++++++++++++++++++ src/gui/painting/qblittable_p.h | 1 + 4 files changed, 126 insertions(+) diff --git a/src/gui/kernel/qplatformintegration_lite.cpp b/src/gui/kernel/qplatformintegration_lite.cpp index 0e28fc6..f9adc14 100644 --- a/src/gui/kernel/qplatformintegration_lite.cpp +++ b/src/gui/kernel/qplatformintegration_lite.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qplatformintegration_lite.h" QT_BEGIN_NAMESPACE diff --git a/src/gui/kernel/qplatformscreen_lite.cpp b/src/gui/kernel/qplatformscreen_lite.cpp index f2ea2f8..4492463 100644 --- a/src/gui/kernel/qplatformscreen_lite.cpp +++ b/src/gui/kernel/qplatformscreen_lite.cpp @@ -1,4 +1,47 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qplatformscreen_lite.h" +#include +#include QWidget *QPlatformScreen::topLevelAt(const QPoint & pos) const { diff --git a/src/gui/kernel/qplatformscreen_lite.h b/src/gui/kernel/qplatformscreen_lite.h index ef90dee..da0e26b 100644 --- a/src/gui/kernel/qplatformscreen_lite.h +++ b/src/gui/kernel/qplatformscreen_lite.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QPLATFORMSCREEN_H #define QPLATFORMSCREEN_H diff --git a/src/gui/painting/qblittable_p.h b/src/gui/painting/qblittable_p.h index 98caab7d..645f37e 100644 --- a/src/gui/painting/qblittable_p.h +++ b/src/gui/painting/qblittable_p.h @@ -2,6 +2,7 @@ #define QBLITTABLE_P_H #include +#include #ifndef QT_NO_BLITTABLE QT_BEGIN_NAMESPACE -- cgit v0.12 From 22b7de20fdc0f11d943f235227f59608a88992c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 31 Mar 2010 12:19:59 +0200 Subject: Make directfb plugin work with QPlatformIntegration --- src/plugins/platforms/directfb/directfb.pro | 29 ++ src/plugins/platforms/directfb/main.cpp | 71 +++++ .../platforms/directfb/qblitter_directfb.cpp | 109 +++++++ src/plugins/platforms/directfb/qblitter_directfb.h | 29 ++ .../platforms/directfb/qdirectfbconvenience.cpp | 335 +++++++++++++++++++++ .../platforms/directfb/qdirectfbconvenience.h | 43 +++ src/plugins/platforms/directfb/qdirectfbcursor.cpp | 42 +++ src/plugins/platforms/directfb/qdirectfbcursor.h | 22 ++ src/plugins/platforms/directfb/qdirectfbinput.cpp | 205 +++++++++++++ src/plugins/platforms/directfb/qdirectfbinput.h | 63 ++++ .../directfb/qplatformintegration_directfb.cpp | 118 ++++++++ .../directfb/qplatformintegration_directfb.h | 98 ++++++ .../platforms/directfb/qwindowsurface_directfb.cpp | 231 ++++++++++++++ .../platforms/directfb/qwindowsurface_directfb.h | 88 ++++++ src/plugins/platforms/minimaldfb/main.cpp | 71 ----- src/plugins/platforms/minimaldfb/minimaldfb.pro | 29 -- .../platforms/minimaldfb/qblitter_directfb.cpp | 110 ------- .../platforms/minimaldfb/qblitter_directfb.h | 29 -- .../platforms/minimaldfb/qdirectfbconvenience.cpp | 335 --------------------- .../platforms/minimaldfb/qdirectfbconvenience.h | 43 --- .../platforms/minimaldfb/qdirectfbcursor.cpp | 42 --- src/plugins/platforms/minimaldfb/qdirectfbcursor.h | 22 -- .../platforms/minimaldfb/qdirectfbinput.cpp | 205 ------------- src/plugins/platforms/minimaldfb/qdirectfbinput.h | 63 ---- .../minimaldfb/qgraphicssystem_minimaldfb.cpp | 118 -------- .../minimaldfb/qgraphicssystem_minimaldfb.h | 99 ------ .../minimaldfb/qwindowsurface_minimaldfb.cpp | 231 -------------- .../minimaldfb/qwindowsurface_minimaldfb.h | 88 ------ 28 files changed, 1483 insertions(+), 1485 deletions(-) create mode 100644 src/plugins/platforms/directfb/directfb.pro create mode 100644 src/plugins/platforms/directfb/main.cpp create mode 100644 src/plugins/platforms/directfb/qblitter_directfb.cpp create mode 100644 src/plugins/platforms/directfb/qblitter_directfb.h create mode 100644 src/plugins/platforms/directfb/qdirectfbconvenience.cpp create mode 100644 src/plugins/platforms/directfb/qdirectfbconvenience.h create mode 100644 src/plugins/platforms/directfb/qdirectfbcursor.cpp create mode 100644 src/plugins/platforms/directfb/qdirectfbcursor.h create mode 100644 src/plugins/platforms/directfb/qdirectfbinput.cpp create mode 100644 src/plugins/platforms/directfb/qdirectfbinput.h create mode 100644 src/plugins/platforms/directfb/qplatformintegration_directfb.cpp create mode 100644 src/plugins/platforms/directfb/qplatformintegration_directfb.h create mode 100644 src/plugins/platforms/directfb/qwindowsurface_directfb.cpp create mode 100644 src/plugins/platforms/directfb/qwindowsurface_directfb.h delete mode 100644 src/plugins/platforms/minimaldfb/main.cpp delete mode 100644 src/plugins/platforms/minimaldfb/minimaldfb.pro delete mode 100644 src/plugins/platforms/minimaldfb/qblitter_directfb.cpp delete mode 100644 src/plugins/platforms/minimaldfb/qblitter_directfb.h delete mode 100644 src/plugins/platforms/minimaldfb/qdirectfbconvenience.cpp delete mode 100644 src/plugins/platforms/minimaldfb/qdirectfbconvenience.h delete mode 100644 src/plugins/platforms/minimaldfb/qdirectfbcursor.cpp delete mode 100644 src/plugins/platforms/minimaldfb/qdirectfbcursor.h delete mode 100644 src/plugins/platforms/minimaldfb/qdirectfbinput.cpp delete mode 100644 src/plugins/platforms/minimaldfb/qdirectfbinput.h delete mode 100644 src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.cpp delete mode 100644 src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.h delete mode 100644 src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.cpp delete mode 100644 src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.h diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro new file mode 100644 index 0000000..f8fccaa --- /dev/null +++ b/src/plugins/platforms/directfb/directfb.pro @@ -0,0 +1,29 @@ +TARGET = qdirectfb +include(../../qpluginbase.pri) +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms + +isEmpty(DIRECTFB_LIBS) { + DIRECTFB_LIBS = -ldirectfb -lfusion -ldirect -lpthread +} +isEmpty(DIRECTFB_INCLUDEPATH) { + DIRECTFB_INCLUDEPATH = /usr/include/directfb +} + +INCLUDEPATH += $$DIRECTFB_INCLUDEPATH +LIBS += $$DIRECTFB_LIBS + +SOURCES = main.cpp \ + qplatformintegration_directfb.cpp \ + qwindowsurface_directfb.cpp \ + qblitter_directfb.cpp \ + qdirectfbconvenience.cpp \ + qdirectfbinput.cpp \ + qdirectfbcursor.cpp +HEADERS = qplatformintegration_directfb.h \ + qwindowsurface_directfb.h \ + qblitter_directfb.h \ + qdirectfbconvenience.h \ + qdirectfbinput.h \ + qdirectfbcursor.h +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp new file mode 100644 index 0000000..1f0f081 --- /dev/null +++ b/src/plugins/platforms/directfb/main.cpp @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qplatformintegration_directfb.h" + +QT_BEGIN_NAMESPACE + +class QDirectFbIntegrationPlugin : public QPlatformIntegrationPlugin +{ +public: + QStringList keys() const; + QPlatformIntegration *create(const QString&); +}; + +QStringList QDirectFbIntegrationPlugin::keys() const +{ + QStringList list; + list << "directfb"; + return list; +} + +QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system) +{ + if (system.toLower() == "directfb") + return new QDirectFbIntegration; + + return 0; +} + +Q_EXPORT_PLUGIN2(directfb, QDirectFbIntegrationPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qblitter_directfb.cpp b/src/plugins/platforms/directfb/qblitter_directfb.cpp new file mode 100644 index 0000000..08dee0a --- /dev/null +++ b/src/plugins/platforms/directfb/qblitter_directfb.cpp @@ -0,0 +1,109 @@ +#include "qblitter_directfb.h" +#include "qdirectfbconvenience.h" + +#include + +#include + +#include + +QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface) + : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability + |QBlittable::SourcePixmapCapability + |QBlittable::SourceOverPixmapCapability + |QBlittable::SourceOverScaledPixmapCapability)) +{ + if (surface) { + m_surface = surface; + } else { + DFBSurfaceDescription surfaceDesc; + memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); + surfaceDesc.width = rect.width(); + surfaceDesc.height = rect.height(); + surfaceDesc.caps = DSCAPS_PREMULTIPLIED; + surfaceDesc.pixelformat = DSPF_ARGB; + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); + + IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); + dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); + m_surface->Clear(m_surface,0,0,0,0); + } +} + +QDirectFbBlitter::~QDirectFbBlitter() +{ + unlock(); + m_surface->Release(m_surface); +} + +void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) +{ + m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); +// When the blitter api supports non opaque blits, also remember to change +// qpixmap_blitter.cpp::fill +// DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX; +// m_surface->SetDrawingFlags(m_surface, drawingFlags); + m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); + m_surface->FillRectangle(m_surface, rect.x(), rect.y(), + rect.width(), rect.height()); +} + +void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect) +{ + QPixmapData *data = pixmap.pixmapData(); + Q_ASSERT(data->width() && data->height()); + Q_ASSERT(data->classId() == QPixmapData::BlitterClass); + QBlittablePixmapData *blitPm = static_cast(data); + QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); + dfbBlitter->unlock(); + + IDirectFBSurface *s = dfbBlitter->m_surface; + + quint32 blittingFlags = pixmap.hasAlpha()? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; + + s->SetBlittingFlags(s, DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetPorterDuff(m_surface,DSPD_SRC_OVER); + m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); + + const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; + + DFBResult result; + if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) + result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y()); + else { + const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; + result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect); + } + if (result != DFB_OK) + DirectFBError("QDirectFBBlitter::drawPixmap()", result); +} + +QImage *QDirectFbBlitter::doLock() +{ + Q_ASSERT(m_surface); + Q_ASSERT(size().isValid()); + + void *mem; + int bpl; + const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); + if (result == DFB_OK) { + DFBSurfacePixelFormat dfbFormat; + DFBSurfaceCapabilities dfbCaps; + m_surface->GetPixelFormat(m_surface,&dfbFormat); + m_surface->GetCapabilities(m_surface,&dfbCaps); + QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); + int w, h; + m_surface->GetSize(m_surface,&w,&h); + m_image = QImage(static_cast(mem),w,h,bpl,format); + } else { + DirectFBError("Failed to lock image", result); + } + + return &m_image; +} + +void QDirectFbBlitter::doUnlock() +{ + m_surface->Unlock(m_surface); +} diff --git a/src/plugins/platforms/directfb/qblitter_directfb.h b/src/plugins/platforms/directfb/qblitter_directfb.h new file mode 100644 index 0000000..85a303a --- /dev/null +++ b/src/plugins/platforms/directfb/qblitter_directfb.h @@ -0,0 +1,29 @@ +#ifndef QDIRECTFBBLITTER_H +#define QDIRECTFBBLITTER_H + +#include "qdirectfbconvenience.h" + +#include + +#include + +class QDirectFbBlitter : public QBlittable +{ +public: + QDirectFbBlitter(const QSize &size, IDirectFBSurface *surface = 0); + virtual ~QDirectFbBlitter(); + + virtual void fillRect(const QRectF &rect, const QColor &color); + virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); + +protected: + virtual QImage *doLock(); + virtual void doUnlock(); + + IDirectFBSurface *m_surface; + QImage m_image; + + friend class QDirectFbConvenience; +}; + +#endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp new file mode 100644 index 0000000..8594c09 --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp @@ -0,0 +1,335 @@ +#include "qdirectfbconvenience.h" +#include "qblitter_directfb.h" + +#include + +IDirectFB *QDirectFbConvenience::dfbInterface() +{ + static IDirectFB *dfb = 0; + if (!dfb) { + DFBResult result = DirectFBCreate(&dfb); + if (result != DFB_OK) { + DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result); + return 0; + } + } + return dfb; +} + +IDirectFBDisplayLayer *QDirectFbConvenience::dfbDisplayLayer(int display) +{ + IDirectFBDisplayLayer *layer; + DFBResult result = QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),display,&layer); + if (result != DFB_OK) { + DirectFBError("QDirectFbConvenience: " + "Unable to get primary display layer!", result); + } + return layer; +} + +QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps) +{ + switch (format) { + case DSPF_LUT8: + return QImage::Format_Indexed8; + case DSPF_RGB24: + return QImage::Format_RGB888; + case DSPF_ARGB4444: + return QImage::Format_ARGB4444_Premultiplied; + case DSPF_RGB444: + return QImage::Format_RGB444; + case DSPF_RGB555: + case DSPF_ARGB1555: + return QImage::Format_RGB555; + case DSPF_RGB16: + return QImage::Format_RGB16; + case DSPF_ARGB6666: + return QImage::Format_ARGB6666_Premultiplied; + case DSPF_RGB18: + return QImage::Format_RGB666; + case DSPF_RGB32: + return QImage::Format_RGB32; + case DSPF_ARGB: { + if (caps & DSCAPS_PREMULTIPLIED) + return QImage::Format_ARGB32_Premultiplied; + else return QImage::Format_ARGB32; } + default: + break; + } + return QImage::Format_Invalid; + +} + +int QDirectFbConvenience::colorDepthForSurface(const DFBSurfacePixelFormat format) +{ + return ((0x1f << 7) & format) >> 7; +} + +IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPixmapData(QPixmapData *pixmapData) +{ + QBlittablePixmapData *blittablePmData = static_cast(pixmapData); + if (blittablePmData) { + QBlittable *blittable = blittablePmData->blittable(); + QDirectFbBlitter *dfbBlitter = static_cast(blittable); + return dfbBlitter->m_surface; + } + return 0; +} + +Qt::MouseButton QDirectFbConvenience::mouseButton(DFBInputDeviceButtonIdentifier identifier) +{ + switch (identifier){ + case DIBI_LEFT: + return Qt::LeftButton; + case DIBI_MIDDLE: + return Qt::MidButton; + case DIBI_RIGHT: + return Qt::RightButton; + default: + return Qt::NoButton; + } +} + +Qt::MouseButtons QDirectFbConvenience::mouseButtons(DFBInputDeviceButtonMask mask) +{ + Qt::MouseButtons buttons = Qt::NoButton; + + if (mask & DIBM_LEFT) { + buttons |= Qt::LeftButton; + } + if (mask & DIBM_MIDDLE) { + buttons |= Qt::MidButton; + } + if (mask & DIBM_RIGHT) { + buttons |= Qt::RightButton; + } + return buttons; +} + +Qt::KeyboardModifiers QDirectFbConvenience::keyboardModifiers(DFBInputDeviceModifierMask mask) +{ + Qt::KeyboardModifiers modifiers = Qt::NoModifier; + + if (mask & DIMM_SHIFT) { + modifiers |= Qt::ShiftModifier; + } + if (mask & DIMM_ALT) { + modifiers |= Qt::AltModifier; + } + if (mask & DIMM_ALTGR) { + modifiers |= Qt::MetaModifier; + } + if (mask & DIMM_CONTROL) { + modifiers |= Qt::ControlModifier; + } + if (mask & DIMM_META) { + modifiers | Qt::MetaModifier; + } + return modifiers; +} + +QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type) +{ + switch(type) { + case DWET_BUTTONDOWN: + return QEvent::MouseButtonPress; + case DWET_BUTTONUP: + return QEvent::MouseButtonRelease; + case DWET_MOTION: + return QEvent::MouseMove; + case DWET_WHEEL: + return QEvent::Wheel; + case DWET_KEYDOWN: + return QEvent::KeyPress; + case DWET_KEYUP: + return QEvent::KeyRelease; + default: + return QEvent::None; + } +} +QDirectFbKeyMap *QDirectFbConvenience::dfbKeymap = 0; +QDirectFbKeyMap *QDirectFbConvenience::keyMap() +{ + if (!dfbKeymap) + dfbKeymap = new QDirectFbKeyMap(); + return dfbKeymap; +} + +QDirectFbKeyMap::QDirectFbKeyMap() +{ + insert(DIKS_BACKSPACE , Qt::Key_Backspace); + insert(DIKS_TAB , Qt::Key_Tab); + insert(DIKS_RETURN , Qt::Key_Return); + insert(DIKS_ESCAPE , Qt::Key_Escape); + insert(DIKS_DELETE , Qt::Key_Delete); + + insert(DIKS_CURSOR_LEFT , Qt::Key_Left); + insert(DIKS_CURSOR_RIGHT , Qt::Key_Right); + insert(DIKS_CURSOR_UP , Qt::Key_Up); + insert(DIKS_CURSOR_DOWN , Qt::Key_Down); + insert(DIKS_INSERT , Qt::Key_Insert); + insert(DIKS_HOME , Qt::Key_Home); + insert(DIKS_END , Qt::Key_End); + insert(DIKS_PAGE_UP , Qt::Key_PageUp); + insert(DIKS_PAGE_DOWN , Qt::Key_PageDown); + insert(DIKS_PRINT , Qt::Key_Print); + insert(DIKS_PAUSE , Qt::Key_Pause); + insert(DIKS_SELECT , Qt::Key_Select); + insert(DIKS_GOTO , Qt::Key_OpenUrl); + insert(DIKS_CLEAR , Qt::Key_Clear); + insert(DIKS_MENU , Qt::Key_Menu); + insert(DIKS_HELP , Qt::Key_Help); + + insert(DIKS_INTERNET , Qt::Key_HomePage); + insert(DIKS_MAIL , Qt::Key_LaunchMail); + insert(DIKS_FAVORITES , Qt::Key_Favorites); + + insert(DIKS_BACK , Qt::Key_Back); + insert(DIKS_FORWARD , Qt::Key_Forward); + insert(DIKS_VOLUME_UP , Qt::Key_VolumeUp); + insert(DIKS_VOLUME_DOWN , Qt::Key_VolumeDown); + insert(DIKS_MUTE , Qt::Key_VolumeMute); + insert(DIKS_PLAYPAUSE , Qt::Key_Pause); + insert(DIKS_PLAY , Qt::Key_MediaPlay); + insert(DIKS_STOP , Qt::Key_MediaStop); + insert(DIKS_RECORD , Qt::Key_MediaRecord); + insert(DIKS_PREVIOUS , Qt::Key_MediaPrevious); + insert(DIKS_NEXT , Qt::Key_MediaNext); + + insert(DIKS_F1 , Qt::Key_F1); + insert(DIKS_F2 , Qt::Key_F2); + insert(DIKS_F3 , Qt::Key_F3); + insert(DIKS_F4 , Qt::Key_F4); + insert(DIKS_F5 , Qt::Key_F5); + insert(DIKS_F6 , Qt::Key_F6); + insert(DIKS_F7 , Qt::Key_F7); + insert(DIKS_F8 , Qt::Key_F8); + insert(DIKS_F9 , Qt::Key_F9); + insert(DIKS_F10 , Qt::Key_F10); + insert(DIKS_F11 , Qt::Key_F11); + insert(DIKS_F12 , Qt::Key_F12); + + insert(DIKS_SHIFT , Qt::Key_Shift); + insert(DIKS_CONTROL , Qt::Key_Control); + insert(DIKS_ALT , Qt::Key_Alt); + insert(DIKS_ALTGR , Qt::Key_AltGr); + + insert(DIKS_META , Qt::Key_Meta); + insert(DIKS_SUPER , Qt::Key_Super_L); // ??? + insert(DIKS_HYPER , Qt::Key_Hyper_L); // ??? + + insert(DIKS_CAPS_LOCK , Qt::Key_CapsLock); + insert(DIKS_NUM_LOCK , Qt::Key_NumLock); + insert(DIKS_SCROLL_LOCK , Qt::Key_ScrollLock); + + insert(DIKS_DEAD_ABOVEDOT , Qt::Key_Dead_Abovedot); + insert(DIKS_DEAD_ABOVERING , Qt::Key_Dead_Abovering); + insert(DIKS_DEAD_ACUTE , Qt::Key_Dead_Acute); + insert(DIKS_DEAD_BREVE , Qt::Key_Dead_Breve); + insert(DIKS_DEAD_CARON , Qt::Key_Dead_Caron); + insert(DIKS_DEAD_CEDILLA , Qt::Key_Dead_Cedilla); + insert(DIKS_DEAD_CIRCUMFLEX , Qt::Key_Dead_Circumflex); + insert(DIKS_DEAD_DIAERESIS , Qt::Key_Dead_Diaeresis); + insert(DIKS_DEAD_DOUBLEACUTE , Qt::Key_Dead_Doubleacute); + insert(DIKS_DEAD_GRAVE , Qt::Key_Dead_Grave); + insert(DIKS_DEAD_IOTA , Qt::Key_Dead_Iota); + insert(DIKS_DEAD_MACRON , Qt::Key_Dead_Macron); + insert(DIKS_DEAD_OGONEK , Qt::Key_Dead_Ogonek); + insert(DIKS_DEAD_SEMIVOICED_SOUND , Qt::Key_Dead_Semivoiced_Sound); + insert(DIKS_DEAD_TILDE , Qt::Key_Dead_Tilde); + insert(DIKS_DEAD_VOICED_SOUND , Qt::Key_Dead_Voiced_Sound); + insert(DIKS_SPACE , Qt::Key_Space); + insert(DIKS_EXCLAMATION_MARK , Qt::Key_Exclam); + insert(DIKS_QUOTATION , Qt::Key_QuoteDbl); + insert(DIKS_NUMBER_SIGN , Qt::Key_NumberSign); + insert(DIKS_DOLLAR_SIGN , Qt::Key_Dollar); + insert(DIKS_PERCENT_SIGN , Qt::Key_Percent); + insert(DIKS_AMPERSAND , Qt::Key_Ampersand); + insert(DIKS_APOSTROPHE , Qt::Key_Apostrophe); + insert(DIKS_PARENTHESIS_LEFT , Qt::Key_ParenLeft); + insert(DIKS_PARENTHESIS_RIGHT , Qt::Key_ParenRight); + insert(DIKS_ASTERISK , Qt::Key_Asterisk); + insert(DIKS_PLUS_SIGN , Qt::Key_Plus); + insert(DIKS_COMMA , Qt::Key_Comma); + insert(DIKS_MINUS_SIGN , Qt::Key_Minus); + insert(DIKS_PERIOD , Qt::Key_Period); + insert(DIKS_SLASH , Qt::Key_Slash); + insert(DIKS_0 , Qt::Key_0); + insert(DIKS_1 , Qt::Key_1); + insert(DIKS_2 , Qt::Key_2); + insert(DIKS_3 , Qt::Key_3); + insert(DIKS_4 , Qt::Key_4); + insert(DIKS_5 , Qt::Key_5); + insert(DIKS_6 , Qt::Key_6); + insert(DIKS_7 , Qt::Key_7); + insert(DIKS_8 , Qt::Key_8); + insert(DIKS_9 , Qt::Key_9); + insert(DIKS_COLON , Qt::Key_Colon); + insert(DIKS_SEMICOLON , Qt::Key_Semicolon); + insert(DIKS_LESS_THAN_SIGN , Qt::Key_Less); + insert(DIKS_EQUALS_SIGN , Qt::Key_Equal); + insert(DIKS_GREATER_THAN_SIGN , Qt::Key_Greater); + insert(DIKS_QUESTION_MARK , Qt::Key_Question); + insert(DIKS_AT , Qt::Key_At); + insert(DIKS_CAPITAL_A , Qt::Key_A); + insert(DIKS_CAPITAL_B , Qt::Key_B); + insert(DIKS_CAPITAL_C , Qt::Key_C); + insert(DIKS_CAPITAL_D , Qt::Key_D); + insert(DIKS_CAPITAL_E , Qt::Key_E); + insert(DIKS_CAPITAL_F , Qt::Key_F); + insert(DIKS_CAPITAL_G , Qt::Key_G); + insert(DIKS_CAPITAL_H , Qt::Key_H); + insert(DIKS_CAPITAL_I , Qt::Key_I); + insert(DIKS_CAPITAL_J , Qt::Key_J); + insert(DIKS_CAPITAL_K , Qt::Key_K); + insert(DIKS_CAPITAL_L , Qt::Key_L); + insert(DIKS_CAPITAL_M , Qt::Key_M); + insert(DIKS_CAPITAL_N , Qt::Key_N); + insert(DIKS_CAPITAL_O , Qt::Key_O); + insert(DIKS_CAPITAL_P , Qt::Key_P); + insert(DIKS_CAPITAL_Q , Qt::Key_Q); + insert(DIKS_CAPITAL_R , Qt::Key_R); + insert(DIKS_CAPITAL_S , Qt::Key_S); + insert(DIKS_CAPITAL_T , Qt::Key_T); + insert(DIKS_CAPITAL_U , Qt::Key_U); + insert(DIKS_CAPITAL_V , Qt::Key_V); + insert(DIKS_CAPITAL_W , Qt::Key_W); + insert(DIKS_CAPITAL_X , Qt::Key_X); + insert(DIKS_CAPITAL_Y , Qt::Key_Y); + insert(DIKS_CAPITAL_Z , Qt::Key_Z); + insert(DIKS_SQUARE_BRACKET_LEFT , Qt::Key_BracketLeft); + insert(DIKS_BACKSLASH , Qt::Key_Backslash); + insert(DIKS_SQUARE_BRACKET_RIGHT , Qt::Key_BracketRight); + insert(DIKS_CIRCUMFLEX_ACCENT , Qt::Key_AsciiCircum); + insert(DIKS_UNDERSCORE , Qt::Key_Underscore); + insert(DIKS_SMALL_A , Qt::Key_A); + insert(DIKS_SMALL_B , Qt::Key_B); + insert(DIKS_SMALL_C , Qt::Key_C); + insert(DIKS_SMALL_D , Qt::Key_D); + insert(DIKS_SMALL_E , Qt::Key_E); + insert(DIKS_SMALL_F , Qt::Key_F); + insert(DIKS_SMALL_G , Qt::Key_G); + insert(DIKS_SMALL_H , Qt::Key_H); + insert(DIKS_SMALL_I , Qt::Key_I); + insert(DIKS_SMALL_J , Qt::Key_J); + insert(DIKS_SMALL_K , Qt::Key_K); + insert(DIKS_SMALL_L , Qt::Key_L); + insert(DIKS_SMALL_M , Qt::Key_M); + insert(DIKS_SMALL_N , Qt::Key_N); + insert(DIKS_SMALL_O , Qt::Key_O); + insert(DIKS_SMALL_P , Qt::Key_P); + insert(DIKS_SMALL_Q , Qt::Key_Q); + insert(DIKS_SMALL_R , Qt::Key_R); + insert(DIKS_SMALL_S , Qt::Key_S); + insert(DIKS_SMALL_T , Qt::Key_T); + insert(DIKS_SMALL_U , Qt::Key_U); + insert(DIKS_SMALL_V , Qt::Key_V); + insert(DIKS_SMALL_W , Qt::Key_W); + insert(DIKS_SMALL_X , Qt::Key_X); + insert(DIKS_SMALL_Y , Qt::Key_Y); + insert(DIKS_SMALL_Z , Qt::Key_Z); + insert(DIKS_CURLY_BRACKET_LEFT , Qt::Key_BraceLeft); + insert(DIKS_VERTICAL_BAR , Qt::Key_Bar); + insert(DIKS_CURLY_BRACKET_RIGHT , Qt::Key_BraceRight); + insert(DIKS_TILDE , Qt::Key_AsciiTilde); +} diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.h b/src/plugins/platforms/directfb/qdirectfbconvenience.h new file mode 100644 index 0000000..ab5b3de --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.h @@ -0,0 +1,43 @@ +#ifndef QDIRECTFBCONVENIENCE_H +#define QDIRECTFBCONVENIENCE_H + +#include +#include +#include +#include + +#include + +class QDirectFbKeyMap: public QHash +{ +public: + QDirectFbKeyMap(); +}; + + +class QDirectFbConvenience +{ +public: + static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps); + static bool pixelFomatHasAlpha(const DFBSurfacePixelFormat format) { return (1 << 16) & format; } + static int colorDepthForSurface(const DFBSurfacePixelFormat format); + + //This is set by the graphicssystem constructor + static IDirectFB *dfbInterface(); + static IDirectFBDisplayLayer *dfbDisplayLayer(int display = DLID_PRIMARY); + + static IDirectFBSurface *dfbSurfaceForPixmapData(QPixmapData *); + + static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier); + static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask); + static Qt::KeyboardModifiers keyboardModifiers(DFBInputDeviceModifierMask mask); + static QEvent::Type eventType(DFBWindowEventType type); + + static QDirectFbKeyMap *keyMap(); + +private: + static QDirectFbKeyMap *dfbKeymap; + friend class QDirectFbIntegration; +}; + +#endif // QDIRECTFBCONVENIENCE_H diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.cpp b/src/plugins/platforms/directfb/qdirectfbcursor.cpp new file mode 100644 index 0000000..bb7088f --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbcursor.cpp @@ -0,0 +1,42 @@ +#include "qdirectfbcursor.h" +#include "qblitter_directfb.h" +#include "qplatformintegration_directfb.h" +#include "qdirectfbconvenience.h" + +#include + +QDirectFBCursor::QDirectFBCursor(QPlatformScreen* screen) : + QGraphicsSystemCursor(screen), surface(0) +{ + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer); + image = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); +} + +void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) +{ + Q_UNUSED(widget); + int xSpot; + int ySpot; + QPixmap map; + + if (cursor->shape() != Qt::BitmapCursor) { + image->set(cursor->shape()); + xSpot = image->hotspot().x(); + ySpot = image->hotspot().y(); + QImage *i = image->image(); + map = QPixmap::fromImage(*i); + } else { + QPoint point = cursor->hotSpot(); + xSpot = point.x(); + ySpot = point.y(); + map = cursor->pixmap(); + } + + IDirectFBSurface *surface = QDirectFbConvenience::dfbSurfaceForPixmapData(map.pixmapData()); + + if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) { + return; + } + m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot); + m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED); +} diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h new file mode 100644 index 0000000..1566e7c --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbcursor.h @@ -0,0 +1,22 @@ +#ifndef QDIRECTFBCURSOR_H +#define QDIRECTFBCURSOR_H + +#include +#include +class QDirectFbScreen; +class QDirectFbBlitter; + +class QDirectFBCursor : public QGraphicsSystemCursor +{ +public: + QDirectFBCursor(QPlatformScreen *screem); + void changeCursor(QCursor * cursor, QWidget * widget); + +private: + IDirectFBDisplayLayer * m_layer; + IDirectFBSurface * surface; + QGraphicsSystemCursorImage * image; + QDirectFbBlitter *blitter; +}; + +#endif // QDIRECTFBCURSOR_H diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp new file mode 100644 index 0000000..74a38a4 --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp @@ -0,0 +1,205 @@ +#include "qdirectfbinput.h" +#include "qdirectfbconvenience.h" + +#include +#include +#include +#include +#include +#include + +#include + +InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) + : QThread(parent), m_eventBuffer(eventBuffer),m_shouldStop(false) +{ + this->start(); +} + +InputSocketWaiter::~InputSocketWaiter() +{ + m_shouldStop = true; + m_eventBuffer->WakeUp(m_eventBuffer); + m_cleanupMutex.lock(); +} + +void InputSocketWaiter::continueWaitingForEvents() +{ + m_finishedProcessingEvents.wakeAll(); +} + +void InputSocketWaiter::run() +{ + m_cleanupMutex.lock(); + while (1) { + m_eventBuffer->WaitForEvent(m_eventBuffer); + if (m_shouldStop) + break; + emit newEvent(); + QMutex waitForProcessingMutex; + waitForProcessingMutex.lock(); + m_finishedProcessingEvents.wait(&waitForProcessingMutex); + } + m_cleanupMutex.unlock(); +} + +QDirectFbInput *QDirectFbInput::instance() +{ + static QDirectFbInput *input = 0; + if (!input) { + input = new QDirectFbInput(); + } + return input; +} + +QDirectFbInput::QDirectFbInput() + : QObject() +{ + dfbInterface = QDirectFbConvenience::dfbInterface(); + + DFBResult ok = dfbInterface->CreateEventBuffer(dfbInterface,&eventBuffer); + if (ok != DFB_OK) + DirectFBError("Failed to initialise eventbuffer", ok); + + dfbInterface->GetDisplayLayer(dfbInterface,DLID_PRIMARY, &dfbDisplayLayer); + + m_inputHandler = new InputSocketWaiter(eventBuffer,this); + connect(m_inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); + + connect(QApplication::instance(),SIGNAL(aboutToQuit()),SLOT(applicationEnd())); +} + +void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) +{ + tlwMap.insert(id,tlw); + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); + + window->AttachEventBuffer(window,eventBuffer); +} + +void QDirectFbInput::removeWindow(QWidget *tlw) +{ + DFBWindowID id = tlwMap.key(tlw,0); + if (id) { + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,id, &window); + + window->DetachEventBuffer(window,eventBuffer); + tlwMap.remove(id); + } +} + +void QDirectFbInput::handleEvents() +{ + DFBResult hasEvent = eventBuffer->HasEvent(eventBuffer); + while(hasEvent == DFB_OK){ + DFBEvent event; + DFBResult ok = eventBuffer->GetEvent(eventBuffer,&event); + if (ok != DFB_OK) + DirectFBError("Failed to get event",ok); + if (event.clazz == DFEC_WINDOW) { + switch (event.window.type) { + case DWET_BUTTONDOWN: + case DWET_BUTTONUP: + case DWET_MOTION: + handleMouseEvents(event); + break; + case DWET_WHEEL: + handleWheelEvent(event); + break; + case DWET_KEYDOWN: + case DWET_KEYUP: + handleKeyEvents(event); + break; + case DWET_ENTER: + case DWET_LEAVE: + handleEnterLeaveEvents(event); + default: + break; + } + + } + + hasEvent = eventBuffer->HasEvent(eventBuffer); + } + m_inputHandler->continueWaitingForEvents(); +} + +void QDirectFbInput::handleMouseEvents(const DFBEvent &event) +{ + QPoint p(event.window.x, event.window.y); + QPoint globalPos = globalPoint(event); + Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); + + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); + IDirectFBWindow *window; + layer->GetWindow(layer,event.window.window_id,&window); + + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + + if (event.window.type == DWET_BUTTONDOWN) { + window->GrabPointer(window); + } else if (event.window.type == DWET_BUTTONUP) { + window->UngrabPointer(window); + } + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); +} + +void QDirectFbInput::applicationEnd() +{ + delete m_inputHandler; + m_inputHandler = 0; +} + +void QDirectFbInput::handleWheelEvent(const DFBEvent &event) +{ + QPoint p(event.window.cx, event.window.cy); + QPoint globalPos = globalPoint(event); + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos, + event.window.step*120, + Qt::Vertical); +} + +void QDirectFbInput::handleKeyEvents(const DFBEvent &event) +{ + QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); + Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol); + Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers); + + long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); + + QChar character; + if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE) + character = QChar(event.window.key_symbol); + QWidget *tlw = tlwMap.value(event.window.window_id); + QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character); +} + +void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) +{ + QWidget *tlw = tlwMap.value(event.window.window_id); + switch (event.window.type) { + case DWET_ENTER: + QWindowSystemInterface::handleEnterEvent(tlw); + break; + case DWET_LEAVE: + QWindowSystemInterface::handleLeaveEvent(tlw); + break; + default: + break; + } +} + +inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const +{ + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,event.window.window_id,&window); + int x,y; + window->GetPosition(window,&x,&y); + return QPoint(event.window.cx +x, event.window.cy + y); +} + diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h new file mode 100644 index 0000000..31aa082 --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbinput.h @@ -0,0 +1,63 @@ +#ifndef QDIRECTFBINPUT_H +#define QDIRECTFBINPUT_H + +#include +#include +#include +#include +#include +#include +#include + +#include + +class InputSocketWaiter : public QThread +{ + Q_OBJECT +public: + InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent); + virtual ~InputSocketWaiter(); + void continueWaitingForEvents(); +protected: + void run(); +signals: + void newEvent(); +private: + IDirectFBEventBuffer *m_eventBuffer; + bool m_shouldStop; + QMutex m_cleanupMutex; + QWaitCondition m_finishedProcessingEvents; +}; + +class QDirectFbInput : public QObject +{ + Q_OBJECT +public: + static QDirectFbInput *instance(); + void addWindow(DFBWindowID id, QWidget *tlw); + void removeWindow(QWidget *tlw); + +public slots: + void handleEvents(); + void applicationEnd(); + +private: + QDirectFbInput(); + + void handleMouseEvents(const DFBEvent &event); + void handleWheelEvent(const DFBEvent &event); + void handleKeyEvents(const DFBEvent &event); + void handleEnterLeaveEvents(const DFBEvent &event); + IDirectFB *dfbInterface; + IDirectFBDisplayLayer *dfbDisplayLayer; + IDirectFBEventBuffer *eventBuffer; + + QHashtlwMap; + + inline QPoint globalPoint(const DFBEvent &event) const; + + InputSocketWaiter *m_inputHandler; + +}; + +#endif // QDIRECTFBINPUT_H diff --git a/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp b/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp new file mode 100644 index 0000000..c70bb64 --- /dev/null +++ b/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp @@ -0,0 +1,118 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformintegration_directfb.h" +#include "qwindowsurface_directfb.h" +#include "qblitter_directfb.h" +#include "qdirectfbconvenience.h" +#include "qdirectfbcursor.h" + +#include +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QDirectFbScreen::QDirectFbScreen(int display) + :QPlatformScreen() +{ + m_layer = QDirectFbConvenience::dfbDisplayLayer(display); + m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); + + DFBDisplayLayerConfig config; + m_layer->GetConfiguration(m_layer, &config); + + m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); + m_geometry = QRect(0,0,config.width,config.height); + const int dpi = 72; + const qreal inch = 25.4; + m_depth = 32; + m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); + + cursor = new QDirectFBCursor(this); +} + +QDirectFbScreen::~QDirectFbScreen() +{ +} + +QDirectFbIntegration::QDirectFbIntegration() +{ + const QStringList args = QCoreApplication::arguments(); + int argc = args.size(); + char **argv = new char*[argc]; + + for (int i = 0; i < argc; ++i) + argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); + + DFBResult result = DirectFBInit(&argc, &argv); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen: error initializing DirectFB", + result); + } + delete[] argv; + + QDirectFbScreen *primaryScreen = new QDirectFbScreen(0); + mScreens.append(primaryScreen); +} + +QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + if (type == QPixmapData::BitmapType) + return new QRasterPixmapData(type); + else + return new QBlittablePixmapData(type); +} + +QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *widget) const +{ + return new QDirectFbWindowSurface (widget); +} + +QBlittable *QDirectFbIntegration::createBlittable(const QSize &size) const +{ + return new QDirectFbBlitter(size); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qplatformintegration_directfb.h b/src/plugins/platforms/directfb/qplatformintegration_directfb.h new file mode 100644 index 0000000..f74a81d --- /dev/null +++ b/src/plugins/platforms/directfb/qplatformintegration_directfb.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATION_DIRECTFB_H +#define QPLATFORMINTEGRATION_DIRECTFB_H + +#include "qdirectfbinput.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QDirectFBCursor; + +class QDirectFbScreen : public QPlatformScreen +{ +public: + QDirectFbScreen(int display); + ~QDirectFbScreen(); + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + QSize physicalSize() const { return m_physicalSize; } + +public: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + QSize m_physicalSize; + + IDirectFBDisplayLayer *m_layer; + +private: + QDirectFBCursor * cursor; + +}; + +class QDirectFbIntegration : public QPlatformIntegration +{ +public: + QDirectFbIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + QBlittable *createBlittable(const QSize &size) const; + + QList screens() const { return mScreens; } + + + +private: + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp b/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp new file mode 100644 index 0000000..afe34b7 --- /dev/null +++ b/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp @@ -0,0 +1,231 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_directfb.h" +#include "qplatformintegration_directfb.h" +#include "qblitter_directfb.h" +#include "qdirectfbconvenience.h" +#include + +#include + +QT_BEGIN_NAMESPACE + +QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) + : QWindowSurface(window), m_pixmap(0), m_pmdata(0), + m_dfbWindow(0), m_dfbSurface(0) +{ + window->setWindowSurface(this); + + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); + DFBDisplayLayerConfig layerConfig; + layer->GetConfiguration(layer,&layerConfig); + + DFBWindowDescription description; + memset(&description,0,sizeof(DFBWindowDescription)); + description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS +#if DIRECTFB_MINOR_VERSION >= 1 + |DWDESC_OPTIONS +#endif + |DWDESC_CAPS); + description.width = window->rect().width(); + description.height = window->rect().height(); + description.posx = window->rect().x(); + description.posy = window->rect().y(); + + if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED) + description.surface_caps = DSCAPS_PREMULTIPLIED; + description.pixelformat = layerConfig.pixelformat; + +#if DIRECTFB_MINOR_VERSION >= 1 + description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); +#endif + description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); + description.surface_caps = DSCAPS_PREMULTIPLIED; + + DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); + if (result != DFB_OK) { + DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); + } + + DFBWindowID id; + m_dfbWindow->GetID(m_dfbWindow, &id); + QDirectFbInput::instance()->addWindow(id,window); + + m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); + + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface); + m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); + m_pmdata->setBlittable(blitter); + m_pixmap = new QPixmap(m_pmdata); +} + +QDirectFbWindowSurface::~QDirectFbWindowSurface() +{ + QDirectFbInput::instance()->removeWindow(this->window()); + m_dfbWindow->Destroy(m_dfbWindow); +} + +QPaintDevice *QDirectFbWindowSurface::paintDevice() +{ + return m_pixmap; +} + +void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + m_pmdata->blittable()->unlock(); + + const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); + m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); + + QVector rects = region.rects(); + for (int i = 0 ; i < rects.size(); i++) { + const QRect rect = rects.at(i); + DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; + m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); + } +} + +void QDirectFbWindowSurface::setGeometry(const QRect &rect) +{ + m_pmdata->blittable()->unlock(); + + QWindowSurface::setGeometry(rect); + m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), + rect.width(), rect.height()); + + //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable + m_dfbSurface->AddRef(m_dfbSurface); + QDirectFbBlitter *blitter = new QDirectFbBlitter(rect.size(),m_dfbSurface); + m_pmdata->setBlittable(blitter); +} + +static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) +{ + const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() }; + surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy); + const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy }; + surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT)); +} + +bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + m_pmdata->blittable()->unlock(); + + if (!m_dfbSurface || area.isEmpty()) + return false; + m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); + if (area.rectCount() == 1) { + scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy); + } else { + const QVector rects = area.rects(); + const int n = rects.size(); + for (int i=0; iblittable()->unlock(); + + if (visible) { + int x = this->geometry().x(); + int y = this->geometry().y(); + m_dfbWindow->MoveTo(m_dfbWindow,x,y); + } else { + IDirectFBDisplayLayer *displayLayer; + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); + + DFBDisplayLayerConfig config; + displayLayer->GetConfiguration(displayLayer,&config); + m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); + } +} + +Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags flags) +{ + switch (flags & Qt::WindowType_Mask) { + case Qt::ToolTip: { + DFBWindowOptions options; + m_dfbWindow->GetOptions(m_dfbWindow,&options); + options = DFBWindowOptions(options | DWOP_GHOST); + m_dfbWindow->SetOptions(m_dfbWindow,options); + break; } + default: + break; + } + + m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); + return flags; +} + +void QDirectFbWindowSurface::raise() +{ + m_dfbWindow->RaiseToTop(m_dfbWindow); +} + +void QDirectFbWindowSurface::lower() +{ + m_dfbWindow->LowerToBottom(m_dfbWindow); +} + +WId QDirectFbWindowSurface::winId() const +{ + DFBWindowID id; + m_dfbWindow->GetID(m_dfbWindow, &id); + return WId(id); +} + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qwindowsurface_directfb.h b/src/plugins/platforms/directfb/qwindowsurface_directfb.h new file mode 100644 index 0000000..2f31513 --- /dev/null +++ b/src/plugins/platforms/directfb/qwindowsurface_directfb.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_DIRECTFB_H +#define QWINDOWSURFACE_DIRECTFB_H + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +class QDirectFbGraphicsSystemScreen; + +class QDirectFbWindowSurface : public QWindowSurface +{ +public: + QDirectFbWindowSurface(QWidget *window); + ~QDirectFbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void setGeometry(const QRect &rect); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + + void setVisible(bool visible); + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + + void raise(); + void lower(); + + WId winId() const; + +private: + void lockSurfaceToImage(); + + QPixmap *m_pixmap; + QBlittablePixmapData *m_pmdata; + + IDirectFBWindow *m_dfbWindow; + IDirectFBSurface *m_dfbSurface; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/minimaldfb/main.cpp b/src/plugins/platforms/minimaldfb/main.cpp deleted file mode 100644 index fe9407c..0000000 --- a/src/plugins/platforms/minimaldfb/main.cpp +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include "qgraphicssystem_minimaldfb.h" - -QT_BEGIN_NAMESPACE - -class QDirectFbGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QDirectFbGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << "MinimalDfb"; - return list; -} - -QGraphicsSystem* QDirectFbGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == "minimaldfb") - return new QDirectFbGraphicsSystem; - - return 0; -} - -Q_EXPORT_PLUGIN2(directfb, QDirectFbGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimaldfb/minimaldfb.pro b/src/plugins/platforms/minimaldfb/minimaldfb.pro deleted file mode 100644 index b6c2ea8..0000000 --- a/src/plugins/platforms/minimaldfb/minimaldfb.pro +++ /dev/null @@ -1,29 +0,0 @@ -TARGET = qminimaldfb -include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -isEmpty(DIRECTFB_LIBS) { - DIRECTFB_LIBS = -ldirectfb -lfusion -ldirect -lpthread -} -isEmpty(DIRECTFB_INCLUDEPATH) { - DIRECTFB_INCLUDEPATH = /usr/include/directfb -} - -INCLUDEPATH += $$DIRECTFB_INCLUDEPATH -LIBS += $$DIRECTFB_LIBS - -SOURCES = main.cpp \ - qgraphicssystem_minimaldfb.cpp \ - qwindowsurface_minimaldfb.cpp \ - qblitter_directfb.cpp \ - qdirectfbconvenience.cpp \ - qdirectfbinput.cpp \ - qdirectfbcursor.cpp -HEADERS = qgraphicssystem_minimaldfb.h \ - qwindowsurface_minimaldfb.h \ - qblitter_directfb.h \ - qdirectfbconvenience.h \ - qdirectfbinput.h \ - qdirectfbcursor.h -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/platforms/minimaldfb/qblitter_directfb.cpp b/src/plugins/platforms/minimaldfb/qblitter_directfb.cpp deleted file mode 100644 index 070c563..0000000 --- a/src/plugins/platforms/minimaldfb/qblitter_directfb.cpp +++ /dev/null @@ -1,110 +0,0 @@ -#include "qblitter_directfb.h" -#include "qgraphicssystem_minimaldfb.h" -#include "qdirectfbconvenience.h" - -#include - -#include - -#include - -QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface) - : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability - |QBlittable::SourcePixmapCapability - |QBlittable::SourceOverPixmapCapability - |QBlittable::SourceOverScaledPixmapCapability)) -{ - if (surface) { - m_surface = surface; - } else { - DFBSurfaceDescription surfaceDesc; - memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); - surfaceDesc.width = rect.width(); - surfaceDesc.height = rect.height(); - surfaceDesc.caps = DSCAPS_PREMULTIPLIED; - surfaceDesc.pixelformat = DSPF_ARGB; - surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); - - IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); - dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); - m_surface->Clear(m_surface,0,0,0,0); - } -} - -QDirectFbBlitter::~QDirectFbBlitter() -{ - unlock(); - m_surface->Release(m_surface); -} - -void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) -{ - m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); -// When the blitter api supports non opaque blits, also remember to change -// qpixmap_blitter.cpp::fill -// DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX; -// m_surface->SetDrawingFlags(m_surface, drawingFlags); - m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); - m_surface->FillRectangle(m_surface, rect.x(), rect.y(), - rect.width(), rect.height()); -} - -void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect) -{ - QPixmapData *data = pixmap.pixmapData(); - Q_ASSERT(data->width() && data->height()); - Q_ASSERT(data->classId() == QPixmapData::BlitterClass); - QBlittablePixmapData *blitPm = static_cast(data); - QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); - dfbBlitter->unlock(); - - IDirectFBSurface *s = dfbBlitter->m_surface; - - quint32 blittingFlags = pixmap.hasAlpha()? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; - - s->SetBlittingFlags(s, DFBSurfaceBlittingFlags(blittingFlags)); - m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); - m_surface->SetPorterDuff(m_surface,DSPD_SRC_OVER); - m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); - - const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; - - DFBResult result; - if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) - result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y()); - else { - const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; - result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect); - } - if (result != DFB_OK) - DirectFBError("QDirectFBBlitter::drawPixmap()", result); -} - -QImage *QDirectFbBlitter::doLock() -{ - Q_ASSERT(m_surface); - Q_ASSERT(size().isValid()); - - void *mem; - int bpl; - const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); - if (result == DFB_OK) { - DFBSurfacePixelFormat dfbFormat; - DFBSurfaceCapabilities dfbCaps; - m_surface->GetPixelFormat(m_surface,&dfbFormat); - m_surface->GetCapabilities(m_surface,&dfbCaps); - QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); - int w, h; - m_surface->GetSize(m_surface,&w,&h); - m_image = QImage(static_cast(mem),w,h,bpl,format); - } else { - DirectFBError("Failed to lock image", result); - } - - return &m_image; -} - -void QDirectFbBlitter::doUnlock() -{ - m_surface->Unlock(m_surface); -} diff --git a/src/plugins/platforms/minimaldfb/qblitter_directfb.h b/src/plugins/platforms/minimaldfb/qblitter_directfb.h deleted file mode 100644 index 85a303a..0000000 --- a/src/plugins/platforms/minimaldfb/qblitter_directfb.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef QDIRECTFBBLITTER_H -#define QDIRECTFBBLITTER_H - -#include "qdirectfbconvenience.h" - -#include - -#include - -class QDirectFbBlitter : public QBlittable -{ -public: - QDirectFbBlitter(const QSize &size, IDirectFBSurface *surface = 0); - virtual ~QDirectFbBlitter(); - - virtual void fillRect(const QRectF &rect, const QColor &color); - virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); - -protected: - virtual QImage *doLock(); - virtual void doUnlock(); - - IDirectFBSurface *m_surface; - QImage m_image; - - friend class QDirectFbConvenience; -}; - -#endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/platforms/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/platforms/minimaldfb/qdirectfbconvenience.cpp deleted file mode 100644 index 8594c09..0000000 --- a/src/plugins/platforms/minimaldfb/qdirectfbconvenience.cpp +++ /dev/null @@ -1,335 +0,0 @@ -#include "qdirectfbconvenience.h" -#include "qblitter_directfb.h" - -#include - -IDirectFB *QDirectFbConvenience::dfbInterface() -{ - static IDirectFB *dfb = 0; - if (!dfb) { - DFBResult result = DirectFBCreate(&dfb); - if (result != DFB_OK) { - DirectFBError("QDirectFBConvenience: error creating DirectFB interface",result); - return 0; - } - } - return dfb; -} - -IDirectFBDisplayLayer *QDirectFbConvenience::dfbDisplayLayer(int display) -{ - IDirectFBDisplayLayer *layer; - DFBResult result = QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),display,&layer); - if (result != DFB_OK) { - DirectFBError("QDirectFbConvenience: " - "Unable to get primary display layer!", result); - } - return layer; -} - -QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps) -{ - switch (format) { - case DSPF_LUT8: - return QImage::Format_Indexed8; - case DSPF_RGB24: - return QImage::Format_RGB888; - case DSPF_ARGB4444: - return QImage::Format_ARGB4444_Premultiplied; - case DSPF_RGB444: - return QImage::Format_RGB444; - case DSPF_RGB555: - case DSPF_ARGB1555: - return QImage::Format_RGB555; - case DSPF_RGB16: - return QImage::Format_RGB16; - case DSPF_ARGB6666: - return QImage::Format_ARGB6666_Premultiplied; - case DSPF_RGB18: - return QImage::Format_RGB666; - case DSPF_RGB32: - return QImage::Format_RGB32; - case DSPF_ARGB: { - if (caps & DSCAPS_PREMULTIPLIED) - return QImage::Format_ARGB32_Premultiplied; - else return QImage::Format_ARGB32; } - default: - break; - } - return QImage::Format_Invalid; - -} - -int QDirectFbConvenience::colorDepthForSurface(const DFBSurfacePixelFormat format) -{ - return ((0x1f << 7) & format) >> 7; -} - -IDirectFBSurface *QDirectFbConvenience::dfbSurfaceForPixmapData(QPixmapData *pixmapData) -{ - QBlittablePixmapData *blittablePmData = static_cast(pixmapData); - if (blittablePmData) { - QBlittable *blittable = blittablePmData->blittable(); - QDirectFbBlitter *dfbBlitter = static_cast(blittable); - return dfbBlitter->m_surface; - } - return 0; -} - -Qt::MouseButton QDirectFbConvenience::mouseButton(DFBInputDeviceButtonIdentifier identifier) -{ - switch (identifier){ - case DIBI_LEFT: - return Qt::LeftButton; - case DIBI_MIDDLE: - return Qt::MidButton; - case DIBI_RIGHT: - return Qt::RightButton; - default: - return Qt::NoButton; - } -} - -Qt::MouseButtons QDirectFbConvenience::mouseButtons(DFBInputDeviceButtonMask mask) -{ - Qt::MouseButtons buttons = Qt::NoButton; - - if (mask & DIBM_LEFT) { - buttons |= Qt::LeftButton; - } - if (mask & DIBM_MIDDLE) { - buttons |= Qt::MidButton; - } - if (mask & DIBM_RIGHT) { - buttons |= Qt::RightButton; - } - return buttons; -} - -Qt::KeyboardModifiers QDirectFbConvenience::keyboardModifiers(DFBInputDeviceModifierMask mask) -{ - Qt::KeyboardModifiers modifiers = Qt::NoModifier; - - if (mask & DIMM_SHIFT) { - modifiers |= Qt::ShiftModifier; - } - if (mask & DIMM_ALT) { - modifiers |= Qt::AltModifier; - } - if (mask & DIMM_ALTGR) { - modifiers |= Qt::MetaModifier; - } - if (mask & DIMM_CONTROL) { - modifiers |= Qt::ControlModifier; - } - if (mask & DIMM_META) { - modifiers | Qt::MetaModifier; - } - return modifiers; -} - -QEvent::Type QDirectFbConvenience::eventType(DFBWindowEventType type) -{ - switch(type) { - case DWET_BUTTONDOWN: - return QEvent::MouseButtonPress; - case DWET_BUTTONUP: - return QEvent::MouseButtonRelease; - case DWET_MOTION: - return QEvent::MouseMove; - case DWET_WHEEL: - return QEvent::Wheel; - case DWET_KEYDOWN: - return QEvent::KeyPress; - case DWET_KEYUP: - return QEvent::KeyRelease; - default: - return QEvent::None; - } -} -QDirectFbKeyMap *QDirectFbConvenience::dfbKeymap = 0; -QDirectFbKeyMap *QDirectFbConvenience::keyMap() -{ - if (!dfbKeymap) - dfbKeymap = new QDirectFbKeyMap(); - return dfbKeymap; -} - -QDirectFbKeyMap::QDirectFbKeyMap() -{ - insert(DIKS_BACKSPACE , Qt::Key_Backspace); - insert(DIKS_TAB , Qt::Key_Tab); - insert(DIKS_RETURN , Qt::Key_Return); - insert(DIKS_ESCAPE , Qt::Key_Escape); - insert(DIKS_DELETE , Qt::Key_Delete); - - insert(DIKS_CURSOR_LEFT , Qt::Key_Left); - insert(DIKS_CURSOR_RIGHT , Qt::Key_Right); - insert(DIKS_CURSOR_UP , Qt::Key_Up); - insert(DIKS_CURSOR_DOWN , Qt::Key_Down); - insert(DIKS_INSERT , Qt::Key_Insert); - insert(DIKS_HOME , Qt::Key_Home); - insert(DIKS_END , Qt::Key_End); - insert(DIKS_PAGE_UP , Qt::Key_PageUp); - insert(DIKS_PAGE_DOWN , Qt::Key_PageDown); - insert(DIKS_PRINT , Qt::Key_Print); - insert(DIKS_PAUSE , Qt::Key_Pause); - insert(DIKS_SELECT , Qt::Key_Select); - insert(DIKS_GOTO , Qt::Key_OpenUrl); - insert(DIKS_CLEAR , Qt::Key_Clear); - insert(DIKS_MENU , Qt::Key_Menu); - insert(DIKS_HELP , Qt::Key_Help); - - insert(DIKS_INTERNET , Qt::Key_HomePage); - insert(DIKS_MAIL , Qt::Key_LaunchMail); - insert(DIKS_FAVORITES , Qt::Key_Favorites); - - insert(DIKS_BACK , Qt::Key_Back); - insert(DIKS_FORWARD , Qt::Key_Forward); - insert(DIKS_VOLUME_UP , Qt::Key_VolumeUp); - insert(DIKS_VOLUME_DOWN , Qt::Key_VolumeDown); - insert(DIKS_MUTE , Qt::Key_VolumeMute); - insert(DIKS_PLAYPAUSE , Qt::Key_Pause); - insert(DIKS_PLAY , Qt::Key_MediaPlay); - insert(DIKS_STOP , Qt::Key_MediaStop); - insert(DIKS_RECORD , Qt::Key_MediaRecord); - insert(DIKS_PREVIOUS , Qt::Key_MediaPrevious); - insert(DIKS_NEXT , Qt::Key_MediaNext); - - insert(DIKS_F1 , Qt::Key_F1); - insert(DIKS_F2 , Qt::Key_F2); - insert(DIKS_F3 , Qt::Key_F3); - insert(DIKS_F4 , Qt::Key_F4); - insert(DIKS_F5 , Qt::Key_F5); - insert(DIKS_F6 , Qt::Key_F6); - insert(DIKS_F7 , Qt::Key_F7); - insert(DIKS_F8 , Qt::Key_F8); - insert(DIKS_F9 , Qt::Key_F9); - insert(DIKS_F10 , Qt::Key_F10); - insert(DIKS_F11 , Qt::Key_F11); - insert(DIKS_F12 , Qt::Key_F12); - - insert(DIKS_SHIFT , Qt::Key_Shift); - insert(DIKS_CONTROL , Qt::Key_Control); - insert(DIKS_ALT , Qt::Key_Alt); - insert(DIKS_ALTGR , Qt::Key_AltGr); - - insert(DIKS_META , Qt::Key_Meta); - insert(DIKS_SUPER , Qt::Key_Super_L); // ??? - insert(DIKS_HYPER , Qt::Key_Hyper_L); // ??? - - insert(DIKS_CAPS_LOCK , Qt::Key_CapsLock); - insert(DIKS_NUM_LOCK , Qt::Key_NumLock); - insert(DIKS_SCROLL_LOCK , Qt::Key_ScrollLock); - - insert(DIKS_DEAD_ABOVEDOT , Qt::Key_Dead_Abovedot); - insert(DIKS_DEAD_ABOVERING , Qt::Key_Dead_Abovering); - insert(DIKS_DEAD_ACUTE , Qt::Key_Dead_Acute); - insert(DIKS_DEAD_BREVE , Qt::Key_Dead_Breve); - insert(DIKS_DEAD_CARON , Qt::Key_Dead_Caron); - insert(DIKS_DEAD_CEDILLA , Qt::Key_Dead_Cedilla); - insert(DIKS_DEAD_CIRCUMFLEX , Qt::Key_Dead_Circumflex); - insert(DIKS_DEAD_DIAERESIS , Qt::Key_Dead_Diaeresis); - insert(DIKS_DEAD_DOUBLEACUTE , Qt::Key_Dead_Doubleacute); - insert(DIKS_DEAD_GRAVE , Qt::Key_Dead_Grave); - insert(DIKS_DEAD_IOTA , Qt::Key_Dead_Iota); - insert(DIKS_DEAD_MACRON , Qt::Key_Dead_Macron); - insert(DIKS_DEAD_OGONEK , Qt::Key_Dead_Ogonek); - insert(DIKS_DEAD_SEMIVOICED_SOUND , Qt::Key_Dead_Semivoiced_Sound); - insert(DIKS_DEAD_TILDE , Qt::Key_Dead_Tilde); - insert(DIKS_DEAD_VOICED_SOUND , Qt::Key_Dead_Voiced_Sound); - insert(DIKS_SPACE , Qt::Key_Space); - insert(DIKS_EXCLAMATION_MARK , Qt::Key_Exclam); - insert(DIKS_QUOTATION , Qt::Key_QuoteDbl); - insert(DIKS_NUMBER_SIGN , Qt::Key_NumberSign); - insert(DIKS_DOLLAR_SIGN , Qt::Key_Dollar); - insert(DIKS_PERCENT_SIGN , Qt::Key_Percent); - insert(DIKS_AMPERSAND , Qt::Key_Ampersand); - insert(DIKS_APOSTROPHE , Qt::Key_Apostrophe); - insert(DIKS_PARENTHESIS_LEFT , Qt::Key_ParenLeft); - insert(DIKS_PARENTHESIS_RIGHT , Qt::Key_ParenRight); - insert(DIKS_ASTERISK , Qt::Key_Asterisk); - insert(DIKS_PLUS_SIGN , Qt::Key_Plus); - insert(DIKS_COMMA , Qt::Key_Comma); - insert(DIKS_MINUS_SIGN , Qt::Key_Minus); - insert(DIKS_PERIOD , Qt::Key_Period); - insert(DIKS_SLASH , Qt::Key_Slash); - insert(DIKS_0 , Qt::Key_0); - insert(DIKS_1 , Qt::Key_1); - insert(DIKS_2 , Qt::Key_2); - insert(DIKS_3 , Qt::Key_3); - insert(DIKS_4 , Qt::Key_4); - insert(DIKS_5 , Qt::Key_5); - insert(DIKS_6 , Qt::Key_6); - insert(DIKS_7 , Qt::Key_7); - insert(DIKS_8 , Qt::Key_8); - insert(DIKS_9 , Qt::Key_9); - insert(DIKS_COLON , Qt::Key_Colon); - insert(DIKS_SEMICOLON , Qt::Key_Semicolon); - insert(DIKS_LESS_THAN_SIGN , Qt::Key_Less); - insert(DIKS_EQUALS_SIGN , Qt::Key_Equal); - insert(DIKS_GREATER_THAN_SIGN , Qt::Key_Greater); - insert(DIKS_QUESTION_MARK , Qt::Key_Question); - insert(DIKS_AT , Qt::Key_At); - insert(DIKS_CAPITAL_A , Qt::Key_A); - insert(DIKS_CAPITAL_B , Qt::Key_B); - insert(DIKS_CAPITAL_C , Qt::Key_C); - insert(DIKS_CAPITAL_D , Qt::Key_D); - insert(DIKS_CAPITAL_E , Qt::Key_E); - insert(DIKS_CAPITAL_F , Qt::Key_F); - insert(DIKS_CAPITAL_G , Qt::Key_G); - insert(DIKS_CAPITAL_H , Qt::Key_H); - insert(DIKS_CAPITAL_I , Qt::Key_I); - insert(DIKS_CAPITAL_J , Qt::Key_J); - insert(DIKS_CAPITAL_K , Qt::Key_K); - insert(DIKS_CAPITAL_L , Qt::Key_L); - insert(DIKS_CAPITAL_M , Qt::Key_M); - insert(DIKS_CAPITAL_N , Qt::Key_N); - insert(DIKS_CAPITAL_O , Qt::Key_O); - insert(DIKS_CAPITAL_P , Qt::Key_P); - insert(DIKS_CAPITAL_Q , Qt::Key_Q); - insert(DIKS_CAPITAL_R , Qt::Key_R); - insert(DIKS_CAPITAL_S , Qt::Key_S); - insert(DIKS_CAPITAL_T , Qt::Key_T); - insert(DIKS_CAPITAL_U , Qt::Key_U); - insert(DIKS_CAPITAL_V , Qt::Key_V); - insert(DIKS_CAPITAL_W , Qt::Key_W); - insert(DIKS_CAPITAL_X , Qt::Key_X); - insert(DIKS_CAPITAL_Y , Qt::Key_Y); - insert(DIKS_CAPITAL_Z , Qt::Key_Z); - insert(DIKS_SQUARE_BRACKET_LEFT , Qt::Key_BracketLeft); - insert(DIKS_BACKSLASH , Qt::Key_Backslash); - insert(DIKS_SQUARE_BRACKET_RIGHT , Qt::Key_BracketRight); - insert(DIKS_CIRCUMFLEX_ACCENT , Qt::Key_AsciiCircum); - insert(DIKS_UNDERSCORE , Qt::Key_Underscore); - insert(DIKS_SMALL_A , Qt::Key_A); - insert(DIKS_SMALL_B , Qt::Key_B); - insert(DIKS_SMALL_C , Qt::Key_C); - insert(DIKS_SMALL_D , Qt::Key_D); - insert(DIKS_SMALL_E , Qt::Key_E); - insert(DIKS_SMALL_F , Qt::Key_F); - insert(DIKS_SMALL_G , Qt::Key_G); - insert(DIKS_SMALL_H , Qt::Key_H); - insert(DIKS_SMALL_I , Qt::Key_I); - insert(DIKS_SMALL_J , Qt::Key_J); - insert(DIKS_SMALL_K , Qt::Key_K); - insert(DIKS_SMALL_L , Qt::Key_L); - insert(DIKS_SMALL_M , Qt::Key_M); - insert(DIKS_SMALL_N , Qt::Key_N); - insert(DIKS_SMALL_O , Qt::Key_O); - insert(DIKS_SMALL_P , Qt::Key_P); - insert(DIKS_SMALL_Q , Qt::Key_Q); - insert(DIKS_SMALL_R , Qt::Key_R); - insert(DIKS_SMALL_S , Qt::Key_S); - insert(DIKS_SMALL_T , Qt::Key_T); - insert(DIKS_SMALL_U , Qt::Key_U); - insert(DIKS_SMALL_V , Qt::Key_V); - insert(DIKS_SMALL_W , Qt::Key_W); - insert(DIKS_SMALL_X , Qt::Key_X); - insert(DIKS_SMALL_Y , Qt::Key_Y); - insert(DIKS_SMALL_Z , Qt::Key_Z); - insert(DIKS_CURLY_BRACKET_LEFT , Qt::Key_BraceLeft); - insert(DIKS_VERTICAL_BAR , Qt::Key_Bar); - insert(DIKS_CURLY_BRACKET_RIGHT , Qt::Key_BraceRight); - insert(DIKS_TILDE , Qt::Key_AsciiTilde); -} diff --git a/src/plugins/platforms/minimaldfb/qdirectfbconvenience.h b/src/plugins/platforms/minimaldfb/qdirectfbconvenience.h deleted file mode 100644 index 0b1a24f..0000000 --- a/src/plugins/platforms/minimaldfb/qdirectfbconvenience.h +++ /dev/null @@ -1,43 +0,0 @@ -#ifndef QDIRECTFBCONVENIENCE_H -#define QDIRECTFBCONVENIENCE_H - -#include -#include -#include -#include - -#include - -class QDirectFbKeyMap: public QHash -{ -public: - QDirectFbKeyMap(); -}; - - -class QDirectFbConvenience -{ -public: - static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps); - static bool pixelFomatHasAlpha(const DFBSurfacePixelFormat format) { return (1 << 16) & format; } - static int colorDepthForSurface(const DFBSurfacePixelFormat format); - - //This is set by the graphicssystem constructor - static IDirectFB *dfbInterface(); - static IDirectFBDisplayLayer *dfbDisplayLayer(int display = DLID_PRIMARY); - - static IDirectFBSurface *dfbSurfaceForPixmapData(QPixmapData *); - - static Qt::MouseButton mouseButton(DFBInputDeviceButtonIdentifier identifier); - static Qt::MouseButtons mouseButtons(DFBInputDeviceButtonMask mask); - static Qt::KeyboardModifiers keyboardModifiers(DFBInputDeviceModifierMask mask); - static QEvent::Type eventType(DFBWindowEventType type); - - static QDirectFbKeyMap *keyMap(); - -private: - static QDirectFbKeyMap *dfbKeymap; - friend class QDirectFbGraphicsSystem; -}; - -#endif // QDIRECTFBCONVENIENCE_H diff --git a/src/plugins/platforms/minimaldfb/qdirectfbcursor.cpp b/src/plugins/platforms/minimaldfb/qdirectfbcursor.cpp deleted file mode 100644 index 229a875..0000000 --- a/src/plugins/platforms/minimaldfb/qdirectfbcursor.cpp +++ /dev/null @@ -1,42 +0,0 @@ -#include "qdirectfbcursor.h" -#include "qblitter_directfb.h" -#include "qgraphicssystem_minimaldfb.h" -#include "qdirectfbconvenience.h" - -#include - -QDirectFBCursor::QDirectFBCursor(QGraphicsSystemScreen * screen) : - QGraphicsSystemCursor(screen), surface(0) -{ - QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer); - image = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); -} - -void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) -{ - Q_UNUSED(widget); - int xSpot; - int ySpot; - QPixmap map; - - if (cursor->shape() != Qt::BitmapCursor) { - image->set(cursor->shape()); - xSpot = image->hotspot().x(); - ySpot = image->hotspot().y(); - QImage *i = image->image(); - map = QPixmap::fromImage(*i); - } else { - QPoint point = cursor->hotSpot(); - xSpot = point.x(); - ySpot = point.y(); - map = cursor->pixmap(); - } - - IDirectFBSurface *surface = QDirectFbConvenience::dfbSurfaceForPixmapData(map.pixmapData()); - - if (m_layer->SetCooperativeLevel(m_layer, DLSCL_ADMINISTRATIVE) != DFB_OK) { - return; - } - m_layer->SetCursorShape( m_layer, surface, xSpot, ySpot); - m_layer->SetCooperativeLevel(m_layer, DLSCL_SHARED); -} diff --git a/src/plugins/platforms/minimaldfb/qdirectfbcursor.h b/src/plugins/platforms/minimaldfb/qdirectfbcursor.h deleted file mode 100644 index 064a336..0000000 --- a/src/plugins/platforms/minimaldfb/qdirectfbcursor.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef QDIRECTFBCURSOR_H -#define QDIRECTFBCURSOR_H - -#include -#include -class QDirectFbGraphicsSystemScreen; -class QDirectFbBlitter; - -class QDirectFBCursor : public QGraphicsSystemCursor -{ -public: - QDirectFBCursor(QGraphicsSystemScreen *screem); - void changeCursor(QCursor * cursor, QWidget * widget); - -private: - IDirectFBDisplayLayer * m_layer; - IDirectFBSurface * surface; - QGraphicsSystemCursorImage * image; - QDirectFbBlitter *blitter; -}; - -#endif // QDIRECTFBCURSOR_H diff --git a/src/plugins/platforms/minimaldfb/qdirectfbinput.cpp b/src/plugins/platforms/minimaldfb/qdirectfbinput.cpp deleted file mode 100644 index 74a38a4..0000000 --- a/src/plugins/platforms/minimaldfb/qdirectfbinput.cpp +++ /dev/null @@ -1,205 +0,0 @@ -#include "qdirectfbinput.h" -#include "qdirectfbconvenience.h" - -#include -#include -#include -#include -#include -#include - -#include - -InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) - : QThread(parent), m_eventBuffer(eventBuffer),m_shouldStop(false) -{ - this->start(); -} - -InputSocketWaiter::~InputSocketWaiter() -{ - m_shouldStop = true; - m_eventBuffer->WakeUp(m_eventBuffer); - m_cleanupMutex.lock(); -} - -void InputSocketWaiter::continueWaitingForEvents() -{ - m_finishedProcessingEvents.wakeAll(); -} - -void InputSocketWaiter::run() -{ - m_cleanupMutex.lock(); - while (1) { - m_eventBuffer->WaitForEvent(m_eventBuffer); - if (m_shouldStop) - break; - emit newEvent(); - QMutex waitForProcessingMutex; - waitForProcessingMutex.lock(); - m_finishedProcessingEvents.wait(&waitForProcessingMutex); - } - m_cleanupMutex.unlock(); -} - -QDirectFbInput *QDirectFbInput::instance() -{ - static QDirectFbInput *input = 0; - if (!input) { - input = new QDirectFbInput(); - } - return input; -} - -QDirectFbInput::QDirectFbInput() - : QObject() -{ - dfbInterface = QDirectFbConvenience::dfbInterface(); - - DFBResult ok = dfbInterface->CreateEventBuffer(dfbInterface,&eventBuffer); - if (ok != DFB_OK) - DirectFBError("Failed to initialise eventbuffer", ok); - - dfbInterface->GetDisplayLayer(dfbInterface,DLID_PRIMARY, &dfbDisplayLayer); - - m_inputHandler = new InputSocketWaiter(eventBuffer,this); - connect(m_inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); - - connect(QApplication::instance(),SIGNAL(aboutToQuit()),SLOT(applicationEnd())); -} - -void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) -{ - tlwMap.insert(id,tlw); - IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); - - window->AttachEventBuffer(window,eventBuffer); -} - -void QDirectFbInput::removeWindow(QWidget *tlw) -{ - DFBWindowID id = tlwMap.key(tlw,0); - if (id) { - IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,id, &window); - - window->DetachEventBuffer(window,eventBuffer); - tlwMap.remove(id); - } -} - -void QDirectFbInput::handleEvents() -{ - DFBResult hasEvent = eventBuffer->HasEvent(eventBuffer); - while(hasEvent == DFB_OK){ - DFBEvent event; - DFBResult ok = eventBuffer->GetEvent(eventBuffer,&event); - if (ok != DFB_OK) - DirectFBError("Failed to get event",ok); - if (event.clazz == DFEC_WINDOW) { - switch (event.window.type) { - case DWET_BUTTONDOWN: - case DWET_BUTTONUP: - case DWET_MOTION: - handleMouseEvents(event); - break; - case DWET_WHEEL: - handleWheelEvent(event); - break; - case DWET_KEYDOWN: - case DWET_KEYUP: - handleKeyEvents(event); - break; - case DWET_ENTER: - case DWET_LEAVE: - handleEnterLeaveEvents(event); - default: - break; - } - - } - - hasEvent = eventBuffer->HasEvent(eventBuffer); - } - m_inputHandler->continueWaitingForEvents(); -} - -void QDirectFbInput::handleMouseEvents(const DFBEvent &event) -{ - QPoint p(event.window.x, event.window.y); - QPoint globalPos = globalPoint(event); - Qt::MouseButtons buttons = QDirectFbConvenience::mouseButtons(event.window.buttons); - - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); - IDirectFBWindow *window; - layer->GetWindow(layer,event.window.window_id,&window); - - long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - - if (event.window.type == DWET_BUTTONDOWN) { - window->GrabPointer(window); - } else if (event.window.type == DWET_BUTTONUP) { - window->UngrabPointer(window); - } - QWidget *tlw = tlwMap.value(event.window.window_id); - QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); -} - -void QDirectFbInput::applicationEnd() -{ - delete m_inputHandler; - m_inputHandler = 0; -} - -void QDirectFbInput::handleWheelEvent(const DFBEvent &event) -{ - QPoint p(event.window.cx, event.window.cy); - QPoint globalPos = globalPoint(event); - long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - QWidget *tlw = tlwMap.value(event.window.window_id); - QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos, - event.window.step*120, - Qt::Vertical); -} - -void QDirectFbInput::handleKeyEvents(const DFBEvent &event) -{ - QEvent::Type type = QDirectFbConvenience::eventType(event.window.type); - Qt::Key key = QDirectFbConvenience::keyMap()->value(event.window.key_symbol); - Qt::KeyboardModifiers modifiers = QDirectFbConvenience::keyboardModifiers(event.window.modifiers); - - long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - - QChar character; - if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE) - character = QChar(event.window.key_symbol); - QWidget *tlw = tlwMap.value(event.window.window_id); - QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character); -} - -void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) -{ - QWidget *tlw = tlwMap.value(event.window.window_id); - switch (event.window.type) { - case DWET_ENTER: - QWindowSystemInterface::handleEnterEvent(tlw); - break; - case DWET_LEAVE: - QWindowSystemInterface::handleLeaveEvent(tlw); - break; - default: - break; - } -} - -inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const -{ - IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,event.window.window_id,&window); - int x,y; - window->GetPosition(window,&x,&y); - return QPoint(event.window.cx +x, event.window.cy + y); -} - diff --git a/src/plugins/platforms/minimaldfb/qdirectfbinput.h b/src/plugins/platforms/minimaldfb/qdirectfbinput.h deleted file mode 100644 index 31aa082..0000000 --- a/src/plugins/platforms/minimaldfb/qdirectfbinput.h +++ /dev/null @@ -1,63 +0,0 @@ -#ifndef QDIRECTFBINPUT_H -#define QDIRECTFBINPUT_H - -#include -#include -#include -#include -#include -#include -#include - -#include - -class InputSocketWaiter : public QThread -{ - Q_OBJECT -public: - InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent); - virtual ~InputSocketWaiter(); - void continueWaitingForEvents(); -protected: - void run(); -signals: - void newEvent(); -private: - IDirectFBEventBuffer *m_eventBuffer; - bool m_shouldStop; - QMutex m_cleanupMutex; - QWaitCondition m_finishedProcessingEvents; -}; - -class QDirectFbInput : public QObject -{ - Q_OBJECT -public: - static QDirectFbInput *instance(); - void addWindow(DFBWindowID id, QWidget *tlw); - void removeWindow(QWidget *tlw); - -public slots: - void handleEvents(); - void applicationEnd(); - -private: - QDirectFbInput(); - - void handleMouseEvents(const DFBEvent &event); - void handleWheelEvent(const DFBEvent &event); - void handleKeyEvents(const DFBEvent &event); - void handleEnterLeaveEvents(const DFBEvent &event); - IDirectFB *dfbInterface; - IDirectFBDisplayLayer *dfbDisplayLayer; - IDirectFBEventBuffer *eventBuffer; - - QHashtlwMap; - - inline QPoint globalPoint(const DFBEvent &event) const; - - InputSocketWaiter *m_inputHandler; - -}; - -#endif // QDIRECTFBINPUT_H diff --git a/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.cpp deleted file mode 100644 index 212f3a9..0000000 --- a/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ /dev/null @@ -1,118 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_minimaldfb.h" -#include "qwindowsurface_minimaldfb.h" -#include "qblitter_directfb.h" -#include "qdirectfbconvenience.h" -#include "qdirectfbcursor.h" - -#include -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(int display) - :QGraphicsSystemScreen() -{ - m_layer = QDirectFbConvenience::dfbDisplayLayer(display); - m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); - - DFBDisplayLayerConfig config; - m_layer->GetConfiguration(m_layer, &config); - - m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); - m_geometry = QRect(0,0,config.width,config.height); - const int dpi = 72; - const qreal inch = 25.4; - m_depth = 32; - m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); - - cursor = new QDirectFBCursor(this); -} - -QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen() -{ -} - -QDirectFbGraphicsSystem::QDirectFbGraphicsSystem() -{ - const QStringList args = QCoreApplication::arguments(); - int argc = args.size(); - char **argv = new char*[argc]; - - for (int i = 0; i < argc; ++i) - argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); - - DFBResult result = DirectFBInit(&argc, &argv); - if (result != DFB_OK) { - DirectFBError("QDirectFBScreen: error initializing DirectFB", - result); - } - delete[] argv; - - mPrimaryScreen = new QDirectFbGraphicsSystemScreen(0); - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QDirectFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - if (type == QPixmapData::BitmapType) - return new QRasterPixmapData(type); - else - return new QBlittablePixmapData(type); -} - -QWindowSurface *QDirectFbGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - return new QDirectFbWindowSurface (widget); -} - -QBlittable *QDirectFbGraphicsSystem::createBlittable(const QSize &size) const -{ - return new QDirectFbBlitter(size); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.h deleted file mode 100644 index 27bddfb..0000000 --- a/src/plugins/platforms/minimaldfb/qgraphicssystem_minimaldfb.h +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_MINIMAL_H -#define QGRAPHICSSYSTEM_MINIMAL_H - -#include "qdirectfbinput.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QDirectFBCursor; - -class QDirectFbGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QDirectFbGraphicsSystemScreen(int display); - ~QDirectFbGraphicsSystemScreen(); - - QRect geometry() const { return m_geometry; } - int depth() const { return m_depth; } - QImage::Format format() const { return m_format; } - QSize physicalSize() const { return m_physicalSize; } - -public: - QRect m_geometry; - int m_depth; - QImage::Format m_format; - QSize m_physicalSize; - - IDirectFBDisplayLayer *m_layer; - -private: - QDirectFBCursor * cursor; - -}; - -class QDirectFbGraphicsSystem : public QGraphicsSystem -{ -public: - QDirectFbGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - QBlittable *createBlittable(const QSize &size) const; - - QList screens() const { return mScreens; } - - - -private: - QDirectFbGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.cpp deleted file mode 100644 index 68d5aa0..0000000 --- a/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_minimaldfb.h" -#include "qgraphicssystem_minimaldfb.h" -#include "qblitter_directfb.h" -#include "qdirectfbconvenience.h" -#include - -#include - -QT_BEGIN_NAMESPACE - -QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) - : QWindowSurface(window), m_pixmap(0), m_pmdata(0), - m_dfbWindow(0), m_dfbSurface(0) -{ - window->setWindowSurface(this); - - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); - DFBDisplayLayerConfig layerConfig; - layer->GetConfiguration(layer,&layerConfig); - - DFBWindowDescription description; - memset(&description,0,sizeof(DFBWindowDescription)); - description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS -#if DIRECTFB_MINOR_VERSION >= 1 - |DWDESC_OPTIONS -#endif - |DWDESC_CAPS); - description.width = window->rect().width(); - description.height = window->rect().height(); - description.posx = window->rect().x(); - description.posy = window->rect().y(); - - if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED) - description.surface_caps = DSCAPS_PREMULTIPLIED; - description.pixelformat = layerConfig.pixelformat; - -#if DIRECTFB_MINOR_VERSION >= 1 - description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); -#endif - description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); - description.surface_caps = DSCAPS_PREMULTIPLIED; - - DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); - if (result != DFB_OK) { - DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); - } - - DFBWindowID id; - m_dfbWindow->GetID(m_dfbWindow, &id); - QDirectFbInput::instance()->addWindow(id,window); - - m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); - - QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface); - m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); - m_pmdata->setBlittable(blitter); - m_pixmap = new QPixmap(m_pmdata); -} - -QDirectFbWindowSurface::~QDirectFbWindowSurface() -{ - QDirectFbInput::instance()->removeWindow(this->window()); - m_dfbWindow->Destroy(m_dfbWindow); -} - -QPaintDevice *QDirectFbWindowSurface::paintDevice() -{ - return m_pixmap; -} - -void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - m_pmdata->blittable()->unlock(); - - const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); - m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); - - QVector rects = region.rects(); - for (int i = 0 ; i < rects.size(); i++) { - const QRect rect = rects.at(i); - DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; - m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); - } -} - -void QDirectFbWindowSurface::setGeometry(const QRect &rect) -{ - m_pmdata->blittable()->unlock(); - - QWindowSurface::setGeometry(rect); - m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), - rect.width(), rect.height()); - - //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable - m_dfbSurface->AddRef(m_dfbSurface); - QDirectFbBlitter *blitter = new QDirectFbBlitter(rect.size(),m_dfbSurface); - m_pmdata->setBlittable(blitter); -} - -static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) -{ - const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() }; - surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy); - const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy }; - surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT)); -} - -bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - m_pmdata->blittable()->unlock(); - - if (!m_dfbSurface || area.isEmpty()) - return false; - m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); - if (area.rectCount() == 1) { - scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy); - } else { - const QVector rects = area.rects(); - const int n = rects.size(); - for (int i=0; iblittable()->unlock(); - - if (visible) { - int x = this->geometry().x(); - int y = this->geometry().y(); - m_dfbWindow->MoveTo(m_dfbWindow,x,y); - } else { - IDirectFBDisplayLayer *displayLayer; - QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); - - DFBDisplayLayerConfig config; - displayLayer->GetConfiguration(displayLayer,&config); - m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); - } -} - -Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags flags) -{ - switch (flags & Qt::WindowType_Mask) { - case Qt::ToolTip: { - DFBWindowOptions options; - m_dfbWindow->GetOptions(m_dfbWindow,&options); - options = DFBWindowOptions(options | DWOP_GHOST); - m_dfbWindow->SetOptions(m_dfbWindow,options); - break; } - default: - break; - } - - m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); - return flags; -} - -void QDirectFbWindowSurface::raise() -{ - m_dfbWindow->RaiseToTop(m_dfbWindow); -} - -void QDirectFbWindowSurface::lower() -{ - m_dfbWindow->LowerToBottom(m_dfbWindow); -} - -WId QDirectFbWindowSurface::winId() const -{ - DFBWindowID id; - m_dfbWindow->GetID(m_dfbWindow, &id); - return WId(id); -} - - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.h deleted file mode 100644 index ca34cbf..0000000 --- a/src/plugins/platforms/minimaldfb/qwindowsurface_minimaldfb.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_MINIMAL_H -#define QWINDOWSURFACE_MINIMAL_H - -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -class QDirectFbGraphicsSystemScreen; - -class QDirectFbWindowSurface : public QWindowSurface -{ -public: - QDirectFbWindowSurface(QWidget *window); - ~QDirectFbWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - - void setVisible(bool visible); - Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - - void raise(); - void lower(); - - WId winId() const; - -private: - void lockSurfaceToImage(); - - QPixmap *m_pixmap; - QBlittablePixmapData *m_pmdata; - - IDirectFBWindow *m_dfbWindow; - IDirectFBSurface *m_dfbSurface; -}; - -QT_END_NAMESPACE - -#endif -- cgit v0.12 From 7cb41f111706542da7e5391c99720acee6d2ac43 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Wed, 31 Mar 2010 12:32:15 +0200 Subject: Stub out QtOpenGL on Lighthouse & get it compiling --- config.tests/unix/opengldesktop/opengldesktop.cpp | 52 +++++ config.tests/unix/opengldesktop/opengldesktop.pro | 9 + configure | 77 +++++++- mkspecs/common/qws.conf | 4 - src/opengl/opengl.pro | 12 ++ src/opengl/qgl.cpp | 2 +- src/opengl/qgl_lite.cpp | 227 ++++++++++++++++++++++ src/opengl/qglpixelbuffer_p.h | 5 + src/opengl/qglpixelbuffer_stub.cpp | 84 ++++++++ 9 files changed, 457 insertions(+), 15 deletions(-) create mode 100644 config.tests/unix/opengldesktop/opengldesktop.cpp create mode 100644 config.tests/unix/opengldesktop/opengldesktop.pro create mode 100644 src/opengl/qgl_lite.cpp create mode 100644 src/opengl/qglpixelbuffer_stub.cpp diff --git a/config.tests/unix/opengldesktop/opengldesktop.cpp b/config.tests/unix/opengldesktop/opengldesktop.cpp new file mode 100644 index 0000000..969767c --- /dev/null +++ b/config.tests/unix/opengldesktop/opengldesktop.cpp @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main(int, char **) +{ + glBegin(GL_TRIANGLES); + glVertex2f(20.0f, 10.0f); + glVertex2f(10.0f, 30.0f); + glVertex2f(20.0f, 50.0f); + glEnd(); + return 0; +} diff --git a/config.tests/unix/opengldesktop/opengldesktop.pro b/config.tests/unix/opengldesktop/opengldesktop.pro new file mode 100644 index 0000000..ac70ca3 --- /dev/null +++ b/config.tests/unix/opengldesktop/opengldesktop.pro @@ -0,0 +1,9 @@ +SOURCES = opengldesktop.cpp +INCLUDEPATH += $$QMAKE_INCDIR_OPENGL + +for(p, QMAKE_LIBDIR_OPENGL) { + exists($$p):LIBS += -L$$p +} + +CONFIG -= qt +LIBS += $$QMAKE_LIBS_OPENGL diff --git a/configure b/configure index b27d6dd..ffaa498 100755 --- a/configure +++ b/configure @@ -5560,14 +5560,68 @@ if [ "$PLATFORM_MAC" = "yes" ]; then fi fi + +if [ "$PLATFORM_EMBLITE" = "yes" ]; then + # auto-detect OpenGL support (es1 = OpenGL ES 1.x Common, es2 = OpenGL ES 2.x) + if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengldesktop "OpenGL" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then + CFG_OPENGL=desktop + elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles2 "OpenGL ES 2.x" $L_FLAGS $I_FLAGS $l_FLAGS; then + CFG_OPENGL=es2 + elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles1 "OpenGL ES 1.x" $L_FLAGS $I_FLAGS $l_FLAGS; then + CFG_OPENGL=es1 + else + if [ "$CFG_OPENGL" = "yes" ]; then + echo "All the OpenGL functionality tests failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + CFG_OPENGL=no + fi + elif [ "$CFG_OPENGL" = "es1" ]; then + # OpenGL ES 1.x + "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles1 "OpenGL ES 1.x" $L_FLAGS $I_FLAGS $l_FLAGS + if [ $? != "0" ]; then + echo "The OpenGL ES 1.x functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL_ES1, QMAKE_LIBDIR_OPENGL_ES1 and QMAKE_LIBS_OPENGL_ES1 in" + echo " ${XQMAKESPEC}." + exit 1 + fi + elif [ "$CFG_OPENGL" = "es2" ]; then + #OpenGL ES 2.x + "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengles2 "OpenGL ES 2.x" $L_FLAGS $I_FLAGS $l_FLAGS + if [ $? != "0" ]; then + echo "The OpenGL ES 2.0 functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL_ES2, QMAKE_LIBDIR_OPENGL_ES2 and QMAKE_LIBS_OPENGL_ES2 in" + echo " ${XQMAKESPEC}." + exit 1 + fi + elif [ "$CFG_OPENGL" = "desktop" ]; then + # Desktop OpenGL support + "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengldesktop "OpenGL" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS + if [ $? != "0" ]; then + echo "The OpenGL functionality test failed!" + echo " You might need to modify the include and library search paths by editing" + echo " QMAKE_INCDIR_OPENGL, QMAKE_LIBDIR_OPENGL and QMAKE_LIBS_OPENGL in" + echo " ${XQMAKESPEC}." + exit 1 + fi + fi +fi + + # QWS -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" ]; then # auto-detect OpenGL support (es1 = OpenGL ES 1.x Common, es2 = OpenGL ES 2.x) if [ "$CFG_OPENGL" = "yes" ]; then 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!" @@ -5578,22 +5632,22 @@ if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "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 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 elif [ "$CFG_OPENGL" = "desktop" ]; then @@ -5601,6 +5655,9 @@ if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then echo "Desktop OpenGL support is not avaliable on Qt for Embedded Linux" exit 1 fi +fi + +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then # screen drivers for screen in ${CFG_GFX_ON} ${CFG_GFX_PLUGIN}; do diff --git a/mkspecs/common/qws.conf b/mkspecs/common/qws.conf index 96341a7..2e8ae2c 100644 --- a/mkspecs/common/qws.conf +++ b/mkspecs/common/qws.conf @@ -12,9 +12,5 @@ QMAKE_INCREMENTAL_STYLE = sublib # modifications to linux.conf QMAKE_INCDIR_X11 = QMAKE_LIBDIR_X11 = -QMAKE_INCDIR_OPENGL = -QMAKE_LIBDIR_OPENGL = QMAKE_LIBS_X11 = QMAKE_LIBS_X11SM = -QMAKE_LIBS_OPENGL = -QMAKE_LIBS_OPENGL_QT = diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index c111a8e..60d4b17 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -76,6 +76,18 @@ SOURCES += qgl.cpp \ } +embedded_lite { + SOURCES += qgl_lite.cpp + + # If we have EGL, use the EGL implementation of QGLPixelBuffer, otherwise we just provide + # a stubbed out one. PBuffers aren't too interesting anyway. + contains(QT_CONFIG, egl) { + SOURCES += qglpixelbuffer_egl.cpp + } else { + SOURCES += qglpixelbuffer_stub.cpp + } +} + x11 { contains(QT_CONFIG, opengles1)|contains(QT_CONFIG, opengles2) { SOURCES += qgl_x11egl.cpp \ diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index e0030ad..7fcf390 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -95,7 +95,7 @@ QT_BEGIN_NAMESPACE -#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) +#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_LITE) QGLExtensionFuncs QGLContextPrivate::qt_extensionFuncs; #endif diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp new file mode 100644 index 0000000..40417b1 --- /dev/null +++ b/src/opengl/qgl_lite.cpp @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgl.h" +#include "qgl_p.h" + +#include "qmap.h" +#include "qapplication.h" +#include "qcolormap.h" +#include "qdesktopwidget.h" +#include "qpixmap.h" +#include "qhash.h" +#include "qlibrary.h" +#include "qdebug.h" +#include + +QT_BEGIN_NAMESPACE + +bool QGLFormat::hasOpenGL() +{ + return true; // IMPLEMENT ME PROPERLY! +} + + + +bool QGLContext::chooseContext(const QGLContext* shareContext) +{ + // IMPLEMENT ME + return false; +} + + +void QGLContext::reset() +{ + Q_D(QGLContext); + if (!d->valid) + return; + d->cleanup(); + doneCurrent(); + + // IMPLEMENT ME + + d->crWin = false; + d->sharing = false; + d->valid = false; + d->transpColor = QColor(); + d->initDone = false; + QGLContextGroup::removeShare(this); +} + + +void QGLContext::makeCurrent() +{ + // IMPLEMENT ME +} + +void QGLContext::doneCurrent() +{ + // IMPLEMENT ME +} + + +void QGLContext::swapBuffers() const +{ + // IMPLEMENT ME +} + +void *QGLContext::getProcAddress(const QString &proc) const +{ + // IMPLEMENT ME +} + +void QGLWidgetPrivate::init(QGLContext *context, const QGLWidget *shareWidget) +{ + // IMPLEMENT ME +} + + +void QGLWidget::setContext(QGLContext *context, + const QGLContext* shareContext, + bool deleteOldContext) +{ + // IMPLEMENT ME +} + + + + + + + +bool QGLFormat::hasOpenGLOverlays() +{ + return false; +} + +QColor QGLContext::overlayTransparentColor() const +{ + return QColor(); // Invalid color +} + +uint QGLContext::colorIndex(const QColor& c) const +{ + return 0; +} + +void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase) +{ + Q_UNUSED(fnt); + Q_UNUSED(listBase); +} + +/* + QGLTemporaryContext implementation +*/ +class QGLTemporaryContextPrivate +{ +public: + QGLWidget *widget; +}; + +QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) + : d(new QGLTemporaryContextPrivate) +{ + d->widget = new QGLWidget; + d->widget->makeCurrent(); +} + +QGLTemporaryContext::~QGLTemporaryContext() +{ + delete d->widget; +} + + +bool QGLWidgetPrivate::renderCxPm(QPixmap* pm) +{ + return false; +} + +/*! \internal + Free up any allocated colormaps. This fn is only called for + top-level widgets. +*/ +void QGLWidgetPrivate::cleanupColormaps() +{ +} + +void QGLWidget::setMouseTracking(bool enable) +{ + Q_UNUSED(enable); +} + +void QGLWidget::resizeEvent(QResizeEvent *) +{ + Q_D(QGLWidget); + if (!isValid()) + return; + makeCurrent(); + if (!d->glcx->initialized()) + glInit(); + resizeGL(width(), height()); +} + +const QGLContext* QGLWidget::overlayContext() const +{ + return 0; +} + +void QGLWidget::makeOverlayCurrent() +{ +} + + +void QGLWidget::updateOverlayGL() +{ +} + +const QGLColormap & QGLWidget::colormap() const +{ + Q_D(const QGLWidget); + return d->cmap; +} + +void QGLWidget::setColormap(const QGLColormap & c) +{ + Q_UNUSED(c); +} + +QT_END_NAMESPACE diff --git a/src/opengl/qglpixelbuffer_p.h b/src/opengl/qglpixelbuffer_p.h index c85dc5a..bff35f5 100644 --- a/src/opengl/qglpixelbuffer_p.h +++ b/src/opengl/qglpixelbuffer_p.h @@ -200,6 +200,11 @@ public: QEglContext *ctx; int textureFormat; #endif +#if defined(Q_WS_LITE) + // Stubs + int pbuf; + int ctx; +#endif }; QT_END_NAMESPACE diff --git a/src/opengl/qglpixelbuffer_stub.cpp b/src/opengl/qglpixelbuffer_stub.cpp new file mode 100644 index 0000000..2caef6b --- /dev/null +++ b/src/opengl/qglpixelbuffer_stub.cpp @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qglpixelbuffer.h" +#include "qglpixelbuffer_p.h" + +#include +#include + +QT_BEGIN_NAMESPACE + +bool QGLPixelBufferPrivate::init(const QSize &size, const QGLFormat &f, QGLWidget *shareWidget) +{ + Q_UNUSED(size); + Q_UNUSED(f); + Q_UNUSED(shareWidget); + return false; +} + +bool QGLPixelBufferPrivate::cleanup() +{ + return false; +} + +bool QGLPixelBuffer::bindToDynamicTexture(GLuint texture_id) +{ + Q_UNUSED(texture_id); + return false; +} + +void QGLPixelBuffer::releaseFromDynamicTexture() +{ +} + +GLuint QGLPixelBuffer::generateDynamicTexture() const +{ + return 0; +} + +bool QGLPixelBuffer::hasOpenGLPbuffers() +{ + return false; +} + +QT_END_NAMESPACE -- cgit v0.12 From c1cb9ed008ab489f209d0a628d41d62d75a5bab2 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 31 Mar 2010 13:15:09 +0200 Subject: Port "testlite" to the new plugin API --- src/plugins/platforms/testlite/main.cpp | 16 +-- .../testlite/qgraphicssystem_testlite.cpp | 121 --------------------- .../platforms/testlite/qgraphicssystem_testlite.h | 91 ---------------- .../testlite/qplatformintegration_testlite.cpp | 121 +++++++++++++++++++++ .../testlite/qplatformintegration_testlite.h | 92 ++++++++++++++++ .../platforms/testlite/qwindowsurface_testlite.cpp | 14 +-- .../platforms/testlite/qwindowsurface_testlite.h | 12 +- src/plugins/platforms/testlite/testlite.pro | 6 +- 8 files changed, 237 insertions(+), 236 deletions(-) delete mode 100644 src/plugins/platforms/testlite/qgraphicssystem_testlite.cpp delete mode 100644 src/plugins/platforms/testlite/qgraphicssystem_testlite.h create mode 100644 src/plugins/platforms/testlite/qplatformintegration_testlite.cpp create mode 100644 src/plugins/platforms/testlite/qplatformintegration_testlite.h diff --git a/src/plugins/platforms/testlite/main.cpp b/src/plugins/platforms/testlite/main.cpp index 28caea7..c1759ef 100644 --- a/src/plugins/platforms/testlite/main.cpp +++ b/src/plugins/platforms/testlite/main.cpp @@ -39,33 +39,33 @@ ** ****************************************************************************/ -#include -#include "qgraphicssystem_testlite.h" +#include +#include "qplatformintegration_testlite.h" QT_BEGIN_NAMESPACE -class QTestLiteGraphicsSystemPlugin : public QGraphicsSystemPlugin +class QTestLiteIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QGraphicsSystem *create(const QString&); + QPlatformIntegration *create(const QString&); }; -QStringList QTestLiteGraphicsSystemPlugin::keys() const +QStringList QTestLiteIntegrationPlugin::keys() const { QStringList list; list << "TestLite"; return list; } -QGraphicsSystem* QTestLiteGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration* QTestLiteIntegrationPlugin::create(const QString& system) { if (system.toLower() == "testlite") - return new QTestLiteGraphicsSystem; + return new QTestLiteIntegration; return 0; } -Q_EXPORT_PLUGIN2(testlite, QTestLiteGraphicsSystemPlugin) +Q_EXPORT_PLUGIN2(testlite, QTestLiteIntegrationPlugin) QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qgraphicssystem_testlite.cpp b/src/plugins/platforms/testlite/qgraphicssystem_testlite.cpp deleted file mode 100644 index 92e0ebc..0000000 --- a/src/plugins/platforms/testlite/qgraphicssystem_testlite.cpp +++ /dev/null @@ -1,121 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_testlite.h" -#include "qwindowsurface_testlite.h" -#include -#include - -#include - - -#include "x11util.h" - -QT_BEGIN_NAMESPACE - -class MyCursor : QGraphicsSystemCursor -{ -public: - MyCursor(QGraphicsSystemScreen *screen) : QGraphicsSystemCursor(screen) {} - - void changeCursor(QCursor * cursor, QWidget * widget) { - QTestLiteWindowSurface *ws = 0; - if (widget) { - QWidget *window = widget->window(); - ws = static_cast(window->windowSurface()); - } else { - // No X11 cursor control when there is no widget under the cursor - return; - } - - //qDebug() << "changeCursor" << widget << ws; - if (!ws) - return; - - ws->setCursor(cursor); - } -}; - - -QTestLiteGraphicsSystem::QTestLiteGraphicsSystem() -{ - - xd = new MyDisplay; - - mPrimaryScreen = new QTestLiteGraphicsSystemScreen(); - - mPrimaryScreen->mGeometry = QRect - (0, 0, xd->width, xd->height); - mPrimaryScreen->mDepth = 32; - mPrimaryScreen->mFormat = QImage::Format_RGB32; - mPrimaryScreen->mPhysicalSize = - QSize(xd->physicalWidth, xd->physicalHeight); - - mScreens.append(mPrimaryScreen); - - - (void)new MyCursor(mPrimaryScreen); - -} - -QPixmapData *QTestLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QTestLiteGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. - return new QTestLiteWindowSurface - (const_cast(this), mPrimaryScreen, widget); -} - - -QPixmap QTestLiteGraphicsSystem::grabWindow(WId window, int x, int y, int width, int height) const -{ - QImage img = xd->grabWindow(window, x, y, width, height); - return QPixmap::fromImage(img); -} - - - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qgraphicssystem_testlite.h b/src/plugins/platforms/testlite/qgraphicssystem_testlite.h deleted file mode 100644 index b2cd496..0000000 --- a/src/plugins/platforms/testlite/qgraphicssystem_testlite.h +++ /dev/null @@ -1,91 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_TESTLITE_H -#define QGRAPHICSSYSTEM_TESTLITE_H - -#include - -QT_BEGIN_NAMESPACE - -class MyDisplay; - -class QTestLiteGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QTestLiteGraphicsSystemScreen() - : mDepth(16), mFormat(QImage::Format_RGB16) {} - ~QTestLiteGraphicsSystemScreen() {} - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - -public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; -}; - -class QTestLiteGraphicsSystem : public QGraphicsSystem -{ -public: - QTestLiteGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QPixmap grabWindow(WId window, int x, int y, int width, int height) const; - - QList screens() const { return mScreens; } - - MyDisplay *xd; - -private: - QTestLiteGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp new file mode 100644 index 0000000..6811e2e --- /dev/null +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp @@ -0,0 +1,121 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformintegration_testlite.h" +#include "qwindowsurface_testlite.h" +#include +#include + +#include + + +#include "x11util.h" + +QT_BEGIN_NAMESPACE + +class MyCursor : QGraphicsSystemCursor +{ +public: + MyCursor(QPlatformScreen *screen) : QGraphicsSystemCursor(screen) {} + + void changeCursor(QCursor * cursor, QWidget * widget) { + QTestLiteWindowSurface *ws = 0; + if (widget) { + QWidget *window = widget->window(); + ws = static_cast(window->windowSurface()); + } else { + // No X11 cursor control when there is no widget under the cursor + return; + } + + //qDebug() << "changeCursor" << widget << ws; + if (!ws) + return; + + ws->setCursor(cursor); + } +}; + + +QTestLiteIntegration::QTestLiteIntegration() +{ + + xd = new MyDisplay; + + mPrimaryScreen = new QTestLiteScreen(); + + mPrimaryScreen->mGeometry = QRect + (0, 0, xd->width, xd->height); + mPrimaryScreen->mDepth = 32; + mPrimaryScreen->mFormat = QImage::Format_RGB32; + mPrimaryScreen->mPhysicalSize = + QSize(xd->physicalWidth, xd->physicalHeight); + + mScreens.append(mPrimaryScreen); + + + (void)new MyCursor(mPrimaryScreen); + +} + +QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + return new QTestLiteWindowSurface + (const_cast(this), mPrimaryScreen, widget); +} + + +QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, int height) const +{ + QImage img = xd->grabWindow(window, x, y, width, height); + return QPixmap::fromImage(img); +} + + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.h b/src/plugins/platforms/testlite/qplatformintegration_testlite.h new file mode 100644 index 0000000..c540c48 --- /dev/null +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_TESTLITE_H +#define QGRAPHICSSYSTEM_TESTLITE_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class MyDisplay; + +class QTestLiteScreen : public QPlatformScreen +{ +public: + QTestLiteScreen() + : mDepth(16), mFormat(QImage::Format_RGB16) {} + ~QTestLiteScreen() {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; +}; + +class QTestLiteIntegration : public QPlatformIntegration +{ +public: + QTestLiteIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QWindowSurface *createWindowSurface(QWidget *widget) const; + + QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + + QList screens() const { return mScreens; } + + MyDisplay *xd; + +private: + QTestLiteScreen *mPrimaryScreen; + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp index c54f6eb..e2574f9 100644 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include "qwindowsurface_testlite.h" -#include "qgraphicssystem_testlite.h" +#include "qplatformintegration_testlite.h" #include #include @@ -50,16 +50,16 @@ QT_BEGIN_NAMESPACE QTestLiteWindowSurface::QTestLiteWindowSurface - (QTestLiteGraphicsSystem *graphicsSystem, - QTestLiteGraphicsSystemScreen *screen, QWidget *window) + (QTestLiteIntegration *platformIntegration, + QTestLiteScreen *screen, QWidget *window) : QWindowSurface(window), - mGraphicsSystem(graphicsSystem), + mPlatformIntegration(platformIntegration), mScreen(screen), xw(0) { - xw = new MyWindow(graphicsSystem->xd, 0,0,300,300); + xw = new MyWindow(platformIntegration->xd, 0,0,300,300); xw->windowSurface = this; // qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; @@ -640,13 +640,13 @@ WId QTestLiteWindowSurface::winId() const void QTestLiteWindowSurface::raise() { WId window = winId(); - XRaiseWindow(mGraphicsSystem->xd->display, window); + XRaiseWindow(mPlatformIntegration->xd->display, window); } void QTestLiteWindowSurface::lower() { WId window = winId(); - XLowerWindow(mGraphicsSystem->xd->display, window); + XLowerWindow(mPlatformIntegration->xd->display, window); } void QTestLiteWindowSurface::setWindowTitle(const QString &title) diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.h b/src/plugins/platforms/testlite/qwindowsurface_testlite.h index 0c4df1a..ffd2d3a 100644 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.h +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.h @@ -48,15 +48,15 @@ QT_BEGIN_NAMESPACE class MyWindow; -class QTestLiteGraphicsSystem; -class QTestLiteGraphicsSystemScreen; +class QTestLiteIntegration; +class QTestLiteScreen; class QTestLiteWindowSurface : public QWindowSurface { public: QTestLiteWindowSurface - (QTestLiteGraphicsSystem *graphicsSystem, - QTestLiteGraphicsSystemScreen *screen, QWidget *window); + (QTestLiteIntegration *platformIntegration, + QTestLiteScreen *screen, QWidget *window); ~QTestLiteWindowSurface(); QPaintDevice *paintDevice(); @@ -85,8 +85,8 @@ public: void setCursor(QCursor * cursor); private: - QTestLiteGraphicsSystem *mGraphicsSystem; - QTestLiteGraphicsSystemScreen *mScreen; + QTestLiteIntegration *mPlatformIntegration; + QTestLiteScreen *mScreen; Qt::WindowFlags window_flags; MyWindow *xw; }; diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro index d483f45..442dd68 100644 --- a/src/plugins/platforms/testlite/testlite.pro +++ b/src/plugins/platforms/testlite/testlite.pro @@ -1,10 +1,10 @@ TARGET = qtestlitegraphicssystem include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms -SOURCES = main.cpp qgraphicssystem_testlite.cpp qwindowsurface_testlite.cpp -HEADERS = qgraphicssystem_testlite.h qwindowsurface_testlite.h +SOURCES = main.cpp qplatformintegration_testlite.cpp qwindowsurface_testlite.cpp +HEADERS = qplatformintegration_testlite.h qwindowsurface_testlite.h HEADERS += x11util.h -- cgit v0.12 From fcec5d444f1e37e7b53ab503fa46b4d7f7d90b41 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Tue, 6 Apr 2010 14:45:51 +0200 Subject: Introduce QPlatformGLContext to enable QtOpenGL in Lighthouse This patch basically takes the stubbed-out code and makes it call into the new abstract base class. --- src/gui/kernel/qplatformintegration_lite.cpp | 12 ++++ src/gui/kernel/qplatformintegration_lite.h | 10 ++++ src/opengl/opengl.pro | 1 + src/opengl/qgl.cpp | 4 +- src/opengl/qgl_lite.cpp | 85 ++++++++++++++++++---------- src/opengl/qgl_p.h | 8 ++- src/opengl/qplatformglcontext_lite.h | 70 +++++++++++++++++++++++ 7 files changed, 158 insertions(+), 32 deletions(-) create mode 100644 src/opengl/qplatformglcontext_lite.h diff --git a/src/gui/kernel/qplatformintegration_lite.cpp b/src/gui/kernel/qplatformintegration_lite.cpp index f9adc14..71beded 100644 --- a/src/gui/kernel/qplatformintegration_lite.cpp +++ b/src/gui/kernel/qplatformintegration_lite.cpp @@ -56,4 +56,16 @@ QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, in return QPixmap(); } +#ifndef QT_NO_OPENGL +bool QPlatformIntegration::hasOpenGL() const +{ + return false; +} + +QPlatformGLContext * QPlatformIntegration::createGLContext() +{ + return 0; +} +#endif + QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h index 543b7bc..9125bd1 100644 --- a/src/gui/kernel/qplatformintegration_lite.h +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -51,6 +51,10 @@ QT_BEGIN_NAMESPACE QT_MODULE(Gui) +#ifndef QT_NO_OPENGL +class QPlatformGLContext; +#endif + class Q_GUI_EXPORT QPlatformIntegration { public: @@ -64,6 +68,12 @@ public: // Window System functions virtual QList screens() const = 0; virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + +// OpenGL Integration functions +#ifndef QT_NO_OPENGL + virtual bool hasOpenGL() const; + virtual QPlatformGLContext * createGLContext(); +#endif }; QT_END_NAMESPACE diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 60d4b17..cebb677 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -78,6 +78,7 @@ SOURCES += qgl.cpp \ embedded_lite { SOURCES += qgl_lite.cpp + HEADERS += qplatformglcontext_lite.h # If we have EGL, use the EGL implementation of QGLPixelBuffer, otherwise we just provide # a stubbed out one. PBuffers aren't too interesting anyway. diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 7fcf390..1e522d6 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1582,7 +1582,9 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) # endif vi = 0; #endif -#if defined(QT_OPENGL_ES) +#if defined(Q_WS_LITE) + platformContext = 0; +#elif defined(QT_OPENGL_ES) ownsEglContext = false; eglContext = 0; eglSurface = EGL_NO_SURFACE; diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index 40417b1..a1d9bb8 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -39,35 +39,33 @@ ** ****************************************************************************/ +#include +#include +#include + +#include + #include "qgl.h" #include "qgl_p.h" +#include "qplatformglcontext_lite.h" -#include "qmap.h" -#include "qapplication.h" -#include "qcolormap.h" -#include "qdesktopwidget.h" -#include "qpixmap.h" -#include "qhash.h" -#include "qlibrary.h" -#include "qdebug.h" -#include QT_BEGIN_NAMESPACE bool QGLFormat::hasOpenGL() { - return true; // IMPLEMENT ME PROPERLY! + return QApplicationPrivate::platformIntegration()->hasOpenGL(); } - - bool QGLContext::chooseContext(const QGLContext* shareContext) { - // IMPLEMENT ME + Q_D(QGLContext); + d->platformContext = QApplicationPrivate::platformIntegration()->createGLContext(); + d->platformContext->create(d->paintDevice, d->glFormat, shareContext ? shareContext->d_func()->platformContext : 0); + return false; } - void QGLContext::reset() { Q_D(QGLContext); @@ -76,7 +74,10 @@ void QGLContext::reset() d->cleanup(); doneCurrent(); - // IMPLEMENT ME + if (d->platformContext) { + delete d->platformContext; + d->platformContext = 0; + } d->crWin = false; d->sharing = false; @@ -86,46 +87,70 @@ void QGLContext::reset() QGLContextGroup::removeShare(this); } - void QGLContext::makeCurrent() { - // IMPLEMENT ME + Q_D(QGLContext); + d->platformContext->makeCurrent(); } void QGLContext::doneCurrent() { - // IMPLEMENT ME + Q_D(QGLContext); + d->platformContext->doneCurrent(); } - void QGLContext::swapBuffers() const { - // IMPLEMENT ME -} - -void *QGLContext::getProcAddress(const QString &proc) const -{ - // IMPLEMENT ME + Q_D(const QGLContext); + d->platformContext->swapBuffers(); } -void QGLWidgetPrivate::init(QGLContext *context, const QGLWidget *shareWidget) +void *QGLContext::getProcAddress(const QString &procName) const { - // IMPLEMENT ME + Q_D(const QGLContext); + return d->platformContext->getProcAddress(procName); } - void QGLWidget::setContext(QGLContext *context, const QGLContext* shareContext, bool deleteOldContext) { - // IMPLEMENT ME -} + Q_D(QGLWidget); + if (context == 0) { + qWarning("QGLWidget::setContext: Cannot set null context"); + return; + } + if (!context->deviceIsPixmap() && context->device() != this) { + qWarning("QGLWidget::setContext: Context must refer to this widget"); + return; + } + if (d->glcx) + d->glcx->doneCurrent(); + QGLContext* oldcx = d->glcx; + d->glcx = context; + // If the application has set WA_TranslucentBackground and not explicitly set + // the alpha buffer size to zero, modify the format so it have an alpha channel + QGLFormat& fmt = d->glcx->d_func()->glFormat; + if (testAttribute(Qt::WA_TranslucentBackground) && fmt.alphaBufferSize() == -1) + fmt.setAlphaBufferSize(1); + + bool success = false; + if (!d->glcx->isValid()) + success = !d->glcx->create(shareContext ? shareContext : oldcx); + + if (deleteOldContext) + delete oldcx; +} +void QGLWidgetPrivate::init(QGLContext *context, const QGLWidget *shareWidget) +{ + initContext(context, shareWidget); +} bool QGLFormat::hasOpenGLOverlays() { diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index a4d5cb7..f53b3e2 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -68,6 +68,10 @@ #include #endif +#if defined(Q_WS_LITE) +#include +#endif + QT_BEGIN_NAMESPACE class QGLContext; @@ -344,7 +348,9 @@ public: HBITMAP hbitmap; HDC hbitmap_hdc; #endif -#if defined(QT_OPENGL_ES) +#if defined(Q_WS_LITE) + QPlatformGLContext *platformContext; +#elif defined(QT_OPENGL_ES) bool ownsEglContext; QEglContext *eglContext; EGLSurface eglSurface; diff --git a/src/opengl/qplatformglcontext_lite.h b/src/opengl/qplatformglcontext_lite.h new file mode 100644 index 0000000..19a2074 --- /dev/null +++ b/src/opengl/qplatformglcontext_lite.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORM_GL_CONTEXT_H +#define QPLATFORM_GL_CONTEXT_H + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QPlatformGLContext +{ +public: + QPlatformGLContext(); + virtual ~QPlatformGLContext(); + + virtual bool create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) = 0; + + virtual void makeCurrent() = 0; + virtual void doneCurrent() = 0; + virtual void swapBuffers() = 0; + virtual void* getProcAddress(const QString& procName) = 0; + +}; + + +QT_END_NAMESPACE + +QT_END_HEADER + + +#endif // QPLATFORM_GL_INTEGRATION_P_H -- cgit v0.12 From c13076a30e5ae3d0f6795261ad00ca1eb73ad0b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 7 Apr 2010 16:13:19 +0200 Subject: Added QPlatformWindow --- src/gui/kernel/kernel.pri | 4 +- src/gui/kernel/qplatformintegration_lite.h | 2 +- src/gui/kernel/qplatformwindow_lite.cpp | 72 +++++++++++++++++++ src/gui/kernel/qplatformwindow_lite.h | 79 +++++++++++++++++++++ src/gui/kernel/qwidget.cpp | 38 ++++++++++ src/gui/kernel/qwidget.h | 6 ++ src/gui/kernel/qwidget_lite.cpp | 82 +++++++++++----------- src/gui/kernel/qwidget_p.h | 5 ++ src/gui/painting/painting.pri | 2 +- src/gui/painting/qbackingstore.cpp | 16 ++++- src/gui/painting/qgraphicssystem_lite.cpp | 3 +- src/gui/painting/qwindowsurface.cpp | 53 +++++--------- src/gui/painting/qwindowsurface_p.h | 16 ++--- .../minimal/qplatformintegration_minimal.cpp | 7 +- .../minimal/qplatformintegration_minimal.h | 2 +- .../platforms/minimal/qwindowsurface_minimal.cpp | 8 +-- .../platforms/minimal/qwindowsurface_minimal.h | 4 +- src/plugins/plugins.pro | 2 +- 18 files changed, 298 insertions(+), 103 deletions(-) create mode 100644 src/gui/kernel/qplatformwindow_lite.cpp create mode 100644 src/gui/kernel/qplatformwindow_lite.h diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index cf5ec92..049637f 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -207,6 +207,7 @@ embedded_lite { kernel/qplatformscreen_lite.h \ kernel/qplatformintegrationfactory_lite_p.h \ kernel/qplatformintegrationplugin_lite.h \ + kernel/qplatformwindow_lite.h SOURCES += \ kernel/qapplication_lite.cpp \ @@ -224,7 +225,8 @@ embedded_lite { kernel/qplatformintegration_lite.cpp \ kernel/qplatformscreen_lite.cpp \ kernel/qplatformintegrationfactory_lite.cpp \ - kernel/qplatformintegrationplugin_lite.cpp + kernel/qplatformintegrationplugin_lite.cpp \ + kernel/qplatformwindow_lite.cpp contains(QT_CONFIG, glib) { SOURCES += \ diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h index 9125bd1..389dcfb 100644 --- a/src/gui/kernel/qplatformintegration_lite.h +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -62,7 +62,7 @@ public: // GraphicsSystem functions virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; - virtual QWindowSurface *createWindowSurface(QWidget *widget) const = 0; + virtual void createWindowAndSurface(QPlatformWindow **window, QWindowSurface **surface, QWidget *widget, WId winId = 0) const = 0; virtual QBlittable *createBlittable(const QSize &size) const; // Window System functions diff --git a/src/gui/kernel/qplatformwindow_lite.cpp b/src/gui/kernel/qplatformwindow_lite.cpp new file mode 100644 index 0000000..ff1bf48 --- /dev/null +++ b/src/gui/kernel/qplatformwindow_lite.cpp @@ -0,0 +1,72 @@ +#include "qplatformwindow_lite.h" + +#include + +class QPlatformWindowPrivate +{ + QWidget *tlw; + QRect rect; + friend class QPlatformWindow; +}; + +QPlatformWindow::QPlatformWindow(QWidget *tlw) + : d_ptr(new QPlatformWindowPrivate) +{ + Q_D(QPlatformWindow); + d->tlw = tlw; + tlw->setPlatformWindow(this); +} + +QPlatformWindow::~QPlatformWindow() +{ +} + +QWidget *QPlatformWindow::widget() const +{ + Q_D(const QPlatformWindow); + return d->tlw; +} + +void QPlatformWindow::setGeometry(const QRect &rect) +{ + Q_D(QPlatformWindow); + d->rect = rect; +} + +QRect QPlatformWindow::geometry() const +{ + Q_D(const QPlatformWindow); + return d->rect; +} + +/*! +Reimplemented in subclasses to show the surface if \a visible is \c true, and hide it if \a visible is \c false. +*/ +void QPlatformWindow::setVisible(bool visible) +{ + Q_UNUSED(visible); +} +/*! +Requests setting the window flags of this surface to \a type. Returns the actual flags set. +*/ +Qt::WindowFlags QPlatformWindow::setWindowFlags(Qt::WindowFlags flags) +{ + Q_UNUSED(flags); + return Qt::Window; +} + +/*! + Returns the effective window flags for this surface. +*/ +Qt::WindowFlags QPlatformWindow::windowFlags() const +{ + return Qt::Window; +} + +WId QPlatformWindow::winId() const { return WId(0); } + +void QPlatformWindow::setWindowTitle(const QString &) {} + +void QPlatformWindow::raise() { qWarning("This plugin does not support raise()"); } + +void QPlatformWindow::lower() { qWarning("This plugin does not support lower()"); } diff --git a/src/gui/kernel/qplatformwindow_lite.h b/src/gui/kernel/qplatformwindow_lite.h new file mode 100644 index 0000000..3fa97b5 --- /dev/null +++ b/src/gui/kernel/qplatformwindow_lite.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QPLATFORMWINDOW_H +#define QPLATFORMWINDOW_H + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +#include + +class QPlatformWindowPrivate; + +class Q_GUI_EXPORT QPlatformWindow +{ + Q_DECLARE_PRIVATE(QPlatformWindow); +public: + QPlatformWindow(QWidget *tlw); + virtual ~QPlatformWindow(); + + QWidget *widget() const; + virtual void setGeometry(const QRect &rect); + virtual QRect geometry() const; + + virtual void setVisible(bool visible); + virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); + virtual Qt::WindowFlags windowFlags() const; + virtual WId winId() const; + + virtual void setWindowTitle(const QString &); + virtual void raise(); + virtual void lower(); + +protected: + QScopedPointer d_ptr; +}; + +QT_END_NAMESPACE + +QT_END_HEADER +#endif //QPLATFORMWINDOW_H diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 3ca7591..4bcec93 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -11836,6 +11836,44 @@ QWindowSurface *QWidget::windowSurface() const return bs ? bs->windowSurface : 0; } +/*! + \preliminary + + Sets the window to be the \a window specified. + The QWidget takes ownership of the \a surface. +*/ +void QWidget::setPlatformWindow(QPlatformWindow *window) +{ +#ifndef Q_BACKINGSTORE_SUBSURFACES + if (!isTopLevel()) + return; +#endif + + Q_D(QWidget); + + QTLWExtra *topData = d->topData(); + if (topData->platformWindow == window) + return; + + delete topData->platformWindow; + topData->platformWindow = window; +} + +/*! + \preliminary + + Returns the QPlatformWindow this widget will be drawn into. +*/ +QPlatformWindow *QWidget::platformWindow() const +{ + Q_D(const QWidget); + QTLWExtra *extra = d->maybeTopData(); + if (extra && extra->platformWindow) + return extra->platformWindow; + + return 0; +} + void QWidgetPrivate::getLayoutItemMargins(int *left, int *top, int *right, int *bottom) const { if (left) diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index e12148b..7dff703 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -94,6 +94,7 @@ class QHideEvent; class QInputContext; class QIcon; class QWindowSurface; +class QPlatformWindow; class QLocale; class QGraphicsProxyWidget; class QGraphicsEffect; @@ -625,6 +626,11 @@ public: void setWindowSurface(QWindowSurface *surface); QWindowSurface *windowSurface() const; +#if defined(Q_WS_LITE) + void setPlatformWindow(QPlatformWindow *window); + QPlatformWindow *platformWindow() const; +#endif + Q_SIGNALS: void customContextMenuRequested(const QPoint &pos); diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index add5592..7915d7f 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -39,26 +39,28 @@ ** ****************************************************************************/ -#include "qwidget.h" -#include "qevent.h" -#include "qapplication.h" -#include "private/qbackingstore_p.h" -#include "private/qwidget_p.h" -#include "private/qgraphicssystem_p.h" -#include "private/qapplication_p.h" -#include "qdesktopwidget.h" - -#include +#include "QtGui/qwidget.h" +#include "QtGui/qevent.h" +#include "QtGui/qapplication.h" +#include "QtGui/private/qbackingstore_p.h" +#include "QtGui/private/qwidget_p.h" +#include "QtGui/private/qgraphicssystem_p.h" +#include "QtGui/private/qapplication_p.h" +#include "QtGui/qdesktopwidget.h" +#include "QtGui/qplatformwindow_lite.h" + +#include QT_BEGIN_NAMESPACE static QPlatformScreen *qt_screenForWidget(const QWidget *w); -void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool /*destroyOldWindow*/) +void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyOldWindow) { Q_Q(QWidget); Q_UNUSED(window); Q_UNUSED(initializeWindow); + Q_UNUSED(destroyOldWindow); // XXX Qt::WindowFlags flags = data.window_flags; @@ -67,15 +69,16 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool /*destro return; // we only care about real toplevels QWindowSurface *surface = q->windowSurface(); + QPlatformWindow *platformWindow = q->platformWindow(); - if (!surface) - surface = createDefaultWindowSurface(); - + if (!surface) { + QApplicationPrivate::platformIntegration()->createWindowAndSurface(&platformWindow,&surface,q); + } Q_ASSERT(surface); - data.window_flags = surface->setWindowFlags(data.window_flags); + data.window_flags = q->platformWindow()->setWindowFlags(data.window_flags); - setWinId(surface->winId()); + setWinId(q->platformWindow()->winId()); // qDebug() << "create_sys" << q << q->internalWinId(); } @@ -119,8 +122,8 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (f & Qt::Window) { //qDebug() << "setParent_sys" << q << newparent << hex << f; - if (QWindowSurface *surface = q->windowSurface()) - data.window_flags = surface->setWindowFlags(data.window_flags); + if (QPlatformWindow *window = q->platformWindow()) + data.window_flags = window->setWindowFlags(data.window_flags); } // XXX Reparenting child to toplevel or vice versa ### if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { @@ -191,8 +194,8 @@ void QWidgetPrivate::setWindowTitle_sys(const QString &caption) if (!q->isWindow()) return; - if (QWindowSurface *surface = q->windowSurface()) - surface->setWindowTitle(caption); + if (QPlatformWindow *window = q->platformWindow()) + window->setWindowTitle(caption); } @@ -299,9 +302,14 @@ void QWidgetPrivate::show_sys() if (QWindowSurface *surface = q->windowSurface()) { const QRect geomRect = q->geometry(); - if (surface->geometry() != geomRect) - surface->setGeometry(geomRect); - surface->setVisible(true); + const QRect windowRect = q->platformWindow()->geometry(); + if (windowRect != geomRect) { + q->platformWindow()->setGeometry(geomRect); + if (windowRect.size() != geomRect.size()) { + surface->resize(geomRect.size()); + } + } + q->platformWindow()->setVisible(true); } if (q->windowType() != Qt::Popup && q->windowType() != Qt::ToolTip && !(q->windowFlags() & Qt::X11BypassWindowManagerHint)) @@ -320,8 +328,8 @@ void QWidgetPrivate::hide_sys() } return; } - if (QWindowSurface *surface = q->windowSurface()) { - surface->setVisible(false); + if (QPlatformWindow *window = q->platformWindow()) { + window->setVisible(false); } //### we don't yet have proper focus event handling @@ -427,8 +435,7 @@ void QWidgetPrivate::raise_sys() { Q_Q(QWidget); if (q->isWindow()) { - QWindowSurface *surface = q->windowSurface(); - surface->raise(); + q->platformWindow()->raise(); } } @@ -437,8 +444,7 @@ void QWidgetPrivate::lower_sys() Q_Q(QWidget); if (q->isWindow()) { Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - QWindowSurface *surface = q->windowSurface(); - surface->lower(); + q->platformWindow()->lower(); } else if (QWidget *p = q->parentWidget()) { setDirtyOpaqueRegion(); p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); @@ -491,8 +497,11 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) if (q->isWindow()) { const QWidgetBackingStore *bs = maybeBackingStore(); - if (bs->windowSurface) - bs->windowSurface->setGeometry(q->frameGeometry()); + if (bs->windowSurface) { + q->platformWindow()->setGeometry(q->frameGeometry()); + if (isResize) + bs->windowSurface->resize(r.size()); + } } else { if (isMove && !isResize) moveRect(QRect(oldPos, olds), x - oldPos.x(), y - oldPos.y()); @@ -653,16 +662,7 @@ QPaintEngine *QWidget::paintEngine() const QWindowSurface *QWidgetPrivate::createDefaultWindowSurface_sys() { - Q_Q(QWidget); - if (q->windowType() == Qt::Desktop) - return 0; - q->ensurePolished(); - - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) - return 0; - - return gs->createWindowSurface(q); + qFatal("CreateDefaultWindowSurface_sys should not be used on lighthouse"); } void QWidgetPrivate::setModal_sys() diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 0f34ae0..4ca493e 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -102,6 +102,9 @@ class QWSManager; #if defined(Q_WS_MAC) class QCoreGraphicsPaintEnginePrivate; #endif +#if defined(Q_WS_LITE) +class QPlatformWindow; +#endif class QPaintEngine; class QPixmap; class QWidgetBackingStore; @@ -176,6 +179,8 @@ struct QTLWExtra { #endif #elif defined(Q_OS_SYMBIAN) uint inExpose : 1; // Prevents drawing recursion +#elif defined(Q_WS_LITE) + QPlatformWindow *platformWindow; #endif }; diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index c4e8f7a..972bac2 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -117,7 +117,7 @@ embedded { SOURCES += \ painting/qgraphicssystem_qws.cpp \ -} else { +} else: if(!embedded_lite) { HEADERS += \ painting/qgraphicssystem_raster_p.h \ painting/qgraphicssystemfactory_p.h \ diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index f2cd7e6..30c042e 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -286,7 +286,11 @@ bool QWidgetBackingStore::bltRect(const QRect &rect, int dx, int dy, QWidget *wi void QWidgetBackingStore::releaseBuffer() { if (windowSurface) +#if defined(Q_WS_LITE) + windowSurface->resize(QSize()); +#else windowSurface->setGeometry(QRect()); +#endif #ifdef Q_BACKINGSTORE_SUBSURFACES for (int i = 0; i < subSurfaces.size(); ++i) subSurfaces.at(i)->setGeometry(QRect()); @@ -415,6 +419,7 @@ void QWidgetBackingStore::endPaint(const QRegion &cleaned, QWindowSurface *windo QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const { const bool widgetDirty = widget && widget != tlw; +#if !defined(Q_WS_LITE) const QRect tlwRect(topLevelRect()); const QRect surfaceGeometry(windowSurface->geometry()); if (surfaceGeometry != tlwRect && surfaceGeometry.size() != tlwRect.size()) { @@ -426,6 +431,7 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const } return QRect(QPoint(), tlwRect.size()); } +#endif // Calculate the region that needs repaint. QRegion r(dirty); @@ -467,7 +473,11 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const QRegion QWidgetBackingStore::staticContents(QWidget *parent, const QRect &withinClipRect) const { if (!parent && tlw->testAttribute(Qt::WA_StaticContents)) { +#if defined(Q_WS_LITE) + const QSize surfaceGeometry(windowSurface->size()); +#else const QRect surfaceGeometry(windowSurface->geometry()); +#endif QRect surfaceRect(0, 0, surfaceGeometry.width(), surfaceGeometry.height()); if (!withinClipRect.isEmpty()) surfaceRect &= withinClipRect; @@ -1144,11 +1154,12 @@ void QWidgetBackingStore::sync() return; } - const bool inTopLevelResize = tlwExtra->inTopLevelResize; const bool updatesDisabled = !tlw->updatesEnabled(); + bool repaintAllWidgets = false; +#if !defined(Q_WS_LITE) + const bool inTopLevelResize = tlwExtra->inTopLevelResize; const QRect tlwRect(topLevelRect()); const QRect surfaceGeometry(windowSurface->geometry()); - bool repaintAllWidgets = false; if (inTopLevelResize || surfaceGeometry != tlwRect) { if ((inTopLevelResize || surfaceGeometry.size() != tlwRect.size()) && !updatesDisabled) { @@ -1171,6 +1182,7 @@ void QWidgetBackingStore::sync() } windowSurface->setGeometry(tlwRect); } +#endif if (updatesDisabled) return; diff --git a/src/gui/painting/qgraphicssystem_lite.cpp b/src/gui/painting/qgraphicssystem_lite.cpp index 42e7238..a62abbb 100644 --- a/src/gui/painting/qgraphicssystem_lite.cpp +++ b/src/gui/painting/qgraphicssystem_lite.cpp @@ -51,7 +51,8 @@ QPixmapData *QLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) QWindowSurface *QLiteGraphicsSystem::createWindowSurface(QWidget *widget) const { - return QApplicationPrivate::platformIntegration()->createWindowSurface(widget); + qFatal("should not use QLiteGraphicsSystem::createWindowSurface"); + return 0; } QBlittable *QLiteGraphicsSystem::createBlittable(const QSize &size) const diff --git a/src/gui/painting/qwindowsurface.cpp b/src/gui/painting/qwindowsurface.cpp index 34c2936..20594c4 100644 --- a/src/gui/painting/qwindowsurface.cpp +++ b/src/gui/painting/qwindowsurface.cpp @@ -52,7 +52,11 @@ public: QWindowSurfacePrivate(QWidget *w) : window(w), staticContentsSupport(false) {} QWidget *window; +#if !defined(Q_WS_LITE) QRect geometry; +#else + QSize size; +#endif //Q_WS_LITE QRegion staticContents; QList bufferImages; bool staticContentsSupport; @@ -144,6 +148,7 @@ void QWindowSurface::endPaint(const QRegion &) d_ptr->bufferImages.clear(); } +#if !defined(Q_WS_LITE) /*! Sets the currently allocated area to be the given \a rect. @@ -164,6 +169,17 @@ QRect QWindowSurface::geometry() const { return d_ptr->geometry; } +#else +void QWindowSurface::resize(const QSize &size) +{ + d_ptr->size = size; +} + +QSize QWindowSurface::size() const +{ + return d_ptr->size; +} +#endif //Q_WS_LITE /*! Scrolls the given \a area \a dx pixels to the right and \a dy @@ -349,41 +365,4 @@ void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) } } - -#ifdef Q_WS_LITE -/*! -Requests setting the window flags of this surface to \a type. Returns the actual flags set. -*/ -Qt::WindowFlags QWindowSurface::setWindowFlags(Qt::WindowFlags type) -{ - Q_UNUSED(type); - qDebug() << "QWindowSurface::setWindowFlags" << hex << type; - return Qt::Window; -} - -/*! - Returns the effective window flags for this surface. -*/ -Qt::WindowFlags QWindowSurface::windowFlags() const -{ - return Qt::Window; -} - -/*! -Reimplemented in subclasses to show the surface if \a visible is \c true, and hide it if \a visible is \c false. -*/ - -void QWindowSurface::setVisible(bool visible) -{ - Q_UNUSED(visible); -} - - -WId QWindowSurface::winId() const -{ - return WId(0); -} - -#endif - QT_END_NAMESPACE diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h index 5930704..3a14b0f 100644 --- a/src/gui/painting/qwindowsurface_p.h +++ b/src/gui/painting/qwindowsurface_p.h @@ -63,6 +63,7 @@ class QRect; class QPoint; class QImage; class QWindowSurfacePrivate; +class QPlatformWindow; class Q_GUI_EXPORT QWindowSurface { @@ -75,8 +76,13 @@ public: virtual QPaintDevice *paintDevice() = 0; virtual void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) = 0; +#if !defined(Q_WS_LITE) virtual void setGeometry(const QRect &rect); QRect geometry() const; +#else + virtual void resize(const QSize &size); + QSize size() const; +#endif virtual bool scroll(const QRegion &area, int dx, int dy); @@ -89,16 +95,6 @@ public: virtual QPoint offset(const QWidget *widget) const; inline QRect rect(const QWidget *widget) const; -#ifdef Q_WS_LITE - virtual void setVisible(bool visible); - virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - virtual Qt::WindowFlags windowFlags() const; - virtual WId winId() const; - - virtual void setWindowTitle(const QString &) {} - virtual void raise() { qWarning("This plugin does not support raise()"); } - virtual void lower() { qWarning("This plugin does not support lower()"); } -#endif bool hasStaticContentsSupport() const; void setStaticContents(const QRegion ®ion); diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp index 693e0c3..2f03127 100644 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp @@ -2,6 +2,7 @@ #include "qwindowsurface_minimal.h" #include +#include QMinimalIntegration::QMinimalIntegration() { @@ -19,7 +20,9 @@ QPixmapData *QMinimalIntegration::createPixmapData(QPixmapData::PixelType type) { return new QRasterPixmapData(type); } -QWindowSurface *QMinimalIntegration::createWindowSurface(QWidget *widget) const +void QMinimalIntegration::createWindowAndSurface(QPlatformWindow**window, QWindowSurface**surface, QWidget *widget, WId winId) const { - return new QMinimalWindowSurface(widget); + qDebug() << "createWindow"; + *surface = new QMinimalWindowSurface(widget); + *window = new QPlatformWindow(widget); } diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.h b/src/plugins/platforms/minimal/qplatformintegration_minimal.h index d4eb78b..127c573 100644 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.h +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.h @@ -72,7 +72,7 @@ public: QMinimalIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; + void createWindowAndSurface(QPlatformWindow**window, QWindowSurface**surface, QWidget *widget, WId winId) const; QList screens() const { return mScreens; } diff --git a/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp b/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp index 0b2bdd2..2f8b1f0 100644 --- a/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp +++ b/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp @@ -73,13 +73,13 @@ void QMinimalWindowSurface::flush(QWidget *widget, const QRegion ®ion, const mImage.save(filename); } -void QMinimalWindowSurface::setGeometry(const QRect &rect) +void QMinimalWindowSurface::resize(const QSize &size) { //qDebug() << "QMinimalWindowSurface::setGeometry:" << (long)this << rect; - QWindowSurface::setGeometry(rect); + QWindowSurface::resize(size); QImage::Format format = QApplicationPrivate::platformIntegration()->screens().first()->format(); - if (mImage.size() != rect.size()) - mImage = QImage(rect.size(), format); + if (mImage.size() != size) + mImage = QImage(size, format); } QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimal/qwindowsurface_minimal.h b/src/plugins/platforms/minimal/qwindowsurface_minimal.h index 959a731..96f989d 100644 --- a/src/plugins/platforms/minimal/qwindowsurface_minimal.h +++ b/src/plugins/platforms/minimal/qwindowsurface_minimal.h @@ -44,6 +44,8 @@ #include +#include + QT_BEGIN_NAMESPACE class QMinimalWindowSurface : public QWindowSurface @@ -54,7 +56,7 @@ public: QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); + void resize(const QSize &size); private: QImage mImage; diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 730fdc5..73ab3e9 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -6,7 +6,7 @@ unix:!symbian { } else { SUBDIRS *= codecs } -!embedded:SUBDIRS *= graphicssystems +!embedded:!embedded-lite:SUBDIRS *= graphicssystems embedded:SUBDIRS *= gfxdrivers decorations mousedrivers kbddrivers !win32:!embedded:!mac:!symbian:SUBDIRS *= inputmethods symbian:SUBDIRS += s60 -- cgit v0.12 From a914500cbccc4569d7f681eaa0f9453413fc988c Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Thu, 8 Apr 2010 08:35:49 +0200 Subject: Fixup QPlatformGLContext --- src/opengl/qgl_lite.cpp | 15 +++++++++++++-- src/opengl/qplatformglcontext_lite.h | 4 +++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index a1d9bb8..db1077d 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -52,6 +52,15 @@ QT_BEGIN_NAMESPACE +QPlatformGLContext::QPlatformGLContext() +{ +} + +QPlatformGLContext::~QPlatformGLContext() +{ +} + + bool QGLFormat::hasOpenGL() { return QApplicationPrivate::platformIntegration()->hasOpenGL(); @@ -61,9 +70,9 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) { Q_D(QGLContext); d->platformContext = QApplicationPrivate::platformIntegration()->createGLContext(); - d->platformContext->create(d->paintDevice, d->glFormat, shareContext ? shareContext->d_func()->platformContext : 0); + d->valid = d->platformContext->create(d->paintDevice, d->glFormat, shareContext ? shareContext->d_func()->platformContext : 0); - return false; + return d->valid; } void QGLContext::reset() @@ -91,12 +100,14 @@ void QGLContext::makeCurrent() { Q_D(QGLContext); d->platformContext->makeCurrent(); + QGLContextPrivate::setCurrentContext(this); } void QGLContext::doneCurrent() { Q_D(QGLContext); d->platformContext->doneCurrent(); + QGLContextPrivate::setCurrentContext(0); } void QGLContext::swapBuffers() const diff --git a/src/opengl/qplatformglcontext_lite.h b/src/opengl/qplatformglcontext_lite.h index 19a2074..10c05f6 100644 --- a/src/opengl/qplatformglcontext_lite.h +++ b/src/opengl/qplatformglcontext_lite.h @@ -42,11 +42,13 @@ #ifndef QPLATFORM_GL_CONTEXT_H #define QPLATFORM_GL_CONTEXT_H +#include + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -class QPlatformGLContext +class Q_OPENGL_EXPORT QPlatformGLContext { public: QPlatformGLContext(); -- cgit v0.12 From 0e342cd341f8d71b41de89340cbbf455694becc9 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Thu, 8 Apr 2010 08:36:49 +0200 Subject: Implement OpenGL support for testlite plugin using GLX Note: Doesn't actually work yet. ;-) --- src/plugins/platforms/testlite/qglxglcontext.cpp | 148 +++++++++++++++++++++ src/plugins/platforms/testlite/qglxglcontext.h | 73 ++++++++++ .../testlite/qplatformintegration_testlite.cpp | 18 ++- .../testlite/qplatformintegration_testlite.h | 5 + src/plugins/platforms/testlite/testlite.pro | 5 + 5 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 src/plugins/platforms/testlite/qglxglcontext.cpp create mode 100644 src/plugins/platforms/testlite/qglxglcontext.h diff --git a/src/plugins/platforms/testlite/qglxglcontext.cpp b/src/plugins/platforms/testlite/qglxglcontext.cpp new file mode 100644 index 0000000..0739567 --- /dev/null +++ b/src/plugins/platforms/testlite/qglxglcontext.cpp @@ -0,0 +1,148 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "x11util.h" +#include "qglxglcontext.h" +#include + +#include + +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) +#include +#endif + + +QT_BEGIN_NAMESPACE + +QGLXGLContext::QGLXGLContext(Display *xdpy) + : QPlatformGLContext() + , m_display(xdpy) + , m_context(0) + , m_widget(0) +{ +} + +QGLXGLContext::~QGLXGLContext() +{ + if (m_context) + glXDestroyContext(m_display, m_context); +} + +bool QGLXGLContext::create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) +{ + if (device->devType() != QInternal::Widget) { + qWarning("Creating a GL context is only supported on QWidgets"); + return false; + } + + m_widget = static_cast(device); + if (!m_widget->isTopLevel()) { + qWarning("Creating a GL context is only supported on top-level QWidgets"); + return false; + } + + // Get the XVisualInfo for the window: +// XWindowAttributes windowAttribs; +// XGetWindowAttributes(m_display, m_widget->winId(), &windowAttribs); + XVisualInfo visualInfoTemplate; + visualInfoTemplate.visualid = 33; //XVisualIDFromVisual(windowAttribs.visual); + XVisualInfo *visualInfo; + int matchingCount = 0; + visualInfo = XGetVisualInfo(m_display, VisualIDMask, &visualInfoTemplate, &matchingCount); + + qDebug("Creating a GLX context for visual ID %d", visualInfoTemplate.visualid); + + m_context = glXCreateContext(m_display, visualInfo, 0, True); + + return true; +} + +void QGLXGLContext::makeCurrent() +{ + Window win = m_widget->winId(); + qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", win, m_context); + + glXMakeCurrent(m_display, win, m_context); +} + +void QGLXGLContext::doneCurrent() +{ + glXMakeCurrent(m_display, 0, 0); +} + +void QGLXGLContext::swapBuffers() +{ + glXSwapBuffers(m_display, m_widget->winId()); +} + +void* QGLXGLContext::getProcAddress(const QString& procName) +{ + typedef void *(*qt_glXGetProcAddressARB)(const GLubyte *); + static qt_glXGetProcAddressARB glXGetProcAddressARB = 0; + static bool resolved = false; + + if (resolved && !glXGetProcAddressARB) + return 0; + if (!glXGetProcAddressARB) { + QList glxExt = QByteArray(glXGetClientString(m_display, GLX_EXTENSIONS)).split(' '); + if (glxExt.contains("GLX_ARB_get_proc_address")) { +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) + void *handle = dlopen(NULL, RTLD_LAZY); + if (handle) { + glXGetProcAddressARB = (qt_glXGetProcAddressARB) dlsym(handle, "glXGetProcAddressARB"); + dlclose(handle); + } + if (!glXGetProcAddressARB) +#endif + { + extern const QString qt_gl_library_name(); + QLibrary lib(qt_gl_library_name()); + glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB"); + } + } + resolved = true; + } + if (!glXGetProcAddressARB) + return 0; + return glXGetProcAddressARB(reinterpret_cast(procName.toLatin1().data())); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qglxglcontext.h b/src/plugins/platforms/testlite/qglxglcontext.h new file mode 100644 index 0000000..54e5c2f --- /dev/null +++ b/src/plugins/platforms/testlite/qglxglcontext.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef Q_GLX_CONTEXT_H +#define Q_GLX_CONTEXT_H + +#include +#include "x11util.h" +#include + +QT_BEGIN_NAMESPACE + +class QGLXGLContext : public QPlatformGLContext +{ +public: + QGLXGLContext(Display* xdpy); + ~QGLXGLContext(); + + bool create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext); + + void makeCurrent(); + void doneCurrent(); + void swapBuffers(); + void* getProcAddress(const QString& procName); + +private: + Display *m_display; + GLXContext m_context; + QWidget *m_widget; +}; + + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp index 6811e2e..6776e0c 100644 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp @@ -46,9 +46,13 @@ #include - #include "x11util.h" +#ifndef QT_NO_OPENGL +#include +#include "qglxglcontext.h" +#endif + QT_BEGIN_NAMESPACE class MyCursor : QGraphicsSystemCursor @@ -116,6 +120,18 @@ QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, in return QPixmap::fromImage(img); } +#ifndef QT_NO_OPENGL +bool QTestLiteIntegration::hasOpenGL() const +{ + return glXQueryExtension(xd->display, 0, 0) != 0; +} + +QPlatformGLContext * QTestLiteIntegration::createGLContext() +{ + return new QGLXGLContext(xd->display); +} + +#endif // QT_NO_OPENGL QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.h b/src/plugins/platforms/testlite/qplatformintegration_testlite.h index c540c48..8dbbc50 100644 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.h +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.h @@ -80,6 +80,11 @@ public: QList screens() const { return mScreens; } +#ifndef QT_NO_OPENGL + bool hasOpenGL() const; + QPlatformGLContext * createGLContext(); +#endif + MyDisplay *xd; private: diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro index 442dd68..5f7eb2a 100644 --- a/src/plugins/platforms/testlite/testlite.pro +++ b/src/plugins/platforms/testlite/testlite.pro @@ -12,6 +12,11 @@ SOURCES += x11util.cpp LIBS += -lX11 -lXext +contains(QT_CONFIG, opengl) { + QT += opengl + HEADERS += qglxglcontext.h + SOURCES += qglxglcontext.cpp +} target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems INSTALLS += target -- cgit v0.12 From d6cf18d036df1ecead4c8471944880c7f9a414f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 8 Apr 2010 09:58:08 +0200 Subject: QPlatformWindow refactoring and ported the directfb plugin to use QPlatformWindow --- src/gui/kernel/qplatformintegration_lite.h | 3 +- src/gui/kernel/qplatformwindow_lite.cpp | 6 + src/gui/kernel/qplatformwindow_lite.h | 12 +- src/gui/kernel/qwidget.cpp | 6 + src/gui/kernel/qwidget_lite.cpp | 15 +- src/plugins/platforms/directfb/qdirectfbinput.cpp | 13 +- src/plugins/platforms/directfb/qdirectfbinput.h | 4 +- src/plugins/platforms/directfb/qdirectfbwindow.cpp | 157 +++++++++++++++++++++ src/plugins/platforms/directfb/qdirectfbwindow.h | 73 ++++++++++ .../directfb/qplatformintegration_directfb.cpp | 11 +- .../directfb/qplatformintegration_directfb.h | 3 +- .../platforms/directfb/qwindowsurface_directfb.cpp | 114 ++------------- .../platforms/directfb/qwindowsurface_directfb.h | 15 +- src/plugins/platforms/minimal/minimal.pro | 2 +- .../minimal/qplatformintegration_minimal.cpp | 14 +- .../minimal/qplatformintegration_minimal.h | 3 +- 16 files changed, 309 insertions(+), 142 deletions(-) create mode 100644 src/plugins/platforms/directfb/qdirectfbwindow.cpp create mode 100644 src/plugins/platforms/directfb/qdirectfbwindow.h diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h index 389dcfb..b13260e 100644 --- a/src/gui/kernel/qplatformintegration_lite.h +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -62,7 +62,8 @@ public: // GraphicsSystem functions virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; - virtual void createWindowAndSurface(QPlatformWindow **window, QWindowSurface **surface, QWidget *widget, WId winId = 0) const = 0; + virtual QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const = 0; + virtual QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const = 0; virtual QBlittable *createBlittable(const QSize &size) const; // Window System functions diff --git a/src/gui/kernel/qplatformwindow_lite.cpp b/src/gui/kernel/qplatformwindow_lite.cpp index ff1bf48..c8a3ed5 100644 --- a/src/gui/kernel/qplatformwindow_lite.cpp +++ b/src/gui/kernel/qplatformwindow_lite.cpp @@ -70,3 +70,9 @@ void QPlatformWindow::setWindowTitle(const QString &) {} void QPlatformWindow::raise() { qWarning("This plugin does not support raise()"); } void QPlatformWindow::lower() { qWarning("This plugin does not support lower()"); } + +void QPlatformWindow::setOpacity(qreal level) +{ + Q_UNUSED(level); + qWarning("This plugin does not support setting window opacity"); +} diff --git a/src/gui/kernel/qplatformwindow_lite.h b/src/gui/kernel/qplatformwindow_lite.h index 3fa97b5..8771cfe 100644 --- a/src/gui/kernel/qplatformwindow_lite.h +++ b/src/gui/kernel/qplatformwindow_lite.h @@ -41,13 +41,18 @@ #ifndef QPLATFORMWINDOW_H #define QPLATFORMWINDOW_H -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE #include +#include +#include +#include class QPlatformWindowPrivate; +class QWidget; + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE class Q_GUI_EXPORT QPlatformWindow { @@ -69,6 +74,7 @@ public: virtual void raise(); virtual void lower(); + virtual void setOpacity(qreal level); protected: QScopedPointer d_ptr; }; diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 4bcec93..7eaf03c 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -74,6 +74,9 @@ # include "qpaintengine.h" // for PorterDuff # include "private/qwindowsurface_qws_p.h" #endif +#if defined(Q_WS_LITE) +#include "qplatformwindow_lite.h" +#endif #include "qpainter.h" #include "qtooltip.h" #include "qwhatsthis.h" @@ -1574,6 +1577,9 @@ void QWidgetPrivate::createTLExtra() static int count = 0; qDebug() << "tlextra" << ++count; #endif +#if defined(Q_WS_LITE) + x->platformWindow = 0; +#endif } } diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 7915d7f..cf93c5e 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -71,8 +71,13 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO QWindowSurface *surface = q->windowSurface(); QPlatformWindow *platformWindow = q->platformWindow(); + if (!platformWindow) { + platformWindow = QApplicationPrivate::platformIntegration()->createPlatformWindow(q); + } + Q_ASSERT(platformWindow); + if (!surface) { - QApplicationPrivate::platformIntegration()->createWindowAndSurface(&platformWindow,&surface,q); + surface = QApplicationPrivate::platformIntegration()->createWindowSurfaceForWindow(q,platformWindow->winId()); } Q_ASSERT(surface); @@ -102,8 +107,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) { Q_Q(QWidget); - - QWidget *oldParent = q->parentWidget(); +// QWidget *oldParent = q->parentWidget(); Qt::WindowFlags oldFlags = data.window_flags; if (parent != newparent) { QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function??? @@ -643,8 +647,8 @@ void QWidgetPrivate::updateFrameStrut() void QWidgetPrivate::setWindowOpacity_sys(qreal level) { - Q_UNUSED(level); - // XXX + Q_Q(QWidget); + q->platformWindow()->setOpacity(level); } void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &oldRect) @@ -663,6 +667,7 @@ QPaintEngine *QWidget::paintEngine() const QWindowSurface *QWidgetPrivate::createDefaultWindowSurface_sys() { qFatal("CreateDefaultWindowSurface_sys should not be used on lighthouse"); + return 0; } void QWidgetPrivate::setModal_sys() diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp index 74a38a4..90c3348 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.cpp +++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp @@ -78,16 +78,13 @@ void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) window->AttachEventBuffer(window,eventBuffer); } -void QDirectFbInput::removeWindow(QWidget *tlw) +void QDirectFbInput::removeWindow(WId wId) { - DFBWindowID id = tlwMap.key(tlw,0); - if (id) { - IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,id, &window); + IDirectFBWindow *window; + dfbDisplayLayer->GetWindow(dfbDisplayLayer,wId, &window); - window->DetachEventBuffer(window,eventBuffer); - tlwMap.remove(id); - } + window->DetachEventBuffer(window,eventBuffer); + tlwMap.remove(wId); } void QDirectFbInput::handleEvents() diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h index 31aa082..016e7f1 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.h +++ b/src/plugins/platforms/directfb/qdirectfbinput.h @@ -9,6 +9,8 @@ #include #include +#include + #include class InputSocketWaiter : public QThread @@ -35,7 +37,7 @@ class QDirectFbInput : public QObject public: static QDirectFbInput *instance(); void addWindow(DFBWindowID id, QWidget *tlw); - void removeWindow(QWidget *tlw); + void removeWindow(WId wId); public slots: void handleEvents(); diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp new file mode 100644 index 0000000..d88953e --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp @@ -0,0 +1,157 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qdirectfbwindow.h" +#include "qdirectfbinput.h" + +#include + +#include + +QDirectFbWindow::QDirectFbWindow(QWidget *tlw) + : QPlatformWindow(tlw) +{ + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); + DFBDisplayLayerConfig layerConfig; + layer->GetConfiguration(layer,&layerConfig); + + DFBWindowDescription description; + memset(&description,0,sizeof(DFBWindowDescription)); + description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS +#if DIRECTFB_MINOR_VERSION >= 1 + |DWDESC_OPTIONS +#endif + |DWDESC_CAPS); + description.width = tlw->rect().width(); + description.height = tlw->rect().height(); + description.posx = tlw->rect().x(); + description.posy = tlw->rect().y(); + + if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED) + description.surface_caps = DSCAPS_PREMULTIPLIED; + description.pixelformat = layerConfig.pixelformat; + +#if DIRECTFB_MINOR_VERSION >= 1 + description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); +#endif + description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); + description.surface_caps = DSCAPS_PREMULTIPLIED; + + DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); + if (result != DFB_OK) { + DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); + } + + m_dfbWindow->SetOpacity(m_dfbWindow,0xff); + + DFBWindowID id; + m_dfbWindow->GetID(m_dfbWindow, &id); + QDirectFbInput::instance()->addWindow(id,tlw); +} + +QDirectFbWindow::~QDirectFbWindow() +{ + QDirectFbInput::instance()->removeWindow(winId()); + m_dfbWindow->Destroy(m_dfbWindow); +} + +void QDirectFbWindow::setGeometry(const QRect &rect) +{ + QPlatformWindow::setGeometry(rect); + m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), + rect.width(), rect.height()); + +} + +void QDirectFbWindow::setOpacity(qreal level) +{ + const quint8 windowOpacity = quint8(level * 0xff); + m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); +} + +void QDirectFbWindow::setVisible(bool visible) +{ + if (visible) { + int x = geometry().x(); + int y = geometry().y(); + m_dfbWindow->MoveTo(m_dfbWindow,x,y); + } else { + IDirectFBDisplayLayer *displayLayer; + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); + + DFBDisplayLayerConfig config; + displayLayer->GetConfiguration(displayLayer,&config); + m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); + } +} + +Qt::WindowFlags QDirectFbWindow::setWindowFlags(Qt::WindowFlags flags) +{ + switch (flags & Qt::WindowType_Mask) { + case Qt::ToolTip: { + DFBWindowOptions options; + m_dfbWindow->GetOptions(m_dfbWindow,&options); + options = DFBWindowOptions(options | DWOP_GHOST); + m_dfbWindow->SetOptions(m_dfbWindow,options); + break; } + default: + break; + } + + m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); + return flags; +} + +void QDirectFbWindow::raise() +{ + m_dfbWindow->RaiseToTop(m_dfbWindow); +} + +void QDirectFbWindow::lower() +{ + m_dfbWindow->LowerToBottom(m_dfbWindow); +} + +WId QDirectFbWindow::winId() const +{ + DFBWindowID id; + m_dfbWindow->GetID(m_dfbWindow, &id); + return WId(id); +} diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h new file mode 100644 index 0000000..d5fd408 --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbwindow.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QDIRECTFBWINDOW_H +#define QDIRECTFBWINDOW_H + +#include + +#include "qdirectfbconvenience.h" + +QT_BEGIN_NAMESPACE + +class QDirectFbWindow : public QPlatformWindow +{ +public: + QDirectFbWindow(QWidget *tlw); + ~QDirectFbWindow(); + + void setGeometry(const QRect &rect); + void setOpacity(qreal level); + + void setVisible(bool visible); + + Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); + void raise(); + void lower(); + WId winId() const; + +private: + IDirectFBWindow *m_dfbWindow; +}; + +QT_END_NAMESPACE + +#endif // QDIRECTFBWINDOW_H diff --git a/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp b/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp index c70bb64..5f428ef 100644 --- a/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp +++ b/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp @@ -44,6 +44,7 @@ #include "qblitter_directfb.h" #include "qdirectfbconvenience.h" #include "qdirectfbcursor.h" +#include "qdirectfbwindow.h" #include #include @@ -105,9 +106,15 @@ QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) return new QBlittablePixmapData(type); } -QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *widget) const +QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId winId) const { - return new QDirectFbWindowSurface (widget); + Q_UNUSED(winId); + return new QDirectFbWindow(widget); +} + +QWindowSurface *QDirectFbIntegration::createWindowSurfaceForWindow(QWidget *widget, WId winId) const +{ + return new QDirectFbWindowSurface(widget,winId); } QBlittable *QDirectFbIntegration::createBlittable(const QSize &size) const diff --git a/src/plugins/platforms/directfb/qplatformintegration_directfb.h b/src/plugins/platforms/directfb/qplatformintegration_directfb.h index f74a81d..a8489c0 100644 --- a/src/plugins/platforms/directfb/qplatformintegration_directfb.h +++ b/src/plugins/platforms/directfb/qplatformintegration_directfb.h @@ -82,7 +82,8 @@ public: QDirectFbIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; + QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; QBlittable *createBlittable(const QSize &size) const; QList screens() const { return mScreens; } diff --git a/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp b/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp index afe34b7..e978cae 100644 --- a/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp +++ b/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp @@ -49,49 +49,19 @@ QT_BEGIN_NAMESPACE -QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) - : QWindowSurface(window), m_pixmap(0), m_pmdata(0), - m_dfbWindow(0), m_dfbSurface(0) +QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window, WId wId) + : QWindowSurface(window), m_pixmap(0), m_pmdata(0), m_dfbSurface(0) { - window->setWindowSurface(this); IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); - DFBDisplayLayerConfig layerConfig; - layer->GetConfiguration(layer,&layerConfig); - - DFBWindowDescription description; - memset(&description,0,sizeof(DFBWindowDescription)); - description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH|DWDESC_HEIGHT|DWDESC_POSX|DWDESC_POSY|DWDESC_SURFACE_CAPS -#if DIRECTFB_MINOR_VERSION >= 1 - |DWDESC_OPTIONS -#endif - |DWDESC_CAPS); - description.width = window->rect().width(); - description.height = window->rect().height(); - description.posx = window->rect().x(); - description.posy = window->rect().y(); - - if (layerConfig.surface_caps & DSCAPS_PREMULTIPLIED) - description.surface_caps = DSCAPS_PREMULTIPLIED; - description.pixelformat = layerConfig.pixelformat; - -#if DIRECTFB_MINOR_VERSION >= 1 - description.options = DFBWindowOptions(DWOP_ALPHACHANNEL); -#endif - description.caps = DFBWindowCapabilities(DWCAPS_DOUBLEBUFFER|DWCAPS_ALPHACHANNEL); - description.surface_caps = DSCAPS_PREMULTIPLIED; - - DFBResult result = layer->CreateWindow(layer,&description,&m_dfbWindow); - if (result != DFB_OK) { - DirectFBError("QDirectFbGraphicsSystemScreen: failed to create window",result); - } - DFBWindowID id; - m_dfbWindow->GetID(m_dfbWindow, &id); - QDirectFbInput::instance()->addWindow(id,window); + DFBWindowID id(wId); + IDirectFBWindow *dfbWindow; - m_dfbWindow->GetSurface(m_dfbWindow,&m_dfbSurface); + layer->GetWindow(layer,id,&dfbWindow); + dfbWindow->GetSurface(dfbWindow,&m_dfbSurface); +//WRONGSIZE QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface); m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); m_pmdata->setBlittable(blitter); @@ -100,8 +70,7 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window) QDirectFbWindowSurface::~QDirectFbWindowSurface() { - QDirectFbInput::instance()->removeWindow(this->window()); - m_dfbWindow->Destroy(m_dfbWindow); + } QPaintDevice *QDirectFbWindowSurface::paintDevice() @@ -111,11 +80,9 @@ QPaintDevice *QDirectFbWindowSurface::paintDevice() void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { + Q_UNUSED(widget); m_pmdata->blittable()->unlock(); - const quint8 windowOpacity = quint8(widget->windowOpacity() * 0xff); - m_dfbWindow->SetOpacity(m_dfbWindow,windowOpacity); - QVector rects = region.rects(); for (int i = 0 ; i < rects.size(); i++) { const QRect rect = rects.at(i); @@ -124,17 +91,13 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const } } -void QDirectFbWindowSurface::setGeometry(const QRect &rect) +void QDirectFbWindowSurface::resize(const QSize &size) { - m_pmdata->blittable()->unlock(); - - QWindowSurface::setGeometry(rect); - m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), - rect.width(), rect.height()); + QWindowSurface::resize(size); //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable m_dfbSurface->AddRef(m_dfbSurface); - QDirectFbBlitter *blitter = new QDirectFbBlitter(rect.size(),m_dfbSurface); + QDirectFbBlitter *blitter = new QDirectFbBlitter(size,m_dfbSurface); m_pmdata->setBlittable(blitter); } @@ -175,57 +138,4 @@ void QDirectFbWindowSurface::endPaint(const QRegion ®ion) Q_UNUSED(region); } -void QDirectFbWindowSurface::setVisible(bool visible) -{ - m_pmdata->blittable()->unlock(); - - if (visible) { - int x = this->geometry().x(); - int y = this->geometry().y(); - m_dfbWindow->MoveTo(m_dfbWindow,x,y); - } else { - IDirectFBDisplayLayer *displayLayer; - QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); - - DFBDisplayLayerConfig config; - displayLayer->GetConfiguration(displayLayer,&config); - m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); - } -} - -Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags flags) -{ - switch (flags & Qt::WindowType_Mask) { - case Qt::ToolTip: { - DFBWindowOptions options; - m_dfbWindow->GetOptions(m_dfbWindow,&options); - options = DFBWindowOptions(options | DWOP_GHOST); - m_dfbWindow->SetOptions(m_dfbWindow,options); - break; } - default: - break; - } - - m_dfbWindow->SetStackingClass(m_dfbWindow, flags & Qt::WindowStaysOnTopHint ? DWSC_UPPER : DWSC_MIDDLE); - return flags; -} - -void QDirectFbWindowSurface::raise() -{ - m_dfbWindow->RaiseToTop(m_dfbWindow); -} - -void QDirectFbWindowSurface::lower() -{ - m_dfbWindow->LowerToBottom(m_dfbWindow); -} - -WId QDirectFbWindowSurface::winId() const -{ - DFBWindowID id; - m_dfbWindow->GetID(m_dfbWindow, &id); - return WId(id); -} - - QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qwindowsurface_directfb.h b/src/plugins/platforms/directfb/qwindowsurface_directfb.h index 2f31513..d48f534 100644 --- a/src/plugins/platforms/directfb/qwindowsurface_directfb.h +++ b/src/plugins/platforms/directfb/qwindowsurface_directfb.h @@ -49,37 +49,26 @@ QT_BEGIN_NAMESPACE -class QDirectFbGraphicsSystemScreen; - class QDirectFbWindowSurface : public QWindowSurface { public: - QDirectFbWindowSurface(QWidget *window); + QDirectFbWindowSurface(QWidget *window, WId wid); ~QDirectFbWindowSurface(); QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); + void resize (const QSize &size); bool scroll(const QRegion &area, int dx, int dy); void beginPaint(const QRegion ®ion); void endPaint(const QRegion ®ion); - void setVisible(bool visible); - Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - - void raise(); - void lower(); - - WId winId() const; - private: void lockSurfaceToImage(); QPixmap *m_pixmap; QBlittablePixmapData *m_pmdata; - IDirectFBWindow *m_dfbWindow; IDirectFBSurface *m_dfbSurface; }; diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro index 567b551..6c97f07 100644 --- a/src/plugins/platforms/minimal/minimal.pro +++ b/src/plugins/platforms/minimal/minimal.pro @@ -1,4 +1,4 @@ -TARGET = qminimalgraphicssystem +TARGET = qminimal include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp index 2f03127..404ffbc 100644 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp @@ -20,9 +20,15 @@ QPixmapData *QMinimalIntegration::createPixmapData(QPixmapData::PixelType type) { return new QRasterPixmapData(type); } -void QMinimalIntegration::createWindowAndSurface(QPlatformWindow**window, QWindowSurface**surface, QWidget *widget, WId winId) const + +QPlatformWindow *QMinimalIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QPlatformWindow(widget); +} + +QWindowSurface *QMinimalIntegration::createWindowSurfaceForWindow(QWidget *widget, WId winId) const { - qDebug() << "createWindow"; - *surface = new QMinimalWindowSurface(widget); - *window = new QPlatformWindow(widget); + Q_UNUSED(winId); + return new QMinimalWindowSurface(widget); } diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.h b/src/plugins/platforms/minimal/qplatformintegration_minimal.h index 127c573..2e8a8cf 100644 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.h +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.h @@ -72,7 +72,8 @@ public: QMinimalIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - void createWindowAndSurface(QPlatformWindow**window, QWindowSurface**surface, QWidget *widget, WId winId) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; QList screens() const { return mScreens; } -- cgit v0.12 From 7b3f1a992e25739a8a28cf0470ba58fd31a46e7b Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Thu, 8 Apr 2010 12:29:07 +0200 Subject: Rename qglplatformintegration_lite.h & add QGLWidget surface --- src/gui/kernel/qplatformintegration_lite.cpp | 5 ++ src/gui/kernel/qplatformintegration_lite.h | 5 +- src/opengl/opengl.pro | 2 +- src/opengl/qgl_lite.cpp | 10 +++- src/opengl/qgl_p.h | 2 +- src/opengl/qglplatformintegration_lite.h | 83 ++++++++++++++++++++++++++ src/opengl/qplatformglcontext_lite.h | 72 ---------------------- src/plugins/platforms/testlite/qglxglcontext.h | 2 +- 8 files changed, 104 insertions(+), 77 deletions(-) create mode 100644 src/opengl/qglplatformintegration_lite.h delete mode 100644 src/opengl/qplatformglcontext_lite.h diff --git a/src/gui/kernel/qplatformintegration_lite.cpp b/src/gui/kernel/qplatformintegration_lite.cpp index 71beded..3fa874c 100644 --- a/src/gui/kernel/qplatformintegration_lite.cpp +++ b/src/gui/kernel/qplatformintegration_lite.cpp @@ -66,6 +66,11 @@ QPlatformGLContext * QPlatformIntegration::createGLContext() { return 0; } + +QPlatformGLWidgetSurface * QPlatformIntegration::createGLWidgetSurface(QGLWidget*) +{ + return 0; +} #endif QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h index 9125bd1..2018c70 100644 --- a/src/gui/kernel/qplatformintegration_lite.h +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -53,6 +53,8 @@ QT_MODULE(Gui) #ifndef QT_NO_OPENGL class QPlatformGLContext; +class QPlatformGLWidgetSurface; +class QGLWidget; #endif class Q_GUI_EXPORT QPlatformIntegration @@ -72,7 +74,8 @@ public: // OpenGL Integration functions #ifndef QT_NO_OPENGL virtual bool hasOpenGL() const; - virtual QPlatformGLContext * createGLContext(); + virtual QPlatformGLContext * createGLContext(); + virtual QPlatformGLWidgetSurface * createGLWidgetSurface(QGLWidget*); #endif }; diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index cebb677..42608e3 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -78,7 +78,7 @@ SOURCES += qgl.cpp \ embedded_lite { SOURCES += qgl_lite.cpp - HEADERS += qplatformglcontext_lite.h + HEADERS += qglplatformintegration_lite.h # If we have EGL, use the EGL implementation of QGLPixelBuffer, otherwise we just provide # a stubbed out one. PBuffers aren't too interesting anyway. diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index db1077d..a46593e 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -47,7 +47,7 @@ #include "qgl.h" #include "qgl_p.h" -#include "qplatformglcontext_lite.h" +#include "qglplatformintegration_lite.h" QT_BEGIN_NAMESPACE @@ -60,6 +60,14 @@ QPlatformGLContext::~QPlatformGLContext() { } +QPlatformGLWidgetSurface::QPlatformGLWidgetSurface(QGLWidget*) +{ +} + +QPlatformGLWidgetSurface::~QPlatformGLWidgetSurface() +{ +} + bool QGLFormat::hasOpenGL() { diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index f53b3e2..6405a54 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -69,7 +69,7 @@ #endif #if defined(Q_WS_LITE) -#include +#include #endif QT_BEGIN_NAMESPACE diff --git a/src/opengl/qglplatformintegration_lite.h b/src/opengl/qglplatformintegration_lite.h new file mode 100644 index 0000000..d5bae45 --- /dev/null +++ b/src/opengl/qglplatformintegration_lite.h @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORM_GL_CONTEXT_H +#define QPLATFORM_GL_CONTEXT_H + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class Q_OPENGL_EXPORT QPlatformGLContext +{ +public: + QPlatformGLContext(); + virtual ~QPlatformGLContext(); + + virtual bool create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) = 0; + + virtual void makeCurrent() = 0; + virtual void doneCurrent() = 0; + virtual void swapBuffers() = 0; + virtual void* getProcAddress(const QString& procName) = 0; + +}; + +// QGLPlatformWidgetSurface does _not_ inherit from QWindowSurface +// - The backing store may be totally unaware of it's existance. +class QPlatformGLWidgetSurface +{ +public: + QPlatformGLWidgetSurface(QGLWidget*); + virtual ~QPlatformGLWidgetSurface(); + + virtual void setGeometry(const QRect&) = 0; +}; + + +QT_END_NAMESPACE + +QT_END_HEADER + + +#endif // QPLATFORM_GL_INTEGRATION_P_H diff --git a/src/opengl/qplatformglcontext_lite.h b/src/opengl/qplatformglcontext_lite.h deleted file mode 100644 index 10c05f6..0000000 --- a/src/opengl/qplatformglcontext_lite.h +++ /dev/null @@ -1,72 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenGL module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORM_GL_CONTEXT_H -#define QPLATFORM_GL_CONTEXT_H - -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -class Q_OPENGL_EXPORT QPlatformGLContext -{ -public: - QPlatformGLContext(); - virtual ~QPlatformGLContext(); - - virtual bool create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) = 0; - - virtual void makeCurrent() = 0; - virtual void doneCurrent() = 0; - virtual void swapBuffers() = 0; - virtual void* getProcAddress(const QString& procName) = 0; - -}; - - -QT_END_NAMESPACE - -QT_END_HEADER - - -#endif // QPLATFORM_GL_INTEGRATION_P_H diff --git a/src/plugins/platforms/testlite/qglxglcontext.h b/src/plugins/platforms/testlite/qglxglcontext.h index 54e5c2f..ff8fe85 100644 --- a/src/plugins/platforms/testlite/qglxglcontext.h +++ b/src/plugins/platforms/testlite/qglxglcontext.h @@ -42,7 +42,7 @@ #ifndef Q_GLX_CONTEXT_H #define Q_GLX_CONTEXT_H -#include +#include #include "x11util.h" #include -- cgit v0.12 From 6e41376f73cc54efd2e82df8b7bdd5797438e6c5 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 8 Apr 2010 15:02:17 +0200 Subject: Compile on Lighthouse after the windowsurface API change. --- src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp b/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp index 6bf9d6b..695050e 100644 --- a/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp +++ b/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp @@ -98,7 +98,11 @@ QPaintDevice *QTraceWindowSurface::paintDevice() { if (!buffer) { buffer = new QPaintBuffer; +#ifdef Q_WS_LITE + buffer->setBoundingRect(QRect(QPoint(), size())); +#else buffer->setBoundingRect(geometry()); +#endif } return buffer; } -- cgit v0.12 From c3be673a149201d15cd8a7ca0a5047a7e24331fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 8 Apr 2010 14:57:36 +0200 Subject: Add the DirectFbWindow to the pro file --- src/plugins/platforms/directfb/directfb.pro | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index f8fccaa..ec5f0f1 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -18,12 +18,14 @@ SOURCES = main.cpp \ qblitter_directfb.cpp \ qdirectfbconvenience.cpp \ qdirectfbinput.cpp \ - qdirectfbcursor.cpp + qdirectfbcursor.cpp \ + qdirectfbwindow.cpp HEADERS = qplatformintegration_directfb.h \ qwindowsurface_directfb.h \ qblitter_directfb.h \ qdirectfbconvenience.h \ qdirectfbinput.h \ - qdirectfbcursor.h + qdirectfbcursor.h \ + qdirectfbwindow.h target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target -- cgit v0.12 From b773920624a3420fb01071fe75c304a03051cfd9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 8 Apr 2010 15:02:51 +0200 Subject: Fix "bug" in plugins.pro Dont build graphicssystems for lighthouse anymore --- src/plugins/plugins.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 73ab3e9..0e9a14c 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -6,7 +6,7 @@ unix:!symbian { } else { SUBDIRS *= codecs } -!embedded:!embedded-lite:SUBDIRS *= graphicssystems +!embedded:!embedded_lite:SUBDIRS *= graphicssystems embedded:SUBDIRS *= gfxdrivers decorations mousedrivers kbddrivers !win32:!embedded:!mac:!symbian:SUBDIRS *= inputmethods symbian:SUBDIRS += s60 -- cgit v0.12 From d64b2ad5417fec750cd3f31364fb216e61acb8cf Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Thu, 8 Apr 2010 16:06:33 +0200 Subject: Make a top-level QGLWidget work once, 50% of the time --- src/opengl/qgl.cpp | 6 +++++- src/opengl/qgl_lite.cpp | 12 +++++++++--- src/plugins/platforms/testlite/qglxglcontext.cpp | 8 +++++--- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 1e522d6..6c6f6d9 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1361,6 +1361,10 @@ QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags() } } +#ifdef Q_WS_LITE + hasOpenGL(); // ### I have no idea why this is needed here, but it makes things work for testlite +#endif + QString versionString(QLatin1String(reinterpret_cast(glGetString(GL_VERSION)))); OpenGLVersionFlags versionFlags = qOpenGLVersionFlagsFromString(versionString); if (currentCtx) { @@ -3907,7 +3911,7 @@ void QGLWidget::resizeOverlayGL(int, int) /*! \fn bool QGLWidget::event(QEvent *e) \reimp */ -#if !defined(Q_OS_WINCE) && !defined(Q_WS_QWS) +#if !defined(Q_OS_WINCE) && !defined(Q_WS_QWS) && !defined(Q_WS_LITE) bool QGLWidget::event(QEvent *e) { Q_D(QGLWidget); diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index a46593e..2a70545 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -232,17 +232,23 @@ void QGLWidget::setMouseTracking(bool enable) Q_UNUSED(enable); } +bool QGLWidget::event(QEvent *e) +{ + QWidget::event(e); +} + void QGLWidget::resizeEvent(QResizeEvent *) { Q_D(QGLWidget); if (!isValid()) return; makeCurrent(); - if (!d->glcx->initialized()) - glInit(); - resizeGL(width(), height()); +// if (!d->glcx->initialized()) +// glInit(); +// resizeGL(width(), height()); } + const QGLContext* QGLWidget::overlayContext() const { return 0; diff --git a/src/plugins/platforms/testlite/qglxglcontext.cpp b/src/plugins/platforms/testlite/qglxglcontext.cpp index 0739567..6fdbb56 100644 --- a/src/plugins/platforms/testlite/qglxglcontext.cpp +++ b/src/plugins/platforms/testlite/qglxglcontext.cpp @@ -62,8 +62,10 @@ QGLXGLContext::QGLXGLContext(Display *xdpy) QGLXGLContext::~QGLXGLContext() { - if (m_context) + if (m_context) { + qDebug("Destroying GLX context 0x%x", m_context); glXDestroyContext(m_display, m_context); + } } bool QGLXGLContext::create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) @@ -88,10 +90,10 @@ bool QGLXGLContext::create(QPaintDevice* device, const QGLFormat& format, QPlatf int matchingCount = 0; visualInfo = XGetVisualInfo(m_display, VisualIDMask, &visualInfoTemplate, &matchingCount); - qDebug("Creating a GLX context for visual ID %d", visualInfoTemplate.visualid); - m_context = glXCreateContext(m_display, visualInfo, 0, True); + qDebug("Created GLX context 0x%x for visual ID %d", m_context, visualInfoTemplate.visualid); + return true; } -- cgit v0.12 From 6362d2a751294242296dd1bf06f24cf5961a9561 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 8 Apr 2010 17:05:08 +0200 Subject: port VNC plugin to platform api name change --- src/gui/kernel/qplatformscreen_lite.h | 3 +- src/plugins/platforms/fb_base/fb_base.cpp | 56 +++++++++++------------ src/plugins/platforms/fb_base/fb_base.h | 30 ++++++------ src/plugins/platforms/vnc/main.cpp | 14 +++--- src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp | 24 +++++----- src/plugins/platforms/vnc/qgraphicssystem_vnc.h | 22 ++++----- src/plugins/platforms/vnc/qvnccursor.cpp | 2 +- src/plugins/platforms/vnc/qvnccursor.h | 4 +- src/plugins/platforms/vnc/qvncserver.cpp | 16 +++---- src/plugins/platforms/vnc/qvncserver.h | 26 +++++------ src/plugins/platforms/vnc/vnc.pro | 4 +- 11 files changed, 101 insertions(+), 100 deletions(-) diff --git a/src/gui/kernel/qplatformscreen_lite.h b/src/gui/kernel/qplatformscreen_lite.h index da0e26b..abdf362 100644 --- a/src/gui/kernel/qplatformscreen_lite.h +++ b/src/gui/kernel/qplatformscreen_lite.h @@ -44,6 +44,7 @@ #include #include +#include QT_BEGIN_HEADER @@ -51,7 +52,7 @@ QT_BEGIN_NAMESPACE QT_MODULE(Gui) -class Q_GUI_EXPORT QPlatformScreen +class Q_GUI_EXPORT QPlatformScreen : public QObject { public: virtual ~QPlatformScreen() { } diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index d30746a..a2a6609 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -6,7 +6,7 @@ #include #include -QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen *scr) +QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QPlatformScreen *scr) : QGraphicsSystemCursor(scr), currentRect(QRect()), prevRect(QRect()) { graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); @@ -81,7 +81,7 @@ void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget screen->setDirty(currentRect); } -QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) +QFbPlatformScreen::QFbPlatformScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) { mScreenImage = new QImage(mGeometry.size(), mFormat); redrawTimer.setSingleShot(true); @@ -89,7 +89,7 @@ QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDe QObject::connect(&redrawTimer, SIGNAL(timeout()), this, SLOT(doRedraw())); } -void QGraphicsSystemFbScreen::setGeometry(QRect rect) +void QFbPlatformScreen::setGeometry(QRect rect) { delete mScreenImage; mGeometry = rect; @@ -99,17 +99,17 @@ void QGraphicsSystemFbScreen::setGeometry(QRect rect) invalidateRectCache(); } -void QGraphicsSystemFbScreen::setDepth(int depth) +void QFbPlatformScreen::setDepth(int depth) { mDepth = depth; } -void QGraphicsSystemFbScreen::setPhysicalSize(QSize size) +void QFbPlatformScreen::setPhysicalSize(QSize size) { mPhysicalSize = size; } -void QGraphicsSystemFbScreen::setFormat(QImage::Format format) +void QFbPlatformScreen::setFormat(QImage::Format format) { mFormat = format; delete mScreenImage; @@ -118,13 +118,13 @@ void QGraphicsSystemFbScreen::setFormat(QImage::Format format) compositePainter = 0; } -QGraphicsSystemFbScreen::~QGraphicsSystemFbScreen() +QFbPlatformScreen::~QFbPlatformScreen() { delete compositePainter; delete mScreenImage; } -void QGraphicsSystemFbScreen::setDirty(const QRect &rect) +void QFbPlatformScreen::setDirty(const QRect &rect) { repaintRegion += rect; if (!redrawTimer.isActive()) { @@ -132,7 +132,7 @@ void QGraphicsSystemFbScreen::setDirty(const QRect &rect) } } -void QGraphicsSystemFbScreen::generateRects() +void QFbPlatformScreen::generateRects() { cachedRects.clear(); QRegion remainingScreen(mGeometry); @@ -157,7 +157,7 @@ void QGraphicsSystemFbScreen::generateRects() -QRegion QGraphicsSystemFbScreen::doRedraw() +QRegion QFbPlatformScreen::doRedraw() { QRegion touchedRegion; if (cursor) @@ -227,21 +227,21 @@ QRegion QGraphicsSystemFbScreen::doRedraw() return touchedRegion; } -void QGraphicsSystemFbScreen::removeWindowSurface(QGraphicsSystemFbWindowSurface * surface) +void QFbPlatformScreen::removeWindowSurface(QFbWindowSurface * surface) { windowStack.removeOne(surface); invalidateRectCache(); setDirty(surface->geometry()); } -void QGraphicsSystemFbWindowSurface::raise() +void QFbWindowSurface::raise() { mScreen->raise(this); } -void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) +void QFbPlatformScreen::raise(QWindowSurface * surface) { - QGraphicsSystemFbWindowSurface *s = static_cast(surface); + QFbWindowSurface *s = static_cast(surface); int index = windowStack.indexOf(s); if (index <= 0) return; @@ -250,14 +250,14 @@ void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) setDirty(s->geometry()); } -void QGraphicsSystemFbWindowSurface::lower() +void QFbWindowSurface::lower() { mScreen->lower(this); } -void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) +void QFbPlatformScreen::lower(QWindowSurface * surface) { - QGraphicsSystemFbWindowSurface *s = static_cast(surface); + QFbWindowSurface *s = static_cast(surface); int index = windowStack.indexOf(s); if (index == -1 || index == (windowStack.size() - 1)) return; @@ -266,7 +266,7 @@ void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) setDirty(s->geometry()); } -QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const +QWidget * QFbPlatformScreen::topLevelAt(const QPoint & p) const { for(int i = 0; i < windowStack.size(); i++) { if (windowStack[i]->geometry().contains(p, false) && @@ -278,7 +278,7 @@ QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const return 0; } -QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window) +QFbWindowSurface::QFbWindowSurface(QFbPlatformScreen *screen, QWidget *window) : QWindowSurface(window), mScreen(screen), visibleFlag(false) @@ -289,12 +289,12 @@ QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFb windowId = winIdGenerator.fetchAndAddRelaxed(1); } -QGraphicsSystemFbWindowSurface::~QGraphicsSystemFbWindowSurface() +QFbWindowSurface::~QFbWindowSurface() { mScreen->removeWindowSurface(this); } -void QGraphicsSystemFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +void QFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(widget); Q_UNUSED(offset); @@ -314,7 +314,7 @@ void QGraphicsSystemFbWindowSurface::flush(QWidget *widget, const QRegion ®io mScreen->setDirty(dirtyRegion); } -void QGraphicsSystemFbWindowSurface::setGeometry(const QRect &rect) +void QFbWindowSurface::setGeometry(const QRect &rect) { // store previous geometry for screen update oldGeometry = geometry(); @@ -329,36 +329,36 @@ void QGraphicsSystemFbWindowSurface::setGeometry(const QRect &rect) QWindowSurface::setGeometry(rect); } -bool QGraphicsSystemFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +bool QFbWindowSurface::scroll(const QRegion &area, int dx, int dy) { return QWindowSurface::scroll(area, dx, dy); } -void QGraphicsSystemFbWindowSurface::beginPaint(const QRegion ®ion) +void QFbWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); } -void QGraphicsSystemFbWindowSurface::endPaint(const QRegion ®ion) +void QFbWindowSurface::endPaint(const QRegion ®ion) { Q_UNUSED(region); } -void QGraphicsSystemFbWindowSurface::setVisible(bool visible) +void QFbWindowSurface::setVisible(bool visible) { visibleFlag = visible; mScreen->invalidateRectCache(); mScreen->setDirty(geometry()); } -Qt::WindowFlags QGraphicsSystemFbWindowSurface::setWindowFlags(Qt::WindowFlags type) +Qt::WindowFlags QFbWindowSurface::setWindowFlags(Qt::WindowFlags type) { flags = type; mScreen->invalidateRectCache(); return flags; } -Qt::WindowFlags QGraphicsSystemFbWindowSurface::windowFlags() const +Qt::WindowFlags QFbWindowSurface::windowFlags() const { return flags; } diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 7f9b005..fef769c 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -1,23 +1,23 @@ #ifndef QLIGHTHOUSEGRAPHICSSCREEN_H #define QLIGHTHOUSEGRAPHICSSCREEN_H -#include +#include #include #include #include #include -#include +#include class QMouseEvent; class QSize; class QPainter; -class QGraphicsSystemFbScreen; +class QFbPlatformScreen; class QGraphicsSystemSoftwareCursor : public QGraphicsSystemCursor { public: - QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen * scr); + QGraphicsSystemSoftwareCursor(QPlatformScreen * scr); // output methods QRect dirtyRect(); @@ -39,11 +39,11 @@ private: QRect getCurrentRect(); }; -class QGraphicsSystemFbWindowSurface : public QWindowSurface +class QFbWindowSurface : public QWindowSurface { public: - QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window); - ~QGraphicsSystemFbWindowSurface(); + QFbWindowSurface(QFbPlatformScreen *screen, QWidget *window); + ~QFbWindowSurface(); virtual QPaintDevice *paintDevice() { return &mImage; } virtual void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); @@ -65,7 +65,7 @@ public: WId winId() const { return windowId; } protected: - QGraphicsSystemFbScreen *mScreen; + QFbPlatformScreen *mScreen; QRect oldGeometry; QImage mImage; bool visibleFlag; @@ -74,12 +74,12 @@ protected: WId windowId; }; -class QGraphicsSystemFbScreen : public QGraphicsSystemScreen +class QFbPlatformScreen : public QPlatformScreen { Q_OBJECT public: - QGraphicsSystemFbScreen(); - ~QGraphicsSystemFbScreen(); + QFbPlatformScreen(); + ~QFbPlatformScreen(); virtual QRect geometry() const { return mGeometry; } virtual int depth() const { return mDepth; } @@ -93,8 +93,8 @@ public: virtual void setDirty(const QRect &rect); - virtual void removeWindowSurface(QGraphicsSystemFbWindowSurface * surface); - virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { + virtual void removeWindowSurface(QFbWindowSurface * surface); + virtual void addWindowSurface(QFbWindowSurface * surface) { windowStack.prepend(surface); invalidateRectCache(); } virtual void raise(QWindowSurface * surface); virtual void lower(QWindowSurface * surface); @@ -104,7 +104,7 @@ public: QPaintDevice * paintDevice() const { return mScreenImage; } protected: - QList windowStack; + QList windowStack; QRegion repaintRegion; QGraphicsSystemSoftwareCursor * cursor; QTimer redrawTimer; @@ -125,7 +125,7 @@ private: QList > cachedRects; void invalidateRectCache() { isUpToDate = false; } - friend class QGraphicsSystemFbWindowSurface; + friend class QFbWindowSurface; bool isUpToDate; }; diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp index f10748a..baaca3e 100644 --- a/src/plugins/platforms/vnc/main.cpp +++ b/src/plugins/platforms/vnc/main.cpp @@ -39,34 +39,34 @@ ** ****************************************************************************/ -#include +#include #include "qgraphicssystem_vnc.h" #include QT_BEGIN_NAMESPACE -class QVNCGraphicsSystemPlugin : public QGraphicsSystemPlugin +class QVNCPlatformIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QGraphicsSystem *create(const QString&); + QPlatformIntegration *create(const QString&); }; -QStringList QVNCGraphicsSystemPlugin::keys() const +QStringList QVNCPlatformIntegrationPlugin::keys() const { QStringList list; list << "VNC"; return list; } -QGraphicsSystem* QVNCGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration* QVNCPlatformIntegrationPlugin::create(const QString& system) { if (system.toLower() == "vnc") - return new QVNCGraphicsSystem; + return new QVNCPlatformIntegration; return 0; } -Q_EXPORT_PLUGIN2(vnc, QVNCGraphicsSystemPlugin) +Q_EXPORT_PLUGIN2(vnc, QVNCPlatformIntegrationPlugin) QT_END_NAMESPACE diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp index 7815f24..85f1b73 100644 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp @@ -51,8 +51,8 @@ #include -QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() - : QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() +QVNCPlatformScreen::QVNCPlatformScreen() + : QFbPlatformScreen::QFbPlatformScreen() { int w = 800; int h = 600; @@ -69,21 +69,21 @@ QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() setPhysicalSize((geometry().size()*254)/720); - d_ptr = new QVNCGraphicsSystemScreenPrivate(this); + d_ptr = new QVNCPlatformScreenPrivate(this); cursor = new QVNCCursor(d_ptr->vncServer, this); d_ptr->vncServer->setCursor(static_cast(cursor)); } -QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() +QVNCDirtyMap *QVNCPlatformScreen::dirtyMap() { return d_ptr->dirty; } -QRegion QVNCGraphicsSystemScreen::doRedraw() +QRegion QVNCPlatformScreen::doRedraw() { QRegion touched; - touched = QGraphicsSystemFbScreen::doRedraw(); + touched = QFbPlatformScreen::doRedraw(); QVector rects = touched.rects(); for (int i = 0; i < rects.size(); i++) @@ -92,24 +92,24 @@ QRegion QVNCGraphicsSystemScreen::doRedraw() } -QVNCGraphicsSystem::QVNCGraphicsSystem() +QVNCPlatformIntegration::QVNCPlatformIntegration() { - mPrimaryScreen = new QVNCGraphicsSystemScreen(); + mPrimaryScreen = new QVNCPlatformScreen(); mScreens.append(mPrimaryScreen); } -QPixmapData *QVNCGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +QPixmapData *QVNCPlatformIntegration::createPixmapData(QPixmapData::PixelType type) const { return new QRasterPixmapData(type); } -QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const +QWindowSurface *QVNCPlatformIntegration::createWindowSurface(QWidget *widget) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. - QGraphicsSystemFbWindowSurface * surface; - surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); + QFbWindowSurface * surface; + surface = new QFbWindowSurface(mPrimaryScreen, widget); mPrimaryScreen->addWindowSurface(surface); return surface; } diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h index b3349b7..731d3e9 100644 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h @@ -42,51 +42,51 @@ #ifndef QGRAPHICSSYSTEM_VNC_H #define QGRAPHICSSYSTEM_VNC_H -#include #include "qvnccursor.h" #include "../fb_base/fb_base.h" +#include QT_BEGIN_NAMESPACE class QVNCServer; class QVNCDirtyMap; -class QVNCGraphicsSystemScreenPrivate; +class QVNCPlatformScreenPrivate; -class QVNCGraphicsSystemScreen : public QGraphicsSystemFbScreen +class QVNCPlatformScreen : public QFbPlatformScreen { public: - QVNCGraphicsSystemScreen(); + QVNCPlatformScreen(); int linestep() const { return image() ? image()->bytesPerLine() : 0; } uchar *base() const { return image() ? image()->bits() : 0; } QVNCDirtyMap *dirtyMap(); public: - QVNCGraphicsSystemScreenPrivate *d_ptr; + QVNCPlatformScreenPrivate *d_ptr; private: QVNCServer *server; QRegion doRedraw(); }; -class QVNCGraphicsSystemPrivate; +class QVNCPlatformIntegrationPrivate; -class QVNCGraphicsSystem : public QGraphicsSystem +class QVNCPlatformIntegration : public QPlatformIntegration { public: - QVNCGraphicsSystem(); + QVNCPlatformIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QWindowSurface *createWindowSurface(QWidget *widget) const; - QList screens() const { return mScreens; } + QList screens() const { return mScreens; } private: - QVNCGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; + QVNCPlatformScreen *mPrimaryScreen; + QList mScreens; }; diff --git a/src/plugins/platforms/vnc/qvnccursor.cpp b/src/plugins/platforms/vnc/qvnccursor.cpp index fb214d8..5f9fbb6 100644 --- a/src/plugins/platforms/vnc/qvnccursor.cpp +++ b/src/plugins/platforms/vnc/qvnccursor.cpp @@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE -QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) +QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCPlatformScreen *scr ) :QGraphicsSystemSoftwareCursor(scr), useVncCursor(false), server(srvr) { } diff --git a/src/plugins/platforms/vnc/qvnccursor.h b/src/plugins/platforms/vnc/qvnccursor.h index 8ea0f45..0e4d7ca 100644 --- a/src/plugins/platforms/vnc/qvnccursor.h +++ b/src/plugins/platforms/vnc/qvnccursor.h @@ -48,12 +48,12 @@ QT_BEGIN_NAMESPACE -class QVNCGraphicsSystemScreen; +class QVNCPlatformScreen; class QVNCServer; class QVNCCursor : public QGraphicsSystemSoftwareCursor { public: - QVNCCursor(QVNCServer *, QVNCGraphicsSystemScreen *); + QVNCCursor(QVNCServer *, QVNCPlatformScreen *); // input methods void setCursorMode(bool vnc); diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp index ea576d4..ce08082 100644 --- a/src/plugins/platforms/vnc/qvncserver.cpp +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -358,13 +358,13 @@ bool QRfbClientCutText::read(QTcpSocket *s) //=========================================================================== -QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen) +QVNCServer::QVNCServer(QVNCPlatformScreen *screen) : qvnc_screen(screen), cursor(0) { init(5900); } -QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen, int id) +QVNCServer::QVNCServer(QVNCPlatformScreen *screen, int id) : qvnc_screen(screen), cursor(0) { init(5900 + id); @@ -620,7 +620,7 @@ void QVNCServer::readClient() } #if 0//Q_BYTE_ORDER == Q_BIG_ENDIAN -bool QVNCGraphicsSystemScreen::swapBytes() const +bool QVNCScreen::swapBytes() const { if (depth() != 16) return false; @@ -1499,7 +1499,7 @@ static void blendCursor(QImage &image, const QRect &imageRect) } #endif // QT_NO_QWS_CURSOR -QVNCDirtyMap::QVNCDirtyMap(QVNCGraphicsSystemScreen *s) +QVNCDirtyMap::QVNCDirtyMap(QVNCPlatformScreen *s) : bytesPerPixel(0), numDirty(0), screen(s) { bytesPerPixel = (screen->depth() + 7) / 8; @@ -1885,7 +1885,7 @@ void QVNCServer::discardClient() -QVNCGraphicsSystemScreenPrivate::QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent) +QVNCPlatformScreenPrivate::QVNCPlatformScreenPrivate(QVNCPlatformScreen *parent) : dpiX(72), dpiY(72), doOnScreenSurface(false), refreshRate(25), vncServer(0), q_ptr(parent) { @@ -1902,12 +1902,12 @@ QVNCGraphicsSystemScreenPrivate::QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSys dirty = new QVNCDirtyMapOptimized(q_ptr); } -QVNCGraphicsSystemScreenPrivate::~QVNCGraphicsSystemScreenPrivate() +QVNCPlatformScreenPrivate::~QVNCPlatformScreenPrivate() { } -void QVNCGraphicsSystemScreenPrivate::setDirty(const QRect& rect, bool force) +void QVNCPlatformScreenPrivate::setDirty(const QRect& rect, bool force) { if (rect.isEmpty()) return; @@ -1916,7 +1916,7 @@ void QVNCGraphicsSystemScreenPrivate::setDirty(const QRect& rect, bool force) // q_ptr->screen()->setDirty(rect); if (!vncServer || !vncServer->isConnected()) { -// qDebug() << "QVNCGraphicsSystemScreenPrivate::setDirty() - Not connected"; +// qDebug() << "QVNCScreenPrivate::setDirty() - Not connected"; return; } const QRect r = rect; // .translated(-q_ptr->offset()); diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h index 4fcdbae..6830ddd 100644 --- a/src/plugins/platforms/vnc/qvncserver.h +++ b/src/plugins/platforms/vnc/qvncserver.h @@ -72,7 +72,7 @@ class QVNCServer; class QVNCCursor : public QProxyScreenCursor { public: - QVNCCursor(QVNCGraphicsSystemScreen *s); + QVNCCursor(QVNCScreen *s); ~QVNCCursor(); void hide(); @@ -82,7 +82,7 @@ public: private: void setDirty(const QRect &r) const; - QVNCGraphicsSystemScreen *screen; + QVNCScreen *screen; }; class QVNCClientCursor : public QProxyScreenCursor @@ -106,7 +106,7 @@ private: class QVNCDirtyMap { public: - QVNCDirtyMap(QVNCGraphicsSystemScreen *screen); + QVNCDirtyMap(QVNCPlatformScreen *screen); virtual ~QVNCDirtyMap(); void reset(); @@ -122,7 +122,7 @@ public: protected: uchar *map; - QVNCGraphicsSystemScreen *screen; + QVNCPlatformScreen *screen; uchar *buffer; int bufferWidth; int bufferHeight; @@ -134,7 +134,7 @@ template class QVNCDirtyMapOptimized : public QVNCDirtyMap { public: - QVNCDirtyMapOptimized(QVNCGraphicsSystemScreen *screen) : QVNCDirtyMap(screen) {} + QVNCDirtyMapOptimized(QVNCPlatformScreen *screen) : QVNCDirtyMap(screen) {} ~QVNCDirtyMapOptimized() {} void setDirty(int x, int y, bool force = false); @@ -246,11 +246,11 @@ public: quint32 length; }; -class QVNCGraphicsSystemScreenPrivate : public QObject +class QVNCPlatformScreenPrivate : public QObject { public: - QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent); - ~QVNCGraphicsSystemScreenPrivate(); + QVNCPlatformScreenPrivate(QVNCPlatformScreen *parent); + ~QVNCPlatformScreenPrivate(); void setDirty(const QRect &rect, bool force = false); void configure(); @@ -266,7 +266,7 @@ public: QSharedMemory shm; #endif - QVNCGraphicsSystemScreen *q_ptr; + QVNCPlatformScreen *q_ptr; }; class QRfbEncoder @@ -438,8 +438,8 @@ class QVNCServer : public QObject { Q_OBJECT public: - QVNCServer(QVNCGraphicsSystemScreen *screen); - QVNCServer(QVNCGraphicsSystemScreen *screen, int id); + QVNCServer(QVNCPlatformScreen *screen); + QVNCServer(QVNCPlatformScreen *screen, int id); ~QVNCServer(); void setDirty(); @@ -464,7 +464,7 @@ public: return pixelFormat.bitsPerPixel / 8; } - inline QVNCGraphicsSystemScreen* screen() const { return qvnc_screen; } + inline QVNCPlatformScreen* screen() const { return qvnc_screen; } inline QVNCDirtyMap* dirtyMap() const { return qvnc_screen->dirtyMap(); } inline QTcpSocket* clientSocket() const { return client; } QImage *screenImage() const; @@ -519,7 +519,7 @@ private: #endif bool dirtyCursor; int refreshRate; - QVNCGraphicsSystemScreen *qvnc_screen; + QVNCPlatformScreen *qvnc_screen; #ifndef QT_NO_QWS_CURSOR QVNCClientCursor *qvnc_cursor; #endif diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index 0b73b5b..b1da572 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -1,7 +1,7 @@ TARGET = qvncgraphicssystem include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp qgraphicssystem_vnc.cpp HEADERS = qgraphicssystem_vnc.h @@ -14,6 +14,6 @@ SOURCES += qvnccursor.cpp include(../fb_base/fb_base.pri) -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target -- cgit v0.12 From 473d152acc9fe0d04167406c0926363c3eddd16c Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 9 Apr 2010 10:25:06 +0200 Subject: Compile after the QPlatformWindow change ...but it doesn't *quite* work yet. --- .../testlite/qplatformintegration_testlite.cpp | 17 +++- .../testlite/qplatformintegration_testlite.h | 3 +- .../platforms/testlite/qwindowsurface_testlite.cpp | 109 ++++++++++++++------- .../platforms/testlite/qwindowsurface_testlite.h | 24 ++++- src/plugins/platforms/testlite/x11util.cpp | 18 ++-- src/plugins/platforms/testlite/x11util.h | 4 +- 6 files changed, 119 insertions(+), 56 deletions(-) diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp index 6811e2e..3e73821 100644 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp @@ -57,20 +57,20 @@ public: MyCursor(QPlatformScreen *screen) : QGraphicsSystemCursor(screen) {} void changeCursor(QCursor * cursor, QWidget * widget) { - QTestLiteWindowSurface *ws = 0; + QTestLiteWindow *w = 0; if (widget) { QWidget *window = widget->window(); - ws = static_cast(window->windowSurface()); + w = static_cast(window->platformWindow()); } else { // No X11 cursor control when there is no widget under the cursor return; } //qDebug() << "changeCursor" << widget << ws; - if (!ws) + if (!w) return; - ws->setCursor(cursor); + w->setCursor(cursor); } }; @@ -101,7 +101,7 @@ QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) return new QRasterPixmapData(type); } -QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget) const +QWindowSurface *QTestLiteIntegration::createWindowSurfaceForWindow(QWidget *widget, WId) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. @@ -110,6 +110,13 @@ QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget) const } +QPlatformWindow *QTestLiteIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + return new QTestLiteWindow(const_cast(this), mPrimaryScreen, widget); +} + + + QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, int height) const { QImage img = xd->grabWindow(window, x, y, width, height); diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.h b/src/plugins/platforms/testlite/qplatformintegration_testlite.h index c540c48..bd27d89 100644 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.h +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.h @@ -74,7 +74,8 @@ public: QTestLiteIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; QPixmap grabWindow(WId window, int x, int y, int width, int height) const; diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp index e2574f9..801491c 100644 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp @@ -58,19 +58,16 @@ QTestLiteWindowSurface::QTestLiteWindowSurface xw(0) { - - xw = new MyWindow(platformIntegration->xd, 0,0,300,300); - xw->windowSurface = this; + xw = static_cast(window->platformWindow())->xw; +// xw = new MyWindow(platformIntegration->xd, 0,0,300,300); // qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; - setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility } QTestLiteWindowSurface::~QTestLiteWindowSurface() { // qDebug() << "~QTestLiteWindowSurface" << xw->window; - delete xw; } QPaintDevice *QTestLiteWindowSurface::paintDevice() @@ -90,18 +87,18 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const } -void QTestLiteWindowSurface::setGeometry(const QRect &rect) -{ - QRect oldRect = geometry(); - if (rect == oldRect) - return; +// void QTestLiteWindowSurface::resize(const QSize &s) +// { +// if (s == size()) +// return; - QWindowSurface::setGeometry(rect); +// QWindowSurface::resize(size); - //if unchanged ### -// xw->setSize(rect.width(), rect.height()); - xw->setGeometry(rect.x(), rect.y(), rect.width(), rect.height()); -} +// //if unchanged ### +// // xw->setSize(rect.width(), rect.height()); + + +// } //### scroll logic copied from QRasterWindowSurface, we should make better API for this @@ -168,7 +165,8 @@ bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); - xw->resizeBuffer(geometry().size()); + qDebug() << "QTestLiteWindowSurface::beginPaint" << size(); + xw->resizeBuffer(size()); } void QTestLiteWindowSurface::endPaint(const QRegion ®ion) @@ -178,6 +176,29 @@ void QTestLiteWindowSurface::endPaint(const QRegion ®ion) } +/************************************************************************** +** QTestLiteWindow +**************************************************************************/ + +QTestLiteWindow::QTestLiteWindow(QTestLiteIntegration *platformIntegration, + QTestLiteScreen */*screen*/, QWidget *window) + :QPlatformWindow(window) +{ + xw = new MyWindow(platformIntegration->xd, 0,0,300,300); + setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility + + xw->windowTL = this; +} + + +QTestLiteWindow::~QTestLiteWindow() +{ + delete xw; +} + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Mouse event stuff @@ -220,7 +241,7 @@ static Qt::KeyboardModifiers translateModifiers(int s) return ret; } -void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) +void QTestLiteWindow::handleMouseEvent(QEvent::Type type, void *ev) { static QPoint mousePoint; @@ -245,7 +266,7 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) bool hor = (((e->button == Button4 || e->button == Button5) && (modifiers & Qt::AltModifier)) || (e->button == 6 || e->button == 7)); - QWindowSystemInterface::handleWheelEvent(window(), e->time, + QWindowSystemInterface::handleWheelEvent(widget(), e->time, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), delta, hor ? Qt::Horizontal : Qt::Vertical); @@ -258,33 +279,33 @@ void QTestLiteWindowSurface::handleMouseEvent(QEvent::Type type, void *ev) buttons ^= button; // X event uses state *before*, Qt uses state *after* - QWindowSystemInterface::handleMouseEvent(window(), e->time, QPoint(e->x, e->y), + QWindowSystemInterface::handleMouseEvent(widget(), e->time, QPoint(e->x, e->y), QPoint(e->x_root, e->y_root), buttons); mousePoint = QPoint(e->x_root, e->y_root); } -void QTestLiteWindowSurface::handleGeometryChange(int x, int y, int w, int h) +void QTestLiteWindow::handleGeometryChange(int x, int y, int w, int h) { - QWindowSystemInterface::handleGeometryChange(window(), QRect(x,y,w,h)); + QWindowSystemInterface::handleGeometryChange(widget(), QRect(x,y,w,h)); } -void QTestLiteWindowSurface::handleCloseEvent() +void QTestLiteWindow::handleCloseEvent() { - QWindowSystemInterface::handleCloseEvent(window()); + QWindowSystemInterface::handleCloseEvent(widget()); } -void QTestLiteWindowSurface::handleEnterEvent() +void QTestLiteWindow::handleEnterEvent() { - QWindowSystemInterface::handleEnterEvent(window()); + QWindowSystemInterface::handleEnterEvent(widget()); } -void QTestLiteWindowSurface::handleLeaveEvent() +void QTestLiteWindow::handleLeaveEvent() { - QWindowSystemInterface::handleLeaveEvent(window()); + QWindowSystemInterface::handleLeaveEvent(widget()); } @@ -568,7 +589,7 @@ static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) } } -void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) +void QTestLiteWindow::handleKeyEvent(QEvent::Type type, void *ev) { XKeyEvent *e = static_cast(ev); @@ -592,12 +613,12 @@ void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) modifiers ^= modifierFromKeyCode(qtcode); if (qtcode) { - QWindowSystemInterface::handleKeyEvent(window(), e->time, type, qtcode, modifiers); + QWindowSystemInterface::handleKeyEvent(widget(), e->time, type, qtcode, modifiers); } else if (chars[0]) { int qtcode = chars.toUpper()[0]; //Not exactly right... if (modifiers & Qt::ControlModifier && qtcode < ' ') qtcode = chars[0] + '@'; - QWindowSystemInterface::handleKeyEvent(window(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); + QWindowSystemInterface::handleKeyEvent(widget(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); } else { qWarning() << "unknown X keycode" << hex << e->keycode << keySym; } @@ -605,7 +626,19 @@ void QTestLiteWindowSurface::handleKeyEvent(QEvent::Type type, void *ev) -Qt::WindowFlags QTestLiteWindowSurface::setWindowFlags(Qt::WindowFlags flags) +void QTestLiteWindow::setGeometry(const QRect &rect) +{ + QRect oldRect = geometry(); + if (rect == oldRect) + return; + + //if unchanged ### + xw->setGeometry(rect.x(), rect.y(), rect.width(), rect.height()); +} + + + +Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) { Q_ASSERT(flags & Qt::Window); @@ -617,19 +650,19 @@ Qt::WindowFlags QTestLiteWindowSurface::setWindowFlags(Qt::WindowFlags flags) } -Qt::WindowFlags QTestLiteWindowSurface::windowFlags() const +Qt::WindowFlags QTestLiteWindow::windowFlags() const { return window_flags; } -void QTestLiteWindowSurface::setVisible(bool visible) +void QTestLiteWindow::setVisible(bool visible) { //qDebug() << "QTestLiteWindowSurface::setVisible" << visible << xw->window; xw->setVisible(visible); } -WId QTestLiteWindowSurface::winId() const +WId QTestLiteWindow::winId() const { if (xw) return (WId) xw->window; @@ -637,24 +670,24 @@ WId QTestLiteWindowSurface::winId() const return WId(0); } -void QTestLiteWindowSurface::raise() +void QTestLiteWindow::raise() { WId window = winId(); XRaiseWindow(mPlatformIntegration->xd->display, window); } -void QTestLiteWindowSurface::lower() +void QTestLiteWindow::lower() { WId window = winId(); XLowerWindow(mPlatformIntegration->xd->display, window); } -void QTestLiteWindowSurface::setWindowTitle(const QString &title) +void QTestLiteWindow::setWindowTitle(const QString &title) { xw->setWindowTitle(title); } -void QTestLiteWindowSurface::setCursor(QCursor *cursor) +void QTestLiteWindow::setCursor(QCursor *cursor) { xw->setCursor(cursor); } diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.h b/src/plugins/platforms/testlite/qwindowsurface_testlite.h index ffd2d3a..d713cc2 100644 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.h +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.h @@ -43,6 +43,7 @@ #define QWINDOWSURFACE_TESTLITE_H #include +#include #include QT_BEGIN_NAMESPACE @@ -61,12 +62,28 @@ public: QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); +// void resize(const QSize &size); bool scroll(const QRegion &area, int dx, int dy); void beginPaint(const QRegion ®ion); void endPaint(const QRegion ®ion); +private: + QTestLiteIntegration *mPlatformIntegration; + QTestLiteScreen *mScreen; + Qt::WindowFlags window_flags; + MyWindow *xw; +}; + + +class QTestLiteWindow : public QPlatformWindow +{ +public: + QTestLiteWindow(QTestLiteIntegration *platformIntegration, + QTestLiteScreen *screen, QWidget *window); + ~QTestLiteWindow(); + + void handleMouseEvent(QEvent::Type, void *); //forwarding X types is apparently impossible :( void handleKeyEvent(QEvent::Type, void *); void handleGeometryChange(int x, int y, int w, int h); @@ -74,6 +91,8 @@ public: void handleEnterEvent(); void handleLeaveEvent(); + void setGeometry(const QRect &rect); + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); Qt::WindowFlags windowFlags() const; void setVisible(bool visible); @@ -89,8 +108,11 @@ private: QTestLiteScreen *mScreen; Qt::WindowFlags window_flags; MyWindow *xw; + + friend class QTestLiteWindowSurface; //### needs refactoring }; + QT_END_NAMESPACE #endif diff --git a/src/plugins/platforms/testlite/x11util.cpp b/src/plugins/platforms/testlite/x11util.cpp index 6d2966f..a869347 100644 --- a/src/plugins/platforms/testlite/x11util.cpp +++ b/src/plugins/platforms/testlite/x11util.cpp @@ -511,7 +511,7 @@ GC MyWindow::createGC() void MyWindow::closeEvent() { - windowSurface->handleCloseEvent(); + windowTL->handleCloseEvent(); } void MyWindow::paintEvent() @@ -633,7 +633,7 @@ void MyWindow::resizeEvent(XConfigureEvent *e) qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height << "img:" << shm_img.size(); #endif - windowSurface->handleGeometryChange(xpos, ypos, width, height); + windowTL->handleGeometryChange(xpos, ypos, width, height); } #if 0 @@ -657,7 +657,7 @@ void MyWindow::enterEvent(XCrossingEvent *) #ifdef MYX11_DEBUG qDebug() << "MyWindow::enterEvent" << hex << window; #endif - windowSurface->handleEnterEvent(); + windowTL->handleEnterEvent(); } void MyWindow::leaveEvent(XCrossingEvent *) @@ -665,7 +665,7 @@ void MyWindow::leaveEvent(XCrossingEvent *) #ifdef MYX11_DEBUG qDebug() << "MyWindow::enterEvent" << hex << window; #endif - windowSurface->handleLeaveEvent(); + windowTL->handleLeaveEvent(); } void MyWindow::mousePressEvent(XButtonEvent *e) @@ -688,17 +688,17 @@ void MyWindow::mousePressEvent(XButtonEvent *e) prevX = e->x; prevY = e->y; - windowSurface->handleMouseEvent(type, e); + windowTL->handleMouseEvent(type, e); } void MyWindow::mouseReleaseEvent(XButtonEvent *e) { - windowSurface->handleMouseEvent(QEvent::MouseButtonRelease, e); + windowTL->handleMouseEvent(QEvent::MouseButtonRelease, e); } void MyWindow::mouseMoveEvent(XButtonEvent *e) { - windowSurface->handleMouseEvent(QEvent::MouseMove, e); + windowTL->handleMouseEvent(QEvent::MouseMove, e); } #ifdef KeyPress @@ -707,7 +707,7 @@ void MyWindow::mouseMoveEvent(XButtonEvent *e) void MyWindow::keyPressEvent(XKeyEvent *e) { - windowSurface->handleKeyEvent(QEvent::KeyPress, e); + windowTL->handleKeyEvent(QEvent::KeyPress, e); } #ifdef KeyRelease @@ -716,7 +716,7 @@ void MyWindow::keyPressEvent(XKeyEvent *e) void MyWindow::keyReleaseEvent(XKeyEvent *e) { - windowSurface->handleKeyEvent(QEvent::KeyRelease, e); + windowTL->handleKeyEvent(QEvent::KeyRelease, e); } diff --git a/src/plugins/platforms/testlite/x11util.h b/src/plugins/platforms/testlite/x11util.h index 79e7461..b28d1e8 100644 --- a/src/plugins/platforms/testlite/x11util.h +++ b/src/plugins/platforms/testlite/x11util.h @@ -85,7 +85,7 @@ public: //### MyX11Cursors * cursors; }; -class QTestLiteWindowSurface; //### abstract callback interface, anyone? +class QTestLiteWindow; //### abstract callback interface, anyone? struct MyShmImageInfo; @@ -133,7 +133,7 @@ public: //### MyDisplay *xd; GC gc; - QTestLiteWindowSurface *windowSurface; + QTestLiteWindow *windowTL; int currentCursor; bool painted; -- cgit v0.12 From 662eab575f3678364fbd3f317624fdd840e03c3c Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 9 Apr 2010 10:25:59 +0200 Subject: port linuxfb to platform api name change --- src/plugins/platforms/linuxfb/linuxfb.pro | 4 +- src/plugins/platforms/linuxfb/main.cpp | 14 +++--- .../platforms/linuxfb/qgraphicssystem_linuxfb.cpp | 52 +++++++++++----------- .../platforms/linuxfb/qgraphicssystem_linuxfb.h | 22 ++++----- 4 files changed, 45 insertions(+), 47 deletions(-) diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index 031b843..2633a10 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -1,12 +1,12 @@ TARGET = qlinuxfbgraphicssystem include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp qgraphicssystem_linuxfb.cpp HEADERS = qgraphicssystem_linuxfb.h include(../fb_base/fb_base.pri) -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp index 4d03fe5..4f7684b 100644 --- a/src/plugins/platforms/linuxfb/main.cpp +++ b/src/plugins/platforms/linuxfb/main.cpp @@ -39,33 +39,33 @@ ** ****************************************************************************/ -#include +#include #include "qgraphicssystem_linuxfb.h" QT_BEGIN_NAMESPACE -class QLinuxFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +class QLinuxFbIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QGraphicsSystem *create(const QString&); + QPlatformIntegration *create(const QString&); }; -QStringList QLinuxFbGraphicsSystemPlugin::keys() const +QStringList QLinuxFbIntegrationPlugin::keys() const { QStringList list; list << "LinuxFb"; return list; } -QGraphicsSystem* QLinuxFbGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration* QLinuxFbIntegrationPlugin::create(const QString& system) { if (system.toLower() == "linuxfb") - return new QLinuxFbGraphicsSystem; + return new QLinuxFbIntegration; return 0; } -Q_EXPORT_PLUGIN2(linuxfb, QLinuxFbGraphicsSystemPlugin) +Q_EXPORT_PLUGIN2(linuxfb, QLinuxFbIntegrationPlugin) QT_END_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp index 44960bb..6310062 100644 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp @@ -69,11 +69,11 @@ QT_BEGIN_NAMESPACE -class QLinuxFbGraphicsSystemPrivate +class QLinuxFbPrivate { public: - QLinuxFbGraphicsSystemPrivate(); - ~QLinuxFbGraphicsSystemPrivate(); + QLinuxFbPrivate(); + ~QLinuxFbPrivate(); void openTty(); void closeTty(); @@ -94,7 +94,7 @@ public: QString displaySpec; }; -QLinuxFbGraphicsSystemPrivate::QLinuxFbGraphicsSystemPrivate() +QLinuxFbPrivate::QLinuxFbPrivate() : fd(-1), blank(true), doGraphicsMode(true), #ifdef QT_QWS_DEPTH_GENERIC doGenericColors(false), @@ -103,12 +103,12 @@ QLinuxFbGraphicsSystemPrivate::QLinuxFbGraphicsSystemPrivate() { } -QLinuxFbGraphicsSystemPrivate::~QLinuxFbGraphicsSystemPrivate() +QLinuxFbPrivate::~QLinuxFbPrivate() { closeTty(); } -void QLinuxFbGraphicsSystemPrivate::openTty() +void QLinuxFbPrivate::openTty() { const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0}; @@ -139,7 +139,7 @@ void QLinuxFbGraphicsSystemPrivate::openTty() QT_WRITE(ttyfd, termctl, sizeof(termctl)); } -void QLinuxFbGraphicsSystemPrivate::closeTty() +void QLinuxFbPrivate::closeTty() { if (ttyfd == -1) return; @@ -155,9 +155,9 @@ void QLinuxFbGraphicsSystemPrivate::closeTty() ttyfd = -1; } -QLinuxFbGraphicsSystem::QLinuxFbGraphicsSystem() +QLinuxFbIntegration::QLinuxFbIntegration() { - d_ptr = new QLinuxFbGraphicsSystemPrivate(); + d_ptr = new QLinuxFbPrivate(); // XXX QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); @@ -168,20 +168,18 @@ QLinuxFbGraphicsSystem::QLinuxFbGraphicsSystem() // Create a QImage directly on the screen's framebuffer. // This is the blit target for copying windows to the screen. - mPrimaryScreen = new QLinuxFbGraphicsSystemScreen(data, w, h, lstep, - screenFormat); + mPrimaryScreen = new QLinuxFbScreen(data, w, h, lstep, screenFormat); mPrimaryScreen->setPhysicalSize(QSize(physWidth, physHeight)); - mScreens.append(mPrimaryScreen); } -QLinuxFbGraphicsSystem::~QLinuxFbGraphicsSystem() +QLinuxFbIntegration::~QLinuxFbIntegration() { delete mPrimaryScreen; delete d_ptr; } -bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) +bool QLinuxFbIntegration::connect(const QString &displaySpec) { const QStringList args = displaySpec.split(QLatin1Char(':')); @@ -411,7 +409,7 @@ bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) return true; } -bool QLinuxFbGraphicsSystem::initDevice() +bool QLinuxFbIntegration::initDevice() { d_ptr->openTty(); @@ -538,7 +536,7 @@ bool QLinuxFbGraphicsSystem::initDevice() return true; } -void QLinuxFbGraphicsSystem::setPixelFormat(struct fb_var_screeninfo info) +void QLinuxFbIntegration::setPixelFormat(struct fb_var_screeninfo info) { const fb_bitfield rgba[4] = { info.red, info.green, info.blue, info.transp }; @@ -626,7 +624,7 @@ void QLinuxFbGraphicsSystem::setPixelFormat(struct fb_var_screeninfo info) screenFormat = format; } -void QLinuxFbGraphicsSystem::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) +void QLinuxFbIntegration::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) { if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; @@ -756,7 +754,7 @@ void QLinuxFbGraphicsSystem::createPalette(fb_cmap &cmap, fb_var_screeninfo &vin } } -void QLinuxFbGraphicsSystem::blank(bool on) +void QLinuxFbIntegration::blank(bool on) { if (d_ptr->blank == on) return; @@ -781,22 +779,22 @@ void QLinuxFbGraphicsSystem::blank(bool on) d_ptr->blank = on; } -QPixmapData *QLinuxFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +QPixmapData *QLinuxFbIntegration::createPixmapData(QPixmapData::PixelType type) const { return new QRasterPixmapData(type); } -QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurface(QWidget *widget) const +QWindowSurface *QLinuxFbIntegration::createWindowSurface(QWidget *widget) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. - QGraphicsSystemFbWindowSurface * surface = - new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); + QFbWindowSurface * surface = + new QFbWindowSurface(mPrimaryScreen, widget); mPrimaryScreen->addWindowSurface(surface); return surface; } -QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, +QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat) : compositePainter(0) { data = d; @@ -811,7 +809,7 @@ QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, cursor = new QGraphicsSystemSoftwareCursor(this); } -void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) +void QLinuxFbScreen::setGeometry(QRect rect) { mGeometry = rect; delete mFbScreenImage; @@ -825,7 +823,7 @@ void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) mFormat); } -void QLinuxFbGraphicsSystemScreen::setFormat(QImage::Format format) +void QLinuxFbScreen::setFormat(QImage::Format format) { mFormat = format; delete mFbScreenImage; @@ -839,10 +837,10 @@ void QLinuxFbGraphicsSystemScreen::setFormat(QImage::Format format) mFormat); } -QRegion QLinuxFbGraphicsSystemScreen::doRedraw() +QRegion QLinuxFbScreen::doRedraw() { QRegion touched; - touched = QGraphicsSystemFbScreen::doRedraw(); + touched = QFbPlatformScreen::doRedraw(); if (!compositePainter) { compositePainter = new QPainter(mFbScreenImage); diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h index cc8ce7e..bb4c920 100644 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h @@ -42,15 +42,15 @@ #ifndef QGRAPHICSSYSTEM_LINUXFB_H #define QGRAPHICSSYSTEM_LINUXFB_H -#include +#include #include "../fb_base/fb_base.h" QT_BEGIN_NAMESPACE -class QLinuxFbGraphicsSystemScreen : public QGraphicsSystemFbScreen +class QLinuxFbScreen : public QFbPlatformScreen { public: - QLinuxFbGraphicsSystemScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); + QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); void setGeometry(QRect rect); void setFormat(QImage::Format format); @@ -65,26 +65,26 @@ private: QPainter *compositePainter; }; -class QLinuxFbGraphicsSystemPrivate; +class QLinuxFbPrivate; struct fb_cmap; struct fb_var_screeninfo; struct fb_fix_screeninfo; -class QLinuxFbGraphicsSystem : public QGraphicsSystem +class QLinuxFbIntegration : public QPlatformIntegration { public: - QLinuxFbGraphicsSystem(); - ~QLinuxFbGraphicsSystem(); + QLinuxFbIntegration(); + ~QLinuxFbIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QWindowSurface *createWindowSurface(QWidget *widget) const; - QList screens() const { return mScreens; } + QList screens() const { return mScreens; } private: - QLinuxFbGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; - QLinuxFbGraphicsSystemPrivate *d_ptr; + QLinuxFbScreen *mPrimaryScreen; + QList mScreens; + QLinuxFbPrivate *d_ptr; enum PixelType { NormalPixel, BGRPixel }; -- cgit v0.12 From 9020859ae8cf450a8f32608d54adfde089128355 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 9 Apr 2010 12:53:32 +0200 Subject: This seems to fix the resize issues --- src/gui/kernel/qapplication_lite.cpp | 1 + src/gui/painting/qbackingstore.cpp | 19 ++++++++++++++----- .../platforms/testlite/qwindowsurface_testlite.cpp | 1 - 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index c8d65ff..87fa933 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -767,6 +767,7 @@ void QApplicationPrivate::processGeometryChange(QWidget *tlw, const QRect &newRe if (isResize) { QResizeEvent e(tlw->data->crect.size(), cr.size()); QApplication::sendSpontaneousEvent(tlw, &e); + tlw->update(); } if (isMove) { diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index 30c042e..cc16fd0 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -419,9 +419,12 @@ void QWidgetBackingStore::endPaint(const QRegion &cleaned, QWindowSurface *windo QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const { const bool widgetDirty = widget && widget != tlw; -#if !defined(Q_WS_LITE) const QRect tlwRect(topLevelRect()); +#if defined(Q_WS_LITE) + const QRect surfaceGeometry(tlwRect.topLeft(), windowSurface->size()); +#else const QRect surfaceGeometry(windowSurface->geometry()); +#endif if (surfaceGeometry != tlwRect && surfaceGeometry.size() != tlwRect.size()) { if (widgetDirty) { const QRect dirtyTlwRect = QRect(QPoint(), tlwRect.size()); @@ -431,7 +434,6 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const } return QRect(QPoint(), tlwRect.size()); } -#endif // Calculate the region that needs repaint. QRegion r(dirty); @@ -1156,11 +1158,14 @@ void QWidgetBackingStore::sync() const bool updatesDisabled = !tlw->updatesEnabled(); bool repaintAllWidgets = false; -#if !defined(Q_WS_LITE) + const bool inTopLevelResize = tlwExtra->inTopLevelResize; const QRect tlwRect(topLevelRect()); +#ifdef Q_WS_LITE + const QRect surfaceGeometry(tlwRect.topLeft(), windowSurface->size()); +#else const QRect surfaceGeometry(windowSurface->geometry()); - +#endif if (inTopLevelResize || surfaceGeometry != tlwRect) { if ((inTopLevelResize || surfaceGeometry.size() != tlwRect.size()) && !updatesDisabled) { if (hasStaticContents()) { @@ -1180,9 +1185,13 @@ void QWidgetBackingStore::sync() repaintAllWidgets = true; } } +#ifdef Q_WS_LITE + windowSurface->resize(tlwRect.size()); +#else windowSurface->setGeometry(tlwRect); - } #endif + } + if (updatesDisabled) return; diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp index 801491c..81fa247 100644 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp @@ -165,7 +165,6 @@ bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); - qDebug() << "QTestLiteWindowSurface::beginPaint" << size(); xw->resizeBuffer(size()); } -- cgit v0.12 From 6dd82100e43749e3bd43b127587aa16a0bc4bbac Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 9 Apr 2010 17:25:22 +0200 Subject: Refactoring TestLite The x11util classes stopped being generic a long time ago. Now that we have a clean separation between surface and window in the API, it makes sense to have the platform-specific logic in the derived classes, instead of having an extra level of indirection. --- .../testlite/qplatformintegration_testlite.cpp | 9 +- src/plugins/platforms/testlite/qtestlitewindow.cpp | 1558 ++++++++++++++++++++ src/plugins/platforms/testlite/qtestlitewindow.h | 157 ++ .../platforms/testlite/qwindowsurface_testlite.cpp | 671 ++------- .../platforms/testlite/qwindowsurface_testlite.h | 54 +- src/plugins/platforms/testlite/testlite.pro | 8 +- src/plugins/platforms/testlite/x11util.cpp | 1215 --------------- src/plugins/platforms/testlite/x11util.h | 204 --- 8 files changed, 1860 insertions(+), 2016 deletions(-) create mode 100644 src/plugins/platforms/testlite/qtestlitewindow.cpp create mode 100644 src/plugins/platforms/testlite/qtestlitewindow.h delete mode 100644 src/plugins/platforms/testlite/x11util.cpp delete mode 100644 src/plugins/platforms/testlite/x11util.h diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp index 3e73821..f9b3135 100644 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp @@ -39,6 +39,8 @@ ** ****************************************************************************/ + + #include "qplatformintegration_testlite.h" #include "qwindowsurface_testlite.h" #include @@ -47,7 +49,7 @@ #include -#include "x11util.h" +#include "qtestlitewindow.h" QT_BEGIN_NAMESPACE @@ -105,12 +107,11 @@ QWindowSurface *QTestLiteIntegration::createWindowSurfaceForWindow(QWidget *widg { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. - return new QTestLiteWindowSurface - (const_cast(this), mPrimaryScreen, widget); + return new QTestLiteWindowSurface(mPrimaryScreen, widget); } -QPlatformWindow *QTestLiteIntegration::createPlatformWindow(QWidget *widget, WId winId) const +QPlatformWindow *QTestLiteIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const { return new QTestLiteWindow(const_cast(this), mPrimaryScreen, widget); } diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp new file mode 100644 index 0000000..db3904f --- /dev/null +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -0,0 +1,1558 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qwindowsurface_testlite.h" +#include "qplatformintegration_testlite.h" +#include + +#include "qtestlitewindow.h" + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include +#include + + +#include + +#include + + + +//### remove stuff we don't want from qt_x11_p.h +#undef ATOM +#undef X11 + +QT_BEGIN_NAMESPACE + +static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); +static bool seen_badwindow; + + +static Atom wmProtocolsAtom; +static Atom wmDeleteWindowAtom; + + + +class MyX11CursorNode +{ +public: + MyX11CursorNode(int id, Cursor c) { idValue = id; cursorValue = c; refCount = 1; } + QDateTime expiration() { return t; } + void setExpiration(QDateTime val) { t = val; } + MyX11CursorNode * ante() { return before; } + void setAnte(MyX11CursorNode *node) { before = node; } + MyX11CursorNode * post() { return after; } + void setPost(MyX11CursorNode *node) { after = node; } + Cursor cursor() { return cursorValue; } + int id() { return idValue; } + unsigned int refCount; + +private: + MyX11CursorNode *before; + MyX11CursorNode *after; + QDateTime t; + Cursor cursorValue; + int idValue; + + Display * display; +}; + + + + + +class MyX11Cursors : public QObject +{ + Q_OBJECT +public: + MyX11Cursors(Display * d); + ~MyX11Cursors() { timer.stop(); } + void incrementUseCount(int id); + void decrementUseCount(int id); + void createNode(int id, Cursor c); + bool exists(int id) { return lookupMap.contains(id); } + Cursor cursor(int id); +public slots: + void timeout(); + +private: + void removeNode(MyX11CursorNode *node); + void insertNode(MyX11CursorNode *node); + + // linked list of cursors currently not assigned to any window + MyX11CursorNode *firstExpired; + MyX11CursorNode *lastExpired; + + QHash lookupMap; + QTimer timer; + + Display *display; + + int removalDelay; +}; + + + + + +QTestLiteWindow::QTestLiteWindow(QTestLiteIntegration *platformIntegration, + QTestLiteScreen */*screen*/, QWidget *window) + :QPlatformWindow(window) +{ + xd = platformIntegration->xd; + xd->windowList.append(this); + { + int x = 0; + int y = 0; + int w = 300; + int h = 300; //### + + x_window = XCreateSimpleWindow(xd->display, xd->rootWindow(), + x, y, w, h, 0 /*border_width*/, + xd->blackPixel(), xd->whitePixel()); + + } + + width = -1; + height = -1; + xpos = -1; + ypos = -1; + + XSetWindowBackgroundPixmap(xd->display, x_window, XNone); + + XSelectInput(xd->display, x_window, ExposureMask | KeyPressMask | KeyReleaseMask | + EnterWindowMask | LeaveWindowMask | FocusChangeMask | + PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | + StructureNotifyMask); + + gc = createGC(); + + XChangeProperty (xd->display, x_window, + wmProtocolsAtom, + XA_ATOM, 32, PropModeAppend, + (unsigned char *) &wmDeleteWindowAtom, 1); + + + setWindowTitle(QLatin1String("Qt Lighthouse")); + + currentCursor = -1; + windowSurface = 0; + + setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility + + //xw->windowTL = this; +} + + +QTestLiteWindow::~QTestLiteWindow() +{ +#ifdef MYX11_DEBUG + qDebug() << "~QTestLiteWindow" << hex << x_window; +#endif + XFreeGC(xd->display, gc); + XDestroyWindow(xd->display, x_window); + + xd->windowList.removeAll(this); +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Mouse event stuff + + + + +static Qt::MouseButtons translateMouseButtons(int s) +{ + Qt::MouseButtons ret = 0; + if (s & Button1Mask) + ret |= Qt::LeftButton; + if (s & Button2Mask) + ret |= Qt::MidButton; + if (s & Button3Mask) + ret |= Qt::RightButton; + return ret; +} + + +static Qt::KeyboardModifiers translateModifiers(int s) +{ + const uchar qt_alt_mask = Mod1Mask; + const uchar qt_meta_mask = Mod4Mask; + + + Qt::KeyboardModifiers ret = 0; + if (s & ShiftMask) + ret |= Qt::ShiftModifier; + if (s & ControlMask) + ret |= Qt::ControlModifier; + if (s & qt_alt_mask) + ret |= Qt::AltModifier; + if (s & qt_meta_mask) + ret |= Qt::MetaModifier; +#if 0 + if (s & qt_mode_switch_mask) + ret |= Qt::GroupSwitchModifier; +#endif + return ret; +} + +void QTestLiteWindow::handleMouseEvent(QEvent::Type type, XButtonEvent *e) +{ + static QPoint mousePoint; + + Qt::MouseButton button = Qt::NoButton; + Qt::MouseButtons buttons = translateMouseButtons(e->state); + Qt::KeyboardModifiers modifiers = translateModifiers(e->state); + if (type != QEvent::MouseMove) { + switch (e->button) { + case Button1: button = Qt::LeftButton; break; + case Button2: button = Qt::MidButton; break; + case Button3: button = Qt::RightButton; break; + case Button4: + case Button5: + case 6: + case 7: { + //mouse wheel + if (type == QEvent::MouseButtonPress) { + //logic borrowed from qapplication_x11.cpp + int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); + bool hor = (((e->button == Button4 || e->button == Button5) + && (modifiers & Qt::AltModifier)) + || (e->button == 6 || e->button == 7)); + QWindowSystemInterface::handleWheelEvent(widget(), e->time, + QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + delta, hor ? Qt::Horizontal : Qt::Vertical); + } + return; + } + default: break; + } + } + + buttons ^= button; // X event uses state *before*, Qt uses state *after* + + QWindowSystemInterface::handleMouseEvent(widget(), e->time, QPoint(e->x, e->y), + QPoint(e->x_root, e->y_root), + buttons); + + mousePoint = QPoint(e->x_root, e->y_root); +} + +void QTestLiteWindow::handleCloseEvent() +{ + QWindowSystemInterface::handleCloseEvent(widget()); +} + + +void QTestLiteWindow::handleEnterEvent() +{ + QWindowSystemInterface::handleEnterEvent(widget()); +} + +void QTestLiteWindow::handleLeaveEvent() +{ + QWindowSystemInterface::handleLeaveEvent(widget()); +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Key event stuff -- not pretty either +// +// What we want to do is to port Robert's keytable code properly + +// keyboard mapping table +static const unsigned int keyTbl[] = { + + // misc keys + + XK_Escape, Qt::Key_Escape, + XK_Tab, Qt::Key_Tab, + XK_ISO_Left_Tab, Qt::Key_Backtab, + XK_BackSpace, Qt::Key_Backspace, + XK_Return, Qt::Key_Return, + XK_Insert, Qt::Key_Insert, + XK_Delete, Qt::Key_Delete, + XK_Clear, Qt::Key_Delete, + XK_Pause, Qt::Key_Pause, + XK_Print, Qt::Key_Print, + 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq + 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq + + // cursor movement + + XK_Home, Qt::Key_Home, + XK_End, Qt::Key_End, + XK_Left, Qt::Key_Left, + XK_Up, Qt::Key_Up, + XK_Right, Qt::Key_Right, + XK_Down, Qt::Key_Down, + XK_Prior, Qt::Key_PageUp, + XK_Next, Qt::Key_PageDown, + + // modifiers + + XK_Shift_L, Qt::Key_Shift, + XK_Shift_R, Qt::Key_Shift, + XK_Shift_Lock, Qt::Key_Shift, + XK_Control_L, Qt::Key_Control, + XK_Control_R, Qt::Key_Control, + XK_Meta_L, Qt::Key_Meta, + XK_Meta_R, Qt::Key_Meta, + XK_Alt_L, Qt::Key_Alt, + XK_Alt_R, Qt::Key_Alt, + XK_Caps_Lock, Qt::Key_CapsLock, + XK_Num_Lock, Qt::Key_NumLock, + XK_Scroll_Lock, Qt::Key_ScrollLock, + XK_Super_L, Qt::Key_Super_L, + XK_Super_R, Qt::Key_Super_R, + XK_Menu, Qt::Key_Menu, + XK_Hyper_L, Qt::Key_Hyper_L, + XK_Hyper_R, Qt::Key_Hyper_R, + XK_Help, Qt::Key_Help, + 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab + 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) + 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) + + // numeric and function keypad keys + + XK_KP_Space, Qt::Key_Space, + XK_KP_Tab, Qt::Key_Tab, + XK_KP_Enter, Qt::Key_Enter, + //XK_KP_F1, Qt::Key_F1, + //XK_KP_F2, Qt::Key_F2, + //XK_KP_F3, Qt::Key_F3, + //XK_KP_F4, Qt::Key_F4, + XK_KP_Home, Qt::Key_Home, + XK_KP_Left, Qt::Key_Left, + XK_KP_Up, Qt::Key_Up, + XK_KP_Right, Qt::Key_Right, + XK_KP_Down, Qt::Key_Down, + XK_KP_Prior, Qt::Key_PageUp, + XK_KP_Next, Qt::Key_PageDown, + XK_KP_End, Qt::Key_End, + XK_KP_Begin, Qt::Key_Clear, + XK_KP_Insert, Qt::Key_Insert, + XK_KP_Delete, Qt::Key_Delete, + XK_KP_Equal, Qt::Key_Equal, + XK_KP_Multiply, Qt::Key_Asterisk, + XK_KP_Add, Qt::Key_Plus, + XK_KP_Separator, Qt::Key_Comma, + XK_KP_Subtract, Qt::Key_Minus, + XK_KP_Decimal, Qt::Key_Period, + XK_KP_Divide, Qt::Key_Slash, + + // International input method support keys + + // International & multi-key character composition + XK_ISO_Level3_Shift, Qt::Key_AltGr, + XK_Multi_key, Qt::Key_Multi_key, + XK_Codeinput, Qt::Key_Codeinput, + XK_SingleCandidate, Qt::Key_SingleCandidate, + XK_MultipleCandidate, Qt::Key_MultipleCandidate, + XK_PreviousCandidate, Qt::Key_PreviousCandidate, + + // Misc Functions + XK_Mode_switch, Qt::Key_Mode_switch, + XK_script_switch, Qt::Key_Mode_switch, + + // Japanese keyboard support + XK_Kanji, Qt::Key_Kanji, + XK_Muhenkan, Qt::Key_Muhenkan, + //XK_Henkan_Mode, Qt::Key_Henkan_Mode, + XK_Henkan_Mode, Qt::Key_Henkan, + XK_Henkan, Qt::Key_Henkan, + XK_Romaji, Qt::Key_Romaji, + XK_Hiragana, Qt::Key_Hiragana, + XK_Katakana, Qt::Key_Katakana, + XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana, + XK_Zenkaku, Qt::Key_Zenkaku, + XK_Hankaku, Qt::Key_Hankaku, + XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku, + XK_Touroku, Qt::Key_Touroku, + XK_Massyo, Qt::Key_Massyo, + XK_Kana_Lock, Qt::Key_Kana_Lock, + XK_Kana_Shift, Qt::Key_Kana_Shift, + XK_Eisu_Shift, Qt::Key_Eisu_Shift, + XK_Eisu_toggle, Qt::Key_Eisu_toggle, + //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou, + //XK_Zen_Koho, Qt::Key_Zen_Koho, + //XK_Mae_Koho, Qt::Key_Mae_Koho, + XK_Kanji_Bangou, Qt::Key_Codeinput, + XK_Zen_Koho, Qt::Key_MultipleCandidate, + XK_Mae_Koho, Qt::Key_PreviousCandidate, + +#ifdef XK_KOREAN + // Korean keyboard support + XK_Hangul, Qt::Key_Hangul, + XK_Hangul_Start, Qt::Key_Hangul_Start, + XK_Hangul_End, Qt::Key_Hangul_End, + XK_Hangul_Hanja, Qt::Key_Hangul_Hanja, + XK_Hangul_Jamo, Qt::Key_Hangul_Jamo, + XK_Hangul_Romaja, Qt::Key_Hangul_Romaja, + //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput, + XK_Hangul_Codeinput, Qt::Key_Codeinput, + XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja, + XK_Hangul_Banja, Qt::Key_Hangul_Banja, + XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja, + XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja, + //XK_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate, + //XK_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate, + //XK_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate, + XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate, + XK_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate, + XK_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate, + XK_Hangul_Special, Qt::Key_Hangul_Special, + //XK_Hangul_switch, Qt::Key_Hangul_switch, + XK_Hangul_switch, Qt::Key_Mode_switch, +#endif // XK_KOREAN + + // dead keys + XK_dead_grave, Qt::Key_Dead_Grave, + XK_dead_acute, Qt::Key_Dead_Acute, + XK_dead_circumflex, Qt::Key_Dead_Circumflex, + XK_dead_tilde, Qt::Key_Dead_Tilde, + XK_dead_macron, Qt::Key_Dead_Macron, + XK_dead_breve, Qt::Key_Dead_Breve, + XK_dead_abovedot, Qt::Key_Dead_Abovedot, + XK_dead_diaeresis, Qt::Key_Dead_Diaeresis, + XK_dead_abovering, Qt::Key_Dead_Abovering, + XK_dead_doubleacute, Qt::Key_Dead_Doubleacute, + XK_dead_caron, Qt::Key_Dead_Caron, + XK_dead_cedilla, Qt::Key_Dead_Cedilla, + XK_dead_ogonek, Qt::Key_Dead_Ogonek, + XK_dead_iota, Qt::Key_Dead_Iota, + XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound, + XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound, + XK_dead_belowdot, Qt::Key_Dead_Belowdot, + XK_dead_hook, Qt::Key_Dead_Hook, + XK_dead_horn, Qt::Key_Dead_Horn, + +#if 0 + // Special multimedia keys + // currently only tested with MS internet keyboard + + // browsing keys + XF86XK_Back, Qt::Key_Back, + XF86XK_Forward, Qt::Key_Forward, + XF86XK_Stop, Qt::Key_Stop, + XF86XK_Refresh, Qt::Key_Refresh, + XF86XK_Favorites, Qt::Key_Favorites, + XF86XK_AudioMedia, Qt::Key_LaunchMedia, + XF86XK_OpenURL, Qt::Key_OpenUrl, + XF86XK_HomePage, Qt::Key_HomePage, + XF86XK_Search, Qt::Key_Search, + + // media keys + XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, + XF86XK_AudioMute, Qt::Key_VolumeMute, + XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, + XF86XK_AudioPlay, Qt::Key_MediaPlay, + XF86XK_AudioStop, Qt::Key_MediaStop, + XF86XK_AudioPrev, Qt::Key_MediaPrevious, + XF86XK_AudioNext, Qt::Key_MediaNext, + XF86XK_AudioRecord, Qt::Key_MediaRecord, + + // launch keys + XF86XK_Mail, Qt::Key_LaunchMail, + XF86XK_MyComputer, Qt::Key_Launch0, + XF86XK_Calculator, Qt::Key_Launch1, + XF86XK_Standby, Qt::Key_Standby, + + XF86XK_Launch0, Qt::Key_Launch2, + XF86XK_Launch1, Qt::Key_Launch3, + XF86XK_Launch2, Qt::Key_Launch4, + XF86XK_Launch3, Qt::Key_Launch5, + XF86XK_Launch4, Qt::Key_Launch6, + XF86XK_Launch5, Qt::Key_Launch7, + XF86XK_Launch6, Qt::Key_Launch8, + XF86XK_Launch7, Qt::Key_Launch9, + XF86XK_Launch8, Qt::Key_LaunchA, + XF86XK_Launch9, Qt::Key_LaunchB, + XF86XK_LaunchA, Qt::Key_LaunchC, + XF86XK_LaunchB, Qt::Key_LaunchD, + XF86XK_LaunchC, Qt::Key_LaunchE, + XF86XK_LaunchD, Qt::Key_LaunchF, +#endif + +#if 0 + // Qtopia keys + QTOPIAXK_Select, Qt::Key_Select, + QTOPIAXK_Yes, Qt::Key_Yes, + QTOPIAXK_No, Qt::Key_No, + QTOPIAXK_Cancel, Qt::Key_Cancel, + QTOPIAXK_Printer, Qt::Key_Printer, + QTOPIAXK_Execute, Qt::Key_Execute, + QTOPIAXK_Sleep, Qt::Key_Sleep, + QTOPIAXK_Play, Qt::Key_Play, + QTOPIAXK_Zoom, Qt::Key_Zoom, + QTOPIAXK_Context1, Qt::Key_Context1, + QTOPIAXK_Context2, Qt::Key_Context2, + QTOPIAXK_Context3, Qt::Key_Context3, + QTOPIAXK_Context4, Qt::Key_Context4, + QTOPIAXK_Call, Qt::Key_Call, + QTOPIAXK_Hangup, Qt::Key_Hangup, + QTOPIAXK_Flip, Qt::Key_Flip, +#endif + 0, 0 +}; + + +static int lookupCode(unsigned int xkeycode) +{ + if (xkeycode >= XK_F1 && xkeycode <= XK_F35) + return Qt::Key_F1 + (int(xkeycode) - XK_F1); + + const unsigned int *p = keyTbl; + while (*p) { + if (*p == xkeycode) + return *++p; + p += 2; + } + + return 0; +} + + +static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) +{ + switch (qtcode) { + case Qt::Key_Control: + return Qt::ControlModifier; + case Qt::Key_Alt: + return Qt::AltModifier; + case Qt::Key_Shift: + return Qt::ShiftModifier; + case Qt::Key_Meta: + return Qt::MetaModifier; + default: + return Qt::NoModifier; + } +} + +void QTestLiteWindow::handleKeyEvent(QEvent::Type type, void *ev) +{ + XKeyEvent *e = static_cast(ev); + + KeySym keySym; + QByteArray chars; + chars.resize(513); + + int count = XLookupString(e, chars.data(), chars.size(), &keySym, 0); + Q_UNUSED(count); +// qDebug() << "QTLWS::handleKeyEvent" << count << hex << "XKeysym:" << keySym; +// if (count) +// qDebug() << hex << int(chars[0]) << "String:" << chars; + + Qt::KeyboardModifiers modifiers = translateModifiers(e->state); + + int qtcode = lookupCode(keySym); +// qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers; + + //X11 specifies state *before*, Qt expects state *after* the event + + modifiers ^= modifierFromKeyCode(qtcode); + + if (qtcode) { + QWindowSystemInterface::handleKeyEvent(widget(), e->time, type, qtcode, modifiers); + } else if (chars[0]) { + int qtcode = chars.toUpper()[0]; //Not exactly right... + if (modifiers & Qt::ControlModifier && qtcode < ' ') + qtcode = chars[0] + '@'; + QWindowSystemInterface::handleKeyEvent(widget(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); + } else { + qWarning() << "unknown X keycode" << hex << e->keycode << keySym; + } +} + +void QTestLiteWindow::setGeometry(const QRect &rect) +{ + QRect oldRect = geometry(); + if (rect == oldRect) + return; + + //if unchanged ### + XMoveResizeWindow(xd->display, x_window, rect.x(), rect.y(), rect.width(), rect.height()); +} + + +Qt::WindowFlags QTestLiteWindow::windowFlags() const +{ + return window_flags; +} + +WId QTestLiteWindow::winId() const +{ + return x_window; +} + +void QTestLiteWindow::raise() +{ + XRaiseWindow(mPlatformIntegration->xd->display, x_window); +} + +void QTestLiteWindow::lower() +{ + XLowerWindow(mPlatformIntegration->xd->display, x_window); +} + +void QTestLiteWindow::setWindowTitle(const QString &title) +{ + QByteArray ba = title.toLatin1(); //We're not making a general solution here... + XTextProperty windowName; + windowName.value = (unsigned char *)ba.constData(); + windowName.encoding = XA_STRING; + windowName.format = 8; + windowName.nitems = ba.length(); + + XSetWMName(xd->display, x_window, &windowName); +} + + + +GC QTestLiteWindow::createGC() +{ + GC gc; + + gc = XCreateGC(xd->display, x_window, 0, 0); + if (gc < 0) { + qWarning("QTestLiteWindow::createGC() could not create GC"); + } + return gc; +} + + +void QTestLiteWindow::paintEvent() +{ +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; +#endif + + windowSurface->flush(windowSurface->window(), QRect(xpos,ypos,width, height), QPoint()); +} + + +void QTestLiteWindow::resizeEvent(XConfigureEvent *e) +{ + + if ((e->width != width || e->height != height) && e->x == 0 && e->y == 0) { + //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; + } else { + //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; + xpos = e->x; + ypos = e->y; + } + width = e->width; + height = e->height; + +#ifdef MYX11_DEBUG + qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height << "img:" << shm_img.size(); +#endif + + QWindowSystemInterface::handleGeometryChange(widget(), QRect(xpos, ypos, width, height)); +} + + +void QTestLiteWindow::mousePressEvent(XButtonEvent *e) +{ + static long prevTime = 0; + static Window prevWindow; + static int prevX = -999; + static int prevY = -999; + + QEvent::Type type = QEvent::MouseButtonPress; + + if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() + && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { + type = QEvent::MouseButtonDblClick; + prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time + } else { + prevTime = e->time; + } + prevWindow = e->window; + prevX = e->x; + prevY = e->y; + + handleMouseEvent(type, e); +} + + + +// WindowFlag stuff, lots of copied code from qwidget_x11.cpp... + +//We're hacking here... + + +// MWM support +struct QtMWMHints { + ulong flags, functions, decorations; + long input_mode; + ulong status; +}; + +enum { + MWM_HINTS_FUNCTIONS = (1L << 0), + + MWM_FUNC_ALL = (1L << 0), + MWM_FUNC_RESIZE = (1L << 1), + MWM_FUNC_MOVE = (1L << 2), + MWM_FUNC_MINIMIZE = (1L << 3), + MWM_FUNC_MAXIMIZE = (1L << 4), + MWM_FUNC_CLOSE = (1L << 5), + + MWM_HINTS_DECORATIONS = (1L << 1), + + MWM_DECOR_ALL = (1L << 0), + MWM_DECOR_BORDER = (1L << 1), + MWM_DECOR_RESIZEH = (1L << 2), + MWM_DECOR_TITLE = (1L << 3), + MWM_DECOR_MENU = (1L << 4), + MWM_DECOR_MINIMIZE = (1L << 5), + MWM_DECOR_MAXIMIZE = (1L << 6), + + MWM_HINTS_INPUT_MODE = (1L << 2), + + MWM_INPUT_MODELESS = 0L, + MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, + MWM_INPUT_FULL_APPLICATION_MODAL = 3L +}; + +static Atom mwm_hint_atom = XNone; + +#if 0 +static QtMWMHints GetMWMHints(Display *display, Window window) +{ + QtMWMHints mwmhints; + + Atom type; + int format; + ulong nitems, bytesLeft; + uchar *data = 0; + if ((XGetWindowProperty(display, window, mwm_hint_atom, 0, 5, false, + mwm_hint_atom, &type, &format, &nitems, &bytesLeft, + &data) == Success) + && (type == mwm_hint_atom + && format == 32 + && nitems >= 5)) { + mwmhints = *(reinterpret_cast(data)); + } else { + mwmhints.flags = 0L; + mwmhints.functions = MWM_FUNC_ALL; + mwmhints.decorations = MWM_DECOR_ALL; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + } + + if (data) + XFree(data); + + return mwmhints; +} +#endif + +static void SetMWMHints(Display *display, Window window, const QtMWMHints &mwmhints) +{ + if (mwmhints.flags != 0l) { + XChangeProperty(display, window, mwm_hint_atom, mwm_hint_atom, 32, + PropModeReplace, (unsigned char *) &mwmhints, 5); + } else { + XDeleteProperty(display, window, mwm_hint_atom); + } +} + +// Returns true if we should set WM_TRANSIENT_FOR on \a w +static inline bool isTransient(const QWidget *w) +{ + return ((w->windowType() == Qt::Dialog + || w->windowType() == Qt::Sheet + || w->windowType() == Qt::Tool + || w->windowType() == Qt::SplashScreen + || w->windowType() == Qt::ToolTip + || w->windowType() == Qt::Drawer + || w->windowType() == Qt::Popup) + && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); +} + + + +Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) +{ + Q_ASSERT(flags & Qt::Window); + window_flags = flags; + + if (mwm_hint_atom == XNone) { + mwm_hint_atom = XInternAtom(xd->display, "_MOTIF_WM_HINTS\0", False); + } + +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::setWindowFlags" << hex << window << "flags" << flags; +#endif + Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); + + if (type == Qt::ToolTip) + flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; + if (type == Qt::Popup) + flags |= Qt::X11BypassWindowManagerHint; + + bool topLevel = (flags & Qt::Window); + bool popup = (type == Qt::Popup); + bool dialog = (type == Qt::Dialog + || type == Qt::Sheet); + bool desktop = (type == Qt::Desktop); + bool tool = (type == Qt::Tool || type == Qt::SplashScreen + || type == Qt::ToolTip || type == Qt::Drawer); + + + Q_UNUSED(topLevel); + Q_UNUSED(dialog); + Q_UNUSED(desktop); + + + bool tooltip = (type == Qt::ToolTip); + + XSetWindowAttributes wsa; + + QtMWMHints mwmhints; + mwmhints.flags = 0L; + mwmhints.functions = 0L; + mwmhints.decorations = 0; + mwmhints.input_mode = 0L; + mwmhints.status = 0L; + + + ulong wsa_mask = 0; + if (type != Qt::SplashScreen) { // && customize) { + mwmhints.flags |= MWM_HINTS_DECORATIONS; + + bool customize = flags & Qt::CustomizeWindowHint; + if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { + mwmhints.decorations |= MWM_DECOR_BORDER; + mwmhints.decorations |= MWM_DECOR_RESIZEH; + + if (flags & Qt::WindowTitleHint) + mwmhints.decorations |= MWM_DECOR_TITLE; + + if (flags & Qt::WindowSystemMenuHint) + mwmhints.decorations |= MWM_DECOR_MENU; + + if (flags & Qt::WindowMinimizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MINIMIZE; + mwmhints.functions |= MWM_FUNC_MINIMIZE; + } + + if (flags & Qt::WindowMaximizeButtonHint) { + mwmhints.decorations |= MWM_DECOR_MAXIMIZE; + mwmhints.functions |= MWM_FUNC_MAXIMIZE; + } + + if (flags & Qt::WindowCloseButtonHint) + mwmhints.functions |= MWM_FUNC_CLOSE; + } + } else { + // if type == Qt::SplashScreen + mwmhints.decorations = MWM_DECOR_ALL; + } + + if (tool) { + wsa.save_under = True; + wsa_mask |= CWSaveUnder; + } + + if (flags & Qt::X11BypassWindowManagerHint) { + wsa.override_redirect = True; + wsa_mask |= CWOverrideRedirect; + } +#if 0 + if (wsa_mask && initializeWindow) { + Q_ASSERT(id); + XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); + } +#endif + if (mwmhints.functions != 0) { + mwmhints.flags |= MWM_HINTS_FUNCTIONS; + mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + } else { + mwmhints.functions = MWM_FUNC_ALL; + } + + if (!(flags & Qt::FramelessWindowHint) + && flags & Qt::CustomizeWindowHint + && flags & Qt::WindowTitleHint + && !(flags & + (Qt::WindowMinimizeButtonHint + | Qt::WindowMaximizeButtonHint + | Qt::WindowCloseButtonHint))) { + // a special case - only the titlebar without any button + mwmhints.flags = MWM_HINTS_FUNCTIONS; + mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; + mwmhints.decorations = 0; + } + + SetMWMHints(xd->display, x_window, mwmhints); + +//##### only if initializeWindow??? + + if (popup || tooltip) { // popup widget +#ifdef MYX11_DEBUG + qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; +#endif + // set EWMH window types + // setNetWmWindowTypes(); + + wsa.override_redirect = True; + wsa.save_under = True; + XChangeWindowAttributes(xd->display, x_window, CWOverrideRedirect | CWSaveUnder, + &wsa); + } else { +#ifdef MYX11_DEBUG + qDebug() << "Doing XChangeWindowAttributes for non-popup"; +#endif + } + + return flags; +} + +void QTestLiteWindow::setVisible(bool visible) +{ +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::setVisible" << visible << hex << window; +#endif + if (visible) + XMapWindow(xd->display, x_window); + else + XUnmapWindow(xd->display, x_window); +} + + +void QTestLiteWindow::setCursor(QCursor * cursor) +{ + int id = cursor->handle(); + if (id == currentCursor) + return; + Cursor c; + if (!xd->cursors->exists(id)) { + if (cursor->shape() == Qt::BitmapCursor) + c = createCursorBitmap(cursor); + else + c = createCursorShape(cursor->shape()); + if (!c) { + return; + } + xd->cursors->createNode(id, c); + } else { + xd->cursors->incrementUseCount(id); + c = xd->cursors->cursor(id); + } + + if (currentCursor != -1) + xd->cursors->decrementUseCount(currentCursor); + currentCursor = id; + + XDefineCursor(xd->display, x_window, c); + XFlush(xd->display); +} + +Cursor QTestLiteWindow::createCursorBitmap(QCursor * cursor) +{ + XColor bg, fg; + bg.red = 255 << 8; + bg.green = 255 << 8; + bg.blue = 255 << 8; + fg.red = 0; + fg.green = 0; + fg.blue = 0; + QPoint spot = cursor->hotSpot(); + Window rootwin = x_window; + + QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); + QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); + + int width = cursor->bitmap()->width(); + int height = cursor->bitmap()->height(); + int bytesPerLine = mapImage.bytesPerLine(); + int destLineSize = width / 8; + if (width % 8) + destLineSize++; + + const uchar * map = mapImage.bits(); + const uchar * mask = maskImage.bits(); + + char * mapBits = new char[height * destLineSize]; + char * maskBits = new char[height * destLineSize]; + for (int i = 0; i < height; i++) { + memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); + memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); + } + + Pixmap cp = XCreateBitmapFromData(xd->display, rootwin, mapBits, width, height); + Pixmap mp = XCreateBitmapFromData(xd->display, rootwin, maskBits, width, height); + Cursor c = XCreatePixmapCursor(xd->display, cp, mp, &fg, &bg, spot.x(), spot.y()); + XFreePixmap(xd->display, cp); + XFreePixmap(xd->display, mp); + delete[] mapBits; + delete[] maskBits; + + return c; +} + +Cursor QTestLiteWindow::createCursorShape(int cshape) +{ + Cursor cursor = 0; + + if (cshape < 0 || cshape > Qt::LastCursor) + return 0; + + switch (cshape) { + case Qt::ArrowCursor: + cursor = XCreateFontCursor(xd->display, XC_left_ptr); + break; + case Qt::UpArrowCursor: + cursor = XCreateFontCursor(xd->display, XC_center_ptr); + break; + case Qt::CrossCursor: + cursor = XCreateFontCursor(xd->display, XC_crosshair); + break; + case Qt::WaitCursor: + cursor = XCreateFontCursor(xd->display, XC_watch); + break; + case Qt::IBeamCursor: + cursor = XCreateFontCursor(xd->display, XC_xterm); + break; + case Qt::SizeAllCursor: + cursor = XCreateFontCursor(xd->display, XC_fleur); + break; + case Qt::PointingHandCursor: + cursor = XCreateFontCursor(xd->display, XC_hand2); + break; + case Qt::SizeBDiagCursor: + cursor = XCreateFontCursor(xd->display, XC_top_right_corner); + break; + case Qt::SizeFDiagCursor: + cursor = XCreateFontCursor(xd->display, XC_bottom_right_corner); + break; + case Qt::SizeVerCursor: + case Qt::SplitVCursor: + cursor = XCreateFontCursor(xd->display, XC_sb_v_double_arrow); + break; + case Qt::SizeHorCursor: + case Qt::SplitHCursor: + cursor = XCreateFontCursor(xd->display, XC_sb_h_double_arrow); + break; + case Qt::WhatsThisCursor: + cursor = XCreateFontCursor(xd->display, XC_question_arrow); + break; + case Qt::ForbiddenCursor: + cursor = XCreateFontCursor(xd->display, XC_circle); + break; + case Qt::BusyCursor: + cursor = XCreateFontCursor(xd->display, XC_watch); + break; + + default: //default cursor for all the rest + break; + } + return cursor; +} + + +MyX11Cursors::MyX11Cursors(Display * d) : firstExpired(0), lastExpired(0), display(d), removalDelay(3) +{ + connect(&timer, SIGNAL(timeout()), this, SLOT(timeout())); +} + +void MyX11Cursors::insertNode(MyX11CursorNode * node) +{ + QDateTime now = QDateTime::currentDateTime(); + QDateTime timeout = now.addSecs(removalDelay); + node->setExpiration(timeout); + node->setPost(0); + if (lastExpired) { + lastExpired->setPost(node); + node->setAnte(lastExpired); + } + lastExpired = node; + if (!firstExpired) { + firstExpired = node; + node->setAnte(0); + int interval = removalDelay * 1000; + timer.setInterval(interval); + timer.start(); + } +} + +void MyX11Cursors::removeNode(MyX11CursorNode * node) +{ + MyX11CursorNode *pre = node->ante(); + MyX11CursorNode *post = node->post(); + if (pre) + pre->setPost(post); + if (post) + post->setAnte(pre); + if (node == lastExpired) + lastExpired = pre; + if (node == firstExpired) { + firstExpired = post; + if (!firstExpired) { + timer.stop(); + return; + } + int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; + timer.stop(); + timer.setInterval(interval); + timer.start(); + } +} + +void MyX11Cursors::incrementUseCount(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + if (!node->refCount) + removeNode(node); + node->refCount++; +} + +void MyX11Cursors::decrementUseCount(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + node->refCount--; + if (!node->refCount) + insertNode(node); +} + +void MyX11Cursors::createNode(int id, Cursor c) +{ + MyX11CursorNode * node = new MyX11CursorNode(id, c); + lookupMap.insert(id, node); +} + +void MyX11Cursors::timeout() +{ + MyX11CursorNode * node; + node = firstExpired; + QDateTime now = QDateTime::currentDateTime(); + while (node && now.secsTo(node->expiration()) < 1) { + Cursor c = node->cursor(); + int id = node->id(); + lookupMap.take(id); + MyX11CursorNode * tmp = node; + node = node->post(); + delete tmp; + XFreeCursor(display, c); + } + firstExpired = node; + if (node == 0) { + timer.stop(); + lastExpired = 0; + } + else { + int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; + timer.setInterval(interval); + timer.start(); + } +} + +Cursor MyX11Cursors::cursor(int id) +{ + MyX11CursorNode * node = lookupMap.value(id); + Q_ASSERT(node); + return node->cursor(); +} + + + +/******************************************************************** + +MyDisplay class - perhaps better placed in qplatformintegration_testlite? + +*********************************************************************/ + +//### copied from qapplication_x11.cpp + +static int qt_x_errhandler(Display *dpy, XErrorEvent *err) +{ + +qDebug() << "qt_x_errhandler" << err->error_code; + + switch (err->error_code) { + case BadAtom: +#if 0 + if (err->request_code == 20 /* X_GetProperty */ + && (err->resourceid == XA_RESOURCE_MANAGER + || err->resourceid == XA_RGB_DEFAULT_MAP + || err->resourceid == ATOM(_NET_SUPPORTED) + || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) + || err->resourceid == ATOM(KDE_FULL_SESSION) + || err->resourceid == ATOM(KWIN_RUNNING) + || err->resourceid == ATOM(XdndProxy) + || err->resourceid == ATOM(XdndAware)) + + + ) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } +#endif + qDebug() << "BadAtom"; + break; + + case BadWindow: + if (err->request_code == 2 /* X_ChangeWindowAttributes */ + || err->request_code == 38 /* X_QueryPointer */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } + } + seen_badwindow = true; + if (err->request_code == 25 /* X_SendEvent */) { + for (int i = 0; i < ScreenCount(dpy); ++i) { + if (err->resourceid == RootWindow(dpy, i)) { + // Perhaps we're running under SECURITY reduction? :/ + return 0; + } + } +#if 0 + if (X11->xdndHandleBadwindow()) { + qDebug("xdndHandleBadwindow returned true"); + return 0; + } +#endif + } +#if 0 + if (X11->ignore_badwindow) + return 0; +#endif + break; + + case BadMatch: + if (err->request_code == 42 /* X_SetInputFocus */) + return 0; + break; + + default: +#if 0 //!defined(QT_NO_XINPUT) + if (err->request_code == X11->xinput_major + && err->error_code == (X11->xinput_errorbase + XI_BadDevice) + && err->minor_code == 3 /* X_OpenDevice */) { + return 0; + } +#endif + break; + } + + char errstr[256]; + XGetErrorText( dpy, err->error_code, errstr, 256 ); + char buffer[256]; + char request_str[256]; + qsnprintf(buffer, 256, "%d", err->request_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); + if (err->request_code < 128) { + // X error for a normal protocol request + qWarning( "X Error: %s %d\n" + " Major opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + request_str, + err->resourceid ); + } else { + // X error for an extension request + const char *extensionName = 0; +#if 0 + if (err->request_code == X11->xrender_major) + extensionName = "RENDER"; + else if (err->request_code == X11->xrandr_major) + extensionName = "RANDR"; + else if (err->request_code == X11->xinput_major) + extensionName = "XInputExtension"; + else if (err->request_code == X11->mitshm_major) + extensionName = "MIT-SHM"; +#endif + char minor_str[256]; + if (extensionName) { + qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); + XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); + } else { + extensionName = "Uknown extension"; + qsnprintf(minor_str, 256, "Unknown request"); + } + qWarning( "X Error: %s %d\n" + " Extension: %d (%s)\n" + " Minor opcode: %d (%s)\n" + " Resource id: 0x%lx", + errstr, err->error_code, + err->request_code, + extensionName, + err->minor_code, + minor_str, + err->resourceid ); + } + + // ### we really should distinguish between severe, non-severe and + // ### application specific errors + + return 0; +} + + +#ifdef KeyPress +#undef KeyPress +#endif +#ifdef KeyRelease +#undef KeyRelease +#endif + +bool MyDisplay::handleEvent(XEvent *xe) +{ + //qDebug() << "handleEvent" << xe->xany.type << xe->xany.window; + int quit = false; + QTestLiteWindow *xw = 0; + foreach (QTestLiteWindow *w, windowList) { + if (w->winId() == xe->xany.window) { + xw = w; + break; + } + } + if (!xw) { +#ifdef MYX11_DEBUG + qWarning() << "Unknown window" << hex << xe->xany.window << "received event" << xe->type; +#endif + return quit; + } + + switch (xe->type) { + + case ClientMessage: + if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { + Atom a = xe->xclient.data.l[0]; + if (a == wmDeleteWindowAtom) + xw->handleCloseEvent(); +#ifdef MYX11_DEBUG + qDebug() << "ClientMessage WM_PROTOCOLS" << a; +#endif + } +#ifdef MYX11_DEBUG + else + qDebug() << "ClientMessage" << xe->xclient.format << xe->xclient.message_type; +#endif + break; + + case Expose: + if (xw) + if (xe->xexpose.count == 0) + xw->paintEvent(); + break; + case ConfigureNotify: + if (xw) + xw->resizeEvent(&xe->xconfigure); + break; + + case ButtonPress: + xw->mousePressEvent(&xe->xbutton); + break; + + case ButtonRelease: + xw->handleMouseEvent(QEvent::MouseButtonRelease, &xe->xbutton); + break; + + case MotionNotify: + xw->handleMouseEvent(QEvent::MouseMove, &xe->xbutton); + break; + + case XKeyPress: + xw->handleKeyEvent(QEvent::KeyPress, &xe->xkey); + break; + + case XKeyRelease: + xw->handleKeyEvent(QEvent::KeyRelease, &xe->xkey); + break; + + case EnterNotify: + xw->handleEnterEvent(); + break; + + case LeaveNotify: + xw->handleLeaveEvent(); + break; + + default: +#ifdef MYX11_DEBUG + qDebug() << hex << xe->xany.window << "Other X event" << xe->type; +#endif + break; + } + return quit; +}; + + + +MyDisplay::MyDisplay() +{ + char *display_name = getenv("DISPLAY"); + display = XOpenDisplay(display_name); + if (!display) { + fprintf(stderr, "Cannot connect to X server: %s\n", + display_name); + exit(1); + } + +#ifndef DONT_USE_MIT_SHM + Status MIT_SHM_extension_supported = XShmQueryExtension (display); + Q_ASSERT(MIT_SHM_extension_supported == True); +#endif + original_x_errhandler = XSetErrorHandler(qt_x_errhandler); + + if (qgetenv("DO_X_SYNCHRONIZE").toInt()) + XSynchronize(display, true); + + screen = DefaultScreen(display); + width = DisplayWidth(display, screen); + height = DisplayHeight(display, screen); + physicalWidth = DisplayWidthMM(display, screen); + physicalHeight = DisplayHeightMM(display, screen); + + int xSocketNumber = XConnectionNumber(display); +#ifdef MYX11_DEBUG + qDebug() << "X socket:"<< xSocketNumber; +#endif + QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); + connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); + + wmProtocolsAtom = XInternAtom (display, "WM_PROTOCOLS", False); + wmDeleteWindowAtom = XInternAtom (display, "WM_DELETE_WINDOW", False); + + cursors = new MyX11Cursors(display); +} + + +MyDisplay::~MyDisplay() +{ + XCloseDisplay(display); +} + + +void MyDisplay::eventDispatcher() +{ +// qDebug() << "eventDispatcher"; + + + ulong marker = XNextRequest(display); +// int i = 0; + while (XPending(display)) { + XEvent event; + XNextEvent(display, &event); + /* done = */ + handleEvent(&event); + + if (event.xany.serial >= marker) { +#ifdef MYX11_DEBUG + qDebug() << "potential livelock averted"; +#endif +#if 0 + if (XEventsQueued(display, QueuedAfterFlush)) { + qDebug() << " with events queued"; + QTimer::singleShot(0, this, SLOT(eventDispatcher())); + } +#endif + break; + } + } +} + + +QImage MyDisplay::grabWindow(Window window, int x, int y, int w, int h) +{ + if (w == 0 || h ==0) + return QImage(); + + //WinId 0 means the desktop widget + if (!window) + window = rootWindow(); + + XWindowAttributes window_attr; + if (!XGetWindowAttributes(display, window, &window_attr)) + return QImage(); + + if (w < 0) + w = window_attr.width - x; + if (h < 0) + h = window_attr.height - y; + + // Ideally, we should also limit ourselves to the screen area, but the Qt docs say + // that it's "unsafe" to go outside the screen, so we can ignore that problem. + + //We're definitely not optimizing for speed... + XImage *xi = XGetImage(display, window, x, y, w, h, AllPlanes, ZPixmap); + + if (!xi) + return QImage(); + + //taking a copy to make sure we have ownership -- not fast + QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); + + XDestroyImage(xi); + + return result; +} + + + + + + + +QT_END_NAMESPACE +#include "qtestlitewindow.moc" diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h new file mode 100644 index 0000000..6fb7ed2 --- /dev/null +++ b/src/plugins/platforms/testlite/qtestlitewindow.h @@ -0,0 +1,157 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTESTLITEWINDOW_H +#define QTESTLITEWINDOW_H + +#include +#include + +#include +#include +#include +#include + +#include + +#include +#include + + + +class QTestLiteIntegration; +class QTestLiteScreen; +class QTestLiteWindowSurface; +class MyX11Cursors; +class QTestLiteWindow; + +class MyDisplay : public QObject +{ + Q_OBJECT; +public: + MyDisplay(); + ~MyDisplay(); + + Window rootWindow() { return RootWindow(display, screen); } + unsigned long blackPixel() { return BlackPixel(display, screen); } + unsigned long whitePixel() { return WhitePixel(display, screen); } + + bool handleEvent(XEvent *xe); + QImage grabWindow(Window window, int x, int y, int w, int h); + +public slots: + void eventDispatcher(); + +public: //### + Display * display; + int screen; + int width, height; + int physicalWidth; + int physicalHeight; + + QList windowList; + + MyX11Cursors * cursors; +}; + +struct MyShmImageInfo; + +class QWindowSurface; + +class QTestLiteWindow : public QPlatformWindow +{ +public: + QTestLiteWindow(QTestLiteIntegration *platformIntegration, + QTestLiteScreen *screen, QWidget *window); + ~QTestLiteWindow(); + + + void mousePressEvent(XButtonEvent*); + void handleMouseEvent(QEvent::Type, XButtonEvent *ev); + + void handleKeyEvent(QEvent::Type, void *); + void handleCloseEvent(); + void handleEnterEvent(); + void handleLeaveEvent(); + + void resizeEvent(XConfigureEvent *configure_event); + void paintEvent(); + + + void setGeometry(const QRect &rect); + + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + Qt::WindowFlags windowFlags() const; + void setVisible(bool visible); + WId winId() const; + void raise(); + void lower(); + void setWindowTitle(const QString &title); + + void setCursor(QCursor * cursor); + +private: + int xpos, ypos; + int width, height; + Window x_window; + GC gc; + + GC createGC(); + Cursor createCursorShape(int cshape); + Cursor createCursorBitmap(QCursor * cursor); + + int currentCursor; + + QWindowSurface *windowSurface; + MyDisplay *xd; + + QTestLiteIntegration *mPlatformIntegration; + QTestLiteScreen *mScreen; + Qt::WindowFlags window_flags; + + friend class QTestLiteWindowSurface; // x_window, gc and windowSurface +}; + + + + + +#endif diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp index 81fa247..b5a0f74 100644 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp @@ -45,36 +45,108 @@ #include #include -#include "x11util.h" +#include "qtestlitewindow.h" + +# include +# include +# include QT_BEGIN_NAMESPACE -QTestLiteWindowSurface::QTestLiteWindowSurface - (QTestLiteIntegration *platformIntegration, - QTestLiteScreen *screen, QWidget *window) - : QWindowSurface(window), - mPlatformIntegration(platformIntegration), - mScreen(screen), - xw(0) + +struct MyShmImageInfo { + MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} + ~MyShmImageInfo() { destroy(); } + + void destroy(); + + XShmSegmentInfo shminfo; + XImage *image; + Display *display; +}; + +//void QTestLiteWindowSurface::flush() + + +#ifndef DONT_USE_MIT_SHM +void MyShmImageInfo::destroy() +{ + XShmDetach (display, &shminfo); + XDestroyImage (image); + shmdt (shminfo.shmaddr); + shmctl (shminfo.shmid, IPC_RMID, 0); +} +#endif + +void QTestLiteWindowSurface::resizeShmImage(int width, int height) { + MyDisplay *xd = xw->xd; - xw = static_cast(window->platformWindow())->xw; -// xw = new MyWindow(platformIntegration->xd, 0,0,300,300); +#ifdef DONT_USE_MIT_SHM + shm_img = QImage(width, height, QImage::Format_RGB32); +#else + if (image_info) + image_info->destroy(); + else + image_info = new MyShmImageInfo(xd->display); -// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; + Visual *visual = DefaultVisual(xd->display, xd->screen); + + + XImage *image = XShmCreateImage (xd->display, visual, 24, ZPixmap, 0, + &image_info->shminfo, width, height); + + + image_info->shminfo.shmid = shmget (IPC_PRIVATE, + image->bytes_per_line * image->height, IPC_CREAT|0777); + + image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); + image_info->shminfo.readOnly = False; + image_info->image = image; + + Status shm_attach_status = XShmAttach(xd->display, &image_info->shminfo); + + Q_ASSERT(shm_attach_status == True); + + shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); +#endif + painted = false; +} + + +void QTestLiteWindowSurface::resizeBuffer(QSize s) +{ + if (shm_img.size() != s) + resizeShmImage(s.width(), s.height()); +} + +QSize QTestLiteWindowSurface::bufferSize() const +{ + return shm_img.size(); +} + +QTestLiteWindowSurface::QTestLiteWindowSurface (QTestLiteScreen */*screen*/, QWidget *window) + : QWindowSurface(window), + painted(false), image_info(0) +{ + xw = static_cast(window->platformWindow()); + xw->windowSurface = this; +// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; } QTestLiteWindowSurface::~QTestLiteWindowSurface() { -// qDebug() << "~QTestLiteWindowSurface" << xw->window; + qDebug() << "~QTestLiteWindowSurface"; + delete image_info; } QPaintDevice *QTestLiteWindowSurface::paintDevice() { - return xw->image(); + return &shm_img; } + void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(widget); @@ -83,22 +155,48 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this; - xw->paintEvent(); -} - + if (!painted) + return; -// void QTestLiteWindowSurface::resize(const QSize &s) -// { -// if (s == size()) -// return; + MyDisplay *xd = xw->xd; + GC gc = xw->gc; + Window window = xw->x_window; +#ifdef DONT_USE_MIT_SHM + // just convert the image every time... + if (!shm_img.isNull()) { + Visual *visual = DefaultVisual(xd->display, xd->screen); -// QWindowSurface::resize(size); + QImage image = shm_img; + //img.convertToFormat( + XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, + 0, (char *) image.scanLine(0), image.width(), image.height(), + 32, image.bytesPerLine()); -// //if unchanged ### -// // xw->setSize(rect.width(), rect.height()); + int x = 0; + int y = 0; + /*int r =*/ XPutImage(xd->display, window, gc, xi, 0, 0, x, y, image.width(), image.height()); -// } + xi->data = 0; // QImage owns these bits + XDestroyImage(xi); + } +#else + // Use MIT_SHM + if (image_info->image) { + //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; + int x = 0; + int y = 0; + + // We could set send_event to true, and then use the ShmCompletion to synchronize, + // but let's do like Qt/11 and just use XSync + XShmPutImage (xd->display, window, gc, image_info->image, 0, 0, + x, y, image_info->image->width, image_info->image->height, + /*send_event*/ False); + + XSync(xd->display, False); + } +#endif +} //### scroll logic copied from QRasterWindowSurface, we should make better API for this @@ -151,12 +249,12 @@ void copied_qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &o bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) { - if (!xw->image() || xw->image()->isNull()) + if (shm_img.isNull()) return false; const QVector rects = area.rects(); for (int i = 0; i < rects.size(); ++i) - copied_qt_scrollRectInImage(*xw->image(), rects.at(i), QPoint(dx, dy)); + copied_qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); return true; } @@ -165,529 +263,12 @@ bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); - xw->resizeBuffer(size()); + resizeBuffer(size()); } void QTestLiteWindowSurface::endPaint(const QRegion ®ion) { Q_UNUSED(region); - xw->painted = true; //there is content in the buffer -} - - -/************************************************************************** -** QTestLiteWindow -**************************************************************************/ - -QTestLiteWindow::QTestLiteWindow(QTestLiteIntegration *platformIntegration, - QTestLiteScreen */*screen*/, QWidget *window) - :QPlatformWindow(window) -{ - xw = new MyWindow(platformIntegration->xd, 0,0,300,300); - setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility - - xw->windowTL = this; -} - - -QTestLiteWindow::~QTestLiteWindow() -{ - delete xw; -} - - - - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Mouse event stuff - - - - -static Qt::MouseButtons translateMouseButtons(int s) -{ - Qt::MouseButtons ret = 0; - if (s & Button1Mask) - ret |= Qt::LeftButton; - if (s & Button2Mask) - ret |= Qt::MidButton; - if (s & Button3Mask) - ret |= Qt::RightButton; - return ret; -} - - -static Qt::KeyboardModifiers translateModifiers(int s) -{ - const uchar qt_alt_mask = Mod1Mask; - const uchar qt_meta_mask = Mod4Mask; - - - Qt::KeyboardModifiers ret = 0; - if (s & ShiftMask) - ret |= Qt::ShiftModifier; - if (s & ControlMask) - ret |= Qt::ControlModifier; - if (s & qt_alt_mask) - ret |= Qt::AltModifier; - if (s & qt_meta_mask) - ret |= Qt::MetaModifier; -#if 0 - if (s & qt_mode_switch_mask) - ret |= Qt::GroupSwitchModifier; -#endif - return ret; -} - -void QTestLiteWindow::handleMouseEvent(QEvent::Type type, void *ev) -{ - static QPoint mousePoint; - - XButtonEvent *e = static_cast(ev); - - Qt::MouseButton button = Qt::NoButton; - Qt::MouseButtons buttons = translateMouseButtons(e->state); - Qt::KeyboardModifiers modifiers = translateModifiers(e->state); - if (type != QEvent::MouseMove) { - switch (e->button) { - case Button1: button = Qt::LeftButton; break; - case Button2: button = Qt::MidButton; break; - case Button3: button = Qt::RightButton; break; - case Button4: - case Button5: - case 6: - case 7: { - //mouse wheel - if (type == QEvent::MouseButtonPress) { - //logic borrowed from qapplication_x11.cpp - int delta = 120 * ((e->button == Button4 || e->button == 6) ? 1 : -1); - bool hor = (((e->button == Button4 || e->button == Button5) - && (modifiers & Qt::AltModifier)) - || (e->button == 6 || e->button == 7)); - QWindowSystemInterface::handleWheelEvent(widget(), e->time, - QPoint(e->x, e->y), - QPoint(e->x_root, e->y_root), - delta, hor ? Qt::Horizontal : Qt::Vertical); - } - return; - } - default: break; - } - } - - buttons ^= button; // X event uses state *before*, Qt uses state *after* - - QWindowSystemInterface::handleMouseEvent(widget(), e->time, QPoint(e->x, e->y), - QPoint(e->x_root, e->y_root), - buttons); - - mousePoint = QPoint(e->x_root, e->y_root); -} - -void QTestLiteWindow::handleGeometryChange(int x, int y, int w, int h) -{ - QWindowSystemInterface::handleGeometryChange(widget(), QRect(x,y,w,h)); -} - - -void QTestLiteWindow::handleCloseEvent() -{ - QWindowSystemInterface::handleCloseEvent(widget()); -} - - -void QTestLiteWindow::handleEnterEvent() -{ - QWindowSystemInterface::handleEnterEvent(widget()); -} - -void QTestLiteWindow::handleLeaveEvent() -{ - QWindowSystemInterface::handleLeaveEvent(widget()); -} - - -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -// Key event stuff -- not pretty either -// -// What we want to do is to port Robert's keytable code properly - - - - - - - -// keyboard mapping table -static const unsigned int keyTbl[] = { - - // misc keys - - XK_Escape, Qt::Key_Escape, - XK_Tab, Qt::Key_Tab, - XK_ISO_Left_Tab, Qt::Key_Backtab, - XK_BackSpace, Qt::Key_Backspace, - XK_Return, Qt::Key_Return, - XK_Insert, Qt::Key_Insert, - XK_Delete, Qt::Key_Delete, - XK_Clear, Qt::Key_Delete, - XK_Pause, Qt::Key_Pause, - XK_Print, Qt::Key_Print, - 0x1005FF60, Qt::Key_SysReq, // hardcoded Sun SysReq - 0x1007ff00, Qt::Key_SysReq, // hardcoded X386 SysReq - - // cursor movement - - XK_Home, Qt::Key_Home, - XK_End, Qt::Key_End, - XK_Left, Qt::Key_Left, - XK_Up, Qt::Key_Up, - XK_Right, Qt::Key_Right, - XK_Down, Qt::Key_Down, - XK_Prior, Qt::Key_PageUp, - XK_Next, Qt::Key_PageDown, - - // modifiers - - XK_Shift_L, Qt::Key_Shift, - XK_Shift_R, Qt::Key_Shift, - XK_Shift_Lock, Qt::Key_Shift, - XK_Control_L, Qt::Key_Control, - XK_Control_R, Qt::Key_Control, - XK_Meta_L, Qt::Key_Meta, - XK_Meta_R, Qt::Key_Meta, - XK_Alt_L, Qt::Key_Alt, - XK_Alt_R, Qt::Key_Alt, - XK_Caps_Lock, Qt::Key_CapsLock, - XK_Num_Lock, Qt::Key_NumLock, - XK_Scroll_Lock, Qt::Key_ScrollLock, - XK_Super_L, Qt::Key_Super_L, - XK_Super_R, Qt::Key_Super_R, - XK_Menu, Qt::Key_Menu, - XK_Hyper_L, Qt::Key_Hyper_L, - XK_Hyper_R, Qt::Key_Hyper_R, - XK_Help, Qt::Key_Help, - 0x1000FF74, Qt::Key_Backtab, // hardcoded HP backtab - 0x1005FF10, Qt::Key_F11, // hardcoded Sun F36 (labeled F11) - 0x1005FF11, Qt::Key_F12, // hardcoded Sun F37 (labeled F12) - - // numeric and function keypad keys - - XK_KP_Space, Qt::Key_Space, - XK_KP_Tab, Qt::Key_Tab, - XK_KP_Enter, Qt::Key_Enter, - //XK_KP_F1, Qt::Key_F1, - //XK_KP_F2, Qt::Key_F2, - //XK_KP_F3, Qt::Key_F3, - //XK_KP_F4, Qt::Key_F4, - XK_KP_Home, Qt::Key_Home, - XK_KP_Left, Qt::Key_Left, - XK_KP_Up, Qt::Key_Up, - XK_KP_Right, Qt::Key_Right, - XK_KP_Down, Qt::Key_Down, - XK_KP_Prior, Qt::Key_PageUp, - XK_KP_Next, Qt::Key_PageDown, - XK_KP_End, Qt::Key_End, - XK_KP_Begin, Qt::Key_Clear, - XK_KP_Insert, Qt::Key_Insert, - XK_KP_Delete, Qt::Key_Delete, - XK_KP_Equal, Qt::Key_Equal, - XK_KP_Multiply, Qt::Key_Asterisk, - XK_KP_Add, Qt::Key_Plus, - XK_KP_Separator, Qt::Key_Comma, - XK_KP_Subtract, Qt::Key_Minus, - XK_KP_Decimal, Qt::Key_Period, - XK_KP_Divide, Qt::Key_Slash, - - // International input method support keys - - // International & multi-key character composition - XK_ISO_Level3_Shift, Qt::Key_AltGr, - XK_Multi_key, Qt::Key_Multi_key, - XK_Codeinput, Qt::Key_Codeinput, - XK_SingleCandidate, Qt::Key_SingleCandidate, - XK_MultipleCandidate, Qt::Key_MultipleCandidate, - XK_PreviousCandidate, Qt::Key_PreviousCandidate, - - // Misc Functions - XK_Mode_switch, Qt::Key_Mode_switch, - XK_script_switch, Qt::Key_Mode_switch, - - // Japanese keyboard support - XK_Kanji, Qt::Key_Kanji, - XK_Muhenkan, Qt::Key_Muhenkan, - //XK_Henkan_Mode, Qt::Key_Henkan_Mode, - XK_Henkan_Mode, Qt::Key_Henkan, - XK_Henkan, Qt::Key_Henkan, - XK_Romaji, Qt::Key_Romaji, - XK_Hiragana, Qt::Key_Hiragana, - XK_Katakana, Qt::Key_Katakana, - XK_Hiragana_Katakana, Qt::Key_Hiragana_Katakana, - XK_Zenkaku, Qt::Key_Zenkaku, - XK_Hankaku, Qt::Key_Hankaku, - XK_Zenkaku_Hankaku, Qt::Key_Zenkaku_Hankaku, - XK_Touroku, Qt::Key_Touroku, - XK_Massyo, Qt::Key_Massyo, - XK_Kana_Lock, Qt::Key_Kana_Lock, - XK_Kana_Shift, Qt::Key_Kana_Shift, - XK_Eisu_Shift, Qt::Key_Eisu_Shift, - XK_Eisu_toggle, Qt::Key_Eisu_toggle, - //XK_Kanji_Bangou, Qt::Key_Kanji_Bangou, - //XK_Zen_Koho, Qt::Key_Zen_Koho, - //XK_Mae_Koho, Qt::Key_Mae_Koho, - XK_Kanji_Bangou, Qt::Key_Codeinput, - XK_Zen_Koho, Qt::Key_MultipleCandidate, - XK_Mae_Koho, Qt::Key_PreviousCandidate, - -#ifdef XK_KOREAN - // Korean keyboard support - XK_Hangul, Qt::Key_Hangul, - XK_Hangul_Start, Qt::Key_Hangul_Start, - XK_Hangul_End, Qt::Key_Hangul_End, - XK_Hangul_Hanja, Qt::Key_Hangul_Hanja, - XK_Hangul_Jamo, Qt::Key_Hangul_Jamo, - XK_Hangul_Romaja, Qt::Key_Hangul_Romaja, - //XK_Hangul_Codeinput, Qt::Key_Hangul_Codeinput, - XK_Hangul_Codeinput, Qt::Key_Codeinput, - XK_Hangul_Jeonja, Qt::Key_Hangul_Jeonja, - XK_Hangul_Banja, Qt::Key_Hangul_Banja, - XK_Hangul_PreHanja, Qt::Key_Hangul_PreHanja, - XK_Hangul_PostHanja, Qt::Key_Hangul_PostHanja, - //XK_Hangul_SingleCandidate,Qt::Key_Hangul_SingleCandidate, - //XK_Hangul_MultipleCandidate,Qt::Key_Hangul_MultipleCandidate, - //XK_Hangul_PreviousCandidate,Qt::Key_Hangul_PreviousCandidate, - XK_Hangul_SingleCandidate, Qt::Key_SingleCandidate, - XK_Hangul_MultipleCandidate,Qt::Key_MultipleCandidate, - XK_Hangul_PreviousCandidate,Qt::Key_PreviousCandidate, - XK_Hangul_Special, Qt::Key_Hangul_Special, - //XK_Hangul_switch, Qt::Key_Hangul_switch, - XK_Hangul_switch, Qt::Key_Mode_switch, -#endif // XK_KOREAN - - // dead keys - XK_dead_grave, Qt::Key_Dead_Grave, - XK_dead_acute, Qt::Key_Dead_Acute, - XK_dead_circumflex, Qt::Key_Dead_Circumflex, - XK_dead_tilde, Qt::Key_Dead_Tilde, - XK_dead_macron, Qt::Key_Dead_Macron, - XK_dead_breve, Qt::Key_Dead_Breve, - XK_dead_abovedot, Qt::Key_Dead_Abovedot, - XK_dead_diaeresis, Qt::Key_Dead_Diaeresis, - XK_dead_abovering, Qt::Key_Dead_Abovering, - XK_dead_doubleacute, Qt::Key_Dead_Doubleacute, - XK_dead_caron, Qt::Key_Dead_Caron, - XK_dead_cedilla, Qt::Key_Dead_Cedilla, - XK_dead_ogonek, Qt::Key_Dead_Ogonek, - XK_dead_iota, Qt::Key_Dead_Iota, - XK_dead_voiced_sound, Qt::Key_Dead_Voiced_Sound, - XK_dead_semivoiced_sound, Qt::Key_Dead_Semivoiced_Sound, - XK_dead_belowdot, Qt::Key_Dead_Belowdot, - XK_dead_hook, Qt::Key_Dead_Hook, - XK_dead_horn, Qt::Key_Dead_Horn, - -#if 0 - // Special multimedia keys - // currently only tested with MS internet keyboard - - // browsing keys - XF86XK_Back, Qt::Key_Back, - XF86XK_Forward, Qt::Key_Forward, - XF86XK_Stop, Qt::Key_Stop, - XF86XK_Refresh, Qt::Key_Refresh, - XF86XK_Favorites, Qt::Key_Favorites, - XF86XK_AudioMedia, Qt::Key_LaunchMedia, - XF86XK_OpenURL, Qt::Key_OpenUrl, - XF86XK_HomePage, Qt::Key_HomePage, - XF86XK_Search, Qt::Key_Search, - - // media keys - XF86XK_AudioLowerVolume, Qt::Key_VolumeDown, - XF86XK_AudioMute, Qt::Key_VolumeMute, - XF86XK_AudioRaiseVolume, Qt::Key_VolumeUp, - XF86XK_AudioPlay, Qt::Key_MediaPlay, - XF86XK_AudioStop, Qt::Key_MediaStop, - XF86XK_AudioPrev, Qt::Key_MediaPrevious, - XF86XK_AudioNext, Qt::Key_MediaNext, - XF86XK_AudioRecord, Qt::Key_MediaRecord, - - // launch keys - XF86XK_Mail, Qt::Key_LaunchMail, - XF86XK_MyComputer, Qt::Key_Launch0, - XF86XK_Calculator, Qt::Key_Launch1, - XF86XK_Standby, Qt::Key_Standby, - - XF86XK_Launch0, Qt::Key_Launch2, - XF86XK_Launch1, Qt::Key_Launch3, - XF86XK_Launch2, Qt::Key_Launch4, - XF86XK_Launch3, Qt::Key_Launch5, - XF86XK_Launch4, Qt::Key_Launch6, - XF86XK_Launch5, Qt::Key_Launch7, - XF86XK_Launch6, Qt::Key_Launch8, - XF86XK_Launch7, Qt::Key_Launch9, - XF86XK_Launch8, Qt::Key_LaunchA, - XF86XK_Launch9, Qt::Key_LaunchB, - XF86XK_LaunchA, Qt::Key_LaunchC, - XF86XK_LaunchB, Qt::Key_LaunchD, - XF86XK_LaunchC, Qt::Key_LaunchE, - XF86XK_LaunchD, Qt::Key_LaunchF, -#endif - -#if 0 - // Qtopia keys - QTOPIAXK_Select, Qt::Key_Select, - QTOPIAXK_Yes, Qt::Key_Yes, - QTOPIAXK_No, Qt::Key_No, - QTOPIAXK_Cancel, Qt::Key_Cancel, - QTOPIAXK_Printer, Qt::Key_Printer, - QTOPIAXK_Execute, Qt::Key_Execute, - QTOPIAXK_Sleep, Qt::Key_Sleep, - QTOPIAXK_Play, Qt::Key_Play, - QTOPIAXK_Zoom, Qt::Key_Zoom, - QTOPIAXK_Context1, Qt::Key_Context1, - QTOPIAXK_Context2, Qt::Key_Context2, - QTOPIAXK_Context3, Qt::Key_Context3, - QTOPIAXK_Context4, Qt::Key_Context4, - QTOPIAXK_Call, Qt::Key_Call, - QTOPIAXK_Hangup, Qt::Key_Hangup, - QTOPIAXK_Flip, Qt::Key_Flip, -#endif - 0, 0 -}; - - -static int lookupCode(unsigned int xkeycode) -{ - if (xkeycode >= XK_F1 && xkeycode <= XK_F35) - return Qt::Key_F1 + (int(xkeycode) - XK_F1); - - const unsigned int *p = keyTbl; - while (*p) { - if (*p == xkeycode) - return *++p; - p += 2; - } - - return 0; -} - - -static Qt::KeyboardModifiers modifierFromKeyCode(int qtcode) -{ - switch (qtcode) { - case Qt::Key_Control: - return Qt::ControlModifier; - case Qt::Key_Alt: - return Qt::AltModifier; - case Qt::Key_Shift: - return Qt::ShiftModifier; - case Qt::Key_Meta: - return Qt::MetaModifier; - default: - return Qt::NoModifier; - } -} - -void QTestLiteWindow::handleKeyEvent(QEvent::Type type, void *ev) -{ - XKeyEvent *e = static_cast(ev); - - KeySym keySym; - QByteArray chars; - chars.resize(513); - - int count = XLookupString(e, chars.data(), chars.size(), &keySym, 0); - -// qDebug() << "QTLWS::handleKeyEvent" << count << hex << "XKeysym:" << keySym; -// if (count) -// qDebug() << hex << int(chars[0]) << "String:" << chars; - - Qt::KeyboardModifiers modifiers = translateModifiers(e->state); - - int qtcode = lookupCode(keySym); -// qDebug() << "lookup: " << hex << keySym << qtcode << "mod" << modifiers; - - //X11 specifies state *before*, Qt expects state *after* the event - - modifiers ^= modifierFromKeyCode(qtcode); - - if (qtcode) { - QWindowSystemInterface::handleKeyEvent(widget(), e->time, type, qtcode, modifiers); - } else if (chars[0]) { - int qtcode = chars.toUpper()[0]; //Not exactly right... - if (modifiers & Qt::ControlModifier && qtcode < ' ') - qtcode = chars[0] + '@'; - QWindowSystemInterface::handleKeyEvent(widget(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); - } else { - qWarning() << "unknown X keycode" << hex << e->keycode << keySym; - } -} - - - -void QTestLiteWindow::setGeometry(const QRect &rect) -{ - QRect oldRect = geometry(); - if (rect == oldRect) - return; - - //if unchanged ### - xw->setGeometry(rect.x(), rect.y(), rect.width(), rect.height()); -} - - - -Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) -{ - Q_ASSERT(flags & Qt::Window); - - window_flags = flags; - - xw->setWindowFlags(flags); - - return window_flags; - -} - -Qt::WindowFlags QTestLiteWindow::windowFlags() const -{ - return window_flags; -} - -void QTestLiteWindow::setVisible(bool visible) -{ - //qDebug() << "QTestLiteWindowSurface::setVisible" << visible << xw->window; - xw->setVisible(visible); -} - - -WId QTestLiteWindow::winId() const -{ - if (xw) - return (WId) xw->window; - else - return WId(0); -} - -void QTestLiteWindow::raise() -{ - WId window = winId(); - XRaiseWindow(mPlatformIntegration->xd->display, window); -} - -void QTestLiteWindow::lower() -{ - WId window = winId(); - XLowerWindow(mPlatformIntegration->xd->display, window); -} - -void QTestLiteWindow::setWindowTitle(const QString &title) -{ - xw->setWindowTitle(title); -} - -void QTestLiteWindow::setCursor(QCursor *cursor) -{ - xw->setCursor(cursor); + painted = true; //there is content in the buffer } QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.h b/src/plugins/platforms/testlite/qwindowsurface_testlite.h index d713cc2..915e7fe 100644 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.h +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.h @@ -43,24 +43,23 @@ #define QWINDOWSURFACE_TESTLITE_H #include -#include -#include + QT_BEGIN_NAMESPACE -class MyWindow; +class QTestLiteWindow; class QTestLiteIntegration; class QTestLiteScreen; +class MyShmImageInfo; class QTestLiteWindowSurface : public QWindowSurface { public: - QTestLiteWindowSurface - (QTestLiteIntegration *platformIntegration, - QTestLiteScreen *screen, QWidget *window); + QTestLiteWindowSurface (QTestLiteScreen *screen, QWidget *window); ~QTestLiteWindowSurface(); QPaintDevice *paintDevice(); +// void flush(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); // void resize(const QSize &size); bool scroll(const QRegion &area, int dx, int dy); @@ -69,47 +68,18 @@ public: void endPaint(const QRegion ®ion); private: - QTestLiteIntegration *mPlatformIntegration; - QTestLiteScreen *mScreen; - Qt::WindowFlags window_flags; - MyWindow *xw; -}; - + bool painted; + void resizeBuffer(QSize); + QSize bufferSize() const; -class QTestLiteWindow : public QPlatformWindow -{ -public: - QTestLiteWindow(QTestLiteIntegration *platformIntegration, - QTestLiteScreen *screen, QWidget *window); - ~QTestLiteWindow(); + void resizeShmImage(int width, int height); - void handleMouseEvent(QEvent::Type, void *); //forwarding X types is apparently impossible :( - void handleKeyEvent(QEvent::Type, void *); - void handleGeometryChange(int x, int y, int w, int h); - void handleCloseEvent(); - void handleEnterEvent(); - void handleLeaveEvent(); + QImage shm_img; + MyShmImageInfo *image_info; - void setGeometry(const QRect &rect); - - Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); - Qt::WindowFlags windowFlags() const; - void setVisible(bool visible); - WId winId() const; - void raise(); - void lower(); - void setWindowTitle(const QString &title); - - void setCursor(QCursor * cursor); - -private: - QTestLiteIntegration *mPlatformIntegration; - QTestLiteScreen *mScreen; - Qt::WindowFlags window_flags; - MyWindow *xw; + QTestLiteWindow *xw; - friend class QTestLiteWindowSurface; //### needs refactoring }; diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro index 442dd68..02122f1 100644 --- a/src/plugins/platforms/testlite/testlite.pro +++ b/src/plugins/platforms/testlite/testlite.pro @@ -3,12 +3,8 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms -SOURCES = main.cpp qplatformintegration_testlite.cpp qwindowsurface_testlite.cpp -HEADERS = qplatformintegration_testlite.h qwindowsurface_testlite.h - - -HEADERS += x11util.h -SOURCES += x11util.cpp +SOURCES = main.cpp qplatformintegration_testlite.cpp qwindowsurface_testlite.cpp qtestlitewindow.cpp +HEADERS = qplatformintegration_testlite.h qwindowsurface_testlite.h qtestlitewindow.h LIBS += -lX11 -lXext diff --git a/src/plugins/platforms/testlite/x11util.cpp b/src/plugins/platforms/testlite/x11util.cpp deleted file mode 100644 index a869347..0000000 --- a/src/plugins/platforms/testlite/x11util.cpp +++ /dev/null @@ -1,1215 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include - -#include -#include -#include - -#include "x11util.h" -#include "qwindowsurface_testlite.h" - -#include -#include - - -#include - -#include - -# include -# include -# include - - -#include -#include -#include -#include - -//### remove stuff we don't want from qt_x11_p.h -#undef ATOM -#undef X11 - -//#define MYX11_DEBUG - -//#define DONT_USE_MIT_SHM - -static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); -static bool seen_badwindow; - - -static Atom wmProtocolsAtom; -static Atom wmDeleteWindowAtom; - -//### copied from qapplication_x11.cpp - -static int qt_x_errhandler(Display *dpy, XErrorEvent *err) -{ - -qDebug() << "qt_x_errhandler" << err->error_code; - - switch (err->error_code) { - case BadAtom: -#if 0 - if (err->request_code == 20 /* X_GetProperty */ - && (err->resourceid == XA_RESOURCE_MANAGER - || err->resourceid == XA_RGB_DEFAULT_MAP - || err->resourceid == ATOM(_NET_SUPPORTED) - || err->resourceid == ATOM(_NET_SUPPORTING_WM_CHECK) - || err->resourceid == ATOM(KDE_FULL_SESSION) - || err->resourceid == ATOM(KWIN_RUNNING) - || err->resourceid == ATOM(XdndProxy) - || err->resourceid == ATOM(XdndAware)) - - - ) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } -#endif - qDebug() << "BadAtom"; - break; - - case BadWindow: - if (err->request_code == 2 /* X_ChangeWindowAttributes */ - || err->request_code == 38 /* X_QueryPointer */) { - for (int i = 0; i < ScreenCount(dpy); ++i) { - if (err->resourceid == RootWindow(dpy, i)) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } - } - } - seen_badwindow = true; - if (err->request_code == 25 /* X_SendEvent */) { - for (int i = 0; i < ScreenCount(dpy); ++i) { - if (err->resourceid == RootWindow(dpy, i)) { - // Perhaps we're running under SECURITY reduction? :/ - return 0; - } - } -#if 0 - if (X11->xdndHandleBadwindow()) { - qDebug("xdndHandleBadwindow returned true"); - return 0; - } -#endif - } -#if 0 - if (X11->ignore_badwindow) - return 0; -#endif - break; - - case BadMatch: - if (err->request_code == 42 /* X_SetInputFocus */) - return 0; - break; - - default: -#if 0 //!defined(QT_NO_XINPUT) - if (err->request_code == X11->xinput_major - && err->error_code == (X11->xinput_errorbase + XI_BadDevice) - && err->minor_code == 3 /* X_OpenDevice */) { - return 0; - } -#endif - break; - } - - char errstr[256]; - XGetErrorText( dpy, err->error_code, errstr, 256 ); - char buffer[256]; - char request_str[256]; - qsnprintf(buffer, 256, "%d", err->request_code); - XGetErrorDatabaseText(dpy, "XRequest", buffer, "", request_str, 256); - if (err->request_code < 128) { - // X error for a normal protocol request - qWarning( "X Error: %s %d\n" - " Major opcode: %d (%s)\n" - " Resource id: 0x%lx", - errstr, err->error_code, - err->request_code, - request_str, - err->resourceid ); - } else { - // X error for an extension request - const char *extensionName = 0; -#if 0 - if (err->request_code == X11->xrender_major) - extensionName = "RENDER"; - else if (err->request_code == X11->xrandr_major) - extensionName = "RANDR"; - else if (err->request_code == X11->xinput_major) - extensionName = "XInputExtension"; - else if (err->request_code == X11->mitshm_major) - extensionName = "MIT-SHM"; -#endif - char minor_str[256]; - if (extensionName) { - qsnprintf(buffer, 256, "%s.%d", extensionName, err->minor_code); - XGetErrorDatabaseText(dpy, "XRequest", buffer, "", minor_str, 256); - } else { - extensionName = "Uknown extension"; - qsnprintf(minor_str, 256, "Unknown request"); - } - qWarning( "X Error: %s %d\n" - " Extension: %d (%s)\n" - " Minor opcode: %d (%s)\n" - " Resource id: 0x%lx", - errstr, err->error_code, - err->request_code, - extensionName, - err->minor_code, - minor_str, - err->resourceid ); - } - - // ### we really should distinguish between severe, non-severe and - // ### application specific errors - - return 0; -} - - - - - - - - - -bool MyDisplay::handleEvent(XEvent *xe) -{ - //qDebug() << "handleEvent" << xe->xany.type << xe->xany.window; - int quit = false; - MyWindow *xw = 0; - foreach (MyWindow *w, windowList) { - if (w->window == xe->xany.window) { - xw = w; - break; - } - } - if (!xw) { -#ifdef MYX11_DEBUG - qWarning() << "Unknown window" << hex << xe->xany.window << "received event" << xe->type; -#endif - return quit; - } - - switch (xe->type) { - - case ClientMessage: - if (xe->xclient.format == 32 && xe->xclient.message_type == wmProtocolsAtom) { - Atom a = xe->xclient.data.l[0]; - if (a == wmDeleteWindowAtom) - xw->closeEvent(); -#ifdef MYX11_DEBUG - qDebug() << "ClientMessage WM_PROTOCOLS" << a; -#endif - } -#ifdef MYX11_DEBUG - else - qDebug() << "ClientMessage" << xe->xclient.format << xe->xclient.message_type; -#endif - break; - - case Expose: - if (xw) - if (xe->xexpose.count == 0) - xw->paintEvent(); - break; - case ConfigureNotify: - if (xw) - xw->resizeEvent(&xe->xconfigure); - break; - - case ButtonPress: - xw->mousePressEvent(&xe->xbutton); - break; - - case ButtonRelease: - xw->mouseReleaseEvent(&xe->xbutton); - break; - - case MotionNotify: - xw->mouseMoveEvent(&xe->xbutton); - break; - - case XKeyPress: - xw->keyPressEvent(&xe->xkey); - break; - - case XKeyRelease: - xw->keyReleaseEvent(&xe->xkey); - break; - - case EnterNotify: - xw->enterEvent(&xe->xcrossing); - break; - - case LeaveNotify: - xw->leaveEvent(&xe->xcrossing); - break; - - default: -#ifdef MYX11_DEBUG - qDebug() << hex << xe->xany.window << "Other X event" << xe->type; -#endif - break; - } - return quit; -}; - - - -MyDisplay::MyDisplay() -{ - char *display_name = getenv("DISPLAY"); - display = XOpenDisplay(display_name); - if (!display) { - fprintf(stderr, "Cannot connect to X server: %s\n", - display_name); - exit(1); - } - -#ifndef DONT_USE_MIT_SHM - Status MIT_SHM_extension_supported = XShmQueryExtension (display); - Q_ASSERT(MIT_SHM_extension_supported == True); -#endif - original_x_errhandler = XSetErrorHandler(qt_x_errhandler); - - if (qgetenv("DO_X_SYNCHRONIZE").toInt()) - XSynchronize(display, true); - - screen = DefaultScreen(display); - width = DisplayWidth(display, screen); - height = DisplayHeight(display, screen); - physicalWidth = DisplayWidthMM(display, screen); - physicalHeight = DisplayHeightMM(display, screen); - - int xSocketNumber = XConnectionNumber(display); -#ifdef MYX11_DEBUG - qDebug() << "X socket:"<< xSocketNumber; -#endif - QSocketNotifier *sock = new QSocketNotifier(xSocketNumber, QSocketNotifier::Read, this); - connect(sock, SIGNAL(activated(int)), this, SLOT(eventDispatcher())); - - wmProtocolsAtom = XInternAtom (display, "WM_PROTOCOLS", False); - wmDeleteWindowAtom = XInternAtom (display, "WM_DELETE_WINDOW", False); - - cursors = new MyX11Cursors(display); -} - - -MyDisplay::~MyDisplay() -{ - XCloseDisplay(display); -} - - -void MyDisplay::eventDispatcher() -{ -// qDebug() << "eventDispatcher"; - - - ulong marker = XNextRequest(display); -// int i = 0; - while (XPending(display)) { - XEvent event; - XNextEvent(display, &event); - /* done = */ - handleEvent(&event); - - if (event.xany.serial >= marker) { -#ifdef MYX11_DEBUG - qDebug() << "potential livelock averted"; -#endif -#if 0 - if (XEventsQueued(display, QueuedAfterFlush)) { - qDebug() << " with events queued"; - QTimer::singleShot(0, this, SLOT(eventDispatcher())); - } -#endif - break; - } - } -} - - -QImage MyDisplay::grabWindow(Window window, int x, int y, int w, int h) -{ - if (w == 0 || h ==0) - return QImage(); - - //WinId 0 means the desktop widget - if (!window) - window = rootWindow(); - - XWindowAttributes window_attr; - if (!XGetWindowAttributes(display, window, &window_attr)) - return QImage(); - - if (w < 0) - w = window_attr.width - x; - if (h < 0) - h = window_attr.height - y; - - // Ideally, we should also limit ourselves to the screen area, but the Qt docs say - // that it's "unsafe" to go outside the screen, so we can ignore that problem. - - //We're definitely not optimizing for speed... - XImage *xi = XGetImage(display, window, x, y, w, h, AllPlanes, ZPixmap); - - if (!xi) - return QImage(); - - //taking a copy to make sure we have ownership -- not fast - QImage result = QImage( (uchar*) xi->data, xi->width, xi->height, xi->bytes_per_line, QImage::Format_RGB32 ).copy(); - - XDestroyImage(xi); - - return result; -} - - - - -struct MyShmImageInfo { - MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} - ~MyShmImageInfo() { destroy(); } - - void destroy(); - - XShmSegmentInfo shminfo; - XImage *image; - Display *display; -}; - -MyWindow::MyWindow(MyDisplay *display, int x, int y, int w, int h) -{ - xd = display; - - xd->windowList.append(this); - - window = XCreateSimpleWindow(xd->display, xd->rootWindow(), - x, y, w, h, 0 /*border_width*/, - xd->blackPixel(), xd->whitePixel()); - - -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::MyWindow" << hex << window; -#endif - - - width = -1; - height = -1; - xpos = -1; - ypos = -1; - - XSetWindowBackgroundPixmap(xd->display, window, XNone); - - XSelectInput(xd->display, window, ExposureMask | KeyPressMask | KeyReleaseMask | - EnterWindowMask | LeaveWindowMask | FocusChangeMask | - PointerMotionMask | ButtonPressMask | ButtonReleaseMask | ButtonMotionMask | - StructureNotifyMask); - - gc = createGC(); - - XChangeProperty (xd->display, window, - wmProtocolsAtom, - XA_ATOM, 32, PropModeAppend, - (unsigned char *) &wmDeleteWindowAtom, 1); - - - setWindowTitle(QLatin1String("Qt Lighthouse")); - - currentCursor = -1; - - image_info = 0; - painted = false; -} - - -void MyWindow::setWindowTitle(const QString &title) - -{ - QByteArray ba = title.toLatin1(); //We're not making a general solution here... - XTextProperty windowName; - windowName.value = (unsigned char *)ba.constData(); - windowName.encoding = XA_STRING; - windowName.format = 8; - windowName.nitems = ba.length(); - - XSetWMName(xd->display, window, &windowName); -} - -MyWindow::~MyWindow() -{ -#ifdef MYX11_DEBUG - qDebug() << "~MyWindow" << hex << window; -#endif - XFreeGC(xd->display, gc); - XDestroyWindow(xd->display, window); - - xd->windowList.removeAll(this); - - delete image_info; -} - -GC MyWindow::createGC() -{ - GC gc; - - gc = XCreateGC(xd->display, window, 0, 0); - if (gc < 0) { - qWarning("MyWindow::createGC() could not create GC"); - } - return gc; -} - -void MyWindow::closeEvent() -{ - windowTL->handleCloseEvent(); -} - -void MyWindow::paintEvent() -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::paintEvent" << shm_img.size() << painted; -#endif - if (!painted) - return; - -#ifdef DONT_USE_MIT_SHM - // just convert the image every time... - if (!shm_img.isNull()) { - Visual *visual = DefaultVisual(xd->display, xd->screen); - - QImage image = shm_img; - //img.convertToFormat( - XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, - 0, (char *) image.scanLine(0), image.width(), image.height(), - 32, image.bytesPerLine()); - - int x = 0; - int y = 0; - - /*int r =*/ XPutImage(xd->display, window, gc, xi, 0, 0, x, y, image.width(), image.height()); - - xi->data = 0; // QImage owns these bits - XDestroyImage(xi); - } -#else - // Use MIT_SHM - if (image_info->image) { - //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; - int x = 0; - int y = 0; - - // We could set send_event to true, and then use the ShmCompletion to synchronize, - // but let's do like Qt/11 and just use XSync - XShmPutImage (xd->display, window, gc, image_info->image, 0, 0, - x, y, image_info->image->width, image_info->image->height, - /*send_event*/ False); - - XSync(xd->display, False); - } -#endif -} - -#ifndef DONT_USE_MIT_SHM -void MyShmImageInfo::destroy() -{ - XShmDetach (display, &shminfo); - XDestroyImage (image); - shmdt (shminfo.shmaddr); - shmctl (shminfo.shmid, IPC_RMID, 0); -} -#endif - -void MyWindow::resizeShmImage(int width, int height) -{ -#ifdef DONT_USE_MIT_SHM - shm_img = QImage(width, height, QImage::Format_RGB32); -#else - if (image_info) - image_info->destroy(); - else - image_info = new MyShmImageInfo(xd->display); - - Visual *visual = DefaultVisual(xd->display, xd->screen); - - - XImage *image = XShmCreateImage (xd->display, visual, 24, ZPixmap, 0, - &image_info->shminfo, width, height); - - - image_info->shminfo.shmid = shmget (IPC_PRIVATE, - image->bytes_per_line * image->height, IPC_CREAT|0777); - - image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); - image_info->shminfo.readOnly = False; - - image_info->image = image; - - Status shm_attach_status = XShmAttach(xd->display, &image_info->shminfo); - - Q_ASSERT(shm_attach_status == True); - - shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); -#endif - painted = false; -} - - -void MyWindow::resizeBuffer(QSize s) -{ - if (shm_img.size() != s) - resizeShmImage(s.width(), s.height()); -} - -QSize MyWindow::bufferSize() const -{ - return shm_img.size(); -} - - -void MyWindow::resizeEvent(XConfigureEvent *e) -{ - - if ((e->width != width || e->height != height) && e->x == 0 && e->y == 0) { - //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; - } else { - //qDebug() << "geometry change" << e->x << e->y << e->width << e->height << "window"<< hex << window; - xpos = e->x; - ypos = e->y; - } - width = e->width; - height = e->height; - -#ifdef MYX11_DEBUG - qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height << "img:" << shm_img.size(); -#endif - - windowTL->handleGeometryChange(xpos, ypos, width, height); -} - -#if 0 -void MyWindow::setSize(int w, int h) -{ - XResizeWindow(xd->display, window, w, h); -} -#endif - -void MyWindow::setGeometry(int x, int y, int w, int h) -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::setGeometry" << hex << window << dec << x << y << w << h << "img:" << shm_img.size(); -#endif - XMoveResizeWindow(xd->display, window, x, y, w, h); -} - - -void MyWindow::enterEvent(XCrossingEvent *) -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::enterEvent" << hex << window; -#endif - windowTL->handleEnterEvent(); -} - -void MyWindow::leaveEvent(XCrossingEvent *) -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::enterEvent" << hex << window; -#endif - windowTL->handleLeaveEvent(); -} - -void MyWindow::mousePressEvent(XButtonEvent *e) -{ - static long prevTime = 0; - static Window prevWindow; - static int prevX = -999; - static int prevY = -999; - - QEvent::Type type = QEvent::MouseButtonPress; - - if (e->window == prevWindow && long(e->time) - prevTime < QApplication::doubleClickInterval() - && qAbs(e->x - prevX) < 5 && qAbs(e->y - prevY) < 5) { - type = QEvent::MouseButtonDblClick; - prevTime = e->time - QApplication::doubleClickInterval(); //no double click next time - } else { - prevTime = e->time; - } - prevWindow = e->window; - prevX = e->x; - prevY = e->y; - - windowTL->handleMouseEvent(type, e); -} - -void MyWindow::mouseReleaseEvent(XButtonEvent *e) -{ - windowTL->handleMouseEvent(QEvent::MouseButtonRelease, e); -} - -void MyWindow::mouseMoveEvent(XButtonEvent *e) -{ - windowTL->handleMouseEvent(QEvent::MouseMove, e); -} - -#ifdef KeyPress -#undef KeyPress -#endif - -void MyWindow::keyPressEvent(XKeyEvent *e) -{ - windowTL->handleKeyEvent(QEvent::KeyPress, e); -} - -#ifdef KeyRelease -#undef KeyRelease -#endif - -void MyWindow::keyReleaseEvent(XKeyEvent *e) -{ - windowTL->handleKeyEvent(QEvent::KeyRelease, e); -} - - -// WindowFlag stuff, lots of copied code from qwidget_x11.cpp... - -//We're hacking here... - - -// MWM support -struct QtMWMHints { - ulong flags, functions, decorations; - long input_mode; - ulong status; -}; - -enum { - MWM_HINTS_FUNCTIONS = (1L << 0), - - MWM_FUNC_ALL = (1L << 0), - MWM_FUNC_RESIZE = (1L << 1), - MWM_FUNC_MOVE = (1L << 2), - MWM_FUNC_MINIMIZE = (1L << 3), - MWM_FUNC_MAXIMIZE = (1L << 4), - MWM_FUNC_CLOSE = (1L << 5), - - MWM_HINTS_DECORATIONS = (1L << 1), - - MWM_DECOR_ALL = (1L << 0), - MWM_DECOR_BORDER = (1L << 1), - MWM_DECOR_RESIZEH = (1L << 2), - MWM_DECOR_TITLE = (1L << 3), - MWM_DECOR_MENU = (1L << 4), - MWM_DECOR_MINIMIZE = (1L << 5), - MWM_DECOR_MAXIMIZE = (1L << 6), - - MWM_HINTS_INPUT_MODE = (1L << 2), - - MWM_INPUT_MODELESS = 0L, - MWM_INPUT_PRIMARY_APPLICATION_MODAL = 1L, - MWM_INPUT_FULL_APPLICATION_MODAL = 3L -}; - -static Atom mwm_hint_atom = XNone; - -static QtMWMHints GetMWMHints(Display *display, Window window) -{ - QtMWMHints mwmhints; - - Atom type; - int format; - ulong nitems, bytesLeft; - uchar *data = 0; - if ((XGetWindowProperty(display, window, mwm_hint_atom, 0, 5, false, - mwm_hint_atom, &type, &format, &nitems, &bytesLeft, - &data) == Success) - && (type == mwm_hint_atom - && format == 32 - && nitems >= 5)) { - mwmhints = *(reinterpret_cast(data)); - } else { - mwmhints.flags = 0L; - mwmhints.functions = MWM_FUNC_ALL; - mwmhints.decorations = MWM_DECOR_ALL; - mwmhints.input_mode = 0L; - mwmhints.status = 0L; - } - - if (data) - XFree(data); - - return mwmhints; -} - -static void SetMWMHints(Display *display, Window window, const QtMWMHints &mwmhints) -{ - if (mwmhints.flags != 0l) { - XChangeProperty(display, window, mwm_hint_atom, mwm_hint_atom, 32, - PropModeReplace, (unsigned char *) &mwmhints, 5); - } else { - XDeleteProperty(display, window, mwm_hint_atom); - } -} - -// Returns true if we should set WM_TRANSIENT_FOR on \a w -static inline bool isTransient(const QWidget *w) -{ - return ((w->windowType() == Qt::Dialog - || w->windowType() == Qt::Sheet - || w->windowType() == Qt::Tool - || w->windowType() == Qt::SplashScreen - || w->windowType() == Qt::ToolTip - || w->windowType() == Qt::Drawer - || w->windowType() == Qt::Popup) - && !w->testAttribute(Qt::WA_X11BypassTransientForHint)); -} - - - -Qt::WindowFlags MyWindow::setWindowFlags(Qt::WindowFlags flags) -{ - - if (mwm_hint_atom == XNone) { - mwm_hint_atom = XInternAtom(xd->display, "_MOTIF_WM_HINTS\0", False); - } - -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::setWindowFlags" << hex << window << "flags" << flags; -#endif - Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); - - if (type == Qt::ToolTip) - flags |= Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint; - if (type == Qt::Popup) - flags |= Qt::X11BypassWindowManagerHint; - - bool topLevel = (flags & Qt::Window); - bool popup = (type == Qt::Popup); - bool dialog = (type == Qt::Dialog - || type == Qt::Sheet); - bool desktop = (type == Qt::Desktop); - bool tool = (type == Qt::Tool || type == Qt::SplashScreen - || type == Qt::ToolTip || type == Qt::Drawer); - - bool tooltip = (type == Qt::ToolTip); - - XSetWindowAttributes wsa; - - QtMWMHints mwmhints; - mwmhints.flags = 0L; - mwmhints.functions = 0L; - mwmhints.decorations = 0; - mwmhints.input_mode = 0L; - mwmhints.status = 0L; - - - ulong wsa_mask = 0; - if (type != Qt::SplashScreen) { // && customize) { - mwmhints.flags |= MWM_HINTS_DECORATIONS; - - bool customize = flags & Qt::CustomizeWindowHint; - if (!(flags & Qt::FramelessWindowHint) && !(customize && !(flags & Qt::WindowTitleHint))) { - mwmhints.decorations |= MWM_DECOR_BORDER; - mwmhints.decorations |= MWM_DECOR_RESIZEH; - - if (flags & Qt::WindowTitleHint) - mwmhints.decorations |= MWM_DECOR_TITLE; - - if (flags & Qt::WindowSystemMenuHint) - mwmhints.decorations |= MWM_DECOR_MENU; - - if (flags & Qt::WindowMinimizeButtonHint) { - mwmhints.decorations |= MWM_DECOR_MINIMIZE; - mwmhints.functions |= MWM_FUNC_MINIMIZE; - } - - if (flags & Qt::WindowMaximizeButtonHint) { - mwmhints.decorations |= MWM_DECOR_MAXIMIZE; - mwmhints.functions |= MWM_FUNC_MAXIMIZE; - } - - if (flags & Qt::WindowCloseButtonHint) - mwmhints.functions |= MWM_FUNC_CLOSE; - } - } else { - // if type == Qt::SplashScreen - mwmhints.decorations = MWM_DECOR_ALL; - } - - if (tool) { - wsa.save_under = True; - wsa_mask |= CWSaveUnder; - } - - if (flags & Qt::X11BypassWindowManagerHint) { - wsa.override_redirect = True; - wsa_mask |= CWOverrideRedirect; - } -#if 0 - if (wsa_mask && initializeWindow) { - Q_ASSERT(id); - XChangeWindowAttributes(dpy, id, wsa_mask, &wsa); - } -#endif - if (mwmhints.functions != 0) { - mwmhints.flags |= MWM_HINTS_FUNCTIONS; - mwmhints.functions |= MWM_FUNC_MOVE | MWM_FUNC_RESIZE; - } else { - mwmhints.functions = MWM_FUNC_ALL; - } - - if (!(flags & Qt::FramelessWindowHint) - && flags & Qt::CustomizeWindowHint - && flags & Qt::WindowTitleHint - && !(flags & - (Qt::WindowMinimizeButtonHint - | Qt::WindowMaximizeButtonHint - | Qt::WindowCloseButtonHint))) { - // a special case - only the titlebar without any button - mwmhints.flags = MWM_HINTS_FUNCTIONS; - mwmhints.functions = MWM_FUNC_MOVE | MWM_FUNC_RESIZE; - mwmhints.decorations = 0; - } - - SetMWMHints(xd->display, window, mwmhints); - -//##### only if initializeWindow??? - - if (popup || tooltip) { // popup widget -#ifdef MYX11_DEBUG - qDebug() << "Doing XChangeWindowAttributes for popup" << wsa.override_redirect; -#endif - // set EWMH window types - // setNetWmWindowTypes(); - - wsa.override_redirect = True; - wsa.save_under = True; - XChangeWindowAttributes(xd->display, window, CWOverrideRedirect | CWSaveUnder, - &wsa); - } else { -#ifdef MYX11_DEBUG - qDebug() << "Doing XChangeWindowAttributes for non-popup"; -#endif - } - - return flags; -} - -void MyWindow::setVisible(bool visible) -{ -#ifdef MYX11_DEBUG - qDebug() << "MyWindow::setVisible" << visible << hex << window; -#endif - if (visible) - XMapWindow(xd->display, window); - else - XUnmapWindow(xd->display, window); -} - -MyX11Cursors::MyX11Cursors(Display * d) : firstExpired(0), lastExpired(0), display(d), removalDelay(3) -{ - connect(&timer, SIGNAL(timeout()), this, SLOT(timeout())); -} - -void MyX11Cursors::insertNode(MyX11CursorNode * node) -{ - QDateTime now = QDateTime::currentDateTime(); - QDateTime timeout = now.addSecs(removalDelay); - node->setExpiration(timeout); - node->setPost(0); - if (lastExpired) { - lastExpired->setPost(node); - node->setAnte(lastExpired); - } - lastExpired = node; - if (!firstExpired) { - firstExpired = node; - node->setAnte(0); - int interval = removalDelay * 1000; - timer.setInterval(interval); - timer.start(); - } -} - -void MyX11Cursors::removeNode(MyX11CursorNode * node) -{ - MyX11CursorNode *pre = node->ante(); - MyX11CursorNode *post = node->post(); - if (pre) - pre->setPost(post); - if (post) - post->setAnte(pre); - if (node == lastExpired) - lastExpired = pre; - if (node == firstExpired) { - firstExpired = post; - if (!firstExpired) { - timer.stop(); - return; - } - int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; - timer.stop(); - timer.setInterval(interval); - timer.start(); - } -} - -void MyX11Cursors::incrementUseCount(int id) -{ - MyX11CursorNode * node = lookupMap.value(id); - Q_ASSERT(node); - if (!node->refCount) - removeNode(node); - node->refCount++; -} - -void MyX11Cursors::decrementUseCount(int id) -{ - MyX11CursorNode * node = lookupMap.value(id); - Q_ASSERT(node); - node->refCount--; - if (!node->refCount) - insertNode(node); -} - -void MyX11Cursors::createNode(int id, Cursor c) -{ - MyX11CursorNode * node = new MyX11CursorNode(id, c); - lookupMap.insert(id, node); -} - -void MyX11Cursors::timeout() -{ - MyX11CursorNode * node; - node = firstExpired; - QDateTime now = QDateTime::currentDateTime(); - while (node && now.secsTo(node->expiration()) < 1) { - Cursor c = node->cursor(); - int id = node->id(); - lookupMap.take(id); - MyX11CursorNode * tmp = node; - node = node->post(); - delete tmp; - XFreeCursor(display, c); - } - firstExpired = node; - if (node == 0) { - timer.stop(); - lastExpired = 0; - } - else { - int interval = QDateTime::currentDateTime().secsTo(firstExpired->expiration()) * 1000; - timer.setInterval(interval); - timer.start(); - } -} - -Cursor MyX11Cursors::cursor(int id) -{ - MyX11CursorNode * node = lookupMap.value(id); - Q_ASSERT(node); - return node->cursor(); -} - -void MyWindow::setCursor(QCursor * cursor) -{ - int id = cursor->handle(); - if (id == currentCursor) - return; - Cursor c; - if (!xd->cursors->exists(id)) { - if (cursor->shape() == Qt::BitmapCursor) - c = createCursorBitmap(cursor); - else - c = createCursorShape(cursor->shape()); - if (!c) { - return; - } - xd->cursors->createNode(id, c); - } else { - xd->cursors->incrementUseCount(id); - c = xd->cursors->cursor(id); - } - - if (currentCursor != -1) - xd->cursors->decrementUseCount(currentCursor); - currentCursor = id; - - XDefineCursor(xd->display, window, c); - XFlush(xd->display); -} - -Cursor MyWindow::createCursorBitmap(QCursor * cursor) -{ - XColor bg, fg; - bg.red = 255 << 8; - bg.green = 255 << 8; - bg.blue = 255 << 8; - fg.red = 0; - fg.green = 0; - fg.blue = 0; - QPoint spot = cursor->hotSpot(); - Window rootwin = window; - - QImage mapImage = cursor->bitmap()->toImage().convertToFormat(QImage::Format_MonoLSB); - QImage maskImage = cursor->mask()->toImage().convertToFormat(QImage::Format_MonoLSB); - - int width = cursor->bitmap()->width(); - int height = cursor->bitmap()->height(); - int bytesPerLine = mapImage.bytesPerLine(); - int destLineSize = width / 8; - if (width % 8) - destLineSize++; - - const uchar * map = mapImage.bits(); - const uchar * mask = maskImage.bits(); - - char * mapBits = new char[height * destLineSize]; - char * maskBits = new char[height * destLineSize]; - for (int i = 0; i < height; i++) { - memcpy(mapBits + (destLineSize * i),map + (bytesPerLine * i), destLineSize); - memcpy(maskBits + (destLineSize * i),mask + (bytesPerLine * i), destLineSize); - } - - Pixmap cp = XCreateBitmapFromData(xd->display, rootwin, mapBits, width, height); - Pixmap mp = XCreateBitmapFromData(xd->display, rootwin, maskBits, width, height); - Cursor c = XCreatePixmapCursor(xd->display, cp, mp, &fg, &bg, spot.x(), spot.y()); - XFreePixmap(xd->display, cp); - XFreePixmap(xd->display, mp); - delete[] mapBits; - delete[] maskBits; - - return c; -} - -Cursor MyWindow::createCursorShape(int cshape) -{ - Cursor cursor = 0; - - if (cshape < 0 || cshape > Qt::LastCursor) - return 0; - - switch (cshape) { - case Qt::ArrowCursor: - cursor = XCreateFontCursor(xd->display, XC_left_ptr); - break; - case Qt::UpArrowCursor: - cursor = XCreateFontCursor(xd->display, XC_center_ptr); - break; - case Qt::CrossCursor: - cursor = XCreateFontCursor(xd->display, XC_crosshair); - break; - case Qt::WaitCursor: - cursor = XCreateFontCursor(xd->display, XC_watch); - break; - case Qt::IBeamCursor: - cursor = XCreateFontCursor(xd->display, XC_xterm); - break; - case Qt::SizeAllCursor: - cursor = XCreateFontCursor(xd->display, XC_fleur); - break; - case Qt::PointingHandCursor: - cursor = XCreateFontCursor(xd->display, XC_hand2); - break; - case Qt::SizeBDiagCursor: - cursor = XCreateFontCursor(xd->display, XC_top_right_corner); - break; - case Qt::SizeFDiagCursor: - cursor = XCreateFontCursor(xd->display, XC_bottom_right_corner); - break; - case Qt::SizeVerCursor: - case Qt::SplitVCursor: - cursor = XCreateFontCursor(xd->display, XC_sb_v_double_arrow); - break; - case Qt::SizeHorCursor: - case Qt::SplitHCursor: - cursor = XCreateFontCursor(xd->display, XC_sb_h_double_arrow); - break; - case Qt::WhatsThisCursor: - cursor = XCreateFontCursor(xd->display, XC_question_arrow); - break; - case Qt::ForbiddenCursor: - cursor = XCreateFontCursor(xd->display, XC_circle); - break; - case Qt::BusyCursor: - cursor = XCreateFontCursor(xd->display, XC_watch); - break; - - default: //default cursor for all the rest - break; - } - return cursor; -} - - -#if 0 - - - switch (cshape) { // map Q cursor to X cursor - case Qt::BlankCursor: - XColor bg, fg; - bg.red = 255 << 8; - bg.green = 255 << 8; - bg.blue = 255 << 8; - fg.red = 0; - fg.green = 0; - fg.blue = 0; - pm = XCreateBitmapFromData(dpy, rootwin, cur_blank_bits, 16, 16); - pmm = XCreateBitmapFromData(dpy, rootwin, cur_blank_bits, 16, 16); - hcurs = XCreatePixmapCursor(dpy, pm, pmm, &fg, &bg, 8, 8); - return; - break; - default: - qWarning("QCursor::update: Invalid cursor shape %d", cshape); - return; - } -#endif diff --git a/src/plugins/platforms/testlite/x11util.h b/src/plugins/platforms/testlite/x11util.h deleted file mode 100644 index b28d1e8..0000000 --- a/src/plugins/platforms/testlite/x11util.h +++ /dev/null @@ -1,204 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef MYX11UTIL_H -#define MYX11UTIL_H - -#include -#include -#include -#include - -#include - -#include -#include - - -class MyWindow; -class MyX11Cursors; - -class MyDisplay : public QObject -{ - Q_OBJECT; -public: - MyDisplay(); - ~MyDisplay(); - - Window rootWindow() { return RootWindow(display, screen); } - unsigned long blackPixel() { return BlackPixel(display, screen); } - unsigned long whitePixel() { return WhitePixel(display, screen); } - - bool handleEvent(XEvent *xe); - QImage grabWindow(Window window, int x, int y, int w, int h); - -public slots: - void eventDispatcher(); - -public: //### - Display * display; - int screen; - int width, height; - int physicalWidth; - int physicalHeight; - - QList windowList; - - MyX11Cursors * cursors; -}; - -class QTestLiteWindow; //### abstract callback interface, anyone? - -struct MyShmImageInfo; - -class MyWindow : public QObject -{ - Q_OBJECT; -public: - MyWindow(MyDisplay *xd, int x, int y, int w, int h); - ~MyWindow(); - - - void mousePressEvent(XButtonEvent*); - void mouseReleaseEvent(XButtonEvent*); - void mouseMoveEvent(XButtonEvent*); - - void keyPressEvent(XKeyEvent*); - void keyReleaseEvent(XKeyEvent*); - - void enterEvent(XCrossingEvent*); - void leaveEvent(XCrossingEvent*); - - void closeEvent(); - void paintEvent(); - void resizeEvent(XConfigureEvent *configure_event); -// void setSize(int w, int h); - void setGeometry(int x, int y, int w, int h); - - GC createGC(); - - Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); - void setVisible(bool visible); - void setCursor(QCursor * cursor); - Cursor createCursorShape(int cshape); - Cursor createCursorBitmap(QCursor * cursor); - - void setWindowTitle(const QString &title); - - QImage *image() { return &shm_img; } - -public: //### - - int xpos, ypos; - int width, height; - Window window; - MyDisplay *xd; - GC gc; - - QTestLiteWindow *windowTL; - - int currentCursor; - bool painted; - void resizeBuffer(QSize); - QSize bufferSize() const; - -private: - void resizeShmImage(int width, int height); - - QImage shm_img; - MyShmImageInfo *image_info; -}; - -class MyX11CursorNode -{ -public: - MyX11CursorNode(int id, Cursor c) { idValue = id; cursorValue = c; refCount = 1; } - QDateTime expiration() { return t; } - void setExpiration(QDateTime val) { t = val; } - MyX11CursorNode * ante() { return before; } - void setAnte(MyX11CursorNode *node) { before = node; } - MyX11CursorNode * post() { return after; } - void setPost(MyX11CursorNode *node) { after = node; } - Cursor cursor() { return cursorValue; } - int id() { return idValue; } - unsigned int refCount; - -private: - MyX11CursorNode *before; - MyX11CursorNode *after; - QDateTime t; - Cursor cursorValue; - int idValue; - - Display * display; -}; - -class MyX11Cursors : public QObject -{ - Q_OBJECT -public: - MyX11Cursors(Display * d); - ~MyX11Cursors() { timer.stop(); } - void incrementUseCount(int id); - void decrementUseCount(int id); - void createNode(int id, Cursor c); - bool exists(int id) { return lookupMap.contains(id); } - Cursor cursor(int id); -public slots: - void timeout(); - -private: - void removeNode(MyX11CursorNode *node); - void insertNode(MyX11CursorNode *node); - - // linked list of cursors currently not assigned to any window - MyX11CursorNode *firstExpired; - MyX11CursorNode *lastExpired; - - QHash lookupMap; - QTimer timer; - - Display *display; - - int removalDelay; -}; - -#endif // MYX11UTIL_H -- cgit v0.12 From b260d7b806c239505324d6a4762d3755e74a1b61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 12 Apr 2010 12:33:25 +0200 Subject: Fix forward declaration in qplatformwindow_lite.h --- src/gui/kernel/qplatformwindow_lite.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qplatformwindow_lite.h b/src/gui/kernel/qplatformwindow_lite.h index 8771cfe..583ac28 100644 --- a/src/gui/kernel/qplatformwindow_lite.h +++ b/src/gui/kernel/qplatformwindow_lite.h @@ -47,13 +47,13 @@ #include #include -class QPlatformWindowPrivate; -class QWidget; QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +class QPlatformWindowPrivate; +class QWidget; class Q_GUI_EXPORT QPlatformWindow { Q_DECLARE_PRIVATE(QPlatformWindow); -- cgit v0.12 From 0851bd20f126a7dafec776771795e08de5ac9fe9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 12 Apr 2010 12:46:34 +0200 Subject: Cleaned up Blitter Paint engine and fixed a couple of bugs --- src/gui/painting/qpaintengine_blitter.cpp | 111 ++++++++++----------- src/gui/painting/qpaintengine_blitter_p.h | 1 - .../platforms/directfb/qblitter_directfb.cpp | 5 +- 3 files changed, 56 insertions(+), 61 deletions(-) diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 0b74a4d..54a146f 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -30,14 +30,20 @@ static inline void updateStateBits(uint *state, uint mask, bool on) *state = on ? (*state | mask) : (*state & ~mask); } +static inline bool checkStateAgainstMask(uint state, uint mask) +{ + return !state || (state & mask && !(state & ~mask)); +} + class CapabilitiesToStateMask { public: CapabilitiesToStateMask(QBlittable::Capabilities capabilities) : m_capabilities(capabilities), - fillRectMask(0), fillRectState(0), - drawRectMask(0), drawRectState(0), - drawPixmapMask(0), drawPixmapState(0) + fillRectMask(0), + drawRectMask(0), + drawPixmapMask(0), + capabillitiesState(0) { if (capabilities & QBlittable::SolidRectCapability) { setFillRectMask(); @@ -48,23 +54,26 @@ public: if (capabilities & QBlittable::SourceOverPixmapCapability) { setSourceOverPixmapMask(); } + if (capabilities & QBlittable::SourceOverScaledPixmapCapability) { + setSourceOverScaledPixmapMask(); + } } inline bool canBlitterFillRect() const { - return !fillRectState || (fillRectState & fillRectMask); + return checkStateAgainstMask(capabillitiesState,fillRectMask); } inline bool canBlitterDrawRectMask() const { - return drawRectState & drawRectMask; + return checkStateAgainstMask(capabillitiesState,drawRectMask); } bool canBlitterDrawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) const { if (pm.pixmapData()->classId() != QPixmapData::BlitterClass) return false; - if ((!drawPixmapState) || drawPixmapState & drawPixmapMask) { + if (checkStateAgainstMask(capabillitiesState,drawPixmapMask)) { if (m_capabilities & (QBlittable::SourceOverPixmapCapability | QBlittable::SourceOverScaledPixmapCapability)) { if (r.size() != sr.size()) { @@ -80,21 +89,8 @@ public: return false; } - inline void updateFillRectBits(uint mask, bool on) { - updateStateBits(&fillRectState,mask,on); - } - - inline void updateDrawRectBits(uint mask, bool on) { - updateStateBits(&drawRectState,mask,on); - } - - inline void updateDrawPixmapBits(uint mask, bool on) { - updateStateBits(&drawPixmapState,mask,on); - } - inline void updateAllWithBits(uint mask, bool on) { - updateStateBits(&fillRectState,mask,on); - updateStateBits(&drawRectState,mask,on); - updateStateBits(&drawPixmapState,mask,on); + inline void updateState(uint mask, bool on) { + updateStateBits(&capabillitiesState,mask,on); } public: @@ -138,17 +134,21 @@ public: setSourcePixmapMask(); } + void setSourceOverScaledPixmapMask() { + setSourceOverPixmapMask(); + updateStateBits(&drawRectMask, STATE_XFORM_SCALE, true); + } + QBlittable::Capabilities m_capabilities; uint fillRectMask; - uint fillRectState; uint drawRectMask; - uint drawRectState; uint drawPixmapMask; - uint drawPixmapState; + uint capabillitiesState; }; class QBlitterPaintEnginePrivate : public QPaintEngineExPrivate { + Q_DECLARE_PUBLIC(QBlitterPaintEngine); public: QBlitterPaintEnginePrivate(QBlittablePixmapData *p) : QPaintEngineExPrivate(), @@ -176,12 +176,13 @@ public: } void fillRect(const QRectF &rect, const QColor &color) { + Q_Q(QBlitterPaintEngine); pmData->unmarkRasterOverlay(rect); QRectF targetRect = rect; if (hasXForm) { - targetRect = state->matrix.mapRect(rect); + targetRect = q->state()->matrix.mapRect(rect); } - const QClipData *clipData = raster->d_func()->clip();; + const QClipData *clipData = q->clip(); if (clipData) { if (clipData->hasRectClip) { unlock(); @@ -214,23 +215,23 @@ public: QRectF intersectedRect = clip.intersected(target); if (intersectedRect.isEmpty()) return; - QRectF source = sr; if(intersectedRect.size() != target.size()) { qreal deltaTop = target.top() - intersectedRect.top(); qreal deltaLeft = target.left() - intersectedRect.left(); qreal deltaBottom = target.bottom() - intersectedRect.bottom(); qreal deltaRight = target.right() - intersectedRect.right(); - source.adjust(-deltaLeft,-deltaTop,deltaRight,deltaBottom); + source.adjust(-deltaLeft,-deltaTop,-deltaRight,-deltaBottom); } pmData->unmarkRasterOverlay(intersectedRect); pmData->blittable()->drawPixmap(intersectedRect, pm, source); } void updateClip() { - const QClipData *clip = raster->d_func()->clip(); - bool complex = clip != 0 && !(clip->hasRectClip || clip->hasRegionClip); - capabillities->updateAllWithBits(STATE_CLIP_COMPLEX, complex); + Q_Q(QBlitterPaintEngine); + const QClipData *clip = q->clip(); + bool complex = clip && !(clip->hasRectClip || clip->hasRegionClip); + capabillities->updateState(STATE_CLIP_COMPLEX, complex); } void systemStateChanged() { @@ -238,7 +239,6 @@ public: } QRasterPaintEngine *raster; - QRasterPaintEngineState *state; QBlittablePixmapData *pmData; bool isBlitterLocked; @@ -267,8 +267,6 @@ bool QBlitterPaintEngine::begin(QPaintDevice *pdev) { Q_D(QBlitterPaintEngine); - d->raster->setSystemRect(systemRect()); - d->raster->setSystemClip(systemClip()); setActive(true); bool ok = d->raster->begin(pdev); #ifdef QT_BLITTER_RASTEROVERLAY @@ -282,8 +280,6 @@ bool QBlitterPaintEngine::end() { Q_D(QBlitterPaintEngine); - d->raster->setPaintDevice(0); - d->raster->setActive(false); setActive(false); #ifdef QT_BLITTER_RASTEROVERLAY d->pmData->mergeOverlay(); @@ -321,7 +317,9 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) { if(rect.size().isEmpty()) return; + Q_D(QBlitterPaintEngine); + if (qbrush_style(brush) == Qt::SolidPattern && qbrush_color(brush).alpha() == 0xff && d->capabillities->canBlitterFillRect()) @@ -336,11 +334,11 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) qreal y = transformedRect.y(); QPixmap pm = brush.texture(); d->unlock(); - int srcX = (int)(rect.x() - d->raster->state()->brushOrigin.x()) % pm.width(); + int srcX = int(rect.x() - state()->brushOrigin.x()) % pm.width(); if (srcX < 0) srcX = pm.width() + srcX; const int startX = srcX; - int srcY = (int)(rect.y() - d->raster->state()->brushOrigin.y())% pm.height(); + int srcY = int(rect.y() - state()->brushOrigin.y()) % pm.height(); if (srcY < 0) srcY = pm.height() + srcY; while (!rectIsFilled) { @@ -350,7 +348,7 @@ void QBlitterPaintEngine::fillRect(const QRectF &rect, const QBrush &brush) blitWidth = transformedRect.right() -x; if (y + blitHeight > transformedRect.bottom()) blitHeight = transformedRect.bottom() - y; - const QClipData *clipData = d->raster->d_func()->clip(); + const QClipData *clipData = clip(); if (clipData->hasRectClip) { QRect targetRect = QRect(x,y,blitWidth,blitHeight).intersected(clipData->clipRect); if (targetRect.isValid()) { @@ -434,7 +432,7 @@ void QBlitterPaintEngine::penChanged() Q_D(QBlitterPaintEngine); d->lock(); d->raster->penChanged(); - d->capabillities->updateDrawRectBits(STATE_PEN_ENABLED,qpen_style(d->state->pen) != Qt::NoPen); + d->capabillities->updateState(STATE_PEN_ENABLED,qpen_style(state()->pen) != Qt::NoPen); } void QBlitterPaintEngine::brushChanged() @@ -442,11 +440,11 @@ void QBlitterPaintEngine::brushChanged() Q_D(QBlitterPaintEngine); d->raster->brushChanged(); - bool solid = qbrush_style(d->state->brush) == Qt::SolidPattern; + bool solid = qbrush_style(state()->brush) == Qt::SolidPattern; - d->capabillities->updateDrawRectBits(STATE_BRUSH_PATTERN, !solid); - d->capabillities->updateDrawRectBits(STATE_BRUSH_ALPHA, - qbrush_color(d->state->brush).alpha() < 255); + d->capabillities->updateState(STATE_BRUSH_PATTERN, !solid); + d->capabillities->updateState(STATE_BRUSH_ALPHA, + qbrush_color(state()->brush).alpha() < 255); } void QBlitterPaintEngine::brushOriginChanged() @@ -460,8 +458,8 @@ void QBlitterPaintEngine::opacityChanged() Q_D(QBlitterPaintEngine); d->raster->opacityChanged(); - bool translucent = d->state->opacity < 1; - d->capabillities->updateAllWithBits(STATE_ALPHA,translucent); + bool translucent = state()->opacity < 1; + d->capabillities->updateState(STATE_ALPHA,translucent); } void QBlitterPaintEngine::compositionModeChanged() @@ -469,10 +467,10 @@ void QBlitterPaintEngine::compositionModeChanged() Q_D(QBlitterPaintEngine); d->raster->compositionModeChanged(); - bool nonTrivial = d->state->composition_mode != QPainter::CompositionMode_SourceOver - && d->state->composition_mode != QPainter::CompositionMode_Source; + bool nonTrivial = state()->composition_mode != QPainter::CompositionMode_SourceOver + && state()->composition_mode != QPainter::CompositionMode_Source; - d->capabillities->updateAllWithBits(STATE_BLENDING_COMPLEX,nonTrivial); + d->capabillities->updateState(STATE_BLENDING_COMPLEX,nonTrivial); } void QBlitterPaintEngine::renderHintsChanged() @@ -480,9 +478,8 @@ void QBlitterPaintEngine::renderHintsChanged() Q_D(QBlitterPaintEngine); d->raster->renderHintsChanged(); - bool aa = d->state->renderHints & QPainter::Antialiasing; - d->capabillities->updateFillRectBits(STATE_ANTIALIASING, aa); - d->capabillities->updateDrawRectBits(STATE_ANTIALIASING, aa); + bool aa = state()->renderHints & QPainter::Antialiasing; + d->capabillities->updateState(STATE_ANTIALIASING, aa); } @@ -491,9 +488,10 @@ void QBlitterPaintEngine::transformChanged() Q_D(QBlitterPaintEngine); d->raster->transformChanged(); - QTransform::TransformationType type = d->state->matrix.type(); + QTransform::TransformationType type = state()->matrix.type(); - d->capabillities->updateAllWithBits(STATE_XFORM_COMPLEX, type > QTransform::TxScale); + d->capabillities->updateState(STATE_XFORM_COMPLEX, type > QTransform::TxScale); + d->capabillities->updateState(STATE_XFORM_SCALE, type > QTransform::TxTranslate); d->hasXForm = type >= QTransform::TxTranslate; @@ -504,7 +502,7 @@ void QBlitterPaintEngine::drawRects(const QRect *rects, int rectCount) Q_D(QBlitterPaintEngine); if (d->capabillities->canBlitterDrawRectMask()) { for (int i=0; ifillRect(rects[i], qbrush_color(d->state->brush)); + d->fillRect(rects[i], qbrush_color(state()->brush)); } } else { d->pmData->markRasterOverlay(rects,rectCount); @@ -517,7 +515,7 @@ void QBlitterPaintEngine::drawRects(const QRectF *rects, int rectCount) Q_D(QBlitterPaintEngine); if (d->capabillities->canBlitterDrawRectMask()) { for (int i=0; ifillRect(rects[i], qbrush_color(d->state->brush)); + d->fillRect(rects[i], qbrush_color(state()->brush)); } } else { d->pmData->markRasterOverlay(rects,rectCount); @@ -600,7 +598,6 @@ void QBlitterPaintEngine::setState(QPainterState *s) d->lock(); QPaintEngineEx::setState(s); d->raster->setState(s); - d->state = (QRasterPaintEngineState *) s; clipEnabledChanged(); penChanged(); diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index d436993..3a2fce5 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -64,7 +64,6 @@ public: private: QRasterPaintEngine *raster() const; - }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qblitter_directfb.cpp b/src/plugins/platforms/directfb/qblitter_directfb.cpp index 08dee0a..6525022 100644 --- a/src/plugins/platforms/directfb/qblitter_directfb.cpp +++ b/src/plugins/platforms/directfb/qblitter_directfb.cpp @@ -28,6 +28,7 @@ QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface) dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); m_surface->Clear(m_surface,0,0,0,0); } + } QDirectFbBlitter::~QDirectFbBlitter() @@ -60,13 +61,11 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con IDirectFBSurface *s = dfbBlitter->m_surface; quint32 blittingFlags = pixmap.hasAlpha()? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; - - s->SetBlittingFlags(s, DFBSurfaceBlittingFlags(blittingFlags)); m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); m_surface->SetPorterDuff(m_surface,DSPD_SRC_OVER); m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); - const DFBRectangle sRect = { srcRect.x(), srcRect.y(), rect.width(), rect.height() }; + const DFBRectangle sRect = { srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height() }; DFBResult result; if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) -- cgit v0.12 From 3cf347414ce2203178893fb1fa1d005633d37526 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 12 Apr 2010 13:47:52 +0200 Subject: Small optimalisation in DirectfbBlitter --- src/gui/painting/qpaintengine_blitter.cpp | 2 +- src/plugins/platforms/directfb/qblitter_directfb.cpp | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 54a146f..4144696 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -533,7 +533,7 @@ void QBlitterPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const Q if (d->hasXForm) { targetRect = state()->matrix.mapRect(r); } - const QClipData *clipData = d->raster->d_func()->clip(); + const QClipData *clipData = clip(); if (clipData) { if (clipData->hasRectClip) { d->clipAndDrawPixmap(clipData->clipRect,targetRect,pm,sr); diff --git a/src/plugins/platforms/directfb/qblitter_directfb.cpp b/src/plugins/platforms/directfb/qblitter_directfb.cpp index 6525022..20f8741 100644 --- a/src/plugins/platforms/directfb/qblitter_directfb.cpp +++ b/src/plugins/platforms/directfb/qblitter_directfb.cpp @@ -60,9 +60,15 @@ void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, con IDirectFBSurface *s = dfbBlitter->m_surface; - quint32 blittingFlags = pixmap.hasAlpha()? DSBLIT_BLEND_ALPHACHANNEL : DSBLIT_NOFX; + DFBSurfaceBlittingFlags blittingFlags = DSBLIT_NOFX; + DFBSurfacePorterDuffRule porterDuff = DSPD_SRC; + if (pixmap.hasAlpha()) { + blittingFlags = DSBLIT_BLEND_ALPHACHANNEL; + porterDuff = DSPD_SRC_OVER; + } + m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); - m_surface->SetPorterDuff(m_surface,DSPD_SRC_OVER); + m_surface->SetPorterDuff(m_surface,porterDuff); m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); const DFBRectangle sRect = { srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height() }; -- cgit v0.12 From 1d768c1deb98a8e32cdbd7790186e1d6a81acc29 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 12 Apr 2010 14:20:39 +0200 Subject: Ifdef out QPlatformWindow implementation when not compiling lighthouse --- src/gui/kernel/qwidget.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 7eaf03c..07639ba 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -11842,6 +11842,7 @@ QWindowSurface *QWidget::windowSurface() const return bs ? bs->windowSurface : 0; } +#if defined(Q_WS_LITE) /*! \preliminary @@ -11879,6 +11880,7 @@ QPlatformWindow *QWidget::platformWindow() const return 0; } +#endif //defined(Q_WS_LITE) void QWidgetPrivate::getLayoutItemMargins(int *left, int *top, int *right, int *bottom) const { -- cgit v0.12 From 80c3790501df2ce3a8edf022e469317bc6f66246 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 12 Apr 2010 15:21:35 +0200 Subject: Make the VNC plugin compile and largely work --- src/gui/kernel/qplatformscreen_lite.h | 4 +- src/gui/kernel/qwidget_lite.cpp | 18 +++- src/plugins/platforms/fb_base/fb_base.cpp | 98 ++++++++++++++++------ src/plugins/platforms/fb_base/fb_base.h | 58 ++++++++++--- src/plugins/platforms/testlite/qtestlitewindow.cpp | 1 + src/plugins/platforms/vnc/main.cpp | 8 +- src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp | 22 ++++- src/plugins/platforms/vnc/qgraphicssystem_vnc.h | 11 +-- src/plugins/platforms/vnc/vnc.pro | 4 +- 9 files changed, 168 insertions(+), 56 deletions(-) diff --git a/src/gui/kernel/qplatformscreen_lite.h b/src/gui/kernel/qplatformscreen_lite.h index da0e26b..cae5f42 100644 --- a/src/gui/kernel/qplatformscreen_lite.h +++ b/src/gui/kernel/qplatformscreen_lite.h @@ -44,6 +44,7 @@ #include #include +#include QT_BEGIN_HEADER @@ -51,8 +52,9 @@ QT_BEGIN_NAMESPACE QT_MODULE(Gui) -class Q_GUI_EXPORT QPlatformScreen +class Q_GUI_EXPORT QPlatformScreen : public QObject { + Q_OBJECT public: virtual ~QPlatformScreen() { } diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index cf93c5e..465dbee 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -90,10 +90,8 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO void QWidget::destroy(bool destroyWindow, bool destroySubWindows) { - Q_UNUSED(destroyWindow); + Q_D(QWidget); Q_UNUSED(destroySubWindows); - // XXX - if ((windowType() == Qt::Popup)) qApp->d_func()->closePopup(this); @@ -101,6 +99,20 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) //### we don't have proper focus event handling yet if (this == QApplicationPrivate::active_window) QApplication::setActiveWindow(0); + + if (windowType() != Qt::Desktop) { + if (destroyWindow && isWindow()) { + QTLWExtra *topData = d->maybeTopData(); + if (topData) { + delete topData->platformWindow; + topData->platformWindow = 0; + } + } else { + if (parentWidget() && parentWidget()->testAttribute(Qt::WA_WState_Created)) { + d->hide_sys(); + } + } + } } void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index d30746a..422222c 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -6,7 +6,7 @@ #include #include -QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen *scr) +QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QPlatformScreen *scr) : QGraphicsSystemCursor(scr), currentRect(QRect()), prevRect(QRect()) { graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); @@ -126,6 +126,8 @@ QGraphicsSystemFbScreen::~QGraphicsSystemFbScreen() void QGraphicsSystemFbScreen::setDirty(const QRect &rect) { + +// qDebug() << "QGraphicsSystemFbScreen::setDirty" << rect; repaintRegion += rect; if (!redrawTimer.isActive()) { redrawTimer.start(); @@ -140,7 +142,7 @@ void QGraphicsSystemFbScreen::generateRects() for (int i = 0; i < windowStack.length(); i++) { if (remainingScreen.isEmpty()) break; - if (!windowStack[i]->window()->testAttribute(Qt::WA_TranslucentBackground)) { + if (!windowStack[i]->widget()->testAttribute(Qt::WA_TranslucentBackground)) { remainingScreen -= windowStack[i]->geometry(); QRegion windowRegion(windowStack[i]->geometry()); windowRegion -= remainingScreen; @@ -197,12 +199,13 @@ QRegion QGraphicsSystemFbScreen::doRedraw() for (int layerIndex = layer; layerIndex != -1; layerIndex--) { if (!windowStack[layerIndex]->visible()) continue; - if (windowStack[layerIndex]->window()->isMinimized()) + if (windowStack[layerIndex]->widget()->isMinimized()) continue; QRect windowRect = windowStack[layerIndex]->geometry(); QRect windowIntersect = rect.translated(-windowRect.left(), -windowRect.top()); - compositePainter->drawImage(rect, windowStack[layerIndex]->image(), +// qDebug() << " compositing" << layerIndex << windowStack[layerIndex]->surface->image().size(); + compositePainter->drawImage(rect, windowStack[layerIndex]->surface->image(), windowIntersect); if (firstLayer) { firstLayer = false; @@ -224,24 +227,29 @@ QRegion QGraphicsSystemFbScreen::doRedraw() touchedRegion += repaintRegion; repaintRegion = QRegion(); + + +// qDebug() << "QGraphicsSystemFbScreen::doRedraw" << windowStack.size() << mScreenImage->size() << touchedRegion; + + return touchedRegion; } -void QGraphicsSystemFbScreen::removeWindowSurface(QGraphicsSystemFbWindowSurface * surface) +void QGraphicsSystemFbScreen::removeWindow(QFbWindow * surface) { windowStack.removeOne(surface); invalidateRectCache(); setDirty(surface->geometry()); } -void QGraphicsSystemFbWindowSurface::raise() +void QFbWindow::raise() { mScreen->raise(this); } -void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) +void QGraphicsSystemFbScreen::raise(QPlatformWindow * surface) { - QGraphicsSystemFbWindowSurface *s = static_cast(surface); + QFbWindow *s = static_cast(surface); int index = windowStack.indexOf(s); if (index <= 0) return; @@ -250,14 +258,14 @@ void QGraphicsSystemFbScreen::raise(QWindowSurface * surface) setDirty(s->geometry()); } -void QGraphicsSystemFbWindowSurface::lower() +void QFbWindow::lower() { mScreen->lower(this); } -void QGraphicsSystemFbScreen::lower(QWindowSurface * surface) +void QGraphicsSystemFbScreen::lower(QPlatformWindow * surface) { - QGraphicsSystemFbWindowSurface *s = static_cast(surface); + QFbWindow *s = static_cast(surface); int index = windowStack.indexOf(s); if (index == -1 || index == (windowStack.size() - 1)) return; @@ -271,34 +279,61 @@ QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const for(int i = 0; i < windowStack.size(); i++) { if (windowStack[i]->geometry().contains(p, false) && windowStack[i]->visible() && - !windowStack[i]->window()->isMinimized()) { - return windowStack[i]->window(); + !windowStack[i]->widget()->isMinimized()) { + return windowStack[i]->widget(); } } return 0; } -QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window) - : QWindowSurface(window), + + +QFbWindow::QFbWindow(QGraphicsSystemFbScreen *screen, QWidget *window) + :QPlatformWindow(window), mScreen(screen), visibleFlag(false) { static QAtomicInt winIdGenerator(1); + windowId = winIdGenerator.fetchAndAddRelaxed(1); +} + + +QFbWindow::~QFbWindow() +{ + mScreen->removeWindow(this); +} + +QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen) +{ mImage = QImage(window->size(), mScreen->format()); - windowId = winIdGenerator.fetchAndAddRelaxed(1); + + platformWindow = static_cast(window->platformWindow()); + platformWindow->surface = this; } QGraphicsSystemFbWindowSurface::~QGraphicsSystemFbWindowSurface() { - mScreen->removeWindowSurface(this); } + void QGraphicsSystemFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(widget); Q_UNUSED(offset); + +// qDebug() << "QGraphicsSystemFbWindowSurface::flush" << region; + + + platformWindow->repaint(region); +} + + +void QFbWindow::repaint(const QRegion ®ion) +{ QRect currentGeometry = geometry(); // If this is a move, redraw the previous location if (oldGeometry != currentGeometry) { @@ -314,21 +349,30 @@ void QGraphicsSystemFbWindowSurface::flush(QWidget *widget, const QRegion ®io mScreen->setDirty(dirtyRegion); } -void QGraphicsSystemFbWindowSurface::setGeometry(const QRect &rect) +void QGraphicsSystemFbWindowSurface::resize(const QSize &size) { - // store previous geometry for screen update + // change the widget's QImage if this is a resize + if (mImage.size() != size) + mImage = QImage(size, mScreen->format()); + QWindowSurface::resize(size); +} + +void QFbWindow::setGeometry(const QRect &rect) +{ +// store previous geometry for screen update oldGeometry = geometry(); - // change the widget's QImage if this is a resize - if (mImage.size() != rect.size()) - mImage = QImage(rect.size(), mScreen->format()); mScreen->invalidateRectCache(); - QWindowSystemInterface::handleGeometryChange(window(), rect); +//### QWindowSystemInterface::handleGeometryChange(window(), rect); - QWindowSurface::setGeometry(rect); + QPlatformWindow::setGeometry(rect); } + + + + bool QGraphicsSystemFbWindowSurface::scroll(const QRegion &area, int dx, int dy) { return QWindowSurface::scroll(area, dx, dy); @@ -344,21 +388,21 @@ void QGraphicsSystemFbWindowSurface::endPaint(const QRegion ®ion) Q_UNUSED(region); } -void QGraphicsSystemFbWindowSurface::setVisible(bool visible) +void QFbWindow::setVisible(bool visible) { visibleFlag = visible; mScreen->invalidateRectCache(); mScreen->setDirty(geometry()); } -Qt::WindowFlags QGraphicsSystemFbWindowSurface::setWindowFlags(Qt::WindowFlags type) +Qt::WindowFlags QFbWindow::setWindowFlags(Qt::WindowFlags type) { flags = type; mScreen->invalidateRectCache(); return flags; } -Qt::WindowFlags QGraphicsSystemFbWindowSurface::windowFlags() const +Qt::WindowFlags QFbWindow::windowFlags() const { return flags; } diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 7f9b005..8df6b8e 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -1,12 +1,14 @@ #ifndef QLIGHTHOUSEGRAPHICSSCREEN_H #define QLIGHTHOUSEGRAPHICSSCREEN_H -#include +//#include #include #include #include #include #include +#include +#include class QMouseEvent; class QSize; @@ -17,7 +19,7 @@ class QGraphicsSystemFbScreen; class QGraphicsSystemSoftwareCursor : public QGraphicsSystemCursor { public: - QGraphicsSystemSoftwareCursor(QGraphicsSystemScreen * scr); + QGraphicsSystemSoftwareCursor(QPlatformScreen * scr); // output methods QRect dirtyRect(); @@ -39,6 +41,9 @@ private: QRect getCurrentRect(); }; + +class QFbWindow; + class QGraphicsSystemFbWindowSurface : public QWindowSurface { public: @@ -51,30 +56,58 @@ public: virtual void beginPaint(const QRegion ®ion); virtual void endPaint(const QRegion ®ion); - virtual void setVisible(bool visible); - virtual bool visible() { return visibleFlag; } + const QImage image() { return mImage; } - void setGeometry(const QRect &rect); + void resize(const QSize &size); + +protected: + friend class QFbWindow; + QFbWindow *platformWindow; + + QGraphicsSystemFbScreen *mScreen; + QImage mImage; +}; + + +class QFbWindow : public QPlatformWindow +{ +public: + + QFbWindow(QGraphicsSystemFbScreen *screen, QWidget *window); + ~QFbWindow(); + + + virtual void setVisible(bool visible); + virtual bool visible() { return visibleFlag; } virtual void raise(); virtual void lower(); + void setGeometry(const QRect &rect); + virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); virtual Qt::WindowFlags windowFlags() const; WId winId() const { return windowId; } + + virtual void repaint(const QRegion&); + protected: + friend class QGraphicsSystemFbWindowSurface; + friend class QGraphicsSystemFbScreen; + QGraphicsSystemFbWindowSurface *surface; QGraphicsSystemFbScreen *mScreen; QRect oldGeometry; - QImage mImage; bool visibleFlag; Qt::WindowFlags flags; + WId windowId; }; -class QGraphicsSystemFbScreen : public QGraphicsSystemScreen + +class QGraphicsSystemFbScreen : public QPlatformScreen { Q_OBJECT public: @@ -93,18 +126,18 @@ public: virtual void setDirty(const QRect &rect); - virtual void removeWindowSurface(QGraphicsSystemFbWindowSurface * surface); - virtual void addWindowSurface(QGraphicsSystemFbWindowSurface * surface) { + virtual void removeWindow(QFbWindow * surface); + virtual void addWindow(QFbWindow * surface) { windowStack.prepend(surface); invalidateRectCache(); } - virtual void raise(QWindowSurface * surface); - virtual void lower(QWindowSurface * surface); + virtual void raise(QPlatformWindow * surface); + virtual void lower(QPlatformWindow * surface); virtual QWidget * topLevelAt(const QPoint & p) const; QImage * image() const { return mScreenImage; } QPaintDevice * paintDevice() const { return mScreenImage; } protected: - QList windowStack; + QList windowStack; QRegion repaintRegion; QGraphicsSystemSoftwareCursor * cursor; QTimer redrawTimer; @@ -126,6 +159,7 @@ private: void invalidateRectCache() { isUpToDate = false; } friend class QGraphicsSystemFbWindowSurface; + friend class QFbWindow; bool isUpToDate; }; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index db3904f..0b215e3 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -622,6 +622,7 @@ void QTestLiteWindow::setGeometry(const QRect &rect) //if unchanged ### XMoveResizeWindow(xd->display, x_window, rect.x(), rect.y(), rect.width(), rect.height()); + QPlatformWindow::setGeometry(rect); } diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp index f10748a..9de33eb 100644 --- a/src/plugins/platforms/vnc/main.cpp +++ b/src/plugins/platforms/vnc/main.cpp @@ -39,17 +39,17 @@ ** ****************************************************************************/ -#include #include "qgraphicssystem_vnc.h" #include +#include QT_BEGIN_NAMESPACE -class QVNCGraphicsSystemPlugin : public QGraphicsSystemPlugin +class QVNCGraphicsSystemPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QGraphicsSystem *create(const QString&); + QPlatformIntegration *create(const QString&); }; QStringList QVNCGraphicsSystemPlugin::keys() const @@ -59,7 +59,7 @@ QStringList QVNCGraphicsSystemPlugin::keys() const return list; } -QGraphicsSystem* QVNCGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration* QVNCGraphicsSystemPlugin::create(const QString& system) { if (system.toLower() == "vnc") return new QVNCGraphicsSystem; diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp index 7815f24..ef50230 100644 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp @@ -104,12 +104,30 @@ QPixmapData *QVNCGraphicsSystem::createPixmapData(QPixmapData::PixelType type) c return new QRasterPixmapData(type); } -QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const +// QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const +// { +// if (widget->windowType() == Qt::Desktop) +// return 0; // Don't create an explicit window surface for the destkop. +// QGraphicsSystemFbWindowSurface * surface; +// surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); +// mPrimaryScreen->addWindowSurface(surface); +// return surface; +// } + +QWindowSurface *QVNCGraphicsSystem::createWindowSurfaceForWindow(QWidget *widget, WId) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. QGraphicsSystemFbWindowSurface * surface; surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); - mPrimaryScreen->addWindowSurface(surface); return surface; } + + +QPlatformWindow *QVNCGraphicsSystem::createPlatformWindow(QWidget *widget, WId /*winId*/) const +{ + QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); + mPrimaryScreen->addWindow(w); + return w; +} + diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h index b3349b7..3205872 100644 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h @@ -42,9 +42,9 @@ #ifndef QGRAPHICSSYSTEM_VNC_H #define QGRAPHICSSYSTEM_VNC_H -#include #include "qvnccursor.h" #include "../fb_base/fb_base.h" +#include QT_BEGIN_NAMESPACE @@ -73,20 +73,21 @@ private: class QVNCGraphicsSystemPrivate; -class QVNCGraphicsSystem : public QGraphicsSystem +class QVNCGraphicsSystem : public QPlatformIntegration { public: QVNCGraphicsSystem(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; - QList screens() const { return mScreens; } + QList screens() const { return mScreens; } private: QVNCGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; + QList mScreens; }; diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index 0b73b5b..b1da572 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -1,7 +1,7 @@ TARGET = qvncgraphicssystem include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp qgraphicssystem_vnc.cpp HEADERS = qgraphicssystem_vnc.h @@ -14,6 +14,6 @@ SOURCES += qvnccursor.cpp include(../fb_base/fb_base.pri) -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target -- cgit v0.12 From a87d8966946c47e234b8d5268c287ac96f1ea4c4 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 12 Apr 2010 15:44:57 +0200 Subject: Make hide() work. --- src/plugins/platforms/fb_base/fb_base.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index 422222c..25426eb 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -142,6 +142,9 @@ void QGraphicsSystemFbScreen::generateRects() for (int i = 0; i < windowStack.length(); i++) { if (remainingScreen.isEmpty()) break; + if (!windowStack[i]->visible()) + continue; + if (!windowStack[i]->widget()->testAttribute(Qt::WA_TranslucentBackground)) { remainingScreen -= windowStack[i]->geometry(); QRegion windowRegion(windowStack[i]->geometry()); -- cgit v0.12 From 3a8b3299d7c956e3a9f4733bc7d459757081bdc2 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 12 Apr 2010 16:55:56 +0200 Subject: Make LinuxFb work --- src/gui/kernel/qapplication_lite.cpp | 11 +++++++++++ src/plugins/platforms/linuxfb/linuxfb.pro | 4 ++-- src/plugins/platforms/linuxfb/main.cpp | 8 ++++---- .../platforms/linuxfb/qgraphicssystem_linuxfb.cpp | 16 ++++++++++++++-- src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h | 11 ++++++----- 5 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 87fa933..867c2dc 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -422,6 +422,15 @@ static void init_platform(const QString &name) } + +static void cleanup_platform() +{ + delete QApplicationPrivate::platform_integration; + QApplicationPrivate::platform_integration = 0; + delete QApplicationPrivate::graphics_system; + QApplicationPrivate::graphics_system = 0; +} + static void init_plugins(const QList pluginList) { for (int i = 0; i < pluginList.count(); ++i) { @@ -520,6 +529,8 @@ void qt_init(QApplicationPrivate *priv, int type) void qt_cleanup() { + cleanup_platform(); + QPixmapCache::clear(); #ifndef QT_NO_CURSOR QCursorData::cleanup(); diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index 031b843..2633a10 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -1,12 +1,12 @@ TARGET = qlinuxfbgraphicssystem include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp qgraphicssystem_linuxfb.cpp HEADERS = qgraphicssystem_linuxfb.h include(../fb_base/fb_base.pri) -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp index 4d03fe5..15305ed 100644 --- a/src/plugins/platforms/linuxfb/main.cpp +++ b/src/plugins/platforms/linuxfb/main.cpp @@ -39,16 +39,16 @@ ** ****************************************************************************/ -#include +#include #include "qgraphicssystem_linuxfb.h" QT_BEGIN_NAMESPACE -class QLinuxFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +class QLinuxFbGraphicsSystemPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QGraphicsSystem *create(const QString&); + QPlatformIntegration *create(const QString&); }; QStringList QLinuxFbGraphicsSystemPlugin::keys() const @@ -58,7 +58,7 @@ QStringList QLinuxFbGraphicsSystemPlugin::keys() const return list; } -QGraphicsSystem* QLinuxFbGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration* QLinuxFbGraphicsSystemPlugin::create(const QString& system) { if (system.toLower() == "linuxfb") return new QLinuxFbGraphicsSystem; diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp index 44960bb..cca567c 100644 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp @@ -786,16 +786,28 @@ QPixmapData *QLinuxFbGraphicsSystem::createPixmapData(QPixmapData::PixelType typ return new QRasterPixmapData(type); } -QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurface(QWidget *widget) const +QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurfaceForWindow(QWidget *widget, WId) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. QGraphicsSystemFbWindowSurface * surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); - mPrimaryScreen->addWindowSurface(surface); return surface; } + + +QPlatformWindow *QLinuxFbGraphicsSystem::createPlatformWindow(QWidget *widget, WId /*winId*/) const +{ + QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); + mPrimaryScreen->addWindow(w); + return w; +} + + + + + QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat) : compositePainter(0) { diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h index cc8ce7e..873b463 100644 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h @@ -42,7 +42,7 @@ #ifndef QGRAPHICSSYSTEM_LINUXFB_H #define QGRAPHICSSYSTEM_LINUXFB_H -#include +#include #include "../fb_base/fb_base.h" QT_BEGIN_NAMESPACE @@ -70,20 +70,21 @@ struct fb_cmap; struct fb_var_screeninfo; struct fb_fix_screeninfo; -class QLinuxFbGraphicsSystem : public QGraphicsSystem +class QLinuxFbGraphicsSystem : public QPlatformIntegration { public: QLinuxFbGraphicsSystem(); ~QLinuxFbGraphicsSystem(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId WinId) const; + QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId WinId) const; - QList screens() const { return mScreens; } + QList screens() const { return mScreens; } private: QLinuxFbGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; + QList mScreens; QLinuxFbGraphicsSystemPrivate *d_ptr; enum PixelType { NormalPixel, BGRPixel }; -- cgit v0.12 From c8f86b525a6eabb91ad4da2dfdd423a32263359a Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 13 Apr 2010 10:57:50 +0200 Subject: Rename classes to get rid of "GraphicsSystem" --- src/plugins/platforms/fb_base/fb_base.cpp | 48 ++++++++-------- src/plugins/platforms/fb_base/fb_base.h | 28 +++++----- src/plugins/platforms/linuxfb/main.cpp | 10 ++-- .../platforms/linuxfb/qgraphicssystem_linuxfb.cpp | 64 +++++++++++----------- .../platforms/linuxfb/qgraphicssystem_linuxfb.h | 16 +++--- src/plugins/platforms/vnc/main.cpp | 10 ++-- src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp | 32 +++++------ src/plugins/platforms/vnc/qgraphicssystem_vnc.h | 16 +++--- src/plugins/platforms/vnc/qvnccursor.cpp | 2 +- src/plugins/platforms/vnc/qvnccursor.h | 4 +- src/plugins/platforms/vnc/qvncserver.cpp | 16 +++--- src/plugins/platforms/vnc/qvncserver.h | 26 ++++----- 12 files changed, 136 insertions(+), 136 deletions(-) diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index 25426eb..1a6d04e 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -81,7 +81,7 @@ void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget screen->setDirty(currentRect); } -QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) +QFbScreen::QFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) { mScreenImage = new QImage(mGeometry.size(), mFormat); redrawTimer.setSingleShot(true); @@ -89,7 +89,7 @@ QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() : cursor(0), mGeometry(), mDe QObject::connect(&redrawTimer, SIGNAL(timeout()), this, SLOT(doRedraw())); } -void QGraphicsSystemFbScreen::setGeometry(QRect rect) +void QFbScreen::setGeometry(QRect rect) { delete mScreenImage; mGeometry = rect; @@ -99,17 +99,17 @@ void QGraphicsSystemFbScreen::setGeometry(QRect rect) invalidateRectCache(); } -void QGraphicsSystemFbScreen::setDepth(int depth) +void QFbScreen::setDepth(int depth) { mDepth = depth; } -void QGraphicsSystemFbScreen::setPhysicalSize(QSize size) +void QFbScreen::setPhysicalSize(QSize size) { mPhysicalSize = size; } -void QGraphicsSystemFbScreen::setFormat(QImage::Format format) +void QFbScreen::setFormat(QImage::Format format) { mFormat = format; delete mScreenImage; @@ -118,23 +118,23 @@ void QGraphicsSystemFbScreen::setFormat(QImage::Format format) compositePainter = 0; } -QGraphicsSystemFbScreen::~QGraphicsSystemFbScreen() +QFbScreen::~QFbScreen() { delete compositePainter; delete mScreenImage; } -void QGraphicsSystemFbScreen::setDirty(const QRect &rect) +void QFbScreen::setDirty(const QRect &rect) { -// qDebug() << "QGraphicsSystemFbScreen::setDirty" << rect; +// qDebug() << "QFbScreen::setDirty" << rect; repaintRegion += rect; if (!redrawTimer.isActive()) { redrawTimer.start(); } } -void QGraphicsSystemFbScreen::generateRects() +void QFbScreen::generateRects() { cachedRects.clear(); QRegion remainingScreen(mGeometry); @@ -162,7 +162,7 @@ void QGraphicsSystemFbScreen::generateRects() -QRegion QGraphicsSystemFbScreen::doRedraw() +QRegion QFbScreen::doRedraw() { QRegion touchedRegion; if (cursor) @@ -232,13 +232,13 @@ QRegion QGraphicsSystemFbScreen::doRedraw() -// qDebug() << "QGraphicsSystemFbScreen::doRedraw" << windowStack.size() << mScreenImage->size() << touchedRegion; +// qDebug() << "QFbScreen::doRedraw" << windowStack.size() << mScreenImage->size() << touchedRegion; return touchedRegion; } -void QGraphicsSystemFbScreen::removeWindow(QFbWindow * surface) +void QFbScreen::removeWindow(QFbWindow * surface) { windowStack.removeOne(surface); invalidateRectCache(); @@ -250,7 +250,7 @@ void QFbWindow::raise() mScreen->raise(this); } -void QGraphicsSystemFbScreen::raise(QPlatformWindow * surface) +void QFbScreen::raise(QPlatformWindow * surface) { QFbWindow *s = static_cast(surface); int index = windowStack.indexOf(s); @@ -266,7 +266,7 @@ void QFbWindow::lower() mScreen->lower(this); } -void QGraphicsSystemFbScreen::lower(QPlatformWindow * surface) +void QFbScreen::lower(QPlatformWindow * surface) { QFbWindow *s = static_cast(surface); int index = windowStack.indexOf(s); @@ -277,7 +277,7 @@ void QGraphicsSystemFbScreen::lower(QPlatformWindow * surface) setDirty(s->geometry()); } -QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const +QWidget * QFbScreen::topLevelAt(const QPoint & p) const { for(int i = 0; i < windowStack.size(); i++) { if (windowStack[i]->geometry().contains(p, false) && @@ -291,7 +291,7 @@ QWidget * QGraphicsSystemFbScreen::topLevelAt(const QPoint & p) const -QFbWindow::QFbWindow(QGraphicsSystemFbScreen *screen, QWidget *window) +QFbWindow::QFbWindow(QFbScreen *screen, QWidget *window) :QPlatformWindow(window), mScreen(screen), visibleFlag(false) @@ -307,7 +307,7 @@ QFbWindow::~QFbWindow() } -QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window) +QFbWindowSurface::QFbWindowSurface(QFbScreen *screen, QWidget *window) : QWindowSurface(window), mScreen(screen) { @@ -317,18 +317,18 @@ QGraphicsSystemFbWindowSurface::QGraphicsSystemFbWindowSurface(QGraphicsSystemFb platformWindow->surface = this; } -QGraphicsSystemFbWindowSurface::~QGraphicsSystemFbWindowSurface() +QFbWindowSurface::~QFbWindowSurface() { } -void QGraphicsSystemFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +void QFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { Q_UNUSED(widget); Q_UNUSED(offset); -// qDebug() << "QGraphicsSystemFbWindowSurface::flush" << region; +// qDebug() << "QFbWindowSurface::flush" << region; platformWindow->repaint(region); @@ -352,7 +352,7 @@ void QFbWindow::repaint(const QRegion ®ion) mScreen->setDirty(dirtyRegion); } -void QGraphicsSystemFbWindowSurface::resize(const QSize &size) +void QFbWindowSurface::resize(const QSize &size) { // change the widget's QImage if this is a resize if (mImage.size() != size) @@ -376,17 +376,17 @@ void QFbWindow::setGeometry(const QRect &rect) -bool QGraphicsSystemFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +bool QFbWindowSurface::scroll(const QRegion &area, int dx, int dy) { return QWindowSurface::scroll(area, dx, dy); } -void QGraphicsSystemFbWindowSurface::beginPaint(const QRegion ®ion) +void QFbWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); } -void QGraphicsSystemFbWindowSurface::endPaint(const QRegion ®ion) +void QFbWindowSurface::endPaint(const QRegion ®ion) { Q_UNUSED(region); } diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 8df6b8e..2738768 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -14,7 +14,7 @@ class QMouseEvent; class QSize; class QPainter; -class QGraphicsSystemFbScreen; +class QFbScreen; class QGraphicsSystemSoftwareCursor : public QGraphicsSystemCursor { @@ -44,11 +44,11 @@ private: class QFbWindow; -class QGraphicsSystemFbWindowSurface : public QWindowSurface +class QFbWindowSurface : public QWindowSurface { public: - QGraphicsSystemFbWindowSurface(QGraphicsSystemFbScreen *screen, QWidget *window); - ~QGraphicsSystemFbWindowSurface(); + QFbWindowSurface(QFbScreen *screen, QWidget *window); + ~QFbWindowSurface(); virtual QPaintDevice *paintDevice() { return &mImage; } virtual void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); @@ -65,7 +65,7 @@ protected: friend class QFbWindow; QFbWindow *platformWindow; - QGraphicsSystemFbScreen *mScreen; + QFbScreen *mScreen; QImage mImage; }; @@ -74,7 +74,7 @@ class QFbWindow : public QPlatformWindow { public: - QFbWindow(QGraphicsSystemFbScreen *screen, QWidget *window); + QFbWindow(QFbScreen *screen, QWidget *window); ~QFbWindow(); @@ -94,10 +94,10 @@ public: virtual void repaint(const QRegion&); protected: - friend class QGraphicsSystemFbWindowSurface; - friend class QGraphicsSystemFbScreen; - QGraphicsSystemFbWindowSurface *surface; - QGraphicsSystemFbScreen *mScreen; + friend class QFbWindowSurface; + friend class QFbScreen; + QFbWindowSurface *surface; + QFbScreen *mScreen; QRect oldGeometry; bool visibleFlag; Qt::WindowFlags flags; @@ -107,12 +107,12 @@ protected: }; -class QGraphicsSystemFbScreen : public QPlatformScreen +class QFbScreen : public QPlatformScreen { Q_OBJECT public: - QGraphicsSystemFbScreen(); - ~QGraphicsSystemFbScreen(); + QFbScreen(); + ~QFbScreen(); virtual QRect geometry() const { return mGeometry; } virtual int depth() const { return mDepth; } @@ -158,7 +158,7 @@ private: QList > cachedRects; void invalidateRectCache() { isUpToDate = false; } - friend class QGraphicsSystemFbWindowSurface; + friend class QFbWindowSurface; friend class QFbWindow; bool isUpToDate; }; diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp index 15305ed..1ee24b6 100644 --- a/src/plugins/platforms/linuxfb/main.cpp +++ b/src/plugins/platforms/linuxfb/main.cpp @@ -44,28 +44,28 @@ QT_BEGIN_NAMESPACE -class QLinuxFbGraphicsSystemPlugin : public QPlatformIntegrationPlugin +class QLinuxFbIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; QPlatformIntegration *create(const QString&); }; -QStringList QLinuxFbGraphicsSystemPlugin::keys() const +QStringList QLinuxFbIntegrationPlugin::keys() const { QStringList list; list << "LinuxFb"; return list; } -QPlatformIntegration* QLinuxFbGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration* QLinuxFbIntegrationPlugin::create(const QString& system) { if (system.toLower() == "linuxfb") - return new QLinuxFbGraphicsSystem; + return new QLinuxFbIntegration; return 0; } -Q_EXPORT_PLUGIN2(linuxfb, QLinuxFbGraphicsSystemPlugin) +Q_EXPORT_PLUGIN2(linuxfb, QLinuxFbIntegrationPlugin) QT_END_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp index cca567c..25cdc7b 100644 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp @@ -69,11 +69,11 @@ QT_BEGIN_NAMESPACE -class QLinuxFbGraphicsSystemPrivate +class QLinuxFbIntegrationPrivate { public: - QLinuxFbGraphicsSystemPrivate(); - ~QLinuxFbGraphicsSystemPrivate(); + QLinuxFbIntegrationPrivate(); + ~QLinuxFbIntegrationPrivate(); void openTty(); void closeTty(); @@ -94,7 +94,7 @@ public: QString displaySpec; }; -QLinuxFbGraphicsSystemPrivate::QLinuxFbGraphicsSystemPrivate() +QLinuxFbIntegrationPrivate::QLinuxFbIntegrationPrivate() : fd(-1), blank(true), doGraphicsMode(true), #ifdef QT_QWS_DEPTH_GENERIC doGenericColors(false), @@ -103,12 +103,12 @@ QLinuxFbGraphicsSystemPrivate::QLinuxFbGraphicsSystemPrivate() { } -QLinuxFbGraphicsSystemPrivate::~QLinuxFbGraphicsSystemPrivate() +QLinuxFbIntegrationPrivate::~QLinuxFbIntegrationPrivate() { closeTty(); } -void QLinuxFbGraphicsSystemPrivate::openTty() +void QLinuxFbIntegrationPrivate::openTty() { const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0}; @@ -139,7 +139,7 @@ void QLinuxFbGraphicsSystemPrivate::openTty() QT_WRITE(ttyfd, termctl, sizeof(termctl)); } -void QLinuxFbGraphicsSystemPrivate::closeTty() +void QLinuxFbIntegrationPrivate::closeTty() { if (ttyfd == -1) return; @@ -155,33 +155,33 @@ void QLinuxFbGraphicsSystemPrivate::closeTty() ttyfd = -1; } -QLinuxFbGraphicsSystem::QLinuxFbGraphicsSystem() +QLinuxFbIntegration::QLinuxFbIntegration() { - d_ptr = new QLinuxFbGraphicsSystemPrivate(); + d_ptr = new QLinuxFbIntegrationPrivate(); // XXX QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); if (!connect(displaySpec)) - qFatal("QLinuxFbGraphicsSystem: could not initialize screen"); + qFatal("QLinuxFbIntegration: could not initialize screen"); initDevice(); // Create a QImage directly on the screen's framebuffer. // This is the blit target for copying windows to the screen. - mPrimaryScreen = new QLinuxFbGraphicsSystemScreen(data, w, h, lstep, + mPrimaryScreen = new QLinuxFbScreen(data, w, h, lstep, screenFormat); mPrimaryScreen->setPhysicalSize(QSize(physWidth, physHeight)); mScreens.append(mPrimaryScreen); } -QLinuxFbGraphicsSystem::~QLinuxFbGraphicsSystem() +QLinuxFbIntegration::~QLinuxFbIntegration() { delete mPrimaryScreen; delete d_ptr; } -bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) +bool QLinuxFbIntegration::connect(const QString &displaySpec) { const QStringList args = displaySpec.split(QLatin1Char(':')); @@ -237,7 +237,7 @@ bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) /* Get fixed screen information */ if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { - perror("QLinuxFbGraphicsSystem::connect"); + perror("QLinuxFbIntegration::connect"); qWarning("Error reading fixed information"); return false; } @@ -249,7 +249,7 @@ bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) /* Get variable screen information */ if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { - perror("QLinuxFbGraphicsSystem::connect"); + perror("QLinuxFbIntegration::connect"); qWarning("Error reading variable information"); return false; } @@ -295,7 +295,7 @@ bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) } if (w == 0 || h == 0) { - qWarning("QLinuxFbGraphicsSystem::connect(): Unable to find screen geometry, " + qWarning("QLinuxFbIntegration::connect(): Unable to find screen geometry, " "will use 320x240."); dw = w = 320; dh = h = 240; @@ -347,7 +347,7 @@ bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) MAP_SHARED, d_ptr->fd, 0); if ((long)data == -1) { - perror("QLinuxFbGraphicsSystem::connect"); + perror("QLinuxFbIntegration::connect"); qWarning("Error: failed to map framebuffer device to memory."); return false; } else { @@ -377,7 +377,7 @@ bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) startcmap.transp=(unsigned short int *) malloc(sizeof(unsigned short int)*screencols); if (d_ptr->fd == -1 || ioctl(d_ptr->fd, FBIOGETCMAP, &startcmap)) { - perror("QLinuxFbGraphicsSystem::connect"); + perror("QLinuxFbIntegration::connect"); qWarning("Error reading palette from framebuffer, using default palette"); createPalette(startcmap, vinfo, finfo); } @@ -411,7 +411,7 @@ bool QLinuxFbGraphicsSystem::connect(const QString &displaySpec) return true; } -bool QLinuxFbGraphicsSystem::initDevice() +bool QLinuxFbIntegration::initDevice() { d_ptr->openTty(); @@ -538,7 +538,7 @@ bool QLinuxFbGraphicsSystem::initDevice() return true; } -void QLinuxFbGraphicsSystem::setPixelFormat(struct fb_var_screeninfo info) +void QLinuxFbIntegration::setPixelFormat(struct fb_var_screeninfo info) { const fb_bitfield rgba[4] = { info.red, info.green, info.blue, info.transp }; @@ -626,7 +626,7 @@ void QLinuxFbGraphicsSystem::setPixelFormat(struct fb_var_screeninfo info) screenFormat = format; } -void QLinuxFbGraphicsSystem::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) +void QLinuxFbIntegration::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) { if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; @@ -756,7 +756,7 @@ void QLinuxFbGraphicsSystem::createPalette(fb_cmap &cmap, fb_var_screeninfo &vin } } -void QLinuxFbGraphicsSystem::blank(bool on) +void QLinuxFbIntegration::blank(bool on) { if (d_ptr->blank == on) return; @@ -781,23 +781,23 @@ void QLinuxFbGraphicsSystem::blank(bool on) d_ptr->blank = on; } -QPixmapData *QLinuxFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +QPixmapData *QLinuxFbIntegration::createPixmapData(QPixmapData::PixelType type) const { return new QRasterPixmapData(type); } -QWindowSurface *QLinuxFbGraphicsSystem::createWindowSurfaceForWindow(QWidget *widget, WId) const +QWindowSurface *QLinuxFbIntegration::createWindowSurfaceForWindow(QWidget *widget, WId) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. - QGraphicsSystemFbWindowSurface * surface = - new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); + QFbWindowSurface * surface = + new QFbWindowSurface(mPrimaryScreen, widget); return surface; } -QPlatformWindow *QLinuxFbGraphicsSystem::createPlatformWindow(QWidget *widget, WId /*winId*/) const +QPlatformWindow *QLinuxFbIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const { QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); mPrimaryScreen->addWindow(w); @@ -808,7 +808,7 @@ QPlatformWindow *QLinuxFbGraphicsSystem::createPlatformWindow(QWidget *widget, W -QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, +QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat) : compositePainter(0) { data = d; @@ -823,7 +823,7 @@ QLinuxFbGraphicsSystemScreen::QLinuxFbGraphicsSystemScreen(uchar * d, int w, cursor = new QGraphicsSystemSoftwareCursor(this); } -void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) +void QLinuxFbScreen::setGeometry(QRect rect) { mGeometry = rect; delete mFbScreenImage; @@ -837,7 +837,7 @@ void QLinuxFbGraphicsSystemScreen::setGeometry(QRect rect) mFormat); } -void QLinuxFbGraphicsSystemScreen::setFormat(QImage::Format format) +void QLinuxFbScreen::setFormat(QImage::Format format) { mFormat = format; delete mFbScreenImage; @@ -851,10 +851,10 @@ void QLinuxFbGraphicsSystemScreen::setFormat(QImage::Format format) mFormat); } -QRegion QLinuxFbGraphicsSystemScreen::doRedraw() +QRegion QLinuxFbScreen::doRedraw() { QRegion touched; - touched = QGraphicsSystemFbScreen::doRedraw(); + touched = QFbScreen::doRedraw(); if (!compositePainter) { compositePainter = new QPainter(mFbScreenImage); diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h index 873b463..7d4c031 100644 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h @@ -47,10 +47,10 @@ QT_BEGIN_NAMESPACE -class QLinuxFbGraphicsSystemScreen : public QGraphicsSystemFbScreen +class QLinuxFbScreen : public QFbScreen { public: - QLinuxFbGraphicsSystemScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); + QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); void setGeometry(QRect rect); void setFormat(QImage::Format format); @@ -65,16 +65,16 @@ private: QPainter *compositePainter; }; -class QLinuxFbGraphicsSystemPrivate; +class QLinuxFbIntegrationPrivate; struct fb_cmap; struct fb_var_screeninfo; struct fb_fix_screeninfo; -class QLinuxFbGraphicsSystem : public QPlatformIntegration +class QLinuxFbIntegration : public QPlatformIntegration { public: - QLinuxFbGraphicsSystem(); - ~QLinuxFbGraphicsSystem(); + QLinuxFbIntegration(); + ~QLinuxFbIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId WinId) const; @@ -83,9 +83,9 @@ public: QList screens() const { return mScreens; } private: - QLinuxFbGraphicsSystemScreen *mPrimaryScreen; + QLinuxFbScreen *mPrimaryScreen; QList mScreens; - QLinuxFbGraphicsSystemPrivate *d_ptr; + QLinuxFbIntegrationPrivate *d_ptr; enum PixelType { NormalPixel, BGRPixel }; diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp index 9de33eb..23d78c1 100644 --- a/src/plugins/platforms/vnc/main.cpp +++ b/src/plugins/platforms/vnc/main.cpp @@ -45,28 +45,28 @@ QT_BEGIN_NAMESPACE -class QVNCGraphicsSystemPlugin : public QPlatformIntegrationPlugin +class QVNCIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; QPlatformIntegration *create(const QString&); }; -QStringList QVNCGraphicsSystemPlugin::keys() const +QStringList QVNCIntegrationPlugin::keys() const { QStringList list; list << "VNC"; return list; } -QPlatformIntegration* QVNCGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration* QVNCIntegrationPlugin::create(const QString& system) { if (system.toLower() == "vnc") - return new QVNCGraphicsSystem; + return new QVNCIntegration; return 0; } -Q_EXPORT_PLUGIN2(vnc, QVNCGraphicsSystemPlugin) +Q_EXPORT_PLUGIN2(vnc, QVNCIntegrationPlugin) QT_END_NAMESPACE diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp index ef50230..cbc8bbd 100644 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp @@ -51,8 +51,8 @@ #include -QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() - : QGraphicsSystemFbScreen::QGraphicsSystemFbScreen() +QVNCScreen::QVNCScreen() + : QFbScreen::QFbScreen() { int w = 800; int h = 600; @@ -69,21 +69,21 @@ QVNCGraphicsSystemScreen::QVNCGraphicsSystemScreen() setPhysicalSize((geometry().size()*254)/720); - d_ptr = new QVNCGraphicsSystemScreenPrivate(this); + d_ptr = new QVNCScreenPrivate(this); cursor = new QVNCCursor(d_ptr->vncServer, this); d_ptr->vncServer->setCursor(static_cast(cursor)); } -QVNCDirtyMap *QVNCGraphicsSystemScreen::dirtyMap() +QVNCDirtyMap *QVNCScreen::dirtyMap() { return d_ptr->dirty; } -QRegion QVNCGraphicsSystemScreen::doRedraw() +QRegion QVNCScreen::doRedraw() { QRegion touched; - touched = QGraphicsSystemFbScreen::doRedraw(); + touched = QFbScreen::doRedraw(); QVector rects = touched.rects(); for (int i = 0; i < rects.size(); i++) @@ -92,39 +92,39 @@ QRegion QVNCGraphicsSystemScreen::doRedraw() } -QVNCGraphicsSystem::QVNCGraphicsSystem() +QVNCIntegration::QVNCIntegration() { - mPrimaryScreen = new QVNCGraphicsSystemScreen(); + mPrimaryScreen = new QVNCScreen(); mScreens.append(mPrimaryScreen); } -QPixmapData *QVNCGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const +QPixmapData *QVNCIntegration::createPixmapData(QPixmapData::PixelType type) const { return new QRasterPixmapData(type); } -// QWindowSurface *QVNCGraphicsSystem::createWindowSurface(QWidget *widget) const +// QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget) const // { // if (widget->windowType() == Qt::Desktop) // return 0; // Don't create an explicit window surface for the destkop. -// QGraphicsSystemFbWindowSurface * surface; -// surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); +// QFbWindowSurface * surface; +// surface = new QFbWindowSurface(mPrimaryScreen, widget); // mPrimaryScreen->addWindowSurface(surface); // return surface; // } -QWindowSurface *QVNCGraphicsSystem::createWindowSurfaceForWindow(QWidget *widget, WId) const +QWindowSurface *QVNCIntegration::createWindowSurfaceForWindow(QWidget *widget, WId) const { if (widget->windowType() == Qt::Desktop) return 0; // Don't create an explicit window surface for the destkop. - QGraphicsSystemFbWindowSurface * surface; - surface = new QGraphicsSystemFbWindowSurface(mPrimaryScreen, widget); + QFbWindowSurface * surface; + surface = new QFbWindowSurface(mPrimaryScreen, widget); return surface; } -QPlatformWindow *QVNCGraphicsSystem::createPlatformWindow(QWidget *widget, WId /*winId*/) const +QPlatformWindow *QVNCIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const { QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); mPrimaryScreen->addWindow(w); diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h index 3205872..887ccc3 100644 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h @@ -51,32 +51,32 @@ QT_BEGIN_NAMESPACE class QVNCServer; class QVNCDirtyMap; -class QVNCGraphicsSystemScreenPrivate; +class QVNCScreenPrivate; -class QVNCGraphicsSystemScreen : public QGraphicsSystemFbScreen +class QVNCScreen : public QFbScreen { public: - QVNCGraphicsSystemScreen(); + QVNCScreen(); int linestep() const { return image() ? image()->bytesPerLine() : 0; } uchar *base() const { return image() ? image()->bits() : 0; } QVNCDirtyMap *dirtyMap(); public: - QVNCGraphicsSystemScreenPrivate *d_ptr; + QVNCScreenPrivate *d_ptr; private: QVNCServer *server; QRegion doRedraw(); }; -class QVNCGraphicsSystemPrivate; +class QVNCIntegrationPrivate; -class QVNCGraphicsSystem : public QPlatformIntegration +class QVNCIntegration : public QPlatformIntegration { public: - QVNCGraphicsSystem(); + QVNCIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; @@ -86,7 +86,7 @@ public: private: - QVNCGraphicsSystemScreen *mPrimaryScreen; + QVNCScreen *mPrimaryScreen; QList mScreens; }; diff --git a/src/plugins/platforms/vnc/qvnccursor.cpp b/src/plugins/platforms/vnc/qvnccursor.cpp index fb214d8..78da53b 100644 --- a/src/plugins/platforms/vnc/qvnccursor.cpp +++ b/src/plugins/platforms/vnc/qvnccursor.cpp @@ -53,7 +53,7 @@ QT_BEGIN_NAMESPACE -QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCGraphicsSystemScreen *scr ) +QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCScreen *scr ) :QGraphicsSystemSoftwareCursor(scr), useVncCursor(false), server(srvr) { } diff --git a/src/plugins/platforms/vnc/qvnccursor.h b/src/plugins/platforms/vnc/qvnccursor.h index 8ea0f45..2c6ff5b 100644 --- a/src/plugins/platforms/vnc/qvnccursor.h +++ b/src/plugins/platforms/vnc/qvnccursor.h @@ -48,12 +48,12 @@ QT_BEGIN_NAMESPACE -class QVNCGraphicsSystemScreen; +class QVNCScreen; class QVNCServer; class QVNCCursor : public QGraphicsSystemSoftwareCursor { public: - QVNCCursor(QVNCServer *, QVNCGraphicsSystemScreen *); + QVNCCursor(QVNCServer *, QVNCScreen *); // input methods void setCursorMode(bool vnc); diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp index ea576d4..ab0a2f3 100644 --- a/src/plugins/platforms/vnc/qvncserver.cpp +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -358,13 +358,13 @@ bool QRfbClientCutText::read(QTcpSocket *s) //=========================================================================== -QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen) +QVNCServer::QVNCServer(QVNCScreen *screen) : qvnc_screen(screen), cursor(0) { init(5900); } -QVNCServer::QVNCServer(QVNCGraphicsSystemScreen *screen, int id) +QVNCServer::QVNCServer(QVNCScreen *screen, int id) : qvnc_screen(screen), cursor(0) { init(5900 + id); @@ -620,7 +620,7 @@ void QVNCServer::readClient() } #if 0//Q_BYTE_ORDER == Q_BIG_ENDIAN -bool QVNCGraphicsSystemScreen::swapBytes() const +bool QVNCScreen::swapBytes() const { if (depth() != 16) return false; @@ -1499,7 +1499,7 @@ static void blendCursor(QImage &image, const QRect &imageRect) } #endif // QT_NO_QWS_CURSOR -QVNCDirtyMap::QVNCDirtyMap(QVNCGraphicsSystemScreen *s) +QVNCDirtyMap::QVNCDirtyMap(QVNCScreen *s) : bytesPerPixel(0), numDirty(0), screen(s) { bytesPerPixel = (screen->depth() + 7) / 8; @@ -1885,7 +1885,7 @@ void QVNCServer::discardClient() -QVNCGraphicsSystemScreenPrivate::QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent) +QVNCScreenPrivate::QVNCScreenPrivate(QVNCScreen *parent) : dpiX(72), dpiY(72), doOnScreenSurface(false), refreshRate(25), vncServer(0), q_ptr(parent) { @@ -1902,12 +1902,12 @@ QVNCGraphicsSystemScreenPrivate::QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSys dirty = new QVNCDirtyMapOptimized(q_ptr); } -QVNCGraphicsSystemScreenPrivate::~QVNCGraphicsSystemScreenPrivate() +QVNCScreenPrivate::~QVNCScreenPrivate() { } -void QVNCGraphicsSystemScreenPrivate::setDirty(const QRect& rect, bool force) +void QVNCScreenPrivate::setDirty(const QRect& rect, bool force) { if (rect.isEmpty()) return; @@ -1916,7 +1916,7 @@ void QVNCGraphicsSystemScreenPrivate::setDirty(const QRect& rect, bool force) // q_ptr->screen()->setDirty(rect); if (!vncServer || !vncServer->isConnected()) { -// qDebug() << "QVNCGraphicsSystemScreenPrivate::setDirty() - Not connected"; +// qDebug() << "QVNCScreenPrivate::setDirty() - Not connected"; return; } const QRect r = rect; // .translated(-q_ptr->offset()); diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h index 4fcdbae..41cadab 100644 --- a/src/plugins/platforms/vnc/qvncserver.h +++ b/src/plugins/platforms/vnc/qvncserver.h @@ -72,7 +72,7 @@ class QVNCServer; class QVNCCursor : public QProxyScreenCursor { public: - QVNCCursor(QVNCGraphicsSystemScreen *s); + QVNCCursor(QVNCScreen *s); ~QVNCCursor(); void hide(); @@ -82,7 +82,7 @@ public: private: void setDirty(const QRect &r) const; - QVNCGraphicsSystemScreen *screen; + QVNCScreen *screen; }; class QVNCClientCursor : public QProxyScreenCursor @@ -106,7 +106,7 @@ private: class QVNCDirtyMap { public: - QVNCDirtyMap(QVNCGraphicsSystemScreen *screen); + QVNCDirtyMap(QVNCScreen *screen); virtual ~QVNCDirtyMap(); void reset(); @@ -122,7 +122,7 @@ public: protected: uchar *map; - QVNCGraphicsSystemScreen *screen; + QVNCScreen *screen; uchar *buffer; int bufferWidth; int bufferHeight; @@ -134,7 +134,7 @@ template class QVNCDirtyMapOptimized : public QVNCDirtyMap { public: - QVNCDirtyMapOptimized(QVNCGraphicsSystemScreen *screen) : QVNCDirtyMap(screen) {} + QVNCDirtyMapOptimized(QVNCScreen *screen) : QVNCDirtyMap(screen) {} ~QVNCDirtyMapOptimized() {} void setDirty(int x, int y, bool force = false); @@ -246,11 +246,11 @@ public: quint32 length; }; -class QVNCGraphicsSystemScreenPrivate : public QObject +class QVNCScreenPrivate : public QObject { public: - QVNCGraphicsSystemScreenPrivate(QVNCGraphicsSystemScreen *parent); - ~QVNCGraphicsSystemScreenPrivate(); + QVNCScreenPrivate(QVNCScreen *parent); + ~QVNCScreenPrivate(); void setDirty(const QRect &rect, bool force = false); void configure(); @@ -266,7 +266,7 @@ public: QSharedMemory shm; #endif - QVNCGraphicsSystemScreen *q_ptr; + QVNCScreen *q_ptr; }; class QRfbEncoder @@ -438,8 +438,8 @@ class QVNCServer : public QObject { Q_OBJECT public: - QVNCServer(QVNCGraphicsSystemScreen *screen); - QVNCServer(QVNCGraphicsSystemScreen *screen, int id); + QVNCServer(QVNCScreen *screen); + QVNCServer(QVNCScreen *screen, int id); ~QVNCServer(); void setDirty(); @@ -464,7 +464,7 @@ public: return pixelFormat.bitsPerPixel / 8; } - inline QVNCGraphicsSystemScreen* screen() const { return qvnc_screen; } + inline QVNCScreen* screen() const { return qvnc_screen; } inline QVNCDirtyMap* dirtyMap() const { return qvnc_screen->dirtyMap(); } inline QTcpSocket* clientSocket() const { return client; } QImage *screenImage() const; @@ -519,7 +519,7 @@ private: #endif bool dirtyCursor; int refreshRate; - QVNCGraphicsSystemScreen *qvnc_screen; + QVNCScreen *qvnc_screen; #ifndef QT_NO_QWS_CURSOR QVNCClientCursor *qvnc_cursor; #endif -- cgit v0.12 From e8af272c0c95ab531a060d3e8e8e75b7b03619f4 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 13 Apr 2010 11:38:49 +0200 Subject: Port the QVFb backend to the new API --- src/plugins/platforms/qvfb/main.cpp | 16 +- .../platforms/qvfb/qgraphicssystem_qvfb.cpp | 434 -------------------- src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h | 95 ----- src/plugins/platforms/qvfb/qvfb.pro | 11 +- src/plugins/platforms/qvfb/qvfbintegration.cpp | 439 +++++++++++++++++++++ src/plugins/platforms/qvfb/qvfbintegration.h | 97 +++++ src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp | 38 +- src/plugins/platforms/qvfb/qwindowsurface_qvfb.h | 26 +- 8 files changed, 586 insertions(+), 570 deletions(-) delete mode 100644 src/plugins/platforms/qvfb/qgraphicssystem_qvfb.cpp delete mode 100644 src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h create mode 100644 src/plugins/platforms/qvfb/qvfbintegration.cpp create mode 100644 src/plugins/platforms/qvfb/qvfbintegration.h diff --git a/src/plugins/platforms/qvfb/main.cpp b/src/plugins/platforms/qvfb/main.cpp index b28dde8..409f11c 100644 --- a/src/plugins/platforms/qvfb/main.cpp +++ b/src/plugins/platforms/qvfb/main.cpp @@ -39,34 +39,34 @@ ** ****************************************************************************/ -#include -#include "qgraphicssystem_qvfb.h" +#include +#include "qvfbintegration.h" #include QT_BEGIN_NAMESPACE -class QVFbGraphicsSystemPlugin : public QGraphicsSystemPlugin +class QVFbIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QGraphicsSystem *create(const QString&); + QPlatformIntegration *create(const QString&); }; -QStringList QVFbGraphicsSystemPlugin::keys() const +QStringList QVFbIntegrationPlugin::keys() const { QStringList list; list << "QVFb"; return list; } -QGraphicsSystem* QVFbGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration* QVFbIntegrationPlugin::create(const QString& system) { if (system.toLower() == "qvfb") - return new QVFbGraphicsSystem; + return new QVFbIntegration; return 0; } -Q_EXPORT_PLUGIN2(qvfb, QVFbGraphicsSystemPlugin) +Q_EXPORT_PLUGIN2(qvfb, QVFbIntegrationPlugin) QT_END_NAMESPACE diff --git a/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.cpp b/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.cpp deleted file mode 100644 index 19058a6..0000000 --- a/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.cpp +++ /dev/null @@ -1,434 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include -#include -#include -#include -#include -#include // overrides QT_OPEN - -#include -#include - -#include "qgraphicssystem_qvfb.h" -#include "qwindowsurface_qvfb.h" -#include -#include -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - - -class QVFbGraphicsSystemScreenKeyboardHandler : public QObject -{ - Q_OBJECT -public: - QVFbGraphicsSystemScreenKeyboardHandler(); - ~QVFbGraphicsSystemScreenKeyboardHandler(); - -private slots: - void readKeyboardData(); - -private: - int kbdFD; - int kbdIdx; - int kbdBufferLen; - unsigned char *kbdBuffer; - QSocketNotifier *keyNotifier; -}; - -QVFbGraphicsSystemScreenKeyboardHandler::QVFbGraphicsSystemScreenKeyboardHandler() -{ - int displayId = 0; //TODO displayId - const QString keyboardDev = QT_VFB_KEYBOARD_PIPE(displayId); - - - kbdFD = -1; - kbdIdx = 0; - kbdBufferLen = sizeof(QVFbKeyData) * 5; - kbdBuffer = new unsigned char [kbdBufferLen]; - - kbdFD = QT_OPEN(keyboardDev.toLatin1().constData(), O_RDWR | O_NDELAY); - - if (kbdFD == -1) { - perror("QVFbGraphicsSystemScreenKeyboardHandler"); - qWarning("QVFbGraphicsSystemScreenKeyboardHandler: Unable to open device %s", - qPrintable(keyboardDev)); - return; - } - - // Clear pending input - char buf[2]; - while (QT_READ(kbdFD, buf, 1) > 0) { } - - keyNotifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this); - connect(keyNotifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData())); - -} - -QVFbGraphicsSystemScreenKeyboardHandler::~QVFbGraphicsSystemScreenKeyboardHandler() -{ - if (kbdFD >= 0) - QT_CLOSE(kbdFD); - delete [] kbdBuffer; -} - - -void QVFbGraphicsSystemScreenKeyboardHandler::readKeyboardData() -{ - int n; - do { - n = QT_READ(kbdFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx); - if (n > 0) - kbdIdx += n; - } while (n > 0); - - int idx = 0; - while (kbdIdx - idx >= (int)sizeof(QVFbKeyData)) { - QVFbKeyData *kd = (QVFbKeyData *)(kbdBuffer + idx); - if (kd->unicode == 0 && kd->keycode == 0 && kd->modifiers == 0 && kd->press) { - // magic exit key - qWarning("Instructed to quit by Virtual Keyboard"); - qApp->quit(); - } - - //QWSServer::processKeyEvent(kd->unicode ? kd->unicode : 0xffff, kd->keycode, kd->modifiers, kd->press, kd->repeat); - - QEvent::Type type = kd->press ? QEvent::KeyPress : QEvent::KeyRelease; - - QString text; - if (kd->unicode && kd->unicode != 0xffff) - text += QChar(kd->unicode); - -// qDebug() << "readKeyboardData" << type << hex << kd->keycode << kd->modifiers << text; - - QWindowSystemInterface::handleKeyEvent(0, type, kd->keycode, kd->modifiers, text, kd->repeat, int(text.length())); - idx += sizeof(QVFbKeyData); - } - - int surplus = kbdIdx - idx; - for (int i = 0; i < surplus; i++) - kbdBuffer[i] = kbdBuffer[idx+i]; - kbdIdx = surplus; -} - - - - -class QVFbGraphicsSystemScreenMouseHandler : public QObject -{ - Q_OBJECT -public: - QVFbGraphicsSystemScreenMouseHandler(); - ~QVFbGraphicsSystemScreenMouseHandler(); - -private slots: - void readMouseData(); - -private: - int mouseFD; - int mouseIdx; - enum {mouseBufSize = 128}; - uchar mouseBuf[mouseBufSize]; - QSocketNotifier *mouseNotifier; - - int oldButtonState; -}; - -QVFbGraphicsSystemScreenMouseHandler::QVFbGraphicsSystemScreenMouseHandler() -{ - int displayId = 0; //TODO: displayId - QString mouseDev = QT_VFB_MOUSE_PIPE(displayId); - - mouseFD = QT_OPEN(mouseDev.toLatin1().constData(), O_RDWR | O_NDELAY); - - if (mouseFD == -1) { - perror("QVFbMouseHandler::QVFbMouseHandler"); - qWarning("QVFbMouseHander: Unable to open device %s", - qPrintable(mouseDev)); - return; - } - - // Clear pending input - char buf[2]; - while (QT_READ(mouseFD, buf, 1) > 0) { } - - mouseIdx = 0; - oldButtonState = 0; - mouseNotifier = new QSocketNotifier(mouseFD, QSocketNotifier::Read, this); - connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); -} - - -QVFbGraphicsSystemScreenMouseHandler::~QVFbGraphicsSystemScreenMouseHandler() -{ - if (mouseFD >= 0) - QT_CLOSE(mouseFD); -} - -void QVFbGraphicsSystemScreenMouseHandler::readMouseData() -{ - int n; - do { - n = QT_READ(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx); - if (n > 0) - mouseIdx += n; - } while (n > 0); - - int idx = 0; - static const int packetsize = sizeof(QPoint) + 2*sizeof(int); - while (mouseIdx-idx >= packetsize) { - uchar *mb = mouseBuf+idx; - QPoint mousePos = *reinterpret_cast(mb); - mb += sizeof(QPoint); - int bstate = *reinterpret_cast(mb); - mb += sizeof(int); - int wheel = *reinterpret_cast(mb); - - int button = bstate ^ oldButtonState; - QEvent::Type type = QEvent::MouseMove; - - if (button) { - type = (button & bstate) ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - } - QWindowSystemInterface::handleMouseEvent(0, mousePos, mousePos, Qt::MouseButtons(bstate)); - -// qDebug() << "readMouseData" << mousePos << button << bstate << oldButtonState << type; - - oldButtonState = bstate; - - idx += packetsize; - } - - int surplus = mouseIdx - idx; - for (int i = 0; i < surplus; i++) - mouseBuf[i] = mouseBuf[idx+i]; - mouseIdx = surplus; - -} - - -class QVFbGraphicsSystemScreenPrivate -{ -public: - QVFbGraphicsSystemScreenPrivate(QVFbGraphicsSystemScreen *) - : shmrgn(0), hdr(0), data(0), mouseHandler(0), keyboardHandler(0) - { - connect(0); //for now we only handle one screen - } - - ~QVFbGraphicsSystemScreenPrivate() { disconnect(); } - void setDirty(const QRect &r); - - bool connect(int displayId); - void disconnect(); - - QImage *screenImage() { return &img; } - QSize screenSize() { return img.size(); } - - int depth() const { return img.depth(); } - QImage::Format format() const { return img.format(); } - -private: - unsigned char *shmrgn; - QVFbHeader *hdr; - uchar *data; - QVFbGraphicsSystemScreenMouseHandler *mouseHandler; - QVFbGraphicsSystemScreenKeyboardHandler *keyboardHandler; - - - QImage img; -}; - - -void QVFbGraphicsSystemScreenPrivate::setDirty(const QRect &r) -{ - hdr->dirty = true; - hdr->update = hdr->update.united(r); -} - - -bool QVFbGraphicsSystemScreenPrivate::connect(int displayId) -{ - - key_t key = ftok(QT_VFB_MOUSE_PIPE(displayId).toLatin1(), 'b'); - - if (key == -1) - return false; - - - int shmId = shmget(key, 0, 0); - if (shmId != -1) - shmrgn = (unsigned char *)shmat(shmId, 0, 0); - else - return false; - - if ((long)shmrgn == -1 || shmrgn == 0) { - qDebug("No shmrgn %ld", (long)shmrgn); - return false; - } - - hdr = (QVFbHeader *)shmrgn; - data = shmrgn + hdr->dataoffset; - - int w = hdr->width; - int h = hdr->height; - int d = hdr->depth; - int lstep = hdr->linestep; - - QImage::Format format = QImage::Format_Invalid; - if (d == 32) - format = QImage::Format_ARGB32_Premultiplied; - else if (d == 16) - format = QImage::Format_RGB16; - - - if (format == QImage::Format_Invalid) { - img = QImage(); - return false; - } - - img = QImage(data, w, h, lstep, format); - - qDebug("connected %dx%d %d bpp", w, h, d); - - - mouseHandler = new QVFbGraphicsSystemScreenMouseHandler; - keyboardHandler = new QVFbGraphicsSystemScreenKeyboardHandler; - return true; -} - -void QVFbGraphicsSystemScreenPrivate::disconnect() -{ - if ((long)shmrgn != -1 && shmrgn) { - shmdt((char*)shmrgn); - shmrgn = 0; - } - delete mouseHandler; - mouseHandler = 0; - delete keyboardHandler; - keyboardHandler = 0; -} - - -QVFbGraphicsSystemScreen::QVFbGraphicsSystemScreen() -{ - d_ptr = new QVFbGraphicsSystemScreenPrivate(this); -} - - -QVFbGraphicsSystemScreen::~QVFbGraphicsSystemScreen() -{ - delete d_ptr; -} - -void QVFbGraphicsSystemScreen::setDirty(const QRect &rect) -{ - d_ptr->setDirty(rect); -} - - - -QRect QVFbGraphicsSystemScreen::geometry() const { - return QRect(QPoint(), d_ptr->screenSize()); -} - - -int QVFbGraphicsSystemScreen::depth() const -{ - return d_ptr->depth(); -} - -QImage::Format QVFbGraphicsSystemScreen::format() const -{ - return d_ptr->format(); -} - -QSize QVFbGraphicsSystemScreen::physicalSize() const { - return (d_ptr->screenSize()*254)/720; -} - -#if 0 -int QVFbGraphicsSystemScreen::linestep() const { - return d_ptr->screenImage() ? d_ptr->screenImage()->bytesPerLine() : 0; -} - -uchar *QVFbGraphicsSystemScreen::base() const { - return d_ptr->screenImage() ? d_ptr->screenImage()->bits() : 0; -} -#endif - -QImage *QVFbGraphicsSystemScreen::screenImage() -{ - return d_ptr->screenImage(); -} - -QVFbGraphicsSystem::QVFbGraphicsSystem() -{ - mPrimaryScreen = new QVFbGraphicsSystemScreen(); - - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QVFbGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QVFbGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. - return new QVFbWindowSurface - (const_cast(this), mPrimaryScreen, widget); -} - -QT_END_NAMESPACE - -#include "qgraphicssystem_qvfb.moc" diff --git a/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h b/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h deleted file mode 100644 index b31869c..0000000 --- a/src/plugins/platforms/qvfb/qgraphicssystem_qvfb.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_QVFB_H -#define QGRAPHICSSYSTEM_QVFB_H - -#include - -QT_BEGIN_NAMESPACE - - -class QVFbGraphicsSystemScreenPrivate; - -class QVFbGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QVFbGraphicsSystemScreen(); - ~QVFbGraphicsSystemScreen(); - - QRect geometry() const; - int depth() const; - QImage::Format format() const; - QSize physicalSize() const; - - QImage *screenImage(); - - void setDirty(const QRect &rect); - -public: - - QVFbGraphicsSystemScreenPrivate *d_ptr; -}; - -class QVFbGraphicsSystemPrivate; - - -class QVFbGraphicsSystem : public QGraphicsSystem -{ -public: - QVFbGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QList screens() const { return mScreens; } - -private: - QVFbGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; -}; - - - -QT_END_NAMESPACE - - -#endif diff --git a/src/plugins/platforms/qvfb/qvfb.pro b/src/plugins/platforms/qvfb/qvfb.pro index b321725..4dec274 100644 --- a/src/plugins/platforms/qvfb/qvfb.pro +++ b/src/plugins/platforms/qvfb/qvfb.pro @@ -1,12 +1,11 @@ -TARGET = qvfbgraphicssystem +TARGET = qvfbintegration include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms +SOURCES = main.cpp qvfbintegration.cpp qwindowsurface_qvfb.cpp +HEADERS = qvfbintegration.h qwindowsurface_qvfb.h -SOURCES = main.cpp qgraphicssystem_qvfb.cpp qwindowsurface_qvfb.cpp -HEADERS = qgraphicssystem_qvfb.h qwindowsurface_qvfb.h - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/qvfb/qvfbintegration.cpp b/src/plugins/platforms/qvfb/qvfbintegration.cpp new file mode 100644 index 0000000..2a877e0 --- /dev/null +++ b/src/plugins/platforms/qvfb/qvfbintegration.cpp @@ -0,0 +1,439 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include // overrides QT_OPEN + +#include +#include + +#include "qvfbintegration.h" +#include "qwindowsurface_qvfb.h" +#include +#include +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + + +class QVFbScreenKeyboardHandler : public QObject +{ + Q_OBJECT +public: + QVFbScreenKeyboardHandler(); + ~QVFbScreenKeyboardHandler(); + +private slots: + void readKeyboardData(); + +private: + int kbdFD; + int kbdIdx; + int kbdBufferLen; + unsigned char *kbdBuffer; + QSocketNotifier *keyNotifier; +}; + +QVFbScreenKeyboardHandler::QVFbScreenKeyboardHandler() +{ + int displayId = 0; //TODO displayId + const QString keyboardDev = QT_VFB_KEYBOARD_PIPE(displayId); + + + kbdFD = -1; + kbdIdx = 0; + kbdBufferLen = sizeof(QVFbKeyData) * 5; + kbdBuffer = new unsigned char [kbdBufferLen]; + + kbdFD = QT_OPEN(keyboardDev.toLatin1().constData(), O_RDWR | O_NDELAY); + + if (kbdFD == -1) { + perror("QVFbScreenKeyboardHandler"); + qWarning("QVFbScreenKeyboardHandler: Unable to open device %s", + qPrintable(keyboardDev)); + return; + } + + // Clear pending input + char buf[2]; + while (QT_READ(kbdFD, buf, 1) > 0) { } + + keyNotifier = new QSocketNotifier(kbdFD, QSocketNotifier::Read, this); + connect(keyNotifier, SIGNAL(activated(int)),this, SLOT(readKeyboardData())); + +} + +QVFbScreenKeyboardHandler::~QVFbScreenKeyboardHandler() +{ + if (kbdFD >= 0) + QT_CLOSE(kbdFD); + delete [] kbdBuffer; +} + + +void QVFbScreenKeyboardHandler::readKeyboardData() +{ + int n; + do { + n = QT_READ(kbdFD, kbdBuffer+kbdIdx, kbdBufferLen - kbdIdx); + if (n > 0) + kbdIdx += n; + } while (n > 0); + + int idx = 0; + while (kbdIdx - idx >= (int)sizeof(QVFbKeyData)) { + QVFbKeyData *kd = (QVFbKeyData *)(kbdBuffer + idx); + if (kd->unicode == 0 && kd->keycode == 0 && kd->modifiers == 0 && kd->press) { + // magic exit key + qWarning("Instructed to quit by Virtual Keyboard"); + qApp->quit(); + } + + //QWSServer::processKeyEvent(kd->unicode ? kd->unicode : 0xffff, kd->keycode, kd->modifiers, kd->press, kd->repeat); + + QEvent::Type type = kd->press ? QEvent::KeyPress : QEvent::KeyRelease; + + QString text; + if (kd->unicode && kd->unicode != 0xffff) + text += QChar(kd->unicode); + +// qDebug() << "readKeyboardData" << type << hex << kd->keycode << kd->modifiers << text; + + QWindowSystemInterface::handleKeyEvent(0, type, kd->keycode, kd->modifiers, text, kd->repeat, int(text.length())); + idx += sizeof(QVFbKeyData); + } + + int surplus = kbdIdx - idx; + for (int i = 0; i < surplus; i++) + kbdBuffer[i] = kbdBuffer[idx+i]; + kbdIdx = surplus; +} + + + + +class QVFbScreenMouseHandler : public QObject +{ + Q_OBJECT +public: + QVFbScreenMouseHandler(); + ~QVFbScreenMouseHandler(); + +private slots: + void readMouseData(); + +private: + int mouseFD; + int mouseIdx; + enum {mouseBufSize = 128}; + uchar mouseBuf[mouseBufSize]; + QSocketNotifier *mouseNotifier; + + int oldButtonState; +}; + +QVFbScreenMouseHandler::QVFbScreenMouseHandler() +{ + int displayId = 0; //TODO: displayId + QString mouseDev = QT_VFB_MOUSE_PIPE(displayId); + + mouseFD = QT_OPEN(mouseDev.toLatin1().constData(), O_RDWR | O_NDELAY); + + if (mouseFD == -1) { + perror("QVFbMouseHandler::QVFbMouseHandler"); + qWarning("QVFbMouseHander: Unable to open device %s", + qPrintable(mouseDev)); + return; + } + + // Clear pending input + char buf[2]; + while (QT_READ(mouseFD, buf, 1) > 0) { } + + mouseIdx = 0; + oldButtonState = 0; + mouseNotifier = new QSocketNotifier(mouseFD, QSocketNotifier::Read, this); + connect(mouseNotifier, SIGNAL(activated(int)),this, SLOT(readMouseData())); +} + + +QVFbScreenMouseHandler::~QVFbScreenMouseHandler() +{ + if (mouseFD >= 0) + QT_CLOSE(mouseFD); +} + +void QVFbScreenMouseHandler::readMouseData() +{ + int n; + do { + n = QT_READ(mouseFD, mouseBuf+mouseIdx, mouseBufSize-mouseIdx); + if (n > 0) + mouseIdx += n; + } while (n > 0); + + int idx = 0; + static const int packetsize = sizeof(QPoint) + 2*sizeof(int); + while (mouseIdx-idx >= packetsize) { + uchar *mb = mouseBuf+idx; + QPoint mousePos = *reinterpret_cast(mb); + mb += sizeof(QPoint); + int bstate = *reinterpret_cast(mb); + mb += sizeof(int); + //int wheel = *reinterpret_cast(mb); + + int button = bstate ^ oldButtonState; + QEvent::Type type = QEvent::MouseMove; + + if (button) { + type = (button & bstate) ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; + } + QWindowSystemInterface::handleMouseEvent(0, mousePos, mousePos, Qt::MouseButtons(bstate)); + +// qDebug() << "readMouseData" << mousePos << button << bstate << oldButtonState << type; + + oldButtonState = bstate; + + idx += packetsize; + } + + int surplus = mouseIdx - idx; + for (int i = 0; i < surplus; i++) + mouseBuf[i] = mouseBuf[idx+i]; + mouseIdx = surplus; + +} + + +class QVFbScreenPrivate +{ +public: + QVFbScreenPrivate(QVFbScreen *) + : shmrgn(0), hdr(0), data(0), mouseHandler(0), keyboardHandler(0) + { + connect(0); //for now we only handle one screen + } + + ~QVFbScreenPrivate() { disconnect(); } + void setDirty(const QRect &r); + + bool connect(int displayId); + void disconnect(); + + QImage *screenImage() { return &img; } + QSize screenSize() { return img.size(); } + + int depth() const { return img.depth(); } + QImage::Format format() const { return img.format(); } + +private: + unsigned char *shmrgn; + QVFbHeader *hdr; + uchar *data; + QVFbScreenMouseHandler *mouseHandler; + QVFbScreenKeyboardHandler *keyboardHandler; + + + QImage img; +}; + + +void QVFbScreenPrivate::setDirty(const QRect &r) +{ + hdr->dirty = true; + hdr->update = hdr->update.united(r); +} + + +bool QVFbScreenPrivate::connect(int displayId) +{ + + key_t key = ftok(QT_VFB_MOUSE_PIPE(displayId).toLatin1(), 'b'); + + if (key == -1) + return false; + + + int shmId = shmget(key, 0, 0); + if (shmId != -1) + shmrgn = (unsigned char *)shmat(shmId, 0, 0); + else + return false; + + if ((long)shmrgn == -1 || shmrgn == 0) { + qDebug("No shmrgn %ld", (long)shmrgn); + return false; + } + + hdr = (QVFbHeader *)shmrgn; + data = shmrgn + hdr->dataoffset; + + int w = hdr->width; + int h = hdr->height; + int d = hdr->depth; + int lstep = hdr->linestep; + + QImage::Format format = QImage::Format_Invalid; + if (d == 32) + format = QImage::Format_ARGB32_Premultiplied; + else if (d == 16) + format = QImage::Format_RGB16; + + + if (format == QImage::Format_Invalid) { + img = QImage(); + return false; + } + + img = QImage(data, w, h, lstep, format); + + qDebug("connected %dx%d %d bpp", w, h, d); + + + mouseHandler = new QVFbScreenMouseHandler; + keyboardHandler = new QVFbScreenKeyboardHandler; + return true; +} + +void QVFbScreenPrivate::disconnect() +{ + if ((long)shmrgn != -1 && shmrgn) { + shmdt((char*)shmrgn); + shmrgn = 0; + } + delete mouseHandler; + mouseHandler = 0; + delete keyboardHandler; + keyboardHandler = 0; +} + + +QVFbScreen::QVFbScreen() +{ + d_ptr = new QVFbScreenPrivate(this); +} + + +QVFbScreen::~QVFbScreen() +{ + delete d_ptr; +} + +void QVFbScreen::setDirty(const QRect &rect) +{ + d_ptr->setDirty(rect); +} + + + +QRect QVFbScreen::geometry() const { + return QRect(QPoint(), d_ptr->screenSize()); +} + + +int QVFbScreen::depth() const +{ + return d_ptr->depth(); +} + +QImage::Format QVFbScreen::format() const +{ + return d_ptr->format(); +} + +QSize QVFbScreen::physicalSize() const { + return (d_ptr->screenSize()*254)/720; +} + +#if 0 +int QVFbScreen::linestep() const { + return d_ptr->screenImage() ? d_ptr->screenImage()->bytesPerLine() : 0; +} + +uchar *QVFbScreen::base() const { + return d_ptr->screenImage() ? d_ptr->screenImage()->bits() : 0; +} +#endif + +QImage *QVFbScreen::screenImage() +{ + return d_ptr->screenImage(); +} + +QVFbIntegration::QVFbIntegration() +{ + mPrimaryScreen = new QVFbScreen(); + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QVFbIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QVFbIntegration::createWindowSurfaceForWindow(QWidget *widget, WId) const +{ + if (widget->windowType() == Qt::Desktop) + return 0; // Don't create an explicit window surface for the destkop. + return new QVFbWindowSurface(mPrimaryScreen, widget); +} + + +QPlatformWindow *QVFbIntegration::createPlatformWindow(QWidget *widget, WId) const +{ + return new QVFbWindow(mPrimaryScreen, widget); +} + +QT_END_NAMESPACE + +#include "qgraphicssystem_qvfb.moc" diff --git a/src/plugins/platforms/qvfb/qvfbintegration.h b/src/plugins/platforms/qvfb/qvfbintegration.h new file mode 100644 index 0000000..1207678 --- /dev/null +++ b/src/plugins/platforms/qvfb/qvfbintegration.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_QVFB_H +#define QGRAPHICSSYSTEM_QVFB_H + +#include +#include + +QT_BEGIN_NAMESPACE + + +class QVFbScreenPrivate; + +class QVFbScreen : public QPlatformScreen +{ +public: + QVFbScreen(); + ~QVFbScreen(); + + QRect geometry() const; + int depth() const; + QImage::Format format() const; + QSize physicalSize() const; + + QImage *screenImage(); + + void setDirty(const QRect &rect); + +public: + + QVFbScreenPrivate *d_ptr; +}; + +class QVFbIntegrationPrivate; + + +class QVFbIntegration : public QPlatformIntegration +{ +public: + QVFbIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; + + QList screens() const { return mScreens; } + +private: + QVFbScreen *mPrimaryScreen; + QList mScreens; +}; + + + +QT_END_NAMESPACE + + +#endif diff --git a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp index 0aafe28..b46d9c0 100644 --- a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp +++ b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp @@ -41,15 +41,15 @@ #include "qwindowsurface_qvfb.h" -#include "qgraphicssystem_qvfb.h" +#include "qvfbintegration.h" #include #include #include QT_BEGIN_NAMESPACE -QVFbWindowSurface::QVFbWindowSurface(QVFbGraphicsSystem *graphicsSystem, - QVFbGraphicsSystemScreen *screen, QWidget *window) +QVFbWindowSurface::QVFbWindowSurface(//QVFbIntegration *graphicsSystem, + QVFbScreen *screen, QWidget *window) : QWindowSurface(window), mScreen(screen) { @@ -69,36 +69,40 @@ void QVFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoi Q_UNUSED(widget); Q_UNUSED(offset); - QRect rect = geometry(); - QPoint topLeft = rect.topLeft(); +// QRect rect = geometry(); +// QPoint topLeft = rect.topLeft(); mScreen->setDirty(region.boundingRect()); } -void QVFbWindowSurface::setGeometry(const QRect &) +void QVFbWindowSurface::resize(const QSize&) { // any size you like as long as it's full-screen... QRect rect(mScreen->availableGeometry()); - QWindowSystemInterface::handleGeometryChange(this->window(), rect); - - QWindowSurface::setGeometry(rect); + QWindowSurface::resize(rect.size()); } -bool QVFbWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} -void QVFbWindowSurface::beginPaint(const QRegion ®ion) +QVFbWindow::QVFbWindow(QVFbScreen *screen, QWidget *window) + : QPlatformWindow(window), + mScreen(screen) { - Q_UNUSED(region); } -void QVFbWindowSurface::endPaint(const QRegion ®ion) + +void QVFbWindow::setGeometry(const QRect &) { - Q_UNUSED(region); + +// any size you like as long as it's full-screen... + + QRect rect(mScreen->availableGeometry()); + QWindowSystemInterface::handleGeometryChange(this->widget(), rect); + + QPlatformWindow::setGeometry(rect); } + + QT_END_NAMESPACE diff --git a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h index 1971caa..9228189 100644 --- a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h +++ b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h @@ -43,32 +43,38 @@ #define QWINDOWSURFACE_QVFB_H #include +#include QT_BEGIN_NAMESPACE -class QVFbGraphicsSystem; -class QVFbGraphicsSystemScreen; +class QVFbIntegration; +class QVFbScreen; class QVFbWindowSurface : public QWindowSurface { public: - QVFbWindowSurface(QVFbGraphicsSystem *graphicsSystem, - QVFbGraphicsSystemScreen *screen, QWidget *window); + QVFbWindowSurface(QVFbScreen *screen, QWidget *window); ~QVFbWindowSurface(); QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); + void resize(const QSize &size); + +private: + QVFbScreen *mScreen; +}; - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); +class QVFbWindow : public QPlatformWindow +{ +public: + QVFbWindow(QVFbScreen *screen, QWidget *window); + void setGeometry(const QRect &rect); private: - QVFbGraphicsSystem *mGraphicsSystem; - QVFbGraphicsSystemScreen *mScreen; + QVFbScreen *mScreen; }; + QT_END_NAMESPACE #endif -- cgit v0.12 From f507dca0b179b85455662c69029435310320f4c0 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 13 Apr 2010 16:11:27 +0200 Subject: Oops, don't crash in raise()/lower() --- src/plugins/platforms/testlite/qplatformintegration_testlite.cpp | 2 +- src/plugins/platforms/testlite/qtestlitewindow.cpp | 6 +++--- src/plugins/platforms/testlite/qtestlitewindow.h | 3 +-- src/plugins/platforms/testlite/qwindowsurface_testlite.cpp | 1 - 4 files changed, 5 insertions(+), 7 deletions(-) diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp index f9b3135..f13951d 100644 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp @@ -113,7 +113,7 @@ QWindowSurface *QTestLiteIntegration::createWindowSurfaceForWindow(QWidget *widg QPlatformWindow *QTestLiteIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const { - return new QTestLiteWindow(const_cast(this), mPrimaryScreen, widget); + return new QTestLiteWindow(this, mPrimaryScreen, widget); } diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 0b215e3..108f732 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -143,7 +143,7 @@ private: -QTestLiteWindow::QTestLiteWindow(QTestLiteIntegration *platformIntegration, +QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration, QTestLiteScreen */*screen*/, QWidget *window) :QPlatformWindow(window) { @@ -638,12 +638,12 @@ WId QTestLiteWindow::winId() const void QTestLiteWindow::raise() { - XRaiseWindow(mPlatformIntegration->xd->display, x_window); + XRaiseWindow(xd->display, x_window); } void QTestLiteWindow::lower() { - XLowerWindow(mPlatformIntegration->xd->display, x_window); + XLowerWindow(xd->display, x_window); } void QTestLiteWindow::setWindowTitle(const QString &title) diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h index 6fb7ed2..3624854 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.h +++ b/src/plugins/platforms/testlite/qtestlitewindow.h @@ -99,7 +99,7 @@ class QWindowSurface; class QTestLiteWindow : public QPlatformWindow { public: - QTestLiteWindow(QTestLiteIntegration *platformIntegration, + QTestLiteWindow(const QTestLiteIntegration *platformIntegration, QTestLiteScreen *screen, QWidget *window); ~QTestLiteWindow(); @@ -143,7 +143,6 @@ private: QWindowSurface *windowSurface; MyDisplay *xd; - QTestLiteIntegration *mPlatformIntegration; QTestLiteScreen *mScreen; Qt::WindowFlags window_flags; diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp index b5a0f74..af10368 100644 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp +++ b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp @@ -137,7 +137,6 @@ QTestLiteWindowSurface::QTestLiteWindowSurface (QTestLiteScreen */*screen*/, QWi QTestLiteWindowSurface::~QTestLiteWindowSurface() { - qDebug() << "~QTestLiteWindowSurface"; delete image_info; } -- cgit v0.12 From b2315a45cb1d64b86a4974ae0dac97c877a69d91 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 14 Apr 2010 11:07:02 +0200 Subject: Implement createWindowSurface, so that reparenting works MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen --- src/gui/painting/qgraphicssystem_lite.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/painting/qgraphicssystem_lite.cpp b/src/gui/painting/qgraphicssystem_lite.cpp index a62abbb..68d880b 100644 --- a/src/gui/painting/qgraphicssystem_lite.cpp +++ b/src/gui/painting/qgraphicssystem_lite.cpp @@ -51,8 +51,7 @@ QPixmapData *QLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) QWindowSurface *QLiteGraphicsSystem::createWindowSurface(QWidget *widget) const { - qFatal("should not use QLiteGraphicsSystem::createWindowSurface"); - return 0; + return QApplicationPrivate::platformIntegration()->createWindowSurfaceForWindow(widget, widget->winId()); } QBlittable *QLiteGraphicsSystem::createBlittable(const QSize &size) const -- cgit v0.12 From 4e42cea17031ff90481a674686afdd5548fba4a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 14 Apr 2010 12:38:01 +0200 Subject: Refactored directfb plugin --- src/plugins/platforms/directfb/directfb.pro | 12 +- src/plugins/platforms/directfb/main.cpp | 2 +- .../platforms/directfb/qblitter_directfb.cpp | 114 ----------------- src/plugins/platforms/directfb/qblitter_directfb.h | 29 ----- .../platforms/directfb/qdirectfbblitter.cpp | 114 +++++++++++++++++ src/plugins/platforms/directfb/qdirectfbblitter.h | 29 +++++ .../platforms/directfb/qdirectfbconvenience.cpp | 2 +- src/plugins/platforms/directfb/qdirectfbcursor.cpp | 3 - .../platforms/directfb/qdirectfbintegration.cpp | 125 ++++++++++++++++++ .../platforms/directfb/qdirectfbintegration.h | 100 +++++++++++++++ .../platforms/directfb/qdirectfbwindowsurface.cpp | 141 +++++++++++++++++++++ .../platforms/directfb/qdirectfbwindowsurface.h | 77 +++++++++++ .../directfb/qplatformintegration_directfb.cpp | 125 ------------------ .../directfb/qplatformintegration_directfb.h | 99 --------------- .../platforms/directfb/qwindowsurface_directfb.cpp | 141 --------------------- .../platforms/directfb/qwindowsurface_directfb.h | 77 ----------- 16 files changed, 594 insertions(+), 596 deletions(-) delete mode 100644 src/plugins/platforms/directfb/qblitter_directfb.cpp delete mode 100644 src/plugins/platforms/directfb/qblitter_directfb.h create mode 100644 src/plugins/platforms/directfb/qdirectfbblitter.cpp create mode 100644 src/plugins/platforms/directfb/qdirectfbblitter.h create mode 100644 src/plugins/platforms/directfb/qdirectfbintegration.cpp create mode 100644 src/plugins/platforms/directfb/qdirectfbintegration.h create mode 100644 src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp create mode 100644 src/plugins/platforms/directfb/qdirectfbwindowsurface.h delete mode 100644 src/plugins/platforms/directfb/qplatformintegration_directfb.cpp delete mode 100644 src/plugins/platforms/directfb/qplatformintegration_directfb.h delete mode 100644 src/plugins/platforms/directfb/qwindowsurface_directfb.cpp delete mode 100644 src/plugins/platforms/directfb/qwindowsurface_directfb.h diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index ec5f0f1..f81ec31 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -13,16 +13,16 @@ INCLUDEPATH += $$DIRECTFB_INCLUDEPATH LIBS += $$DIRECTFB_LIBS SOURCES = main.cpp \ - qplatformintegration_directfb.cpp \ - qwindowsurface_directfb.cpp \ - qblitter_directfb.cpp \ + qdirectfbintegration.cpp \ + qdirectfbwindowsurface.cpp \ + qdirectfbblitter.cpp \ qdirectfbconvenience.cpp \ qdirectfbinput.cpp \ qdirectfbcursor.cpp \ qdirectfbwindow.cpp -HEADERS = qplatformintegration_directfb.h \ - qwindowsurface_directfb.h \ - qblitter_directfb.h \ +HEADERS = qdirectfbintegration.h \ + qdirectfbwindowsurface.h \ + qdirectfbblitter.h \ qdirectfbconvenience.h \ qdirectfbinput.h \ qdirectfbcursor.h \ diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp index 1f0f081..9c7bcf6 100644 --- a/src/plugins/platforms/directfb/main.cpp +++ b/src/plugins/platforms/directfb/main.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include -#include "qplatformintegration_directfb.h" +#include "qdirectfbintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/directfb/qblitter_directfb.cpp b/src/plugins/platforms/directfb/qblitter_directfb.cpp deleted file mode 100644 index 20f8741..0000000 --- a/src/plugins/platforms/directfb/qblitter_directfb.cpp +++ /dev/null @@ -1,114 +0,0 @@ -#include "qblitter_directfb.h" -#include "qdirectfbconvenience.h" - -#include - -#include - -#include - -QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface) - : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability - |QBlittable::SourcePixmapCapability - |QBlittable::SourceOverPixmapCapability - |QBlittable::SourceOverScaledPixmapCapability)) -{ - if (surface) { - m_surface = surface; - } else { - DFBSurfaceDescription surfaceDesc; - memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); - surfaceDesc.width = rect.width(); - surfaceDesc.height = rect.height(); - surfaceDesc.caps = DSCAPS_PREMULTIPLIED; - surfaceDesc.pixelformat = DSPF_ARGB; - surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); - - IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); - dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); - m_surface->Clear(m_surface,0,0,0,0); - } - -} - -QDirectFbBlitter::~QDirectFbBlitter() -{ - unlock(); - m_surface->Release(m_surface); -} - -void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) -{ - m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); -// When the blitter api supports non opaque blits, also remember to change -// qpixmap_blitter.cpp::fill -// DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX; -// m_surface->SetDrawingFlags(m_surface, drawingFlags); - m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); - m_surface->FillRectangle(m_surface, rect.x(), rect.y(), - rect.width(), rect.height()); -} - -void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect) -{ - QPixmapData *data = pixmap.pixmapData(); - Q_ASSERT(data->width() && data->height()); - Q_ASSERT(data->classId() == QPixmapData::BlitterClass); - QBlittablePixmapData *blitPm = static_cast(data); - QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); - dfbBlitter->unlock(); - - IDirectFBSurface *s = dfbBlitter->m_surface; - - DFBSurfaceBlittingFlags blittingFlags = DSBLIT_NOFX; - DFBSurfacePorterDuffRule porterDuff = DSPD_SRC; - if (pixmap.hasAlpha()) { - blittingFlags = DSBLIT_BLEND_ALPHACHANNEL; - porterDuff = DSPD_SRC_OVER; - } - - m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); - m_surface->SetPorterDuff(m_surface,porterDuff); - m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); - - const DFBRectangle sRect = { srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height() }; - - DFBResult result; - if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) - result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y()); - else { - const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; - result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect); - } - if (result != DFB_OK) - DirectFBError("QDirectFBBlitter::drawPixmap()", result); -} - -QImage *QDirectFbBlitter::doLock() -{ - Q_ASSERT(m_surface); - Q_ASSERT(size().isValid()); - - void *mem; - int bpl; - const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); - if (result == DFB_OK) { - DFBSurfacePixelFormat dfbFormat; - DFBSurfaceCapabilities dfbCaps; - m_surface->GetPixelFormat(m_surface,&dfbFormat); - m_surface->GetCapabilities(m_surface,&dfbCaps); - QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); - int w, h; - m_surface->GetSize(m_surface,&w,&h); - m_image = QImage(static_cast(mem),w,h,bpl,format); - } else { - DirectFBError("Failed to lock image", result); - } - - return &m_image; -} - -void QDirectFbBlitter::doUnlock() -{ - m_surface->Unlock(m_surface); -} diff --git a/src/plugins/platforms/directfb/qblitter_directfb.h b/src/plugins/platforms/directfb/qblitter_directfb.h deleted file mode 100644 index 85a303a..0000000 --- a/src/plugins/platforms/directfb/qblitter_directfb.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef QDIRECTFBBLITTER_H -#define QDIRECTFBBLITTER_H - -#include "qdirectfbconvenience.h" - -#include - -#include - -class QDirectFbBlitter : public QBlittable -{ -public: - QDirectFbBlitter(const QSize &size, IDirectFBSurface *surface = 0); - virtual ~QDirectFbBlitter(); - - virtual void fillRect(const QRectF &rect, const QColor &color); - virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); - -protected: - virtual QImage *doLock(); - virtual void doUnlock(); - - IDirectFBSurface *m_surface; - QImage m_image; - - friend class QDirectFbConvenience; -}; - -#endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp new file mode 100644 index 0000000..15bb18b --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp @@ -0,0 +1,114 @@ +#include "qdirectfbblitter.h" +#include "qdirectfbconvenience.h" + +#include + +#include + +#include + +QDirectFbBlitter::QDirectFbBlitter(const QSize &rect, IDirectFBSurface *surface) + : QBlittable(rect, QBlittable::Capabilities(QBlittable::SolidRectCapability + |QBlittable::SourcePixmapCapability + |QBlittable::SourceOverPixmapCapability + |QBlittable::SourceOverScaledPixmapCapability)) +{ + if (surface) { + m_surface = surface; + } else { + DFBSurfaceDescription surfaceDesc; + memset(&surfaceDesc,0,sizeof(DFBSurfaceDescription)); + surfaceDesc.width = rect.width(); + surfaceDesc.height = rect.height(); + surfaceDesc.caps = DSCAPS_PREMULTIPLIED; + surfaceDesc.pixelformat = DSPF_ARGB; + surfaceDesc.flags = DFBSurfaceDescriptionFlags(DSDESC_WIDTH | DSDESC_HEIGHT | DSDESC_CAPS | DSDESC_PIXELFORMAT); + + IDirectFB *dfb = QDirectFbConvenience::dfbInterface(); + dfb->CreateSurface(dfb,&surfaceDesc, &m_surface); + m_surface->Clear(m_surface,0,0,0,0); + } + +} + +QDirectFbBlitter::~QDirectFbBlitter() +{ + unlock(); + m_surface->Release(m_surface); +} + +void QDirectFbBlitter::fillRect(const QRectF &rect, const QColor &color) +{ + m_surface->SetColor(m_surface, color.red(), color.green(), color.blue(), color.alpha()); +// When the blitter api supports non opaque blits, also remember to change +// qpixmap_blitter.cpp::fill +// DFBSurfaceDrawingFlags drawingFlags = color.alpha() ? DSDRAW_BLEND : DSDRAW_NOFX; +// m_surface->SetDrawingFlags(m_surface, drawingFlags); + m_surface->SetDrawingFlags(m_surface, DSDRAW_NOFX); + m_surface->FillRectangle(m_surface, rect.x(), rect.y(), + rect.width(), rect.height()); +} + +void QDirectFbBlitter::drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &srcRect) +{ + QPixmapData *data = pixmap.pixmapData(); + Q_ASSERT(data->width() && data->height()); + Q_ASSERT(data->classId() == QPixmapData::BlitterClass); + QBlittablePixmapData *blitPm = static_cast(data); + QDirectFbBlitter *dfbBlitter = static_cast(blitPm->blittable()); + dfbBlitter->unlock(); + + IDirectFBSurface *s = dfbBlitter->m_surface; + + DFBSurfaceBlittingFlags blittingFlags = DSBLIT_NOFX; + DFBSurfacePorterDuffRule porterDuff = DSPD_SRC; + if (pixmap.hasAlpha()) { + blittingFlags = DSBLIT_BLEND_ALPHACHANNEL; + porterDuff = DSPD_SRC_OVER; + } + + m_surface->SetBlittingFlags(m_surface, DFBSurfaceBlittingFlags(blittingFlags)); + m_surface->SetPorterDuff(m_surface,porterDuff); + m_surface->SetDstBlendFunction(m_surface,DSBF_INVSRCALPHA); + + const DFBRectangle sRect = { srcRect.x(), srcRect.y(), srcRect.width(), srcRect.height() }; + + DFBResult result; + if (rect.width() == srcRect.width() && rect.height() == srcRect.height()) + result = m_surface->Blit(m_surface, s, &sRect, rect.x(), rect.y()); + else { + const DFBRectangle dRect = { rect.x(), rect.y(), rect.width(), rect.height() }; + result = m_surface->StretchBlit(m_surface, s, &sRect, &dRect); + } + if (result != DFB_OK) + DirectFBError("QDirectFBBlitter::drawPixmap()", result); +} + +QImage *QDirectFbBlitter::doLock() +{ + Q_ASSERT(m_surface); + Q_ASSERT(size().isValid()); + + void *mem; + int bpl; + const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast(&mem), &bpl); + if (result == DFB_OK) { + DFBSurfacePixelFormat dfbFormat; + DFBSurfaceCapabilities dfbCaps; + m_surface->GetPixelFormat(m_surface,&dfbFormat); + m_surface->GetCapabilities(m_surface,&dfbCaps); + QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); + int w, h; + m_surface->GetSize(m_surface,&w,&h); + m_image = QImage(static_cast(mem),w,h,bpl,format); + } else { + DirectFBError("Failed to lock image", result); + } + + return &m_image; +} + +void QDirectFbBlitter::doUnlock() +{ + m_surface->Unlock(m_surface); +} diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h new file mode 100644 index 0000000..85a303a --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbblitter.h @@ -0,0 +1,29 @@ +#ifndef QDIRECTFBBLITTER_H +#define QDIRECTFBBLITTER_H + +#include "qdirectfbconvenience.h" + +#include + +#include + +class QDirectFbBlitter : public QBlittable +{ +public: + QDirectFbBlitter(const QSize &size, IDirectFBSurface *surface = 0); + virtual ~QDirectFbBlitter(); + + virtual void fillRect(const QRectF &rect, const QColor &color); + virtual void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &subrect); + +protected: + virtual QImage *doLock(); + virtual void doUnlock(); + + IDirectFBSurface *m_surface; + QImage m_image; + + friend class QDirectFbConvenience; +}; + +#endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp index 8594c09..adf9687 100644 --- a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp @@ -1,5 +1,5 @@ #include "qdirectfbconvenience.h" -#include "qblitter_directfb.h" +#include "qdirectfbblitter.h" #include diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.cpp b/src/plugins/platforms/directfb/qdirectfbcursor.cpp index bb7088f..2edae45 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.cpp +++ b/src/plugins/platforms/directfb/qdirectfbcursor.cpp @@ -1,9 +1,6 @@ #include "qdirectfbcursor.h" -#include "qblitter_directfb.h" -#include "qplatformintegration_directfb.h" #include "qdirectfbconvenience.h" -#include QDirectFBCursor::QDirectFBCursor(QPlatformScreen* screen) : QGraphicsSystemCursor(screen), surface(0) diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp new file mode 100644 index 0000000..b096081 --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -0,0 +1,125 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdirectfbintegration.h" +#include "qdirectfbwindowsurface.h" +#include "qdirectfbblitter.h" +#include "qdirectfbconvenience.h" +#include "qdirectfbcursor.h" +#include "qdirectfbwindow.h" + +#include +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QDirectFbScreen::QDirectFbScreen(int display) + :QPlatformScreen() +{ + m_layer = QDirectFbConvenience::dfbDisplayLayer(display); + m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); + + DFBDisplayLayerConfig config; + m_layer->GetConfiguration(m_layer, &config); + + m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); + m_geometry = QRect(0,0,config.width,config.height); + const int dpi = 72; + const qreal inch = 25.4; + m_depth = 32; + m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); + + cursor = new QDirectFBCursor(this); +} + +QDirectFbScreen::~QDirectFbScreen() +{ +} + +QDirectFbIntegration::QDirectFbIntegration() +{ + const QStringList args = QCoreApplication::arguments(); + int argc = args.size(); + char **argv = new char*[argc]; + + for (int i = 0; i < argc; ++i) + argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); + + DFBResult result = DirectFBInit(&argc, &argv); + if (result != DFB_OK) { + DirectFBError("QDirectFBScreen: error initializing DirectFB", + result); + } + delete[] argv; + + QDirectFbScreen *primaryScreen = new QDirectFbScreen(0); + mScreens.append(primaryScreen); +} + +QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + if (type == QPixmapData::BitmapType) + return new QRasterPixmapData(type); + else + return new QBlittablePixmapData(type); +} + +QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QDirectFbWindow(widget); +} + +QWindowSurface *QDirectFbIntegration::createWindowSurfaceForWindow(QWidget *widget, WId winId) const +{ + return new QDirectFbWindowSurface(widget,winId); +} + +QBlittable *QDirectFbIntegration::createBlittable(const QSize &size) const +{ + return new QDirectFbBlitter(size); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h new file mode 100644 index 0000000..808bc9d --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -0,0 +1,100 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATION_DIRECTFB_H +#define QPLATFORMINTEGRATION_DIRECTFB_H + +#include "qdirectfbinput.h" + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +class QDirectFBCursor; + +class QDirectFbScreen : public QPlatformScreen +{ +Q_OBJECT +public: + QDirectFbScreen(int display); + ~QDirectFbScreen(); + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + QSize physicalSize() const { return m_physicalSize; } + +public: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + QSize m_physicalSize; + + IDirectFBDisplayLayer *m_layer; + +private: + QDirectFBCursor * cursor; + +}; + +class QDirectFbIntegration : public QPlatformIntegration +{ +public: + QDirectFbIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; + QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; + QBlittable *createBlittable(const QSize &size) const; + + QList screens() const { return mScreens; } + + + +private: + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp new file mode 100644 index 0000000..4ca9a72 --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp @@ -0,0 +1,141 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdirectfbwindowsurface.h" +#include "qdirectfbintegration.h" +#include "qdirectfbblitter.h" +#include "qdirectfbconvenience.h" +#include + +#include + +QT_BEGIN_NAMESPACE + +QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window, WId wId) + : QWindowSurface(window), m_pixmap(0), m_pmdata(0), m_dfbSurface(0) +{ + + IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); + + DFBWindowID id(wId); + IDirectFBWindow *dfbWindow; + + layer->GetWindow(layer,id,&dfbWindow); + + dfbWindow->GetSurface(dfbWindow,&m_dfbSurface); +//WRONGSIZE + QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface); + m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); + m_pmdata->setBlittable(blitter); + m_pixmap = new QPixmap(m_pmdata); +} + +QDirectFbWindowSurface::~QDirectFbWindowSurface() +{ + +} + +QPaintDevice *QDirectFbWindowSurface::paintDevice() +{ + return m_pixmap; +} + +void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + m_pmdata->blittable()->unlock(); + + QVector rects = region.rects(); + for (int i = 0 ; i < rects.size(); i++) { + const QRect rect = rects.at(i); + DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; + m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); + } +} + +void QDirectFbWindowSurface::resize(const QSize &size) +{ + QWindowSurface::resize(size); + + //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable + m_dfbSurface->AddRef(m_dfbSurface); + QDirectFbBlitter *blitter = new QDirectFbBlitter(size,m_dfbSurface); + m_pmdata->setBlittable(blitter); +} + +static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) +{ + const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() }; + surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy); + const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy }; + surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT)); +} + +bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + m_pmdata->blittable()->unlock(); + + if (!m_dfbSurface || area.isEmpty()) + return false; + m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); + if (area.rectCount() == 1) { + scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy); + } else { + const QVector rects = area.rects(); + const int n = rects.size(); + for (int i=0; i +#include + +#include + +QT_BEGIN_NAMESPACE + +class QDirectFbWindowSurface : public QWindowSurface +{ +public: + QDirectFbWindowSurface(QWidget *window, WId wid); + ~QDirectFbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize (const QSize &size); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + void lockSurfaceToImage(); + + QPixmap *m_pixmap; + QBlittablePixmapData *m_pmdata; + + IDirectFBSurface *m_dfbSurface; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp b/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp deleted file mode 100644 index 5f428ef..0000000 --- a/src/plugins/platforms/directfb/qplatformintegration_directfb.cpp +++ /dev/null @@ -1,125 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qplatformintegration_directfb.h" -#include "qwindowsurface_directfb.h" -#include "qblitter_directfb.h" -#include "qdirectfbconvenience.h" -#include "qdirectfbcursor.h" -#include "qdirectfbwindow.h" - -#include -#include - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QDirectFbScreen::QDirectFbScreen(int display) - :QPlatformScreen() -{ - m_layer = QDirectFbConvenience::dfbDisplayLayer(display); - m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); - - DFBDisplayLayerConfig config; - m_layer->GetConfiguration(m_layer, &config); - - m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); - m_geometry = QRect(0,0,config.width,config.height); - const int dpi = 72; - const qreal inch = 25.4; - m_depth = 32; - m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); - - cursor = new QDirectFBCursor(this); -} - -QDirectFbScreen::~QDirectFbScreen() -{ -} - -QDirectFbIntegration::QDirectFbIntegration() -{ - const QStringList args = QCoreApplication::arguments(); - int argc = args.size(); - char **argv = new char*[argc]; - - for (int i = 0; i < argc; ++i) - argv[i] = qstrdup(args.at(i).toLocal8Bit().constData()); - - DFBResult result = DirectFBInit(&argc, &argv); - if (result != DFB_OK) { - DirectFBError("QDirectFBScreen: error initializing DirectFB", - result); - } - delete[] argv; - - QDirectFbScreen *primaryScreen = new QDirectFbScreen(0); - mScreens.append(primaryScreen); -} - -QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) const -{ - if (type == QPixmapData::BitmapType) - return new QRasterPixmapData(type); - else - return new QBlittablePixmapData(type); -} - -QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId winId) const -{ - Q_UNUSED(winId); - return new QDirectFbWindow(widget); -} - -QWindowSurface *QDirectFbIntegration::createWindowSurfaceForWindow(QWidget *widget, WId winId) const -{ - return new QDirectFbWindowSurface(widget,winId); -} - -QBlittable *QDirectFbIntegration::createBlittable(const QSize &size) const -{ - return new QDirectFbBlitter(size); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qplatformintegration_directfb.h b/src/plugins/platforms/directfb/qplatformintegration_directfb.h deleted file mode 100644 index a8489c0..0000000 --- a/src/plugins/platforms/directfb/qplatformintegration_directfb.h +++ /dev/null @@ -1,99 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORMINTEGRATION_DIRECTFB_H -#define QPLATFORMINTEGRATION_DIRECTFB_H - -#include "qdirectfbinput.h" - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -class QDirectFBCursor; - -class QDirectFbScreen : public QPlatformScreen -{ -public: - QDirectFbScreen(int display); - ~QDirectFbScreen(); - - QRect geometry() const { return m_geometry; } - int depth() const { return m_depth; } - QImage::Format format() const { return m_format; } - QSize physicalSize() const { return m_physicalSize; } - -public: - QRect m_geometry; - int m_depth; - QImage::Format m_format; - QSize m_physicalSize; - - IDirectFBDisplayLayer *m_layer; - -private: - QDirectFBCursor * cursor; - -}; - -class QDirectFbIntegration : public QPlatformIntegration -{ -public: - QDirectFbIntegration(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; - QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; - QBlittable *createBlittable(const QSize &size) const; - - QList screens() const { return mScreens; } - - - -private: - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp b/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp deleted file mode 100644 index e978cae..0000000 --- a/src/plugins/platforms/directfb/qwindowsurface_directfb.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_directfb.h" -#include "qplatformintegration_directfb.h" -#include "qblitter_directfb.h" -#include "qdirectfbconvenience.h" -#include - -#include - -QT_BEGIN_NAMESPACE - -QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window, WId wId) - : QWindowSurface(window), m_pixmap(0), m_pmdata(0), m_dfbSurface(0) -{ - - IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); - - DFBWindowID id(wId); - IDirectFBWindow *dfbWindow; - - layer->GetWindow(layer,id,&dfbWindow); - - dfbWindow->GetSurface(dfbWindow,&m_dfbSurface); -//WRONGSIZE - QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface); - m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); - m_pmdata->setBlittable(blitter); - m_pixmap = new QPixmap(m_pmdata); -} - -QDirectFbWindowSurface::~QDirectFbWindowSurface() -{ - -} - -QPaintDevice *QDirectFbWindowSurface::paintDevice() -{ - return m_pixmap; -} - -void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - m_pmdata->blittable()->unlock(); - - QVector rects = region.rects(); - for (int i = 0 ; i < rects.size(); i++) { - const QRect rect = rects.at(i); - DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; - m_dfbSurface->Flip(m_dfbSurface, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); - } -} - -void QDirectFbWindowSurface::resize(const QSize &size) -{ - QWindowSurface::resize(size); - - //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable - m_dfbSurface->AddRef(m_dfbSurface); - QDirectFbBlitter *blitter = new QDirectFbBlitter(size,m_dfbSurface); - m_pmdata->setBlittable(blitter); -} - -static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) -{ - const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() }; - surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy); - const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy }; - surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT)); -} - -bool QDirectFbWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - m_pmdata->blittable()->unlock(); - - if (!m_dfbSurface || area.isEmpty()) - return false; - m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX); - if (area.rectCount() == 1) { - scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy); - } else { - const QVector rects = area.rects(); - const int n = rects.size(); - for (int i=0; i -#include - -#include - -QT_BEGIN_NAMESPACE - -class QDirectFbWindowSurface : public QWindowSurface -{ -public: - QDirectFbWindowSurface(QWidget *window, WId wid); - ~QDirectFbWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void resize (const QSize &size); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - void lockSurfaceToImage(); - - QPixmap *m_pixmap; - QBlittablePixmapData *m_pmdata; - - IDirectFBSurface *m_dfbSurface; -}; - -QT_END_NAMESPACE - -#endif -- cgit v0.12 From a43355f7d10a72f60719f7e5a617bcd0031f8fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 19 Apr 2010 12:54:09 +0200 Subject: QPlatformScreen now has default implementation for physicalSize assuming dpi = 100. This also simplifies minimal slightly. Also use propper apis in qfont for default dpi by using QPlatformScreen --- src/gui/kernel/qplatformscreen_lite.cpp | 8 ++++++++ src/gui/kernel/qplatformscreen_lite.h | 2 +- src/gui/text/qfont.cpp | 14 ++++++++++++-- .../platforms/minimal/qplatformintegration_minimal.cpp | 1 - .../platforms/minimal/qplatformintegration_minimal.h | 1 - 5 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/gui/kernel/qplatformscreen_lite.cpp b/src/gui/kernel/qplatformscreen_lite.cpp index 4492463..4c0a02b 100644 --- a/src/gui/kernel/qplatformscreen_lite.cpp +++ b/src/gui/kernel/qplatformscreen_lite.cpp @@ -56,3 +56,11 @@ QWidget *QPlatformScreen::topLevelAt(const QPoint & pos) const return 0; } +QSize QPlatformScreen::physicalSize() const +{ + static const int dpi = 100; + int width = geometry().width() / dpi * qreal(25.4) ; + int height = geometry().height() / dpi * qreal(25.4) ; + return QSize(width,height); +} + diff --git a/src/gui/kernel/qplatformscreen_lite.h b/src/gui/kernel/qplatformscreen_lite.h index cae5f42..7d0e28d 100644 --- a/src/gui/kernel/qplatformscreen_lite.h +++ b/src/gui/kernel/qplatformscreen_lite.h @@ -62,7 +62,7 @@ public: virtual QRect availableGeometry() const {return geometry();}; virtual int depth() const = 0; virtual QImage::Format format() const = 0; - virtual QSize physicalSize() const = 0; + virtual QSize physicalSize() const; virtual void setDirty(const QRect &) {} virtual QWidget *topLevelAt(const QPoint &point) const; }; diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 01e4ef6..81d431c 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -75,6 +75,10 @@ #ifdef Q_OS_SYMBIAN #include "qt_s60_p.h" #endif +#ifdef Q_WS_LITE +#include +#include +#endif #include @@ -173,7 +177,10 @@ Q_GUI_EXPORT int qt_defaultDpiX() screen = subScreens.at(0); dpi = qRound(screen->width() / (screen->physicalWidth() / qreal(25.4))); #elif defined(Q_WS_LITE) - dpi = 72; + QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0); + const QSize screenSize = screen->geometry().size(); + const QSize physicalSize = screen->physicalSize(); + dpi = qRound(screenSize.width() / (physicalSize.width() / qreal(25.4))); #elif defined(Q_OS_SYMBIAN) dpi = S60->defaultDpiX; #endif // Q_WS_X11 @@ -203,7 +210,10 @@ Q_GUI_EXPORT int qt_defaultDpiY() screen = subScreens.at(0); dpi = qRound(screen->height() / (screen->physicalHeight() / qreal(25.4))); #elif defined(Q_WS_LITE) - dpi = 72; + QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0); + const QSize screenSize = screen->geometry().size(); + const QSize physicalSize = screen->physicalSize(); + dpi = qRound(screenSize.height() / (physicalSize.height() / qreal(25.4))); #elif defined(Q_OS_SYMBIAN) dpi = S60->defaultDpiY; #endif // Q_WS_X11 diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp index 404ffbc..94aa4f3 100644 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp @@ -11,7 +11,6 @@ QMinimalIntegration::QMinimalIntegration() mPrimaryScreen->mGeometry = QRect(0, 0, 240, 320); mPrimaryScreen->mDepth = 16; mPrimaryScreen->mFormat = QImage::Format_RGB16; - mPrimaryScreen->mPhysicalSize = QSize(40, 54); mScreens.append(mPrimaryScreen); } diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.h b/src/plugins/platforms/minimal/qplatformintegration_minimal.h index 2e8a8cf..fefe6c3 100644 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.h +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.h @@ -57,7 +57,6 @@ public: QRect geometry() const { return mGeometry; } int depth() const { return mDepth; } QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } public: QRect mGeometry; -- cgit v0.12 From 66e4d48129d6baa405ed9a4a22b12913227a8c45 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 21 Apr 2010 08:28:30 +0200 Subject: Renamed createWindowSurfaceForWindow to createWindowSurface. Gave also a default dpi when there is no platform integration, ie. it has not been initialised yet or is being initialised. --- src/gui/kernel/qplatformintegration_lite.h | 2 +- src/gui/kernel/qwidget_lite.cpp | 2 +- src/gui/painting/qgraphicssystem_lite.cpp | 2 +- src/gui/text/qfont.cpp | 28 +++++++++++++++------- .../platforms/directfb/qdirectfbintegration.cpp | 2 +- .../platforms/directfb/qdirectfbintegration.h | 2 +- .../platforms/linuxfb/qgraphicssystem_linuxfb.cpp | 4 +--- .../platforms/linuxfb/qgraphicssystem_linuxfb.h | 2 +- .../minimal/qplatformintegration_minimal.cpp | 2 +- .../minimal/qplatformintegration_minimal.h | 2 +- src/plugins/platforms/qvfb/qvfbintegration.cpp | 6 ++--- src/plugins/platforms/qvfb/qvfbintegration.h | 2 +- .../testlite/qplatformintegration_testlite.cpp | 4 +--- .../testlite/qplatformintegration_testlite.h | 2 +- src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp | 4 +--- src/plugins/platforms/vnc/qgraphicssystem_vnc.h | 2 +- 16 files changed, 36 insertions(+), 32 deletions(-) diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h index b13260e..ee6f833 100644 --- a/src/gui/kernel/qplatformintegration_lite.h +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -63,7 +63,7 @@ public: // GraphicsSystem functions virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; virtual QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const = 0; - virtual QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const = 0; + virtual QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const = 0; virtual QBlittable *createBlittable(const QSize &size) const; // Window System functions diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 465dbee..ee1a582 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -77,7 +77,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO Q_ASSERT(platformWindow); if (!surface) { - surface = QApplicationPrivate::platformIntegration()->createWindowSurfaceForWindow(q,platformWindow->winId()); + surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId()); } Q_ASSERT(surface); diff --git a/src/gui/painting/qgraphicssystem_lite.cpp b/src/gui/painting/qgraphicssystem_lite.cpp index 68d880b..1d24129 100644 --- a/src/gui/painting/qgraphicssystem_lite.cpp +++ b/src/gui/painting/qgraphicssystem_lite.cpp @@ -51,7 +51,7 @@ QPixmapData *QLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) QWindowSurface *QLiteGraphicsSystem::createWindowSurface(QWidget *widget) const { - return QApplicationPrivate::platformIntegration()->createWindowSurfaceForWindow(widget, widget->winId()); + return QApplicationPrivate::platformIntegration()->createWindowSurface(widget, widget->winId()); } QBlittable *QLiteGraphicsSystem::createBlittable(const QSize &size) const diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 81d431c..2c2ceb1 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -177,10 +177,16 @@ Q_GUI_EXPORT int qt_defaultDpiX() screen = subScreens.at(0); dpi = qRound(screen->width() / (screen->physicalWidth() / qreal(25.4))); #elif defined(Q_WS_LITE) - QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0); - const QSize screenSize = screen->geometry().size(); - const QSize physicalSize = screen->physicalSize(); - dpi = qRound(screenSize.width() / (physicalSize.width() / qreal(25.4))); + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + if (pi) { + QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0); + const QSize screenSize = screen->geometry().size(); + const QSize physicalSize = screen->physicalSize(); + dpi = qRound(screenSize.width() / (physicalSize.width() / qreal(25.4))); + } else { + //PI has not been initialised, or it is being initialised. Give a default dpi + dpi = 100; + } #elif defined(Q_OS_SYMBIAN) dpi = S60->defaultDpiX; #endif // Q_WS_X11 @@ -210,10 +216,16 @@ Q_GUI_EXPORT int qt_defaultDpiY() screen = subScreens.at(0); dpi = qRound(screen->height() / (screen->physicalHeight() / qreal(25.4))); #elif defined(Q_WS_LITE) - QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0); - const QSize screenSize = screen->geometry().size(); - const QSize physicalSize = screen->physicalSize(); - dpi = qRound(screenSize.height() / (physicalSize.height() / qreal(25.4))); + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + if (pi) { + QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0); + const QSize screenSize = screen->geometry().size(); + const QSize physicalSize = screen->physicalSize(); + dpi = qRound(screenSize.height() / (physicalSize.height() / qreal(25.4))); + } else { + //PI has not been initialised, or it is being initialised. Give a default dpi + dpi = 100; + } #elif defined(Q_OS_SYMBIAN) dpi = S60->defaultDpiY; #endif // Q_WS_X11 diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index b096081..60fce7e 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -112,7 +112,7 @@ QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId return new QDirectFbWindow(widget); } -QWindowSurface *QDirectFbIntegration::createWindowSurfaceForWindow(QWidget *widget, WId winId) const +QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *widget, WId winId) const { return new QDirectFbWindowSurface(widget,winId); } diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h index 808bc9d..c0e770f 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.h +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -84,7 +84,7 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; - QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; QBlittable *createBlittable(const QSize &size) const; QList screens() const { return mScreens; } diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp index 25cdc7b..acc254a 100644 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp @@ -786,10 +786,8 @@ QPixmapData *QLinuxFbIntegration::createPixmapData(QPixmapData::PixelType type) return new QRasterPixmapData(type); } -QWindowSurface *QLinuxFbIntegration::createWindowSurfaceForWindow(QWidget *widget, WId) const +QWindowSurface *QLinuxFbIntegration::createWindowSurface(QWidget *widget, WId) const { - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. QFbWindowSurface * surface = new QFbWindowSurface(mPrimaryScreen, widget); return surface; diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h index 7d4c031..dc61df5 100644 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h +++ b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h @@ -78,7 +78,7 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId WinId) const; - QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId WinId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId WinId) const; QList screens() const { return mScreens; } diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp index 94aa4f3..73e025c 100644 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp @@ -26,7 +26,7 @@ QPlatformWindow *QMinimalIntegration::createPlatformWindow(QWidget *widget, WId return new QPlatformWindow(widget); } -QWindowSurface *QMinimalIntegration::createWindowSurfaceForWindow(QWidget *widget, WId winId) const +QWindowSurface *QMinimalIntegration::createWindowSurface(QWidget *widget, WId winId) const { Q_UNUSED(winId); return new QMinimalWindowSurface(widget); diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.h b/src/plugins/platforms/minimal/qplatformintegration_minimal.h index fefe6c3..a2f7449 100644 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.h +++ b/src/plugins/platforms/minimal/qplatformintegration_minimal.h @@ -72,7 +72,7 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; QList screens() const { return mScreens; } diff --git a/src/plugins/platforms/qvfb/qvfbintegration.cpp b/src/plugins/platforms/qvfb/qvfbintegration.cpp index 2a877e0..e22c724 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.cpp +++ b/src/plugins/platforms/qvfb/qvfbintegration.cpp @@ -421,10 +421,8 @@ QPixmapData *QVFbIntegration::createPixmapData(QPixmapData::PixelType type) cons return new QRasterPixmapData(type); } -QWindowSurface *QVFbIntegration::createWindowSurfaceForWindow(QWidget *widget, WId) const +QWindowSurface *QVFbIntegration::createWindowSurface(QWidget *widget, WId) const { - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. return new QVFbWindowSurface(mPrimaryScreen, widget); } @@ -436,4 +434,4 @@ QPlatformWindow *QVFbIntegration::createPlatformWindow(QWidget *widget, WId) con QT_END_NAMESPACE -#include "qgraphicssystem_qvfb.moc" +#include "qvfbintegration.moc" diff --git a/src/plugins/platforms/qvfb/qvfbintegration.h b/src/plugins/platforms/qvfb/qvfbintegration.h index 1207678..ab44d46 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.h +++ b/src/plugins/platforms/qvfb/qvfbintegration.h @@ -80,7 +80,7 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; QList screens() const { return mScreens; } diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp index f13951d..f657617 100644 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp @@ -103,10 +103,8 @@ QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) return new QRasterPixmapData(type); } -QWindowSurface *QTestLiteIntegration::createWindowSurfaceForWindow(QWidget *widget, WId) const +QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget, WId) const { - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. return new QTestLiteWindowSurface(mPrimaryScreen, widget); } diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.h b/src/plugins/platforms/testlite/qplatformintegration_testlite.h index bd27d89..729e74f 100644 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.h +++ b/src/plugins/platforms/testlite/qplatformintegration_testlite.h @@ -75,7 +75,7 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; QPixmap grabWindow(WId window, int x, int y, int width, int height) const; diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp index cbc8bbd..a872991 100644 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp @@ -114,10 +114,8 @@ QPixmapData *QVNCIntegration::createPixmapData(QPixmapData::PixelType type) cons // return surface; // } -QWindowSurface *QVNCIntegration::createWindowSurfaceForWindow(QWidget *widget, WId) const +QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget, WId) const { - if (widget->windowType() == Qt::Desktop) - return 0; // Don't create an explicit window surface for the destkop. QFbWindowSurface * surface; surface = new QFbWindowSurface(mPrimaryScreen, widget); return surface; diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h index 887ccc3..524b888 100644 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h +++ b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h @@ -80,7 +80,7 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurfaceForWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; QList screens() const { return mScreens; } -- cgit v0.12 From bf9b927dd7143ef02591308b1cecc0c44417deb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 21 Apr 2010 15:45:53 +0200 Subject: Rename files in platform plugins follow same pattern --- src/plugins/platforms/linuxfb/linuxfb.pro | 4 +- src/plugins/platforms/linuxfb/main.cpp | 2 +- .../platforms/linuxfb/qgraphicssystem_linuxfb.cpp | 859 --------------------- .../platforms/linuxfb/qgraphicssystem_linuxfb.h | 129 ---- .../platforms/linuxfb/qlinuxfbintegration.cpp | 859 +++++++++++++++++++++ .../platforms/linuxfb/qlinuxfbintegration.h | 129 ++++ src/plugins/platforms/minimal/main.cpp | 2 +- src/plugins/platforms/minimal/minimal.pro | 8 +- .../platforms/minimal/qminimalintegration.cpp | 33 + .../platforms/minimal/qminimalintegration.h | 85 ++ .../platforms/minimal/qminimalwindowsurface.cpp | 85 ++ .../platforms/minimal/qminimalwindowsurface.h | 67 ++ .../minimal/qplatformintegration_minimal.cpp | 33 - .../minimal/qplatformintegration_minimal.h | 85 -- .../platforms/minimal/qwindowsurface_minimal.cpp | 85 -- .../platforms/minimal/qwindowsurface_minimal.h | 67 -- src/plugins/platforms/qvfb/qvfb.pro | 4 +- src/plugins/platforms/qvfb/qvfbintegration.cpp | 2 +- src/plugins/platforms/qvfb/qvfbwindowsurface.cpp | 108 +++ src/plugins/platforms/qvfb/qvfbwindowsurface.h | 80 ++ src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp | 108 --- src/plugins/platforms/qvfb/qwindowsurface_qvfb.h | 80 -- src/plugins/platforms/testlite/main.cpp | 2 +- .../testlite/qplatformintegration_testlite.cpp | 143 ---- .../testlite/qplatformintegration_testlite.h | 98 --- .../platforms/testlite/qtestliteintegration.cpp | 143 ++++ .../platforms/testlite/qtestliteintegration.h | 98 +++ src/plugins/platforms/testlite/qtestlitewindow.cpp | 4 +- .../platforms/testlite/qtestlitewindowsurface.cpp | 273 +++++++ .../platforms/testlite/qtestlitewindowsurface.h | 88 +++ .../platforms/testlite/qwindowsurface_testlite.cpp | 273 ------- .../platforms/testlite/qwindowsurface_testlite.h | 88 --- src/plugins/platforms/testlite/testlite.pro | 4 +- src/plugins/platforms/vnc/main.cpp | 2 +- src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp | 131 ---- src/plugins/platforms/vnc/qgraphicssystem_vnc.h | 98 --- src/plugins/platforms/vnc/qvnccursor.cpp | 2 +- src/plugins/platforms/vnc/qvncintegration.cpp | 131 ++++ src/plugins/platforms/vnc/qvncintegration.h | 98 +++ src/plugins/platforms/vnc/qvncserver.h | 2 +- src/plugins/platforms/vnc/vnc.pro | 4 +- 41 files changed, 2298 insertions(+), 2298 deletions(-) delete mode 100644 src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp delete mode 100644 src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h create mode 100644 src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp create mode 100644 src/plugins/platforms/linuxfb/qlinuxfbintegration.h create mode 100644 src/plugins/platforms/minimal/qminimalintegration.cpp create mode 100644 src/plugins/platforms/minimal/qminimalintegration.h create mode 100644 src/plugins/platforms/minimal/qminimalwindowsurface.cpp create mode 100644 src/plugins/platforms/minimal/qminimalwindowsurface.h delete mode 100644 src/plugins/platforms/minimal/qplatformintegration_minimal.cpp delete mode 100644 src/plugins/platforms/minimal/qplatformintegration_minimal.h delete mode 100644 src/plugins/platforms/minimal/qwindowsurface_minimal.cpp delete mode 100644 src/plugins/platforms/minimal/qwindowsurface_minimal.h create mode 100644 src/plugins/platforms/qvfb/qvfbwindowsurface.cpp create mode 100644 src/plugins/platforms/qvfb/qvfbwindowsurface.h delete mode 100644 src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp delete mode 100644 src/plugins/platforms/qvfb/qwindowsurface_qvfb.h delete mode 100644 src/plugins/platforms/testlite/qplatformintegration_testlite.cpp delete mode 100644 src/plugins/platforms/testlite/qplatformintegration_testlite.h create mode 100644 src/plugins/platforms/testlite/qtestliteintegration.cpp create mode 100644 src/plugins/platforms/testlite/qtestliteintegration.h create mode 100644 src/plugins/platforms/testlite/qtestlitewindowsurface.cpp create mode 100644 src/plugins/platforms/testlite/qtestlitewindowsurface.h delete mode 100644 src/plugins/platforms/testlite/qwindowsurface_testlite.cpp delete mode 100644 src/plugins/platforms/testlite/qwindowsurface_testlite.h delete mode 100644 src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp delete mode 100644 src/plugins/platforms/vnc/qgraphicssystem_vnc.h create mode 100644 src/plugins/platforms/vnc/qvncintegration.cpp create mode 100644 src/plugins/platforms/vnc/qvncintegration.h diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index 2633a10..8d4b6d7 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -3,8 +3,8 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms -SOURCES = main.cpp qgraphicssystem_linuxfb.cpp -HEADERS = qgraphicssystem_linuxfb.h +SOURCES = main.cpp qlinuxfbintegration.cpp +HEADERS = qlinuxfbintegration.h include(../fb_base/fb_base.pri) diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp index 1ee24b6..65569ac 100644 --- a/src/plugins/platforms/linuxfb/main.cpp +++ b/src/plugins/platforms/linuxfb/main.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include -#include "qgraphicssystem_linuxfb.h" +#include "qlinuxfbintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp deleted file mode 100644 index 321e90f..0000000 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.cpp +++ /dev/null @@ -1,859 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_linuxfb.h" -#include "../fb_base/fb_base.h" -#include -#include // overrides QT_OPEN -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if !defined(Q_OS_DARWIN) && !defined(Q_OS_FREEBSD) -#include - -#ifdef __i386__ -#include -#endif -#endif - -QT_BEGIN_NAMESPACE - -class QLinuxFbIntegrationPrivate -{ -public: - QLinuxFbIntegrationPrivate(); - ~QLinuxFbIntegrationPrivate(); - - void openTty(); - void closeTty(); - - int fd; - int startupw; - int startuph; - int startupd; - bool blank; - - bool doGraphicsMode; -#ifdef QT_QWS_DEPTH_GENERIC - bool doGenericColors; -#endif - int ttyfd; - long oldKdMode; - QString ttyDevice; - QString displaySpec; -}; - -QLinuxFbIntegrationPrivate::QLinuxFbIntegrationPrivate() - : fd(-1), blank(true), doGraphicsMode(true), -#ifdef QT_QWS_DEPTH_GENERIC - doGenericColors(false), -#endif - ttyfd(-1), oldKdMode(KD_TEXT) -{ -} - -QLinuxFbIntegrationPrivate::~QLinuxFbIntegrationPrivate() -{ - closeTty(); -} - -void QLinuxFbIntegrationPrivate::openTty() -{ - const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0}; - - if (ttyDevice.isEmpty()) { - for (const char * const *dev = devs; *dev; ++dev) { - ttyfd = QT_OPEN(*dev, O_RDWR); - if (ttyfd != -1) - break; - } - } else { - ttyfd = QT_OPEN(ttyDevice.toAscii().constData(), O_RDWR); - } - - if (ttyfd == -1) - return; - - if (doGraphicsMode) { - ioctl(ttyfd, KDGETMODE, &oldKdMode); - if (oldKdMode != KD_GRAPHICS) { - int ret = ioctl(ttyfd, KDSETMODE, KD_GRAPHICS); - if (ret == -1) - doGraphicsMode = false; - } - } - - // No blankin' screen, no blinkin' cursor!, no cursor! - const char termctl[] = "\033[9;0]\033[?33l\033[?25l\033[?1c"; - QT_WRITE(ttyfd, termctl, sizeof(termctl)); -} - -void QLinuxFbIntegrationPrivate::closeTty() -{ - if (ttyfd == -1) - return; - - if (doGraphicsMode) - ioctl(ttyfd, KDSETMODE, oldKdMode); - - // Blankin' screen, blinkin' cursor! - const char termctl[] = "\033[9;15]\033[?33h\033[?25h\033[?0c"; - QT_WRITE(ttyfd, termctl, sizeof(termctl)); - - QT_CLOSE(ttyfd); - ttyfd = -1; -} - -QLinuxFbIntegration::QLinuxFbIntegration() -{ - d_ptr = new QLinuxFbIntegrationPrivate(); - - // XXX - QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); - - if (!connect(displaySpec)) - qFatal("QLinuxFbIntegration: could not initialize screen"); - initDevice(); - - // Create a QImage directly on the screen's framebuffer. - // This is the blit target for copying windows to the screen. - mPrimaryScreen = new QLinuxFbScreen(data, w, h, lstep, - screenFormat); - mPrimaryScreen->setPhysicalSize(QSize(physWidth, physHeight)); - mScreens.append(mPrimaryScreen); -} - -QLinuxFbIntegration::~QLinuxFbIntegration() -{ - delete mPrimaryScreen; - delete d_ptr; -} - -bool QLinuxFbIntegration::connect(const QString &displaySpec) -{ - const QStringList args = displaySpec.split(QLatin1Char(':')); - - if (args.contains(QLatin1String("nographicsmodeswitch"))) - d_ptr->doGraphicsMode = false; - -#ifdef QT_QWS_DEPTH_GENERIC - if (args.contains(QLatin1String("genericcolors"))) - d_ptr->doGenericColors = true; -#endif - - QRegExp ttyRegExp(QLatin1String("tty=(.*)")); - if (args.indexOf(ttyRegExp) != -1) - d_ptr->ttyDevice = ttyRegExp.cap(1); - -#if 0 -#if Q_BYTE_ORDER == Q_BIG_ENDIAN -#ifndef QT_QWS_FRAMEBUFFER_LITTLE_ENDIAN - if (args.contains(QLatin1String("littleendian"))) -#endif - QScreen::setFrameBufferLittleEndian(true); -#endif -#endif - - // Check for explicitly specified device - const int len = 8; // "/dev/fbx" - int m = displaySpec.indexOf(QLatin1String("/dev/fb")); - - QString dev; - if (m > 0) - dev = displaySpec.mid(m, len); - else - dev = QLatin1String("/dev/fb0"); - - if (access(dev.toLatin1().constData(), R_OK|W_OK) == 0) - d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDWR); - if (d_ptr->fd == -1) { - if (access(dev.toLatin1().constData(), R_OK) == 0) - d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDONLY); - if (d_ptr->fd == 1) { - qWarning("Error opening framebuffer device %s", qPrintable(dev)); - return false; - } - } - - fb_fix_screeninfo finfo; - fb_var_screeninfo vinfo; - //####################### - // Shut up Valgrind - memset(&vinfo, 0, sizeof(vinfo)); - memset(&finfo, 0, sizeof(finfo)); - //####################### - - /* Get fixed screen information */ - if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { - perror("QLinuxFbIntegration::connect"); - qWarning("Error reading fixed information"); - return false; - } - - if (finfo.type == FB_TYPE_VGA_PLANES) { - qWarning("VGA16 video mode not supported"); - return false; - } - - /* Get variable screen information */ - if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { - perror("QLinuxFbIntegration::connect"); - qWarning("Error reading variable information"); - return false; - } - - grayscale = vinfo.grayscale; - d = vinfo.bits_per_pixel; - if (d == 24) { - d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; - if (d <= 0) - d = 24; // reset if color component lengths are not reported - } else if (d == 16) { - d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; - if (d <= 0) - d = 16; - } - lstep = finfo.line_length; - - int xoff = vinfo.xoffset; - int yoff = vinfo.yoffset; - const char* qwssize; - if((qwssize=::getenv("QWS_SIZE")) && sscanf(qwssize,"%dx%d",&w,&h)==2) { - if (d_ptr->fd != -1) { - if ((uint)w > vinfo.xres) w = vinfo.xres; - if ((uint)h > vinfo.yres) h = vinfo.yres; - } - dw=w; - dh=h; - int xxoff, yyoff; - if (sscanf(qwssize, "%*dx%*d+%d+%d", &xxoff, &yyoff) == 2) { - if (xxoff < 0 || xxoff + w > (int)(vinfo.xres)) - xxoff = vinfo.xres - w; - if (yyoff < 0 || yyoff + h > (int)(vinfo.yres)) - yyoff = vinfo.yres - h; - xoff += xxoff; - yoff += yyoff; - } else { - xoff += (vinfo.xres - w)/2; - yoff += (vinfo.yres - h)/2; - } - } else { - dw=w=vinfo.xres; - dh=h=vinfo.yres; - } - - if (w == 0 || h == 0) { - qWarning("QLinuxFbIntegration::connect(): Unable to find screen geometry, " - "will use 320x240."); - dw = w = 320; - dh = h = 240; - } - - setPixelFormat(vinfo); - - // Handle display physical size spec. - QStringList displayArgs = displaySpec.split(QLatin1Char(':')); - QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)")); - int dimIdxW = displayArgs.indexOf(mmWidthRx); - QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)")); - int dimIdxH = displayArgs.indexOf(mmHeightRx); - if (dimIdxW >= 0) { - mmWidthRx.exactMatch(displayArgs.at(dimIdxW)); - physWidth = mmWidthRx.cap(1).toInt(); - if (dimIdxH < 0) - physHeight = dh*physWidth/dw; - } - if (dimIdxH >= 0) { - mmHeightRx.exactMatch(displayArgs.at(dimIdxH)); - physHeight = mmHeightRx.cap(1).toInt(); - if (dimIdxW < 0) - physWidth = dw*physHeight/dh; - } - if (dimIdxW < 0 && dimIdxH < 0) { - if (vinfo.width != 0 && vinfo.height != 0 - && vinfo.width != UINT_MAX && vinfo.height != UINT_MAX) { - physWidth = vinfo.width; - physHeight = vinfo.height; - } else { - const int dpi = 72; - physWidth = qRound(dw * 25.4 / dpi); - physHeight = qRound(dh * 25.4 / dpi); - } - } - - dataoffset = yoff * lstep + xoff * d / 8; - //qDebug("Using %dx%dx%d screen",w,h,d); - - /* Figure out the size of the screen in bytes */ - size = h * lstep; - - mapsize = finfo.smem_len; - - data = (unsigned char *)-1; - if (d_ptr->fd != -1) - data = (unsigned char *)mmap(0, mapsize, PROT_READ | PROT_WRITE, - MAP_SHARED, d_ptr->fd, 0); - - if ((long)data == -1) { - perror("QLinuxFbIntegration::connect"); - qWarning("Error: failed to map framebuffer device to memory."); - return false; - } else { - data += dataoffset; - } - -#if 0 - canaccel = useOffscreen(); - if(canaccel) - setupOffScreen(); -#endif - canaccel = false; - - // Now read in palette - if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { - screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; - int loopc; - fb_cmap startcmap; - startcmap.start=0; - startcmap.len=screencols; - startcmap.red=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - startcmap.green=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - startcmap.blue=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - startcmap.transp=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - if (d_ptr->fd == -1 || ioctl(d_ptr->fd, FBIOGETCMAP, &startcmap)) { - perror("QLinuxFbIntegration::connect"); - qWarning("Error reading palette from framebuffer, using default palette"); - createPalette(startcmap, vinfo, finfo); - } - int bits_used = 0; - for(loopc=0;loopc> 8, - startcmap.green[loopc] >> 8, - startcmap.blue[loopc] >> 8); - bits_used |= startcmap.red[loopc] - | startcmap.green[loopc] - | startcmap.blue[loopc]; - } - // WORKAROUND: Some framebuffer drivers only return 8 bit - // color values, so we need to not bit shift them.. - if ((bits_used & 0x00ff) && !(bits_used & 0xff00)) { - for(loopc=0;loopcopenTty(); - - // Grab current mode so we can reset it - fb_var_screeninfo vinfo; - fb_fix_screeninfo finfo; - //####################### - // Shut up Valgrind - memset(&vinfo, 0, sizeof(vinfo)); - memset(&finfo, 0, sizeof(finfo)); - //####################### - - if (ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { - perror("QLinuxFbScreen::initDevice"); - qFatal("Error reading variable information in card init"); - return false; - } - -#ifdef DEBUG_VINFO - qDebug("Greyscale %d",vinfo.grayscale); - qDebug("Nonstd %d",vinfo.nonstd); - qDebug("Red %d %d %d",vinfo.red.offset,vinfo.red.length, - vinfo.red.msb_right); - qDebug("Green %d %d %d",vinfo.green.offset,vinfo.green.length, - vinfo.green.msb_right); - qDebug("Blue %d %d %d",vinfo.blue.offset,vinfo.blue.length, - vinfo.blue.msb_right); - qDebug("Transparent %d %d %d",vinfo.transp.offset,vinfo.transp.length, - vinfo.transp.msb_right); -#endif - - d_ptr->startupw=vinfo.xres; - d_ptr->startuph=vinfo.yres; - d_ptr->startupd=vinfo.bits_per_pixel; - grayscale = vinfo.grayscale; - - if (ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { - perror("QLinuxFbScreen::initDevice"); - qCritical("Error reading fixed information in card init"); - // It's not an /error/ as such, though definitely a bad sign - // so we return true - return true; - } - -#ifdef __i386__ - // Now init mtrr - if(!::getenv("QWS_NOMTRR")) { - int mfd=QT_OPEN("/proc/mtrr",O_WRONLY,0); - // MTRR entry goes away when file is closed - i.e. - // hopefully when QWS is killed - if(mfd != -1) { - mtrr_sentry sentry; - sentry.base=(unsigned long int)finfo.smem_start; - //qDebug("Physical framebuffer address %p",(void*)finfo.smem_start); - // Size needs to be in 4k chunks, but that's not always - // what we get thanks to graphics card registers. Write combining - // these is Not Good, so we write combine what we can - // (which is not much - 4 megs on an 8 meg card, it seems) - unsigned int size=finfo.smem_len; - size=size >> 22; - size=size << 22; - sentry.size=size; - sentry.type=MTRR_TYPE_WRCOMB; - if(ioctl(mfd,MTRRIOC_ADD_ENTRY,&sentry)==-1) { - //printf("Couldn't add mtrr entry for %lx %lx, %s\n", - //sentry.base,sentry.size,strerror(errno)); - } - } - - // Should we close mfd here? - //QT_CLOSE(mfd); - } -#endif - if ((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4) || (finfo.visual==FB_VISUAL_DIRECTCOLOR)) - { - fb_cmap cmap; - createPalette(cmap, vinfo, finfo); - if (ioctl(d_ptr->fd, FBIOPUTCMAP, &cmap)) { - perror("QLinuxFbScreen::initDevice"); - qWarning("Error writing palette to framebuffer"); - } - free(cmap.red); - free(cmap.green); - free(cmap.blue); - free(cmap.transp); - } - -#if 0 - if (canaccel) { - *entryp=0; - *lowest = mapsize; - insert_entry(*entryp, *lowest, *lowest); // dummy entry to mark start - } - - shared->fifocount = 0; - shared->buffer_offset = 0xffffffff; // 0 would be a sensible offset (screen) - shared->linestep = 0; - shared->cliptop = 0xffffffff; - shared->clipleft = 0xffffffff; - shared->clipright = 0xffffffff; - shared->clipbottom = 0xffffffff; - shared->rop = 0xffffffff; -#endif - -#ifdef QT_QWS_DEPTH_GENERIC - if (pixelFormat() == QImage::Format_Invalid && screencols == 0 - && d_ptr->doGenericColors) - { - qt_set_generic_blit(this, vinfo.bits_per_pixel, - vinfo.red.length, vinfo.green.length, - vinfo.blue.length, vinfo.transp.length, - vinfo.red.offset, vinfo.green.offset, - vinfo.blue.offset, vinfo.transp.offset); - } -#endif - -#if 0 -#ifndef QT_NO_QWS_CURSOR - QScreenCursor::initSoftwareCursor(); -#endif -#endif - blank(false); - - return true; -} - -void QLinuxFbIntegration::setPixelFormat(struct fb_var_screeninfo info) -{ - const fb_bitfield rgba[4] = { info.red, info.green, - info.blue, info.transp }; - - QImage::Format format = QImage::Format_Invalid; - - switch (d) { - case 32: { - const fb_bitfield argb8888[4] = {{16, 8, 0}, {8, 8, 0}, - {0, 8, 0}, {24, 8, 0}}; - const fb_bitfield abgr8888[4] = {{0, 8, 0}, {8, 8, 0}, - {16, 8, 0}, {24, 8, 0}}; - if (memcmp(rgba, argb8888, 4 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_ARGB32; - } else if (memcmp(rgba, argb8888, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB32; - } else if (memcmp(rgba, abgr8888, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB32; - pixeltype = BGRPixel; - } - break; - } - case 24: { - const fb_bitfield rgb888[4] = {{16, 8, 0}, {8, 8, 0}, - {0, 8, 0}, {0, 0, 0}}; - const fb_bitfield bgr888[4] = {{0, 8, 0}, {8, 8, 0}, - {16, 8, 0}, {0, 0, 0}}; - if (memcmp(rgba, rgb888, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB888; - } else if (memcmp(rgba, bgr888, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB888; - pixeltype = BGRPixel; - } - break; - } - case 18: { - const fb_bitfield rgb666[4] = {{12, 6, 0}, {6, 6, 0}, - {0, 6, 0}, {0, 0, 0}}; - if (memcmp(rgba, rgb666, 3 * sizeof(fb_bitfield)) == 0) - format = QImage::Format_RGB666; - break; - } - case 16: { - const fb_bitfield rgb565[4] = {{11, 5, 0}, {5, 6, 0}, - {0, 5, 0}, {0, 0, 0}}; - const fb_bitfield bgr565[4] = {{0, 5, 0}, {5, 6, 0}, - {11, 5, 0}, {0, 0, 0}}; - if (memcmp(rgba, rgb565, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB16; - } else if (memcmp(rgba, bgr565, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB16; - pixeltype = BGRPixel; - } - break; - } - case 15: { - const fb_bitfield rgb1555[4] = {{10, 5, 0}, {5, 5, 0}, - {0, 5, 0}, {15, 1, 0}}; - const fb_bitfield bgr1555[4] = {{0, 5, 0}, {5, 5, 0}, - {10, 5, 0}, {15, 1, 0}}; - if (memcmp(rgba, rgb1555, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB555; - } else if (memcmp(rgba, bgr1555, 3 * sizeof(fb_bitfield)) == 0) { - format = QImage::Format_RGB555; - pixeltype = BGRPixel; - } - break; - } - case 12: { - const fb_bitfield rgb444[4] = {{8, 4, 0}, {4, 4, 0}, - {0, 4, 0}, {0, 0, 0}}; - if (memcmp(rgba, rgb444, 3 * sizeof(fb_bitfield)) == 0) - format = QImage::Format_RGB444; - break; - } - case 8: - break; - case 1: - format = QImage::Format_Mono; //###: LSB??? - break; - default: - break; - } - - screenFormat = format; -} - -void QLinuxFbIntegration::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) -{ - if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { - screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; - cmap.start=0; - cmap.len=screencols; - cmap.red=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - cmap.green=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - cmap.blue=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - cmap.transp=(unsigned short int *) - malloc(sizeof(unsigned short int)*screencols); - - if (screencols==16) { - if (finfo.type == FB_TYPE_PACKED_PIXELS) { - // We'll setup a grayscale cmap for 4bpp linear - int val = 0; - for (int idx = 0; idx < 16; ++idx, val += 17) { - cmap.red[idx] = (val<<8)|val; - cmap.green[idx] = (val<<8)|val; - cmap.blue[idx] = (val<<8)|val; - screenclut[idx]=qRgb(val, val, val); - } - } else { - // Default 16 colour palette - // Green is now trolltech green so certain images look nicer - // black d_gray l_gray white red green blue cyan magenta yellow - unsigned char reds[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0xFF, 0xA2, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x82 }; - unsigned char greens[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0xC5, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F }; - unsigned char blues[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0x11, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00 }; - - for (int idx = 0; idx < 16; ++idx) { - cmap.red[idx] = ((reds[idx]) << 8)|reds[idx]; - cmap.green[idx] = ((greens[idx]) << 8)|greens[idx]; - cmap.blue[idx] = ((blues[idx]) << 8)|blues[idx]; - cmap.transp[idx] = 0; - screenclut[idx]=qRgb(reds[idx], greens[idx], blues[idx]); - } - } - } else { - if (grayscale) { - // Build grayscale palette - int i; - for(i=0;iblank == on) - return; - -#if defined(QT_QWS_IPAQ) - if (on) - system("apm -suspend"); -#else - if (d_ptr->fd == -1) - return; -// Some old kernel versions don't have this. These defines should go -// away eventually -#if defined(FBIOBLANK) -#if defined(VESA_POWERDOWN) && defined(VESA_NO_BLANKING) - ioctl(d_ptr->fd, FBIOBLANK, on ? VESA_POWERDOWN : VESA_NO_BLANKING); -#else - ioctl(d_ptr->fd, FBIOBLANK, on ? 1 : 0); -#endif -#endif -#endif - - d_ptr->blank = on; -} - -QPixmapData *QLinuxFbIntegration::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QLinuxFbIntegration::createWindowSurface(QWidget *widget, WId) const -{ - QFbWindowSurface * surface = - new QFbWindowSurface(mPrimaryScreen, widget); - return surface; -} - -QPlatformWindow *QLinuxFbIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const -{ - QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); - mPrimaryScreen->addWindow(w); - return w; -} - -QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w, - int h, int lstep, QImage::Format screenFormat) : compositePainter(0) -{ - data = d; - mGeometry = QRect(0,0,w,h); - bytesPerLine = lstep; - mFormat = screenFormat; - mDepth = 16; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - cursor = new QGraphicsSystemSoftwareCursor(this); -} - -void QLinuxFbScreen::setGeometry(QRect rect) -{ - mGeometry = rect; - delete mFbScreenImage; - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - delete compositePainter; - compositePainter = 0; - - delete mScreenImage; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); -} - -void QLinuxFbScreen::setFormat(QImage::Format format) -{ - mFormat = format; - delete mFbScreenImage; - mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), - bytesPerLine, mFormat); - delete compositePainter; - compositePainter = 0; - - delete mScreenImage; - mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), - mFormat); -} - -QRegion QLinuxFbScreen::doRedraw() -{ - QRegion touched; - touched = QFbScreen::doRedraw(); - - if (!compositePainter) { - compositePainter = new QPainter(mFbScreenImage); - } - - QVector rects = touched.rects(); - for (int i = 0; i < rects.size(); i++) - compositePainter->drawImage(rects[i], *mScreenImage, rects[i]); - return touched; -} -QT_END_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h b/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h deleted file mode 100644 index dc61df5..0000000 --- a/src/plugins/platforms/linuxfb/qgraphicssystem_linuxfb.h +++ /dev/null @@ -1,129 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_LINUXFB_H -#define QGRAPHICSSYSTEM_LINUXFB_H - -#include -#include "../fb_base/fb_base.h" - -QT_BEGIN_NAMESPACE - -class QLinuxFbScreen : public QFbScreen -{ -public: - QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); - void setGeometry(QRect rect); - void setFormat(QImage::Format format); - -public slots: - QRegion doRedraw(); - -private: - QImage * mFbScreenImage; - uchar * data; - int bytesPerLine; - - QPainter *compositePainter; -}; - -class QLinuxFbIntegrationPrivate; -struct fb_cmap; -struct fb_var_screeninfo; -struct fb_fix_screeninfo; - -class QLinuxFbIntegration : public QPlatformIntegration -{ -public: - QLinuxFbIntegration(); - ~QLinuxFbIntegration(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId WinId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId WinId) const; - - QList screens() const { return mScreens; } - -private: - QLinuxFbScreen *mPrimaryScreen; - QList mScreens; - QLinuxFbIntegrationPrivate *d_ptr; - - enum PixelType { NormalPixel, BGRPixel }; - - QRgb screenclut[256]; - int screencols; - - uchar * data; - - QImage::Format screenFormat; - int w; - int lstep; - int h; - int d; - PixelType pixeltype; - bool grayscale; - - int dw; - int dh; - - int size; // Screen size - int mapsize; // Total mapped memory - - int displayId; - - int physWidth; - int physHeight; - - bool canaccel; - int dataoffset; - int cacheStart; - - bool connect(const QString &displaySpec); - bool initDevice(); - void setPixelFormat(struct fb_var_screeninfo); - void createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo); - void blank(bool on); -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp new file mode 100644 index 0000000..391e105 --- /dev/null +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -0,0 +1,859 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qlinuxfbintegration.h" +#include "../fb_base/fb_base.h" +#include +#include // overrides QT_OPEN +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if !defined(Q_OS_DARWIN) && !defined(Q_OS_FREEBSD) +#include + +#ifdef __i386__ +#include +#endif +#endif + +QT_BEGIN_NAMESPACE + +class QLinuxFbIntegrationPrivate +{ +public: + QLinuxFbIntegrationPrivate(); + ~QLinuxFbIntegrationPrivate(); + + void openTty(); + void closeTty(); + + int fd; + int startupw; + int startuph; + int startupd; + bool blank; + + bool doGraphicsMode; +#ifdef QT_QWS_DEPTH_GENERIC + bool doGenericColors; +#endif + int ttyfd; + long oldKdMode; + QString ttyDevice; + QString displaySpec; +}; + +QLinuxFbIntegrationPrivate::QLinuxFbIntegrationPrivate() + : fd(-1), blank(true), doGraphicsMode(true), +#ifdef QT_QWS_DEPTH_GENERIC + doGenericColors(false), +#endif + ttyfd(-1), oldKdMode(KD_TEXT) +{ +} + +QLinuxFbIntegrationPrivate::~QLinuxFbIntegrationPrivate() +{ + closeTty(); +} + +void QLinuxFbIntegrationPrivate::openTty() +{ + const char *const devs[] = {"/dev/tty0", "/dev/tty", "/dev/console", 0}; + + if (ttyDevice.isEmpty()) { + for (const char * const *dev = devs; *dev; ++dev) { + ttyfd = QT_OPEN(*dev, O_RDWR); + if (ttyfd != -1) + break; + } + } else { + ttyfd = QT_OPEN(ttyDevice.toAscii().constData(), O_RDWR); + } + + if (ttyfd == -1) + return; + + if (doGraphicsMode) { + ioctl(ttyfd, KDGETMODE, &oldKdMode); + if (oldKdMode != KD_GRAPHICS) { + int ret = ioctl(ttyfd, KDSETMODE, KD_GRAPHICS); + if (ret == -1) + doGraphicsMode = false; + } + } + + // No blankin' screen, no blinkin' cursor!, no cursor! + const char termctl[] = "\033[9;0]\033[?33l\033[?25l\033[?1c"; + QT_WRITE(ttyfd, termctl, sizeof(termctl)); +} + +void QLinuxFbIntegrationPrivate::closeTty() +{ + if (ttyfd == -1) + return; + + if (doGraphicsMode) + ioctl(ttyfd, KDSETMODE, oldKdMode); + + // Blankin' screen, blinkin' cursor! + const char termctl[] = "\033[9;15]\033[?33h\033[?25h\033[?0c"; + QT_WRITE(ttyfd, termctl, sizeof(termctl)); + + QT_CLOSE(ttyfd); + ttyfd = -1; +} + +QLinuxFbIntegration::QLinuxFbIntegration() +{ + d_ptr = new QLinuxFbIntegrationPrivate(); + + // XXX + QString displaySpec = QString::fromLatin1(qgetenv("QWS_DISPLAY")); + + if (!connect(displaySpec)) + qFatal("QLinuxFbIntegration: could not initialize screen"); + initDevice(); + + // Create a QImage directly on the screen's framebuffer. + // This is the blit target for copying windows to the screen. + mPrimaryScreen = new QLinuxFbScreen(data, w, h, lstep, + screenFormat); + mPrimaryScreen->setPhysicalSize(QSize(physWidth, physHeight)); + mScreens.append(mPrimaryScreen); +} + +QLinuxFbIntegration::~QLinuxFbIntegration() +{ + delete mPrimaryScreen; + delete d_ptr; +} + +bool QLinuxFbIntegration::connect(const QString &displaySpec) +{ + const QStringList args = displaySpec.split(QLatin1Char(':')); + + if (args.contains(QLatin1String("nographicsmodeswitch"))) + d_ptr->doGraphicsMode = false; + +#ifdef QT_QWS_DEPTH_GENERIC + if (args.contains(QLatin1String("genericcolors"))) + d_ptr->doGenericColors = true; +#endif + + QRegExp ttyRegExp(QLatin1String("tty=(.*)")); + if (args.indexOf(ttyRegExp) != -1) + d_ptr->ttyDevice = ttyRegExp.cap(1); + +#if 0 +#if Q_BYTE_ORDER == Q_BIG_ENDIAN +#ifndef QT_QWS_FRAMEBUFFER_LITTLE_ENDIAN + if (args.contains(QLatin1String("littleendian"))) +#endif + QScreen::setFrameBufferLittleEndian(true); +#endif +#endif + + // Check for explicitly specified device + const int len = 8; // "/dev/fbx" + int m = displaySpec.indexOf(QLatin1String("/dev/fb")); + + QString dev; + if (m > 0) + dev = displaySpec.mid(m, len); + else + dev = QLatin1String("/dev/fb0"); + + if (access(dev.toLatin1().constData(), R_OK|W_OK) == 0) + d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDWR); + if (d_ptr->fd == -1) { + if (access(dev.toLatin1().constData(), R_OK) == 0) + d_ptr->fd = QT_OPEN(dev.toLatin1().constData(), O_RDONLY); + if (d_ptr->fd == 1) { + qWarning("Error opening framebuffer device %s", qPrintable(dev)); + return false; + } + } + + fb_fix_screeninfo finfo; + fb_var_screeninfo vinfo; + //####################### + // Shut up Valgrind + memset(&vinfo, 0, sizeof(vinfo)); + memset(&finfo, 0, sizeof(finfo)); + //####################### + + /* Get fixed screen information */ + if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { + perror("QLinuxFbIntegration::connect"); + qWarning("Error reading fixed information"); + return false; + } + + if (finfo.type == FB_TYPE_VGA_PLANES) { + qWarning("VGA16 video mode not supported"); + return false; + } + + /* Get variable screen information */ + if (d_ptr->fd != -1 && ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { + perror("QLinuxFbIntegration::connect"); + qWarning("Error reading variable information"); + return false; + } + + grayscale = vinfo.grayscale; + d = vinfo.bits_per_pixel; + if (d == 24) { + d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; + if (d <= 0) + d = 24; // reset if color component lengths are not reported + } else if (d == 16) { + d = vinfo.red.length + vinfo.green.length + vinfo.blue.length; + if (d <= 0) + d = 16; + } + lstep = finfo.line_length; + + int xoff = vinfo.xoffset; + int yoff = vinfo.yoffset; + const char* qwssize; + if((qwssize=::getenv("QWS_SIZE")) && sscanf(qwssize,"%dx%d",&w,&h)==2) { + if (d_ptr->fd != -1) { + if ((uint)w > vinfo.xres) w = vinfo.xres; + if ((uint)h > vinfo.yres) h = vinfo.yres; + } + dw=w; + dh=h; + int xxoff, yyoff; + if (sscanf(qwssize, "%*dx%*d+%d+%d", &xxoff, &yyoff) == 2) { + if (xxoff < 0 || xxoff + w > (int)(vinfo.xres)) + xxoff = vinfo.xres - w; + if (yyoff < 0 || yyoff + h > (int)(vinfo.yres)) + yyoff = vinfo.yres - h; + xoff += xxoff; + yoff += yyoff; + } else { + xoff += (vinfo.xres - w)/2; + yoff += (vinfo.yres - h)/2; + } + } else { + dw=w=vinfo.xres; + dh=h=vinfo.yres; + } + + if (w == 0 || h == 0) { + qWarning("QLinuxFbIntegration::connect(): Unable to find screen geometry, " + "will use 320x240."); + dw = w = 320; + dh = h = 240; + } + + setPixelFormat(vinfo); + + // Handle display physical size spec. + QStringList displayArgs = displaySpec.split(QLatin1Char(':')); + QRegExp mmWidthRx(QLatin1String("mmWidth=?(\\d+)")); + int dimIdxW = displayArgs.indexOf(mmWidthRx); + QRegExp mmHeightRx(QLatin1String("mmHeight=?(\\d+)")); + int dimIdxH = displayArgs.indexOf(mmHeightRx); + if (dimIdxW >= 0) { + mmWidthRx.exactMatch(displayArgs.at(dimIdxW)); + physWidth = mmWidthRx.cap(1).toInt(); + if (dimIdxH < 0) + physHeight = dh*physWidth/dw; + } + if (dimIdxH >= 0) { + mmHeightRx.exactMatch(displayArgs.at(dimIdxH)); + physHeight = mmHeightRx.cap(1).toInt(); + if (dimIdxW < 0) + physWidth = dw*physHeight/dh; + } + if (dimIdxW < 0 && dimIdxH < 0) { + if (vinfo.width != 0 && vinfo.height != 0 + && vinfo.width != UINT_MAX && vinfo.height != UINT_MAX) { + physWidth = vinfo.width; + physHeight = vinfo.height; + } else { + const int dpi = 72; + physWidth = qRound(dw * 25.4 / dpi); + physHeight = qRound(dh * 25.4 / dpi); + } + } + + dataoffset = yoff * lstep + xoff * d / 8; + //qDebug("Using %dx%dx%d screen",w,h,d); + + /* Figure out the size of the screen in bytes */ + size = h * lstep; + + mapsize = finfo.smem_len; + + data = (unsigned char *)-1; + if (d_ptr->fd != -1) + data = (unsigned char *)mmap(0, mapsize, PROT_READ | PROT_WRITE, + MAP_SHARED, d_ptr->fd, 0); + + if ((long)data == -1) { + perror("QLinuxFbIntegration::connect"); + qWarning("Error: failed to map framebuffer device to memory."); + return false; + } else { + data += dataoffset; + } + +#if 0 + canaccel = useOffscreen(); + if(canaccel) + setupOffScreen(); +#endif + canaccel = false; + + // Now read in palette + if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { + screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; + int loopc; + fb_cmap startcmap; + startcmap.start=0; + startcmap.len=screencols; + startcmap.red=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.green=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.blue=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + startcmap.transp=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + if (d_ptr->fd == -1 || ioctl(d_ptr->fd, FBIOGETCMAP, &startcmap)) { + perror("QLinuxFbIntegration::connect"); + qWarning("Error reading palette from framebuffer, using default palette"); + createPalette(startcmap, vinfo, finfo); + } + int bits_used = 0; + for(loopc=0;loopc> 8, + startcmap.green[loopc] >> 8, + startcmap.blue[loopc] >> 8); + bits_used |= startcmap.red[loopc] + | startcmap.green[loopc] + | startcmap.blue[loopc]; + } + // WORKAROUND: Some framebuffer drivers only return 8 bit + // color values, so we need to not bit shift them.. + if ((bits_used & 0x00ff) && !(bits_used & 0xff00)) { + for(loopc=0;loopcopenTty(); + + // Grab current mode so we can reset it + fb_var_screeninfo vinfo; + fb_fix_screeninfo finfo; + //####################### + // Shut up Valgrind + memset(&vinfo, 0, sizeof(vinfo)); + memset(&finfo, 0, sizeof(finfo)); + //####################### + + if (ioctl(d_ptr->fd, FBIOGET_VSCREENINFO, &vinfo)) { + perror("QLinuxFbScreen::initDevice"); + qFatal("Error reading variable information in card init"); + return false; + } + +#ifdef DEBUG_VINFO + qDebug("Greyscale %d",vinfo.grayscale); + qDebug("Nonstd %d",vinfo.nonstd); + qDebug("Red %d %d %d",vinfo.red.offset,vinfo.red.length, + vinfo.red.msb_right); + qDebug("Green %d %d %d",vinfo.green.offset,vinfo.green.length, + vinfo.green.msb_right); + qDebug("Blue %d %d %d",vinfo.blue.offset,vinfo.blue.length, + vinfo.blue.msb_right); + qDebug("Transparent %d %d %d",vinfo.transp.offset,vinfo.transp.length, + vinfo.transp.msb_right); +#endif + + d_ptr->startupw=vinfo.xres; + d_ptr->startuph=vinfo.yres; + d_ptr->startupd=vinfo.bits_per_pixel; + grayscale = vinfo.grayscale; + + if (ioctl(d_ptr->fd, FBIOGET_FSCREENINFO, &finfo)) { + perror("QLinuxFbScreen::initDevice"); + qCritical("Error reading fixed information in card init"); + // It's not an /error/ as such, though definitely a bad sign + // so we return true + return true; + } + +#ifdef __i386__ + // Now init mtrr + if(!::getenv("QWS_NOMTRR")) { + int mfd=QT_OPEN("/proc/mtrr",O_WRONLY,0); + // MTRR entry goes away when file is closed - i.e. + // hopefully when QWS is killed + if(mfd != -1) { + mtrr_sentry sentry; + sentry.base=(unsigned long int)finfo.smem_start; + //qDebug("Physical framebuffer address %p",(void*)finfo.smem_start); + // Size needs to be in 4k chunks, but that's not always + // what we get thanks to graphics card registers. Write combining + // these is Not Good, so we write combine what we can + // (which is not much - 4 megs on an 8 meg card, it seems) + unsigned int size=finfo.smem_len; + size=size >> 22; + size=size << 22; + sentry.size=size; + sentry.type=MTRR_TYPE_WRCOMB; + if(ioctl(mfd,MTRRIOC_ADD_ENTRY,&sentry)==-1) { + //printf("Couldn't add mtrr entry for %lx %lx, %s\n", + //sentry.base,sentry.size,strerror(errno)); + } + } + + // Should we close mfd here? + //QT_CLOSE(mfd); + } +#endif + if ((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4) || (finfo.visual==FB_VISUAL_DIRECTCOLOR)) + { + fb_cmap cmap; + createPalette(cmap, vinfo, finfo); + if (ioctl(d_ptr->fd, FBIOPUTCMAP, &cmap)) { + perror("QLinuxFbScreen::initDevice"); + qWarning("Error writing palette to framebuffer"); + } + free(cmap.red); + free(cmap.green); + free(cmap.blue); + free(cmap.transp); + } + +#if 0 + if (canaccel) { + *entryp=0; + *lowest = mapsize; + insert_entry(*entryp, *lowest, *lowest); // dummy entry to mark start + } + + shared->fifocount = 0; + shared->buffer_offset = 0xffffffff; // 0 would be a sensible offset (screen) + shared->linestep = 0; + shared->cliptop = 0xffffffff; + shared->clipleft = 0xffffffff; + shared->clipright = 0xffffffff; + shared->clipbottom = 0xffffffff; + shared->rop = 0xffffffff; +#endif + +#ifdef QT_QWS_DEPTH_GENERIC + if (pixelFormat() == QImage::Format_Invalid && screencols == 0 + && d_ptr->doGenericColors) + { + qt_set_generic_blit(this, vinfo.bits_per_pixel, + vinfo.red.length, vinfo.green.length, + vinfo.blue.length, vinfo.transp.length, + vinfo.red.offset, vinfo.green.offset, + vinfo.blue.offset, vinfo.transp.offset); + } +#endif + +#if 0 +#ifndef QT_NO_QWS_CURSOR + QScreenCursor::initSoftwareCursor(); +#endif +#endif + blank(false); + + return true; +} + +void QLinuxFbIntegration::setPixelFormat(struct fb_var_screeninfo info) +{ + const fb_bitfield rgba[4] = { info.red, info.green, + info.blue, info.transp }; + + QImage::Format format = QImage::Format_Invalid; + + switch (d) { + case 32: { + const fb_bitfield argb8888[4] = {{16, 8, 0}, {8, 8, 0}, + {0, 8, 0}, {24, 8, 0}}; + const fb_bitfield abgr8888[4] = {{0, 8, 0}, {8, 8, 0}, + {16, 8, 0}, {24, 8, 0}}; + if (memcmp(rgba, argb8888, 4 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_ARGB32; + } else if (memcmp(rgba, argb8888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB32; + } else if (memcmp(rgba, abgr8888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB32; + pixeltype = BGRPixel; + } + break; + } + case 24: { + const fb_bitfield rgb888[4] = {{16, 8, 0}, {8, 8, 0}, + {0, 8, 0}, {0, 0, 0}}; + const fb_bitfield bgr888[4] = {{0, 8, 0}, {8, 8, 0}, + {16, 8, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB888; + } else if (memcmp(rgba, bgr888, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB888; + pixeltype = BGRPixel; + } + break; + } + case 18: { + const fb_bitfield rgb666[4] = {{12, 6, 0}, {6, 6, 0}, + {0, 6, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb666, 3 * sizeof(fb_bitfield)) == 0) + format = QImage::Format_RGB666; + break; + } + case 16: { + const fb_bitfield rgb565[4] = {{11, 5, 0}, {5, 6, 0}, + {0, 5, 0}, {0, 0, 0}}; + const fb_bitfield bgr565[4] = {{0, 5, 0}, {5, 6, 0}, + {11, 5, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb565, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB16; + } else if (memcmp(rgba, bgr565, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB16; + pixeltype = BGRPixel; + } + break; + } + case 15: { + const fb_bitfield rgb1555[4] = {{10, 5, 0}, {5, 5, 0}, + {0, 5, 0}, {15, 1, 0}}; + const fb_bitfield bgr1555[4] = {{0, 5, 0}, {5, 5, 0}, + {10, 5, 0}, {15, 1, 0}}; + if (memcmp(rgba, rgb1555, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB555; + } else if (memcmp(rgba, bgr1555, 3 * sizeof(fb_bitfield)) == 0) { + format = QImage::Format_RGB555; + pixeltype = BGRPixel; + } + break; + } + case 12: { + const fb_bitfield rgb444[4] = {{8, 4, 0}, {4, 4, 0}, + {0, 4, 0}, {0, 0, 0}}; + if (memcmp(rgba, rgb444, 3 * sizeof(fb_bitfield)) == 0) + format = QImage::Format_RGB444; + break; + } + case 8: + break; + case 1: + format = QImage::Format_Mono; //###: LSB??? + break; + default: + break; + } + + screenFormat = format; +} + +void QLinuxFbIntegration::createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo) +{ + if((vinfo.bits_per_pixel==8) || (vinfo.bits_per_pixel==4)) { + screencols= (vinfo.bits_per_pixel==8) ? 256 : 16; + cmap.start=0; + cmap.len=screencols; + cmap.red=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.green=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.blue=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + cmap.transp=(unsigned short int *) + malloc(sizeof(unsigned short int)*screencols); + + if (screencols==16) { + if (finfo.type == FB_TYPE_PACKED_PIXELS) { + // We'll setup a grayscale cmap for 4bpp linear + int val = 0; + for (int idx = 0; idx < 16; ++idx, val += 17) { + cmap.red[idx] = (val<<8)|val; + cmap.green[idx] = (val<<8)|val; + cmap.blue[idx] = (val<<8)|val; + screenclut[idx]=qRgb(val, val, val); + } + } else { + // Default 16 colour palette + // Green is now trolltech green so certain images look nicer + // black d_gray l_gray white red green blue cyan magenta yellow + unsigned char reds[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0xFF, 0xA2, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x00, 0x00, 0x00, 0x82 }; + unsigned char greens[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0xC5, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x7F, 0x7F, 0x7F }; + unsigned char blues[16] = { 0x00, 0x7F, 0xBF, 0xFF, 0x00, 0x11, 0xFF, 0x00, 0xFF, 0xFF, 0x00, 0x7F, 0x7F, 0x7F, 0x00, 0x00 }; + + for (int idx = 0; idx < 16; ++idx) { + cmap.red[idx] = ((reds[idx]) << 8)|reds[idx]; + cmap.green[idx] = ((greens[idx]) << 8)|greens[idx]; + cmap.blue[idx] = ((blues[idx]) << 8)|blues[idx]; + cmap.transp[idx] = 0; + screenclut[idx]=qRgb(reds[idx], greens[idx], blues[idx]); + } + } + } else { + if (grayscale) { + // Build grayscale palette + int i; + for(i=0;iblank == on) + return; + +#if defined(QT_QWS_IPAQ) + if (on) + system("apm -suspend"); +#else + if (d_ptr->fd == -1) + return; +// Some old kernel versions don't have this. These defines should go +// away eventually +#if defined(FBIOBLANK) +#if defined(VESA_POWERDOWN) && defined(VESA_NO_BLANKING) + ioctl(d_ptr->fd, FBIOBLANK, on ? VESA_POWERDOWN : VESA_NO_BLANKING); +#else + ioctl(d_ptr->fd, FBIOBLANK, on ? 1 : 0); +#endif +#endif +#endif + + d_ptr->blank = on; +} + +QPixmapData *QLinuxFbIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QLinuxFbIntegration::createWindowSurface(QWidget *widget, WId) const +{ + QFbWindowSurface * surface = + new QFbWindowSurface(mPrimaryScreen, widget); + return surface; +} + +QPlatformWindow *QLinuxFbIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const +{ + QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); + mPrimaryScreen->addWindow(w); + return w; +} + +QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w, + int h, int lstep, QImage::Format screenFormat) : compositePainter(0) +{ + data = d; + mGeometry = QRect(0,0,w,h); + bytesPerLine = lstep; + mFormat = screenFormat; + mDepth = 16; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + cursor = new QGraphicsSystemSoftwareCursor(this); +} + +void QLinuxFbScreen::setGeometry(QRect rect) +{ + mGeometry = rect; + delete mFbScreenImage; + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + delete compositePainter; + compositePainter = 0; + + delete mScreenImage; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); +} + +void QLinuxFbScreen::setFormat(QImage::Format format) +{ + mFormat = format; + delete mFbScreenImage; + mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), + bytesPerLine, mFormat); + delete compositePainter; + compositePainter = 0; + + delete mScreenImage; + mScreenImage = new QImage(mGeometry.width(), mGeometry.height(), + mFormat); +} + +QRegion QLinuxFbScreen::doRedraw() +{ + QRegion touched; + touched = QFbScreen::doRedraw(); + + if (!compositePainter) { + compositePainter = new QPainter(mFbScreenImage); + } + + QVector rects = touched.rects(); + for (int i = 0; i < rects.size(); i++) + compositePainter->drawImage(rects[i], *mScreenImage, rects[i]); + return touched; +} +QT_END_NAMESPACE diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h new file mode 100644 index 0000000..dc61df5 --- /dev/null +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h @@ -0,0 +1,129 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_LINUXFB_H +#define QGRAPHICSSYSTEM_LINUXFB_H + +#include +#include "../fb_base/fb_base.h" + +QT_BEGIN_NAMESPACE + +class QLinuxFbScreen : public QFbScreen +{ +public: + QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); + void setGeometry(QRect rect); + void setFormat(QImage::Format format); + +public slots: + QRegion doRedraw(); + +private: + QImage * mFbScreenImage; + uchar * data; + int bytesPerLine; + + QPainter *compositePainter; +}; + +class QLinuxFbIntegrationPrivate; +struct fb_cmap; +struct fb_var_screeninfo; +struct fb_fix_screeninfo; + +class QLinuxFbIntegration : public QPlatformIntegration +{ +public: + QLinuxFbIntegration(); + ~QLinuxFbIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId WinId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId WinId) const; + + QList screens() const { return mScreens; } + +private: + QLinuxFbScreen *mPrimaryScreen; + QList mScreens; + QLinuxFbIntegrationPrivate *d_ptr; + + enum PixelType { NormalPixel, BGRPixel }; + + QRgb screenclut[256]; + int screencols; + + uchar * data; + + QImage::Format screenFormat; + int w; + int lstep; + int h; + int d; + PixelType pixeltype; + bool grayscale; + + int dw; + int dh; + + int size; // Screen size + int mapsize; // Total mapped memory + + int displayId; + + int physWidth; + int physHeight; + + bool canaccel; + int dataoffset; + int cacheStart; + + bool connect(const QString &displaySpec); + bool initDevice(); + void setPixelFormat(struct fb_var_screeninfo); + void createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo); + void blank(bool on); +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/minimal/main.cpp b/src/plugins/platforms/minimal/main.cpp index 44c274b..4958468 100644 --- a/src/plugins/platforms/minimal/main.cpp +++ b/src/plugins/platforms/minimal/main.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include -#include "qplatformintegration_minimal.h" +#include "qminimalintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/minimal/minimal.pro b/src/plugins/platforms/minimal/minimal.pro index 6c97f07..438a88e 100644 --- a/src/plugins/platforms/minimal/minimal.pro +++ b/src/plugins/platforms/minimal/minimal.pro @@ -4,10 +4,10 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp \ - qplatformintegration_minimal.cpp \ - qwindowsurface_minimal.cpp -HEADERS = qplatformintegration_minimal.h \ - qwindowsurface_minimal.h + qminimalintegration.cpp \ + qminimalwindowsurface.cpp +HEADERS = qminimalintegration.h \ + qminimalwindowsurface.h target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp new file mode 100644 index 0000000..e947bf1 --- /dev/null +++ b/src/plugins/platforms/minimal/qminimalintegration.cpp @@ -0,0 +1,33 @@ +#include "qminimalintegration.h" +#include "qminimalwindowsurface.h" + +#include +#include + +QMinimalIntegration::QMinimalIntegration() +{ + QMinimalScreen *mPrimaryScreen = new QMinimalScreen(); + + mPrimaryScreen->mGeometry = QRect(0, 0, 240, 320); + mPrimaryScreen->mDepth = 16; + mPrimaryScreen->mFormat = QImage::Format_RGB16; + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QMinimalIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QPlatformWindow *QMinimalIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QPlatformWindow(widget); +} + +QWindowSurface *QMinimalIntegration::createWindowSurface(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QMinimalWindowSurface(widget); +} diff --git a/src/plugins/platforms/minimal/qminimalintegration.h b/src/plugins/platforms/minimal/qminimalintegration.h new file mode 100644 index 0000000..a2f7449 --- /dev/null +++ b/src/plugins/platforms/minimal/qminimalintegration.h @@ -0,0 +1,85 @@ + +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATION_MINIMAL_H +#define QPLATFORMINTEGRATION_MINIMAL_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QMinimalScreen : public QPlatformScreen +{ +public: + QMinimalScreen() + : mDepth(16), mFormat(QImage::Format_RGB16) {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; +}; + +class QMinimalIntegration : public QPlatformIntegration +{ +public: + QMinimalIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QList screens() const { return mScreens; } + +private: + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/minimal/qminimalwindowsurface.cpp b/src/plugins/platforms/minimal/qminimalwindowsurface.cpp new file mode 100644 index 0000000..ad5997e --- /dev/null +++ b/src/plugins/platforms/minimal/qminimalwindowsurface.cpp @@ -0,0 +1,85 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qminimalwindowsurface.h" +#include +#include + +QT_BEGIN_NAMESPACE + +QMinimalWindowSurface::QMinimalWindowSurface(QWidget *window) + : QWindowSurface(window) +{ + //qDebug() << "QMinimalWindowSurface::QMinimalWindowSurface:" << (long)this; +} + +QMinimalWindowSurface::~QMinimalWindowSurface() +{ +} + +QPaintDevice *QMinimalWindowSurface::paintDevice() +{ + //qDebug() << "QMinimalWindowSurface::paintDevice"; + return &mImage; +} + +void QMinimalWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + + static int c = 0; + QString filename = QString("output%1.png").arg(c++, 4, 10, QLatin1Char('0')); + qDebug() << "QMinimalWindowSurface::flush() saving contents to" << filename.toLocal8Bit().constData(); + mImage.save(filename); +} + +void QMinimalWindowSurface::resize(const QSize &size) +{ + //qDebug() << "QMinimalWindowSurface::setGeometry:" << (long)this << rect; + QWindowSurface::resize(size); + QImage::Format format = QApplicationPrivate::platformIntegration()->screens().first()->format(); + if (mImage.size() != size) + mImage = QImage(size, format); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimal/qminimalwindowsurface.h b/src/plugins/platforms/minimal/qminimalwindowsurface.h new file mode 100644 index 0000000..96f989d --- /dev/null +++ b/src/plugins/platforms/minimal/qminimalwindowsurface.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_MINIMAL_H +#define QWINDOWSURFACE_MINIMAL_H + +#include + +#include + +QT_BEGIN_NAMESPACE + +class QMinimalWindowSurface : public QWindowSurface +{ +public: + QMinimalWindowSurface(QWidget *window); + ~QMinimalWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize(const QSize &size); + +private: + QImage mImage; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp b/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp deleted file mode 100644 index 73e025c..0000000 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "qplatformintegration_minimal.h" -#include "qwindowsurface_minimal.h" - -#include -#include - -QMinimalIntegration::QMinimalIntegration() -{ - QMinimalScreen *mPrimaryScreen = new QMinimalScreen(); - - mPrimaryScreen->mGeometry = QRect(0, 0, 240, 320); - mPrimaryScreen->mDepth = 16; - mPrimaryScreen->mFormat = QImage::Format_RGB16; - - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QMinimalIntegration::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QPlatformWindow *QMinimalIntegration::createPlatformWindow(QWidget *widget, WId winId) const -{ - Q_UNUSED(winId); - return new QPlatformWindow(widget); -} - -QWindowSurface *QMinimalIntegration::createWindowSurface(QWidget *widget, WId winId) const -{ - Q_UNUSED(winId); - return new QMinimalWindowSurface(widget); -} diff --git a/src/plugins/platforms/minimal/qplatformintegration_minimal.h b/src/plugins/platforms/minimal/qplatformintegration_minimal.h deleted file mode 100644 index a2f7449..0000000 --- a/src/plugins/platforms/minimal/qplatformintegration_minimal.h +++ /dev/null @@ -1,85 +0,0 @@ - -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORMINTEGRATION_MINIMAL_H -#define QPLATFORMINTEGRATION_MINIMAL_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class QMinimalScreen : public QPlatformScreen -{ -public: - QMinimalScreen() - : mDepth(16), mFormat(QImage::Format_RGB16) {} - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - -public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; -}; - -class QMinimalIntegration : public QPlatformIntegration -{ -public: - QMinimalIntegration(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; - - QList screens() const { return mScreens; } - -private: - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp b/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp deleted file mode 100644 index 2f8b1f0..0000000 --- a/src/plugins/platforms/minimal/qwindowsurface_minimal.cpp +++ /dev/null @@ -1,85 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_minimal.h" -#include -#include - -QT_BEGIN_NAMESPACE - -QMinimalWindowSurface::QMinimalWindowSurface(QWidget *window) - : QWindowSurface(window) -{ - //qDebug() << "QMinimalWindowSurface::QMinimalWindowSurface:" << (long)this; -} - -QMinimalWindowSurface::~QMinimalWindowSurface() -{ -} - -QPaintDevice *QMinimalWindowSurface::paintDevice() -{ - //qDebug() << "QMinimalWindowSurface::paintDevice"; - return &mImage; -} - -void QMinimalWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); - - static int c = 0; - QString filename = QString("output%1.png").arg(c++, 4, 10, QLatin1Char('0')); - qDebug() << "QMinimalWindowSurface::flush() saving contents to" << filename.toLocal8Bit().constData(); - mImage.save(filename); -} - -void QMinimalWindowSurface::resize(const QSize &size) -{ - //qDebug() << "QMinimalWindowSurface::setGeometry:" << (long)this << rect; - QWindowSurface::resize(size); - QImage::Format format = QApplicationPrivate::platformIntegration()->screens().first()->format(); - if (mImage.size() != size) - mImage = QImage(size, format); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/minimal/qwindowsurface_minimal.h b/src/plugins/platforms/minimal/qwindowsurface_minimal.h deleted file mode 100644 index 96f989d..0000000 --- a/src/plugins/platforms/minimal/qwindowsurface_minimal.h +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_MINIMAL_H -#define QWINDOWSURFACE_MINIMAL_H - -#include - -#include - -QT_BEGIN_NAMESPACE - -class QMinimalWindowSurface : public QWindowSurface -{ -public: - QMinimalWindowSurface(QWidget *window); - ~QMinimalWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void resize(const QSize &size); - -private: - QImage mImage; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/qvfb/qvfb.pro b/src/plugins/platforms/qvfb/qvfb.pro index 4dec274..a560755 100644 --- a/src/plugins/platforms/qvfb/qvfb.pro +++ b/src/plugins/platforms/qvfb/qvfb.pro @@ -4,8 +4,8 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms -SOURCES = main.cpp qvfbintegration.cpp qwindowsurface_qvfb.cpp -HEADERS = qvfbintegration.h qwindowsurface_qvfb.h +SOURCES = main.cpp qvfbintegration.cpp qvfbwindowsurface.cpp +HEADERS = qvfbintegration.h qvfbwindowsurface.h target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/qvfb/qvfbintegration.cpp b/src/plugins/platforms/qvfb/qvfbintegration.cpp index e22c724..84ab9fb 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.cpp +++ b/src/plugins/platforms/qvfb/qvfbintegration.cpp @@ -53,7 +53,7 @@ #include #include "qvfbintegration.h" -#include "qwindowsurface_qvfb.h" +#include "qvfbwindowsurface.h" #include #include #include diff --git a/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp b/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp new file mode 100644 index 0000000..6699072 --- /dev/null +++ b/src/plugins/platforms/qvfb/qvfbwindowsurface.cpp @@ -0,0 +1,108 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "qvfbwindowsurface.h" +#include "qvfbintegration.h" +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QVFbWindowSurface::QVFbWindowSurface(//QVFbIntegration *graphicsSystem, + QVFbScreen *screen, QWidget *window) + : QWindowSurface(window), + mScreen(screen) +{ +} + +QVFbWindowSurface::~QVFbWindowSurface() +{ +} + +QPaintDevice *QVFbWindowSurface::paintDevice() +{ + return mScreen->screenImage(); +} + +void QVFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + +// QRect rect = geometry(); +// QPoint topLeft = rect.topLeft(); + + mScreen->setDirty(region.boundingRect()); +} + +void QVFbWindowSurface::resize(const QSize&) +{ + +// any size you like as long as it's full-screen... + + QRect rect(mScreen->availableGeometry()); + QWindowSurface::resize(rect.size()); +} + + +QVFbWindow::QVFbWindow(QVFbScreen *screen, QWidget *window) + : QPlatformWindow(window), + mScreen(screen) +{ +} + + +void QVFbWindow::setGeometry(const QRect &) +{ + +// any size you like as long as it's full-screen... + + QRect rect(mScreen->availableGeometry()); + QWindowSystemInterface::handleGeometryChange(this->widget(), rect); + + QPlatformWindow::setGeometry(rect); +} + + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/qvfb/qvfbwindowsurface.h b/src/plugins/platforms/qvfb/qvfbwindowsurface.h new file mode 100644 index 0000000..9228189 --- /dev/null +++ b/src/plugins/platforms/qvfb/qvfbwindowsurface.h @@ -0,0 +1,80 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_QVFB_H +#define QWINDOWSURFACE_QVFB_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QVFbIntegration; +class QVFbScreen; + +class QVFbWindowSurface : public QWindowSurface +{ +public: + QVFbWindowSurface(QVFbScreen *screen, QWidget *window); + ~QVFbWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize(const QSize &size); + +private: + QVFbScreen *mScreen; +}; + +class QVFbWindow : public QPlatformWindow +{ +public: + QVFbWindow(QVFbScreen *screen, QWidget *window); + void setGeometry(const QRect &rect); + +private: + QVFbScreen *mScreen; +}; + + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp deleted file mode 100644 index b46d9c0..0000000 --- a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - -#include "qwindowsurface_qvfb.h" -#include "qvfbintegration.h" -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QVFbWindowSurface::QVFbWindowSurface(//QVFbIntegration *graphicsSystem, - QVFbScreen *screen, QWidget *window) - : QWindowSurface(window), - mScreen(screen) -{ -} - -QVFbWindowSurface::~QVFbWindowSurface() -{ -} - -QPaintDevice *QVFbWindowSurface::paintDevice() -{ - return mScreen->screenImage(); -} - -void QVFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(offset); - -// QRect rect = geometry(); -// QPoint topLeft = rect.topLeft(); - - mScreen->setDirty(region.boundingRect()); -} - -void QVFbWindowSurface::resize(const QSize&) -{ - -// any size you like as long as it's full-screen... - - QRect rect(mScreen->availableGeometry()); - QWindowSurface::resize(rect.size()); -} - - -QVFbWindow::QVFbWindow(QVFbScreen *screen, QWidget *window) - : QPlatformWindow(window), - mScreen(screen) -{ -} - - -void QVFbWindow::setGeometry(const QRect &) -{ - -// any size you like as long as it's full-screen... - - QRect rect(mScreen->availableGeometry()); - QWindowSystemInterface::handleGeometryChange(this->widget(), rect); - - QPlatformWindow::setGeometry(rect); -} - - - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h b/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h deleted file mode 100644 index 9228189..0000000 --- a/src/plugins/platforms/qvfb/qwindowsurface_qvfb.h +++ /dev/null @@ -1,80 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_QVFB_H -#define QWINDOWSURFACE_QVFB_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class QVFbIntegration; -class QVFbScreen; - -class QVFbWindowSurface : public QWindowSurface -{ -public: - QVFbWindowSurface(QVFbScreen *screen, QWidget *window); - ~QVFbWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void resize(const QSize &size); - -private: - QVFbScreen *mScreen; -}; - -class QVFbWindow : public QPlatformWindow -{ -public: - QVFbWindow(QVFbScreen *screen, QWidget *window); - void setGeometry(const QRect &rect); - -private: - QVFbScreen *mScreen; -}; - - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/testlite/main.cpp b/src/plugins/platforms/testlite/main.cpp index c1759ef..29bbcea 100644 --- a/src/plugins/platforms/testlite/main.cpp +++ b/src/plugins/platforms/testlite/main.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include -#include "qplatformintegration_testlite.h" +#include "qtestliteintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp b/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp deleted file mode 100644 index cc77bc7..0000000 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.cpp +++ /dev/null @@ -1,143 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - - - -#include "qplatformintegration_testlite.h" -#include "qwindowsurface_testlite.h" -#include -#include - -#include - -#include "qtestlitewindow.h" - -#ifndef QT_NO_OPENGL -#include -#include "qglxglcontext.h" -#endif - -QT_BEGIN_NAMESPACE - -class MyCursor : QGraphicsSystemCursor -{ -public: - MyCursor(QPlatformScreen *screen) : QGraphicsSystemCursor(screen) {} - - void changeCursor(QCursor * cursor, QWidget * widget) { - QTestLiteWindow *w = 0; - if (widget) { - QWidget *window = widget->window(); - w = static_cast(window->platformWindow()); - } else { - // No X11 cursor control when there is no widget under the cursor - return; - } - - //qDebug() << "changeCursor" << widget << ws; - if (!w) - return; - - w->setCursor(cursor); - } -}; - - -QTestLiteIntegration::QTestLiteIntegration() -{ - - xd = new MyDisplay; - - mPrimaryScreen = new QTestLiteScreen(); - - mPrimaryScreen->mGeometry = QRect - (0, 0, xd->width, xd->height); - mPrimaryScreen->mDepth = 32; - mPrimaryScreen->mFormat = QImage::Format_RGB32; - mPrimaryScreen->mPhysicalSize = - QSize(xd->physicalWidth, xd->physicalHeight); - - mScreens.append(mPrimaryScreen); - - - (void)new MyCursor(mPrimaryScreen); - -} - -QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget, WId) const -{ - return new QTestLiteWindowSurface(mPrimaryScreen, widget); -} - - -QPlatformWindow *QTestLiteIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const -{ - return new QTestLiteWindow(this, mPrimaryScreen, widget); -} - - - -QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, int height) const -{ - QImage img = xd->grabWindow(window, x, y, width, height); - return QPixmap::fromImage(img); -} - -#ifndef QT_NO_OPENGL -bool QTestLiteIntegration::hasOpenGL() const -{ - return glXQueryExtension(xd->display, 0, 0) != 0; -} - -QPlatformGLContext * QTestLiteIntegration::createGLContext() -{ - return new QGLXGLContext(xd->display); -} - -#endif // QT_NO_OPENGL - - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qplatformintegration_testlite.h b/src/plugins/platforms/testlite/qplatformintegration_testlite.h deleted file mode 100644 index 4260faa..0000000 --- a/src/plugins/platforms/testlite/qplatformintegration_testlite.h +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_TESTLITE_H -#define QGRAPHICSSYSTEM_TESTLITE_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class MyDisplay; - -class QTestLiteScreen : public QPlatformScreen -{ -public: - QTestLiteScreen() - : mDepth(16), mFormat(QImage::Format_RGB16) {} - ~QTestLiteScreen() {} - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - -public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; -}; - -class QTestLiteIntegration : public QPlatformIntegration -{ -public: - QTestLiteIntegration(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; - - QPixmap grabWindow(WId window, int x, int y, int width, int height) const; - - QList screens() const { return mScreens; } - -#ifndef QT_NO_OPENGL - bool hasOpenGL() const; - QPlatformGLContext * createGLContext(); -#endif - - MyDisplay *xd; - -private: - QTestLiteScreen *mPrimaryScreen; - QList mScreens; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp new file mode 100644 index 0000000..6c07349 --- /dev/null +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -0,0 +1,143 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + + +#include "qtestliteintegration.h" +#include "qtestlitewindowsurface.h" +#include +#include + +#include + +#include "qtestlitewindow.h" + +#ifndef QT_NO_OPENGL +#include +#include "qglxglcontext.h" +#endif + +QT_BEGIN_NAMESPACE + +class MyCursor : QGraphicsSystemCursor +{ +public: + MyCursor(QPlatformScreen *screen) : QGraphicsSystemCursor(screen) {} + + void changeCursor(QCursor * cursor, QWidget * widget) { + QTestLiteWindow *w = 0; + if (widget) { + QWidget *window = widget->window(); + w = static_cast(window->platformWindow()); + } else { + // No X11 cursor control when there is no widget under the cursor + return; + } + + //qDebug() << "changeCursor" << widget << ws; + if (!w) + return; + + w->setCursor(cursor); + } +}; + + +QTestLiteIntegration::QTestLiteIntegration() +{ + + xd = new MyDisplay; + + mPrimaryScreen = new QTestLiteScreen(); + + mPrimaryScreen->mGeometry = QRect + (0, 0, xd->width, xd->height); + mPrimaryScreen->mDepth = 32; + mPrimaryScreen->mFormat = QImage::Format_RGB32; + mPrimaryScreen->mPhysicalSize = + QSize(xd->physicalWidth, xd->physicalHeight); + + mScreens.append(mPrimaryScreen); + + + (void)new MyCursor(mPrimaryScreen); + +} + +QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget, WId) const +{ + return new QTestLiteWindowSurface(mPrimaryScreen, widget); +} + + +QPlatformWindow *QTestLiteIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const +{ + return new QTestLiteWindow(this, mPrimaryScreen, widget); +} + + + +QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, int height) const +{ + QImage img = xd->grabWindow(window, x, y, width, height); + return QPixmap::fromImage(img); +} + +#ifndef QT_NO_OPENGL +bool QTestLiteIntegration::hasOpenGL() const +{ + return glXQueryExtension(xd->display, 0, 0) != 0; +} + +QPlatformGLContext * QTestLiteIntegration::createGLContext() +{ + return new QGLXGLContext(xd->display); +} + +#endif // QT_NO_OPENGL + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h new file mode 100644 index 0000000..4260faa --- /dev/null +++ b/src/plugins/platforms/testlite/qtestliteintegration.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_TESTLITE_H +#define QGRAPHICSSYSTEM_TESTLITE_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class MyDisplay; + +class QTestLiteScreen : public QPlatformScreen +{ +public: + QTestLiteScreen() + : mDepth(16), mFormat(QImage::Format_RGB16) {} + ~QTestLiteScreen() {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; +}; + +class QTestLiteIntegration : public QPlatformIntegration +{ +public: + QTestLiteIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + + QList screens() const { return mScreens; } + +#ifndef QT_NO_OPENGL + bool hasOpenGL() const; + QPlatformGLContext * createGLContext(); +#endif + + MyDisplay *xd; + +private: + QTestLiteScreen *mPrimaryScreen; + QList mScreens; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 108f732..49b79ec 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#include "qwindowsurface_testlite.h" -#include "qplatformintegration_testlite.h" +#include "qtestlitewindowsurface.h" +#include "qtestliteintegration.h" #include #include "qtestlitewindow.h" diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp new file mode 100644 index 0000000..3567118 --- /dev/null +++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp @@ -0,0 +1,273 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qtestlitewindowsurface.h" +#include "qtestliteintegration.h" + +#include +#include + +#include "qtestlitewindow.h" + +# include +# include +# include + +QT_BEGIN_NAMESPACE + + +struct MyShmImageInfo { + MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} + ~MyShmImageInfo() { destroy(); } + + void destroy(); + + XShmSegmentInfo shminfo; + XImage *image; + Display *display; +}; + +//void QTestLiteWindowSurface::flush() + + +#ifndef DONT_USE_MIT_SHM +void MyShmImageInfo::destroy() +{ + XShmDetach (display, &shminfo); + XDestroyImage (image); + shmdt (shminfo.shmaddr); + shmctl (shminfo.shmid, IPC_RMID, 0); +} +#endif + +void QTestLiteWindowSurface::resizeShmImage(int width, int height) +{ + MyDisplay *xd = xw->xd; + +#ifdef DONT_USE_MIT_SHM + shm_img = QImage(width, height, QImage::Format_RGB32); +#else + if (image_info) + image_info->destroy(); + else + image_info = new MyShmImageInfo(xd->display); + + Visual *visual = DefaultVisual(xd->display, xd->screen); + + + XImage *image = XShmCreateImage (xd->display, visual, 24, ZPixmap, 0, + &image_info->shminfo, width, height); + + + image_info->shminfo.shmid = shmget (IPC_PRIVATE, + image->bytes_per_line * image->height, IPC_CREAT|0777); + + image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); + image_info->shminfo.readOnly = False; + + image_info->image = image; + + Status shm_attach_status = XShmAttach(xd->display, &image_info->shminfo); + + Q_ASSERT(shm_attach_status == True); + + shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); +#endif + painted = false; +} + + +void QTestLiteWindowSurface::resizeBuffer(QSize s) +{ + if (shm_img.size() != s) + resizeShmImage(s.width(), s.height()); +} + +QSize QTestLiteWindowSurface::bufferSize() const +{ + return shm_img.size(); +} + +QTestLiteWindowSurface::QTestLiteWindowSurface (QTestLiteScreen */*screen*/, QWidget *window) + : QWindowSurface(window), + painted(false), image_info(0) +{ + xw = static_cast(window->platformWindow()); + xw->windowSurface = this; +// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; +} + +QTestLiteWindowSurface::~QTestLiteWindowSurface() +{ + delete image_info; +} + +QPaintDevice *QTestLiteWindowSurface::paintDevice() +{ + return &shm_img; +} + + +void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); + + // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this; + + if (!painted) + return; + + MyDisplay *xd = xw->xd; + GC gc = xw->gc; + Window window = xw->x_window; +#ifdef DONT_USE_MIT_SHM + // just convert the image every time... + if (!shm_img.isNull()) { + Visual *visual = DefaultVisual(xd->display, xd->screen); + + QImage image = shm_img; + //img.convertToFormat( + XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, + 0, (char *) image.scanLine(0), image.width(), image.height(), + 32, image.bytesPerLine()); + + int x = 0; + int y = 0; + + /*int r =*/ XPutImage(xd->display, window, gc, xi, 0, 0, x, y, image.width(), image.height()); + + xi->data = 0; // QImage owns these bits + XDestroyImage(xi); + } +#else + // Use MIT_SHM + if (image_info->image) { + //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; + int x = 0; + int y = 0; + + // We could set send_event to true, and then use the ShmCompletion to synchronize, + // but let's do like Qt/11 and just use XSync + XShmPutImage (xd->display, window, gc, image_info->image, 0, 0, + x, y, image_info->image->width, image_info->image->height, + /*send_event*/ False); + + XSync(xd->display, False); + } +#endif +} + +//### scroll logic copied from QRasterWindowSurface, we should make better API for this + +void copied_qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) +{ + // make sure we don't detach + uchar *mem = const_cast(const_cast(img).bits()); + + int lineskip = img.bytesPerLine(); + int depth = img.depth() >> 3; + + const QRect imageRect(0, 0, img.width(), img.height()); + const QRect r = rect & imageRect & imageRect.translated(-offset); + const QPoint p = rect.topLeft() + offset; + + if (r.isEmpty()) + return; + + const uchar *src; + uchar *dest; + + if (r.top() < p.y()) { + src = mem + r.bottom() * lineskip + r.left() * depth; + dest = mem + (p.y() + r.height() - 1) * lineskip + p.x() * depth; + lineskip = -lineskip; + } else { + src = mem + r.top() * lineskip + r.left() * depth; + dest = mem + p.y() * lineskip + p.x() * depth; + } + + const int w = r.width(); + int h = r.height(); + const int bytes = w * depth; + + // overlapping segments? + if (offset.y() == 0 && qAbs(offset.x()) < w) { + do { + ::memmove(dest, src, bytes); + dest += lineskip; + src += lineskip; + } while (--h); + } else { + do { + ::memcpy(dest, src, bytes); + dest += lineskip; + src += lineskip; + } while (--h); + } +} + +bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) +{ + if (shm_img.isNull()) + return false; + + const QVector rects = area.rects(); + for (int i = 0; i < rects.size(); ++i) + copied_qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); + + return true; +} + + +void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + resizeBuffer(size()); +} + +void QTestLiteWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); + painted = true; //there is content in the buffer +} +QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.h b/src/plugins/platforms/testlite/qtestlitewindowsurface.h new file mode 100644 index 0000000..915e7fe --- /dev/null +++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_TESTLITE_H +#define QWINDOWSURFACE_TESTLITE_H + +#include + + +QT_BEGIN_NAMESPACE + +class QTestLiteWindow; +class QTestLiteIntegration; +class QTestLiteScreen; +class MyShmImageInfo; + +class QTestLiteWindowSurface : public QWindowSurface +{ +public: + QTestLiteWindowSurface (QTestLiteScreen *screen, QWidget *window); + ~QTestLiteWindowSurface(); + + QPaintDevice *paintDevice(); +// void flush(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); +// void resize(const QSize &size); + bool scroll(const QRegion &area, int dx, int dy); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + bool painted; + void resizeBuffer(QSize); + QSize bufferSize() const; + + + void resizeShmImage(int width, int height); + + QImage shm_img; + MyShmImageInfo *image_info; + + QTestLiteWindow *xw; + +}; + + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp b/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp deleted file mode 100644 index af10368..0000000 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.cpp +++ /dev/null @@ -1,273 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_testlite.h" -#include "qplatformintegration_testlite.h" - -#include -#include - -#include "qtestlitewindow.h" - -# include -# include -# include - -QT_BEGIN_NAMESPACE - - -struct MyShmImageInfo { - MyShmImageInfo(Display *xdisplay) : image(0), display(xdisplay) {} - ~MyShmImageInfo() { destroy(); } - - void destroy(); - - XShmSegmentInfo shminfo; - XImage *image; - Display *display; -}; - -//void QTestLiteWindowSurface::flush() - - -#ifndef DONT_USE_MIT_SHM -void MyShmImageInfo::destroy() -{ - XShmDetach (display, &shminfo); - XDestroyImage (image); - shmdt (shminfo.shmaddr); - shmctl (shminfo.shmid, IPC_RMID, 0); -} -#endif - -void QTestLiteWindowSurface::resizeShmImage(int width, int height) -{ - MyDisplay *xd = xw->xd; - -#ifdef DONT_USE_MIT_SHM - shm_img = QImage(width, height, QImage::Format_RGB32); -#else - if (image_info) - image_info->destroy(); - else - image_info = new MyShmImageInfo(xd->display); - - Visual *visual = DefaultVisual(xd->display, xd->screen); - - - XImage *image = XShmCreateImage (xd->display, visual, 24, ZPixmap, 0, - &image_info->shminfo, width, height); - - - image_info->shminfo.shmid = shmget (IPC_PRIVATE, - image->bytes_per_line * image->height, IPC_CREAT|0777); - - image_info->shminfo.shmaddr = image->data = (char*)shmat (image_info->shminfo.shmid, 0, 0); - image_info->shminfo.readOnly = False; - - image_info->image = image; - - Status shm_attach_status = XShmAttach(xd->display, &image_info->shminfo); - - Q_ASSERT(shm_attach_status == True); - - shm_img = QImage( (uchar*) image->data, image->width, image->height, image->bytes_per_line, QImage::Format_RGB32 ); -#endif - painted = false; -} - - -void QTestLiteWindowSurface::resizeBuffer(QSize s) -{ - if (shm_img.size() != s) - resizeShmImage(s.width(), s.height()); -} - -QSize QTestLiteWindowSurface::bufferSize() const -{ - return shm_img.size(); -} - -QTestLiteWindowSurface::QTestLiteWindowSurface (QTestLiteScreen */*screen*/, QWidget *window) - : QWindowSurface(window), - painted(false), image_info(0) -{ - xw = static_cast(window->platformWindow()); - xw->windowSurface = this; -// qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; -} - -QTestLiteWindowSurface::~QTestLiteWindowSurface() -{ - delete image_info; -} - -QPaintDevice *QTestLiteWindowSurface::paintDevice() -{ - return &shm_img; -} - - -void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); - - // qDebug() << "QTestLiteWindowSurface::flush:" << (long)this; - - if (!painted) - return; - - MyDisplay *xd = xw->xd; - GC gc = xw->gc; - Window window = xw->x_window; -#ifdef DONT_USE_MIT_SHM - // just convert the image every time... - if (!shm_img.isNull()) { - Visual *visual = DefaultVisual(xd->display, xd->screen); - - QImage image = shm_img; - //img.convertToFormat( - XImage *xi = XCreateImage(xd->display, visual, 24, ZPixmap, - 0, (char *) image.scanLine(0), image.width(), image.height(), - 32, image.bytesPerLine()); - - int x = 0; - int y = 0; - - /*int r =*/ XPutImage(xd->display, window, gc, xi, 0, 0, x, y, image.width(), image.height()); - - xi->data = 0; // QImage owns these bits - XDestroyImage(xi); - } -#else - // Use MIT_SHM - if (image_info->image) { - //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; - int x = 0; - int y = 0; - - // We could set send_event to true, and then use the ShmCompletion to synchronize, - // but let's do like Qt/11 and just use XSync - XShmPutImage (xd->display, window, gc, image_info->image, 0, 0, - x, y, image_info->image->width, image_info->image->height, - /*send_event*/ False); - - XSync(xd->display, False); - } -#endif -} - -//### scroll logic copied from QRasterWindowSurface, we should make better API for this - -void copied_qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) -{ - // make sure we don't detach - uchar *mem = const_cast(const_cast(img).bits()); - - int lineskip = img.bytesPerLine(); - int depth = img.depth() >> 3; - - const QRect imageRect(0, 0, img.width(), img.height()); - const QRect r = rect & imageRect & imageRect.translated(-offset); - const QPoint p = rect.topLeft() + offset; - - if (r.isEmpty()) - return; - - const uchar *src; - uchar *dest; - - if (r.top() < p.y()) { - src = mem + r.bottom() * lineskip + r.left() * depth; - dest = mem + (p.y() + r.height() - 1) * lineskip + p.x() * depth; - lineskip = -lineskip; - } else { - src = mem + r.top() * lineskip + r.left() * depth; - dest = mem + p.y() * lineskip + p.x() * depth; - } - - const int w = r.width(); - int h = r.height(); - const int bytes = w * depth; - - // overlapping segments? - if (offset.y() == 0 && qAbs(offset.x()) < w) { - do { - ::memmove(dest, src, bytes); - dest += lineskip; - src += lineskip; - } while (--h); - } else { - do { - ::memcpy(dest, src, bytes); - dest += lineskip; - src += lineskip; - } while (--h); - } -} - -bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - if (shm_img.isNull()) - return false; - - const QVector rects = area.rects(); - for (int i = 0; i < rects.size(); ++i) - copied_qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); - - return true; -} - - -void QTestLiteWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - resizeBuffer(size()); -} - -void QTestLiteWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - painted = true; //there is content in the buffer -} -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qwindowsurface_testlite.h b/src/plugins/platforms/testlite/qwindowsurface_testlite.h deleted file mode 100644 index 915e7fe..0000000 --- a/src/plugins/platforms/testlite/qwindowsurface_testlite.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_TESTLITE_H -#define QWINDOWSURFACE_TESTLITE_H - -#include - - -QT_BEGIN_NAMESPACE - -class QTestLiteWindow; -class QTestLiteIntegration; -class QTestLiteScreen; -class MyShmImageInfo; - -class QTestLiteWindowSurface : public QWindowSurface -{ -public: - QTestLiteWindowSurface (QTestLiteScreen *screen, QWidget *window); - ~QTestLiteWindowSurface(); - - QPaintDevice *paintDevice(); -// void flush(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); -// void resize(const QSize &size); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - bool painted; - void resizeBuffer(QSize); - QSize bufferSize() const; - - - void resizeShmImage(int width, int height); - - QImage shm_img; - MyShmImageInfo *image_info; - - QTestLiteWindow *xw; - -}; - - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro index 8f108ae..454193d 100644 --- a/src/plugins/platforms/testlite/testlite.pro +++ b/src/plugins/platforms/testlite/testlite.pro @@ -3,8 +3,8 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms -SOURCES = main.cpp qplatformintegration_testlite.cpp qwindowsurface_testlite.cpp qtestlitewindow.cpp -HEADERS = qplatformintegration_testlite.h qwindowsurface_testlite.h qtestlitewindow.h +SOURCES = main.cpp qtestliteintegration.cpp qtestlitewindowsurface.cpp qtestlitewindow.cpp +HEADERS = qtestliteintegration.h qtestlitewindowsurface.h qtestlitewindow.h LIBS += -lX11 -lXext diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp index 23d78c1..775259b 100644 --- a/src/plugins/platforms/vnc/main.cpp +++ b/src/plugins/platforms/vnc/main.cpp @@ -39,7 +39,7 @@ ** ****************************************************************************/ -#include "qgraphicssystem_vnc.h" +#include "qvncintegration.h" #include #include diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp b/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp deleted file mode 100644 index a872991..0000000 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_vnc.h" -#include "../fb_base/fb_base.h" -#include -#include -#include - -#include -#include - -#include - - -QVNCScreen::QVNCScreen() - : QFbScreen::QFbScreen() -{ - int w = 800; - int h = 600; - int ew, eh; - const char *str; - if ((str=::getenv("QT_VNC_SIZE")) && sscanf(str,"%dx%d",&ew,&eh)==2) { - w = ew; - h = eh; - } - - setGeometry(QRect(0,0,w, h)); - setDepth(32); - setFormat(QImage::Format_RGB32); - setPhysicalSize((geometry().size()*254)/720); - - - d_ptr = new QVNCScreenPrivate(this); - - cursor = new QVNCCursor(d_ptr->vncServer, this); - d_ptr->vncServer->setCursor(static_cast(cursor)); -} - -QVNCDirtyMap *QVNCScreen::dirtyMap() -{ - return d_ptr->dirty; -} - -QRegion QVNCScreen::doRedraw() -{ - QRegion touched; - touched = QFbScreen::doRedraw(); - - QVector rects = touched.rects(); - for (int i = 0; i < rects.size(); i++) - d_ptr->setDirty(rects[i]); - return touched; -} - - -QVNCIntegration::QVNCIntegration() -{ - mPrimaryScreen = new QVNCScreen(); - - mScreens.append(mPrimaryScreen); -} - -QPixmapData *QVNCIntegration::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -// QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget) const -// { -// if (widget->windowType() == Qt::Desktop) -// return 0; // Don't create an explicit window surface for the destkop. -// QFbWindowSurface * surface; -// surface = new QFbWindowSurface(mPrimaryScreen, widget); -// mPrimaryScreen->addWindowSurface(surface); -// return surface; -// } - -QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget, WId) const -{ - QFbWindowSurface * surface; - surface = new QFbWindowSurface(mPrimaryScreen, widget); - return surface; -} - - -QPlatformWindow *QVNCIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const -{ - QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); - mPrimaryScreen->addWindow(w); - return w; -} - diff --git a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h b/src/plugins/platforms/vnc/qgraphicssystem_vnc.h deleted file mode 100644 index 524b888..0000000 --- a/src/plugins/platforms/vnc/qgraphicssystem_vnc.h +++ /dev/null @@ -1,98 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_VNC_H -#define QGRAPHICSSYSTEM_VNC_H - -#include "qvnccursor.h" -#include "../fb_base/fb_base.h" -#include - -QT_BEGIN_NAMESPACE - -class QVNCServer; -class QVNCDirtyMap; - -class QVNCScreenPrivate; - -class QVNCScreen : public QFbScreen -{ -public: - QVNCScreen(); - - int linestep() const { return image() ? image()->bytesPerLine() : 0; } - uchar *base() const { return image() ? image()->bits() : 0; } - QVNCDirtyMap *dirtyMap(); - -public: - QVNCScreenPrivate *d_ptr; - -private: - QVNCServer *server; - QRegion doRedraw(); -}; - -class QVNCIntegrationPrivate; - - -class QVNCIntegration : public QPlatformIntegration -{ -public: - QVNCIntegration(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; - - QList screens() const { return mScreens; } - - -private: - QVNCScreen *mPrimaryScreen; - QList mScreens; -}; - - - -QT_END_NAMESPACE - -#endif //QGRAPHICSSYSTEM_VNC_H - diff --git a/src/plugins/platforms/vnc/qvnccursor.cpp b/src/plugins/platforms/vnc/qvnccursor.cpp index 78da53b..8da06aa 100644 --- a/src/plugins/platforms/vnc/qvnccursor.cpp +++ b/src/plugins/platforms/vnc/qvnccursor.cpp @@ -49,7 +49,7 @@ #include "qvnccursor.h" #include "qvncserver.h" -#include "qgraphicssystem_vnc.h" +#include "qvncintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp new file mode 100644 index 0000000..7bdba35 --- /dev/null +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qvncintegration.h" +#include "../fb_base/fb_base.h" +#include +#include +#include + +#include +#include + +#include + + +QVNCScreen::QVNCScreen() + : QFbScreen::QFbScreen() +{ + int w = 800; + int h = 600; + int ew, eh; + const char *str; + if ((str=::getenv("QT_VNC_SIZE")) && sscanf(str,"%dx%d",&ew,&eh)==2) { + w = ew; + h = eh; + } + + setGeometry(QRect(0,0,w, h)); + setDepth(32); + setFormat(QImage::Format_RGB32); + setPhysicalSize((geometry().size()*254)/720); + + + d_ptr = new QVNCScreenPrivate(this); + + cursor = new QVNCCursor(d_ptr->vncServer, this); + d_ptr->vncServer->setCursor(static_cast(cursor)); +} + +QVNCDirtyMap *QVNCScreen::dirtyMap() +{ + return d_ptr->dirty; +} + +QRegion QVNCScreen::doRedraw() +{ + QRegion touched; + touched = QFbScreen::doRedraw(); + + QVector rects = touched.rects(); + for (int i = 0; i < rects.size(); i++) + d_ptr->setDirty(rects[i]); + return touched; +} + + +QVNCIntegration::QVNCIntegration() +{ + mPrimaryScreen = new QVNCScreen(); + + mScreens.append(mPrimaryScreen); +} + +QPixmapData *QVNCIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +// QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget) const +// { +// if (widget->windowType() == Qt::Desktop) +// return 0; // Don't create an explicit window surface for the destkop. +// QFbWindowSurface * surface; +// surface = new QFbWindowSurface(mPrimaryScreen, widget); +// mPrimaryScreen->addWindowSurface(surface); +// return surface; +// } + +QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget, WId) const +{ + QFbWindowSurface * surface; + surface = new QFbWindowSurface(mPrimaryScreen, widget); + return surface; +} + + +QPlatformWindow *QVNCIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const +{ + QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); + mPrimaryScreen->addWindow(w); + return w; +} + diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h new file mode 100644 index 0000000..524b888 --- /dev/null +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_VNC_H +#define QGRAPHICSSYSTEM_VNC_H + +#include "qvnccursor.h" +#include "../fb_base/fb_base.h" +#include + +QT_BEGIN_NAMESPACE + +class QVNCServer; +class QVNCDirtyMap; + +class QVNCScreenPrivate; + +class QVNCScreen : public QFbScreen +{ +public: + QVNCScreen(); + + int linestep() const { return image() ? image()->bytesPerLine() : 0; } + uchar *base() const { return image() ? image()->bits() : 0; } + QVNCDirtyMap *dirtyMap(); + +public: + QVNCScreenPrivate *d_ptr; + +private: + QVNCServer *server; + QRegion doRedraw(); +}; + +class QVNCIntegrationPrivate; + + +class QVNCIntegration : public QPlatformIntegration +{ +public: + QVNCIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QList screens() const { return mScreens; } + + +private: + QVNCScreen *mPrimaryScreen; + QList mScreens; +}; + + + +QT_END_NAMESPACE + +#endif //QGRAPHICSSYSTEM_VNC_H + diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h index 41cadab..b1a9797 100644 --- a/src/plugins/platforms/vnc/qvncserver.h +++ b/src/plugins/platforms/vnc/qvncserver.h @@ -53,7 +53,7 @@ // We mean it. // -#include "qgraphicssystem_vnc.h" +#include "qvncintegration.h" #include "qvnccursor.h" #define QT_NO_QWS_CURSOR diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index b1da572..65824a2 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -3,8 +3,8 @@ include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms -SOURCES = main.cpp qgraphicssystem_vnc.cpp -HEADERS = qgraphicssystem_vnc.h +SOURCES = main.cpp qvncintegration.cpp +HEADERS = qvncintegration.h HEADERS += qvncserver.h SOURCES += qvncserver.cpp -- cgit v0.12 From 535161b217a9fb5117803cbff1ddcc97242c10f3 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 22 Apr 2010 15:16:32 +0200 Subject: Avoid copying code. --- src/gui/kernel/qapplication_lite.cpp | 2 +- src/gui/painting/qwindowsurface.cpp | 8 +++- .../platforms/testlite/qtestlitewindowsurface.cpp | 52 ++-------------------- 3 files changed, 11 insertions(+), 51 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 867c2dc..fae7663 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -627,7 +627,7 @@ void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent * //even if we're blocked by modality, we should deliver the mouse release event.. //### this code is not completely correct: multiple buttons can be pressed simultaneously if (!(implicit_mouse_grabber && buttons == Qt::NoButton)) { - qDebug() << "modal blocked mouse event to" << tlw; + //qDebug() << "modal blocked mouse event to" << tlw; return; } } diff --git a/src/gui/painting/qwindowsurface.cpp b/src/gui/painting/qwindowsurface.cpp index 7558cad..3b542bc 100644 --- a/src/gui/painting/qwindowsurface.cpp +++ b/src/gui/painting/qwindowsurface.cpp @@ -342,7 +342,13 @@ void QWindowSurface::setPartialUpdateSupport(bool enable) d_ptr->partialUpdateSupport = enable; } -void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) +#ifdef Q_WS_LITE +#define Q_EXPORT_SCROLLRECT Q_GUI_EXPORT +#else +#define Q_EXPORT_SCROLLRECT +#endif + +void Q_EXPORT_SCROLLRECT qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) { // make sure we don't detach uchar *mem = const_cast(const_cast(img).bits()); diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp index 3567118..a14a50e 100644 --- a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp @@ -197,54 +197,8 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const #endif } -//### scroll logic copied from QRasterWindowSurface, we should make better API for this - -void copied_qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset) -{ - // make sure we don't detach - uchar *mem = const_cast(const_cast(img).bits()); - - int lineskip = img.bytesPerLine(); - int depth = img.depth() >> 3; - - const QRect imageRect(0, 0, img.width(), img.height()); - const QRect r = rect & imageRect & imageRect.translated(-offset); - const QPoint p = rect.topLeft() + offset; - - if (r.isEmpty()) - return; - - const uchar *src; - uchar *dest; - - if (r.top() < p.y()) { - src = mem + r.bottom() * lineskip + r.left() * depth; - dest = mem + (p.y() + r.height() - 1) * lineskip + p.x() * depth; - lineskip = -lineskip; - } else { - src = mem + r.top() * lineskip + r.left() * depth; - dest = mem + p.y() * lineskip + p.x() * depth; - } - - const int w = r.width(); - int h = r.height(); - const int bytes = w * depth; - - // overlapping segments? - if (offset.y() == 0 && qAbs(offset.x()) < w) { - do { - ::memmove(dest, src, bytes); - dest += lineskip; - src += lineskip; - } while (--h); - } else { - do { - ::memcpy(dest, src, bytes); - dest += lineskip; - src += lineskip; - } while (--h); - } -} +// from qwindowsurface.cpp +extern void qt_scrollRectInImage(QImage &img, const QRect &rect, const QPoint &offset); bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) { @@ -253,7 +207,7 @@ bool QTestLiteWindowSurface::scroll(const QRegion &area, int dx, int dy) const QVector rects = area.rects(); for (int i = 0; i < rects.size(); ++i) - copied_qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); + qt_scrollRectInImage(shm_img, rects.at(i), QPoint(dx, dy)); return true; } -- cgit v0.12 From e45139ea8ba05d25bc2ead99b6d3b495bc4f84ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 22 Apr 2010 15:26:12 +0200 Subject: Enable some faster text drawing for lighthouse when using raster --- src/gui/painting/qpaintengine_raster.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 03318de..d734deb 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -94,6 +94,8 @@ # include #elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) # include +#elif defined(Q_WS_LITE) +# include #endif #if defined(Q_WS_WIN64) @@ -3314,9 +3316,9 @@ void QRasterPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte } #endif // Q_WS_QWS -#if (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) +#if (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) || defined(Q_WS_LITE)) && !defined(QT_NO_FREETYPE) -#if defined(Q_WS_QWS) && !defined(QT_NO_QWS_QPF2) +#if (defined(Q_WS_QWS) || defined(Q_WS_LITE)) && !defined(QT_NO_QWS_QPF2) if (fontEngine->type() == QFontEngine::QPF2) { QFontEngine *renderingEngine = static_cast(fontEngine)->renderingEngine(); if (renderingEngine) -- cgit v0.12 From 9fd7d1dd2822a410588da6042d57ac84fb5da1c8 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Fri, 23 Apr 2010 10:19:39 +0200 Subject: Update QGLWindowSurface to reflect geometry -> size name change --- src/opengl/qwindowsurface_gl.cpp | 38 +++++++++++++++++++++++++++----------- src/opengl/qwindowsurface_gl_p.h | 6 ++++++ 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index ca88de3..d9417d9 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -414,8 +414,13 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget(); Q_ASSERT(parent); +#if !defined(Q_WS_LITE) if (!geometry().isValid()) return; +#else + if (!size().isValid()) + return; +#endif // Needed to support native child-widgets... hijackWindow(parent); @@ -638,20 +643,31 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & } +#if !defined(Q_WS_LITE) void QGLWindowSurface::setGeometry(const QRect &rect) { QWindowSurface::setGeometry(rect); d_ptr->geometry_updated = true; } - +#else +void QGLWindowSurface::resize(const QSize &size) +{ + QWindowSurface::resize(size); + d_ptr->geometry_updated = true; +} +#endif void QGLWindowSurface::updateGeometry() { if (!d_ptr->geometry_updated) return; d_ptr->geometry_updated = false; +#ifdef Q_WS_LITE + QSize surfSize = size(); +#else + QSize surfSize = geometry().size(); +#endif - QRect rect = geometry(); hijackWindow(window()); QGLContext *ctx = reinterpret_cast(window()->d_func()->extraData()->glContext); @@ -661,19 +677,19 @@ void QGLWindowSurface::updateGeometry() { const GLenum target = GL_TEXTURE_2D; - if (rect.width() <= 0 || rect.height() <= 0) + if (surfSize.width() <= 0 || surfSize.height() <= 0) return; - if (d_ptr->size == rect.size()) + if (d_ptr->size == surfSize) return; - d_ptr->size = rect.size(); + d_ptr->size = surfSize; if (d_ptr->ctx) { #ifndef QT_OPENGL_ES_2 if (d_ptr->destructive_swap_buffers) { glBindTexture(target, d_ptr->tex_id); - glTexImage2D(target, 0, GL_RGBA, rect.width(), rect.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, 0); + glTexImage2D(target, 0, GL_RGBA, surfSize.width(), surfSize.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, 0); glBindTexture(target, 0); } #endif @@ -698,10 +714,10 @@ void QGLWindowSurface::updateGeometry() { if (QGLExtensions::glExtensions() & QGLExtensions::FramebufferBlit) format.setSamples(8); - d_ptr->fbo = new QGLFramebufferObject(rect.size(), format); + d_ptr->fbo = new QGLFramebufferObject(surfSize, format); if (d_ptr->fbo->isValid()) { - qDebug() << "Created Window Surface FBO" << rect.size() + qDebug() << "Created Window Surface FBO" << surfSize << "with samples" << d_ptr->fbo->format().samples(); return; } else { @@ -722,7 +738,7 @@ void QGLWindowSurface::updateGeometry() { delete d_ptr->pb; - d_ptr->pb = new QGLPixelBuffer(rect.width(), rect.height(), + d_ptr->pb = new QGLPixelBuffer(surfSize.width(), surfSize.height(), QGLFormat(QGL::SampleBuffers | QGL::StencilBuffer | QGL::DepthBuffer), qt_gl_share_widget()); @@ -732,7 +748,7 @@ void QGLWindowSurface::updateGeometry() { glGenTextures(1, &d_ptr->pb_tex_id); glBindTexture(target, d_ptr->pb_tex_id); - glTexImage2D(target, 0, GL_RGBA, rect.width(), rect.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); + glTexImage2D(target, 0, GL_RGBA, surfSize.width(), surfSize.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, 0); glTexParameterf(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); @@ -758,7 +774,7 @@ void QGLWindowSurface::updateGeometry() { if (d_ptr->destructive_swap_buffers) { glGenTextures(1, &d_ptr->tex_id); glBindTexture(target, d_ptr->tex_id); - glTexImage2D(target, 0, GL_RGBA, rect.width(), rect.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, 0); + glTexImage2D(target, 0, GL_RGBA, surfSize.width(), surfSize.height(), 0, GL_RGB, GL_UNSIGNED_BYTE, 0); glTexParameterf(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h index 8ea714c..9d17514 100644 --- a/src/opengl/qwindowsurface_gl_p.h +++ b/src/opengl/qwindowsurface_gl_p.h @@ -86,7 +86,13 @@ public: QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + +#if !defined(Q_WS_LITE) void setGeometry(const QRect &rect); +#else + virtual void resize(const QSize &size); +#endif + void updateGeometry(); bool scroll(const QRegion &area, int dx, int dy); -- cgit v0.12 From 69e54ffd1796312aca2db49f19b5de92e6dab3ae Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 23 Apr 2010 15:03:19 +0200 Subject: Crash fix Make sure double-linked list invariant is maintained --- src/plugins/platforms/testlite/qtestlitewindow.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 49b79ec..545912e 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -1188,6 +1188,8 @@ void MyX11Cursors::timeout() lookupMap.take(id); MyX11CursorNode * tmp = node; node = node->post(); + if (node) + node->setAnte(0); delete tmp; XFreeCursor(display, c); } -- cgit v0.12 From 1acf354a1380586a754d2a0ed546e4dceb4296cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 27 Apr 2010 10:20:35 +0200 Subject: Compile fix qegl_lite.cpp --- src/gui/egl/qegl_lite.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/gui/egl/qegl_lite.cpp b/src/gui/egl/qegl_lite.cpp index 2bbf22b..10caf46 100644 --- a/src/gui/egl/qegl_lite.cpp +++ b/src/gui/egl/qegl_lite.cpp @@ -64,6 +64,7 @@ EGLNativeWindowType QEgl::nativeWindow(QWidget* widget) EGLNativePixmapType QEgl::nativePixmap(QPixmap* pixmap) { + Q_UNUSED(pixmap); return 0; } @@ -72,13 +73,11 @@ EGLNativePixmapType QEgl::nativePixmap(QPixmap* pixmap) // return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY)); //} -static QGraphicsSystemScreen *screenForDevice(QPaintDevice *device) +static QPlatformScreen *screenForDevice(QPaintDevice *device) { - QGraphicsSystem *gs = QApplicationPrivate::graphicsSystem(); - if (!gs) - return 0; + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - QList screens = gs->screens(); + QList screens = pi->screens(); int screenNumber; if (device && device->devType() == QInternal::Widget) @@ -97,7 +96,7 @@ void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev) return; // Find the QGLScreen for this paint device. - QGraphicsSystemScreen *screen = screenForDevice(dev); + QPlatformScreen *screen = screenForDevice(dev); if (!screen) return; int devType = dev->devType(); -- cgit v0.12 From 255371252bdad3cd370ccf95337c94baae7277a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 23 Apr 2010 08:38:44 +0200 Subject: Porting openkode platform plugin to new api --- src/plugins/platforms/openkode/frag.glslf | 8 - src/plugins/platforms/openkode/frag.h | 37 --- src/plugins/platforms/openkode/main.cpp | 16 +- src/plugins/platforms/openkode/openkode.pro | 22 +- .../openkode/qgraphicssystem_openkode.cpp | 236 ------------------ .../platforms/openkode/qgraphicssystem_openkode.h | 95 -------- .../platforms/openkode/qopenkodeintegration.cpp | 227 ++++++++++++++++++ .../platforms/openkode/qopenkodeintegration.h | 95 ++++++++ src/plugins/platforms/openkode/qopenkodewindow.cpp | 114 +++++++++ src/plugins/platforms/openkode/qopenkodewindow.h | 63 +++++ .../platforms/openkode/qopenkodewindowsurface.cpp | 187 +++++++++++++++ .../platforms/openkode/qopenkodewindowsurface.h | 75 ++++++ .../platforms/openkode/qwindowsurface_openkode.cpp | 265 --------------------- .../platforms/openkode/qwindowsurface_openkode.h | 79 ------ src/plugins/platforms/openkode/resources.qrc | 6 + src/plugins/platforms/openkode/shaders/frag.glslf | 8 + src/plugins/platforms/openkode/shaders/vert.glslv | 14 ++ src/plugins/platforms/openkode/vert.glslv | 14 -- src/plugins/platforms/openkode/vert.h | 63 ----- 19 files changed, 811 insertions(+), 813 deletions(-) delete mode 100644 src/plugins/platforms/openkode/frag.glslf delete mode 100644 src/plugins/platforms/openkode/frag.h delete mode 100644 src/plugins/platforms/openkode/qgraphicssystem_openkode.cpp delete mode 100644 src/plugins/platforms/openkode/qgraphicssystem_openkode.h create mode 100644 src/plugins/platforms/openkode/qopenkodeintegration.cpp create mode 100644 src/plugins/platforms/openkode/qopenkodeintegration.h create mode 100644 src/plugins/platforms/openkode/qopenkodewindow.cpp create mode 100644 src/plugins/platforms/openkode/qopenkodewindow.h create mode 100644 src/plugins/platforms/openkode/qopenkodewindowsurface.cpp create mode 100644 src/plugins/platforms/openkode/qopenkodewindowsurface.h delete mode 100644 src/plugins/platforms/openkode/qwindowsurface_openkode.cpp delete mode 100644 src/plugins/platforms/openkode/qwindowsurface_openkode.h create mode 100644 src/plugins/platforms/openkode/resources.qrc create mode 100644 src/plugins/platforms/openkode/shaders/frag.glslf create mode 100644 src/plugins/platforms/openkode/shaders/vert.glslv delete mode 100644 src/plugins/platforms/openkode/vert.glslv delete mode 100644 src/plugins/platforms/openkode/vert.h diff --git a/src/plugins/platforms/openkode/frag.glslf b/src/plugins/platforms/openkode/frag.glslf deleted file mode 100644 index a593434..0000000 --- a/src/plugins/platforms/openkode/frag.glslf +++ /dev/null @@ -1,8 +0,0 @@ -uniform sampler2D tex_samp; - -varying vec2 texcoord_var; - -void main() -{ - gl_FragColor = texture2D(tex_samp, texcoord_var); -} diff --git a/src/plugins/platforms/openkode/frag.h b/src/plugins/platforms/openkode/frag.h deleted file mode 100644 index 6575cb5..0000000 --- a/src/plugins/platforms/openkode/frag.h +++ /dev/null @@ -1,37 +0,0 @@ -0x4e,0x56,0x75,0x63,0x01,0x00,0x00,0x00,0x09,0x00,0x06,0x00,0x06,0x00,0x50,0x00, -0x02,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x50,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x27,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x50,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0b,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x11,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x12,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0xc0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x7a,0x00,0x00,0x00,0xd0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2c,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x68,0x69,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff, -0x00,0x00,0x00,0x80,0x04,0x00,0x00,0x90,0x00,0x02,0x01,0x82,0x04,0x02,0x02,0x82, -0x01,0x00,0x40,0xf6,0x85,0xc7,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x3a,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x2a,0x00,0x06,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0x3b,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x3c,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x49,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x04,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x74,0x65,0x78,0x5f,0x73,0x61,0x6d,0x70,0x00,0x00,0x00,0x74,0x65,0x78,0x63, -0x6f,0x6f,0x72,0x64,0x5f,0x76,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 diff --git a/src/plugins/platforms/openkode/main.cpp b/src/plugins/platforms/openkode/main.cpp index e9c1083..bd2b5c7 100644 --- a/src/plugins/platforms/openkode/main.cpp +++ b/src/plugins/platforms/openkode/main.cpp @@ -39,33 +39,33 @@ ** ****************************************************************************/ -#include -#include "qgraphicssystem_openkode.h" +#include +#include "qopenkodeintegration.h" QT_BEGIN_NAMESPACE -class QOpenKODEGraphicsSystemPlugin : public QGraphicsSystemPlugin +class QOpenKODEPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QGraphicsSystem *create(const QString&); + QPlatformIntegration *create(const QString&); }; -QStringList QOpenKODEGraphicsSystemPlugin::keys() const +QStringList QOpenKODEPlugin::keys() const { QStringList list; list << "OpenKODE"; return list; } -QGraphicsSystem* QOpenKODEGraphicsSystemPlugin::create(const QString& system) +QPlatformIntegration * QOpenKODEPlugin::create(const QString& system) { if (system.toLower() == "openkode") - return new QOpenKODEGraphicsSystem; + return new QOpenKODEIntegration; return 0; } -Q_EXPORT_PLUGIN2(openkode, QOpenKODEGraphicsSystemPlugin) +Q_EXPORT_PLUGIN2(openkode, QOpenKODEPlugin) QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro index 055048d..042b74d 100644 --- a/src/plugins/platforms/openkode/openkode.pro +++ b/src/plugins/platforms/openkode/openkode.pro @@ -1,14 +1,20 @@ -TARGET = qopenkodegraphicssystem +TARGET = qopenkodeintegration include(../../qpluginbase.pri) -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms -SOURCES = main.cpp qgraphicssystem_openkode.cpp qwindowsurface_openkode.cpp -HEADERS = qgraphicssystem_openkode.h qwindowsurface_openkode.h +SOURCES = main.cpp \ + qopenkodeintegration.cpp \ + qopenkodewindowsurface.cpp \ + qopenkodewindow.cpp -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +HEADERS = qopenkodeintegration.h \ + qopenkodewindowsurface.h \ + qopenkodewindow.h + +RESOURCES = resources.qrc + +target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target -# openkode specific stuff -INCLUDEPATH += $(OPENKODE_DIR)/include -LIBS += $${QMAKE_RPATH}/$(OPENKODE_DIR)/lib-target -L$(OPENKODE_DIR)/lib-target -lKD -lEGL -lGLESv2 +LIBS += -lKD -lEGL -lGLESv2 diff --git a/src/plugins/platforms/openkode/qgraphicssystem_openkode.cpp b/src/plugins/platforms/openkode/qgraphicssystem_openkode.cpp deleted file mode 100644 index 7a07776..0000000 --- a/src/plugins/platforms/openkode/qgraphicssystem_openkode.cpp +++ /dev/null @@ -1,236 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_openkode.h" -#include "qwindowsurface_openkode.h" -#include - -#include -#include - -#include -#include -#include - -#include "GLES2/gl2ext.h" - - -QT_BEGIN_NAMESPACE - -QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen() -{ - KDDesktopNV *kdDesktop = KD_NULL; - KDDisplayNV *kdDisplay = KD_NULL; - - qDebug() << "QOpenKODEGraphicsSystemScreen::QOpenKODEGraphicsSystemScreen()"; - - // Get the default desktop and display - kdDesktop = kdGetDesktopNV(KD_DEFAULT_DESKTOP_NV, KD_NULL); - if (!kdDesktop || kdDesktop == (void*)-1) { - qErrnoWarning(kdGetError(), "Could not obtain KDDesktopNV pointer"); - return; - } - - kdDisplay = kdGetDisplayNV(KD_DEFAULT_DISPLAY_NV, KD_NULL); - if (!kdDisplay || kdDisplay == (void*)-1) { - qErrnoWarning(kdGetError(), "Could not obtain KDDisplayNV pointer"); - kdReleaseDesktopNV(kdDesktop); - return; - } - - KDDisplayModeNV mode; - if (kdGetDisplayModeNV(kdDisplay, &mode)) { - qErrnoWarning(kdGetError(), "Could not get display mode"); - return; - } - - qDebug() << " - display mode " << mode.width << "x" << mode.height << " refresh " << mode.refresh; - - KDint desktopSize[] = { mode.width, mode.height }; - - if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { - qErrnoWarning(kdGetError(), "Could not set desktop size"); - return; - } - - // Once we've set up the desktop and display we don't need them anymore - kdReleaseDisplayNV(kdDisplay); - kdReleaseDesktopNV(kdDesktop); - - const int defaultDpi = 72; - mGeometry = QRect(0, 0, mode.width, mode.height); - mPhysicalSize = QSize(mode.width * 25.4 / defaultDpi, mode.height * 25.4 / defaultDpi); - - mDepth = 24; - mFormat = QImage::Format_RGB888; - - - QEglProperties properties; - properties.setPixelFormat(QImage::Format_RGB888); - properties.setValue(EGL_BUFFER_SIZE, EGL_DONT_CARE); - properties.setRenderableType(QEgl::OpenGL); - - if (!mContext.chooseConfig(properties, QEgl::BestPixelFormat)) { - qWarning("qEglContext: Unable to choose config!"); - return; - } - - if (!mContext.display()) { - qWarning("qEglContext: Unable to open display!"); - return; - } - - qDebug() << " - QEglContext::openDisplay OK"; -} - -static GLuint NvKdTestLoadShaders(const char *vertex_shader_binary, - const char *fragment_shader_binary, - GLuint vertex_shader_binary_size, - GLuint fragment_shader_binary_size) -{ - GLuint prog; - GLuint vertShader; - GLuint fragShader; - - // Create the program - prog = glCreateProgram(); - - // Create the GL shader objects - vertShader = glCreateShader(GL_VERTEX_SHADER); - fragShader = glCreateShader(GL_FRAGMENT_SHADER); - - // Load the binary data into the shader objects - glShaderBinary(1, &vertShader, - GL_NVIDIA_PLATFORM_BINARY_NV, vertex_shader_binary, vertex_shader_binary_size); - glShaderBinary(1, &fragShader, - GL_NVIDIA_PLATFORM_BINARY_NV, fragment_shader_binary, fragment_shader_binary_size); - - // Attach the shaders to the program - glAttachShader(prog, vertShader); - glAttachShader(prog, fragShader); - - // Delete the shaders - glDeleteShader(vertShader); - glDeleteShader(fragShader); - - // Link and validate the shader program - glLinkProgram(prog); - glValidateProgram(prog); - - return prog; -} - -class QOpenKODEEventLoopHelper : public QThread -{ -public: - QOpenKODEEventLoopHelper(QSemaphore *m) - : eventMutex(m) - { - m->acquire(); - } - -protected: - void run() - { - qDebug() << "initializing KD"; - kdInitializeNV(); - qDebug() << "done initializing KD"; - eventMutex->release(); - - const KDEvent *event; - while ((event = kdWaitEvent(-1)) != 0) { - qDebug() << "!!! received event!"; - kdDefaultEvent(event); - } - - qDebug() << "exiting event loop"; - } - -private: - QSemaphore *eventMutex; -}; - -QOpenKODEGraphicsSystem::QOpenKODEGraphicsSystem() - : eventMutex(1) -{ - QOpenKODEEventLoopHelper *loop = new QOpenKODEEventLoopHelper(&eventMutex); - loop->start(); - eventMutex.acquire(); // block until initialization done - - mPrimaryScreen = new QOpenKODEGraphicsSystemScreen(); - - mScreens.append(mPrimaryScreen); - -} - -QPixmapData *QOpenKODEGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return new QRasterPixmapData(type); -} - -QWindowSurface *QOpenKODEGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - return new QOpenKODEWindowSurface(mPrimaryScreen, widget); -} - -GLuint QOpenKODEGraphicsSystem::blitterProgram() -{ - static GLuint shaderProgram = 0; - if (!shaderProgram) { - - const char vertShaderBinary[] = { -# include "vert.h" - }; - const char fragShaderBinary[] = { -# include "frag.h" - }; - - shaderProgram = NvKdTestLoadShaders(vertShaderBinary, fragShaderBinary, - sizeof(vertShaderBinary), sizeof(fragShaderBinary)); - - if (!shaderProgram) - qFatal("QOpenKodeGraphicsSystem(): Cannot load shaders!"); - } - return shaderProgram; -} - - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qgraphicssystem_openkode.h b/src/plugins/platforms/openkode/qgraphicssystem_openkode.h deleted file mode 100644 index 7d73ae0..0000000 --- a/src/plugins/platforms/openkode/qgraphicssystem_openkode.h +++ /dev/null @@ -1,95 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_OPENKODE_H -#define QGRAPHICSSYSTEM_OPENKODE_H - -#include - -#include -#include - -# include - -QT_BEGIN_NAMESPACE - -struct KDDesktopNV; - -class QOpenKODEGraphicsSystemScreen : public QGraphicsSystemScreen -{ -public: - QOpenKODEGraphicsSystemScreen(); - ~QOpenKODEGraphicsSystemScreen() {} - - QRect geometry() const { return mGeometry; } - int depth() const { return mDepth; } - QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } - -public: - QRect mGeometry; - int mDepth; - QImage::Format mFormat; - QSize mPhysicalSize; - QEglContext mContext; -}; - -class QOpenKODEGraphicsSystem : public QGraphicsSystem -{ -public: - QOpenKODEGraphicsSystem(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - - QList screens() const { return mScreens; } - - static GLuint blitterProgram(); - -private: - QOpenKODEGraphicsSystemScreen *mPrimaryScreen; - QList mScreens; - QSemaphore eventMutex; -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp new file mode 100644 index 0000000..d9430c2 --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -0,0 +1,227 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qopenkodeintegration.h" +#include "qopenkodewindowsurface.h" +#include "qopenkodewindow.h" + +#include + +#include +#include +#include + +#include +#include +#include + +#include "GLES2/gl2ext.h" + +#include + + +QT_BEGIN_NAMESPACE + +QOpenKODEScreen::QOpenKODEScreen() +{ + KDDesktopNV *kdDesktop = KD_NULL; + KDDisplayNV *kdDisplay = KD_NULL; + + qDebug() << "QOpenKODEScreen::QOpenKODEIntegrationScreen()"; + + // Get the default desktop and display + kdDesktop = kdGetDesktopNV(KD_DEFAULT_DESKTOP_NV, KD_NULL); + if (!kdDesktop || kdDesktop == (void*)-1) { + qErrnoWarning(kdGetError(), "Could not obtain KDDesktopNV pointer"); + return; + } + + kdDisplay = kdGetDisplayNV(KD_DEFAULT_DISPLAY_NV, KD_NULL); + if (!kdDisplay || kdDisplay == (void*)-1) { + qErrnoWarning(kdGetError(), "Could not obtain KDDisplayNV pointer"); + kdReleaseDesktopNV(kdDesktop); + return; + } + + KDDisplayModeNV mode; + if (kdGetDisplayModeNV(kdDisplay, &mode)) { + qErrnoWarning(kdGetError(), "Could not get display mode"); + return; + } + + qDebug() << " - display mode " << mode.width << "x" << mode.height << " refresh " << mode.refresh; + + KDint desktopSize[] = { mode.width, mode.height }; + + if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { + qErrnoWarning(kdGetError(), "Could not set desktop size"); + return; + } + + // Once we've set up the desktop and display we don't need them anymore + kdReleaseDisplayNV(kdDisplay); + kdReleaseDesktopNV(kdDesktop); + + const int defaultDpi = 72; + mGeometry = QRect(0, 0, mode.width, mode.height); + mPhysicalSize = QSize(mode.width * 25.4 / defaultDpi, mode.height * 25.4 / defaultDpi); + + mDepth = 24; + mFormat = QImage::Format_RGB32; +} + +static GLuint loadShaders(const QString &vertexShader, const QString &fragmentShader) +{ + GLuint prog = 0; + GLuint vertShader; + GLuint fragShader; + + // Create the program + prog = glCreateProgram(); + + // Create the GL shader objects + vertShader = glCreateShader(GL_VERTEX_SHADER); + fragShader = glCreateShader(GL_FRAGMENT_SHADER); + + // Load shader sources into GL and compile + QFile vertexFile(vertexShader); + vertexFile.open(QFile::ReadOnly); + QByteArray vertSource = vertexFile.readAll(); + const char *vertChar = vertSource.constData(); + int vertSize = vertSource.size(); + + QFile fragFile(fragmentShader); + fragFile.open(QFile::ReadOnly); + QByteArray fragSource = fragFile.readAll(); + const char *fragChar = fragSource.constData(); + int fragSize = fragSource.size(); + + glShaderSource(vertShader, 1, (const char**)&vertChar, &vertSize); + glCompileShader(vertShader); + + glShaderSource(fragShader, 1, (const char**)&fragChar, &fragSize); + glCompileShader(fragShader); + + // Attach the shaders to the program + glAttachShader(prog, vertShader); + glAttachShader(prog, fragShader); + + // Delete the shaders + glDeleteShader(vertShader); + glDeleteShader(fragShader); + + // Link and validate the shader program + glLinkProgram(prog); + glValidateProgram(prog); + + return prog; +} + +class QOpenKODEEventLoopHelper : public QThread +{ +public: + QOpenKODEEventLoopHelper(QSemaphore *m) + : eventMutex(m) + { + m->acquire(); + } + +protected: + void run() + { + if (kdInitializeNV() == KD_ENOTINITIALIZED) { + qFatal("Did not manage to initialize openkode"); + } + eventMutex->release(); + + const KDEvent *event; + while ((event = kdWaitEvent(-1)) != 0) { + qDebug() << "!!! received event!"; + kdDefaultEvent(event); + } + } + +private: + QSemaphore *eventMutex; +}; + +QOpenKODEIntegration::QOpenKODEIntegration() + : eventMutex(1) +{ + QOpenKODEEventLoopHelper *loop = new QOpenKODEEventLoopHelper(&eventMutex); + loop->start(); + eventMutex.acquire(); // block until initialization done + + QOpenKODEScreen *mPrimaryScreen = new QOpenKODEScreen(); + + mScreens.append(mPrimaryScreen); + +} + +QPixmapData *QOpenKODEIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QPlatformWindow *QOpenKODEIntegration::createPlatformWindow(QWidget *tlw, WId ) const +{ + return new QOpenKODEWindow(tlw); +} + +QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId winId) const +{ + return new QOpenKODEWindowSurface(widget,winId); +} + +GLuint QOpenKODEIntegration::blitterProgram() +{ + static GLuint shaderProgram = 0; + if (!shaderProgram) { + + shaderProgram = loadShaders(":/shaders/vert.glslv",":/shaders/frag.glslf"); + if (!shaderProgram) + qFatal("QOpenKodeGraphicsSystem(): Cannot load shaders!"); + } + return shaderProgram; +} + + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h new file mode 100644 index 0000000..76ce219 --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGRAPHICSSYSTEM_OPENKODE_H +#define QGRAPHICSSYSTEM_OPENKODE_H + +#include + +#include +#include +#include + +# include + +QT_BEGIN_NAMESPACE + +struct KDDesktopNV; + +class QOpenKODEScreen : public QPlatformScreen +{ +public: + QOpenKODEScreen(); + ~QOpenKODEScreen() {} + + QRect geometry() const { return mGeometry; } + int depth() const { return mDepth; } + QImage::Format format() const { return mFormat; } + QSize physicalSize() const { return mPhysicalSize; } + +public: + QRect mGeometry; + int mDepth; + QImage::Format mFormat; + QSize mPhysicalSize; +}; + +class QOpenKODEIntegration : public QPlatformIntegration +{ +public: + QOpenKODEIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + virtual QList screens() const { return mScreens; } + + static GLuint blitterProgram(); + +private: + QList mScreens; + QSemaphore eventMutex; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp new file mode 100644 index 0000000..8e1527c --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qopenkodewindow.h" + +#include + +#include +#include +#include + +QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) + : QPlatformWindow(tlw) +{ + /* Initialize EGL display */ + EGLBoolean rvbool = eglInitialize(QEgl::display(), KD_NULL, KD_NULL); + if (!rvbool) { + kdLogMessage("EGL failed to initialize display\n"); + } + + kdWindow = kdCreateWindow(QEgl::display(), + QEgl::defaultConfig(QInternal::Widget,QEgl::OpenGL,QEgl::Renderable), + KD_NULL); + if (!kdWindow) { + qErrnoWarning(kdGetError(), "Error creating native window"); + return; + } + + const KDint windowSize[2] = { tlw->width(), tlw->height() }; + if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { + qErrnoWarning(kdGetError(), "Could not set native window size"); + return; + } + +// const KDboolean windowExclusive[] = { false }; +// if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { +// qErrnoWarning(kdGetError(), "Could not set exclusive bit"); +// //return; +// } +// +// const KDint windowPos[2] = { tlw->x(), tlw->y() }; +// if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { +// qErrnoWarning(kdGetError(), "Could not set native window position"); +// return; +// } + + if (kdRealizeWindow(kdWindow, &eglWindow)) { + qErrnoWarning(kdGetError(), "Could not realize native window"); + return; + } +} + +void QOpenKODEWindow::setGeometry(const QRect &rect) +{ + const QRect geo = geometry(); + if (geo.size() != rect.size()) { + const KDint windowSize[2] = { rect.width(), rect.height() }; + if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { + qErrnoWarning(kdGetError(), "Could not set native window size"); + //return; + } + } + +// if (geo.topLeft() != rect.topLeft()) { +// const KDint windowPos[2] = { rect.x(), rect.y() }; +// if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { +// qErrnoWarning(kdGetError(), "Could not set native window position"); +// //return; +// } +// } + +} + +void QOpenKODEWindow::setVisible(bool visible) +{ + +} diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h new file mode 100644 index 0000000..b52f8e6 --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOPENKODEWINDOW_H +#define QOPENKODEWINDOW_H + +#include + +#include + +class QOpenKODEWindow : public QPlatformWindow +{ +public: + QOpenKODEWindow(QWidget *tlw); + + void setGeometry(const QRect &rect); + void setVisible(bool visible); + WId winId() const { return WId(eglWindow); } + +private: + struct KDWindow *kdWindow; + EGLNativeWindowType eglWindow; +}; + +#endif //QOPENKODEWINDOW_H diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp new file mode 100644 index 0000000..5eb0d2d --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp @@ -0,0 +1,187 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qopenkodewindowsurface.h" +#include "qopenkodeintegration.h" + +#include "qopenkodewindow.h" + +#include + +QT_BEGIN_NAMESPACE + +QOpenKODEWindowSurface::QOpenKODEWindowSurface + (QWidget *window, WId winId) + : QWindowSurface(window), + mSurface(EGL_NO_SURFACE), + mWin((EGLNativeWindowType) winId) +{ + EGLConfig config = QEgl::defaultConfig(QInternal::Widget,QEgl::OpenGL,QEgl::Renderable); + mContext.setConfig(config); + if (!mContext.createContext()) { + qWarning("QOpenKODEWindowSurface: Unable to create context"); + return; + } +} + +QOpenKODEWindowSurface::~QOpenKODEWindowSurface() +{ +} + +QPaintDevice *QOpenKODEWindowSurface::paintDevice() +{ + return &mImage; +} + +// ### TODO - this updates the entire toplevel, should only update the region +void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoint &offset) +{ + mContext.makeCurrent(mSurface); + + if (!offset.isNull()) { + qWarning("Offset flushing not supported yet"); + return; + } + + if (!mContext.makeCurrent(mSurface)) { + qWarning("EGL couldn't make context/surface current: 0x%x", eglGetError()); + return; + } + + QRect boundingRect = region.boundingRect(); + + int x, y, w, h; + QImage blitImage; + if (true || boundingRect == mImage.rect()) { // TODO - check optimization + blitImage = mImage; + x = y = 0; + w = mImage.width(); + h = mImage.height(); + } else { + blitImage = mImage.copy(boundingRect); + w = boundingRect.width(); + h = boundingRect.height(); + x = boundingRect.x(); + y = boundingRect.y(); + } + +// qDebug() << "flush" << widget << offset << region.boundingRect() << mImage.format() << blitImage.format(); + + GLuint shaderProgram = QOpenKODEIntegration::blitterProgram(); + + glUseProgram(shaderProgram); + + GLuint index = glGetUniformLocation(shaderProgram, "window"); + glUniform2f(index, GLfloat(mImage.width()), GLfloat(mImage.height())); + + // attributes + GLuint posId = glGetAttribLocation(shaderProgram, "pos_attr"); + GLuint texcoordId = glGetAttribLocation(shaderProgram, "texcoord_attr"); + + // sampler + index = glGetUniformLocation(shaderProgram, "tex_samp"); + + glUniform1i(index, 0); + + glDisable(GL_DEPTH_TEST); + glActiveTexture(GL_TEXTURE0); + + GLuint texId; + GLfloat coords[8] = {x, y, x, y + h, x + w, y + h, x + w, y }; + GLfloat texcoords[8] = { 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 }; + + // Generate texture for checkered background + glGenTextures(1, &texId); + glBindTexture(GL_TEXTURE_2D, texId); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); + glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, blitImage.bits()); + + // Enable vertex attribute associated with vertex position + glEnableVertexAttribArray(posId); + glEnableVertexAttribArray(texcoordId); + + // Set the quad vertices + glVertexAttribPointer(posId, 2, GL_FLOAT, 0, 0, coords); + glVertexAttribPointer(texcoordId, 2, GL_FLOAT, 0, 0, texcoords); + + // Draw the quad + glDrawArrays(GL_TRIANGLE_FAN, 0, 4); + + // Cleanup + glDisableVertexAttribArray(posId); + glDisableVertexAttribArray(texcoordId); + + // Release all textures + glBindTexture(GL_TEXTURE_2D, 0); + if (texId) + glDeleteTextures(1, &texId); + + mContext.swapBuffers(mSurface); + mContext.doneCurrent(); +} + +void QOpenKODEWindowSurface::resize(const QSize &size) +{ + QWindowSurface::resize(size); + mContext.destroySurface(mSurface); + mSurface = EGL_NO_SURFACE; + mImage = QImage(); + +} +void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) +{ + if (mSurface == EGL_NO_SURFACE) { + EGLConfig config = QEgl::defaultConfig(QInternal::Widget,QEgl::OpenGL,QEgl::Renderable); + EGLint windowAttrs[] = { EGL_NONE }; + mSurface = eglCreateWindowSurface(QEgl::display(), config, mWin, windowAttrs); + mImage = QImage(size(),QImage::Format_RGB32); + } +} + +void QOpenKODEWindowSurface::endPaint(const QRegion ®ion) +{ + Q_UNUSED(region); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.h b/src/plugins/platforms/openkode/qopenkodewindowsurface.h new file mode 100644 index 0000000..568dbc2 --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodewindowsurface.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_OPENKODE_H +#define QWINDOWSURFACE_OPENKODE_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QOpenKODEWindow; + +class QOpenKODEWindowSurface : public QWindowSurface +{ +public: + QOpenKODEWindowSurface + (QWidget *window, WId winId); + ~QOpenKODEWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize (const QSize &size); + + void beginPaint(const QRegion ®ion); + void endPaint(const QRegion ®ion); + +private: + QImage mImage; + EGLSurface mSurface; + QEglContext mContext; + EGLNativeWindowType mWin; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/openkode/qwindowsurface_openkode.cpp b/src/plugins/platforms/openkode/qwindowsurface_openkode.cpp deleted file mode 100644 index b3f3965..0000000 --- a/src/plugins/platforms/openkode/qwindowsurface_openkode.cpp +++ /dev/null @@ -1,265 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qwindowsurface_openkode.h" -#include "qgraphicssystem_openkode.h" -#include - -#include "KD/kd.h" -#include "KD/NV_display.h" - -QT_BEGIN_NAMESPACE - -QOpenKODEWindowSurface::QOpenKODEWindowSurface - (QOpenKODEGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), - mScreen(screen), - mSurface(0) -{ - qDebug() << "QOpenKODEWindowSurface::QOpenKODEWindowSurface:" << window << window->width() << "x" << window->height() - << "pos" << window->x() << "x" << window->y(); - - if (!mContext.display()) { - qWarning("qEglContext: Unable to open display!"); - return; - } - - QEglProperties properties; - properties.setPixelFormat(QImage::Format_RGB888); - properties.setValue(EGL_BUFFER_SIZE, EGL_DONT_CARE); - properties.setRenderableType(QEgl::OpenGL); - - if (!mContext.chooseConfig(properties, QEgl::BestPixelFormat)) { - qWarning("qEglContext: Unable to choose config!"); - return; - } - - createWindow(window); -} - -void QOpenKODEWindowSurface::createWindow(QWidget *window) -{ - qDebug() << "createWindow"; - kdWindow = kdCreateWindow(mContext.display(), mContext.config(), KD_NULL); - - if (!kdWindow) { - qErrnoWarning(kdGetError(), "Error creating native window"); - return; - } - - const KDint windowSize[2] = { window->width(), window->height() }; - if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { - qErrnoWarning(kdGetError(), "Could not set native window size"); - return; - } - - //const KDboolean windowExclusive[] = { false }; - //if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { - // qErrnoWarning(kdGetError(), "Could not set exclusive bit"); - // //return; - //} - - //const KDint windowPos[2] = { window->x(), window->y() }; - //if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { - // qErrnoWarning(kdGetError(), "Could not set native window position"); - // //return; - //} - - EGLNativeWindowType nativeWindow; - - if (kdRealizeWindow(kdWindow, &nativeWindow)) { - qErrnoWarning(kdGetError(), "Could not realize native window"); - return; - } - qDebug() << "kdRealizeWindow" << nativeWindow; - - // Create an EGL window surface for the native window - EGLint windowAttrs[3] = { EGL_NONE }; - qDebug() << "doing createwindowsurface"; - *mSurface = eglCreateWindowSurface(mContext.display(), - mContext.config(), - nativeWindow, - windowAttrs); - qDebug() << "create windowsurface"; - if (!mSurface) { - qWarning("EGL couldn't create window surface: 0x%x", eglGetError()); - return; - } - - qDebug() << "making context"; - if (!mContext.createContext()) { - qDebug() << "Unable to create context!"; - return; - } - - qDebug() << "about to make current"; - mContext.makeCurrent(mSurface); -} - -QOpenKODEWindowSurface::~QOpenKODEWindowSurface() -{ -} - -QPaintDevice *QOpenKODEWindowSurface::paintDevice() -{ - qDebug() << "QOpenKODEWindowSurface::paintDevice"; - return &mImage; -} - -// ### TODO - this updates the entire toplevel, should only update the region -void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoint &offset) -{ - qDebug() << "in flush"; - if (!offset.isNull()) { - qWarning("Offset flushing not supported yet"); - return; - } - - if (!mContext.makeCurrent(mSurface)) { - qWarning("EGL couldn't make context/surface current: 0x%x", eglGetError()); - return; - } - - QRect boundingRect = region.boundingRect(); - - int x, y, w, h; - QImage blitImage; - if (true || boundingRect == mImage.rect()) { // TODO - check optimization - blitImage = mImage; - x = y = 0; - w = mImage.width(); - h = mImage.height(); - } else { - blitImage = mImage.copy(boundingRect); - w = boundingRect.width(); - h = boundingRect.height(); - x = boundingRect.x(); - y = boundingRect.y(); - } - -// qDebug() << "flush" << widget << offset << region.boundingRect() << mImage.format() << blitImage.format(); - - GLuint shaderProgram = QOpenKODEGraphicsSystem::blitterProgram(); - - glUseProgram(shaderProgram); - - GLuint index = glGetUniformLocation(shaderProgram, "window"); - glUniform2f(index, GLfloat(mImage.width()), GLfloat(mImage.height())); - - // attributes - GLuint posId = glGetAttribLocation(shaderProgram, "pos_attr"); - GLuint texcoordId = glGetAttribLocation(shaderProgram, "texcoord_attr"); - - // sampler - index = glGetUniformLocation(shaderProgram, "tex_samp"); - - glUniform1i(index, 0); - - glDisable(GL_DEPTH_TEST); - glActiveTexture(GL_TEXTURE0); - - GLuint texId; - GLfloat coords[8] = {x, y, x, y + h, x + w, y + h, x + w, y }; - GLfloat texcoords[8] = { 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 }; - - // Generate texture for checkered background - glPixelStorei(GL_UNPACK_ALIGNMENT, 4); - glGenTextures(1, &texId); - glBindTexture(GL_TEXTURE_2D, texId); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, blitImage.bits()); - - // Enable vertex attribute associated with vertex position - glEnableVertexAttribArray(posId); - glEnableVertexAttribArray(texcoordId); - - // Set the quad vertices - glVertexAttribPointer(posId, 2, GL_FLOAT, 0, 0, coords); - glVertexAttribPointer(texcoordId, 2, GL_FLOAT, 0, 0, texcoords); - - // Draw the quad - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - // Cleanup - glDisableVertexAttribArray(posId); - glDisableVertexAttribArray(texcoordId); - - // Release all textures - glBindTexture(GL_TEXTURE_2D, 0); - if (texId) - glDeleteTextures(1, &texId); - - mContext.doneCurrent(); - mContext.swapBuffers(mSurface); -} - -void QOpenKODEWindowSurface::setGeometry(const QRect &rect) -{ - qDebug() << "QOpenKODEWindowSurface::setGeometry:" << rect; - QWindowSurface::setGeometry(rect); - if (mImage.size() != rect.size()) - mImage = QImage(rect.size(), mScreen->format()); - - mContext.destroySurface(mSurface); - kdDestroyWindow(kdWindow); - createWindow(window()); - qDebug() << "set geometry workded"; -} - -bool QOpenKODEWindowSurface::scroll(const QRegion &area, int dx, int dy) -{ - return QWindowSurface::scroll(area, dx, dy); -} - -void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -void QOpenKODEWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qwindowsurface_openkode.h b/src/plugins/platforms/openkode/qwindowsurface_openkode.h deleted file mode 100644 index bee94a5..0000000 --- a/src/plugins/platforms/openkode/qwindowsurface_openkode.h +++ /dev/null @@ -1,79 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_OPENKODE_H -#define QWINDOWSURFACE_OPENKODE_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class QOpenKODEGraphicsSystemScreen; - -class QOpenKODEWindowSurface : public QWindowSurface -{ -public: - QOpenKODEWindowSurface - (QOpenKODEGraphicsSystemScreen *screen, QWidget *window); - ~QOpenKODEWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void setGeometry(const QRect &rect); - bool scroll(const QRegion &area, int dx, int dy); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - QOpenKODEGraphicsSystemScreen *mScreen; - QImage mImage; - struct KDWindow *kdWindow; - EGLSurface *mSurface; - QEglContext mContext; - - void createWindow(QWidget *window); -}; - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/openkode/resources.qrc b/src/plugins/platforms/openkode/resources.qrc new file mode 100644 index 0000000..dbb3419 --- /dev/null +++ b/src/plugins/platforms/openkode/resources.qrc @@ -0,0 +1,6 @@ + + + shaders/vert.glslv + shaders/frag.glslf + + diff --git a/src/plugins/platforms/openkode/shaders/frag.glslf b/src/plugins/platforms/openkode/shaders/frag.glslf new file mode 100644 index 0000000..ed360fe --- /dev/null +++ b/src/plugins/platforms/openkode/shaders/frag.glslf @@ -0,0 +1,8 @@ +uniform sampler2D tex_samp; + +varying vec2 texcoord_var; + +void main(void) +{ + gl_FragColor = texture2D(tex_samp, texcoord_var); +} diff --git a/src/plugins/platforms/openkode/shaders/vert.glslv b/src/plugins/platforms/openkode/shaders/vert.glslv new file mode 100644 index 0000000..57b5866 --- /dev/null +++ b/src/plugins/platforms/openkode/shaders/vert.glslv @@ -0,0 +1,14 @@ +uniform vec2 window; // window size + +// Per-vertex attributes] +attribute vec2 pos_attr; +attribute vec2 texcoord_attr; + +// Output vertex color +varying vec2 texcoord_var; + +void main() +{ + gl_Position = vec4( (2.0 * pos_attr / window -1.0) * vec2(1.0, -1.0), 0.0, 1.0); + texcoord_var = texcoord_attr; +} diff --git a/src/plugins/platforms/openkode/vert.glslv b/src/plugins/platforms/openkode/vert.glslv deleted file mode 100644 index 57b5866..0000000 --- a/src/plugins/platforms/openkode/vert.glslv +++ /dev/null @@ -1,14 +0,0 @@ -uniform vec2 window; // window size - -// Per-vertex attributes] -attribute vec2 pos_attr; -attribute vec2 texcoord_attr; - -// Output vertex color -varying vec2 texcoord_var; - -void main() -{ - gl_Position = vec4( (2.0 * pos_attr / window -1.0) * vec2(1.0, -1.0), 0.0, 1.0); - texcoord_var = texcoord_attr; -} diff --git a/src/plugins/platforms/openkode/vert.h b/src/plugins/platforms/openkode/vert.h deleted file mode 100644 index bdf564d..0000000 --- a/src/plugins/platforms/openkode/vert.h +++ /dev/null @@ -1,63 +0,0 @@ -0x4e,0x56,0x75,0x63,0x01,0x00,0x00,0x00,0x0a,0x00,0x06,0x00,0x06,0x00,0x50,0x00, -0x01,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0xf0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x60,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x24,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x70,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x48,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x26,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x90,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0xe8,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x06,0x00,0x00,0x00,0x48,0x00,0x00,0x00,0xb0,0x01,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x28,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x12,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x10,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x20,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x01,0x00,0x00,0x00,0x78,0x00,0x00,0x00,0x30,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x18,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x2b,0x00,0x00,0x00,0x39,0x01,0x00,0x00,0xb0,0x02,0x00,0x00,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x30,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x04,0x05,0x08,0x09,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x0f,0x00,0x30,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x01,0x02,0x03,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0x04,0x05,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0x00,0x00,0x80,0x3f,0x00,0x00,0x00,0x40,0x00,0x00,0x80,0xbf,0x00,0x00,0x00,0x00, -0x05,0x00,0x00,0x10,0x80,0xc7,0x00,0x24,0x05,0x02,0x00,0x10,0x80,0xc7,0x00,0x24, -0x01,0x02,0x81,0xc0,0x80,0x07,0x60,0x00,0x05,0x02,0x00,0x90,0x80,0x07,0x00,0x00, -0x09,0x00,0x01,0xe1,0x80,0x87,0x40,0x00,0x05,0x00,0x00,0x10,0x80,0xc7,0x00,0x24, -0x01,0x00,0x81,0xc0,0x80,0x07,0x60,0x00,0x09,0x04,0x00,0xa0,0x80,0x47,0x00,0xe4, -0x05,0x02,0x00,0x90,0x80,0x07,0x00,0x00,0x05,0x04,0x00,0x10,0x88,0xc7,0x03,0x04, -0x01,0x00,0x01,0xe1,0x88,0x87,0x40,0x00,0x09,0xf8,0x00,0x10,0x88,0xc7,0x03,0x04, -0x0d,0x00,0x00,0x10,0x88,0xc7,0x40,0x24,0x11,0x04,0x00,0x10,0x88,0xc7,0x23,0x04, -0x15,0x06,0x00,0x10,0x89,0xc7,0x23,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, -0xa0,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xa1,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xad,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x28,0x00,0x02,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00, -0xb6,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xb7,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xbe,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x05,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xbf,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xc0,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xc9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x01,0x00,0x00,0x00, -0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xca,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xcb,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xd9,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x01,0x00,0x00,0x00, -0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0xda,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0xdb,0x03,0x00,0x00,0x00,0x00,0x00,0x00, -0xe8,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x26,0x00,0x02,0x00,0x00,0x00, -0x04,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, -0x00,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x00,0x50,0x4f,0x53, -0x49,0x54,0x49,0x4f,0x4e,0x00,0x00,0x77,0x69,0x6e,0x64,0x6f,0x77,0x00,0x00,0x00, -0x70,0x6f,0x73,0x5f,0x61,0x74,0x74,0x72,0x00,0x00,0x00,0x74,0x65,0x78,0x63,0x6f, -0x6f,0x72,0x64,0x5f,0x61,0x74,0x74,0x72,0x00,0x00,0x00,0x74,0x65,0x78,0x63,0x6f, -0x6f,0x72,0x64,0x5f,0x76,0x61,0x72,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 -- cgit v0.12 From dbc2f9202688c56495b3f6d8cd3b977a9ae69a80 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Thu, 29 Apr 2010 08:45:28 +0200 Subject: Compile with QT_NO_FSFILEENGINE. --- src/gui/dialogs/qfileinfogatherer_p.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/dialogs/qfileinfogatherer_p.h b/src/gui/dialogs/qfileinfogatherer_p.h index 5abcd94..4fe691e 100644 --- a/src/gui/dialogs/qfileinfogatherer_p.h +++ b/src/gui/dialogs/qfileinfogatherer_p.h @@ -84,10 +84,13 @@ public: && permissions() == fileInfo.permissions(); } +#ifndef QT_NO_FSFILEENGINE bool isCaseSensitive() const { QFSFileEngine fe(mFileInfo.absoluteFilePath()); return fe.caseSensitive(); } +#endif + QFile::Permissions permissions() const { return mFileInfo.permissions(); } -- cgit v0.12 From 4a7c8a2c12d5a1df34d1ae921e0ee709e2e0a904 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Thu, 29 Apr 2010 08:49:03 +0200 Subject: Compile with QT_NO_CURSOR. --- src/gui/kernel/qwidget_lite.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index ee1a582..64fb6f7 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -686,6 +686,7 @@ void QWidgetPrivate::setModal_sys() { } +#ifndef QT_NO_CURSOR void qt_lite_set_cursor(QWidget * w, bool force) { static QPointer lastUnderMouse = 0; @@ -732,4 +733,6 @@ void qt_lite_set_cursor(QWidget * w, bool force) QCursor c = w->cursor(); cursor->changeCursor(&c, w); } +#endif //QT_NO_CURSOR + QT_END_NAMESPACE -- cgit v0.12 From d8a7d478681eaa6d92b70e3836eddc0fd52e79ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Thu, 29 Apr 2010 08:51:28 +0200 Subject: Compile with QT_NO_QWS_INPUTMETHODS --- src/gui/kernel/qapplication_lite.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index fae7663..f9e4242 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -447,6 +447,7 @@ static void init_plugins(const QList pluginList) } } +#ifndef QT_NO_QWS_INPUTMETHODS class QDummyInputContext : public QInputContext { public: @@ -459,6 +460,7 @@ public: bool isComposing() const { return false; } }; +#endif // QT_NO_QWS_INPUTMETHODS void qt_init(QApplicationPrivate *priv, int type) { -- cgit v0.12 From 385d2d14bc7994c3abb1de11dacf9a81eea01d4a Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Tue, 27 Apr 2010 15:59:50 +0200 Subject: Add QPlatformGLWidgetSurface to GL integrtation This class is a way to for the GL platform integration to track the movement and resizing of a QGLWidget with respect to the top-level. Most platform implementations will seperate the surface from the context anyway, so this is a natural abstraction. --- src/gui/kernel/qplatformintegration_lite.cpp | 2 +- src/gui/kernel/qplatformintegration_lite.h | 3 +- src/opengl/qgl.h | 9 ++ src/opengl/qgl_lite.cpp | 47 ++++--- src/opengl/qgl_p.h | 4 +- src/opengl/qglplatformintegration_lite.h | 26 ++-- src/plugins/platforms/testlite/qglxglcontext.cpp | 150 --------------------- src/plugins/platforms/testlite/qglxglcontext.h | 73 ---------- src/plugins/platforms/testlite/qglxintegration.cpp | 150 +++++++++++++++++++++ src/plugins/platforms/testlite/qglxintegration.h | 73 ++++++++++ 10 files changed, 283 insertions(+), 254 deletions(-) delete mode 100644 src/plugins/platforms/testlite/qglxglcontext.cpp delete mode 100644 src/plugins/platforms/testlite/qglxglcontext.h create mode 100644 src/plugins/platforms/testlite/qglxintegration.cpp create mode 100644 src/plugins/platforms/testlite/qglxintegration.h diff --git a/src/gui/kernel/qplatformintegration_lite.cpp b/src/gui/kernel/qplatformintegration_lite.cpp index 3fa874c..2d181f1 100644 --- a/src/gui/kernel/qplatformintegration_lite.cpp +++ b/src/gui/kernel/qplatformintegration_lite.cpp @@ -67,7 +67,7 @@ QPlatformGLContext * QPlatformIntegration::createGLContext() return 0; } -QPlatformGLWidgetSurface * QPlatformIntegration::createGLWidgetSurface(QGLWidget*) +QPlatformGLWidgetSurface * QPlatformIntegration::createGLWidgetSurface() { return 0; } diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h index 70bd0ce..a509b52 100644 --- a/src/gui/kernel/qplatformintegration_lite.h +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -54,7 +54,6 @@ QT_MODULE(Gui) #ifndef QT_NO_OPENGL class QPlatformGLContext; class QPlatformGLWidgetSurface; -class QGLWidget; #endif class Q_GUI_EXPORT QPlatformIntegration @@ -76,7 +75,7 @@ public: #ifndef QT_NO_OPENGL virtual bool hasOpenGL() const; virtual QPlatformGLContext * createGLContext(); - virtual QPlatformGLWidgetSurface * createGLWidgetSurface(QGLWidget*); + virtual QPlatformGLWidgetSurface * createGLWidgetSurface(); #endif }; diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index b1e2ede..e389e3f 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -128,6 +128,10 @@ class QGLOverlayWidget; class QGLWidgetPrivate; class QGLContextPrivate; +#ifdef Q_WS_LITE +class QPlatformGLWidgetSurface; +#endif + // Namespace class: namespace QGL { @@ -531,6 +535,11 @@ public: void drawTexture(const QPointF &point, QMacCompatGLuint textureId, QMacCompatGLenum textureTarget = GL_TEXTURE_2D); #endif +#ifdef Q_WS_LITE + // Used by the platform context to get at the surface which it created for the glwidget: + QPlatformGLWidgetSurface* platformSurface(); +#endif + public Q_SLOTS: virtual void updateGL(); virtual void updateOverlayGL(); diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index 2a70545..fa1439c 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -60,7 +60,7 @@ QPlatformGLContext::~QPlatformGLContext() { } -QPlatformGLWidgetSurface::QPlatformGLWidgetSurface(QGLWidget*) +QPlatformGLWidgetSurface::QPlatformGLWidgetSurface() { } @@ -149,22 +149,30 @@ void QGLWidget::setContext(QGLContext *context, QGLContext* oldcx = d->glcx; d->glcx = context; - // If the application has set WA_TranslucentBackground and not explicitly set - // the alpha buffer size to zero, modify the format so it have an alpha channel - QGLFormat& fmt = d->glcx->d_func()->glFormat; - if (testAttribute(Qt::WA_TranslucentBackground) && fmt.alphaBufferSize() == -1) - fmt.setAlphaBufferSize(1); + if (!d->wsurf) { + // If the application has set WA_TranslucentBackground and not explicitly set + // the alpha buffer size to zero, modify the format so it have an alpha channel + QGLFormat format = d->glcx->d_func()->glFormat; + if (testAttribute(Qt::WA_TranslucentBackground) && format.alphaBufferSize() == -1) + format.setAlphaBufferSize(1); + + d->wsurf = QApplicationPrivate::platformIntegration()->createGLWidgetSurface(); + d->wsurf->create(this, format); + d->glcx->d_func()->glFormat = format; + } - bool success = false; if (!d->glcx->isValid()) - success = !d->glcx->create(shareContext ? shareContext : oldcx); + d->glcx->create(shareContext ? shareContext : oldcx); if (deleteOldContext) delete oldcx; } - - +QPlatformGLWidgetSurface* QGLWidget::platformSurface() +{ + Q_D(QGLWidget); + return d->wsurf; +} void QGLWidgetPrivate::init(QGLContext *context, const QGLWidget *shareWidget) { @@ -181,7 +189,7 @@ QColor QGLContext::overlayTransparentColor() const return QColor(); // Invalid color } -uint QGLContext::colorIndex(const QColor& c) const +uint QGLContext::colorIndex(const QColor&) const { return 0; } @@ -214,7 +222,7 @@ QGLTemporaryContext::~QGLTemporaryContext() } -bool QGLWidgetPrivate::renderCxPm(QPixmap* pm) +bool QGLWidgetPrivate::renderCxPm(QPixmap*) { return false; } @@ -234,7 +242,7 @@ void QGLWidget::setMouseTracking(bool enable) bool QGLWidget::event(QEvent *e) { - QWidget::event(e); + return QWidget::event(e); } void QGLWidget::resizeEvent(QResizeEvent *) @@ -242,10 +250,17 @@ void QGLWidget::resizeEvent(QResizeEvent *) Q_D(QGLWidget); if (!isValid()) return; + + if (!d->wsurf) { + qWarning("QGLWidget::resizeEvent() - widget does not have a platform surface"); + return; + } + d->wsurf->setGeometry(geometry()); //### What about moveEvent? + makeCurrent(); -// if (!d->glcx->initialized()) -// glInit(); -// resizeGL(width(), height()); + if (!d->glcx->initialized()) + glInit(); + resizeGL(width(), height()); } diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index c7cd3fe..34cbdfc 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -165,7 +165,7 @@ class QGLWidgetPrivate : public QWidgetPrivate public: QGLWidgetPrivate() : QWidgetPrivate() , disable_clear_on_painter_begin(false) -#ifdef Q_WS_QWS +#if defined(Q_WS_QWS) || defined(Q_WS_LITE) , wsurf(0) #endif #if defined(Q_WS_X11) && !defined(QT_NO_EGL) @@ -207,6 +207,8 @@ public: void updatePaintDevice(); #elif defined(Q_WS_QWS) QWSGLWindowSurface *wsurf; +#elif defined (Q_WS_LITE) + QPlatformGLWidgetSurface* wsurf; #endif }; diff --git a/src/opengl/qglplatformintegration_lite.h b/src/opengl/qglplatformintegration_lite.h index d5bae45..94d4da0 100644 --- a/src/opengl/qglplatformintegration_lite.h +++ b/src/opengl/qglplatformintegration_lite.h @@ -48,13 +48,27 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +// QGLPlatformWidgetSurface does _not_ inherit from QWindowSurface +// - The backing store may be totally unaware of it's existance. +class Q_OPENGL_EXPORT QPlatformGLWidgetSurface +{ +public: + QPlatformGLWidgetSurface(); + virtual ~QPlatformGLWidgetSurface(); + + virtual bool create(QGLWidget*, QGLFormat&) = 0; + + virtual void setGeometry(const QRect&) = 0; +}; + + class Q_OPENGL_EXPORT QPlatformGLContext { public: QPlatformGLContext(); virtual ~QPlatformGLContext(); - virtual bool create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) = 0; + virtual bool create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext) = 0; virtual void makeCurrent() = 0; virtual void doneCurrent() = 0; @@ -63,16 +77,6 @@ public: }; -// QGLPlatformWidgetSurface does _not_ inherit from QWindowSurface -// - The backing store may be totally unaware of it's existance. -class QPlatformGLWidgetSurface -{ -public: - QPlatformGLWidgetSurface(QGLWidget*); - virtual ~QPlatformGLWidgetSurface(); - - virtual void setGeometry(const QRect&) = 0; -}; QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qglxglcontext.cpp b/src/plugins/platforms/testlite/qglxglcontext.cpp deleted file mode 100644 index 6fdbb56..0000000 --- a/src/plugins/platforms/testlite/qglxglcontext.cpp +++ /dev/null @@ -1,150 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "x11util.h" -#include "qglxglcontext.h" -#include - -#include - -#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) -#include -#endif - - -QT_BEGIN_NAMESPACE - -QGLXGLContext::QGLXGLContext(Display *xdpy) - : QPlatformGLContext() - , m_display(xdpy) - , m_context(0) - , m_widget(0) -{ -} - -QGLXGLContext::~QGLXGLContext() -{ - if (m_context) { - qDebug("Destroying GLX context 0x%x", m_context); - glXDestroyContext(m_display, m_context); - } -} - -bool QGLXGLContext::create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) -{ - if (device->devType() != QInternal::Widget) { - qWarning("Creating a GL context is only supported on QWidgets"); - return false; - } - - m_widget = static_cast(device); - if (!m_widget->isTopLevel()) { - qWarning("Creating a GL context is only supported on top-level QWidgets"); - return false; - } - - // Get the XVisualInfo for the window: -// XWindowAttributes windowAttribs; -// XGetWindowAttributes(m_display, m_widget->winId(), &windowAttribs); - XVisualInfo visualInfoTemplate; - visualInfoTemplate.visualid = 33; //XVisualIDFromVisual(windowAttribs.visual); - XVisualInfo *visualInfo; - int matchingCount = 0; - visualInfo = XGetVisualInfo(m_display, VisualIDMask, &visualInfoTemplate, &matchingCount); - - m_context = glXCreateContext(m_display, visualInfo, 0, True); - - qDebug("Created GLX context 0x%x for visual ID %d", m_context, visualInfoTemplate.visualid); - - return true; -} - -void QGLXGLContext::makeCurrent() -{ - Window win = m_widget->winId(); - qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", win, m_context); - - glXMakeCurrent(m_display, win, m_context); -} - -void QGLXGLContext::doneCurrent() -{ - glXMakeCurrent(m_display, 0, 0); -} - -void QGLXGLContext::swapBuffers() -{ - glXSwapBuffers(m_display, m_widget->winId()); -} - -void* QGLXGLContext::getProcAddress(const QString& procName) -{ - typedef void *(*qt_glXGetProcAddressARB)(const GLubyte *); - static qt_glXGetProcAddressARB glXGetProcAddressARB = 0; - static bool resolved = false; - - if (resolved && !glXGetProcAddressARB) - return 0; - if (!glXGetProcAddressARB) { - QList glxExt = QByteArray(glXGetClientString(m_display, GLX_EXTENSIONS)).split(' '); - if (glxExt.contains("GLX_ARB_get_proc_address")) { -#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) - void *handle = dlopen(NULL, RTLD_LAZY); - if (handle) { - glXGetProcAddressARB = (qt_glXGetProcAddressARB) dlsym(handle, "glXGetProcAddressARB"); - dlclose(handle); - } - if (!glXGetProcAddressARB) -#endif - { - extern const QString qt_gl_library_name(); - QLibrary lib(qt_gl_library_name()); - glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB"); - } - } - resolved = true; - } - if (!glXGetProcAddressARB) - return 0; - return glXGetProcAddressARB(reinterpret_cast(procName.toLatin1().data())); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qglxglcontext.h b/src/plugins/platforms/testlite/qglxglcontext.h deleted file mode 100644 index ff8fe85..0000000 --- a/src/plugins/platforms/testlite/qglxglcontext.h +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef Q_GLX_CONTEXT_H -#define Q_GLX_CONTEXT_H - -#include -#include "x11util.h" -#include - -QT_BEGIN_NAMESPACE - -class QGLXGLContext : public QPlatformGLContext -{ -public: - QGLXGLContext(Display* xdpy); - ~QGLXGLContext(); - - bool create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext); - - void makeCurrent(); - void doneCurrent(); - void swapBuffers(); - void* getProcAddress(const QString& procName); - -private: - Display *m_display; - GLXContext m_context; - QWidget *m_widget; -}; - - -QT_END_NAMESPACE - -#endif diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp new file mode 100644 index 0000000..6fdbb56 --- /dev/null +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -0,0 +1,150 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "x11util.h" +#include "qglxglcontext.h" +#include + +#include + +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) +#include +#endif + + +QT_BEGIN_NAMESPACE + +QGLXGLContext::QGLXGLContext(Display *xdpy) + : QPlatformGLContext() + , m_display(xdpy) + , m_context(0) + , m_widget(0) +{ +} + +QGLXGLContext::~QGLXGLContext() +{ + if (m_context) { + qDebug("Destroying GLX context 0x%x", m_context); + glXDestroyContext(m_display, m_context); + } +} + +bool QGLXGLContext::create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) +{ + if (device->devType() != QInternal::Widget) { + qWarning("Creating a GL context is only supported on QWidgets"); + return false; + } + + m_widget = static_cast(device); + if (!m_widget->isTopLevel()) { + qWarning("Creating a GL context is only supported on top-level QWidgets"); + return false; + } + + // Get the XVisualInfo for the window: +// XWindowAttributes windowAttribs; +// XGetWindowAttributes(m_display, m_widget->winId(), &windowAttribs); + XVisualInfo visualInfoTemplate; + visualInfoTemplate.visualid = 33; //XVisualIDFromVisual(windowAttribs.visual); + XVisualInfo *visualInfo; + int matchingCount = 0; + visualInfo = XGetVisualInfo(m_display, VisualIDMask, &visualInfoTemplate, &matchingCount); + + m_context = glXCreateContext(m_display, visualInfo, 0, True); + + qDebug("Created GLX context 0x%x for visual ID %d", m_context, visualInfoTemplate.visualid); + + return true; +} + +void QGLXGLContext::makeCurrent() +{ + Window win = m_widget->winId(); + qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", win, m_context); + + glXMakeCurrent(m_display, win, m_context); +} + +void QGLXGLContext::doneCurrent() +{ + glXMakeCurrent(m_display, 0, 0); +} + +void QGLXGLContext::swapBuffers() +{ + glXSwapBuffers(m_display, m_widget->winId()); +} + +void* QGLXGLContext::getProcAddress(const QString& procName) +{ + typedef void *(*qt_glXGetProcAddressARB)(const GLubyte *); + static qt_glXGetProcAddressARB glXGetProcAddressARB = 0; + static bool resolved = false; + + if (resolved && !glXGetProcAddressARB) + return 0; + if (!glXGetProcAddressARB) { + QList glxExt = QByteArray(glXGetClientString(m_display, GLX_EXTENSIONS)).split(' '); + if (glxExt.contains("GLX_ARB_get_proc_address")) { +#if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) + void *handle = dlopen(NULL, RTLD_LAZY); + if (handle) { + glXGetProcAddressARB = (qt_glXGetProcAddressARB) dlsym(handle, "glXGetProcAddressARB"); + dlclose(handle); + } + if (!glXGetProcAddressARB) +#endif + { + extern const QString qt_gl_library_name(); + QLibrary lib(qt_gl_library_name()); + glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB"); + } + } + resolved = true; + } + if (!glXGetProcAddressARB) + return 0; + return glXGetProcAddressARB(reinterpret_cast(procName.toLatin1().data())); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h new file mode 100644 index 0000000..ff8fe85 --- /dev/null +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef Q_GLX_CONTEXT_H +#define Q_GLX_CONTEXT_H + +#include +#include "x11util.h" +#include + +QT_BEGIN_NAMESPACE + +class QGLXGLContext : public QPlatformGLContext +{ +public: + QGLXGLContext(Display* xdpy); + ~QGLXGLContext(); + + bool create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext); + + void makeCurrent(); + void doneCurrent(); + void swapBuffers(); + void* getProcAddress(const QString& procName); + +private: + Display *m_display; + GLXContext m_context; + QWidget *m_widget; +}; + + +QT_END_NAMESPACE + +#endif -- cgit v0.12 From 35fb88fcd035d43684dfd78b64b04645826d4fac Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Thu, 29 Apr 2010 10:58:54 +0200 Subject: Update testlite to use new GL integration API --- src/plugins/platforms/testlite/qglxintegration.cpp | 190 ++++++++++++++++++--- src/plugins/platforms/testlite/qglxintegration.h | 41 +++-- .../platforms/testlite/qtestliteintegration.cpp | 11 +- .../platforms/testlite/qtestliteintegration.h | 1 + src/plugins/platforms/testlite/testlite.pro | 4 +- 5 files changed, 206 insertions(+), 41 deletions(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 6fdbb56..9e83f85 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -39,12 +39,17 @@ ** ****************************************************************************/ -#include "x11util.h" -#include "qglxglcontext.h" -#include +#include +#include +#include "qtestlitewindow.h" + +#include +#include #include +#include "qglxintegration.h" + #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) #include #endif @@ -52,11 +57,124 @@ QT_BEGIN_NAMESPACE -QGLXGLContext::QGLXGLContext(Display *xdpy) +GLXFBConfig qt_glx_integration_choose_config(MyDisplay* xd, QGLFormat& format, int drawableType) +{ + int configAttribs[] = { + GLX_DRAWABLE_TYPE, drawableType, + GLX_LEVEL, format.plane(), + GLX_RENDER_TYPE, GLX_RGBA_BIT, + GLX_DOUBLEBUFFER, format.doubleBuffer() ? True : False, + GLX_STEREO, format.stereo() ? True : False, + + GLX_DEPTH_SIZE, (format.depthBufferSize() == -1) ? 0 : format.depthBufferSize(), + GLX_STENCIL_SIZE, (format.stencilBufferSize() == -1) ? 0 : format.stencilBufferSize(), + GLX_SAMPLE_BUFFERS_ARB, (format.samples() == -1) ? 0 : format.samples(), + + GLX_RED_SIZE, (format.redBufferSize() == -1) ? 1 : format.redBufferSize(), + GLX_GREEN_SIZE, (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(), + GLX_BLUE_SIZE, (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(), + GLX_ALPHA_SIZE, (format.alphaBufferSize() == -1) ? 0 : format.alphaBufferSize(), + + GLX_ACCUM_RED_SIZE, (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(), + GLX_ACCUM_GREEN_SIZE, (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(), + GLX_ACCUM_BLUE_SIZE, (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(), + GLX_ACCUM_ALPHA_SIZE, (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(), + XNone + }; + + GLXFBConfig *configs; + int configCount = 0; + configs = glXChooseFBConfig(xd->display, xd->screen, configAttribs, &configCount); + + if (!configs) + return 0; + + GLXFBConfig chosenConfig = 0; + for (int i = 0; i < configCount; ++i) { + chosenConfig = configs[i]; + + // Make sure we try to get an ARGB visual if the format asked for an alpha: + if (format.alpha()) { + XVisualInfo* vi; + vi = glXGetVisualFromFBConfig(xd->display, configs[i]); + if (!vi) + continue; + + XRenderPictFormat *pictFormat = XRenderFindVisualFormat(xd->display, vi->visual); + XFree(vi); + + if (pictFormat && (pictFormat->type == PictTypeDirect) && pictFormat->direct.alphaMask) { + // The pict format for the visual matching the FBConfig indicates ARGB + break; + } + } else + break; // Just choose the first in the list if there's no alpha requested + } + + // TODO: Populate the QGLFormat with the values of the GLXFBConfig + + XFree(configs); + return chosenConfig; +} + + +QGLXGLWidgetSurface::QGLXGLWidgetSurface(MyDisplay* xd) + : QPlatformGLWidgetSurface() + , m_xd(xd) + , m_config(0) + , m_winId(0) +{ +} + +QGLXGLWidgetSurface::~QGLXGLWidgetSurface() +{ +} + +static Colormap qt_glx_integration_colormap = 0; + + +bool QGLXGLWidgetSurface::create(QGLWidget *widget, QGLFormat& format) +{ + m_config = qt_glx_integration_choose_config(m_xd, format, GLX_WINDOW_BIT); + + Window parentWindow = widget->window()->winId(); + + XVisualInfo* visualInfo; + visualInfo = glXGetVisualFromFBConfig(m_xd->display, m_config); + + if (!qt_glx_integration_colormap) { + qt_glx_integration_colormap = XCreateColormap(m_xd->display, parentWindow, + visualInfo->visual, AllocNone); + } + + XSetWindowAttributes windowAttribs; + windowAttribs.background_pixel = m_xd->whitePixel(); + windowAttribs.border_pixel = m_xd->blackPixel(); + windowAttribs.colormap = qt_glx_integration_colormap; + + m_winId = XCreateWindow(m_xd->display, parentWindow, + widget->x(), widget->y(), widget->width(), widget->height(), + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWBackPixel|CWBorderPixel|CWColormap, &windowAttribs); + + XMapWindow(m_xd->display, m_winId); + + XFree(visualInfo); + return true; +} + +void QGLXGLWidgetSurface::setGeometry(const QRect& rect) +{ + XMoveResizeWindow(m_xd->display, m_winId, rect.x(), rect.y(), rect.width(), rect.height()); +} + + +QGLXGLContext::QGLXGLContext(MyDisplay *xd) : QPlatformGLContext() - , m_display(xdpy) + , m_xd(xd) + , m_drawable(0) + , m_config(0) , m_context(0) - , m_widget(0) { } @@ -64,55 +182,75 @@ QGLXGLContext::~QGLXGLContext() { if (m_context) { qDebug("Destroying GLX context 0x%x", m_context); - glXDestroyContext(m_display, m_context); + glXDestroyContext(m_xd->display, m_context); } } -bool QGLXGLContext::create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext) +bool QGLXGLContext::create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext) { + Q_UNUSED(format); + if (device->devType() != QInternal::Widget) { qWarning("Creating a GL context is only supported on QWidgets"); return false; } - m_widget = static_cast(device); - if (!m_widget->isTopLevel()) { - qWarning("Creating a GL context is only supported on top-level QWidgets"); - return false; + GLXContext shareGlxContext = 0; + if (shareContext) + shareGlxContext = static_cast(shareContext)->glxContext(); + + + QWidget* widget = static_cast(device); + QGLWidget* glWidget = qobject_cast(widget); + if (glWidget) { + // Take the config from the QGLWidget's glx surface: + QGLXGLWidgetSurface* surface = static_cast(glWidget->platformSurface()); + m_config = surface->config(); + m_drawable = (Drawable)surface->winId(); + } + else { + if (!widget->isTopLevel()) { + qWarning("Creating a GL context is only supported on top-level QWidgets"); + return false; + } + m_drawable = (Drawable)widget->platformWindow()->winId(); + + // ### This might choose a config with a visual that isn't compatable with the native window: + m_config = qt_glx_integration_choose_config(m_xd, format, GLX_WINDOW_BIT); } + m_context = glXCreateNewContext(m_xd->display, m_config, GLX_RGBA_TYPE, shareGlxContext, True); + // Get the XVisualInfo for the window: // XWindowAttributes windowAttribs; // XGetWindowAttributes(m_display, m_widget->winId(), &windowAttribs); - XVisualInfo visualInfoTemplate; - visualInfoTemplate.visualid = 33; //XVisualIDFromVisual(windowAttribs.visual); - XVisualInfo *visualInfo; - int matchingCount = 0; - visualInfo = XGetVisualInfo(m_display, VisualIDMask, &visualInfoTemplate, &matchingCount); +// XVisualInfo visualInfoTemplate; +// visualInfoTemplate.visualid = 33; //XVisualIDFromVisual(windowAttribs.visual); +// XVisualInfo *visualInfo; +// int matchingCount = 0; +// visualInfo = XGetVisualInfo(m_xd->display, VisualIDMask, &visualInfoTemplate, &matchingCount); - m_context = glXCreateContext(m_display, visualInfo, 0, True); +// m_context = glXCreateContext(m_xd->display, visualInfo, 0, True); - qDebug("Created GLX context 0x%x for visual ID %d", m_context, visualInfoTemplate.visualid); +// qDebug("Created GLX context 0x%x for visual ID %d", m_context, visualInfoTemplate.visualid); return true; } void QGLXGLContext::makeCurrent() { - Window win = m_widget->winId(); - qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", win, m_context); - - glXMakeCurrent(m_display, win, m_context); + qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", m_drawable, m_context); + glXMakeCurrent(m_xd->display, m_drawable, m_context); } void QGLXGLContext::doneCurrent() { - glXMakeCurrent(m_display, 0, 0); + glXMakeCurrent(m_xd->display, 0, 0); } void QGLXGLContext::swapBuffers() { - glXSwapBuffers(m_display, m_widget->winId()); + glXSwapBuffers(m_xd->display, m_drawable); } void* QGLXGLContext::getProcAddress(const QString& procName) @@ -124,7 +262,7 @@ void* QGLXGLContext::getProcAddress(const QString& procName) if (resolved && !glXGetProcAddressARB) return 0; if (!glXGetProcAddressARB) { - QList glxExt = QByteArray(glXGetClientString(m_display, GLX_EXTENSIONS)).split(' '); + QList glxExt = QByteArray(glXGetClientString(m_xd->display, GLX_EXTENSIONS)).split(' '); if (glxExt.contains("GLX_ARB_get_proc_address")) { #if defined(Q_OS_LINUX) || defined(Q_OS_BSD4) void *handle = dlopen(NULL, RTLD_LAZY); diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index ff8fe85..c7cdc91 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -43,31 +43,52 @@ #define Q_GLX_CONTEXT_H #include -#include "x11util.h" #include QT_BEGIN_NAMESPACE +class MyDisplay; + +class QGLXGLWidgetSurface : public QPlatformGLWidgetSurface +{ +public: + QGLXGLWidgetSurface(MyDisplay* xd); + virtual ~QGLXGLWidgetSurface(); + + virtual bool create(QGLWidget*, QGLFormat&); + virtual void setGeometry(const QRect&); + + GLXFBConfig config() {return m_config;} + Window winId() {return m_winId;} + +private: + MyDisplay *m_xd; + GLXFBConfig m_config; + Window m_winId; +}; + class QGLXGLContext : public QPlatformGLContext { public: - QGLXGLContext(Display* xdpy); + QGLXGLContext(MyDisplay* xd); ~QGLXGLContext(); - bool create(QPaintDevice* device, const QGLFormat& format, QPlatformGLContext* shareContext); - - void makeCurrent(); - void doneCurrent(); - void swapBuffers(); - void* getProcAddress(const QString& procName); + virtual bool create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext); + virtual void makeCurrent(); + virtual void doneCurrent(); + virtual void swapBuffers(); + virtual void* getProcAddress(const QString& procName); + GLXContext glxContext() {return m_context;} private: - Display *m_display; + MyDisplay *m_xd; + Drawable m_drawable; + GLXFBConfig m_config; GLXContext m_context; - QWidget *m_widget; }; + QT_END_NAMESPACE #endif diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index 6c07349..32562dd 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -52,7 +52,7 @@ #ifndef QT_NO_OPENGL #include -#include "qglxglcontext.h" +#include "qglxintegration.h" #endif QT_BEGIN_NAMESPACE @@ -132,9 +132,14 @@ bool QTestLiteIntegration::hasOpenGL() const return glXQueryExtension(xd->display, 0, 0) != 0; } -QPlatformGLContext * QTestLiteIntegration::createGLContext() +QPlatformGLContext *QTestLiteIntegration::createGLContext() { - return new QGLXGLContext(xd->display); + return new QGLXGLContext(xd); +} + +QPlatformGLWidgetSurface *QTestLiteIntegration::createGLWidgetSurface() +{ + return new QGLXGLWidgetSurface(xd); } #endif // QT_NO_OPENGL diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h index 4260faa..69dad93 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.h +++ b/src/plugins/platforms/testlite/qtestliteintegration.h @@ -84,6 +84,7 @@ public: #ifndef QT_NO_OPENGL bool hasOpenGL() const; QPlatformGLContext * createGLContext(); + QPlatformGLWidgetSurface * createGLWidgetSurface(); #endif MyDisplay *xd; diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro index 454193d..0a5ebb2 100644 --- a/src/plugins/platforms/testlite/testlite.pro +++ b/src/plugins/platforms/testlite/testlite.pro @@ -10,8 +10,8 @@ LIBS += -lX11 -lXext contains(QT_CONFIG, opengl) { QT += opengl - HEADERS += qglxglcontext.h - SOURCES += qglxglcontext.cpp + HEADERS += qglxintegration.h + SOURCES += qglxintegration.cpp } target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -- cgit v0.12 From 702c0546d7d0c39b436bc4a3ec00e24ef454a9b9 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Thu, 29 Apr 2010 16:39:06 +0200 Subject: Add QPlatformGLWidgetSurface::filterEvent This allows platform integrations to do something special when the QGLWidget recieves an event. Of particular interest is the ParentAboutToChange and ParentChange events. --- src/opengl/qgl_lite.cpp | 14 ++++++++++++++ src/opengl/qglplatformintegration_lite.h | 1 + 2 files changed, 15 insertions(+) diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index fa1439c..0ffda5f 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -68,6 +68,12 @@ QPlatformGLWidgetSurface::~QPlatformGLWidgetSurface() { } +bool QPlatformGLWidgetSurface::filterEvent(QEvent*) +{ + // By default, return false to allow the event to pass through + return false; +} + bool QGLFormat::hasOpenGL() { @@ -242,6 +248,14 @@ void QGLWidget::setMouseTracking(bool enable) bool QGLWidget::event(QEvent *e) { + Q_D(QGLWidget); + + if (d->wsurf) { + bool eventFiltered = d->wsurf->filterEvent(e); + if (eventFiltered) + return true; + } + return QWidget::event(e); } diff --git a/src/opengl/qglplatformintegration_lite.h b/src/opengl/qglplatformintegration_lite.h index 94d4da0..bec920c 100644 --- a/src/opengl/qglplatformintegration_lite.h +++ b/src/opengl/qglplatformintegration_lite.h @@ -59,6 +59,7 @@ public: virtual bool create(QGLWidget*, QGLFormat&) = 0; virtual void setGeometry(const QRect&) = 0; + virtual bool filterEvent(QEvent*); }; -- cgit v0.12 From c5d7513159feeda384d1c3f97906f7086cb38db8 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Thu, 29 Apr 2010 16:42:19 +0200 Subject: Fix re-parenting of QGLWidgets in testlite --- src/plugins/platforms/testlite/qglxintegration.cpp | 22 ++++++++++++++++++++++ src/plugins/platforms/testlite/qglxintegration.h | 2 ++ 2 files changed, 24 insertions(+) diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 9e83f85..c21c3aa 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -123,6 +123,7 @@ QGLXGLWidgetSurface::QGLXGLWidgetSurface(MyDisplay* xd) , m_xd(xd) , m_config(0) , m_winId(0) + , m_widget(0) { } @@ -135,6 +136,8 @@ static Colormap qt_glx_integration_colormap = 0; bool QGLXGLWidgetSurface::create(QGLWidget *widget, QGLFormat& format) { + m_widget = widget; + m_config = qt_glx_integration_choose_config(m_xd, format, GLX_WINDOW_BIT); Window parentWindow = widget->window()->winId(); @@ -168,6 +171,25 @@ void QGLXGLWidgetSurface::setGeometry(const QRect& rect) XMoveResizeWindow(m_xd->display, m_winId, rect.x(), rect.y(), rect.width(), rect.height()); } +bool QGLXGLWidgetSurface::filterEvent(QEvent *e) +{ + if (e->type() == QEvent::ParentAboutToChange) { + // We temporarily hide the window and re-parent it with the root window + // as it's quite likely that the parent window is about to be deleted, + // which would otherwise destroy our window along with it. + XUnmapWindow(m_xd->display, m_winId); + XReparentWindow(m_xd->display, m_winId, m_xd->rootWindow(), 0, 0); + } + + if (e->type() == QEvent::ParentChange) { + // Once we've got a new parent, we need to reparent the window and show it again: + XReparentWindow(m_xd->display, m_winId, m_widget->window()->winId(), m_widget->x(), m_widget->y()); + XMapWindow(m_xd->display, m_winId); + } + + return false; // Allow the event to pass through to QGLWidget +} + QGLXGLContext::QGLXGLContext(MyDisplay *xd) : QPlatformGLContext() diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index c7cdc91..0302950 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -57,6 +57,7 @@ public: virtual bool create(QGLWidget*, QGLFormat&); virtual void setGeometry(const QRect&); + virtual bool filterEvent(QEvent*); GLXFBConfig config() {return m_config;} Window winId() {return m_winId;} @@ -65,6 +66,7 @@ private: MyDisplay *m_xd; GLXFBConfig m_config; Window m_winId; + QGLWidget* m_widget; }; class QGLXGLContext : public QPlatformGLContext -- cgit v0.12 From 327f7c9b055bd6c0131eb92fc7bed58698cb83b0 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Fri, 30 Apr 2010 13:43:42 +0200 Subject: Remove windowSurface member from QTestLiteWindow This makes QTestLiteWindow independent of the window surface, so window surfaces other than QTestLiteWindowSurface can be used too. Reviewed-By: Paul --- src/plugins/platforms/testlite/qtestlitewindow.cpp | 4 +--- src/plugins/platforms/testlite/qtestlitewindow.h | 3 --- src/plugins/platforms/testlite/qtestlitewindowsurface.cpp | 1 - 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 545912e..242f335 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -39,7 +39,6 @@ ** ****************************************************************************/ -#include "qtestlitewindowsurface.h" #include "qtestliteintegration.h" #include @@ -184,7 +183,6 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration setWindowTitle(QLatin1String("Qt Lighthouse")); currentCursor = -1; - windowSurface = 0; setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility @@ -678,7 +676,7 @@ void QTestLiteWindow::paintEvent() qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; #endif - windowSurface->flush(windowSurface->window(), QRect(xpos,ypos,width, height), QPoint()); + widget()->windowSurface()->flush(widget(), QRect(xpos,ypos,width, height), QPoint()); } diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h index 3624854..28e49be 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.h +++ b/src/plugins/platforms/testlite/qtestlitewindow.h @@ -94,8 +94,6 @@ public: //### struct MyShmImageInfo; -class QWindowSurface; - class QTestLiteWindow : public QPlatformWindow { public: @@ -140,7 +138,6 @@ private: int currentCursor; - QWindowSurface *windowSurface; MyDisplay *xd; QTestLiteScreen *mScreen; diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp index a14a50e..53f4791 100644 --- a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp @@ -131,7 +131,6 @@ QTestLiteWindowSurface::QTestLiteWindowSurface (QTestLiteScreen */*screen*/, QWi painted(false), image_info(0) { xw = static_cast(window->platformWindow()); - xw->windowSurface = this; // qDebug() << "QTestLiteWindowSurface::QTestLiteWindowSurface:" << xw->window; } -- cgit v0.12 From 468af8f1dd1c9bc98919e8f407c9676e880249f9 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Fri, 30 Apr 2010 13:50:10 +0200 Subject: Export QGLWindowSurface so it can be used by Lighthouse plugins --- src/opengl/qwindowsurface_gl_p.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h index 9d17514..6bff109 100644 --- a/src/opengl/qwindowsurface_gl_p.h +++ b/src/opengl/qwindowsurface_gl_p.h @@ -77,7 +77,7 @@ public: QGLWindowSurfacePrivate* d; }; -class QGLWindowSurface : public QObject, public QWindowSurface // , public QPaintDevice +class Q_OPENGL_EXPORT QGLWindowSurface : public QObject, public QWindowSurface // , public QPaintDevice { Q_OBJECT public: -- cgit v0.12 From d279e5d3ee808f4faeb5408dc66740b7fffab84f Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Fri, 30 Apr 2010 13:55:06 +0200 Subject: Fix GL extention function pointer lookups in testlite For some reason, if the application doesn't link against QtOpenGL then the qt_gl_library_name() symbol will be missing. For now just hard-code the library name to "GL". --- src/plugins/platforms/testlite/qglxintegration.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index c21c3aa..d4383ef 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -296,7 +296,8 @@ void* QGLXGLContext::getProcAddress(const QString& procName) #endif { extern const QString qt_gl_library_name(); - QLibrary lib(qt_gl_library_name()); +// QLibrary lib(qt_gl_library_name()); + QLibrary lib(QLatin1String("GL")); glXGetProcAddressARB = (qt_glXGetProcAddressARB) lib.resolve("glXGetProcAddressARB"); } } -- cgit v0.12 From a24c7ee4da84d3ac8e52cafda200f07c48d0bc98 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Fri, 30 Apr 2010 14:38:01 +0200 Subject: Add support for using OpenGL for window surfaces to testlite To use OpenGL for regular widget rendering, pass testlitegl as the argument to -platform. QGLWindowSurface works by creating a QGLContext on the top-level widget. As testlite's GL integration allows this, QGLWindowSurface can be used without modification. --- src/plugins/platforms/testlite/main.cpp | 7 +++++++ src/plugins/platforms/testlite/qtestliteintegration.cpp | 11 ++++++++++- src/plugins/platforms/testlite/qtestliteintegration.h | 5 ++++- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/testlite/main.cpp b/src/plugins/platforms/testlite/main.cpp index 29bbcea..5f631f0 100644 --- a/src/plugins/platforms/testlite/main.cpp +++ b/src/plugins/platforms/testlite/main.cpp @@ -55,6 +55,9 @@ QStringList QTestLiteIntegrationPlugin::keys() const { QStringList list; list << "TestLite"; +#ifndef QT_NO_OPENGL + list << "TestLiteGL"; +#endif return list; } @@ -62,6 +65,10 @@ QPlatformIntegration* QTestLiteIntegrationPlugin::create(const QString& system) { if (system.toLower() == "testlite") return new QTestLiteIntegration; +#ifndef QT_NO_OPENGL + if (system.toLower() == "testlitegl") + return new QTestLiteIntegration(true); +#endif return 0; } diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index 32562dd..f3c3688 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -53,6 +53,7 @@ #ifndef QT_NO_OPENGL #include #include "qglxintegration.h" +#include #endif QT_BEGIN_NAMESPACE @@ -81,7 +82,10 @@ public: }; -QTestLiteIntegration::QTestLiteIntegration() +QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL) +#ifndef QT_NO_OPENGL + : mUseOpenGL(useOpenGL) +#endif { xd = new MyDisplay; @@ -109,6 +113,11 @@ QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget, WId) const { +#ifndef QT_NO_OPENGL + if (mUseOpenGL) + return new QGLWindowSurface(widget); +#endif + return new QTestLiteWindowSurface(mPrimaryScreen, widget); } diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h index 69dad93..8289a5c 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.h +++ b/src/plugins/platforms/testlite/qtestliteintegration.h @@ -71,7 +71,7 @@ public: class QTestLiteIntegration : public QPlatformIntegration { public: - QTestLiteIntegration(); + QTestLiteIntegration(bool useOpenGL = false); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; @@ -90,6 +90,9 @@ public: MyDisplay *xd; private: +#ifndef QT_NO_OPENGL + bool mUseOpenGL; +#endif QTestLiteScreen *mPrimaryScreen; QList mScreens; }; -- cgit v0.12 From 7286bc3c88c632a3e081e8df40e0f94438da1911 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Fri, 30 Apr 2010 15:55:47 +0200 Subject: Use QGLPixmapData for testlite when in OpenGL mode --- src/opengl/qpixmapdata_gl_p.h | 2 +- src/plugins/platforms/testlite/qtestliteintegration.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/opengl/qpixmapdata_gl_p.h b/src/opengl/qpixmapdata_gl_p.h index c239bcb..736a28e 100644 --- a/src/opengl/qpixmapdata_gl_p.h +++ b/src/opengl/qpixmapdata_gl_p.h @@ -96,7 +96,7 @@ private: }; -class QGLPixmapData : public QPixmapData +class Q_OPENGL_EXPORT QGLPixmapData : public QPixmapData { public: QGLPixmapData(PixelType type); diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index f3c3688..3fa3495 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -54,6 +54,7 @@ #include #include "qglxintegration.h" #include +#include #endif QT_BEGIN_NAMESPACE @@ -108,6 +109,10 @@ QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL) QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) const { +#ifndef QT_NO_OPENGL + if (mUseOpenGL) + return new QGLPixmapData(type); +#endif return new QRasterPixmapData(type); } -- cgit v0.12 From 8a37bad57ef1fddc08c78f6ddc6fbcf0d3879676 Mon Sep 17 00:00:00 2001 From: Tom Cooksey Date: Fri, 30 Apr 2010 15:57:25 +0200 Subject: Fix selecting GLXFBConfigs with depth/stencil/sample buffers This has the unfortunate side effect that different GLXFBConfigs now get selected, which in turn have different visuals. It seems each different visual requires its own colormap (even though they are all TrueColor). To get round this, we allocate a new colormap for each widget. --- src/plugins/platforms/testlite/qglxintegration.cpp | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index d4383ef..88764f3 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -59,6 +59,17 @@ QT_BEGIN_NAMESPACE GLXFBConfig qt_glx_integration_choose_config(MyDisplay* xd, QGLFormat& format, int drawableType) { + int depthSize = 0; + int stencilSize = 0; + int sampleSize = 0; + + if (format.depth()) + depthSize = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize(); + if (format.stencil()) + stencilSize = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize(); + if (format.sampleBuffers()) + sampleSize = (format.samples() == -1) ? 1 : format.samples(); + int configAttribs[] = { GLX_DRAWABLE_TYPE, drawableType, GLX_LEVEL, format.plane(), @@ -66,9 +77,9 @@ GLXFBConfig qt_glx_integration_choose_config(MyDisplay* xd, QGLFormat& format, i GLX_DOUBLEBUFFER, format.doubleBuffer() ? True : False, GLX_STEREO, format.stereo() ? True : False, - GLX_DEPTH_SIZE, (format.depthBufferSize() == -1) ? 0 : format.depthBufferSize(), - GLX_STENCIL_SIZE, (format.stencilBufferSize() == -1) ? 0 : format.stencilBufferSize(), - GLX_SAMPLE_BUFFERS_ARB, (format.samples() == -1) ? 0 : format.samples(), + GLX_DEPTH_SIZE, depthSize, + GLX_STENCIL_SIZE, stencilSize, + GLX_SAMPLE_BUFFERS_ARB, sampleSize, GLX_RED_SIZE, (format.redBufferSize() == -1) ? 1 : format.redBufferSize(), GLX_GREEN_SIZE, (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(), @@ -145,10 +156,11 @@ bool QGLXGLWidgetSurface::create(QGLWidget *widget, QGLFormat& format) XVisualInfo* visualInfo; visualInfo = glXGetVisualFromFBConfig(m_xd->display, m_config); - if (!qt_glx_integration_colormap) { + // ### This will leak the colormap, but we need a colormap for each visual +// if (!qt_glx_integration_colormap) { qt_glx_integration_colormap = XCreateColormap(m_xd->display, parentWindow, visualInfo->visual, AllocNone); - } +// } XSetWindowAttributes windowAttribs; windowAttribs.background_pixel = m_xd->whitePixel(); -- cgit v0.12 From b30a58d71d2608b033c1e9fcfa68cc69c14d31c7 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 3 May 2010 17:03:16 +0200 Subject: some cursor documentation fixes, reduce public access to class internals --- src/gui/painting/qgraphicssystemcursor_lite.cpp | 28 +++++++++++++++++-------- src/gui/painting/qgraphicssystemcursor_lite.h | 7 +++++-- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/gui/painting/qgraphicssystemcursor_lite.cpp b/src/gui/painting/qgraphicssystemcursor_lite.cpp index fdb026c..4c97948 100644 --- a/src/gui/painting/qgraphicssystemcursor_lite.cpp +++ b/src/gui/painting/qgraphicssystemcursor_lite.cpp @@ -66,7 +66,7 @@ QPointer QGraphicsSystemCursor::instance = 0; */ /*! - \fn virtual void pointerEvent(const QMouseEvent & event) + \fn virtual void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & event) This method is called by Qt whenever a QMouseEvent is generated by the underlying pointer input. \a event is a reference to the QMouseEvent in @@ -76,7 +76,7 @@ QPointer QGraphicsSystemCursor::instance = 0; */ /*! - \fn virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) + \fn virtual void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) \brief This method is called by Qt whenever the cursor graphic should be changed. @@ -91,8 +91,9 @@ QPointer QGraphicsSystemCursor::instance = 0; */ /*! - Constructs a QGraphicsSystemCursor + \fn QGraphicsSystemCursor::QGraphicsSystemCursor() + \brief Constructs a QGraphicsSystemCursor */ QGraphicsSystemCursor::QGraphicsSystemCursor(QPlatformScreen *scr ) : screen(scr) @@ -104,6 +105,15 @@ QGraphicsSystemCursor::QGraphicsSystemCursor(QPlatformScreen *scr ) // Beginning of built-in cursor graphics // from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp +/*! + \class QGraphicsSystemCursorImage + + \brief The QGraphicsSystemCursorImage class provides a set of graphics + intended to be used as cursors. + + \sa QGraphicsSystemCursor +*/ + static QGraphicsSystemCursorImage *systemCursorTable[Qt::LastCursor+1]; static bool systemCursorTableInit = false; @@ -496,7 +506,7 @@ void QGraphicsSystemCursorImage::createSystemCursor(int id) } /*! - \fn void set(Qt::CursorShape id) + \fn void QGraphicsSystemCursorImage::set(Qt::CursorShape id) \brief Calling this method sets the cursor image to the specified shape @@ -525,7 +535,7 @@ void QGraphicsSystemCursorImage::set(Qt::CursorShape id) } /*! - \fn void set(const QImage * image, int hx, int hy) + \fn void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) @@ -544,7 +554,7 @@ void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) } /*! - \fn set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) + \fn void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) \brief set the cursor image to the graphic represented by the combination of data, mask, width, and height @@ -619,7 +629,7 @@ void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, } /*! - \fn QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + \fn QGraphicsSystemCursorImage::QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) \brief set the cursor image to the graphic represented by the combination of data, mask, width, and height @@ -640,13 +650,13 @@ void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, */ /*! - \fn QImage *image() + \fn QImage *QGraphicsSystemCursorImage::image() \brief Return the cursor graphic as a pointer to a QImage */ /*! - \fn QPoint hotspot + \fn QPoint QGraphicsSystemCursorImage::hotspot() \brief Return the cursor's hotspot */ diff --git a/src/gui/painting/qgraphicssystemcursor_lite.h b/src/gui/painting/qgraphicssystemcursor_lite.h index 5288b83..1f4cfd6 100644 --- a/src/gui/painting/qgraphicssystemcursor_lite.h +++ b/src/gui/painting/qgraphicssystemcursor_lite.h @@ -78,9 +78,12 @@ public: static QPointer getInstance() { return instance; } protected: - static QPointer instance; // limit 1 cursor at a time - QPlatformScreen* screen; // Where to request an update + +private: + static QPointer instance; // limit 1 cursor at a time + friend void qt_lite_set_cursor(QWidget * w, bool force); + friend class QApplicationPrivate; }; QT_END_NAMESPACE -- cgit v0.12 From c6fd02d70e22d497658153abbd9fcf3176b550ca Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 4 May 2010 14:26:43 +0200 Subject: add parameter support for platform integration plugins --- src/gui/kernel/qplatformintegrationfactory_lite.cpp | 5 +++-- src/gui/kernel/qplatformintegrationplugin_lite.h | 4 ++-- src/plugins/platforms/directfb/main.cpp | 5 +++-- src/plugins/platforms/linuxfb/main.cpp | 5 +++-- src/plugins/platforms/minimal/main.cpp | 5 +++-- src/plugins/platforms/qvfb/main.cpp | 5 +++-- src/plugins/platforms/testlite/main.cpp | 5 +++-- src/plugins/platforms/vnc/main.cpp | 5 +++-- 8 files changed, 23 insertions(+), 16 deletions(-) diff --git a/src/gui/kernel/qplatformintegrationfactory_lite.cpp b/src/gui/kernel/qplatformintegrationfactory_lite.cpp index 7f650e9..9a00dea 100644 --- a/src/gui/kernel/qplatformintegrationfactory_lite.cpp +++ b/src/gui/kernel/qplatformintegrationfactory_lite.cpp @@ -57,12 +57,13 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, QPlatformIntegration *QPlatformIntegrationFactory::create(const QString& key) { QPlatformIntegration *ret = 0; - QString platform = key.toLower(); + QStringList paramList = key.split(QLatin1Char(':')); + QString platform = paramList.takeFirst().toLower(); qDebug() << loader()->keys(); #if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) if (QPlatformIntegrationFactoryInterface *factory = qobject_cast(loader()->instance(platform))) - ret = factory->create(platform); + ret = factory->create(platform, paramList); #endif return ret; diff --git a/src/gui/kernel/qplatformintegrationplugin_lite.h b/src/gui/kernel/qplatformintegrationplugin_lite.h index 0e116f2..9c37cf7 100644 --- a/src/gui/kernel/qplatformintegrationplugin_lite.h +++ b/src/gui/kernel/qplatformintegrationplugin_lite.h @@ -66,7 +66,7 @@ class QPlatformIntegration; struct QPlatformIntegrationFactoryInterface : public QFactoryInterface { - virtual QPlatformIntegration *create(const QString &key) = 0; + virtual QPlatformIntegration *create(const QString &key, const QStringList ¶mList) = 0; }; #define QPlatformIntegrationFactoryInterface_iid "com.nokia.Qt.QPlatformIntegrationFactoryInterface" @@ -82,7 +82,7 @@ public: ~QPlatformIntegrationPlugin(); virtual QStringList keys() const = 0; - virtual QPlatformIntegration *create(const QString &key) = 0; + virtual QPlatformIntegration *create(const QString &key, const QStringList ¶mList) = 0; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/main.cpp b/src/plugins/platforms/directfb/main.cpp index 9c7bcf6..f4ece32 100644 --- a/src/plugins/platforms/directfb/main.cpp +++ b/src/plugins/platforms/directfb/main.cpp @@ -48,7 +48,7 @@ class QDirectFbIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QPlatformIntegration *create(const QString&); + QPlatformIntegration *create(const QString&, const QStringList&); }; QStringList QDirectFbIntegrationPlugin::keys() const @@ -58,8 +58,9 @@ QStringList QDirectFbIntegrationPlugin::keys() const return list; } -QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system) +QPlatformIntegration * QDirectFbIntegrationPlugin::create(const QString& system, const QStringList& paramList) { + Q_UNUSED(paramList); if (system.toLower() == "directfb") return new QDirectFbIntegration; diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp index 65569ac..c5f7fe0 100644 --- a/src/plugins/platforms/linuxfb/main.cpp +++ b/src/plugins/platforms/linuxfb/main.cpp @@ -48,7 +48,7 @@ class QLinuxFbIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QPlatformIntegration *create(const QString&); + QPlatformIntegration *create(const QString&, const QStringList&); }; QStringList QLinuxFbIntegrationPlugin::keys() const @@ -58,8 +58,9 @@ QStringList QLinuxFbIntegrationPlugin::keys() const return list; } -QPlatformIntegration* QLinuxFbIntegrationPlugin::create(const QString& system) +QPlatformIntegration* QLinuxFbIntegrationPlugin::create(const QString& system, const QStringList& paramList) { + Q_UNUSED(paramList); if (system.toLower() == "linuxfb") return new QLinuxFbIntegration; diff --git a/src/plugins/platforms/minimal/main.cpp b/src/plugins/platforms/minimal/main.cpp index 4958468..a4d646d 100644 --- a/src/plugins/platforms/minimal/main.cpp +++ b/src/plugins/platforms/minimal/main.cpp @@ -48,7 +48,7 @@ class QMinimalIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QPlatformIntegration *create(const QString&); + QPlatformIntegration *create(const QString&, const QStringList&); }; QStringList QMinimalIntegrationPlugin::keys() const @@ -58,8 +58,9 @@ QStringList QMinimalIntegrationPlugin::keys() const return list; } -QPlatformIntegration *QMinimalIntegrationPlugin::create(const QString& system) +QPlatformIntegration *QMinimalIntegrationPlugin::create(const QString& system, const QStringList& paramList) { + Q_UNUSED(paramList); if (system.toLower() == "minimal") return new QMinimalIntegration; diff --git a/src/plugins/platforms/qvfb/main.cpp b/src/plugins/platforms/qvfb/main.cpp index 409f11c..206ece8 100644 --- a/src/plugins/platforms/qvfb/main.cpp +++ b/src/plugins/platforms/qvfb/main.cpp @@ -49,7 +49,7 @@ class QVFbIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QPlatformIntegration *create(const QString&); + QPlatformIntegration *create(const QString&, const QStringList&); }; QStringList QVFbIntegrationPlugin::keys() const @@ -59,8 +59,9 @@ QStringList QVFbIntegrationPlugin::keys() const return list; } -QPlatformIntegration* QVFbIntegrationPlugin::create(const QString& system) +QPlatformIntegration* QVFbIntegrationPlugin::create(const QString& system, const QStringList& paramList) { + Q_UNUSED(paramList); if (system.toLower() == "qvfb") return new QVFbIntegration; diff --git a/src/plugins/platforms/testlite/main.cpp b/src/plugins/platforms/testlite/main.cpp index 5f631f0..2f6aa8b 100644 --- a/src/plugins/platforms/testlite/main.cpp +++ b/src/plugins/platforms/testlite/main.cpp @@ -48,7 +48,7 @@ class QTestLiteIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QPlatformIntegration *create(const QString&); + QPlatformIntegration *create(const QString&, const QStringList&); }; QStringList QTestLiteIntegrationPlugin::keys() const @@ -61,8 +61,9 @@ QStringList QTestLiteIntegrationPlugin::keys() const return list; } -QPlatformIntegration* QTestLiteIntegrationPlugin::create(const QString& system) +QPlatformIntegration* QTestLiteIntegrationPlugin::create(const QString& system, const QStringList& paramList) { + Q_UNUSED(paramList); if (system.toLower() == "testlite") return new QTestLiteIntegration; #ifndef QT_NO_OPENGL diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp index 775259b..c66029c 100644 --- a/src/plugins/platforms/vnc/main.cpp +++ b/src/plugins/platforms/vnc/main.cpp @@ -49,7 +49,7 @@ class QVNCIntegrationPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QPlatformIntegration *create(const QString&); + QPlatformIntegration *create(const QString&, const QStringList &); }; QStringList QVNCIntegrationPlugin::keys() const @@ -59,8 +59,9 @@ QStringList QVNCIntegrationPlugin::keys() const return list; } -QPlatformIntegration* QVNCIntegrationPlugin::create(const QString& system) +QPlatformIntegration* QVNCIntegrationPlugin::create(const QString& system, const QStringList& paramList) { + Q_UNUSED(paramList); if (system.toLower() == "vnc") return new QVNCIntegration; -- cgit v0.12 From 47f886467b04ce712b4dcd90f0201720d614ff28 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 4 May 2010 14:59:04 +0200 Subject: VNC parameters for size and display id --- src/plugins/platforms/vnc/main.cpp | 2 +- src/plugins/platforms/vnc/qvncintegration.cpp | 54 ++++++++++++++++++++------- src/plugins/platforms/vnc/qvncintegration.h | 4 +- src/plugins/platforms/vnc/qvncserver.cpp | 4 +- src/plugins/platforms/vnc/qvncserver.h | 2 +- 5 files changed, 46 insertions(+), 20 deletions(-) diff --git a/src/plugins/platforms/vnc/main.cpp b/src/plugins/platforms/vnc/main.cpp index c66029c..e051e2d 100644 --- a/src/plugins/platforms/vnc/main.cpp +++ b/src/plugins/platforms/vnc/main.cpp @@ -63,7 +63,7 @@ QPlatformIntegration* QVNCIntegrationPlugin::create(const QString& system, const { Q_UNUSED(paramList); if (system.toLower() == "vnc") - return new QVNCIntegration; + return new QVNCIntegration(paramList); return 0; } diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 7bdba35..69aea79 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -51,25 +51,16 @@ #include -QVNCScreen::QVNCScreen() +QVNCScreen::QVNCScreen(QRect screenSize, int screenId) : QFbScreen::QFbScreen() { - int w = 800; - int h = 600; - int ew, eh; - const char *str; - if ((str=::getenv("QT_VNC_SIZE")) && sscanf(str,"%dx%d",&ew,&eh)==2) { - w = ew; - h = eh; - } - - setGeometry(QRect(0,0,w, h)); + setGeometry(screenSize); setDepth(32); setFormat(QImage::Format_RGB32); setPhysicalSize((geometry().size()*254)/720); - d_ptr = new QVNCScreenPrivate(this); + d_ptr = new QVNCScreenPrivate(this, screenId); cursor = new QVNCCursor(d_ptr->vncServer, this); d_ptr->vncServer->setCursor(static_cast(cursor)); @@ -91,10 +82,45 @@ QRegion QVNCScreen::doRedraw() return touched; } +static inline int defaultWidth() { return 800; } +static inline int defaultHeight() { return 600; } +static inline int defaultDisplay() { return 0; } + +static void usage() +{ + qWarning() << "VNC Platform Integration options:"; + qWarning() << " size=x - set the display width and height"; + qWarning() << " defaults to" << defaultWidth() << "x" << defaultHeight(); + qWarning() << " display= - set the VNC display port to ID + 5900"; + qWarning() << " defaults to" << defaultDisplay(); +} -QVNCIntegration::QVNCIntegration() +QVNCIntegration::QVNCIntegration(const QStringList& paramList) { - mPrimaryScreen = new QVNCScreen(); + int sizeX = defaultWidth(); + int sizeY = defaultHeight(); + int display = defaultDisplay(); + bool showUsage = false; + + foreach(QString confString, paramList) { + if (confString.startsWith(QLatin1String("size="))) { + QString val = confString.section(QLatin1Char('='), 1, 1); + sizeX = val.section(QLatin1Char('x'), 0, 0).toInt(); + sizeY = val.section(QLatin1Char('x'), 1, 1).toInt(); + } + else if (confString.startsWith(QLatin1String("display="))) { + display = confString.section(QLatin1Char('='), 1, 1).toInt(); + } + else { + qWarning() << "Unknown VNC option:" << confString; + showUsage = true; + } + } + + if (showUsage) + usage(); + + mPrimaryScreen = new QVNCScreen(QRect(0, 0, sizeX, sizeY), display); mScreens.append(mPrimaryScreen); } diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index 524b888..dcb5419 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -56,7 +56,7 @@ class QVNCScreenPrivate; class QVNCScreen : public QFbScreen { public: - QVNCScreen(); + QVNCScreen(QRect screenSize, int screenId); int linestep() const { return image() ? image()->bytesPerLine() : 0; } uchar *base() const { return image() ? image()->bits() : 0; } @@ -76,7 +76,7 @@ class QVNCIntegrationPrivate; class QVNCIntegration : public QPlatformIntegration { public: - QVNCIntegration(); + QVNCIntegration(const QStringList& paramList); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp index ab0a2f3..bd4d6ab 100644 --- a/src/plugins/platforms/vnc/qvncserver.cpp +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -1885,7 +1885,7 @@ void QVNCServer::discardClient() -QVNCScreenPrivate::QVNCScreenPrivate(QVNCScreen *parent) +QVNCScreenPrivate::QVNCScreenPrivate(QVNCScreen *parent, int screenId) : dpiX(72), dpiY(72), doOnScreenSurface(false), refreshRate(25), vncServer(0), q_ptr(parent) { @@ -1893,7 +1893,7 @@ QVNCScreenPrivate::QVNCScreenPrivate(QVNCScreen *parent) QWSSignalHandler::instance()->addObject(this); #endif - vncServer = new QVNCServer(q_ptr); + vncServer = new QVNCServer(q_ptr, screenId); vncServer->setRefreshRate(refreshRate); diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h index b1a9797..837f1f4 100644 --- a/src/plugins/platforms/vnc/qvncserver.h +++ b/src/plugins/platforms/vnc/qvncserver.h @@ -249,7 +249,7 @@ public: class QVNCScreenPrivate : public QObject { public: - QVNCScreenPrivate(QVNCScreen *parent); + QVNCScreenPrivate(QVNCScreen *parent, int screenId); ~QVNCScreenPrivate(); void setDirty(const QRect &rect, bool force = false); -- cgit v0.12 From 208e207925f9073fdca55f5824ce4d0051c86c6c Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 5 May 2010 13:40:19 +0200 Subject: allow multiple cursors --- src/gui/kernel/qapplication_lite.cpp | 8 +-- src/gui/kernel/qwidget_lite.cpp | 67 +++++++++++++------------ src/gui/painting/qgraphicssystemcursor_lite.cpp | 4 +- src/gui/painting/qgraphicssystemcursor_lite.h | 9 ++-- src/plugins/platforms/fb_base/fb_base.h | 1 + 5 files changed, 48 insertions(+), 41 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index f9e4242..31db7d0 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -691,9 +691,11 @@ void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent * QMouseEvent ev(type, localPoint, globalPoint, button, buttons, modifiers); - QPointer cursor = QGraphicsSystemCursor::getInstance(); - if (cursor) - cursor->pointerEvent(ev); + QList > cursors = QGraphicsSystemCursor::getInstances(); + foreach (QWeakPointer cursor, cursors) { + if (cursor) + cursor.data()->pointerEvent(ev); + } QApplication::sendSpontaneousEvent(mouseWidget, &ev); } diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 64fb6f7..ed731c0 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -689,6 +689,7 @@ void QWidgetPrivate::setModal_sys() #ifndef QT_NO_CURSOR void qt_lite_set_cursor(QWidget * w, bool force) { + static QCursor arrowCursor(Qt::ArrowCursor); static QPointer lastUnderMouse = 0; QCursor * override = QApplication::overrideCursor(); @@ -696,42 +697,46 @@ void qt_lite_set_cursor(QWidget * w, bool force) if (override && w != 0) return; - QPointer cursor = QGraphicsSystemCursor::getInstance(); - if (!cursor) - return; + QWidget *cursorWidget; + QCursor cursorCursor; - if (w == 0) { - if (override) { - cursor->changeCursor(override, QApplication::topLevelAt(QCursor::pos())); - return; + do { + if (w == 0) { + if (override) { + cursorCursor = *override; + cursorWidget = QApplication::topLevelAt(QCursor::pos()); + break; + } + w = QApplication::widgetAt(QCursor::pos()); + if (w == 0) // clear the override cursor while over empty space + w = QApplication::desktop(); + } else if (force) { + lastUnderMouse = w; + } else if (w->testAttribute(Qt::WA_WState_Created) && lastUnderMouse + && lastUnderMouse->effectiveWinId() == w->effectiveWinId()) { + w = lastUnderMouse; + } + if (w == QApplication::desktop() && !override) { + cursorCursor = arrowCursor; + cursorWidget = w; + break; } - w = QApplication::widgetAt(QCursor::pos()); - if (w == 0) // clear the override cursor while over empty space - w = QApplication::desktop(); - } else if (force) { - lastUnderMouse = w; - } else if (w->testAttribute(Qt::WA_WState_Created) && lastUnderMouse - && lastUnderMouse->effectiveWinId() == w->effectiveWinId()) { - w = lastUnderMouse; - } - - if (w == QApplication::desktop() && !override) { - QCursor c(Qt::ArrowCursor); - cursor->changeCursor(&c, w); - return; - } - QWidget * curWin = QApplication::activeWindow(); - if (!curWin && w && w->internalWinId()) - return; - QWidget* cW = w && !w->internalWinId() ? w : curWin; + QWidget * curWin = QApplication::activeWindow(); + if (!curWin && w && w->internalWinId()) + return; + QWidget* cW = w && !w->internalWinId() ? w : curWin; - if (!cW || cW->window() != w->window() || - !cW->isVisible() || !cW->underMouse() || override) - return; + if (!cW || cW->window() != w->window() || + !cW->isVisible() || !cW->underMouse() || override) + return; - QCursor c = w->cursor(); - cursor->changeCursor(&c, w); + cursorCursor = w->cursor(); + cursorWidget = w; + } while (0); + foreach (QWeakPointer cursor, QGraphicsSystemCursor::getInstances()) + if (cursor) + cursor.data()->changeCursor(&cursorCursor, cursorWidget); } #endif //QT_NO_CURSOR diff --git a/src/gui/painting/qgraphicssystemcursor_lite.cpp b/src/gui/painting/qgraphicssystemcursor_lite.cpp index 4c97948..623a75a 100644 --- a/src/gui/painting/qgraphicssystemcursor_lite.cpp +++ b/src/gui/painting/qgraphicssystemcursor_lite.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE -QPointer QGraphicsSystemCursor::instance = 0; +QList > QGraphicsSystemCursor::instances; /*! \class QGraphicsSystemCursor @@ -98,7 +98,7 @@ QPointer QGraphicsSystemCursor::instance = 0; QGraphicsSystemCursor::QGraphicsSystemCursor(QPlatformScreen *scr ) : screen(scr) { - instance = this; + instances.append(this); } // End of display and pointer event handling code diff --git a/src/gui/painting/qgraphicssystemcursor_lite.h b/src/gui/painting/qgraphicssystemcursor_lite.h index 1f4cfd6..a8a574e 100644 --- a/src/gui/painting/qgraphicssystemcursor_lite.h +++ b/src/gui/painting/qgraphicssystemcursor_lite.h @@ -44,10 +44,10 @@ #include #include #include -#include +#include #include -#include "qgraphicssystem_p.h" #include +#include QT_BEGIN_NAMESPACE @@ -75,13 +75,12 @@ public: virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; - static QPointer getInstance() { return instance; } - protected: QPlatformScreen* screen; // Where to request an update private: - static QPointer instance; // limit 1 cursor at a time + static QList > getInstances() { return instances; } + static QList > instances; friend void qt_lite_set_cursor(QWidget * w, bool force); friend class QApplicationPrivate; }; diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 2b32209..13638a0 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -8,6 +8,7 @@ #include #include #include +#include class QMouseEvent; class QSize; -- cgit v0.12 From 810cadc8430556dae9d18299a98c8c92608676b1 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 5 May 2010 14:21:18 +0200 Subject: move cursor details into a private class --- src/gui/kernel/qapplication_lite.cpp | 2 +- src/gui/kernel/qwidget_lite.cpp | 2 +- src/gui/painting/qgraphicssystemcursor_lite.cpp | 4 ++-- src/gui/painting/qgraphicssystemcursor_lite.h | 11 +++++++++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 31db7d0..5fc56a8 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -691,7 +691,7 @@ void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent * QMouseEvent ev(type, localPoint, globalPoint, button, buttons, modifiers); - QList > cursors = QGraphicsSystemCursor::getInstances(); + QList > cursors = QGraphicsSystemCursorPrivate::getInstances(); foreach (QWeakPointer cursor, cursors) { if (cursor) cursor.data()->pointerEvent(ev); diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index ed731c0..eae83f9 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -734,7 +734,7 @@ void qt_lite_set_cursor(QWidget * w, bool force) cursorCursor = w->cursor(); cursorWidget = w; } while (0); - foreach (QWeakPointer cursor, QGraphicsSystemCursor::getInstances()) + foreach (QWeakPointer cursor, QGraphicsSystemCursorPrivate::getInstances()) if (cursor) cursor.data()->changeCursor(&cursorCursor, cursorWidget); } diff --git a/src/gui/painting/qgraphicssystemcursor_lite.cpp b/src/gui/painting/qgraphicssystemcursor_lite.cpp index 623a75a..752b406 100644 --- a/src/gui/painting/qgraphicssystemcursor_lite.cpp +++ b/src/gui/painting/qgraphicssystemcursor_lite.cpp @@ -49,7 +49,7 @@ QT_BEGIN_NAMESPACE -QList > QGraphicsSystemCursor::instances; +QList > QGraphicsSystemCursorPrivate::instances; /*! \class QGraphicsSystemCursor @@ -98,7 +98,7 @@ QList > QGraphicsSystemCursor::instances; QGraphicsSystemCursor::QGraphicsSystemCursor(QPlatformScreen *scr ) : screen(scr) { - instances.append(this); + QGraphicsSystemCursorPrivate::instances.append(this); } // End of display and pointer event handling code diff --git a/src/gui/painting/qgraphicssystemcursor_lite.h b/src/gui/painting/qgraphicssystemcursor_lite.h index a8a574e..9c65f7f 100644 --- a/src/gui/painting/qgraphicssystemcursor_lite.h +++ b/src/gui/painting/qgraphicssystemcursor_lite.h @@ -67,6 +67,14 @@ private: QPoint hot; }; +class QGraphicsSystemCursor; + +class QGraphicsSystemCursorPrivate { +public: + static QList > getInstances() { return instances; } + static QList > instances; +}; + class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { public: QGraphicsSystemCursor(QPlatformScreen *); @@ -79,8 +87,7 @@ protected: QPlatformScreen* screen; // Where to request an update private: - static QList > getInstances() { return instances; } - static QList > instances; + Q_DECLARE_PRIVATE(QGraphicsSystemCursor); friend void qt_lite_set_cursor(QWidget * w, bool force); friend class QApplicationPrivate; }; -- cgit v0.12 From e5cf17ca04005909dfeca938606041dfa3a1b2ad Mon Sep 17 00:00:00 2001 From: tsenyk Date: Wed, 5 May 2010 14:27:01 +0200 Subject: ifdef fix for egl on ws_lite MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit reviewed by: Jørgen --- src/opengl/qgl.cpp | 3 +- src/opengl/qgl_lite.cpp | 103 ++++++++++++++++++++++++++++++++++++++++++ src/opengl/qgl_p.h | 9 ++-- src/opengl/qglpixelbuffer_p.h | 3 +- 4 files changed, 112 insertions(+), 6 deletions(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 580f3d0..26eb1e7 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -1588,7 +1588,8 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) #endif #if defined(Q_WS_LITE) platformContext = 0; -#elif !defined(QT_NO_EGL) +#endif +#if !defined(QT_NO_EGL) ownsEglContext = false; eglContext = 0; eglSurface = EGL_NO_SURFACE; diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index 0ffda5f..426683b 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -49,6 +49,109 @@ #include "qgl_p.h" #include "qglplatformintegration_lite.h" +#ifndef QT_NO_EGL +#include "qgl_egl_p.h" + +void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLFormat& glFormat) +{ + int redSize = glFormat.redBufferSize(); + int greenSize = glFormat.greenBufferSize(); + int blueSize = glFormat.blueBufferSize(); + int alphaSize = glFormat.alphaBufferSize(); + int depthSize = glFormat.depthBufferSize(); + int stencilSize = glFormat.stencilBufferSize(); + int sampleCount = glFormat.samples(); + + // QGLFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that + // type has been requested. So we must check QGLFormat's booleans too if size is -1: + if (glFormat.alpha() && alphaSize <= 0) + alphaSize = 1; + if (glFormat.depth() && depthSize <= 0) + depthSize = 1; + if (glFormat.stencil() && stencilSize <= 0) + stencilSize = 1; + if (glFormat.sampleBuffers() && sampleCount <= 0) + sampleCount = 1; + + // We want to make sure 16-bit configs are chosen over 32-bit configs as they will provide + // the best performance. The EGL config selection algorithm is a bit stange in this regard: + // The selection criteria for EGL_BUFFER_SIZE is "AtLeast", so we can't use it to discard + // 32-bit configs completely from the selection. So it then comes to the sorting algorithm. + // The red/green/blue sizes have a sort priority of 3, so they are sorted by first. The sort + // order is special and described as "by larger _total_ number of color bits.". So EGL will + // put 32-bit configs in the list before the 16-bit configs. However, the spec also goes on + // to say "If the requested number of bits in attrib_list for a particular component is 0, + // then the number of bits for that component is not considered". This part of the spec also + // seems to imply that setting the red/green/blue bits to zero means none of the components + // are considered and EGL disregards the entire sorting rule. It then looks to the next + // highest priority rule, which is EGL_BUFFER_SIZE. Despite the selection criteria being + // "AtLeast" for EGL_BUFFER_SIZE, it's sort order is "smaller" meaning 16-bit configs are + // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit, + // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that + // if the application sets the red/green/blue size to 5/6/5 on the QGLFormat, they will + // probably get a 32-bit config, even when there's an RGB565 config avaliable. Oh well. + + // Now normalize the values so -1 becomes 0 + redSize = redSize > 0 ? redSize : 0; + greenSize = greenSize > 0 ? greenSize : 0; + blueSize = blueSize > 0 ? blueSize : 0; + alphaSize = alphaSize > 0 ? alphaSize : 0; + depthSize = depthSize > 0 ? depthSize : 0; + stencilSize = stencilSize > 0 ? stencilSize : 0; + sampleCount = sampleCount > 0 ? sampleCount : 0; + + eglProperties.setValue(EGL_RED_SIZE, redSize); + eglProperties.setValue(EGL_GREEN_SIZE, greenSize); + eglProperties.setValue(EGL_BLUE_SIZE, blueSize); + eglProperties.setValue(EGL_ALPHA_SIZE, alphaSize); + eglProperties.setValue(EGL_DEPTH_SIZE, depthSize); + eglProperties.setValue(EGL_STENCIL_SIZE, stencilSize); + eglProperties.setValue(EGL_SAMPLES, sampleCount); + eglProperties.setValue(EGL_SAMPLE_BUFFERS, sampleCount ? 1 : 0); +} + +// Updates "format" with the parameters of the selected configuration. +void qt_glformat_from_eglconfig(QGLFormat& format, const EGLConfig config) +{ + EGLint redSize = 0; + EGLint greenSize = 0; + EGLint blueSize = 0; + EGLint alphaSize = 0; + EGLint depthSize = 0; + EGLint stencilSize = 0; + EGLint sampleCount = 0; + EGLint level = 0; + + EGLDisplay display = QEgl::display(); + eglGetConfigAttrib(display, config, EGL_RED_SIZE, &redSize); + eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &greenSize); + eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &blueSize); + eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &alphaSize); + eglGetConfigAttrib(display, config, EGL_DEPTH_SIZE, &depthSize); + eglGetConfigAttrib(display, config, EGL_STENCIL_SIZE, &stencilSize); + eglGetConfigAttrib(display, config, EGL_SAMPLES, &sampleCount); + eglGetConfigAttrib(display, config, EGL_LEVEL, &level); + + format.setRedBufferSize(redSize); + format.setGreenBufferSize(greenSize); + format.setBlueBufferSize(blueSize); + format.setAlphaBufferSize(alphaSize); + format.setDepthBufferSize(depthSize); + format.setStencilBufferSize(stencilSize); + format.setSamples(sampleCount); + format.setPlane(level + 1); // EGL calls level 0 "normal" whereas Qt calls 1 "normal" + format.setDirectRendering(true); // All EGL contexts are direct-rendered + format.setRgba(true); // EGL doesn't support colour index rendering + format.setStereo(false); // EGL doesn't support stereo buffers + format.setAccumBufferSize(0); // EGL doesn't support accululation buffers + + // Clear the EGL error state because some of the above may + // have errored out because the attribute is not applicable + // to the surface type. Such errors don't matter. + eglGetError(); +} +#endif + QT_BEGIN_NAMESPACE diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 34cbdfc..a2445b7 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -350,14 +350,17 @@ public: HBITMAP hbitmap; HDC hbitmap_hdc; #endif -#if defined(Q_WS_LITE) - QPlatformGLContext *platformContext; -#elif !defined(QT_NO_EGL) + +#if !defined(QT_NO_EGL) bool ownsEglContext; QEglContext *eglContext; EGLSurface eglSurface; void destroyEglSurfaceForDevice(); EGLSurface eglSurfaceForDevice() const; +#endif + +#if defined(Q_WS_LITE) + QPlatformGLContext *platformContext; #elif defined(Q_WS_X11) || defined(Q_WS_MAC) void* cx; #endif diff --git a/src/opengl/qglpixelbuffer_p.h b/src/opengl/qglpixelbuffer_p.h index de890c9..a7f4159 100644 --- a/src/opengl/qglpixelbuffer_p.h +++ b/src/opengl/qglpixelbuffer_p.h @@ -197,8 +197,7 @@ public: EGLSurface pbuf; QEglContext *ctx; int textureFormat; -#endif -#if defined(Q_WS_LITE) +#elif defined(Q_WS_LITE) // Stubs int pbuf; int ctx; -- cgit v0.12 From 6f39ecdabdae9b2132729a2a9940e5febaa420d2 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 5 May 2010 13:50:16 +0200 Subject: Small GL related fixes --- src/plugins/platforms/testlite/qglxintegration.cpp | 30 ++++++++++++++++++++-- src/plugins/platforms/testlite/qtestlitewindow.cpp | 13 +++++++--- 2 files changed, 37 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 88764f3..79596f5 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -39,6 +39,7 @@ ** ****************************************************************************/ +#include #include #include @@ -54,7 +55,6 @@ #include #endif - QT_BEGIN_NAMESPACE GLXFBConfig qt_glx_integration_choose_config(MyDisplay* xd, QGLFormat& format, int drawableType) @@ -171,7 +171,11 @@ bool QGLXGLWidgetSurface::create(QGLWidget *widget, QGLFormat& format) widget->x(), widget->y(), widget->width(), widget->height(), 0, visualInfo->depth, InputOutput, visualInfo->visual, CWBackPixel|CWBorderPixel|CWColormap, &windowAttribs); +#ifdef MYX11_DEBUG + qDebug() << "QGLXGLWidgetSurface::create" << hex << "parent" << parentWindow << "win:" << m_winId << widget; +#endif + XSetWindowBackgroundPixmap(m_xd->display, m_winId, XNone); XMapWindow(m_xd->display, m_winId); XFree(visualInfo); @@ -180,7 +184,15 @@ bool QGLXGLWidgetSurface::create(QGLWidget *widget, QGLFormat& format) void QGLXGLWidgetSurface::setGeometry(const QRect& rect) { - XMoveResizeWindow(m_xd->display, m_winId, rect.x(), rect.y(), rect.width(), rect.height()); +#ifdef MYX11_DEBUG + qDebug() << "QGLXGLWidgetSurface::setGeometry" << rect << hex << m_xd->display << m_winId << "toplevel?" << m_widget->isWindow(); +#endif + //### toplevel QGLWidgets do have a separate X window owned by the surface, but it has a + // local geometry + if (m_widget->isWindow()) + XMoveResizeWindow(m_xd->display, m_winId, 0, 0, rect.width(), rect.height()); + else + XMoveResizeWindow(m_xd->display, m_winId, rect.x(), rect.y(), rect.width(), rect.height()); } bool QGLXGLWidgetSurface::filterEvent(QEvent *e) @@ -191,12 +203,18 @@ bool QGLXGLWidgetSurface::filterEvent(QEvent *e) // which would otherwise destroy our window along with it. XUnmapWindow(m_xd->display, m_winId); XReparentWindow(m_xd->display, m_winId, m_xd->rootWindow(), 0, 0); +#ifdef MYX11_DEBUG + qDebug() << "filterEvent unmap" << hex << m_winId; +#endif } if (e->type() == QEvent::ParentChange) { // Once we've got a new parent, we need to reparent the window and show it again: XReparentWindow(m_xd->display, m_winId, m_widget->window()->winId(), m_widget->x(), m_widget->y()); XMapWindow(m_xd->display, m_winId); +#ifdef MYX11_DEBUG + qDebug() << "filterEvent reparent" << hex << m_winId << "to:" << m_widget->window()->winId(); +#endif } return false; // Allow the event to pass through to QGLWidget @@ -241,6 +259,9 @@ bool QGLXGLContext::create(QPaintDevice* device, QGLFormat& format, QPlatformGLC QGLXGLWidgetSurface* surface = static_cast(glWidget->platformSurface()); m_config = surface->config(); m_drawable = (Drawable)surface->winId(); +#ifdef MYX11_DEBUG + qDebug() << "QGLXGLContext::create" << hex << m_config << m_drawable; +#endif } else { if (!widget->isTopLevel()) { @@ -254,6 +275,9 @@ bool QGLXGLContext::create(QPaintDevice* device, QGLFormat& format, QPlatformGLC } m_context = glXCreateNewContext(m_xd->display, m_config, GLX_RGBA_TYPE, shareGlxContext, True); +#ifdef MYX11_DEBUG + qDebug() << "QGLXGLContext::create context" << m_context; +#endif // Get the XVisualInfo for the window: // XWindowAttributes windowAttribs; @@ -273,7 +297,9 @@ bool QGLXGLContext::create(QPaintDevice* device, QGLFormat& format, QPlatformGLC void QGLXGLContext::makeCurrent() { +#ifdef MYX11_DEBUG qDebug("QGLXGLContext::makeCurrent(window=0x%x, ctx=0x%x)", m_drawable, m_context); +#endif glXMakeCurrent(m_xd->display, m_drawable, m_context); } diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 242f335..b5ae4fc 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -69,6 +69,8 @@ #undef ATOM #undef X11 +//#define MYX11_DEBUG + QT_BEGIN_NAMESPACE static int (*original_x_errhandler)(Display *dpy, XErrorEvent *); @@ -158,6 +160,9 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration x, y, w, h, 0 /*border_width*/, xd->blackPixel(), xd->whitePixel()); +#ifdef MYX11_DEBUG + qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; +#endif } width = -1; @@ -673,7 +678,7 @@ GC QTestLiteWindow::createGC() void QTestLiteWindow::paintEvent() { #ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; +// qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; #endif widget()->windowSurface()->flush(widget(), QRect(xpos,ypos,width, height), QPoint()); @@ -694,7 +699,7 @@ void QTestLiteWindow::resizeEvent(XConfigureEvent *e) height = e->height; #ifdef MYX11_DEBUG - qDebug() << hex << window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height << "img:" << shm_img.size(); + qDebug() << hex << x_window << dec << "ConfigureNotify" << e->x << e->y << e->width << e->height << "geometry" << xpos << ypos << width << height; #endif QWindowSystemInterface::handleGeometryChange(widget(), QRect(xpos, ypos, width, height)); @@ -833,7 +838,7 @@ Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) } #ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::setWindowFlags" << hex << window << "flags" << flags; + qDebug() << "QTestLiteWindow::setWindowFlags" << hex << x_window << "flags" << flags; #endif Qt::WindowType type = static_cast(int(flags & Qt::WindowType_Mask)); @@ -963,7 +968,7 @@ Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) void QTestLiteWindow::setVisible(bool visible) { #ifdef MYX11_DEBUG - qDebug() << "QTestLiteWindow::setVisible" << visible << hex << window; + qDebug() << "QTestLiteWindow::setVisible" << visible << hex << x_window; #endif if (visible) XMapWindow(xd->display, x_window); -- cgit v0.12 From 9b33f9c47cf5346404c54196b72d0b3b80f32454 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 10 May 2010 15:15:06 +0200 Subject: Build fix for Lighthouse --- src/plugins/mediaservices/gstreamer/gstreamer.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/mediaservices/gstreamer/gstreamer.pro b/src/plugins/mediaservices/gstreamer/gstreamer.pro index 6e05120..15c4b09 100644 --- a/src/plugins/mediaservices/gstreamer/gstreamer.pro +++ b/src/plugins/mediaservices/gstreamer/gstreamer.pro @@ -36,7 +36,7 @@ SOURCES += \ qvideosurfacegstsink.cpp -!win32:!embedded:!mac:!symbian { +!win32:!embedded:!mac:!symbian:!embedded_lite { LIBS += -lXv HEADERS += \ -- cgit v0.12 From b2e80f7525546b494543c902dbf8efb8b8609fc5 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 10 May 2010 15:40:28 +0200 Subject: adjust mouse movement for the screen's offset --- src/plugins/platforms/vnc/qvncserver.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp index bd4d6ab..6424083 100644 --- a/src/plugins/platforms/vnc/qvncserver.cpp +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -836,7 +836,8 @@ void QVNCServer::pointerEvent() // const QPoint offset = qvnc_screen->offset(); // QWSServer::sendMouseEvent(offset + QPoint(ev.x, ev.y), ev.buttons); - + QPoint eventPoint(ev.x, ev.y); + eventPoint += screen()->geometry().topLeft(); //qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons; if (ev.wheelDirection == ev.WheelNone) { QEvent::Type type = QEvent::MouseMove; @@ -844,7 +845,7 @@ void QVNCServer::pointerEvent() bool isPress; if (buttonChange(buttons, ev.buttons, &button, &isPress)) type = isPress ? QEvent::MouseButtonPress : QEvent::MouseButtonRelease; - QWindowSystemInterface::handleMouseEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), ev.buttons); + QWindowSystemInterface::handleMouseEvent(0, eventPoint, eventPoint, ev.buttons); } else { // No buttons or motion reported at the same time as wheel events Qt::Orientation orientation; @@ -853,7 +854,7 @@ void QVNCServer::pointerEvent() else orientation = Qt::Vertical; int delta = 120 * ((ev.wheelDirection == ev.WheelLeft || ev.wheelDirection == ev.WheelUp) ? 1 : -1); - QWindowSystemInterface::handleWheelEvent(0, QPoint(ev.x, ev.y), QPoint(ev.x, ev.y), delta, orientation); + QWindowSystemInterface::handleWheelEvent(0, eventPoint, eventPoint, delta, orientation); } handleMsg = false; } -- cgit v0.12 From 075e96eba50013c583234b787562e09bb7535dd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Thu, 29 Apr 2010 14:47:35 +0200 Subject: Say hello to Qt for Native Client. This commits adds build system to support for the native client compiler (x86-only for now), sets up global defines, and adds compile fixes for QtCore and QtGui. Details: * Add mkspecs for linux-nacl-g++ and macx-nacl-c++ * Add nacl configure option * Add qconfig-minimal-system-dependencies.h * Define Q_OS_NACL in qglobal.h * Add qnacalunimplemented.h/cpp with POSIX stubs. * .pro file changes for cross-compiling on Mac --- configure | 77 ++++- mkspecs/qws/linux-nacl-g++/qmake.conf | 74 ++++ mkspecs/qws/linux-nacl-g++/qplatformdefs.h | 175 ++++++++++ mkspecs/qws/macx-generic-g++/qmake.conf | 6 +- mkspecs/qws/macx-nacl-g++/qmake.conf | 95 ++++++ mkspecs/qws/macx-nacl-g++/qplatformdefs.h | 175 ++++++++++ src/corelib/arch/qatomic_arch.h | 2 + src/corelib/corelib.pro | 2 +- src/corelib/global/global.pri | 4 + .../global/qconfig-minimal-system-dependencies.h | 371 +++++++++++++++++++++ src/corelib/global/qglobal.h | 6 + src/corelib/global/qnaclunimplemented.cpp | 156 +++++++++ src/corelib/global/qnaclunimplemented.h | 85 +++++ src/corelib/io/io.pri | 10 +- src/corelib/io/qresource.cpp | 2 +- src/corelib/kernel/kernel.pri | 4 +- src/corelib/kernel/qcore_unix.cpp | 3 +- src/corelib/kernel/qeventdispatcher_unix.cpp | 14 +- src/corelib/kernel/qeventdispatcher_unix_p.h | 2 +- src/corelib/thread/qthread_unix.cpp | 2 + src/corelib/tools/tools.pri | 2 +- src/gui/kernel/mac.pri | 2 +- .../kernel/qplatformintegrationfactory_lite.cpp | 2 +- src/gui/text/qfontdatabase_qws.cpp | 2 + src/src.pro | 2 + 25 files changed, 1254 insertions(+), 21 deletions(-) create mode 100644 mkspecs/qws/linux-nacl-g++/qmake.conf create mode 100644 mkspecs/qws/linux-nacl-g++/qplatformdefs.h create mode 100644 mkspecs/qws/macx-nacl-g++/qmake.conf create mode 100644 mkspecs/qws/macx-nacl-g++/qplatformdefs.h create mode 100644 src/corelib/global/qconfig-minimal-system-dependencies.h create mode 100644 src/corelib/global/qnaclunimplemented.cpp create mode 100644 src/corelib/global/qnaclunimplemented.h diff --git a/configure b/configure index 69df540..da34fb5 100755 --- a/configure +++ b/configure @@ -296,6 +296,12 @@ earlyArgParse() VAL=$1 fi ;; + -nacl) + shift; + VAR=nacl + VAL=$1 + ;; + -h|help|--help|-help) if [ "$VAL" = "yes" ]; then OPT_HELP="$VAL" @@ -353,6 +359,15 @@ earlyArgParse() CFG_EMBEDDED=no fi ;; + nacl) + echo "Using NaCl at $VAL." + PLATFORM_X11=no + PLATFORM_MAC=no + PLATFORM_QWS=no + CFG_NACL_PATH=$VAL + CFG_EMBEDDED=nacl + ;; + developer-build) CFG_DEV="yes" ;; @@ -928,6 +943,44 @@ if [ -d "$relpath/src/plugins/gfxdrivers" ]; then fi #------------------------------------------------------------------------------- +# Set Default NaCl options +#------------------------------------------------------------------------------- +if [ "$CFG_EMBEDDED" = "nacl" ]; then + echo "Setting NaCl options:" + echo "-static" + CFG_SHARED=no + echo "-embedded-lite nacl" + PLATFORM_EMBLITE=yes + echo "-fast" + OPT_FAST=yes + echo "-release" + CFG_DEBUG=no + echo "-qconfig minimal-system-dependencies" + CFG_QCONFIG=minimal-system-dependencies + + if [ `uname` = "Linux" ]; then + I_FLAGS="$I_FLAGS -I${CFG_NACL_PATH}/toolchain/linux_x86/sdk/nacl-sdk/include" + L_FLAGS="$L_FLAGS -I${CFG_NACL_PATH}/toolchain/linux_x86/sdk/nacl-sdk/lib" + else + I_FLAGS="$I_FLAGS -I${CFG_NACL_PATH}/toolchain/mac_x86/sdk/nacl-sdk/include" + L_FLAGS="$L_FLAGS -I${CFG_NACL_PATH}/toolchain/mac_x86/sdk/nacl-sdk/lib" + fi + + echo "-no-multimedia -no-webkit -no-phonon -no-nultimedia -no-mediaservices -no-xmlpatterns -no-script -no-sql-sqlite -nomake tests" + CFG_MULTIMEDIA=no + CFG_WEBKIT=no + CFG_PHONON=no + CFG_MULTIMEDIA=no + CFG_MEDIASERVICES=no + CFG_XMLPATTERNS=no + CFG_SCRIPT=no + CFG_SQLITE=no + CFG_SQL_sqlite=no + CFG_NOBUILD_PARTS="$CFG_NOBUILD_PARTS tests" + QT_CONFIG="$QT_CONFIG nacl" +fi + +#------------------------------------------------------------------------------- # parse command line arguments #------------------------------------------------------------------------------- @@ -1024,6 +1077,10 @@ while [ "$#" -gt 0 ]; do VAL=$1 fi ;; + -nacl) + VAR=nacl + shift; + ;; -opengl) VAR=opengl # this option may or may not be followed by an argument @@ -1262,6 +1319,8 @@ while [ "$#" -gt 0 ]; do CFG_EMBEDDED=no fi ;; + nacl) + ;; sse) if [ "$VAL" = "yes" ] || [ "$VAL" = "no" ]; then CFG_SSE="$VAL" @@ -3114,6 +3173,10 @@ if [ -z "$TEST_COMPILER" ]; then exit 1 fi +if [ "$CFG_EMBEDDED" = "nacl" ]; then + TEST_COMPILER="nacl-gcc" +fi + # auto-detect precompiled header support if [ "$CFG_PRECOMPILE" = "auto" ]; then if [ `echo "$CFG_MAC_ARCHS" | wc -w` -gt 1 ]; then @@ -6599,6 +6662,13 @@ if [ "$PLATFORM_EMBLITE" = "yes" ]; then QT_CONFIG="$QT_CONFIG embedded_lite" rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes fi + +if [ "$CFG_EMBEDDED" = "nacl" ]; then + QMAKE_CONFIG="$QMAKE_CONFIG nacl pepper" + QT_CONFIG="$QT_CONFIG nacl pepper" + rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes +fi + QMakeVar set PRECOMPILED_DIR ".pch/$QMAKE_OUTDIR" QMakeVar set OBJECTS_DIR ".obj/$QMAKE_OUTDIR" QMakeVar set MOC_DIR ".moc/$QMAKE_OUTDIR" @@ -7802,10 +7872,11 @@ QMAKE_LIBDIR_QT = \$\$QT_BUILD_TREE/lib EOF # Ensure we can link to uninistalled libraries -if linkerSupportsFlag -rpath-link "$outpath/lib"; then - echo "QMAKE_LFLAGS += -Wl,-rpath-link,\$\$QT_BUILD_TREE/lib" >> "$CACHEFILE.tmp" +if [ "$CFG_EMBEDDED" != "nacl" ]; then + if linkerSupportsFlag -rpath-link "$outpath/lib"; then + echo "QMAKE_LFLAGS += -Wl,-rpath-link,\$\$QT_BUILD_TREE/lib" >> "$CACHEFILE.tmp" + fi fi - if [ -n "$QT_CFLAGS_PSQL" ]; then echo "QT_CFLAGS_PSQL = $QT_CFLAGS_PSQL" >> "$CACHEFILE.tmp" fi diff --git a/mkspecs/qws/linux-nacl-g++/qmake.conf b/mkspecs/qws/linux-nacl-g++/qmake.conf new file mode 100644 index 0000000..83ce65b --- /dev/null +++ b/mkspecs/qws/linux-nacl-g++/qmake.conf @@ -0,0 +1,74 @@ +# +# qmake configuration for building with nacl-g++ +# + +include(../../common/unix.conf) +include(../../common/qws.conf) + +QT = core gui + +# copy of ../../common/g++.conf, with modifications: + +QMAKE_CC = nacl-gcc +QMAKE_CXX = nacl-g++ +QMAKE_LINK = nacl-g++ +QMAKE_LINK_SHLIB = nacl-g++ + +#QMAKE_CC = gcc +QMAKE_CFLAGS += -pipe -DXP_UNIX -DNACL_STANDALONE=1 +QMAKE_CFLAGS_DEPS += -M +QMAKE_CFLAGS_WARN_ON += -Wall -W +QMAKE_CFLAGS_WARN_OFF += -w +QMAKE_CFLAGS_RELEASE += -O2 +QMAKE_CFLAGS_DEBUG += -g +QMAKE_CFLAGS_SHLIB += -fPIC +#QMAKE_CFLAGS_STATIC_LIB += -fPIC +QMAKE_CFLAGS_YACC += -Wno-unused -Wno-parentheses +QMAKE_CFLAGS_HIDESYMS += -fvisibility=hidden +QMAKE_CFLAGS_PRECOMPILE += -x c-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} +QMAKE_CFLAGS_USE_PRECOMPILE += -include ${QMAKE_PCH_OUTPUT_BASE} + +#QMAKE_CXX = g++ +QMAKE_CXXFLAGS += $$QMAKE_CFLAGS +QMAKE_CXXFLAGS_DEPS += $$QMAKE_CFLAGS_DEPS +QMAKE_CXXFLAGS_WARN_ON += $$QMAKE_CFLAGS_WARN_ON +QMAKE_CXXFLAGS_WARN_OFF += $$QMAKE_CFLAGS_WARN_OFF +QMAKE_CXXFLAGS_RELEASE += $$QMAKE_CFLAGS_RELEASE +QMAKE_CXXFLAGS_DEBUG += $$QMAKE_CFLAGS_DEBUG +QMAKE_CXXFLAGS_SHLIB += $$QMAKE_CFLAGS_SHLIB +QMAKE_CXXFLAGS_STATIC_LIB += $$QMAKE_CFLAGS_STATIC_LIB +QMAKE_CXXFLAGS_YACC += $$QMAKE_CFLAGS_YACC +QMAKE_CXXFLAGS_HIDESYMS += $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden +QMAKE_CXXFLAGS_PRECOMPILE += -x c++-header -c ${QMAKE_PCH_INPUT} -o ${QMAKE_PCH_OUTPUT} +QMAKE_CXXFLAGS_USE_PRECOMPILE = $$QMAKE_CFLAGS_USE_PRECOMPILE + +#QMAKE_LINK = g++ +#QMAKE_LINK_SHLIB = g++ +QMAKE_LINK_C = gcc +QMAKE_LINK_C_SHLIB = gcc +QMAKE_LFLAGS += +QMAKE_LFLAGS_RELEASE += -Wl,-O1 +QMAKE_LFLAGS_DEBUG += +QMAKE_LFLAGS_APP += +QMAKE_LFLAGS_SHLIB += -shared +QMAKE_LFLAGS_PLUGIN += $$QMAKE_LFLAGS_SHLIB +QMAKE_LFLAGS_SONAME += -Wl,-soname, +QMAKE_LFLAGS_THREAD += +QMAKE_LFLAGS_NOUNDEF += -Wl,--no-undefined +QMAKE_LFLAGS_RPATH = -Wl,-rpath, + +QMAKE_LIBS = -lgoogle_nacl_imc -lgoogle_nacl_npruntime -lgoogle_nacl_pgl -lgoogle_nacl_gpu -lpthread -lsrpc + +QMAKE_PCH_OUTPUT_EXT = .gch + +# -Bsymbolic-functions (ld) support +QMAKE_LFLAGS_BSYMBOLIC_FUNC = -Wl,-Bsymbolic-functions +QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list, + +# modifications to linux.conf +QMAKE_AR = nacl-ar q +QMAKE_OBJCOPY = nacl-objcopy +QMAKE_STRIP = nacl-strip +QMAKE_LIBS_DYNLOAD = + +load(qt_config) diff --git a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h new file mode 100644 index 0000000..a670ee5 --- /dev/null +++ b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h @@ -0,0 +1,175 @@ +/**************************************************************************** + ** + ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). + ** All rights reserved. + ** Contact: Nokia Corporation (qt-info@nokia.com) + ** + ** This file is part of the QtCore module of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:LGPL$ + ** No Commercial Usage + ** This file contains pre-release code and may not be distributed. + ** You may use this file in accordance with the terms and conditions + ** contained in the Technology Preview License Agreement accompanying + ** this package. + ** + ** GNU Lesser General Public License Usage + ** Alternatively, this file may be used under the terms of the GNU Lesser + ** General Public License version 2.1 as published by the Free Software + ** Foundation and appearing in the file LICENSE.LGPL included in the + ** packaging of this file. Please review the following information to + ** ensure the GNU Lesser General Public License version 2.1 requirements + ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** + ** In addition, as a special exception, Nokia gives you certain additional + ** rights. These rights are described in the Nokia Qt LGPL Exception + ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + ** + ** If you have questions regarding the use of this file, please contact + ** Nokia at qt-info@nokia.com. + ** + ** + ** + ** + ** + ** + ** + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + +#ifndef QPLATFORMDEFS_H +#define QPLATFORMDEFS_H + +// Get Qt defines/settings + +#define _POSIX_TIMERS + +#include "qglobal.h" + + +#define _POSIX_TIMERS +// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs + +// 1) need to reset default environment if _BSD_SOURCE is defined +// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0 +// 3) it seems older glibc need this to include the X/Open stuff +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + +#include + + +// We are hot - unistd.h should have turned on the specific APIs we requested + +#include +#include +#include +#include +#include +#include +#include +//#include + +#include +//#include +//#include + +#include +//#include +//#include +#include +#include +//#include +#ifndef QT_NO_IPV6IFNAME +#include +#endif + +// extra disabling. +#ifdef __native_client__ +#define QT_NO_FSFILEENGINE +#define QT_NO_TRANSLATION +#endif + +#ifdef QT_LARGEFILE_SUPPORT +#define QT_STATBUF struct stat64 +#define QT_STATBUF4TSTAT struct stat64 +#define QT_STAT ::stat64 +#define QT_FSTAT ::fstat64 +#define QT_LSTAT ::lstat64 +#define QT_OPEN ::open64 +#define QT_TRUNCATE ::truncate64 +#define QT_FTRUNCATE ::ftruncate64 +#define QT_LSEEK ::lseek64 +#else +#define QT_STATBUF struct stat +#define QT_STATBUF4TSTAT struct stat +#define QT_STAT ::stat +#define QT_FSTAT ::fstat +#define QT_LSTAT ::lstat +#define QT_OPEN ::open +#define QT_TRUNCATE ::truncate +#define QT_FTRUNCATE ::ftruncate +#define QT_LSEEK ::lseek +#endif + +#ifdef QT_LARGEFILE_SUPPORT +#define QT_FOPEN ::fopen64 +#define QT_FSEEK ::fseeko64 +#define QT_FTELL ::ftello64 +#define QT_FGETPOS ::fgetpos64 +#define QT_FSETPOS ::fsetpos64 +#define QT_FPOS_T fpos64_t +#define QT_OFF_T off64_t +#else +#define QT_FOPEN ::fopen +#define QT_FSEEK ::fseek +#define QT_FTELL ::ftell +#define QT_FGETPOS ::fgetpos +#define QT_FSETPOS ::fsetpos +#define QT_FPOS_T fpos_t +#define QT_OFF_T long +#endif + +#define QT_STAT_REG S_IFREG +#define QT_STAT_DIR S_IFDIR +#define QT_STAT_MASK S_IFMT +#define QT_STAT_LNK S_IFLNK +#define QT_SOCKET_CONNECT ::connect +#define QT_SOCKET_BIND ::bind +#define QT_FILENO fileno +#define QT_CLOSE ::close +#define QT_READ ::read +#define QT_WRITE ::write +#define QT_ACCESS ::access +#define QT_GETCWD ::getcwd +#define QT_CHDIR ::chdir +#define QT_MKDIR ::mkdir +#define QT_RMDIR ::rmdir +#define QT_OPEN_LARGEFILE O_LARGEFILE +#define QT_OPEN_RDONLY O_RDONLY +#define QT_OPEN_WRONLY O_WRONLY +#define QT_OPEN_RDWR O_RDWR +#define QT_OPEN_CREAT O_CREAT +#define QT_OPEN_TRUNC O_TRUNC +#define QT_OPEN_APPEND O_APPEND + +#define QT_SIGNAL_RETTYPE void +#define QT_SIGNAL_ARGS int +#define QT_SIGNAL_IGNORE SIG_IGN + +#if defined(__GLIBC__) && (__GLIBC__ >= 2) +#define QT_SOCKLEN_T socklen_t +#else +#define QT_SOCKLEN_T int +#endif + +#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) +#define QT_SNPRINTF ::snprintf +#define QT_VSNPRINTF ::vsnprintf +#endif + + +#endif // QPLATFORMDEFS_H diff --git a/mkspecs/qws/macx-generic-g++/qmake.conf b/mkspecs/qws/macx-generic-g++/qmake.conf index 9096712..63bfc57 100644 --- a/mkspecs/qws/macx-generic-g++/qmake.conf +++ b/mkspecs/qws/macx-generic-g++/qmake.conf @@ -2,6 +2,8 @@ # qmake configuration for macx-g++ with Qtopia Core # +include(../../common/unix.conf) + MAKEFILE_GENERATOR = UNIX TARGET_PLATFORM = macx TEMPLATE = app @@ -18,7 +20,7 @@ QMAKE_YACCFLAGS = -d QMAKE_CFLAGS = -pipe QMAKE_CFLAGS_WARN_ON = -Wall -W QMAKE_CFLAGS_WARN_OFF = -QMAKE_CFLAGS_RELEASE = -O2 -fno-default-inline +QMAKE_CFLAGS_RELEASE = -O2 QMAKE_CFLAGS_DEBUG = -g QMAKE_CFLAGS_SHLIB = -fPIC QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses @@ -29,7 +31,7 @@ QMAKE_CXX = $(TB)c++ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -DQT_NO_QWS_TRANSFORMED QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF -QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -fno-default-inline QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC diff --git a/mkspecs/qws/macx-nacl-g++/qmake.conf b/mkspecs/qws/macx-nacl-g++/qmake.conf new file mode 100644 index 0000000..0a54b4b --- /dev/null +++ b/mkspecs/qws/macx-nacl-g++/qmake.conf @@ -0,0 +1,95 @@ +# +# qmake configuration for macx-nacl-g++ with embedded-lite +# + +include(../../common/unix.conf) + +MAKEFILE_GENERATOR = UNIX +TEMPLATE = app +CONFIG += qt warn_on release link_prl +QT += core gui +QMAKE_INCREMENTAL_STYLE = sublib +QMAKE_EXTENSION_SHLIB = dylib + + +QMAKE_CC = nacl-gcc +QMAKE_CXX = nacl-g++ +QMAKE_LINK = nacl-g++ +QMAKE_LINK_SHLIB = nacl-g++ + +#QMAKE_CC = $(TB)cc +QMAKE_LEX = flex +QMAKE_LEXFLAGS = +QMAKE_YACC = yacc +QMAKE_YACCFLAGS = -d +QMAKE_CFLAGS = -pipe -DXP_UNIX -DNACL_STANDALONE=1 +QMAKE_CFLAGS_WARN_ON = -Wall -W +QMAKE_CFLAGS_WARN_OFF = +QMAKE_CFLAGS_RELEASE = -O2 +QMAKE_CFLAGS_DEBUG = -g +QMAKE_CFLAGS_SHLIB = -fPIC +QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses +QMAKE_CFLAGS_THREAD = -D_REENTRANT +QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden + +#QMAKE_CXX = $(TB)c++ +QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -DQT_NO_QWS_TRANSFORMED +QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON +QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF +QMAKE_CXXFLAGS_RELEASE = $$QMAKE_CFLAGS_RELEASE -fno-default-inline +QMAKE_CXXFLAGS_DEBUG = $$QMAKE_CFLAGS_DEBUG +QMAKE_CXXFLAGS_SHLIB = $$QMAKE_CFLAGS_SHLIB +QMAKE_CXXFLAGS_YACC = $$QMAKE_CFLAGS_YACC +QMAKE_CXXFLAGS_THREAD = $$QMAKE_CFLAGS_THREAD +QMAKE_CXXFLAGS_HIDESYMS = $$QMAKE_CFLAGS_HIDESYMS -fvisibility-inlines-hidden + +QMAKE_INCDIR = +QMAKE_LIBDIR = +QMAKE_INCDIR_X11 = +QMAKE_LIBDIR_X11 = +QMAKE_INCDIR_QT = $$[QT_INSTALL_HEADERS] +QMAKE_LIBDIR_QT = $$[QT_INSTALL_LIBS] +QMAKE_INCDIR_OPENGL = +QMAKE_LIBDIR_OPENGL = +QMAKE_INCDIR_QTOPIA = $(QPEDIR)/include +QMAKE_LIBDIR_QTOPIA = $(QPEDIR)/lib + +#QMAKE_LINK = $$QMAKE_CXX +#QMAKE_LINK_SHLIB = $$QMAKE_CXX +QMAKE_LFLAGS = +QMAKE_LFLAGS_RELEASE = +QMAKE_LFLAGS_DEBUG = +QMAKE_LFLAGS_SHLIB = -dynamiclib +QMAKE_LFLAGS_INCREMENTAL = -undefined suppress -flat_namespace +QMAKE_LFLAGS_PLUGIN = -bundle +QMAKE_LFLAGS_SONAME = +QMAKE_LFLAGS_THREAD = + +QMAKE_LIBS = -lgoogle_nacl_imc -lgoogle_nacl_npruntime -lgoogle_nacl_pgl -lgoogle_nacl_gpu -lpthread -lsrpc +QMAKE_LIBS_X11 = +QMAKE_LIBS_X11SM = +QMAKE_LIBS_QT = -lqte +QMAKE_LIBS_QT_THREAD = -lqte-mt +QMAKE_LIBS_QT_OPENGL = -lqgl +QMAKE_LIBS_QTOPIA = -lqpe -lqtopia +QMAKE_LIBS_THREAD = +QMAKE_LIBS_OPENGL = + +QMAKE_MOC = $$[QT_INSTALL_BINS]/moc +QMAKE_UIC = $$[QT_INSTALL_BINS]/uic + +QMAKE_AR = nacl-ar q +QMAKE_OBJCOPY = nacl-objcopy +QMAKE_STRIP = nacl-strip +QMAKE_RANLIB = + +QMAKE_TAR = tar -cf +QMAKE_GZIP = gzip -9f + +QMAKE_COPY = cp -f +QMAKE_MOVE = mv -f +QMAKE_DEL_FILE = rm -f +QMAKE_DEL_DIR = rmdir +QMAKE_CHK_DIR_EXISTS = test -d +QMAKE_MKDIR = mkdir -p +load(qt_config) diff --git a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h new file mode 100644 index 0000000..a670ee5 --- /dev/null +++ b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h @@ -0,0 +1,175 @@ +/**************************************************************************** + ** + ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). + ** All rights reserved. + ** Contact: Nokia Corporation (qt-info@nokia.com) + ** + ** This file is part of the QtCore module of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:LGPL$ + ** No Commercial Usage + ** This file contains pre-release code and may not be distributed. + ** You may use this file in accordance with the terms and conditions + ** contained in the Technology Preview License Agreement accompanying + ** this package. + ** + ** GNU Lesser General Public License Usage + ** Alternatively, this file may be used under the terms of the GNU Lesser + ** General Public License version 2.1 as published by the Free Software + ** Foundation and appearing in the file LICENSE.LGPL included in the + ** packaging of this file. Please review the following information to + ** ensure the GNU Lesser General Public License version 2.1 requirements + ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** + ** In addition, as a special exception, Nokia gives you certain additional + ** rights. These rights are described in the Nokia Qt LGPL Exception + ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + ** + ** If you have questions regarding the use of this file, please contact + ** Nokia at qt-info@nokia.com. + ** + ** + ** + ** + ** + ** + ** + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + +#ifndef QPLATFORMDEFS_H +#define QPLATFORMDEFS_H + +// Get Qt defines/settings + +#define _POSIX_TIMERS + +#include "qglobal.h" + + +#define _POSIX_TIMERS +// Set any POSIX/XOPEN defines at the top of this file to turn on specific APIs + +// 1) need to reset default environment if _BSD_SOURCE is defined +// 2) need to specify POSIX thread interfaces explicitly in glibc 2.0 +// 3) it seems older glibc need this to include the X/Open stuff +#ifndef _GNU_SOURCE +# define _GNU_SOURCE +#endif + +#include + + +// We are hot - unistd.h should have turned on the specific APIs we requested + +#include +#include +#include +#include +#include +#include +#include +//#include + +#include +//#include +//#include + +#include +//#include +//#include +#include +#include +//#include +#ifndef QT_NO_IPV6IFNAME +#include +#endif + +// extra disabling. +#ifdef __native_client__ +#define QT_NO_FSFILEENGINE +#define QT_NO_TRANSLATION +#endif + +#ifdef QT_LARGEFILE_SUPPORT +#define QT_STATBUF struct stat64 +#define QT_STATBUF4TSTAT struct stat64 +#define QT_STAT ::stat64 +#define QT_FSTAT ::fstat64 +#define QT_LSTAT ::lstat64 +#define QT_OPEN ::open64 +#define QT_TRUNCATE ::truncate64 +#define QT_FTRUNCATE ::ftruncate64 +#define QT_LSEEK ::lseek64 +#else +#define QT_STATBUF struct stat +#define QT_STATBUF4TSTAT struct stat +#define QT_STAT ::stat +#define QT_FSTAT ::fstat +#define QT_LSTAT ::lstat +#define QT_OPEN ::open +#define QT_TRUNCATE ::truncate +#define QT_FTRUNCATE ::ftruncate +#define QT_LSEEK ::lseek +#endif + +#ifdef QT_LARGEFILE_SUPPORT +#define QT_FOPEN ::fopen64 +#define QT_FSEEK ::fseeko64 +#define QT_FTELL ::ftello64 +#define QT_FGETPOS ::fgetpos64 +#define QT_FSETPOS ::fsetpos64 +#define QT_FPOS_T fpos64_t +#define QT_OFF_T off64_t +#else +#define QT_FOPEN ::fopen +#define QT_FSEEK ::fseek +#define QT_FTELL ::ftell +#define QT_FGETPOS ::fgetpos +#define QT_FSETPOS ::fsetpos +#define QT_FPOS_T fpos_t +#define QT_OFF_T long +#endif + +#define QT_STAT_REG S_IFREG +#define QT_STAT_DIR S_IFDIR +#define QT_STAT_MASK S_IFMT +#define QT_STAT_LNK S_IFLNK +#define QT_SOCKET_CONNECT ::connect +#define QT_SOCKET_BIND ::bind +#define QT_FILENO fileno +#define QT_CLOSE ::close +#define QT_READ ::read +#define QT_WRITE ::write +#define QT_ACCESS ::access +#define QT_GETCWD ::getcwd +#define QT_CHDIR ::chdir +#define QT_MKDIR ::mkdir +#define QT_RMDIR ::rmdir +#define QT_OPEN_LARGEFILE O_LARGEFILE +#define QT_OPEN_RDONLY O_RDONLY +#define QT_OPEN_WRONLY O_WRONLY +#define QT_OPEN_RDWR O_RDWR +#define QT_OPEN_CREAT O_CREAT +#define QT_OPEN_TRUNC O_TRUNC +#define QT_OPEN_APPEND O_APPEND + +#define QT_SIGNAL_RETTYPE void +#define QT_SIGNAL_ARGS int +#define QT_SIGNAL_IGNORE SIG_IGN + +#if defined(__GLIBC__) && (__GLIBC__ >= 2) +#define QT_SOCKLEN_T socklen_t +#else +#define QT_SOCKLEN_T int +#endif + +#if defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 500) +#define QT_SNPRINTF ::snprintf +#define QT_VSNPRINTF ::vsnprintf +#endif + + +#endif // QPLATFORMDEFS_H diff --git a/src/corelib/arch/qatomic_arch.h b/src/corelib/arch/qatomic_arch.h index 00b288b..5106d29 100644 --- a/src/corelib/arch/qatomic_arch.h +++ b/src/corelib/arch/qatomic_arch.h @@ -88,6 +88,8 @@ QT_BEGIN_HEADER # include "QtCore/qatomic_sh.h" #elif defined(QT_ARCH_SH4A) # include "QtCore/qatomic_sh4a.h" +#elif defined(QT_ARCH_NACL) +# include "QtCore/qatomic_generic.h" #else # error "Qt has not been ported to this architecture" #endif diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index 83fa044..5a810b1 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -18,7 +18,7 @@ include(codecs/codecs.pri) include(statemachine/statemachine.pri) include(xml/xml.pri) -mac|darwin:LIBS_PRIVATE += -framework ApplicationServices +!nacl:mac|darwin:LIBS_PRIVATE += -framework ApplicationServices mac:lib_bundle:DEFINES += QT_NO_DEBUG_PLUGIN_CHECK win32:DEFINES-=QT_NO_CAST_TO_ASCII diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri index b916b4d..758c5ee 100644 --- a/src/corelib/global/global.pri +++ b/src/corelib/global/global.pri @@ -13,6 +13,10 @@ SOURCES += \ global/qmalloc.cpp \ global/qnumeric.cpp +nacl { + SOURCES += global/qnaclunimplemented.cpp +} + # qlibraryinfo.cpp includes qconfig.cpp INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global diff --git a/src/corelib/global/qconfig-minimal-system-dependencies.h b/src/corelib/global/qconfig-minimal-system-dependencies.h new file mode 100644 index 0000000..c7e3633 --- /dev/null +++ b/src/corelib/global/qconfig-minimal-system-dependencies.h @@ -0,0 +1,371 @@ +/**************************************************************************** + ** + ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). + ** All rights reserved. + ** Contact: Nokia Corporation (qt-info@nokia.com) + ** + ** This file is part of the QtCore module of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:LGPL$ + ** No Commercial Usage + ** This file contains pre-release code and may not be distributed. + ** You may use this file in accordance with the terms and conditions + ** contained in the Technology Preview License Agreement accompanying + ** this package. + ** + ** GNU Lesser General Public License Usage + ** Alternatively, this file may be used under the terms of the GNU Lesser + ** General Public License version 2.1 as published by the Free Software + ** Foundation and appearing in the file LICENSE.LGPL included in the + ** packaging of this file. Please review the following information to + ** ensure the GNU Lesser General Public License version 2.1 requirements + ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** + ** In addition, as a special exception, Nokia gives you certain additional + ** rights. These rights are described in the Nokia Qt LGPL Exception + ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + ** + ** If you have questions regarding the use of this file, please contact + ** Nokia at qt-info@nokia.com. + ** + ** + ** + ** + ** + ** + ** + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + +#define QT_FONTS_ARE_RESOURCES + +/* Data structures */ +#ifndef QT_NO_QUUID_STRING +# define QT_NO_QUUID_STRING +#endif +#ifndef QT_NO_STL +# define QT_NO_STL +#endif +#ifndef QT_NO_TEXTDATE +# define QT_NO_TEXTDATE +#endif +#ifndef QT_NO_DATESTRING +# define QT_NO_DATESTRING +#endif + +/* Dialogs */ +#ifndef QT_NO_FILEDIALOG +# define QT_NO_FILEDIALOG +#endif +#ifndef QT_NO_PRINTDIALOG +# define QT_NO_PRINTDIALOG +#endif +#ifndef QT_NO_PRINTPREVIEWDIALOG +# define QT_NO_PRINTPREVIEWDIALOG +#endif + + +/* File I/O */ +#ifndef QT_NO_DOM +# define QT_NO_DOM +#endif +#ifndef QT_NO_FILESYSTEMWATCHER +# define QT_NO_FILESYSTEMWATCHER +#endif +#ifndef QT_NO_FSFILEENGINE +# define QT_NO_FSFILEENGINE +#endif +#ifndef QT_NO_FILESYSTEMMODEL +# define QT_NO_FILESYSTEMMODEL +#endif +#ifndef QT_NO_FILESYSTEMMODEL +# define QT_NO_FILESYSTEMMODEL +#endif +#ifndef QT_NO_PROCESS +# define QT_NO_PROCESS +#endif +#ifndef QT_NO_TEMPORARYFILE +# define QT_NO_TEMPORARYFILE +#endif +#ifndef QT_NO_SETTINGS +# define QT_NO_SETTINGS +#endif +#ifndef QT_NO_LIBRARY +# define QT_NO_LIBRARY +#endif + +/* Fonts */ +#ifndef QT_NO_QWS_QPF2 +# define QT_NO_QWS_QPF2 +#endif + +/* Images */ +#ifndef QT_NO_IMAGEFORMATPLUGIN +# define QT_NO_IMAGEFORMATPLUGIN +#endif +#ifndef QT_NO_IMAGE_HEURISTIC_MASK +# define QT_NO_IMAGE_HEURISTIC_MASK +#endif +#ifndef QT_NO_IMAGE_TEXT +# define QT_NO_IMAGE_TEXT +#endif +#ifndef QT_NO_MOVIE +# define QT_NO_MOVIE +#endif + +/* Internationalization */ +#ifndef QT_NO_BIG_CODECS +# define QT_NO_BIG_CODECS +#endif +#ifndef QT_NO_QWS_INPUTMETHODS +# define QT_NO_QWS_INPUTMETHODS +#endif +#ifndef QT_NO_TEXTCODEC +# define QT_NO_TEXTCODEC +#endif +#ifndef QT_NO_CODECS +# define QT_NO_CODECS +#endif +#ifndef QT_NO_TEXTCODECPLUGIN +# define QT_NO_TEXTCODECPLUGIN +#endif +#ifndef QT_NO_TRANSLATION +# define QT_NO_TRANSLATION +#endif +#ifndef QT_NO_TRANSLATION_UTF8 +# define QT_NO_TRANSLATION_UTF8 +#endif + +/* ItemViews */ + +#ifndef QT_NO_DIRMODEL +# define QT_NO_DIRMODEL +#endif + +/* Kernel */ +#ifndef QT_NO_CLIPBOARD +# define QT_NO_CLIPBOARD +#endif +#ifndef QT_NO_CSSPARSER +# define QT_NO_CSSPARSER +#endif +#ifndef QT_NO_CURSOR +# define QT_NO_CURSOR +#endif +#ifndef QT_NO_DRAGANDDROP +# define QT_NO_DRAGANDDROP +#endif +#ifndef QT_NO_EFFECTS +# define QT_NO_EFFECTS +#endif +#ifndef QT_NO_SESSIONMANAGER +# define QT_NO_SESSIONMANAGER +#endif +#ifndef QT_NO_SHAREDMEMORY +# define QT_NO_SHAREDMEMORY +#endif +#ifndef QT_NO_SOUND +# define QT_NO_SOUND +#endif +#ifndef QT_NO_SYSTEMLOCALE +# define QT_NO_SYSTEMSEMAPHORE +#endif +#ifndef QT_NO_SYSTEMSEMAPHORE +# define QT_NO_SYSTEMSEMAPHORE +#endif +#ifndef QT_NO_TABLETEVENT +# define QT_NO_TABLETEVENT +#endif +#ifndef QT_NO_CRASHHANDLER +# define QT_NO_CRASHHANDLER +#endif +#ifndef QT_NO_CONCURRENT +# define QT_NO_CONCURRENT +#endif +#ifndef QT_NO_XMLSTREAM +# define QT_NO_XMLSTREAM +#endif +#ifndef QT_NO_XMLSTREAMREADER +# define QT_NO_XMLSTREAMREADER +#endif +#ifndef QT_NO_XMLSTREAMWRITER +# define QT_NO_XMLSTREAMWRITER +#endif + +/* Networking */ +#ifndef QT_NO_COP +# define QT_NO_COP +#endif +#ifndef QT_NO_HOSTINFO +# define QT_NO_HOSTINFO +#endif +#ifndef QT_NO_HTTP +# define QT_NO_HTTP +#endif +#ifndef QT_NO_NETWORKPROXY +# define QT_NO_NETWORKPROXY +#endif +#ifndef QT_NO_SOCKS5 +# define QT_NO_SOCKS5 +#endif +#ifndef QT_NO_UDPSOCKET +# define QT_NO_UDPSOCKET +#endif +#ifndef QT_NO_URLINFO +# define QT_NO_URLINFO +#endif +#ifndef QT_NO_FTP +# define QT_NO_FTP +#endif + +/* Painting */ +#ifndef QT_NO_COLORNAMES +# define QT_NO_COLORNAMES +#endif +#ifndef QT_NO_DIRECTPAINTER +# define QT_NO_DIRECTPAINTER +#endif +#ifndef QT_NO_PAINTONSCREEN +# define QT_NO_PAINTONSCREEN +#endif +#ifndef QT_NO_PAINT_DEBUG +# define QT_NO_PAINT_DEBUG +#endif +#ifndef QT_NO_PICTURE +# define QT_NO_PICTURE +#endif +#ifndef QT_NO_PRINTER +# define QT_NO_PRINTER +#endif +#ifndef QT_NO_CUPS +# define QT_NO_CUPS +#endif + +/* Qt for Embedded Linux */ +#ifndef QT_NO_QWSEMBEDWIDGET +# define QT_NO_QWSEMBEDWIDGET +#endif +#ifndef QT_NO_QWS_ALPHA_CURSOR +# define QT_NO_QWS_ALPHA_CURSOR +#endif +#ifndef QT_NO_QWS_CURSOR +# define QT_NO_QWS_CURSOR +#endif +#ifndef QT_NO_QWS_DECORATION_DEFAULT +# define QT_NO_QWS_DECORATION_DEFAULT +#endif +#ifndef QT_NO_QWS_DECORATION_STYLED +# define QT_NO_QWS_DECORATION_STYLED +#endif +#ifndef QT_NO_QWS_DECORATION_WINDOWS +# define QT_NO_QWS_DECORATION_WINDOWS +#endif +#ifndef QT_NO_QWS_MANAGER +# define QT_NO_QWS_MANAGER +#endif +#ifndef QT_NO_QWS_KEYBOARD +# define QT_NO_QWS_KEYBOARD +#endif +#ifndef QT_NO_QWS_MOUSE +# define QT_NO_QWS_MOUSE +#endif +#ifndef QT_NO_QWS_MOUSE_AUTO +# define QT_NO_QWS_MOUSE_AUTO +#endif +#ifndef QT_NO_QWS_MOUSE_MANUAL +# define QT_NO_QWS_MOUSE_MANUAL +#endif +#ifndef QT_NO_QWS_MULTIPROCESS +# define QT_NO_QWS_MULTIPROCESS +#endif +#ifndef QT_NO_QWS_SOUNDSERVER +# define QT_NO_QWS_SOUNDSERVER +#endif +#ifndef QT_NO_SXE +# define QT_NO_SXE +#endif +#ifndef QT_NO_QWS_PROPERTIES +# define QT_NO_QWS_PROPERTIES +#endif +#ifndef QT_NO_QWS_PROXYSCREEN +# define QT_NO_QWS_PROXYSCREEN +#endif +#ifndef QT_NO_QWS_DYNAMICSCREENTRANSFORMATION +# define QT_NO_QWS_DYNAMICSCREENTRANSFORMATION +#endif +#ifndef QT_NO_QWS_LINUXFB +# define QT_NO_QWS_LINUXFB +#endif +#ifndef QT_NO_QWS_MOUSE_PC +# define QT_NO_QWS_MOUSE_PC +#endif +#ifndef QT_NO_QWS_MOUSE_LINUXTP +# define QT_NO_QWS_MOUSE_LINUXTP +#endif +#ifndef QT_NO_QWS_QPF +# define QT_NO_QWS_QPF +#endif + +/* SVG */ +#ifndef QT_NO_SVG +# define QT_NO_SVG +#endif +#ifndef QT_NO_GRAPHICSSVGITEM +# define QT_NO_GRAPHICSSVGITEM +#endif +#ifndef QT_NO_SVGGENERATOR +# define QT_NO_SVGGENERATOR +#endif +#ifndef QT_NO_SVGRENDERER +# define QT_NO_SVGRENDERER +#endif +#ifndef QT_NO_SVGWIDGET +# define QT_NO_SVGWIDGET +#endif + +/* Styles */ +#ifndef QT_NO_STYLE_MOTIF +# define QT_NO_STYLE_MOTIF +#endif +#ifndef QT_NO_STYLE_CDE +# define QT_NO_STYLE_CDE +#endif +#ifndef QT_NO_STYLE_STYLESHEET +# define QT_NO_STYLE_STYLESHEET +#endif +#ifndef QT_NO_STYLE_WINDOWSCE +# define QT_NO_STYLE_WINDOWSCE +#endif +#ifndef QT_NO_STYLE_WINDOWSMOBILE +# define QT_NO_STYLE_WINDOWSMOBILE +#endif +#ifndef QT_NO_STYLE_WINDOWSVISTA +# define QT_NO_STYLE_WINDOWSVISTA +#endif +#ifndef QT_NO_STYLE_WINDOWSXP +# define QT_NO_STYLE_WINDOWSXP +#endif + +/* Utilities */ +#ifndef QT_NO_ACCESSIBILITY +# define QT_NO_ACCESSIBILITY +#endif +#ifndef QT_NO_COMPLETER +# define QT_NO_COMPLETER +#endif +#ifndef QT_NO_DESKTOPSERVICES +# define QT_NO_DESKTOPSERVICES +#endif +#ifndef QT_NO_SCRIPT +# define QT_NO_SCRIPT +#endif +#ifndef QT_NO_SYSTEMTRAYICON +# define QT_NO_SYSTEMTRAYICON +#endif + +/* Windows */ +#ifndef QT_NO_WIN_ACTIVEQT +# define QT_NO_WIN_ACTIVEQT +#endif diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index ca3219f..45153b8 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -216,6 +216,8 @@ namespace QT_NAMESPACE {} # define Q_OS_ULTRIX #elif defined(sinix) # define Q_OS_RELIANT +#elif defined(__native_client__) +# define Q_OS_NACL #elif defined(__linux__) || defined(__linux) # define Q_OS_LINUX #elif defined(__FreeBSD__) || defined(__DragonFly__) @@ -2661,6 +2663,10 @@ QT_LICENSED_MODULE(DBus) # define QT_NO_PROCESS #endif +#ifdef Q_OS_NACL +#include +#endif + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/corelib/global/qnaclunimplemented.cpp b/src/corelib/global/qnaclunimplemented.cpp new file mode 100644 index 0000000..618ff3e --- /dev/null +++ b/src/corelib/global/qnaclunimplemented.cpp @@ -0,0 +1,156 @@ +/**************************************************************************** + ** + ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). + ** All rights reserved. + ** Contact: Nokia Corporation (qt-info@nokia.com) + ** + ** This file is part of the QtCore module of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:LGPL$ + ** No Commercial Usage + ** This file contains pre-release code and may not be distributed. + ** You may use this file in accordance with the terms and conditions + ** contained in the Technology Preview License Agreement accompanying + ** this package. + ** + ** GNU Lesser General Public License Usage + ** Alternatively, this file may be used under the terms of the GNU Lesser + ** General Public License version 2.1 as published by the Free Software + ** Foundation and appearing in the file LICENSE.LGPL included in the + ** packaging of this file. Please review the following information to + ** ensure the GNU Lesser General Public License version 2.1 requirements + ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** + ** In addition, as a special exception, Nokia gives you certain additional + ** rights. These rights are described in the Nokia Qt LGPL Exception + ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + ** + ** If you have questions regarding the use of this file, please contact + ** Nokia at qt-info@nokia.com. + ** + ** + ** + ** + ** + ** + ** + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + +#include "qnaclunimplemented.h" +#include +#include + +/* + The purpose of this file is to stub out certain functions + that are not provided by the Native Client SDK. This is + done as an alterative to sprinkling the Qt sources with + NACL ifdefs. + + There are two main classes of functions: + + - Fuctions that are called but can have no effect: + For these we simply give an empty implementation + + - Functions that are referenced in the source code, but + is not/must not be called at run-time: + These we either leave undefined or implement with a + qFatal. + + This is a work in progress. +*/ + +extern "C" { + +void pthread_cleanup_push(void (*)(void *), void *) +{ + +} + +void pthread_cleanup_pop(int) +{ + +} + +int pthread_setcancelstate(int, int *) +{ + return 0; +} + +int pthread_setcanceltype(int, int *) +{ + return 0; +} + +void pthread_testcancel(void) +{ + +} + + +int pthread_cancel(pthread_t) +{ + return 0; +} + +int pthread_attr_setinheritsched(pthread_attr_t *,int) +{ + return 0; +} + + +int pthread_attr_getinheritsched(const pthread_attr_t *, int *) +{ + return 0; +} + +// event dispatcher, select +//struct fd_set; +//struct timeval; + +int fcntl(int, int, ...) +{ + return 0; +} + +int sigaction(int, const struct sigaction *, struct sigaction *) +{ + return 0; +} + +int open(const char *, int, ...) +{ + return 0; +} + +int open64(const char *, int, ...) +{ + return 0; +} + +int access(const char *, int) +{ + return 0; +} + +typedef long off64_t; +off64_t ftello64(void *) +{ + qFatal("ftello64 called"); + return 0; +} + +off64_t lseek64(int, off_t, int) +{ + qFatal("lseek64 called"); + return 0; +} + +} // Extern C + +int select(int, fd_set *, fd_set *, fd_set *, struct timeval *) +{ + return 0; +} diff --git a/src/corelib/global/qnaclunimplemented.h b/src/corelib/global/qnaclunimplemented.h new file mode 100644 index 0000000..84085b5 --- /dev/null +++ b/src/corelib/global/qnaclunimplemented.h @@ -0,0 +1,85 @@ +/**************************************************************************** + ** + ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). + ** All rights reserved. + ** Contact: Nokia Corporation (qt-info@nokia.com) + ** + ** This file is part of the QtCore module of the Qt Toolkit. + ** + ** $QT_BEGIN_LICENSE:LGPL$ + ** No Commercial Usage + ** This file contains pre-release code and may not be distributed. + ** You may use this file in accordance with the terms and conditions + ** contained in the Technology Preview License Agreement accompanying + ** this package. + ** + ** GNU Lesser General Public License Usage + ** Alternatively, this file may be used under the terms of the GNU Lesser + ** General Public License version 2.1 as published by the Free Software + ** Foundation and appearing in the file LICENSE.LGPL included in the + ** packaging of this file. Please review the following information to + ** ensure the GNU Lesser General Public License version 2.1 requirements + ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. + ** + ** In addition, as a special exception, Nokia gives you certain additional + ** rights. These rights are described in the Nokia Qt LGPL Exception + ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. + ** + ** If you have questions regarding the use of this file, please contact + ** Nokia at qt-info@nokia.com. + ** + ** + ** + ** + ** + ** + ** + ** + ** $QT_END_LICENSE$ + ** + ****************************************************************************/ + +#ifndef QNACLUNIMPLEMENTED_H +#define QNACLUNIMPLEMENTED_H + +#ifdef Q_OS_NACL + +// pthread +#include +#define PTHREAD_CANCEL_DISABLE 1 +#define PTHREAD_CANCEL_ENABLE 2 +#define PTHREAD_INHERIT_SCHED 3 + +extern "C" { + +void pthread_cleanup_push(void (*handler)(void *), void *arg); +void pthread_cleanup_pop(int execute); + +int pthread_setcancelstate(int state, int *oldstate); +int pthread_setcanceltype(int type, int *oldtype); +void pthread_testcancel(void); +int pthread_cancel(pthread_t thread); + +int pthread_attr_setinheritsched(pthread_attr_t *attr, + int inheritsched); +int pthread_attr_getinheritsched(const pthread_attr_t *attr, + int *inheritsched); + +// event dispatcher, select +//struct fd_set; +//struct timeval; +int fcntl(int fildes, int cmd, ...); +int sigaction(int sig, const struct sigaction * act, struct sigaction * oact); + +typedef long off64_t; +off64_t ftello64(void *stream); +off64_t lseek64(int fildes, off_t offset, int whence); +int open64(const char *path, int oflag, ...); + +} + +int select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * errorfds, struct timeval * timeout); + +#endif //Q_OS_NACL + +#endif //QNACLUNIMPLEMENTED_H diff --git a/src/corelib/io/io.pri b/src/corelib/io/io.pri index ef448b1..7c14886 100644 --- a/src/corelib/io/io.pri +++ b/src/corelib/io/io.pri @@ -69,7 +69,7 @@ win32 { SOURCES += io/qfsfileengine_iterator_unix.cpp symbian:SOURCES += io/qprocess_symbian.cpp else:SOURCES += io/qprocess_unix.cpp - macx-*: { + !nacl:macx-*: { HEADERS += io/qfilesystemwatcher_fsevents_p.h SOURCES += io/qsettings_mac.cpp io/qfilesystemwatcher_fsevents.cpp } @@ -84,9 +84,11 @@ win32 { io/qfilesystemwatcher_dnotify_p.h } - freebsd-*|macx-*|darwin-*|openbsd-*:{ - SOURCES += io/qfilesystemwatcher_kqueue.cpp - HEADERS += io/qfilesystemwatcher_kqueue_p.h + !nacl { + freebsd-*|macx-*|darwin-*|openbsd-*:{ + SOURCES += io/qfilesystemwatcher_kqueue.cpp + HEADERS += io/qfilesystemwatcher_kqueue_p.h + } } symbian { diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp index 8e76e9e..783fbb0 100644 --- a/src/corelib/io/qresource.cpp +++ b/src/corelib/io/qresource.cpp @@ -928,7 +928,7 @@ public: } }; -#if defined(Q_OS_UNIX) +#if defined(Q_OS_UNIX) && ! defined (Q_OS_NACL) #define QT_USE_MMAP #endif diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index 1851e04..6f53a3f 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -78,12 +78,12 @@ wince*: { kernel/qfunctions_wince.h } -mac:!embedded { +mac:!embedded:!embedded_lite { SOURCES += \ kernel/qcoreapplication_mac.cpp } -mac { +mac:!nacl { SOURCES += \ kernel/qcore_mac.cpp } diff --git a/src/corelib/kernel/qcore_unix.cpp b/src/corelib/kernel/qcore_unix.cpp index e0d92c0..685576b 100644 --- a/src/corelib/kernel/qcore_unix.cpp +++ b/src/corelib/kernel/qcore_unix.cpp @@ -42,7 +42,8 @@ #include "qcore_unix_p.h" #include "qelapsedtimer.h" -#ifndef Q_OS_VXWORKS +#ifdef Q_OS_NACL +#elif !defined (Q_OS_VXWORKS) # if !defined(Q_OS_HPUX) || defined(__ia64) # include # endif diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index f7d45ac..0c336e7 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -112,7 +112,9 @@ QEventDispatcherUNIXPrivate::QEventDispatcherUNIXPrivate() bool pipefail = false; // initialize the common parts of the event loop -#if defined(Q_OS_INTEGRITY) +#if defined(Q_OS_NACL) + // do nothing. +#elif defined(Q_OS_INTEGRITY) // INTEGRITY doesn't like a "select" on pipes, so use socketpair instead if (socketpair(AF_INET, SOCK_STREAM, PF_INET, thread_pipe) == -1) { perror("QEventDispatcherUNIXPrivate(): Unable to create socket pair"); @@ -157,7 +159,9 @@ QEventDispatcherUNIXPrivate::QEventDispatcherUNIXPrivate() QEventDispatcherUNIXPrivate::~QEventDispatcherUNIXPrivate() { -#if defined(Q_OS_VXWORKS) +#if defined(Q_OS_NACL) + // do nothing. +#elif defined(Q_OS_VXWORKS) close(thread_pipe[0]); char name[20]; @@ -312,7 +316,7 @@ int QEventDispatcherUNIXPrivate::doSelect(QEventLoop::ProcessEventsFlags flags, QTimerInfoList::QTimerInfoList() { -#if (_POSIX_MONOTONIC_CLOCK-0 <= 0) && !defined(Q_OS_MAC) +#if (_POSIX_MONOTONIC_CLOCK-0 <= 0) && !defined(Q_OS_MAC) && !defined(Q_OS_NACL) if (!QElapsedTimer::isMonotonic()) { // not using monotonic timers, initialize the timeChanged() machinery previousTime = qt_gettime(); @@ -364,6 +368,10 @@ timeval qAbs(const timeval &t) */ bool QTimerInfoList::timeChanged(timeval *delta) { +#ifdef Q_OS_NACL + Q_UNUSED(delta) + return false; // Calling "times" crashes. +#endif struct tms unused; clock_t currentTicks = times(&unused); diff --git a/src/corelib/kernel/qeventdispatcher_unix_p.h b/src/corelib/kernel/qeventdispatcher_unix_p.h index cbe58de..d38acf3 100644 --- a/src/corelib/kernel/qeventdispatcher_unix_p.h +++ b/src/corelib/kernel/qeventdispatcher_unix_p.h @@ -64,7 +64,7 @@ # include #else # include -# if !defined(Q_OS_HPUX) || defined(__ia64) +# if (!defined(Q_OS_HPUX) || defined(__ia64)) && !defined(Q_OS_NACL) # include # endif #endif diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 6b34b5f..47a13d7 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -457,6 +457,7 @@ void QThread::usleep(unsigned long usecs) // Does some magic and calculate the Unix scheduler priorities // sched_policy is IN/OUT: it must be set to a valid policy before calling this function // sched_priority is OUT only +#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && !defined(Q_OS_SYMBIAN) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0) static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_priority) { #ifdef SCHED_IDLE @@ -484,6 +485,7 @@ static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_pr *sched_priority = prio; return true; } +#endif void QThread::start(Priority priority) { diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri index 4e0ebbc..f540f14 100644 --- a/src/corelib/tools/tools.pri +++ b/src/corelib/tools/tools.pri @@ -83,7 +83,7 @@ SOURCES += \ symbian:SOURCES+=tools/qlocale_symbian.cpp -mac:SOURCES += tools/qelapsedtimer_mac.cpp +!nacl:mac:SOURCES += tools/qelapsedtimer_mac.cpp else:symbian:SOURCES += tools/qelapsedtimer_symbian.cpp else:unix:SOURCES += tools/qelapsedtimer_unix.cpp else:win32:SOURCES += tools/qelapsedtimer_win.cpp diff --git a/src/gui/kernel/mac.pri b/src/gui/kernel/mac.pri index 1538510..eb47ce9 100644 --- a/src/gui/kernel/mac.pri +++ b/src/gui/kernel/mac.pri @@ -1,4 +1,4 @@ -!x11:!embedded:mac { +!x11:!embedded:!nacl:mac { LIBS_PRIVATE += -framework Carbon -lz *-mwerks:INCLUDEPATH += compat } diff --git a/src/gui/kernel/qplatformintegrationfactory_lite.cpp b/src/gui/kernel/qplatformintegrationfactory_lite.cpp index 9a00dea..cd7d171 100644 --- a/src/gui/kernel/qplatformintegrationfactory_lite.cpp +++ b/src/gui/kernel/qplatformintegrationfactory_lite.cpp @@ -60,8 +60,8 @@ QPlatformIntegration *QPlatformIntegrationFactory::create(const QString& key) QStringList paramList = key.split(QLatin1Char(':')); QString platform = paramList.takeFirst().toLower(); - qDebug() << loader()->keys(); #if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) + qDebug() << loader()->keys(); if (QPlatformIntegrationFactoryInterface *factory = qobject_cast(loader()->instance(platform))) ret = factory->create(platform, paramList); #endif diff --git a/src/gui/text/qfontdatabase_qws.cpp b/src/gui/text/qfontdatabase_qws.cpp index 4dd5019..09fb07c 100644 --- a/src/gui/text/qfontdatabase_qws.cpp +++ b/src/gui/text/qfontdatabase_qws.cpp @@ -388,12 +388,14 @@ static void initializeDb() } #endif +#ifndef QT_NO_QWS_QPF2 QDir dir(fontpath, QLatin1String("*.qpf2")); for (int i = 0; i < int(dir.count()); ++i) { const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i])); //qDebug() << "looking at" << file; db->addQPF2File(file); } +#endif #endif //QT_FONTS_ARE_RESOURCES diff --git a/src/src.pro b/src/src.pro index 9c4831c..d15e973 100644 --- a/src/src.pro +++ b/src/src.pro @@ -5,6 +5,8 @@ unset(SRC_SUBDIRS) win32:SRC_SUBDIRS += src_winmain symbian:SRC_SUBDIRS += src_s60main SRC_SUBDIRS += src_corelib src_xml src_network src_sql src_testlib +nacl: SRC_SUBDIRS -= src_network src_testlib +win32:SRC_SUBDIRS += src_activeqt !symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus !contains(QT_CONFIG, no-gui): SRC_SUBDIRS += src_gui !wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support -- cgit v0.12 From 03db204f7c2b0c33c7235080362c7838980d0d8e Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 14 May 2010 12:42:45 +0200 Subject: make handle{Keyboard|Mouse|Wheel}Event thread-safe MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed by: Jørgen --- src/gui/kernel/qeventdispatcher_glib_lite.cpp | 2 ++ src/gui/kernel/qeventdispatcher_lite.cpp | 2 ++ src/gui/kernel/qwindowsysteminterface.cpp | 12 ++++++++++++ src/gui/kernel/qwindowsysteminterface.h | 8 +++++--- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qeventdispatcher_glib_lite.cpp b/src/gui/kernel/qeventdispatcher_glib_lite.cpp index 0cfea8a..744925c 100644 --- a/src/gui/kernel/qeventdispatcher_glib_lite.cpp +++ b/src/gui/kernel/qeventdispatcher_glib_lite.cpp @@ -79,6 +79,8 @@ static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) QWindowSystemInterface::UserEvent * event; while (QWindowSystemInterfacePrivate::userEventsQueued()) { event = QWindowSystemInterfacePrivate::getUserEvent(); + if (!event) + break; // send through event filter if (source->q->filterEvent(event)) { diff --git a/src/gui/kernel/qeventdispatcher_lite.cpp b/src/gui/kernel/qeventdispatcher_lite.cpp index d500ad6..5b99a2f 100644 --- a/src/gui/kernel/qeventdispatcher_lite.cpp +++ b/src/gui/kernel/qeventdispatcher_lite.cpp @@ -89,6 +89,8 @@ bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) && QWindowSystemInterfacePrivate::userEventsQueued() > 0) { // process a pending user input event event = QWindowSystemInterfacePrivate::getUserEvent(); + if (!event) + break; } else { break; } diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index d7b5eef..05ca3d3 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -52,6 +52,7 @@ QTime QWindowSystemInterface::eventTime; // QList QWindowSystemInterfacePrivate::userEventQueue; +QMutex QWindowSystemInterfacePrivate::queueMutex; extern QPointer qt_last_mouse_receiver; /*! @@ -109,4 +110,15 @@ void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, con QWindowSystemInterfacePrivate::queueUserEvent(e); } +QWindowSystemInterface::UserEvent * QWindowSystemInterfacePrivate::getUserEvent() +{ + queueMutex.lock(); + QWindowSystemInterface::UserEvent *ret; + if (userEventQueue.isEmpty()) + ret = 0; + else + ret = userEventQueue.takeFirst(); + queueMutex.unlock(); + return ret; +} QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index 70b2830..d9bfc70 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -46,6 +46,7 @@ #include #include #include +#include QT_BEGIN_HEADER @@ -128,10 +129,11 @@ private: class QWindowSystemInterfacePrivate { public: static QList userEventQueue; + static QMutex queueMutex; - static int userEventsQueued() { return userEventQueue.count(); } - static QWindowSystemInterface::UserEvent * getUserEvent() { return userEventQueue.takeFirst(); } - static void queueUserEvent(QWindowSystemInterface::UserEvent *ev) { userEventQueue.append(ev); } + static int userEventsQueued() { queueMutex.lock(); int ret = userEventQueue.count(); queueMutex.unlock(); return ret; } + static QWindowSystemInterface::UserEvent * getUserEvent(); + static void queueUserEvent(QWindowSystemInterface::UserEvent *ev) { queueMutex.lock(); userEventQueue.append(ev); queueMutex.unlock(); } }; QT_END_NAMESPACE -- cgit v0.12 From 3cd3206cdaf4b1cf0ccf50b2d0a7d67a68be582e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Fri, 14 May 2010 13:18:23 +0200 Subject: Hardcode qDetectCPUFeatures to 0 for NaCl. The assembler fails verification, disable for now. --- src/corelib/tools/qsimd.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/corelib/tools/qsimd.cpp b/src/corelib/tools/qsimd.cpp index 1ef513c..11357b3 100644 --- a/src/corelib/tools/qsimd.cpp +++ b/src/corelib/tools/qsimd.cpp @@ -54,7 +54,12 @@ uint qDetectCPUFeatures() if (features != 0xffffffff) return features; -#if defined (Q_OS_WINCE) +#if defined (Q_OS_NACL) + // The qDetectCPUFeatures assembler fails verification in the + // Native Client sandbox due to use of pushf/popf. + features = 0; + return features; +#elif defined (Q_OS_WINCE) #if defined (ARM) if (IsProcessorFeaturePresent(PF_ARM_INTEL_WMMX)) { features = IWMMXT; -- cgit v0.12 From 8ace0f0b97a4b321037e034b35b6342cf0e779cf Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 19 May 2010 11:15:21 +0200 Subject: fix event dispatcher sleep problem on Android --- src/gui/kernel/qapplication_p.h | 3 +++ src/gui/kernel/qwindowsysteminterface.cpp | 12 ++++++++++++ src/gui/kernel/qwindowsysteminterface.h | 2 +- 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 7202ae5..7ad8ca5 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -322,6 +322,9 @@ public: #if defined(Q_WS_LITE) static QPlatformIntegration *platformIntegration() { return platform_integration; } + + static QAbstractEventDispatcher *qt_lite_core_dispatcher() + { return QCoreApplication::instance()->d_func()->threadData->eventDispatcher; } #endif void createEventDispatcher(); diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 05ca3d3..22b45ac 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include "qwindowsysteminterface.h" #include "qapplication_p.h" +#include QT_BEGIN_NAMESPACE @@ -121,4 +122,15 @@ QWindowSystemInterface::UserEvent * QWindowSystemInterfacePrivate::getUserEvent( queueMutex.unlock(); return ret; } + +void QWindowSystemInterfacePrivate::queueUserEvent(QWindowSystemInterface::UserEvent *ev) +{ + queueMutex.lock(); + userEventQueue.append(ev); + queueMutex.unlock(); + + QAbstractEventDispatcher *dispatcher = QApplicationPrivate::qt_lite_core_dispatcher(); + if (dispatcher) + dispatcher->wakeUp(); +} QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index d9bfc70..e0c46d1 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -133,7 +133,7 @@ public: static int userEventsQueued() { queueMutex.lock(); int ret = userEventQueue.count(); queueMutex.unlock(); return ret; } static QWindowSystemInterface::UserEvent * getUserEvent(); - static void queueUserEvent(QWindowSystemInterface::UserEvent *ev) { queueMutex.lock(); userEventQueue.append(ev); queueMutex.unlock(); } + static void queueUserEvent(QWindowSystemInterface::UserEvent *ev); }; QT_END_NAMESPACE -- cgit v0.12 From 4fa3766090972de9faf9c25d9cba6d5ab467abeb Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 26 May 2010 15:46:01 +0200 Subject: touch interface for lighthouse plugins --- src/gui/kernel/qapplication_lite.cpp | 31 +++++++++++++++++++++++++++++++ src/gui/kernel/qapplication_p.h | 1 + src/gui/kernel/qwindowsysteminterface.cpp | 9 +++++++++ src/gui/kernel/qwindowsysteminterface.h | 23 +++++++++++++++++++++++ 4 files changed, 64 insertions(+) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 5fc56a8..491dd02 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -102,6 +102,11 @@ void QApplicationPrivate::processUserEvent(QWindowSystemInterface::UserEvent *e) case QEvent::KeyRelease: QApplicationPrivate::processKeyEvent(static_cast(e)); break; + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: + QApplicationPrivate::processTouchEvent(static_cast(e)); + break; default: qWarning() << "Unknown user input event type:" << e->type; break; @@ -797,4 +802,30 @@ void QApplicationPrivate::processCloseEvent(QWidget *tlw) tlw->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); } +void QApplicationPrivate::processTouchEvent(QWindowSystemInterface::TouchEvent *e) +{ + QList touchPoints; + Qt::TouchPointStates states; + + int primaryPoint = -1; + foreach(struct QWindowSystemInterface::TouchPoint point, e->points) { + QTouchEvent::TouchPoint p; + p.setId(point.id); + p.setPressure(point.pressure); + states |= point.state; + if (point.isPrimary) { + point.state |= Qt::TouchPointPrimary; + primaryPoint = point.id; + } + p.setState(point.state); + p.setRect(point.area); + p.setScreenPos(point.area.center()); + p.setNormalizedPos(point.normalPosition); + + touchPoints.append(p); + } + + translateRawTouchEvent(e->widget.data(), e->devType, touchPoints); +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 7ad8ca5..f06826d 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -489,6 +489,7 @@ public: static void processMouseEvent(QWindowSystemInterface::MouseEvent *e); static void processKeyEvent(QWindowSystemInterface::KeyEvent *e); static void processWheelEvent(QWindowSystemInterface::WheelEvent *e); + static void processTouchEvent(QWindowSystemInterface::TouchEvent *e); static void processCloseEvent(QWidget *tlw); static void processGeometryChange(QWidget *tlw, const QRect &newRect); diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 22b45ac..102d1a3 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -133,4 +133,13 @@ void QWindowSystemInterfacePrivate::queueUserEvent(QWindowSystemInterface::UserE if (dispatcher) dispatcher->wakeUp(); } + +void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, QList points) +{ + if (!points.size()) // Touch events must have at least one point + return; + TouchEvent *e = new TouchEvent(tlw, timestamp, type, devType, points); + QWindowSystemInterfacePrivate::queueUserEvent(e); +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index e0c46d1..ca73305 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -75,6 +75,21 @@ public: static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); + struct TouchPoint { + int id; // for application use + bool isPrimary; // for application use + QPointF normalPosition; // touch device coordinates, (0 to 1, 0 to 1) + QRectF area; // the touched area, centered at position in screen coordinates + qreal pressure; // 0 to 1 + Qt::TouchPointStates state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released} + }; + + static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, QList points) { + handleTouchEvent(w, eventTime.elapsed(), type, devType, points); + } + + static void handleTouchEvent(QWidget *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, QList points); + // delivered directly by the plugin via spontaneous events static void handleGeometryChange(QWidget *w, const QRect &newRect); static void handleCloseEvent(QWidget *w); @@ -121,6 +136,14 @@ public: Qt::KeyboardModifiers modifiers; }; + class TouchEvent : public UserEvent { + public: + TouchEvent(QWidget *w, ulong time, QEvent::Type t, QTouchEvent::DeviceType d, QList p) + :UserEvent(w, time, t) { devType = d; points = p; } + QTouchEvent::DeviceType devType; + QList points; + }; + private: static QTime eventTime; -- cgit v0.12 From e998a905f6cf67a193aebc950776e84c8db13b6b Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 27 May 2010 17:34:25 +0200 Subject: include QTouchEvent header --- src/gui/kernel/qwindowsysteminterface.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index ca73305..efb515f 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -47,6 +47,7 @@ #include #include #include +#include QT_BEGIN_HEADER -- cgit v0.12 From 28580117adf5149e7ca15a43a398b412f4ec0ab4 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 31 May 2010 15:27:41 +0200 Subject: APIs for lighthouse plugins to declare screen changes These APIs provide a method for lighthouse plugins to intiate delivery of the QDesktopWidget signals: resized, screenCountChanged, and workAreaResized. The handleScreenGeometryChange and handleScreenAvailableGeometryChange functions also resize fullscreen and maximized toplevel widgets. --- src/gui/kernel/qapplication_lite.cpp | 44 +++++++++++++++++++++++++++++++ src/gui/kernel/qapplication_p.h | 4 +++ src/gui/kernel/qwindowsysteminterface.cpp | 15 +++++++++++ src/gui/kernel/qwindowsysteminterface.h | 4 +++ 4 files changed, 67 insertions(+) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 491dd02..6008a9f 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -828,4 +828,48 @@ void QApplicationPrivate::processTouchEvent(QWindowSystemInterface::TouchEvent * translateRawTouchEvent(e->widget.data(), e->devType, touchPoints); } +void QApplicationPrivate::reportScreenCount(int count) +{ + // signal anything listening for creation or deletion of screens + QDesktopWidget *desktop = QApplication::desktop(); + if (desktop) + emit desktop->screenCountChanged(count); +} + +void QApplicationPrivate::reportGeometryChange(int screenIndex) +{ + // signal anything listening for screen geometry changes + QDesktopWidget *desktop = QApplication::desktop(); + if (desktop) + emit desktop->resized(screenIndex); + + // make sure maximized and fullscreen windows are updated + QWidgetList list = QApplication::topLevelWidgets(); + for (int i = list.size() - 1; i >= 0; --i) { + QWidget *w = list.at(i); + if (w->isFullScreen()) + w->d_func()->setFullScreenSize_helper(); + else if (w->isMaximized()) + w->d_func()->setMaxWindowState_helper(); + } +} + +void QApplicationPrivate::reportAvailableGeometryChange(int screenIndex) +{ + // signal anything listening for screen geometry changes + QDesktopWidget *desktop = QApplication::desktop(); + if (desktop) + emit desktop->workAreaResized(screenIndex); + + // make sure maximized and fullscreen windows are updated + QWidgetList list = QApplication::topLevelWidgets(); + for (int i = list.size() - 1; i >= 0; --i) { + QWidget *w = list.at(i); + if (w->isFullScreen()) + w->d_func()->setFullScreenSize_helper(); + else if (w->isMaximized()) + w->d_func()->setMaxWindowState_helper(); + } +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index f06826d..e272a36 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -496,6 +496,10 @@ public: static void processUserEvent(QWindowSystemInterface::UserEvent *e); + static void reportScreenCount(int count); + static void reportGeometryChange(int screenIndex); + static void reportAvailableGeometryChange(int screenIndex); + #endif #ifdef Q_WS_QWS diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index 102d1a3..cd466e3 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -142,4 +142,19 @@ void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEv QWindowSystemInterfacePrivate::queueUserEvent(e); } +void QWindowSystemInterface::handleScreenGeometryChange(int screenIndex) +{ + QApplicationPrivate::reportGeometryChange(screenIndex); +} + +void QWindowSystemInterface::handleScreenAvailableGeometryChange(int screenIndex) +{ + QApplicationPrivate::reportAvailableGeometryChange(screenIndex); +} + +void QWindowSystemInterface::handleScreenCountChange(int count) +{ + QApplicationPrivate::reportScreenCount(count); +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index efb515f..8c69218 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -97,6 +97,10 @@ public: static void handleEnterEvent(QWidget *w); static void handleLeaveEvent(QWidget *w); + // Changes to the screen + static void handleScreenGeometryChange(int screenIndex); + static void handleScreenAvailableGeometryChange(int screenIndex); + static void handleScreenCountChange(int count); class UserEvent { public: -- cgit v0.12 From f3a920be362b85d248a9b76c1b15a0b096d7c90e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 14 May 2010 14:07:51 +0200 Subject: gl on openkode. QGLWidget only works for toplevel widgets and QGLWindowSurface is used for anything else --- src/gui/egl/egl.pri | 18 +- src/gui/kernel/qwidget_lite.cpp | 4 +- src/opengl/opengl.pro | 10 +- src/opengl/qgl_lite.cpp | 104 --------- src/plugins/platforms/openkode/main.cpp | 5 +- src/plugins/platforms/openkode/openkode.pro | 23 +- .../platforms/openkode/qopenkodeglintegration.cpp | 259 +++++++++++++++++++++ .../platforms/openkode/qopenkodeglintegration.h | 81 +++++++ .../platforms/openkode/qopenkodeintegration.cpp | 23 +- .../platforms/openkode/qopenkodeintegration.h | 4 + src/plugins/platforms/openkode/qopenkodewindow.cpp | 41 ++-- src/plugins/platforms/openkode/qopenkodewindow.h | 1 + .../platforms/openkode/qopenkodewindowsurface.cpp | 10 +- 13 files changed, 444 insertions(+), 139 deletions(-) create mode 100644 src/plugins/platforms/openkode/qopenkodeglintegration.cpp create mode 100644 src/plugins/platforms/openkode/qopenkodeglintegration.h diff --git a/src/gui/egl/egl.pri b/src/gui/egl/egl.pri index 595d135..253c091 100644 --- a/src/gui/egl/egl.pri +++ b/src/gui/egl/egl.pri @@ -6,9 +6,21 @@ contains(QT_CONFIG, egl): { egl/qeglcontext_p.h \ egl/qeglproperties_p.h - SOURCES += \ - egl/qegl.cpp \ - egl/qeglproperties.cpp + SOURCES += \ + egl/qegl.cpp \ + egl/qeglproperties.cpp + unix { + !isEmpty(QMAKE_INCDIR_EGL){ + INCLUDEPATH += $$QMAKE_INCDIR_EGL + } + !isEmpty(QMAKE_LIBDIR_EGL){ + for(p, QMAKE_LIBDIR_EGL) { + exists($$p):LIBS += -L$$p + } + } + + !isEmpty(QMAKE_LIBS_EGL): LIBS += $$QMAKE_LIBS_EGL + } wince*: SOURCES += egl/qegl_wince.cpp diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index eae83f9..d281bec 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -76,10 +76,10 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO } Q_ASSERT(platformWindow); - if (!surface) { + // QGLWidget does not need/work with a windowsurface + if (!surface && !q->inherits("QGLWidget")) { surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId()); } - Q_ASSERT(surface); data.window_flags = q->platformWindow()->setWindowFlags(data.window_flags); diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 6eb4ebe..53f9d3e 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -77,16 +77,12 @@ SOURCES += qgl.cpp \ } embedded_lite { + DEFINES += QT_NO_EGL + SOURCES += qgl_lite.cpp HEADERS += qglplatformintegration_lite.h - # If we have EGL, use the EGL implementation of QGLPixelBuffer, otherwise we just provide - # a stubbed out one. PBuffers aren't too interesting anyway. - contains(QT_CONFIG, egl) { - SOURCES += qglpixelbuffer_egl.cpp - } else { - SOURCES += qglpixelbuffer_stub.cpp - } + SOURCES += qglpixelbuffer_stub.cpp } x11 { diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index 426683b..636c711 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -49,110 +49,6 @@ #include "qgl_p.h" #include "qglplatformintegration_lite.h" -#ifndef QT_NO_EGL -#include "qgl_egl_p.h" - -void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLFormat& glFormat) -{ - int redSize = glFormat.redBufferSize(); - int greenSize = glFormat.greenBufferSize(); - int blueSize = glFormat.blueBufferSize(); - int alphaSize = glFormat.alphaBufferSize(); - int depthSize = glFormat.depthBufferSize(); - int stencilSize = glFormat.stencilBufferSize(); - int sampleCount = glFormat.samples(); - - // QGLFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that - // type has been requested. So we must check QGLFormat's booleans too if size is -1: - if (glFormat.alpha() && alphaSize <= 0) - alphaSize = 1; - if (glFormat.depth() && depthSize <= 0) - depthSize = 1; - if (glFormat.stencil() && stencilSize <= 0) - stencilSize = 1; - if (glFormat.sampleBuffers() && sampleCount <= 0) - sampleCount = 1; - - // We want to make sure 16-bit configs are chosen over 32-bit configs as they will provide - // the best performance. The EGL config selection algorithm is a bit stange in this regard: - // The selection criteria for EGL_BUFFER_SIZE is "AtLeast", so we can't use it to discard - // 32-bit configs completely from the selection. So it then comes to the sorting algorithm. - // The red/green/blue sizes have a sort priority of 3, so they are sorted by first. The sort - // order is special and described as "by larger _total_ number of color bits.". So EGL will - // put 32-bit configs in the list before the 16-bit configs. However, the spec also goes on - // to say "If the requested number of bits in attrib_list for a particular component is 0, - // then the number of bits for that component is not considered". This part of the spec also - // seems to imply that setting the red/green/blue bits to zero means none of the components - // are considered and EGL disregards the entire sorting rule. It then looks to the next - // highest priority rule, which is EGL_BUFFER_SIZE. Despite the selection criteria being - // "AtLeast" for EGL_BUFFER_SIZE, it's sort order is "smaller" meaning 16-bit configs are - // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit, - // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that - // if the application sets the red/green/blue size to 5/6/5 on the QGLFormat, they will - // probably get a 32-bit config, even when there's an RGB565 config avaliable. Oh well. - - // Now normalize the values so -1 becomes 0 - redSize = redSize > 0 ? redSize : 0; - greenSize = greenSize > 0 ? greenSize : 0; - blueSize = blueSize > 0 ? blueSize : 0; - alphaSize = alphaSize > 0 ? alphaSize : 0; - depthSize = depthSize > 0 ? depthSize : 0; - stencilSize = stencilSize > 0 ? stencilSize : 0; - sampleCount = sampleCount > 0 ? sampleCount : 0; - - eglProperties.setValue(EGL_RED_SIZE, redSize); - eglProperties.setValue(EGL_GREEN_SIZE, greenSize); - eglProperties.setValue(EGL_BLUE_SIZE, blueSize); - eglProperties.setValue(EGL_ALPHA_SIZE, alphaSize); - eglProperties.setValue(EGL_DEPTH_SIZE, depthSize); - eglProperties.setValue(EGL_STENCIL_SIZE, stencilSize); - eglProperties.setValue(EGL_SAMPLES, sampleCount); - eglProperties.setValue(EGL_SAMPLE_BUFFERS, sampleCount ? 1 : 0); -} - -// Updates "format" with the parameters of the selected configuration. -void qt_glformat_from_eglconfig(QGLFormat& format, const EGLConfig config) -{ - EGLint redSize = 0; - EGLint greenSize = 0; - EGLint blueSize = 0; - EGLint alphaSize = 0; - EGLint depthSize = 0; - EGLint stencilSize = 0; - EGLint sampleCount = 0; - EGLint level = 0; - - EGLDisplay display = QEgl::display(); - eglGetConfigAttrib(display, config, EGL_RED_SIZE, &redSize); - eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &greenSize); - eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &blueSize); - eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &alphaSize); - eglGetConfigAttrib(display, config, EGL_DEPTH_SIZE, &depthSize); - eglGetConfigAttrib(display, config, EGL_STENCIL_SIZE, &stencilSize); - eglGetConfigAttrib(display, config, EGL_SAMPLES, &sampleCount); - eglGetConfigAttrib(display, config, EGL_LEVEL, &level); - - format.setRedBufferSize(redSize); - format.setGreenBufferSize(greenSize); - format.setBlueBufferSize(blueSize); - format.setAlphaBufferSize(alphaSize); - format.setDepthBufferSize(depthSize); - format.setStencilBufferSize(stencilSize); - format.setSamples(sampleCount); - format.setPlane(level + 1); // EGL calls level 0 "normal" whereas Qt calls 1 "normal" - format.setDirectRendering(true); // All EGL contexts are direct-rendered - format.setRgba(true); // EGL doesn't support colour index rendering - format.setStereo(false); // EGL doesn't support stereo buffers - format.setAccumBufferSize(0); // EGL doesn't support accululation buffers - - // Clear the EGL error state because some of the above may - // have errored out because the attribute is not applicable - // to the surface type. Such errors don't matter. - eglGetError(); -} -#endif - - QT_BEGIN_NAMESPACE QPlatformGLContext::QPlatformGLContext() diff --git a/src/plugins/platforms/openkode/main.cpp b/src/plugins/platforms/openkode/main.cpp index bd2b5c7..b60ae1b 100644 --- a/src/plugins/platforms/openkode/main.cpp +++ b/src/plugins/platforms/openkode/main.cpp @@ -48,7 +48,7 @@ class QOpenKODEPlugin : public QPlatformIntegrationPlugin { public: QStringList keys() const; - QPlatformIntegration *create(const QString&); + QPlatformIntegration *create(const QString&, const QStringList&); }; QStringList QOpenKODEPlugin::keys() const @@ -58,8 +58,9 @@ QStringList QOpenKODEPlugin::keys() const return list; } -QPlatformIntegration * QOpenKODEPlugin::create(const QString& system) +QPlatformIntegration * QOpenKODEPlugin::create(const QString& system, const QStringList& paramList) { + Q_UNUSED(paramList); if (system.toLower() == "openkode") return new QOpenKODEIntegration; diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro index 042b74d..0614b3b 100644 --- a/src/plugins/platforms/openkode/openkode.pro +++ b/src/plugins/platforms/openkode/openkode.pro @@ -1,20 +1,37 @@ TARGET = qopenkodeintegration include(../../qpluginbase.pri) +QT += opengl + QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp \ qopenkodeintegration.cpp \ qopenkodewindowsurface.cpp \ - qopenkodewindow.cpp + qopenkodewindow.cpp \ + qopenkodeglintegration.cpp HEADERS = qopenkodeintegration.h \ qopenkodewindowsurface.h \ - qopenkodewindow.h + qopenkodewindow.h \ + qopenkodeglintegration.h RESOURCES = resources.qrc target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target -LIBS += -lKD -lEGL -lGLESv2 +LIBS += -lKD -lEGL +!isEmpty(QMAKE_INCDIR_OPENGL_ES2){ + INCLUDEPATH += $$QMAKE_INCDIR_OPENGL_ES2 +} +!isEmpty(QMAKE_LIBDIR_OPENGL_ES2){ + for(p, QMAKE_LIBDIR_OPENGL_ES2) { + exists($$p):LIBS += -L$$p + } +} +!isEmpty(QMAKE_LIBS_OPENGL_ES2){ + LIBS += $$QMAKE_LIBS_OPENGL_ES2 +} else { + LIBS += -lGLESv2 +} diff --git a/src/plugins/platforms/openkode/qopenkodeglintegration.cpp b/src/plugins/platforms/openkode/qopenkodeglintegration.cpp new file mode 100644 index 0000000..b0d901b --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodeglintegration.cpp @@ -0,0 +1,259 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qopenkodeglintegration.h" +#include +#include +#include + +#include + +#include + +void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLFormat& glFormat) +{ + int redSize = glFormat.redBufferSize(); + int greenSize = glFormat.greenBufferSize(); + int blueSize = glFormat.blueBufferSize(); + int alphaSize = glFormat.alphaBufferSize(); + int depthSize = glFormat.depthBufferSize(); + int stencilSize = glFormat.stencilBufferSize(); + int sampleCount = glFormat.samples(); + + // QGLFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that + // type has been requested. So we must check QGLFormat's booleans too if size is -1: + if (glFormat.alpha() && alphaSize <= 0) + alphaSize = 1; + if (glFormat.depth() && depthSize <= 0) + depthSize = 1; + if (glFormat.stencil() && stencilSize <= 0) + stencilSize = 1; + if (glFormat.sampleBuffers() && sampleCount <= 0) + sampleCount = 1; + + // We want to make sure 16-bit configs are chosen over 32-bit configs as they will provide + // the best performance. The EGL config selection algorithm is a bit stange in this regard: + // The selection criteria for EGL_BUFFER_SIZE is "AtLeast", so we can't use it to discard + // 32-bit configs completely from the selection. So it then comes to the sorting algorithm. + // The red/green/blue sizes have a sort priority of 3, so they are sorted by first. The sort + // order is special and described as "by larger _total_ number of color bits.". So EGL will + // put 32-bit configs in the list before the 16-bit configs. However, the spec also goes on + // to say "If the requested number of bits in attrib_list for a particular component is 0, + // then the number of bits for that component is not considered". This part of the spec also + // seems to imply that setting the red/green/blue bits to zero means none of the components + // are considered and EGL disregards the entire sorting rule. It then looks to the next + // highest priority rule, which is EGL_BUFFER_SIZE. Despite the selection criteria being + // "AtLeast" for EGL_BUFFER_SIZE, it's sort order is "smaller" meaning 16-bit configs are + // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit, + // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that + // if the application sets the red/green/blue size to 5/6/5 on the QGLFormat, they will + // probably get a 32-bit config, even when there's an RGB565 config avaliable. Oh well. + + // Now normalize the values so -1 becomes 0 + redSize = redSize > 0 ? redSize : 0; + greenSize = greenSize > 0 ? greenSize : 0; + blueSize = blueSize > 0 ? blueSize : 0; + alphaSize = alphaSize > 0 ? alphaSize : 0; + depthSize = depthSize > 0 ? depthSize : 0; + stencilSize = stencilSize > 0 ? stencilSize : 0; + sampleCount = sampleCount > 0 ? sampleCount : 0; + + eglProperties.setValue(EGL_RED_SIZE, redSize); + eglProperties.setValue(EGL_GREEN_SIZE, greenSize); + eglProperties.setValue(EGL_BLUE_SIZE, blueSize); + eglProperties.setValue(EGL_ALPHA_SIZE, alphaSize); + eglProperties.setValue(EGL_DEPTH_SIZE, depthSize); + eglProperties.setValue(EGL_STENCIL_SIZE, stencilSize); + eglProperties.setValue(EGL_SAMPLES, sampleCount); + eglProperties.setValue(EGL_SAMPLE_BUFFERS, sampleCount ? 1 : 0); +} + +// Updates "format" with the parameters of the selected configuration. +void qt_glformat_from_eglconfig(QGLFormat& format, const EGLConfig config) +{ + EGLint redSize = 0; + EGLint greenSize = 0; + EGLint blueSize = 0; + EGLint alphaSize = 0; + EGLint depthSize = 0; + EGLint stencilSize = 0; + EGLint sampleCount = 0; + EGLint level = 0; + + EGLDisplay display = QEgl::display(); + eglGetConfigAttrib(display, config, EGL_RED_SIZE, &redSize); + eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &greenSize); + eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &blueSize); + eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &alphaSize); + eglGetConfigAttrib(display, config, EGL_DEPTH_SIZE, &depthSize); + eglGetConfigAttrib(display, config, EGL_STENCIL_SIZE, &stencilSize); + eglGetConfigAttrib(display, config, EGL_SAMPLES, &sampleCount); + eglGetConfigAttrib(display, config, EGL_LEVEL, &level); + + format.setRedBufferSize(redSize); + format.setGreenBufferSize(greenSize); + format.setBlueBufferSize(blueSize); + format.setAlphaBufferSize(alphaSize); + format.setDepthBufferSize(depthSize); + format.setStencilBufferSize(stencilSize); + format.setSamples(sampleCount); + format.setPlane(level + 1); // EGL calls level 0 "normal" whereas Qt calls 1 "normal" + format.setDirectRendering(true); // All EGL contexts are direct-rendered + format.setRgba(true); // EGL doesn't support colour index rendering + format.setStereo(false); // EGL doesn't support stereo buffers + format.setAccumBufferSize(0); // EGL doesn't support accululation buffers + + // Clear the EGL error state because some of the above may + // have errored out because the attribute is not applicable + // to the surface type. Such errors don't matter. + eglGetError(); +} + +QEGLPlatformWidgetSurface::QEGLPlatformWidgetSurface() + :QPlatformGLWidgetSurface() +{ + +} +QEGLPlatformWidgetSurface::~QEGLPlatformWidgetSurface() +{ +} + +bool QEGLPlatformWidgetSurface::create(QGLWidget* widget, QGLFormat& format) +{ + return true; +} +void QEGLPlatformWidgetSurface::setGeometry(const QRect& rect) +{ + Q_UNUSED(rect); +} +bool QEGLPlatformWidgetSurface::filterEvent(QEvent *event) +{ + return QPlatformGLWidgetSurface::filterEvent(event); +} + +QEGLPlatformContext::QEGLPlatformContext() +{ +} + +QEGLPlatformContext::~QEGLPlatformContext() +{ + if (m_eglSurface != EGL_NO_SURFACE) { + doneCurrent(); + eglDestroySurface(QEgl::display(), m_eglSurface); + m_eglSurface = EGL_NO_SURFACE; + } + + if (m_context != EGL_NO_CONTEXT) { + eglDestroyContext(QEgl::display(), m_context); + m_context = EGL_NO_CONTEXT; + } +} + +bool QEGLPlatformContext::create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext) +{ + QEglProperties properties; + properties.setValue(EGL_CONTEXT_CLIENT_VERSION, 2); + //lets go with all defaults :) Seems like we get bad attributes for anything else + //qt_eglproperties_set_glformat(properties,format); + format.setDepthBufferSize(1); + EGLConfig config = QEgl::defaultConfig(device->devType(), QEgl::OpenGL,QEgl::Renderable); + QEGLPlatformContext *eglShareContext = static_cast(shareContext); + if (shareContext && eglShareContext->m_context != EGL_NO_CONTEXT) { + m_context = eglCreateContext(QEgl::display(), config, eglShareContext->m_context, properties.properties()); + if (m_context == EGL_NO_CONTEXT) { + qWarning() << "QEglContext::createContext(): Could not share context:" << QEgl::errorString(); + shareContext = 0; + } + } else { + m_context = eglCreateContext(QEgl::display(), config, EGL_NO_CONTEXT, properties.properties()); + if (m_context == EGL_NO_CONTEXT) { + qWarning() << "QEglContext::createContext(): Unable to create EGL context:" << QEgl::errorString(); + return false; + } + } + //Get/create the EGLSurface + if (device && device->devType() == QInternal::Widget){ + QWidget* widget = static_cast(device); + QGLWidget* glWidget = qobject_cast(widget); + + if (!widget->isTopLevel()) { + qWarning("Creating a GL context is only supported on top-level QWidgets"); + return false; + } + EGLNativeWindowType winId = (EGLNativeWindowType) widget->window()->winId(); + + m_eglSurface = eglCreateWindowSurface(QEgl::display(), config, winId, 0); + makeCurrent(); + glClearColor(0.0, 0.0, 0.0, 1.0); + swapBuffers(); + + + } else { + qDebug() << "QEGLPlatformContext::create: didn't create surface!!!!!"; + } + return true; + +} + +void QEGLPlatformContext::makeCurrent() +{ + eglBindAPI(EGL_OPENGL_API); + bool ok = eglMakeCurrent(QEgl::display(), m_eglSurface, m_eglSurface, m_context); + if (!ok) + qWarning() << "QEGLPlatformContext::makeCurrent(" << m_eglSurface << "):" << QEgl::errorString(); +} +void QEGLPlatformContext::doneCurrent() +{ + eglBindAPI(EGL_OPENGL_ES_API); + bool ok = eglMakeCurrent(QEgl::display(), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + if (!ok) + qWarning() << "QEGLPlatformContext::doneCurrent():" << QEgl::errorString(); +} +void QEGLPlatformContext::swapBuffers() +{ + bool ok = eglSwapBuffers(QEgl::display(), m_eglSurface); + if (!ok) + qWarning() << "QEGLPlatformContext::swapBuffers():" << QEgl::errorString(); +} +void* QEGLPlatformContext::getProcAddress(const QString& procName) +{ + eglGetProcAddress(qPrintable(procName)); +} diff --git a/src/plugins/platforms/openkode/qopenkodeglintegration.h b/src/plugins/platforms/openkode/qopenkodeglintegration.h new file mode 100644 index 0000000..c3291b8 --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodeglintegration.h @@ -0,0 +1,81 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOPENKODEGLINTEGRATION_H +#define QOPENKODEGLINTEGRATION_H + +#include +#include +#include + +void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLFormat& glFormat); +// Updates "format" with the parameters of the selected configuration. +void qt_glformat_from_eglconfig(QGLFormat& format, const EGLConfig config); + +class QEGLPlatformWidgetSurface : public QPlatformGLWidgetSurface +{ +public: + QEGLPlatformWidgetSurface(); + virtual ~QEGLPlatformWidgetSurface(); + + bool create(QGLWidget*, QGLFormat&); + void setGeometry(const QRect&); + bool filterEvent(QEvent *); +}; + +class QEGLPlatformContext : public QPlatformGLContext +{ +public: + QEGLPlatformContext(); + ~QEGLPlatformContext(); + + bool create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext); + void makeCurrent(); + void doneCurrent(); + void swapBuffers(); + void* getProcAddress(const QString& procName); + +private: + EGLContext m_context; + EGLSurface m_eglSurface; +}; + +#endif //QOPENKODEGLINTEGRATION_H diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index d9430c2..cd957af 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -42,6 +42,10 @@ #include "qopenkodeintegration.h" #include "qopenkodewindowsurface.h" #include "qopenkodewindow.h" +#include "qopenkodeglintegration.h" + +#include +#include #include @@ -198,7 +202,7 @@ QOpenKODEIntegration::QOpenKODEIntegration() QPixmapData *QOpenKODEIntegration::createPixmapData(QPixmapData::PixelType type) const { - return new QRasterPixmapData(type); + return new QGLPixmapData(type); } QPlatformWindow *QOpenKODEIntegration::createPlatformWindow(QWidget *tlw, WId ) const @@ -206,9 +210,22 @@ QPlatformWindow *QOpenKODEIntegration::createPlatformWindow(QWidget *tlw, WId ) return new QOpenKODEWindow(tlw); } -QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId winId) const +QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId wid) const +{ + return new QGLWindowSurface(widget); +} + +bool QOpenKODEIntegration::hasOpenGL() const +{ + return true; +} +QPlatformGLContext *QOpenKODEIntegration::createGLContext() +{ + return new QEGLPlatformContext; +} +QPlatformGLWidgetSurface *QOpenKODEIntegration::createGLWidgetSurface() { - return new QOpenKODEWindowSurface(widget,winId); + return new QEGLPlatformWidgetSurface; } GLuint QOpenKODEIntegration::blitterProgram() diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index 76ce219..ad6db4b 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -81,6 +81,10 @@ public: QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + bool hasOpenGL() const; + QPlatformGLContext * createGLContext(); + QPlatformGLWidgetSurface * createGLWidgetSurface(); + virtual QList screens() const { return mScreens; } static GLuint blitterProgram(); diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 8e1527c..4d18a6f 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -63,23 +63,28 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) return; } - const KDint windowSize[2] = { tlw->width(), tlw->height() }; + const KDint windowSize[2] = { tlw->width(), tlw->height()-1 }; if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { qErrnoWarning(kdGetError(), "Could not set native window size"); return; } + KDboolean visibillity(false); + if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { + qErrnoWarning(kdGetError(), "Could not set visibillity to false"); + } + // const KDboolean windowExclusive[] = { false }; // if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { // qErrnoWarning(kdGetError(), "Could not set exclusive bit"); // //return; // } // -// const KDint windowPos[2] = { tlw->x(), tlw->y() }; -// if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { -// qErrnoWarning(kdGetError(), "Could not set native window position"); -// return; -// } + const KDint windowPos[2] = { tlw->x(), tlw->y() }; + if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + qErrnoWarning(kdGetError(), "Could not set native window position"); + return; + } if (kdRealizeWindow(kdWindow, &eglWindow)) { qErrnoWarning(kdGetError(), "Could not realize native window"); @@ -87,6 +92,11 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) } } +QOpenKODEWindow::~QOpenKODEWindow() +{ + qDebug() << "destroying window"; + kdDestroyWindow(kdWindow); +} void QOpenKODEWindow::setGeometry(const QRect &rect) { const QRect geo = geometry(); @@ -98,17 +108,20 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) } } -// if (geo.topLeft() != rect.topLeft()) { -// const KDint windowPos[2] = { rect.x(), rect.y() }; -// if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { -// qErrnoWarning(kdGetError(), "Could not set native window position"); -// //return; -// } -// } + if (geo.topLeft() != rect.topLeft()) { + const KDint windowPos[2] = { rect.x(), rect.y() }; + if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + qErrnoWarning(kdGetError(), "Could not set native window position"); + //return; + } + } } void QOpenKODEWindow::setVisible(bool visible) { - + KDboolean visibillity(visible); + if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { + qErrnoWarning(kdGetError(), "Could not set visibillity to false"); + } } diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index b52f8e6..741e676 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -50,6 +50,7 @@ class QOpenKODEWindow : public QPlatformWindow { public: QOpenKODEWindow(QWidget *tlw); + ~QOpenKODEWindow(); void setGeometry(const QRect &rect); void setVisible(bool visible); diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp index 5eb0d2d..dacd019 100644 --- a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp @@ -135,7 +135,7 @@ void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoin glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, blitImage.bits()); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, mImage.bits()); // Enable vertex attribute associated with vertex position glEnableVertexAttribArray(posId); @@ -157,8 +157,12 @@ void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoin if (texId) glDeleteTextures(1, &texId); + eglWaitGL(); + mContext.swapBuffers(mSurface); mContext.doneCurrent(); + + eglWaitNative(EGL_CORE_NATIVE_ENGINE); } void QOpenKODEWindowSurface::resize(const QSize &size) @@ -171,10 +175,14 @@ void QOpenKODEWindowSurface::resize(const QSize &size) } void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) { + Q_UNUSED(region); if (mSurface == EGL_NO_SURFACE) { EGLConfig config = QEgl::defaultConfig(QInternal::Widget,QEgl::OpenGL,QEgl::Renderable); EGLint windowAttrs[] = { EGL_NONE }; mSurface = eglCreateWindowSurface(QEgl::display(), config, mWin, windowAttrs); + if (mSurface == EGL_NO_SURFACE) { + qWarning("QEglContext::createSurface(): Unable to create EGL surface, error = 0x%x", eglGetError()); + } mImage = QImage(size(),QImage::Format_RGB32); } } -- cgit v0.12 From e17ada56a676c7d87c0803cdc8367065e7aaa317 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 1 Jun 2010 15:34:52 +0200 Subject: make reporting screen size/count changes safe before QApplication constructor --- src/gui/kernel/qapplication.cpp | 3 +++ src/gui/kernel/qapplication_lite.cpp | 23 +++++++++++++++++------ src/gui/kernel/qapplication_p.h | 1 + 3 files changed, 21 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 5b294cc..6dbb7f2 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -812,6 +812,9 @@ void QApplicationPrivate::construct( if (qt_is_gui_used) qt_guiPlatformPlugin(); #endif +#ifdef Q_WS_LITE + QApplicationPrivate::qapp_constructed = true; +#endif } #if defined(Q_WS_X11) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 6008a9f..2b94102 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -86,6 +86,8 @@ static int mousePressX; static int mousePressY; static int mouse_double_click_distance = 5; +bool QApplicationPrivate::qapp_constructed = false; // QApplication::QApplication completed? + void QApplicationPrivate::processUserEvent(QWindowSystemInterface::UserEvent *e) { switch(e->type) { @@ -830,18 +832,24 @@ void QApplicationPrivate::processTouchEvent(QWindowSystemInterface::TouchEvent * void QApplicationPrivate::reportScreenCount(int count) { + // This operation only makes sense after the QApplication constructor runs + if (!QApplicationPrivate::qapp_constructed) + return; + // signal anything listening for creation or deletion of screens QDesktopWidget *desktop = QApplication::desktop(); - if (desktop) - emit desktop->screenCountChanged(count); + emit desktop->screenCountChanged(count); } void QApplicationPrivate::reportGeometryChange(int screenIndex) { + // This operation only makes sense after the QApplication constructor runs + if (!QApplicationPrivate::qapp_constructed) + return; + // signal anything listening for screen geometry changes QDesktopWidget *desktop = QApplication::desktop(); - if (desktop) - emit desktop->resized(screenIndex); + emit desktop->resized(screenIndex); // make sure maximized and fullscreen windows are updated QWidgetList list = QApplication::topLevelWidgets(); @@ -856,10 +864,13 @@ void QApplicationPrivate::reportGeometryChange(int screenIndex) void QApplicationPrivate::reportAvailableGeometryChange(int screenIndex) { + // This operation only makes sense after the QApplication constructor runs + if (!QApplicationPrivate::qapp_constructed) + return; + // signal anything listening for screen geometry changes QDesktopWidget *desktop = QApplication::desktop(); - if (desktop) - emit desktop->workAreaResized(screenIndex); + emit desktop->workAreaResized(screenIndex); // make sure maximized and fullscreen windows are updated QWidgetList list = QApplication::topLevelWidgets(); diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index e272a36..58128c8 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -428,6 +428,7 @@ public: static QString graphics_system_name; #if defined(Q_WS_LITE) static QPlatformIntegration *platform_integration; + static bool qapp_constructed; #endif private: -- cgit v0.12 From 56a57f127354a42a5de8dc59510ba5a3cfd8b442 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 2 Jun 2010 12:36:37 +0200 Subject: use QCoreApplication::startingUp() to decide if QApplication::desktop() is safe --- src/gui/kernel/qapplication.cpp | 3 --- src/gui/kernel/qapplication_lite.cpp | 8 +++----- src/gui/kernel/qapplication_p.h | 1 - 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 6dbb7f2..5b294cc 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -812,9 +812,6 @@ void QApplicationPrivate::construct( if (qt_is_gui_used) qt_guiPlatformPlugin(); #endif -#ifdef Q_WS_LITE - QApplicationPrivate::qapp_constructed = true; -#endif } #if defined(Q_WS_X11) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 2b94102..792b28b 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -86,8 +86,6 @@ static int mousePressX; static int mousePressY; static int mouse_double_click_distance = 5; -bool QApplicationPrivate::qapp_constructed = false; // QApplication::QApplication completed? - void QApplicationPrivate::processUserEvent(QWindowSystemInterface::UserEvent *e) { switch(e->type) { @@ -833,7 +831,7 @@ void QApplicationPrivate::processTouchEvent(QWindowSystemInterface::TouchEvent * void QApplicationPrivate::reportScreenCount(int count) { // This operation only makes sense after the QApplication constructor runs - if (!QApplicationPrivate::qapp_constructed) + if (QCoreApplication::startingUp()) return; // signal anything listening for creation or deletion of screens @@ -844,7 +842,7 @@ void QApplicationPrivate::reportScreenCount(int count) void QApplicationPrivate::reportGeometryChange(int screenIndex) { // This operation only makes sense after the QApplication constructor runs - if (!QApplicationPrivate::qapp_constructed) + if (QCoreApplication::startingUp()) return; // signal anything listening for screen geometry changes @@ -865,7 +863,7 @@ void QApplicationPrivate::reportGeometryChange(int screenIndex) void QApplicationPrivate::reportAvailableGeometryChange(int screenIndex) { // This operation only makes sense after the QApplication constructor runs - if (!QApplicationPrivate::qapp_constructed) + if (QCoreApplication::startingUp()) return; // signal anything listening for screen geometry changes diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 58128c8..e272a36 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -428,7 +428,6 @@ public: static QString graphics_system_name; #if defined(Q_WS_LITE) static QPlatformIntegration *platform_integration; - static bool qapp_constructed; #endif private: -- cgit v0.12 From 31608f9ca899b4d85b3c339bbab24cf42450831f Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 2 Jun 2010 16:08:56 +0200 Subject: pass the QList of TouchPoints as a constant reference for handleTouchEvent --- src/gui/kernel/qapplication_lite.cpp | 23 +---------------------- src/gui/kernel/qwindowsysteminterface.cpp | 30 ++++++++++++++++++++++++++++-- src/gui/kernel/qwindowsysteminterface.h | 8 ++++---- 3 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 792b28b..4b935ae 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -804,28 +804,7 @@ void QApplicationPrivate::processCloseEvent(QWidget *tlw) void QApplicationPrivate::processTouchEvent(QWindowSystemInterface::TouchEvent *e) { - QList touchPoints; - Qt::TouchPointStates states; - - int primaryPoint = -1; - foreach(struct QWindowSystemInterface::TouchPoint point, e->points) { - QTouchEvent::TouchPoint p; - p.setId(point.id); - p.setPressure(point.pressure); - states |= point.state; - if (point.isPrimary) { - point.state |= Qt::TouchPointPrimary; - primaryPoint = point.id; - } - p.setState(point.state); - p.setRect(point.area); - p.setScreenPos(point.area.center()); - p.setNormalizedPos(point.normalPosition); - - touchPoints.append(p); - } - - translateRawTouchEvent(e->widget.data(), e->devType, touchPoints); + translateRawTouchEvent(e->widget.data(), e->devType, e->points); } void QApplicationPrivate::reportScreenCount(int count) diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index cd466e3..c9d177d 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -134,11 +134,37 @@ void QWindowSystemInterfacePrivate::queueUserEvent(QWindowSystemInterface::UserE dispatcher->wakeUp(); } -void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, QList points) +void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points) { if (!points.size()) // Touch events must have at least one point return; - TouchEvent *e = new TouchEvent(tlw, timestamp, type, devType, points); + + QList touchPoints; + Qt::TouchPointStates states; + QTouchEvent::TouchPoint p; + + int primaryPoint = -1; + QList::const_iterator point = points.constBegin(); + QList::const_iterator end = points.constEnd(); + while (point != end) { + p.setId(point->id); + p.setPressure(point->pressure); + states |= point->state; + Qt::TouchPointStates state = point->state; + if (point->isPrimary) { + state |= Qt::TouchPointPrimary; + primaryPoint = point->id; + } + p.setState(state); + p.setRect(point->area); + p.setScreenPos(point->area.center()); + p.setNormalizedPos(point->normalPosition); + + touchPoints.append(p); + ++point; + } + + TouchEvent *e = new TouchEvent(tlw, timestamp, type, devType, touchPoints); QWindowSystemInterfacePrivate::queueUserEvent(e); } diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index 8c69218..88d6475 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -85,11 +85,11 @@ public: Qt::TouchPointStates state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released} }; - static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, QList points) { + static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points) { handleTouchEvent(w, eventTime.elapsed(), type, devType, points); } - static void handleTouchEvent(QWidget *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, QList points); + static void handleTouchEvent(QWidget *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points); // delivered directly by the plugin via spontaneous events static void handleGeometryChange(QWidget *w, const QRect &newRect); @@ -143,10 +143,10 @@ public: class TouchEvent : public UserEvent { public: - TouchEvent(QWidget *w, ulong time, QEvent::Type t, QTouchEvent::DeviceType d, QList p) + TouchEvent(QWidget *w, ulong time, QEvent::Type t, QTouchEvent::DeviceType d, const QList &p) :UserEvent(w, time, t) { devType = d; points = p; } QTouchEvent::DeviceType devType; - QList points; + QList points; }; private: -- cgit v0.12 From 37ef97675aeb71a542ef179e98d5ee29f98d25c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 2 Jun 2010 16:17:22 +0200 Subject: Use the QBlittable::drawPixmap implementation for pixmaps when we can just enable a few more states --- src/gui/painting/qpaintengine_blitter.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index 4144696..f2e6cdd 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -117,12 +117,12 @@ public: updateStateBits(&drawPixmapMask, STATE_XFORM_SCALE, true); updateStateBits(&drawPixmapMask, STATE_XFORM_COMPLEX, false); - updateStateBits(&drawPixmapMask, STATE_BRUSH_PATTERN, false); + updateStateBits(&drawPixmapMask, STATE_BRUSH_PATTERN, true); updateStateBits(&drawPixmapMask, STATE_BRUSH_ALPHA, false); - updateStateBits(&drawPixmapMask, STATE_PEN_ENABLED, false); + updateStateBits(&drawPixmapMask, STATE_PEN_ENABLED, true); - updateStateBits(&drawPixmapMask, STATE_ANTIALIASING, false); + updateStateBits(&drawPixmapMask, STATE_ANTIALIASING, true); updateStateBits(&drawPixmapMask, STATE_ALPHA, false); updateStateBits(&drawPixmapMask, STATE_BLENDING_COMPLEX, false); -- cgit v0.12 From 28547949cc78d25884a76bf3c2112a6217ba5b66 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Thu, 3 Jun 2010 13:19:37 +0200 Subject: software cursor cleanup --- src/plugins/platforms/fb_base/fb_base.cpp | 24 +++++++++++++----------- src/plugins/platforms/fb_base/fb_base.h | 6 ++++++ src/plugins/platforms/vnc/qvnccursor.cpp | 4 ++-- 3 files changed, 21 insertions(+), 13 deletions(-) diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index f2009c1..cdcb608 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -26,25 +26,29 @@ void QGraphicsSystemSoftwareCursor::pointerEvent(const QMouseEvent & e) { Q_UNUSED(e); currentRect = getCurrentRect(); - screen->setDirty(currentRect); + setDirty(); } QRect QGraphicsSystemSoftwareCursor::drawCursor(QPainter & painter) { + dirty = false; if (currentRect.isNull()) return QRect(); + if (!currentRect.intersects(screen->geometry())) + return QRect(); + prevRect = currentRect; painter.drawImage(prevRect, *graphic->image()); + onScreen = true; return prevRect; } QRect QGraphicsSystemSoftwareCursor::dirtyRect() { - if (!prevRect.isNull()) { - QRect rect = prevRect; - prevRect = QRect(); - return rect; + if (onScreen) { + onScreen = false; + return prevRect; } return QRect(); } @@ -78,7 +82,7 @@ void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget setCursor(shape); } currentRect = getCurrentRect(); - screen->setDirty(currentRect); + setDirty(); } QFbScreen::QFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) @@ -126,8 +130,6 @@ QFbScreen::~QFbScreen() void QFbScreen::setDirty(const QRect &rect) { - -// qDebug() << "QFbScreen::setDirty" << rect; repaintRegion += rect; if (!redrawTimer.isActive()) { redrawTimer.start(); @@ -165,9 +167,9 @@ void QFbScreen::generateRects() QRegion QFbScreen::doRedraw() { QRegion touchedRegion; - if (cursor) + if (cursor && cursor->isDirty() && cursor->isOnScreen()) repaintRegion += cursor->dirtyRect(); - if (repaintRegion.isEmpty()) + if (repaintRegion.isEmpty() && !cursor->isDirty()) return touchedRegion; QVector rects = repaintRegion.rects(); @@ -223,7 +225,7 @@ QRegion QFbScreen::doRedraw() } QRect cursorRect; - if (cursor) { + if (cursor && cursor->isDirty()) { cursorRect = cursor->drawCursor(*compositePainter); touchedRegion += cursorRect; } diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 13638a0..d94462d 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -29,6 +29,10 @@ public: virtual void pointerEvent(const QMouseEvent & event); virtual void changeCursor(QCursor * widgetCursor, QWidget * widget); + virtual void setDirty() { dirty = true; screen->setDirty(QRect()); } + virtual bool isDirty() { return dirty; } + virtual bool isOnScreen() { return onScreen; } + protected: QGraphicsSystemCursorImage * graphic; @@ -39,6 +43,8 @@ private: QRect currentRect; // next place to draw the cursor QRect prevRect; // last place the cursor was drawn QRect getCurrentRect(); + bool dirty; + bool onScreen; }; class QFbWindow; diff --git a/src/plugins/platforms/vnc/qvnccursor.cpp b/src/plugins/platforms/vnc/qvnccursor.cpp index 8da06aa..72dcb25 100644 --- a/src/plugins/platforms/vnc/qvnccursor.cpp +++ b/src/plugins/platforms/vnc/qvnccursor.cpp @@ -64,14 +64,14 @@ void QVNCCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) if (useVncCursor) { server->setDirtyCursor(); } else { - screen->setDirty(QRect(0,0,1,1)); + setDirty(); } } void QVNCCursor::setCursorMode(bool vnc) { if (vnc) { - screen->setDirty(dirtyRect()); + setDirty(); server->setDirtyCursor(); } else { server->setDirtyCursor(); -- cgit v0.12 From a498db43a02972e90df5f1cdd73e90260471f5f8 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Fri, 11 Jun 2010 12:50:27 +0200 Subject: litehouse multiscreen support MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit adds QPlatformIntegration::moveToScreen(), which requests that a widget be moved to another screen. The default implementation ignores the request. The VNC plugin has been updated accordingly. It currently only supports non-virtual desktops. Review by: Jørgen --- src/gui/kernel/kernel.pri | 3 +- src/gui/kernel/qapplication_lite.cpp | 21 ++++++-- src/gui/kernel/qdesktopwidget_lite.cpp | 43 ++++++++++++++-- src/gui/kernel/qdesktopwidget_lite_p.h | 74 +++++++++++++++++++++++++++ src/gui/kernel/qplatformintegration_lite.h | 2 + src/gui/kernel/qwidget.cpp | 8 +++ src/gui/kernel/qwidget.h | 1 + src/gui/kernel/qwidget_lite.cpp | 31 ++++++++++- src/gui/kernel/qwidget_p.h | 2 + src/gui/kernel/qwindowsysteminterface.h | 2 +- src/plugins/platforms/fb_base/fb_base.cpp | 61 ++++++++++++++++------ src/plugins/platforms/fb_base/fb_base.h | 7 +-- src/plugins/platforms/vnc/qvncintegration.cpp | 40 +++++++++++++-- src/plugins/platforms/vnc/qvncintegration.h | 3 ++ src/plugins/platforms/vnc/qvncserver.cpp | 9 ++-- 15 files changed, 264 insertions(+), 43 deletions(-) create mode 100644 src/gui/kernel/qdesktopwidget_lite_p.h diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 049637f..bc9e70c 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -50,7 +50,8 @@ HEADERS += \ kernel/qgesturemanager_p.h \ kernel/qsoftkeymanager_p.h \ kernel/qsoftkeymanager_common_p.h \ - kernel/qguiplatformplugin_p.h + kernel/qguiplatformplugin_p.h \ + kernel/qdesktopwidget_lite_p.h SOURCES += \ kernel/qaction.cpp \ diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index 4b935ae..dd25cd4 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -63,6 +63,7 @@ #include #include +#include "qdesktopwidget_lite_p.h" QT_BEGIN_NAMESPACE @@ -395,11 +396,16 @@ QWidget *QApplication::topLevelAt(const QPoint &pos) { QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - QPlatformScreen *screen = pi->screens().first(); - if (!screen) - return 0; - QWidget *w = screen->topLevelAt(pos); - return w; + QList screens = pi->screens(); + QList::const_iterator screen = screens.constBegin(); + QList::const_iterator end = screens.constEnd(); + + while (screen != end) { + if ((*screen)->geometry().contains(pos)) + return (*screen)->topLevelAt(pos); + ++screen; + } + return 0; } void QApplication::beep() @@ -813,6 +819,7 @@ void QApplicationPrivate::reportScreenCount(int count) if (QCoreApplication::startingUp()) return; + QApplication::desktop()->d_func()->updateScreenList(); // signal anything listening for creation or deletion of screens QDesktopWidget *desktop = QApplication::desktop(); emit desktop->screenCountChanged(count); @@ -824,6 +831,8 @@ void QApplicationPrivate::reportGeometryChange(int screenIndex) if (QCoreApplication::startingUp()) return; + QApplication::desktop()->d_func()->updateScreenList(); + // signal anything listening for screen geometry changes QDesktopWidget *desktop = QApplication::desktop(); emit desktop->resized(screenIndex); @@ -845,6 +854,8 @@ void QApplicationPrivate::reportAvailableGeometryChange(int screenIndex) if (QCoreApplication::startingUp()) return; + QApplication::desktop()->d_func()->updateScreenList(); + // signal anything listening for screen geometry changes QDesktopWidget *desktop = QApplication::desktop(); emit desktop->workAreaResized(screenIndex); diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp index b077d57..3e37faf 100644 --- a/src/gui/kernel/qdesktopwidget_lite.cpp +++ b/src/gui/kernel/qdesktopwidget_lite.cpp @@ -42,13 +42,43 @@ #include "qdesktopwidget.h" #include "private/qapplication_p.h" #include "private/qgraphicssystem_p.h" - +#include +#include "private/qwidget_p.h" +#include "private/qdesktopwidget_lite_p.h" QT_BEGIN_NAMESPACE QT_USE_NAMESPACE +void QDesktopWidgetPrivate::updateScreenList() +{ + QList screenList = QApplicationPrivate::platformIntegration()->screens(); + int targetLength = screenList.length(); + int currentLength = screens.length(); + + // Add or remove screen widgets as necessary + if(currentLength > targetLength) { + QDesktopScreenWidget *screen; + while (currentLength-- > targetLength) { + screen = screens.takeLast(); + delete screen; + } + } + else if (currentLength < targetLength) { + QDesktopScreenWidget *screen; + while (currentLength < targetLength) { + screen = new QDesktopScreenWidget(currentLength++); + screens.append(screen); + } + } + + // update the geometry of each screen widget + for (int i = 0; i < screens.length(); i++) { + screens.at(i)->setGeometry(screenList.at(i)->geometry()); + } +} + QDesktopWidget::QDesktopWidget() - : QWidget(0, Qt::Desktop) + : QWidget(*new QDesktopWidgetPrivate, 0, Qt::Desktop) { setObjectName(QLatin1String("desktop")); } @@ -59,7 +89,7 @@ QDesktopWidget::~QDesktopWidget() bool QDesktopWidget::isVirtualDesktop() const { - return true; + return QApplicationPrivate::platformIntegration()->isVirtualDesktop(); } int QDesktopWidget::primaryScreen() const @@ -73,9 +103,12 @@ int QDesktopWidget::numScreens() const return qMax(pi->screens().size(), 1); } -QWidget *QDesktopWidget::screen(int) +QWidget *QDesktopWidget::screen(int screen) { - return this; + Q_D(QDesktopWidget); + if (screen < 0 || screen >= d->screens.length()) + return d->screens.at(0); + return d->screens.at(screen); } const QRect QDesktopWidget::availableGeometry(int screenNo) const diff --git a/src/gui/kernel/qdesktopwidget_lite_p.h b/src/gui/kernel/qdesktopwidget_lite_p.h new file mode 100644 index 0000000..c04e172 --- /dev/null +++ b/src/gui/kernel/qdesktopwidget_lite_p.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#ifndef QDESKTOPWIDGET_LITE_P_H +#define QDESKTOPWIDGET_LITE_P_H + +#include "QDesktopWidget" +#include "private/qwidget_p.h" + +class QDesktopScreenWidget : public QWidget { + Q_OBJECT +public: + QDesktopScreenWidget(int screenNumber) { setWindowFlags(Qt::Desktop); setVisible(false); d_func()->screenNumber = screenNumber; } +}; + +class QDesktopWidgetPrivate : public QWidgetPrivate { +public: + QDesktopWidgetPrivate() { updateScreenList(); } + ~QDesktopWidgetPrivate() {foreach(QDesktopScreenWidget *s, screens) delete s; } + void updateScreenList(); + + QList screens; +}; + +#endif // QDESKTOPWIDGET_LITE_P_H diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h index a509b52..aa71c3d 100644 --- a/src/gui/kernel/qplatformintegration_lite.h +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -66,9 +66,11 @@ public: virtual QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const = 0; virtual QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const = 0; virtual QBlittable *createBlittable(const QSize &size) const; + virtual void moveToScreen(QWidget *window, int screen) {Q_UNUSED(window); Q_UNUSED(screen);} // Window System functions virtual QList screens() const = 0; + virtual bool isVirtualDesktop() { return false; } virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; // OpenGL Integration functions diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 2c9730b..611bd50 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -211,6 +211,8 @@ QWidgetPrivate::QWidgetPrivate(int version) , hasAlienChildren(0) , window_event(0) , qd_hd(0) +#elif defined (Q_WS_LITE) + , screenNumber(0) #endif { if (!qApp) { @@ -1154,6 +1156,12 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) // programmer specified desktop widget xinfo = desktopWidget->d_func()->xinfo; } +#elif defined(Q_WS_LITE) + if (desktopWidget) { + int screen = desktopWidget->d_func()->screenNumber; + QPlatformIntegration *platform = QApplicationPrivate::platformIntegration(); + platform->moveToScreen(q, screen); + } #else Q_UNUSED(desktopWidget); #endif diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index 7dff703..598e877 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -629,6 +629,7 @@ public: #if defined(Q_WS_LITE) void setPlatformWindow(QPlatformWindow *window); QPlatformWindow *platformWindow() const; + friend class QDesktopScreenWidget; #endif Q_SIGNALS: diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index d281bec..25cd0f6 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -85,6 +85,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO setWinId(q->platformWindow()->winId()); + QApplicationPrivate::platformIntegration()->moveToScreen(q, screenNumber); // qDebug() << "create_sys" << q << q->internalWinId(); } @@ -119,14 +120,31 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) { Q_Q(QWidget); -// QWidget *oldParent = q->parentWidget(); + + // QWidget *oldParent = q->parentWidget(); Qt::WindowFlags oldFlags = data.window_flags; + + int targetScreen = -1; + // Handle a request to move the widget to a particular screen + if (newparent && newparent->windowType() == Qt::Desktop) { + // make sure the widget is created on the same screen as the + // programmer specified desktop widget + + // get the desktop's screen number + targetScreen = newparent->d_func()->screenNumber; + newparent = 0; + } + if (parent != newparent) { QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function??? - } + if (!newparent) { f |= Qt::Window; + if (targetScreen == -1) { + if (parent) + targetScreen = qobject_cast(parent)->d_func()->screenNumber; + } } bool explicitlyHidden = q->testAttribute(Qt::WA_WState_Hidden) && q->testAttribute(Qt::WA_WState_ExplicitShowHide); @@ -153,6 +171,15 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) q->setAttribute(Qt::WA_WState_Hidden); q->setAttribute(Qt::WA_WState_ExplicitShowHide, explicitlyHidden); + // move the window to the selected screen + if (!newparent && targetScreen != -1) { + screenNumber = targetScreen; + // only if it is already created + if (q->testAttribute(Qt::WA_WState_Created)) { + QPlatformIntegration *platform = QApplicationPrivate::platformIntegration(); + platform->moveToScreen(q, targetScreen); + } + } } QPoint QWidget::mapToGlobal(const QPoint &pos) const diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index b5376a4..e0b8a67 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -815,6 +815,8 @@ public: #elif defined(Q_WS_LITE) void setMaxWindowState_helper(); void setFullScreenSize_helper(); + + int screenNumber; // screen the widget should be displayed on #ifndef QT_NO_CURSOR void updateCursor() const; #endif diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h index 88d6475..614f983 100644 --- a/src/gui/kernel/qwindowsysteminterface.h +++ b/src/gui/kernel/qwindowsysteminterface.h @@ -105,7 +105,7 @@ public: class UserEvent { public: UserEvent(QWidget * w, ulong time, QEvent::Type t) - { widget = QWeakPointer::QWeakPointer(w); type = t; timestamp = time; } + { widget = QWeakPointer(w); type = t; timestamp = time; } QWeakPointer widget; QEvent::Type type; unsigned long timestamp; diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index cdcb608..0463a60 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -18,6 +18,8 @@ QRect QGraphicsSystemSoftwareCursor::getCurrentRect() QRect rect = graphic->image()->rect().translated(-graphic->hotspot().x(), -graphic->hotspot().y()); rect.translate(QCursor::pos()); + QPoint screenOffset = screen->geometry().topLeft(); + rect.translate(-screenOffset); // global to local translation return rect; } @@ -25,8 +27,12 @@ QRect QGraphicsSystemSoftwareCursor::getCurrentRect() void QGraphicsSystemSoftwareCursor::pointerEvent(const QMouseEvent & e) { Q_UNUSED(e); + QPoint screenOffset = screen->geometry().topLeft(); currentRect = getCurrentRect(); - setDirty(); + // global to local translation + if (onScreen || screen->geometry().intersects(currentRect.translated(screenOffset))) { + setDirty(); + } } QRect QGraphicsSystemSoftwareCursor::drawCursor(QPainter & painter) @@ -35,7 +41,10 @@ QRect QGraphicsSystemSoftwareCursor::drawCursor(QPainter & painter) if (currentRect.isNull()) return QRect(); - if (!currentRect.intersects(screen->geometry())) + // We need this because the cursor might be dirty due to moving off screen + QPoint screenOffset = screen->geometry().topLeft(); + // global to local translation + if (!currentRect.translated(screenOffset).intersects(screen->geometry())) return QRect(); prevRect = currentRect; @@ -82,7 +91,9 @@ void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget setCursor(shape); } currentRect = getCurrentRect(); - setDirty(); + QPoint screenOffset = screen->geometry().topLeft(); // global to local translation + if (onScreen || screen->geometry().intersects(currentRect.translated(screenOffset))) + setDirty(); } QFbScreen::QFbScreen() : cursor(0), mGeometry(), mDepth(16), mFormat(QImage::Format_RGB16), mScreenImage(0), compositePainter(0), isUpToDate(false) @@ -130,7 +141,9 @@ QFbScreen::~QFbScreen() void QFbScreen::setDirty(const QRect &rect) { - repaintRegion += rect; + QRect intersection = rect.intersected(mGeometry); + QPoint screenOffset = mGeometry.topLeft(); + repaintRegion += intersection.translated(-screenOffset); // global to local translation if (!redrawTimer.isActive()) { redrawTimer.start(); } @@ -139,7 +152,8 @@ void QFbScreen::setDirty(const QRect &rect) void QFbScreen::generateRects() { cachedRects.clear(); - QRegion remainingScreen(mGeometry); + QPoint screenOffset = mGeometry.topLeft(); + QRegion remainingScreen(mGeometry.translated(-screenOffset)); // global to local translation for (int i = 0; i < windowStack.length(); i++) { if (remainingScreen.isEmpty()) @@ -148,8 +162,8 @@ void QFbScreen::generateRects() continue; if (!windowStack[i]->widget()->testAttribute(Qt::WA_TranslucentBackground)) { - remainingScreen -= windowStack[i]->geometry(); - QRegion windowRegion(windowStack[i]->geometry()); + remainingScreen -= windowStack[i]->localGeometry(); + QRegion windowRegion(windowStack[i]->localGeometry()); windowRegion -= remainingScreen; foreach(QRect rect, windowRegion.rects()) { cachedRects += QPair(rect, i); @@ -166,11 +180,16 @@ void QFbScreen::generateRects() QRegion QFbScreen::doRedraw() { + QPoint screenOffset = mGeometry.topLeft(); // optimize me! + QRegion touchedRegion; - if (cursor && cursor->isDirty() && cursor->isOnScreen()) - repaintRegion += cursor->dirtyRect(); - if (repaintRegion.isEmpty() && !cursor->isDirty()) + if (cursor && cursor->isDirty() && cursor->isOnScreen()) { + QRect lastCursor = cursor->dirtyRect(); + repaintRegion += lastCursor; + } + if (repaintRegion.isEmpty() && !cursor->isDirty()) { return touchedRegion; + } QVector rects = repaintRegion.rects(); @@ -206,10 +225,9 @@ QRegion QFbScreen::doRedraw() continue; if (windowStack[layerIndex]->widget()->isMinimized()) continue; - QRect windowRect = windowStack[layerIndex]->geometry(); + QRect windowRect = windowStack[layerIndex]->geometry().translated(-screenOffset); QRect windowIntersect = rect.translated(-windowRect.left(), - -windowRect.top()); -// qDebug() << " compositing" << layerIndex << windowStack[layerIndex]->surface->image().size(); + -windowRect.top()); compositePainter->drawImage(rect, windowStack[layerIndex]->surface->image(), windowIntersect); if (firstLayer) { @@ -218,10 +236,6 @@ QRegion QFbScreen::doRedraw() } } } - if (!rectRegion.isEmpty()) - qWarning() << "non-empty region!" << rectRegion; - // Everything on screen should be mapped to a sub-rectangle - // unless it's off the screen... } QRect cursorRect; @@ -240,6 +254,16 @@ QRegion QFbScreen::doRedraw() return touchedRegion; } +void QFbScreen::addWindow(QFbWindow *surface) +{ + windowStack.prepend(surface); + surface->mScreen = this; + QPoint screenOffset = mGeometry.topLeft(); + surface->localGeometry() = surface->geometry().translated(-screenOffset); // global to local translation + invalidateRectCache(); + setDirty(surface->geometry()); +} + void QFbScreen::removeWindow(QFbWindow * surface) { windowStack.removeOne(surface); @@ -369,6 +393,9 @@ void QFbWindow::setGeometry(const QRect &rect) //### QWindowSystemInterface::handleGeometryChange(window(), rect); QPlatformWindow::setGeometry(rect); + + QPoint screenOffset = mScreen->geometry().topLeft(); + mLocalGeometry = rect.translated(-screenOffset); // global to local translation } bool QFbWindowSurface::scroll(const QRegion &area, int dx, int dy) diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index d94462d..f1dd574 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -98,6 +98,8 @@ public: virtual void repaint(const QRegion&); + virtual QRect localGeometry() { return mLocalGeometry; } + protected: friend class QFbWindowSurface; friend class QFbScreen; @@ -106,7 +108,7 @@ protected: QRect oldGeometry; bool visibleFlag; Qt::WindowFlags flags; - + QRect mLocalGeometry; // local screen coordinates WId windowId; }; @@ -131,8 +133,7 @@ public: virtual void setDirty(const QRect &rect); virtual void removeWindow(QFbWindow * surface); - virtual void addWindow(QFbWindow * surface) { - windowStack.prepend(surface); invalidateRectCache(); } + virtual void addWindow(QFbWindow * surface); virtual void raise(QPlatformWindow * surface); virtual void lower(QPlatformWindow * surface); virtual QWidget * topLevelAt(const QPoint & p) const; diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 69aea79..de6d81f 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -50,7 +50,6 @@ #include - QVNCScreen::QVNCScreen(QRect screenSize, int screenId) : QFbScreen::QFbScreen() { @@ -99,6 +98,8 @@ QVNCIntegration::QVNCIntegration(const QStringList& paramList) { int sizeX = defaultWidth(); int sizeY = defaultHeight(); + int offsetX = 0; + int offsetY = 0; int display = defaultDisplay(); bool showUsage = false; @@ -111,6 +112,19 @@ QVNCIntegration::QVNCIntegration(const QStringList& paramList) else if (confString.startsWith(QLatin1String("display="))) { display = confString.section(QLatin1Char('='), 1, 1).toInt(); } + else if (confString.startsWith(QLatin1String("offset="))) { + QString val = confString.section(QLatin1Char('='), 1, 1); + offsetX = val.section(QLatin1Char('x'), 0, 0).toInt(); + offsetY = val.section(QLatin1Char('x'), 1, 1).toInt(); + } + else if (confString == QLatin1String("vnc")) { + QRect screenRect(offsetX, offsetY, sizeX, sizeY); + QVNCScreen *screen = new QVNCScreen(screenRect, display); + mScreens.append(screen); + screen->setObjectName(QString("screen %1").arg(display)); + screen->setDirty(screenRect); + ++display; + } else { qWarning() << "Unknown VNC option:" << confString; showUsage = true; @@ -120,9 +134,12 @@ QVNCIntegration::QVNCIntegration(const QStringList& paramList) if (showUsage) usage(); - mPrimaryScreen = new QVNCScreen(QRect(0, 0, sizeX, sizeY), display); - - mScreens.append(mPrimaryScreen); + QRect screenRect(offsetX, offsetY, sizeX, sizeY); + QVNCScreen *screen = new QVNCScreen(screenRect, display); + mScreens.append(screen); + mPrimaryScreen = qobject_cast(mScreens.first()); + screen->setObjectName(QString("screen %1").arg(display)); + screen->setDirty(screenRect); } QPixmapData *QVNCIntegration::createPixmapData(QPixmapData::PixelType type) const @@ -155,3 +172,18 @@ QPlatformWindow *QVNCIntegration::createPlatformWindow(QWidget *widget, WId /*wi return w; } +void QVNCIntegration::moveToScreen(QWidget *window, int screen) +{ + if (screen < 0 || screen > mScreens.size()) + return; + QVNCScreen * newScreen = qobject_cast(mScreens.at(screen)); + for(int i = 0; i < mScreens.size(); i++) { + QVNCScreen *oldScreen = qobject_cast(mScreens.at(i)); + if (oldScreen->windowStack.contains(static_cast(window->platformWindow()))) { + oldScreen->removeWindow(static_cast(window->platformWindow())); + break; + } + } + window->platformWindow()->setGeometry(window->geometry()); // this should be unified elsewhere + newScreen->addWindow(static_cast(window->platformWindow())); +} diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index dcb5419..3436e51 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -55,6 +55,7 @@ class QVNCScreenPrivate; class QVNCScreen : public QFbScreen { + Q_OBJECT public: QVNCScreen(QRect screenSize, int screenId); @@ -68,6 +69,7 @@ public: private: QVNCServer *server; QRegion doRedraw(); + friend class QVNCIntegration; }; class QVNCIntegrationPrivate; @@ -84,6 +86,7 @@ public: QList screens() const { return mScreens; } + void moveToScreen(QWidget *window, int screen); private: QVNCScreen *mPrimaryScreen; diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp index 6424083..fb6eaa8 100644 --- a/src/plugins/platforms/vnc/qvncserver.cpp +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -831,14 +831,13 @@ static bool buttonChange(Qt::MouseButtons before, Qt::MouseButtons after, Qt::Mo void QVNCServer::pointerEvent() { + QPoint screenOffset = this->screen()->geometry().topLeft(); + QRfbPointerEvent ev; if (ev.read(client)) { -// const QPoint offset = qvnc_screen->offset(); -// QWSServer::sendMouseEvent(offset + QPoint(ev.x, ev.y), ev.buttons); - QPoint eventPoint(ev.x, ev.y); - eventPoint += screen()->geometry().topLeft(); - //qDebug() << "pointerEvent" << ev.x << ev.y << hex << ev.buttons; + eventPoint += screenOffset; // local to global translation + if (ev.wheelDirection == ev.WheelNone) { QEvent::Type type = QEvent::MouseMove; Qt::MouseButton button = Qt::NoButton; -- cgit v0.12 From 7497ae0504a4186103c835c3c0cfca5133f2d50e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 11 Jun 2010 11:54:24 +0200 Subject: Added QPlatformGLContext to QPlatformWindow and removed the the creator function. Child QGLWidgets don't work --- src/gui/kernel/kernel.pri | 3 +- src/gui/kernel/qplatformglcontext_lite.h | 71 ++++++++++ src/gui/kernel/qplatformintegration_lite.cpp | 12 -- src/gui/kernel/qplatformintegration_lite.h | 10 -- src/gui/kernel/qplatformwindow_lite.cpp | 5 + src/gui/kernel/qplatformwindow_lite.h | 4 + src/gui/kernel/qwidget_lite.cpp | 12 +- src/opengl/opengl.pro | 6 +- src/opengl/qgl_lite.cpp | 80 ++--------- src/opengl/qgl_p.h | 6 +- src/opengl/qglplatformintegration_lite.h | 88 ------------ src/plugins/platforms/testlite/qglxintegration.cpp | 157 ++------------------- src/plugins/platforms/testlite/qglxintegration.h | 25 +--- .../platforms/testlite/qtestliteintegration.cpp | 18 --- .../platforms/testlite/qtestliteintegration.h | 6 - src/plugins/platforms/testlite/qtestlitewindow.cpp | 27 +++- src/plugins/platforms/testlite/qtestlitewindow.h | 4 + 17 files changed, 144 insertions(+), 390 deletions(-) create mode 100644 src/gui/kernel/qplatformglcontext_lite.h delete mode 100644 src/opengl/qglplatformintegration_lite.h diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index bc9e70c..f849ad7 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -208,7 +208,8 @@ embedded_lite { kernel/qplatformscreen_lite.h \ kernel/qplatformintegrationfactory_lite_p.h \ kernel/qplatformintegrationplugin_lite.h \ - kernel/qplatformwindow_lite.h + kernel/qplatformwindow_lite.h \ + kernel/qplatformglcontext_lite.h SOURCES += \ kernel/qapplication_lite.cpp \ diff --git a/src/gui/kernel/qplatformglcontext_lite.h b/src/gui/kernel/qplatformglcontext_lite.h new file mode 100644 index 0000000..8aeb635 --- /dev/null +++ b/src/gui/kernel/qplatformglcontext_lite.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORM_GL_CONTEXT_H +#define QPLATFORM_GL_CONTEXT_H + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class Q_OPENGL_EXPORT QPlatformGLContext +{ +public: + //QPlatformGLContext(); + //virtual ~QPlatformGLContext(); + + //virtual bool create(QPaintDevice* device, QPlatformGLContext* shareContext) = 0; + + virtual void makeCurrent() = 0; + virtual void doneCurrent() = 0; + virtual void swapBuffers() = 0; + virtual void* getProcAddress(const QString& procName) = 0; + +}; + +QT_END_NAMESPACE + +QT_END_HEADER + + +#endif // QPLATFORM_GL_INTEGRATION_P_H diff --git a/src/gui/kernel/qplatformintegration_lite.cpp b/src/gui/kernel/qplatformintegration_lite.cpp index 2d181f1..6499570 100644 --- a/src/gui/kernel/qplatformintegration_lite.cpp +++ b/src/gui/kernel/qplatformintegration_lite.cpp @@ -56,21 +56,9 @@ QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, in return QPixmap(); } -#ifndef QT_NO_OPENGL bool QPlatformIntegration::hasOpenGL() const { return false; } -QPlatformGLContext * QPlatformIntegration::createGLContext() -{ - return 0; -} - -QPlatformGLWidgetSurface * QPlatformIntegration::createGLWidgetSurface() -{ - return 0; -} -#endif - QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h index aa71c3d..88c3049 100644 --- a/src/gui/kernel/qplatformintegration_lite.h +++ b/src/gui/kernel/qplatformintegration_lite.h @@ -51,11 +51,6 @@ QT_BEGIN_NAMESPACE QT_MODULE(Gui) -#ifndef QT_NO_OPENGL -class QPlatformGLContext; -class QPlatformGLWidgetSurface; -#endif - class Q_GUI_EXPORT QPlatformIntegration { public: @@ -73,12 +68,7 @@ public: virtual bool isVirtualDesktop() { return false; } virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; -// OpenGL Integration functions -#ifndef QT_NO_OPENGL virtual bool hasOpenGL() const; - virtual QPlatformGLContext * createGLContext(); - virtual QPlatformGLWidgetSurface * createGLWidgetSurface(); -#endif }; QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformwindow_lite.cpp b/src/gui/kernel/qplatformwindow_lite.cpp index c8a3ed5..151e93d 100644 --- a/src/gui/kernel/qplatformwindow_lite.cpp +++ b/src/gui/kernel/qplatformwindow_lite.cpp @@ -76,3 +76,8 @@ void QPlatformWindow::setOpacity(qreal level) Q_UNUSED(level); qWarning("This plugin does not support setting window opacity"); } + +QPlatformGLContext *QPlatformWindow::glContext() +{ + return 0; +} diff --git a/src/gui/kernel/qplatformwindow_lite.h b/src/gui/kernel/qplatformwindow_lite.h index 583ac28..0a94fc0 100644 --- a/src/gui/kernel/qplatformwindow_lite.h +++ b/src/gui/kernel/qplatformwindow_lite.h @@ -54,6 +54,8 @@ QT_BEGIN_NAMESPACE class QPlatformWindowPrivate; class QWidget; +class QPlatformGLContext; + class Q_GUI_EXPORT QPlatformWindow { Q_DECLARE_PRIVATE(QPlatformWindow); @@ -75,6 +77,8 @@ public: virtual void lower(); virtual void setOpacity(qreal level); + + virtual QPlatformGLContext *glContext(); protected: QScopedPointer d_ptr; }; diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 25cd0f6..e1a8d0d 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -77,7 +77,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO Q_ASSERT(platformWindow); // QGLWidget does not need/work with a windowsurface - if (!surface && !q->inherits("QGLWidget")) { + if (!surface) {// && !q->inherits("QGLWidget")) { surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId()); } @@ -343,18 +343,20 @@ void QWidgetPrivate::show_sys() if (!q->isWindow()) return; - if (QWindowSurface *surface = q->windowSurface()) { + if (QPlatformWindow *window = q->platformWindow()) { const QRect geomRect = q->geometry(); - const QRect windowRect = q->platformWindow()->geometry(); + const QRect windowRect = window->geometry(); if (windowRect != geomRect) { q->platformWindow()->setGeometry(geomRect); - if (windowRect.size() != geomRect.size()) { - surface->resize(geomRect.size()); + if (QWindowSurface *surface = q->windowSurface()) + if (windowRect.size() != geomRect.size()) { + surface->resize(geomRect.size()); } } q->platformWindow()->setVisible(true); } + if (q->windowType() != Qt::Popup && q->windowType() != Qt::ToolTip && !(q->windowFlags() & Qt::X11BypassWindowManagerHint)) q->activateWindow(); //### } diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 53f9d3e..6670d14 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -79,10 +79,8 @@ SOURCES += qgl.cpp \ embedded_lite { DEFINES += QT_NO_EGL - SOURCES += qgl_lite.cpp - HEADERS += qglplatformintegration_lite.h - - SOURCES += qglpixelbuffer_stub.cpp + SOURCES += qgl_lite.cpp \ + qglpixelbuffer_stub.cpp } x11 { diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp index 636c711..2003cc1 100644 --- a/src/opengl/qgl_lite.cpp +++ b/src/opengl/qgl_lite.cpp @@ -40,39 +40,18 @@ ****************************************************************************/ #include +#include #include #include #include +#include #include "qgl.h" #include "qgl_p.h" -#include "qglplatformintegration_lite.h" QT_BEGIN_NAMESPACE -QPlatformGLContext::QPlatformGLContext() -{ -} - -QPlatformGLContext::~QPlatformGLContext() -{ -} - -QPlatformGLWidgetSurface::QPlatformGLWidgetSurface() -{ -} - -QPlatformGLWidgetSurface::~QPlatformGLWidgetSurface() -{ -} - -bool QPlatformGLWidgetSurface::filterEvent(QEvent*) -{ - // By default, return false to allow the event to pass through - return false; -} - bool QGLFormat::hasOpenGL() { @@ -82,8 +61,16 @@ bool QGLFormat::hasOpenGL() bool QGLContext::chooseContext(const QGLContext* shareContext) { Q_D(QGLContext); - d->platformContext = QApplicationPrivate::platformIntegration()->createGLContext(); - d->valid = d->platformContext->create(d->paintDevice, d->glFormat, shareContext ? shareContext->d_func()->platformContext : 0); + if (!d->paintDevice && d->paintDevice->devType() != QInternal::Widget) { + d->valid = false; + }else { + QWidget *widget = static_cast(d->paintDevice); + if (!widget->platformWindow()){ + widget->winId();//make window + } + d->platformContext = widget->platformWindow()->glContext(); + d->valid =(bool) d->platformContext; + } return d->valid; } @@ -154,18 +141,6 @@ void QGLWidget::setContext(QGLContext *context, QGLContext* oldcx = d->glcx; d->glcx = context; - if (!d->wsurf) { - // If the application has set WA_TranslucentBackground and not explicitly set - // the alpha buffer size to zero, modify the format so it have an alpha channel - QGLFormat format = d->glcx->d_func()->glFormat; - if (testAttribute(Qt::WA_TranslucentBackground) && format.alphaBufferSize() == -1) - format.setAlphaBufferSize(1); - - d->wsurf = QApplicationPrivate::platformIntegration()->createGLWidgetSurface(); - d->wsurf->create(this, format); - d->glcx->d_func()->glFormat = format; - } - if (!d->glcx->isValid()) d->glcx->create(shareContext ? shareContext : oldcx); @@ -173,12 +148,6 @@ void QGLWidget::setContext(QGLContext *context, delete oldcx; } -QPlatformGLWidgetSurface* QGLWidget::platformSurface() -{ - Q_D(QGLWidget); - return d->wsurf; -} - void QGLWidgetPrivate::init(QGLContext *context, const QGLWidget *shareWidget) { initContext(context, shareWidget); @@ -247,33 +216,12 @@ void QGLWidget::setMouseTracking(bool enable) bool QGLWidget::event(QEvent *e) { - Q_D(QGLWidget); - - if (d->wsurf) { - bool eventFiltered = d->wsurf->filterEvent(e); - if (eventFiltered) - return true; - } - return QWidget::event(e); } -void QGLWidget::resizeEvent(QResizeEvent *) +void QGLWidget::resizeEvent(QResizeEvent *e) { - Q_D(QGLWidget); - if (!isValid()) - return; - - if (!d->wsurf) { - qWarning("QGLWidget::resizeEvent() - widget does not have a platform surface"); - return; - } - d->wsurf->setGeometry(geometry()); //### What about moveEvent? - - makeCurrent(); - if (!d->glcx->initialized()) - glInit(); - resizeGL(width(), height()); + return QWidget::resizeEvent(e); } diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index 37466d8..042d5ae 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -69,7 +69,7 @@ #endif #if defined(Q_WS_LITE) -#include +#include #endif QT_BEGIN_NAMESPACE @@ -165,7 +165,7 @@ class QGLWidgetPrivate : public QWidgetPrivate public: QGLWidgetPrivate() : QWidgetPrivate() , disable_clear_on_painter_begin(false) -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) , wsurf(0) #endif #if defined(Q_WS_X11) && !defined(QT_NO_EGL) @@ -207,8 +207,6 @@ public: void updatePaintDevice(); #elif defined(Q_WS_QWS) QWSGLWindowSurface *wsurf; -#elif defined (Q_WS_LITE) - QPlatformGLWidgetSurface* wsurf; #endif }; diff --git a/src/opengl/qglplatformintegration_lite.h b/src/opengl/qglplatformintegration_lite.h deleted file mode 100644 index bec920c..0000000 --- a/src/opengl/qglplatformintegration_lite.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenGL module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORM_GL_CONTEXT_H -#define QPLATFORM_GL_CONTEXT_H - -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -// QGLPlatformWidgetSurface does _not_ inherit from QWindowSurface -// - The backing store may be totally unaware of it's existance. -class Q_OPENGL_EXPORT QPlatformGLWidgetSurface -{ -public: - QPlatformGLWidgetSurface(); - virtual ~QPlatformGLWidgetSurface(); - - virtual bool create(QGLWidget*, QGLFormat&) = 0; - - virtual void setGeometry(const QRect&) = 0; - virtual bool filterEvent(QEvent*); -}; - - -class Q_OPENGL_EXPORT QPlatformGLContext -{ -public: - QPlatformGLContext(); - virtual ~QPlatformGLContext(); - - virtual bool create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext) = 0; - - virtual void makeCurrent() = 0; - virtual void doneCurrent() = 0; - virtual void swapBuffers() = 0; - virtual void* getProcAddress(const QString& procName) = 0; - -}; - - - -QT_END_NAMESPACE - -QT_END_HEADER - - -#endif // QPLATFORM_GL_INTEGRATION_P_H diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 79596f5..ba89dbd 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -128,106 +128,24 @@ GLXFBConfig qt_glx_integration_choose_config(MyDisplay* xd, QGLFormat& format, i return chosenConfig; } - -QGLXGLWidgetSurface::QGLXGLWidgetSurface(MyDisplay* xd) - : QPlatformGLWidgetSurface() +QGLXGLContext::QGLXGLContext(WId winId, MyDisplay *xd, QGLFormat& format, QPlatformGLContext* shareContext) + : QPlatformGLContext() , m_xd(xd) + , m_drawable((Drawable)winId) , m_config(0) - , m_winId(0) - , m_widget(0) -{ -} - -QGLXGLWidgetSurface::~QGLXGLWidgetSurface() -{ -} - -static Colormap qt_glx_integration_colormap = 0; - - -bool QGLXGLWidgetSurface::create(QGLWidget *widget, QGLFormat& format) + , m_context(0) { - m_widget = widget; + GLXContext shareGlxContext = 0; + if (shareContext) + shareGlxContext = static_cast(shareContext)->glxContext(); m_config = qt_glx_integration_choose_config(m_xd, format, GLX_WINDOW_BIT); - Window parentWindow = widget->window()->winId(); - - XVisualInfo* visualInfo; - visualInfo = glXGetVisualFromFBConfig(m_xd->display, m_config); - - // ### This will leak the colormap, but we need a colormap for each visual -// if (!qt_glx_integration_colormap) { - qt_glx_integration_colormap = XCreateColormap(m_xd->display, parentWindow, - visualInfo->visual, AllocNone); -// } - - XSetWindowAttributes windowAttribs; - windowAttribs.background_pixel = m_xd->whitePixel(); - windowAttribs.border_pixel = m_xd->blackPixel(); - windowAttribs.colormap = qt_glx_integration_colormap; - - m_winId = XCreateWindow(m_xd->display, parentWindow, - widget->x(), widget->y(), widget->width(), widget->height(), - 0, visualInfo->depth, InputOutput, visualInfo->visual, - CWBackPixel|CWBorderPixel|CWColormap, &windowAttribs); + m_context = glXCreateNewContext(m_xd->display, m_config, GLX_RGBA_TYPE, shareGlxContext, True); #ifdef MYX11_DEBUG - qDebug() << "QGLXGLWidgetSurface::create" << hex << "parent" << parentWindow << "win:" << m_winId << widget; + qDebug() << "QGLXGLContext::create context" << m_context; #endif - XSetWindowBackgroundPixmap(m_xd->display, m_winId, XNone); - XMapWindow(m_xd->display, m_winId); - - XFree(visualInfo); - return true; -} - -void QGLXGLWidgetSurface::setGeometry(const QRect& rect) -{ -#ifdef MYX11_DEBUG - qDebug() << "QGLXGLWidgetSurface::setGeometry" << rect << hex << m_xd->display << m_winId << "toplevel?" << m_widget->isWindow(); -#endif - //### toplevel QGLWidgets do have a separate X window owned by the surface, but it has a - // local geometry - if (m_widget->isWindow()) - XMoveResizeWindow(m_xd->display, m_winId, 0, 0, rect.width(), rect.height()); - else - XMoveResizeWindow(m_xd->display, m_winId, rect.x(), rect.y(), rect.width(), rect.height()); -} - -bool QGLXGLWidgetSurface::filterEvent(QEvent *e) -{ - if (e->type() == QEvent::ParentAboutToChange) { - // We temporarily hide the window and re-parent it with the root window - // as it's quite likely that the parent window is about to be deleted, - // which would otherwise destroy our window along with it. - XUnmapWindow(m_xd->display, m_winId); - XReparentWindow(m_xd->display, m_winId, m_xd->rootWindow(), 0, 0); -#ifdef MYX11_DEBUG - qDebug() << "filterEvent unmap" << hex << m_winId; -#endif - } - - if (e->type() == QEvent::ParentChange) { - // Once we've got a new parent, we need to reparent the window and show it again: - XReparentWindow(m_xd->display, m_winId, m_widget->window()->winId(), m_widget->x(), m_widget->y()); - XMapWindow(m_xd->display, m_winId); -#ifdef MYX11_DEBUG - qDebug() << "filterEvent reparent" << hex << m_winId << "to:" << m_widget->window()->winId(); -#endif - } - - return false; // Allow the event to pass through to QGLWidget -} - - -QGLXGLContext::QGLXGLContext(MyDisplay *xd) - : QPlatformGLContext() - , m_xd(xd) - , m_drawable(0) - , m_config(0) - , m_context(0) -{ } QGLXGLContext::~QGLXGLContext() @@ -238,63 +156,6 @@ QGLXGLContext::~QGLXGLContext() } } -bool QGLXGLContext::create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext) -{ - Q_UNUSED(format); - - if (device->devType() != QInternal::Widget) { - qWarning("Creating a GL context is only supported on QWidgets"); - return false; - } - - GLXContext shareGlxContext = 0; - if (shareContext) - shareGlxContext = static_cast(shareContext)->glxContext(); - - - QWidget* widget = static_cast(device); - QGLWidget* glWidget = qobject_cast(widget); - if (glWidget) { - // Take the config from the QGLWidget's glx surface: - QGLXGLWidgetSurface* surface = static_cast(glWidget->platformSurface()); - m_config = surface->config(); - m_drawable = (Drawable)surface->winId(); -#ifdef MYX11_DEBUG - qDebug() << "QGLXGLContext::create" << hex << m_config << m_drawable; -#endif - } - else { - if (!widget->isTopLevel()) { - qWarning("Creating a GL context is only supported on top-level QWidgets"); - return false; - } - m_drawable = (Drawable)widget->platformWindow()->winId(); - - // ### This might choose a config with a visual that isn't compatable with the native window: - m_config = qt_glx_integration_choose_config(m_xd, format, GLX_WINDOW_BIT); - } - - m_context = glXCreateNewContext(m_xd->display, m_config, GLX_RGBA_TYPE, shareGlxContext, True); -#ifdef MYX11_DEBUG - qDebug() << "QGLXGLContext::create context" << m_context; -#endif - - // Get the XVisualInfo for the window: -// XWindowAttributes windowAttribs; -// XGetWindowAttributes(m_display, m_widget->winId(), &windowAttribs); -// XVisualInfo visualInfoTemplate; -// visualInfoTemplate.visualid = 33; //XVisualIDFromVisual(windowAttribs.visual); -// XVisualInfo *visualInfo; -// int matchingCount = 0; -// visualInfo = XGetVisualInfo(m_xd->display, VisualIDMask, &visualInfoTemplate, &matchingCount); - -// m_context = glXCreateContext(m_xd->display, visualInfo, 0, True); - -// qDebug("Created GLX context 0x%x for visual ID %d", m_context, visualInfoTemplate.visualid); - - return true; -} - void QGLXGLContext::makeCurrent() { #ifdef MYX11_DEBUG diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index 0302950..6d9a216 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -42,40 +42,19 @@ #ifndef Q_GLX_CONTEXT_H #define Q_GLX_CONTEXT_H -#include +#include #include QT_BEGIN_NAMESPACE class MyDisplay; -class QGLXGLWidgetSurface : public QPlatformGLWidgetSurface -{ -public: - QGLXGLWidgetSurface(MyDisplay* xd); - virtual ~QGLXGLWidgetSurface(); - - virtual bool create(QGLWidget*, QGLFormat&); - virtual void setGeometry(const QRect&); - virtual bool filterEvent(QEvent*); - - GLXFBConfig config() {return m_config;} - Window winId() {return m_winId;} - -private: - MyDisplay *m_xd; - GLXFBConfig m_config; - Window m_winId; - QGLWidget* m_widget; -}; - class QGLXGLContext : public QPlatformGLContext { public: - QGLXGLContext(MyDisplay* xd); + QGLXGLContext(WId winId, MyDisplay *xd, QGLFormat& format, QPlatformGLContext* shareContext); ~QGLXGLContext(); - virtual bool create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext); virtual void makeCurrent(); virtual void doneCurrent(); virtual void swapBuffers(); diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index 3fa3495..3ce9b7c 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -109,19 +109,15 @@ QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL) QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) const { -#ifndef QT_NO_OPENGL if (mUseOpenGL) return new QGLPixmapData(type); -#endif return new QRasterPixmapData(type); } QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget, WId) const { -#ifndef QT_NO_OPENGL if (mUseOpenGL) return new QGLWindowSurface(widget); -#endif return new QTestLiteWindowSurface(mPrimaryScreen, widget); } @@ -140,23 +136,9 @@ QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, in return QPixmap::fromImage(img); } -#ifndef QT_NO_OPENGL bool QTestLiteIntegration::hasOpenGL() const { return glXQueryExtension(xd->display, 0, 0) != 0; } -QPlatformGLContext *QTestLiteIntegration::createGLContext() -{ - return new QGLXGLContext(xd); -} - -QPlatformGLWidgetSurface *QTestLiteIntegration::createGLWidgetSurface() -{ - return new QGLXGLWidgetSurface(xd); -} - -#endif // QT_NO_OPENGL - - QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h index 8289a5c..01d428c 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.h +++ b/src/plugins/platforms/testlite/qtestliteintegration.h @@ -81,18 +81,12 @@ public: QList screens() const { return mScreens; } -#ifndef QT_NO_OPENGL bool hasOpenGL() const; - QPlatformGLContext * createGLContext(); - QPlatformGLWidgetSurface * createGLWidgetSurface(); -#endif MyDisplay *xd; private: -#ifndef QT_NO_OPENGL bool mUseOpenGL; -#endif QTestLiteScreen *mPrimaryScreen; QList mScreens; }; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index b5ae4fc..4ddb7ca 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -55,6 +55,9 @@ #include #include +#include +#include "qglxintegration.h" + #include #include @@ -146,7 +149,7 @@ private: QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration, QTestLiteScreen */*screen*/, QWidget *window) - :QPlatformWindow(window) + :QPlatformWindow(window), mGLContext(0) { xd = platformIntegration->xd; xd->windowList.append(this); @@ -191,6 +194,7 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility + //xw->windowTL = this; } @@ -661,8 +665,6 @@ void QTestLiteWindow::setWindowTitle(const QString &title) XSetWMName(xd->display, x_window, &windowName); } - - GC QTestLiteWindow::createGC() { GC gc; @@ -674,14 +676,14 @@ GC QTestLiteWindow::createGC() return gc; } - void QTestLiteWindow::paintEvent() { #ifdef MYX11_DEBUG // qDebug() << "QTestLiteWindow::paintEvent" << shm_img.size() << painted; #endif - widget()->windowSurface()->flush(widget(), QRect(xpos,ypos,width, height), QPoint()); + if (QWindowSurface *surface = widget()->windowSurface()) + surface->flush(widget(), QRect(xpos,ypos,width, height), QPoint()); } @@ -1005,6 +1007,21 @@ void QTestLiteWindow::setCursor(QCursor * cursor) XFlush(xd->display); } +QPlatformGLContext *QTestLiteWindow::glContext() +{ + if (!mGLContext) { + mGLContext = createGLContext(); + } + return mGLContext; +} + +QPlatformGLContext *QTestLiteWindow::createGLContext() +{ + QGLFormat format; + QPlatformGLContext *context = new QGLXGLContext(x_window, xd, format, 0); + return context; +} + Cursor QTestLiteWindow::createCursorBitmap(QCursor * cursor) { XColor bg, fg; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h index 28e49be..5d27f3a 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.h +++ b/src/plugins/platforms/testlite/qtestlitewindow.h @@ -126,6 +126,8 @@ public: void setCursor(QCursor * cursor); + QPlatformGLContext *glContext(); + private: int xpos, ypos; int width, height; @@ -135,6 +137,7 @@ private: GC createGC(); Cursor createCursorShape(int cshape); Cursor createCursorBitmap(QCursor * cursor); + QPlatformGLContext *createGLContext(); int currentCursor; @@ -142,6 +145,7 @@ private: QTestLiteScreen *mScreen; Qt::WindowFlags window_flags; + QPlatformGLContext *mGLContext; friend class QTestLiteWindowSurface; // x_window, gc and windowSurface }; -- cgit v0.12 From 0fdbda6da734969a8ea4e28a327071865b58fb5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 11 Jun 2010 13:23:01 +0200 Subject: Add support for native children in QtGui again no pluginsupport though --- src/gui/kernel/qwidget.cpp | 6 ------ src/gui/painting/qbackingstore.cpp | 6 +----- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 611bd50..5078ba4 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -2429,10 +2429,7 @@ WId QWidget::effectiveWinId() const return id; QWidget *realParent = nativeParentWidget(); Q_ASSERT(realParent); -#ifndef Q_WS_LITE - //### we really need to implement winId functionality Q_ASSERT(realParent->internalWinId()); -#endif return realParent->internalWinId(); } @@ -4121,9 +4118,6 @@ QWidget *QWidget::window() const */ QWidget *QWidget::nativeParentWidget() const { -#ifdef Q_WS_LITE - return window(); //### we don't have native child widgets yet -#endif QWidget *parent = parentWidget(); while (parent && !parent->internalWinId()) parent = parent->parentWidget(); diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index 7220ce6..b158a76 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -747,12 +747,8 @@ void QWidgetBackingStore::markDirtyOnScreen(const QRegion ®ion, QWidget *widg } // Alien widgets. - if (!widget->internalWinId() && !widget->isWindow()) { //### LITEHACK we need winid support!!! -#ifdef Q_WS_LITE - QWidget *nativeParent = widget->window(); //### LITEHACK so far only toplevels are native -#else + if (!widget->internalWinId() && !widget->isWindow()) { QWidget *nativeParent = widget->nativeParentWidget(); // Alien widgets with the top-level as the native parent (common case). -#endif if (nativeParent == tlw) { if (!widget->testAttribute(Qt::WA_WState_InPaintEvent)) dirtyOnScreen += region.translated(topLevelOffset); -- cgit v0.12 From e5d607b3635d53c84dbb782f534d8cac9096dd14 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 15 Jun 2010 11:07:04 +0200 Subject: fixed software cursor rendering when the widget under the cursor is redrawn also check if the cursor exists before checking if it is dirty when considering an early exit from QFbScreen::doRedraw() --- src/plugins/platforms/fb_base/fb_base.cpp | 4 ++-- src/plugins/platforms/fb_base/fb_base.h | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index 0463a60..5004a5a 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -187,7 +187,7 @@ QRegion QFbScreen::doRedraw() QRect lastCursor = cursor->dirtyRect(); repaintRegion += lastCursor; } - if (repaintRegion.isEmpty() && !cursor->isDirty()) { + if (repaintRegion.isEmpty() && (!cursor || !cursor->isDirty())) { return touchedRegion; } @@ -239,7 +239,7 @@ QRegion QFbScreen::doRedraw() } QRect cursorRect; - if (cursor && cursor->isDirty()) { + if (cursor && (cursor->isDirty() || repaintRegion.intersects(cursor->lastPainted()))) { cursorRect = cursor->drawCursor(*compositePainter); touchedRegion += cursorRect; } diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index f1dd574..124dde0 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -32,6 +32,7 @@ public: virtual void setDirty() { dirty = true; screen->setDirty(QRect()); } virtual bool isDirty() { return dirty; } virtual bool isOnScreen() { return onScreen; } + virtual QRect lastPainted() { return prevRect; } protected: QGraphicsSystemCursorImage * graphic; -- cgit v0.12 From 47b8d9d08386e841580ddc920681b07b338cbdb6 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 15 Jun 2010 13:09:50 +0200 Subject: virtual desktop multiscreen support - VNC plugin --- src/gui/kernel/qapplication_lite.cpp | 6 ++ src/gui/kernel/qdesktopwidget_lite.cpp | 14 ++++- src/gui/kernel/qdesktopwidget_lite_p.h | 3 +- src/plugins/platforms/fb_base/fb_base.cpp | 79 +++++++++++++++++++-------- src/plugins/platforms/fb_base/fb_base.h | 7 +-- src/plugins/platforms/vnc/qvncintegration.cpp | 22 +++++++- src/plugins/platforms/vnc/qvncintegration.h | 2 + 7 files changed, 100 insertions(+), 33 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index dd25cd4..bd72663 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -400,6 +400,12 @@ QWidget *QApplication::topLevelAt(const QPoint &pos) QList::const_iterator screen = screens.constBegin(); QList::const_iterator end = screens.constEnd(); + // The first screen in a virtual environment should know about all top levels + if (pi->isVirtualDesktop()) { + QWidget *w = (*screen)->topLevelAt(pos); + return w; + } + while (screen != end) { if ((*screen)->geometry().contains(pos)) return (*screen)->topLevelAt(pos); diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp index 3e37faf..52c1b17 100644 --- a/src/gui/kernel/qdesktopwidget_lite.cpp +++ b/src/gui/kernel/qdesktopwidget_lite.cpp @@ -71,9 +71,19 @@ void QDesktopWidgetPrivate::updateScreenList() } } + QRegion virtualGeometry; + bool doVirtualGeometry = QApplicationPrivate::platformIntegration()->isVirtualDesktop(); + // update the geometry of each screen widget for (int i = 0; i < screens.length(); i++) { - screens.at(i)->setGeometry(screenList.at(i)->geometry()); + QRect screenGeometry = screenList.at(i)->geometry(); + screens.at(i)->setGeometry(screenGeometry); + if (doVirtualGeometry) + virtualGeometry += screenGeometry; + } + + if (doVirtualGeometry) { + virtualScreen.setGeometry(virtualGeometry.boundingRect()); } } @@ -106,6 +116,8 @@ int QDesktopWidget::numScreens() const QWidget *QDesktopWidget::screen(int screen) { Q_D(QDesktopWidget); + if (QApplicationPrivate::platformIntegration()->isVirtualDesktop()) + return &d->virtualScreen; if (screen < 0 || screen >= d->screens.length()) return d->screens.at(0); return d->screens.at(screen); diff --git a/src/gui/kernel/qdesktopwidget_lite_p.h b/src/gui/kernel/qdesktopwidget_lite_p.h index c04e172..2f7ad52 100644 --- a/src/gui/kernel/qdesktopwidget_lite_p.h +++ b/src/gui/kernel/qdesktopwidget_lite_p.h @@ -59,7 +59,7 @@ class QDesktopScreenWidget : public QWidget { Q_OBJECT public: - QDesktopScreenWidget(int screenNumber) { setWindowFlags(Qt::Desktop); setVisible(false); d_func()->screenNumber = screenNumber; } + QDesktopScreenWidget(int screenNumber = -1) { setWindowFlags(Qt::Desktop); setVisible(false); d_func()->screenNumber = screenNumber; } }; class QDesktopWidgetPrivate : public QWidgetPrivate { @@ -69,6 +69,7 @@ public: void updateScreenList(); QList screens; + QDesktopScreenWidget virtualScreen; }; #endif // QDESKTOPWIDGET_LITE_P_H diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index 5004a5a..be4a530 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -162,8 +162,9 @@ void QFbScreen::generateRects() continue; if (!windowStack[i]->widget()->testAttribute(Qt::WA_TranslucentBackground)) { - remainingScreen -= windowStack[i]->localGeometry(); - QRegion windowRegion(windowStack[i]->localGeometry()); + QRect localGeometry = windowStack.at(i)->geometry().translated(-screenOffset); // global to local translation + remainingScreen -= localGeometry; + QRegion windowRegion(localGeometry); windowRegion -= remainingScreen; foreach(QRect rect, windowRegion.rects()) { cachedRects += QPair(rect, i); @@ -180,7 +181,7 @@ void QFbScreen::generateRects() QRegion QFbScreen::doRedraw() { - QPoint screenOffset = mGeometry.topLeft(); // optimize me! + QPoint screenOffset = mGeometry.topLeft(); QRegion touchedRegion; if (cursor && cursor->isDirty() && cursor->isOnScreen()) { @@ -257,9 +258,7 @@ QRegion QFbScreen::doRedraw() void QFbScreen::addWindow(QFbWindow *surface) { windowStack.prepend(surface); - surface->mScreen = this; - QPoint screenOffset = mGeometry.topLeft(); - surface->localGeometry() = surface->geometry().translated(-screenOffset); // global to local translation + surface->mScreens.append(this); invalidateRectCache(); setDirty(surface->geometry()); } @@ -267,13 +266,19 @@ void QFbScreen::addWindow(QFbWindow *surface) void QFbScreen::removeWindow(QFbWindow * surface) { windowStack.removeOne(surface); + surface->mScreens.removeOne(this); invalidateRectCache(); setDirty(surface->geometry()); } void QFbWindow::raise() { - mScreen->raise(this); + QList::const_iterator i = mScreens.constBegin(); + QList::const_iterator end = mScreens.constEnd(); + while (i != end) { + (*i)->raise(this); + ++i; + } } void QFbScreen::raise(QPlatformWindow * surface) @@ -289,7 +294,12 @@ void QFbScreen::raise(QPlatformWindow * surface) void QFbWindow::lower() { - mScreen->lower(this); + QList::const_iterator i = mScreens.constBegin(); + QList::const_iterator end = mScreens.constEnd(); + while (i != end) { + (*i)->lower(this); + ++i; + } } void QFbScreen::lower(QPlatformWindow * surface) @@ -315,9 +325,8 @@ QWidget * QFbScreen::topLevelAt(const QPoint & p) const return 0; } -QFbWindow::QFbWindow(QFbScreen *screen, QWidget *window) +QFbWindow::QFbWindow(QWidget *window) :QPlatformWindow(window), - mScreen(screen), visibleFlag(false) { static QAtomicInt winIdGenerator(1); @@ -327,7 +336,12 @@ QFbWindow::QFbWindow(QFbScreen *screen, QWidget *window) QFbWindow::~QFbWindow() { - mScreen->removeWindow(this); + QList::const_iterator i = mScreens.constBegin(); + QList::const_iterator end = mScreens.constEnd(); + while (i != end) { + (*i)->removeWindow(this); + ++i; + } } @@ -361,18 +375,23 @@ void QFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoin void QFbWindow::repaint(const QRegion ®ion) { QRect currentGeometry = geometry(); - // If this is a move, redraw the previous location - if (oldGeometry != currentGeometry) { - mScreen->setDirty(oldGeometry); - oldGeometry = currentGeometry; - } QRect dirtyClient = region.boundingRect(); QRect dirtyRegion(currentGeometry.left() + dirtyClient.left(), currentGeometry.top() + dirtyClient.top(), dirtyClient.width(), dirtyClient.height()); - mScreen->setDirty(dirtyRegion); + QList::const_iterator i = mScreens.constBegin(); + QList::const_iterator end = mScreens.constEnd(); + while (i != end) { + // If this is a move, redraw the previous location + if (oldGeometry != currentGeometry) { + (*i)->setDirty(oldGeometry); + oldGeometry = currentGeometry; + } + (*i)->setDirty(dirtyRegion); + ++i; + } } void QFbWindowSurface::resize(const QSize &size) @@ -389,13 +408,15 @@ void QFbWindow::setGeometry(const QRect &rect) oldGeometry = geometry(); - mScreen->invalidateRectCache(); + QList::const_iterator i = mScreens.constBegin(); + QList::const_iterator end = mScreens.constEnd(); + while (i != end) { + (*i)->invalidateRectCache(); + ++i; + } //### QWindowSystemInterface::handleGeometryChange(window(), rect); QPlatformWindow::setGeometry(rect); - - QPoint screenOffset = mScreen->geometry().topLeft(); - mLocalGeometry = rect.translated(-screenOffset); // global to local translation } bool QFbWindowSurface::scroll(const QRegion &area, int dx, int dy) @@ -416,14 +437,24 @@ void QFbWindowSurface::endPaint(const QRegion ®ion) void QFbWindow::setVisible(bool visible) { visibleFlag = visible; - mScreen->invalidateRectCache(); - mScreen->setDirty(geometry()); + QList::const_iterator i = mScreens.constBegin(); + QList::const_iterator end = mScreens.constEnd(); + while (i != end) { + (*i)->invalidateRectCache(); + (*i)->setDirty(geometry()); + ++i; + } } Qt::WindowFlags QFbWindow::setWindowFlags(Qt::WindowFlags type) { flags = type; - mScreen->invalidateRectCache(); + QList::const_iterator i = mScreens.constBegin(); + QList::const_iterator end = mScreens.constEnd(); + while (i != end) { + (*i)->invalidateRectCache(); + ++i; + } return flags; } diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 124dde0..3b5075d 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -80,7 +80,7 @@ class QFbWindow : public QPlatformWindow { public: - QFbWindow(QFbScreen *screen, QWidget *window); + QFbWindow(QWidget *window); ~QFbWindow(); @@ -99,17 +99,14 @@ public: virtual void repaint(const QRegion&); - virtual QRect localGeometry() { return mLocalGeometry; } - protected: friend class QFbWindowSurface; friend class QFbScreen; QFbWindowSurface *surface; - QFbScreen *mScreen; + QList mScreens; QRect oldGeometry; bool visibleFlag; Qt::WindowFlags flags; - QRect mLocalGeometry; // local screen coordinates WId windowId; }; diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index de6d81f..2ae34dc 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -95,6 +95,7 @@ static void usage() } QVNCIntegration::QVNCIntegration(const QStringList& paramList) + : virtualDesktop(false) { int sizeX = defaultWidth(); int sizeY = defaultHeight(); @@ -125,6 +126,9 @@ QVNCIntegration::QVNCIntegration(const QStringList& paramList) screen->setDirty(screenRect); ++display; } + else if (confString == QLatin1String("virtual")) { + virtualDesktop = true; + } else { qWarning() << "Unknown VNC option:" << confString; showUsage = true; @@ -167,13 +171,27 @@ QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget, WId) const QPlatformWindow *QVNCIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const { - QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); - mPrimaryScreen->addWindow(w); + QFbWindow *w = new QFbWindow(widget); + if (virtualDesktop) { + QList::const_iterator i = mScreens.constBegin(); + QList::const_iterator end = mScreens.constEnd(); + QFbScreen *screen; + while (i != end) { + screen = static_cast(*i); + screen->addWindow(w); + ++i; + } + } + else + mPrimaryScreen->addWindow(w); return w; } void QVNCIntegration::moveToScreen(QWidget *window, int screen) { + if (virtualDesktop) { // all windows exist on all screens in virtual desktop mode + return; + } if (screen < 0 || screen > mScreens.size()) return; QVNCScreen * newScreen = qobject_cast(mScreens.at(screen)); diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index 3436e51..d49e051 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -86,11 +86,13 @@ public: QList screens() const { return mScreens; } + bool isVirtualDesktop() { return virtualDesktop; } void moveToScreen(QWidget *window, int screen); private: QVNCScreen *mPrimaryScreen; QList mScreens; + bool virtualDesktop; }; -- cgit v0.12 From 853c01fe35431f78f2d3191b1592cc616c03ee09 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 15 Jun 2010 13:20:33 +0200 Subject: LinuxFB compilation fix --- src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index 391e105..f79f956 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -794,7 +794,7 @@ QWindowSurface *QLinuxFbIntegration::createWindowSurface(QWidget *widget, WId) c QPlatformWindow *QLinuxFbIntegration::createPlatformWindow(QWidget *widget, WId /*winId*/) const { - QFbWindow *w = new QFbWindow(mPrimaryScreen, widget); + QFbWindow *w = new QFbWindow(widget); mPrimaryScreen->addWindow(w); return w; } -- cgit v0.12 From 598455952bee3931934820db1dfe9e9ce4dc0388 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 15 Jun 2010 13:49:41 +0200 Subject: fix repaint of resized widgets that span multiple screens --- src/plugins/platforms/fb_base/fb_base.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index be4a530..d63bfce 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -383,11 +383,13 @@ void QFbWindow::repaint(const QRegion ®ion) dirtyClient.height()); QList::const_iterator i = mScreens.constBegin(); QList::const_iterator end = mScreens.constEnd(); + QRect oldGeometryLocal = oldGeometry; + oldGeometry = currentGeometry; while (i != end) { // If this is a move, redraw the previous location - if (oldGeometry != currentGeometry) { - (*i)->setDirty(oldGeometry); - oldGeometry = currentGeometry; + if (oldGeometryLocal != currentGeometry) { + qDebug() << "repaint old area on screen" << (*i)->objectName(); + (*i)->setDirty(oldGeometryLocal); } (*i)->setDirty(dirtyRegion); ++i; -- cgit v0.12 From 7722d8c5f9871dfd09a298b4be243af6808407f1 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Tue, 15 Jun 2010 15:00:42 +0200 Subject: fix minimizing VNC and LinuxFB top levels --- src/plugins/platforms/fb_base/fb_base.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index d63bfce..3b69550 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -160,6 +160,8 @@ void QFbScreen::generateRects() break; if (!windowStack[i]->visible()) continue; + if (windowStack[i]->widget()->isMinimized()) + continue; if (!windowStack[i]->widget()->testAttribute(Qt::WA_TranslucentBackground)) { QRect localGeometry = windowStack.at(i)->geometry().translated(-screenOffset); // global to local translation -- cgit v0.12 From 5343c882496586a73b7e0071178866b14b1dde8f Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 16 Jun 2010 12:47:23 +0200 Subject: Set the desktop widget geometry to reflect the size of the screen(s) Also removed a stray debug message --- src/gui/kernel/qdesktopwidget_lite.cpp | 6 +++--- src/plugins/platforms/fb_base/fb_base.cpp | 1 - 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp index 52c1b17..553173b 100644 --- a/src/gui/kernel/qdesktopwidget_lite.cpp +++ b/src/gui/kernel/qdesktopwidget_lite.cpp @@ -82,15 +82,15 @@ void QDesktopWidgetPrivate::updateScreenList() virtualGeometry += screenGeometry; } - if (doVirtualGeometry) { - virtualScreen.setGeometry(virtualGeometry.boundingRect()); - } + virtualScreen.setGeometry(virtualGeometry.boundingRect()); } QDesktopWidget::QDesktopWidget() : QWidget(*new QDesktopWidgetPrivate, 0, Qt::Desktop) { + Q_D(QDesktopWidget); setObjectName(QLatin1String("desktop")); + this->setGeometry(d->virtualScreen.geometry()); } QDesktopWidget::~QDesktopWidget() diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index 3b69550..213a710 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -390,7 +390,6 @@ void QFbWindow::repaint(const QRegion ®ion) while (i != end) { // If this is a move, redraw the previous location if (oldGeometryLocal != currentGeometry) { - qDebug() << "repaint old area on screen" << (*i)->objectName(); (*i)->setDirty(oldGeometryLocal); } (*i)->setDirty(dirtyRegion); -- cgit v0.12 From fef040c3b697f5a14b06c63858a5832e1e833abb Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 16 Jun 2010 14:45:40 +0200 Subject: Disable Qt3Support for Lighthouse MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This turns it off hard, ignoring configure options to the contrary. Reviewed-by: Jørgen --- configure | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configure b/configure index da34fb5..9db16e3 100755 --- a/configure +++ b/configure @@ -2322,6 +2322,11 @@ if [ "$CFG_GUI" = "no" ]; then CFG_QT3SUPPORT="no" fi +#disable Qt3Support for Lighthouse +if [ "$PLATFORM_EMBLITE" = "yes" ]; then + CFG_QT3SUPPORT="no" +fi + # update QT_CONFIG to show our current predefined configuration case "$CFG_QCONFIG" in minimal|small|medium|large|full) -- cgit v0.12 From c12c0186a0ecdf43f8d0dcfc1d8bea704a4fe32b Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 16 Jun 2010 15:34:25 +0200 Subject: update QDesktopWidget geometry when screens are added, removed, or resized --- src/gui/kernel/qdesktopwidget_lite.cpp | 4 +++- src/gui/kernel/qdesktopwidget_lite_p.h | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp index 553173b..6ba5dd9 100644 --- a/src/gui/kernel/qdesktopwidget_lite.cpp +++ b/src/gui/kernel/qdesktopwidget_lite.cpp @@ -83,6 +83,8 @@ void QDesktopWidgetPrivate::updateScreenList() } virtualScreen.setGeometry(virtualGeometry.boundingRect()); + Q_Q(QDesktopWidget); + q->setGeometry(virtualScreen.geometry()); } QDesktopWidget::QDesktopWidget() @@ -90,7 +92,7 @@ QDesktopWidget::QDesktopWidget() { Q_D(QDesktopWidget); setObjectName(QLatin1String("desktop")); - this->setGeometry(d->virtualScreen.geometry()); + d->updateScreenList(); } QDesktopWidget::~QDesktopWidget() diff --git a/src/gui/kernel/qdesktopwidget_lite_p.h b/src/gui/kernel/qdesktopwidget_lite_p.h index 2f7ad52..33e4c98 100644 --- a/src/gui/kernel/qdesktopwidget_lite_p.h +++ b/src/gui/kernel/qdesktopwidget_lite_p.h @@ -63,8 +63,9 @@ public: }; class QDesktopWidgetPrivate : public QWidgetPrivate { + Q_DECLARE_PUBLIC(QDesktopWidget) + public: - QDesktopWidgetPrivate() { updateScreenList(); } ~QDesktopWidgetPrivate() {foreach(QDesktopScreenWidget *s, screens) delete s; } void updateScreenList(); -- cgit v0.12 From c28069a0c4d54d1c8a63bb17bb30ef45e7cf47a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 17 Jun 2010 10:23:57 +0200 Subject: Adding support for setParent api in plugins This is work in progress, but boxes and wolfenqt works in testlite:) --- src/gui/kernel/qplatformwindow_lite.cpp | 2 + src/gui/kernel/qplatformwindow_lite.h | 1 + src/gui/kernel/qwidget_lite.cpp | 45 ++++++++++++++++------ src/plugins/platforms/testlite/qtestlitewindow.cpp | 22 ++++++++--- src/plugins/platforms/testlite/qtestlitewindow.h | 1 + 5 files changed, 54 insertions(+), 17 deletions(-) diff --git a/src/gui/kernel/qplatformwindow_lite.cpp b/src/gui/kernel/qplatformwindow_lite.cpp index 151e93d..9efbf8b 100644 --- a/src/gui/kernel/qplatformwindow_lite.cpp +++ b/src/gui/kernel/qplatformwindow_lite.cpp @@ -65,6 +65,8 @@ Qt::WindowFlags QPlatformWindow::windowFlags() const WId QPlatformWindow::winId() const { return WId(0); } +void QPlatformWindow::setParent(const QPlatformWindow *) { qWarning("This plugin does not support setParent!"); } + void QPlatformWindow::setWindowTitle(const QString &) {} void QPlatformWindow::raise() { qWarning("This plugin does not support raise()"); } diff --git a/src/gui/kernel/qplatformwindow_lite.h b/src/gui/kernel/qplatformwindow_lite.h index 0a94fc0..5f8d259 100644 --- a/src/gui/kernel/qplatformwindow_lite.h +++ b/src/gui/kernel/qplatformwindow_lite.h @@ -71,6 +71,7 @@ public: virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); virtual Qt::WindowFlags windowFlags() const; virtual WId winId() const; + virtual void setParent(const QPlatformWindow *window); virtual void setWindowTitle(const QString &); virtual void raise(); diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index e1a8d0d..445e166 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -85,6 +85,17 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO setWinId(q->platformWindow()->winId()); + QObjectList children = q->children(); + for (int i = 0; i < children.size(); i++) { + if (children.at(i)->isWidgetType()) { + const QWidget *childWidget = qobject_cast(children.at(i)); + QPlatformWindow *childWindow = childWidget->platformWindow(); + if (childWindow) { + childWindow->setParent(platformWindow); + } + } + } + QApplicationPrivate::platformIntegration()->moveToScreen(q, screenNumber); // qDebug() << "create_sys" << q << q->internalWinId(); } @@ -92,6 +103,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO void QWidget::destroy(bool destroyWindow, bool destroySubWindows) { Q_D(QWidget); + //### jl: subwindows now enabled Q_UNUSED(destroySubWindows); if ((windowType() == Qt::Popup)) @@ -137,6 +149,13 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (parent != newparent) { QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function??? + if (q->platformWindow()) { + QWidget * parentWithWindow = newparent->platformWindow()? newparent : newparent->nativeParentWidget(); + if (parentWithWindow && parentWithWindow->platformWindow()) { + q->platformWindow()->setParent(parentWithWindow->platformWindow()); + } + } + } if (!newparent) { @@ -167,6 +186,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) qDebug() << "######## setParent_sys() change from toplevel not implemented ########"; } + if (q->isWindow() || (!newparent || newparent->isVisible()) || explicitlyHidden) q->setAttribute(Qt::WA_WState_Hidden); q->setAttribute(Qt::WA_WState_ExplicitShowHide, explicitlyHidden); @@ -340,25 +360,26 @@ void QWidgetPrivate::show_sys() QApplication::postEvent(q, new QUpdateLaterEvent(q->rect())); - if (!q->isWindow()) - return; - - if (QPlatformWindow *window = q->platformWindow()) { + QPlatformWindow *window = q->platformWindow(); + if (window) { const QRect geomRect = q->geometry(); const QRect windowRect = window->geometry(); if (windowRect != geomRect) { - q->platformWindow()->setGeometry(geomRect); + window->setGeometry(geomRect); + } + if (q->isWindow()) { if (QWindowSurface *surface = q->windowSurface()) if (windowRect.size() != geomRect.size()) { surface->resize(geomRect.size()); } - } - q->platformWindow()->setVisible(true); - } + if (window) + window->setVisible(true); - if (q->windowType() != Qt::Popup && q->windowType() != Qt::ToolTip && !(q->windowFlags() & Qt::X11BypassWindowManagerHint)) - q->activateWindow(); //### + if (q->windowType() != Qt::Popup && q->windowType() != Qt::ToolTip && !(q->windowFlags() & Qt::X11BypassWindowManagerHint)) + q->activateWindow(); //### + } + } } @@ -540,10 +561,10 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) if (q->isVisible()) { - if (q->isWindow()) { + if (q->platformWindow()) { + q->platformWindow()->setGeometry(q->frameGeometry()); const QWidgetBackingStore *bs = maybeBackingStore(); if (bs->windowSurface) { - q->platformWindow()->setGeometry(q->frameGeometry()); if (isResize) bs->windowSurface->resize(r.size()); } diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 4ddb7ca..2737db0 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -623,11 +623,6 @@ void QTestLiteWindow::handleKeyEvent(QEvent::Type type, void *ev) void QTestLiteWindow::setGeometry(const QRect &rect) { - QRect oldRect = geometry(); - if (rect == oldRect) - return; - - //if unchanged ### XMoveResizeWindow(xd->display, x_window, rect.x(), rect.y(), rect.width(), rect.height()); QPlatformWindow::setGeometry(rect); } @@ -643,6 +638,23 @@ WId QTestLiteWindow::winId() const return x_window; } +void QTestLiteWindow::setParent(const QPlatformWindow *window) +{ + /******** Cleaning up **********/ + Window parentXWindow, rootXWindow; + Window *children; + unsigned int nChildren; + if (XQueryTree(xd->display, x_window, &rootXWindow, &parentXWindow, &children, &nChildren)) { + if (parentXWindow) { + XUnmapWindow(xd->display, x_window); + XReparentWindow(xd->display, x_window, rootXWindow, 0, 0); + } + } + /******* Done cleaning up ********/ + XReparentWindow(xd->display,x_window,window->winId(),geometry().x(),geometry().y()); + XMapWindow(xd->display, x_window); +} + void QTestLiteWindow::raise() { XRaiseWindow(xd->display, x_window); diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h index 5d27f3a..d405578 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.h +++ b/src/plugins/platforms/testlite/qtestlitewindow.h @@ -120,6 +120,7 @@ public: Qt::WindowFlags windowFlags() const; void setVisible(bool visible); WId winId() const; + void setParent(const QPlatformWindow *window); void raise(); void lower(); void setWindowTitle(const QString &title); -- cgit v0.12 From 793d1ed8d3a03eefdd487facdacf66ba575e1a07 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 17 Jun 2010 14:16:06 +0200 Subject: Tslib mouse input for Lighthouse --- src/plugins/generic/tslib/main.cpp | 78 +++++++++++++++++++ src/plugins/generic/tslib/qtslib.cpp | 144 +++++++++++++++++++++++++++++++++++ src/plugins/generic/tslib/qtslib.h | 77 +++++++++++++++++++ src/plugins/generic/tslib/tslib.pro | 13 ++++ 4 files changed, 312 insertions(+) create mode 100644 src/plugins/generic/tslib/main.cpp create mode 100644 src/plugins/generic/tslib/qtslib.cpp create mode 100644 src/plugins/generic/tslib/qtslib.h create mode 100644 src/plugins/generic/tslib/tslib.pro diff --git a/src/plugins/generic/tslib/main.cpp b/src/plugins/generic/tslib/main.cpp new file mode 100644 index 0000000..4e8e50a --- /dev/null +++ b/src/plugins/generic/tslib/main.cpp @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "qtslib.h" + +QT_BEGIN_NAMESPACE + +class QTsLibPlugin : public QGenericPlugin +{ +public: + QTsLibPlugin(); + + QStringList keys() const; + QObject* create(const QString &key, const QString &specification); +}; + +QTsLibPlugin::QTsLibPlugin() + : QGenericPlugin() +{ +} + +QStringList QTsLibPlugin::keys() const +{ + return (QStringList() + << QLatin1String("Tslib") + << QLatin1String("TslibRaw")); +} + +QObject* QTsLibPlugin::create(const QString &key, + const QString &specification) +{ + if (!key.compare(QLatin1String("Tslib"), Qt::CaseInsensitive) || !key.compare(QLatin1String("TslibRaw"), Qt::CaseInsensitive)) + return new QTsLibMouseHandler(key, specification); + return 0; + } + +Q_EXPORT_PLUGIN2(qtslibplugin, QTsLibPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/generic/tslib/qtslib.cpp b/src/plugins/generic/tslib/qtslib.cpp new file mode 100644 index 0000000..12963a0 --- /dev/null +++ b/src/plugins/generic/tslib/qtslib.cpp @@ -0,0 +1,144 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include "qtslib.h" + + +#include +#include +#include +#include + +#include + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +QTsLibMouseHandler::QTsLibMouseHandler(const QString &key, + const QString &specification) + : m_notify(0), m_x(0), m_y(0), m_pressed(0), m_rawMode(false) +{ + qDebug() << "QTsLibMouseHandler" << key << specification; + setObjectName(QLatin1String("TSLib Mouse Handler")); + + QByteArray device = "/dev/input/event1"; + if (specification.startsWith("/dev/")) + device = specification.toLocal8Bit(); + + m_dev = ts_open(device.constData(), 1); + + if (ts_config(m_dev)) { + perror("Error configuring\n"); + } + + + m_rawMode = !key.compare(QLatin1String("TslibRaw"), Qt::CaseInsensitive); + + int fd = ts_fd(m_dev); + if (fd >= 0) { + m_notify = new QSocketNotifier(fd, QSocketNotifier::Read, this); + connect(m_notify, SIGNAL(activated(int)), this, SLOT(readMouseData())); + } else { + qWarning("Cannot open mouse input device '%s': %s", device.constData(), strerror(errno)); + return; + } +} + + +QTsLibMouseHandler::~QTsLibMouseHandler() +{ + if (m_dev) + ts_close(m_dev); +} + + +static bool get_sample(struct tsdev *dev, struct ts_sample *sample, bool rawMode) +{ + if (rawMode) { + return (ts_read_raw(dev, sample, 1) == 1); + } else { + int ret = ts_read(dev, sample, 1); + return ( ret == 1); + } +} + + +void QTsLibMouseHandler::readMouseData() +{ + ts_sample sample; + while (get_sample(m_dev, &sample, m_rawMode)) { + + bool pressed = sample.pressure; + int x = sample.x; + int y = sample.y; + + + if (!m_rawMode) { + //filtering: ignore movements of 2 pixels or less + int dx = x - m_x; + int dy = y - m_y; + if (dx*dx <= 4 && dy*dy <= 4 && pressed == m_pressed) + continue; + } else { + // work around missing coordinates on mouse release in raw mode + if (sample.pressure == 0 && sample.x == 0 && sample.y == 0) { + x = m_x; + y = m_y; + } + } + QPoint pos(x, y); + + //printf("handleMouseEvent %d %d %d %ld\n", m_x, m_y, pressed, sample.tv.tv_usec); + + QWindowSystemInterface::handleMouseEvent(0, pos, pos, pressed ? Qt::LeftButton : Qt::NoButton); + + m_x = x; + m_y = y; + m_pressed = pressed; + } +} + +QT_END_NAMESPACE diff --git a/src/plugins/generic/tslib/qtslib.h b/src/plugins/generic/tslib/qtslib.h new file mode 100644 index 0000000..5eab8b9 --- /dev/null +++ b/src/plugins/generic/tslib/qtslib.h @@ -0,0 +1,77 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QTSLIB_H +#define QTSLIB_H + +#include +//#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QSocketNotifier; +struct tsdev; + +class QTsLibMouseHandler : public QObject +{ + Q_OBJECT +public: + QTsLibMouseHandler(const QString &key, const QString &specification); + ~QTsLibMouseHandler(); + +private slots: + void readMouseData(); + +private: + QSocketNotifier * m_notify; + tsdev *m_dev; + int m_x, m_y; + bool m_pressed; + bool m_rawMode; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QTSLIB_H diff --git a/src/plugins/generic/tslib/tslib.pro b/src/plugins/generic/tslib/tslib.pro new file mode 100644 index 0000000..74c7fd2 --- /dev/null +++ b/src/plugins/generic/tslib/tslib.pro @@ -0,0 +1,13 @@ +TARGET = qlinuxinputplugin +include(../../qpluginbase.pri) + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/generic +target.path = $$[QT_INSTALL_PLUGINS]/generic +INSTALLS += target + +HEADERS = qtslib.h + +SOURCES = main.cpp \ + qtslib.cpp + +LIBS += -lts -- cgit v0.12 From 3566ab0c99056f20964f5586b5f7a1b92c095579 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Mon, 21 Jun 2010 13:19:27 +0200 Subject: Compile testlite plugin without OpenGL (QT_NO_OPENGL). Reviewed-by: jorgen --- src/plugins/platforms/testlite/qtestliteintegration.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index 3ce9b7c..46f2384 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -109,16 +109,19 @@ QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL) QPixmapData *QTestLiteIntegration::createPixmapData(QPixmapData::PixelType type) const { +#ifndef QT_NO_OPENGL if (mUseOpenGL) return new QGLPixmapData(type); +#endif return new QRasterPixmapData(type); } QWindowSurface *QTestLiteIntegration::createWindowSurface(QWidget *widget, WId) const { +#ifndef QT_NO_OPENGL if (mUseOpenGL) return new QGLWindowSurface(widget); - +#endif return new QTestLiteWindowSurface(mPrimaryScreen, widget); } @@ -138,7 +141,10 @@ QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, in bool QTestLiteIntegration::hasOpenGL() const { +#ifndef QT_NO_OPENGL return glXQueryExtension(xd->display, 0, 0) != 0; +#endif + return false; } QT_END_NAMESPACE -- cgit v0.12 From 220174b663a2b4db94fc82feba6939b0bef52aa2 Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Mon, 21 Jun 2010 17:38:19 +0200 Subject: document VNC options for multiple screens --- src/plugins/platforms/vnc/qvncintegration.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 2ae34dc..16fa5bb 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -92,6 +92,11 @@ static void usage() qWarning() << " defaults to" << defaultWidth() << "x" << defaultHeight(); qWarning() << " display= - set the VNC display port to ID + 5900"; qWarning() << " defaults to" << defaultDisplay(); + qWarning() << " offset=x - set the current screens offset"; + qWarning() << " vnc - start configuration of a new screen"; + qWarning() << " size and offset are inherited from the previous screen if not set"; + qWarning() << " display id is incremented from the previous screen if not set"; + qWarning() << " virtual - manage the set of screens as a virtual desktop"; } QVNCIntegration::QVNCIntegration(const QStringList& paramList) -- cgit v0.12 From dbbc370400922cf9963a9a80ac0d1396450e8ef3 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 21 Jun 2010 14:31:36 +0200 Subject: Copied VNC crash fixes from QWS Copied from commit 71b840ef81a9 and commit 57fcc060f --- src/plugins/platforms/vnc/qvncserver.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/vnc/qvncserver.cpp b/src/plugins/platforms/vnc/qvncserver.cpp index fb6eaa8..288d1bc 100644 --- a/src/plugins/platforms/vnc/qvncserver.cpp +++ b/src/plugins/platforms/vnc/qvncserver.cpp @@ -889,7 +889,7 @@ void QVNCServer::clientCutText() { QRfbClientCutText ev; - if (ev.read(client)) { + if (cutTextPending == 0 && ev.read(client)) { cutTextPending = ev.length; if (!cutTextPending) handleMsg = false; @@ -1317,7 +1317,7 @@ void QVNCServer::convertPixels(char *dst, const char *src, int count) const } if (count & 0x1) { const quint16 *src16 = reinterpret_cast(src); - dst32[count - 1] = qt_conv16ToRgb(src16[count - 1]); + *dst32 = qt_conv16ToRgb(src16[count - 1]); } return; #endif -- cgit v0.12 From 7e5ddd5ffb23fa5ebd33b747f28ee20647b9325b Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 21 Jun 2010 17:30:47 +0200 Subject: Support multiple display IDs for Lighthouse QVFb plugin --- src/plugins/platforms/qvfb/main.cpp | 2 +- src/plugins/platforms/qvfb/qvfbintegration.cpp | 35 ++++++++++++++------------ src/plugins/platforms/qvfb/qvfbintegration.h | 4 +-- 3 files changed, 22 insertions(+), 19 deletions(-) diff --git a/src/plugins/platforms/qvfb/main.cpp b/src/plugins/platforms/qvfb/main.cpp index 206ece8..997e544 100644 --- a/src/plugins/platforms/qvfb/main.cpp +++ b/src/plugins/platforms/qvfb/main.cpp @@ -63,7 +63,7 @@ QPlatformIntegration* QVFbIntegrationPlugin::create(const QString& system, const { Q_UNUSED(paramList); if (system.toLower() == "qvfb") - return new QVFbIntegration; + return new QVFbIntegration(paramList); return 0; } diff --git a/src/plugins/platforms/qvfb/qvfbintegration.cpp b/src/plugins/platforms/qvfb/qvfbintegration.cpp index 84ab9fb..a50763a 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.cpp +++ b/src/plugins/platforms/qvfb/qvfbintegration.cpp @@ -69,7 +69,7 @@ class QVFbScreenKeyboardHandler : public QObject { Q_OBJECT public: - QVFbScreenKeyboardHandler(); + QVFbScreenKeyboardHandler(int displayId); ~QVFbScreenKeyboardHandler(); private slots: @@ -83,9 +83,8 @@ private: QSocketNotifier *keyNotifier; }; -QVFbScreenKeyboardHandler::QVFbScreenKeyboardHandler() +QVFbScreenKeyboardHandler::QVFbScreenKeyboardHandler(int displayId) { - int displayId = 0; //TODO displayId const QString keyboardDev = QT_VFB_KEYBOARD_PIPE(displayId); @@ -165,7 +164,7 @@ class QVFbScreenMouseHandler : public QObject { Q_OBJECT public: - QVFbScreenMouseHandler(); + QVFbScreenMouseHandler(int displayId); ~QVFbScreenMouseHandler(); private slots: @@ -181,9 +180,8 @@ private: int oldButtonState; }; -QVFbScreenMouseHandler::QVFbScreenMouseHandler() +QVFbScreenMouseHandler::QVFbScreenMouseHandler(int displayId) { - int displayId = 0; //TODO: displayId QString mouseDev = QT_VFB_MOUSE_PIPE(displayId); mouseFD = QT_OPEN(mouseDev.toLatin1().constData(), O_RDWR | O_NDELAY); @@ -257,10 +255,11 @@ void QVFbScreenMouseHandler::readMouseData() class QVFbScreenPrivate { public: - QVFbScreenPrivate(QVFbScreen *) + QVFbScreenPrivate(int id) : shmrgn(0), hdr(0), data(0), mouseHandler(0), keyboardHandler(0) { - connect(0); //for now we only handle one screen + displayId = id; + connect(displayId); } ~QVFbScreenPrivate() { disconnect(); } @@ -281,7 +280,7 @@ private: uchar *data; QVFbScreenMouseHandler *mouseHandler; QVFbScreenKeyboardHandler *keyboardHandler; - + int displayId; QImage img; }; @@ -296,7 +295,7 @@ void QVFbScreenPrivate::setDirty(const QRect &r) bool QVFbScreenPrivate::connect(int displayId) { - + qDebug() << "QVFbScreenPrivate::connect" << displayId; key_t key = ftok(QT_VFB_MOUSE_PIPE(displayId).toLatin1(), 'b'); if (key == -1) @@ -339,8 +338,8 @@ bool QVFbScreenPrivate::connect(int displayId) qDebug("connected %dx%d %d bpp", w, h, d); - mouseHandler = new QVFbScreenMouseHandler; - keyboardHandler = new QVFbScreenKeyboardHandler; + mouseHandler = new QVFbScreenMouseHandler(displayId); + keyboardHandler = new QVFbScreenKeyboardHandler(displayId); return true; } @@ -357,9 +356,9 @@ void QVFbScreenPrivate::disconnect() } -QVFbScreen::QVFbScreen() +QVFbScreen::QVFbScreen(int id) { - d_ptr = new QVFbScreenPrivate(this); + d_ptr = new QVFbScreenPrivate(id); } @@ -409,9 +408,13 @@ QImage *QVFbScreen::screenImage() return d_ptr->screenImage(); } -QVFbIntegration::QVFbIntegration() +QVFbIntegration::QVFbIntegration(const QStringList ¶mList) { - mPrimaryScreen = new QVFbScreen(); + int displayId = 0; + if (paramList.length() > 0) + displayId = paramList.at(0).toInt(); + + mPrimaryScreen = new QVFbScreen(displayId); mScreens.append(mPrimaryScreen); } diff --git a/src/plugins/platforms/qvfb/qvfbintegration.h b/src/plugins/platforms/qvfb/qvfbintegration.h index ab44d46..e46e0da 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.h +++ b/src/plugins/platforms/qvfb/qvfbintegration.h @@ -53,7 +53,7 @@ class QVFbScreenPrivate; class QVFbScreen : public QPlatformScreen { public: - QVFbScreen(); + QVFbScreen(int id); ~QVFbScreen(); QRect geometry() const; @@ -76,7 +76,7 @@ class QVFbIntegrationPrivate; class QVFbIntegration : public QPlatformIntegration { public: - QVFbIntegration(); + QVFbIntegration(const QStringList ¶mList); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; -- cgit v0.12 From a2be3a026b1a18a14782c11fd89427e707b0d270 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Mon, 21 Jun 2010 18:34:41 +0200 Subject: Remove unused function (declared, but not implemented). Doesn't compile on the Mac without this fix. Reviewed-by: Paul --- src/plugins/platforms/vnc/qvncserver.h | 1 - 1 file changed, 1 deletion(-) diff --git a/src/plugins/platforms/vnc/qvncserver.h b/src/plugins/platforms/vnc/qvncserver.h index 837f1f4..7244bdf 100644 --- a/src/plugins/platforms/vnc/qvncserver.h +++ b/src/plugins/platforms/vnc/qvncserver.h @@ -488,7 +488,6 @@ private slots: void readClient(); void checkUpdate(); void discardClient(); - void sendInputEvents(); private: void init(uint port); -- cgit v0.12 From e7a423571981294a8e0d27f041ff9296711b15e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Wed, 23 Jun 2010 13:59:39 +0200 Subject: Remove dead code (QPlatformGLWidgetSurface). Reviewed-by: jorgen --- src/opengl/qgl.h | 9 --------- 1 file changed, 9 deletions(-) diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h index 8da48ed..f0b36f7 100644 --- a/src/opengl/qgl.h +++ b/src/opengl/qgl.h @@ -128,10 +128,6 @@ class QGLOverlayWidget; class QGLWidgetPrivate; class QGLContextPrivate; -#ifdef Q_WS_LITE -class QPlatformGLWidgetSurface; -#endif - // Namespace class: namespace QGL { @@ -539,11 +535,6 @@ public: void drawTexture(const QPointF &point, QMacCompatGLuint textureId, QMacCompatGLenum textureTarget = GL_TEXTURE_2D); #endif -#ifdef Q_WS_LITE - // Used by the platform context to get at the surface which it created for the glwidget: - QPlatformGLWidgetSurface* platformSurface(); -#endif - public Q_SLOTS: virtual void updateGL(); virtual void updateOverlayGL(); -- cgit v0.12 From c845f1ed4c35e8a626389a415a56b07d6b5b83f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bj=C3=B8rn=20Erik=20Nilsen?= Date: Wed, 23 Jun 2010 14:33:49 +0200 Subject: Compile openkode plugin. Reviewed-by: jorgen --- .../platforms/openkode/qopenkodeglintegration.cpp | 22 ---------------------- .../platforms/openkode/qopenkodeglintegration.h | 13 +------------ .../platforms/openkode/qopenkodeintegration.cpp | 6 +----- .../platforms/openkode/qopenkodeintegration.h | 2 +- 4 files changed, 3 insertions(+), 40 deletions(-) diff --git a/src/plugins/platforms/openkode/qopenkodeglintegration.cpp b/src/plugins/platforms/openkode/qopenkodeglintegration.cpp index b0d901b..7223538 100644 --- a/src/plugins/platforms/openkode/qopenkodeglintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeglintegration.cpp @@ -147,28 +147,6 @@ void qt_glformat_from_eglconfig(QGLFormat& format, const EGLConfig config) eglGetError(); } -QEGLPlatformWidgetSurface::QEGLPlatformWidgetSurface() - :QPlatformGLWidgetSurface() -{ - -} -QEGLPlatformWidgetSurface::~QEGLPlatformWidgetSurface() -{ -} - -bool QEGLPlatformWidgetSurface::create(QGLWidget* widget, QGLFormat& format) -{ - return true; -} -void QEGLPlatformWidgetSurface::setGeometry(const QRect& rect) -{ - Q_UNUSED(rect); -} -bool QEGLPlatformWidgetSurface::filterEvent(QEvent *event) -{ - return QPlatformGLWidgetSurface::filterEvent(event); -} - QEGLPlatformContext::QEGLPlatformContext() { } diff --git a/src/plugins/platforms/openkode/qopenkodeglintegration.h b/src/plugins/platforms/openkode/qopenkodeglintegration.h index c3291b8..b0b7a48 100644 --- a/src/plugins/platforms/openkode/qopenkodeglintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeglintegration.h @@ -42,7 +42,7 @@ #ifndef QOPENKODEGLINTEGRATION_H #define QOPENKODEGLINTEGRATION_H -#include +#include #include #include @@ -50,17 +50,6 @@ void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLForma // Updates "format" with the parameters of the selected configuration. void qt_glformat_from_eglconfig(QGLFormat& format, const EGLConfig config); -class QEGLPlatformWidgetSurface : public QPlatformGLWidgetSurface -{ -public: - QEGLPlatformWidgetSurface(); - virtual ~QEGLPlatformWidgetSurface(); - - bool create(QGLWidget*, QGLFormat&); - void setGeometry(const QRect&); - bool filterEvent(QEvent *); -}; - class QEGLPlatformContext : public QPlatformGLContext { public: diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index cd957af..5e461ae 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -212,7 +212,7 @@ QPlatformWindow *QOpenKODEIntegration::createPlatformWindow(QWidget *tlw, WId ) QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId wid) const { - return new QGLWindowSurface(widget); + return new QOpenKODEWindowSurface(widget, wid); } bool QOpenKODEIntegration::hasOpenGL() const @@ -223,10 +223,6 @@ QPlatformGLContext *QOpenKODEIntegration::createGLContext() { return new QEGLPlatformContext; } -QPlatformGLWidgetSurface *QOpenKODEIntegration::createGLWidgetSurface() -{ - return new QEGLPlatformWidgetSurface; -} GLuint QOpenKODEIntegration::blitterProgram() { diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index ad6db4b..f53c520 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -47,6 +47,7 @@ #include #include #include +#include # include @@ -83,7 +84,6 @@ public: bool hasOpenGL() const; QPlatformGLContext * createGLContext(); - QPlatformGLWidgetSurface * createGLWidgetSurface(); virtual QList screens() const { return mScreens; } -- cgit v0.12 From fe26a83447d50422c992bde6bd429ba3209a9222 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 21 Jun 2010 13:36:03 +0200 Subject: Removing the default graphicsystem from lighthouse Reviewed-by: paul --- src/gui/kernel/qapplication_lite.cpp | 4 -- src/gui/kernel/qwidget_lite.cpp | 4 +- src/gui/painting/painting.pri | 6 +-- src/gui/painting/qgraphicssystem_lite.cpp | 62 --------------------------- src/gui/painting/qgraphicssystem_lite_p.h | 70 ------------------------------- 5 files changed, 4 insertions(+), 142 deletions(-) delete mode 100644 src/gui/painting/qgraphicssystem_lite.cpp delete mode 100644 src/gui/painting/qgraphicssystem_lite_p.h diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index bd72663..db31abd 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -57,7 +57,6 @@ #include #include -#include #include #include #include @@ -425,7 +424,6 @@ void QApplication::alert(QWidget *, int) static void init_platform(const QString &name) { QApplicationPrivate::platform_integration = QPlatformIntegrationFactory::create(name); - QApplicationPrivate::graphics_system = new QLiteGraphicsSystem; if (!QApplicationPrivate::platform_integration) { QStringList keys = QPlatformIntegrationFactory::keys(); QString fatalMessage = @@ -444,8 +442,6 @@ static void cleanup_platform() { delete QApplicationPrivate::platform_integration; QApplicationPrivate::platform_integration = 0; - delete QApplicationPrivate::graphics_system; - QApplicationPrivate::graphics_system = 0; } static void init_plugins(const QList pluginList) diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 445e166..5380445 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -728,8 +728,8 @@ QPaintEngine *QWidget::paintEngine() const QWindowSurface *QWidgetPrivate::createDefaultWindowSurface_sys() { - qFatal("CreateDefaultWindowSurface_sys should not be used on lighthouse"); - return 0; + Q_Q(QWidget); + return QApplicationPrivate::platformIntegration()->createWindowSurface(q,0); } void QWidgetPrivate::setModal_sys() diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 37de177..46be728 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -191,11 +191,9 @@ embedded_lite { SOURCES += \ painting/qcolormap_lite.cpp \ painting/qpaintdevice_lite.cpp \ - painting/qgraphicssystemcursor_lite.cpp \ - painting/qgraphicssystem_lite.cpp + painting/qgraphicssystemcursor_lite.cpp HEADERS += \ - painting/qgraphicssystemcursor_lite.h \ - painting/qgraphicssystem_lite_p.h + painting/qgraphicssystemcursor_lite.h } symbian { diff --git a/src/gui/painting/qgraphicssystem_lite.cpp b/src/gui/painting/qgraphicssystem_lite.cpp deleted file mode 100644 index 1d24129..0000000 --- a/src/gui/painting/qgraphicssystem_lite.cpp +++ /dev/null @@ -1,62 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgraphicssystem_lite_p.h" -#include - -QT_BEGIN_NAMESPACE - -QPixmapData *QLiteGraphicsSystem::createPixmapData(QPixmapData::PixelType type) const -{ - return QApplicationPrivate::platformIntegration()->createPixmapData(type); -} - -QWindowSurface *QLiteGraphicsSystem::createWindowSurface(QWidget *widget) const -{ - return QApplicationPrivate::platformIntegration()->createWindowSurface(widget, widget->winId()); -} - -QBlittable *QLiteGraphicsSystem::createBlittable(const QSize &size) const -{ - return QApplicationPrivate::platformIntegration()->createBlittable(size); -} - -QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystem_lite_p.h b/src/gui/painting/qgraphicssystem_lite_p.h deleted file mode 100644 index e29fa83..0000000 --- a/src/gui/painting/qgraphicssystem_lite_p.h +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGRAPHICSSYSTEM_MAC_P_H -#define QGRAPHICSSYSTEM_MAC_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of other Qt classes. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "private/qgraphicssystem_p.h" - -QT_BEGIN_NAMESPACE - -class Q_GUI_EXPORT QLiteGraphicsSystem : public QGraphicsSystem -{ -public: - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QWindowSurface *createWindowSurface(QWidget *widget) const; - QBlittable *createBlittable(const QSize &size) const; -}; - -QT_END_NAMESPACE - -#endif -- cgit v0.12 From 57522c3c389c133343c31770950648c3cf271406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 23 Jun 2010 15:55:30 +0200 Subject: Disable the all native child widgets on lighthouse and make the mapping of native child widgets work with nativeParentWidget --- src/gui/kernel/qapplication_lite.cpp | 6 +++ src/gui/kernel/qwidget.cpp | 18 ++++----- src/gui/kernel/qwidget_lite.cpp | 44 +++++++++++++++------- src/opengl/qwindowsurface_gl.cpp | 2 +- src/plugins/platforms/testlite/qtestlitewindow.cpp | 17 ++------- 5 files changed, 47 insertions(+), 40 deletions(-) diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp index db31abd..9c36ef5 100644 --- a/src/gui/kernel/qapplication_lite.cpp +++ b/src/gui/kernel/qapplication_lite.cpp @@ -479,6 +479,7 @@ void qt_init(QApplicationPrivate *priv, int type) { Q_UNUSED(type); + qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); char *p; char **argv = priv->argv; int argc = priv->argc; @@ -787,6 +788,11 @@ void QApplicationPrivate::processKeyEvent(QWindowSystemInterface::KeyEvent *e) void QApplicationPrivate::processGeometryChange(QWidget *tlw, const QRect &newRect) { + if (!tlw->isWindow()) + return; //geo of native child widgets is controlled by lighthouse + //so we already have sent the events; besides this new rect + //is not mapped to parent + QRect cr(tlw->geometry()); bool isResize = cr.size() != newRect.size(); diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 1df73c2..782cc1d 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1342,6 +1342,7 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) flags |= Qt::Window; } +#ifndef Q_WS_LITE if (QWidget *parent = parentWidget()) { #ifdef Q_WS_MAC if (testAttribute(Qt::WA_NativeWindow) == false) @@ -1362,6 +1363,7 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) return; } } +#endif //Q_WS_LITE #ifdef QT3_SUPPORT if (flags & Qt::WStaticContents) @@ -2424,6 +2426,7 @@ void QWidgetPrivate::createWinId(WId winid) #endif const bool forceNativeWindow = q->testAttribute(Qt::WA_NativeWindow); if (!q->testAttribute(Qt::WA_WState_Created) || (forceNativeWindow && !q->internalWinId())) { +#ifndef Q_WS_LITE if (!q->isWindow()) { QWidget *parent = q->parentWidget(); QWidgetPrivate *pd = parent->d_func(); @@ -2451,6 +2454,10 @@ void QWidgetPrivate::createWinId(WId winid) } else { q->create(); } +#else + q->create(); +#endif //Q_WS_LITE + } } @@ -10453,12 +10460,6 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on) Q_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8), "QWidget::setAttribute(WidgetAttribute, bool)", "QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute"); -#ifdef Q_WS_LITE - //### we don't have native child widgets, and WinId isn't really there yet - if (attribute == Qt::WA_NativeWindow) - return; -#endif - #ifdef Q_WS_WIN // ### Don't use PaintOnScreen+paintEngine() to do native painting in 5.0 if (attribute == Qt::WA_PaintOnScreen && on && !inherits("QGLWidget")) { @@ -11945,11 +11946,6 @@ QWindowSurface *QWidget::windowSurface() const */ void QWidget::setPlatformWindow(QPlatformWindow *window) { -#ifndef Q_BACKINGSTORE_SUBSURFACES - if (!isTopLevel()) - return; -#endif - Q_D(QWidget); QTLWExtra *topData = d->topData(); diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp index 5380445..f92eb61 100644 --- a/src/gui/kernel/qwidget_lite.cpp +++ b/src/gui/kernel/qwidget_lite.cpp @@ -54,6 +54,23 @@ QT_BEGIN_NAMESPACE static QPlatformScreen *qt_screenForWidget(const QWidget *w); +void setParentForChildrenOfWidget(QPlatformWindow *window, const QWidget *widget) +{ + QObjectList children = widget->children(); + for (int i = 0; i < children.size(); i++) { + if (children.at(i)->isWidgetType()) { + const QWidget *childWidget = qobject_cast(children.at(i)); + if (childWidget) { // should not be nessesary + if (childWidget->platformWindow()) { + childWidget->platformWindow()->setParent(window); + } else { + setParentForChildrenOfWidget(window,childWidget); + } + } + } + } +} + void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyOldWindow) { Q_Q(QWidget); @@ -65,7 +82,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO Qt::WindowFlags flags = data.window_flags; - if (!(flags & Qt::Window) || q->windowType() == Qt::Desktop) + if ((!q->testAttribute(Qt::WA_NativeWindow) && !q->isWindow()) || q->windowType() == Qt::Desktop ) return; // we only care about real toplevels QWindowSurface *surface = q->windowSurface(); @@ -76,8 +93,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO } Q_ASSERT(platformWindow); - // QGLWidget does not need/work with a windowsurface - if (!surface) {// && !q->inherits("QGLWidget")) { + if (!surface) { surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId()); } @@ -85,14 +101,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO setWinId(q->platformWindow()->winId()); - QObjectList children = q->children(); - for (int i = 0; i < children.size(); i++) { - if (children.at(i)->isWidgetType()) { - const QWidget *childWidget = qobject_cast(children.at(i)); - QPlatformWindow *childWindow = childWidget->platformWindow(); - if (childWindow) { - childWindow->setParent(platformWindow); - } + //first check children. then find who for parent. + setParentForChildrenOfWidget(platformWindow,q); + if (QWidget *nativeParent = q->nativeParentWidget()) { + if (nativeParent->platformWindow()) { + platformWindow->setParent(nativeParent->platformWindow()); } } @@ -132,7 +145,6 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) { Q_Q(QWidget); - // QWidget *oldParent = q->parentWidget(); Qt::WindowFlags oldFlags = data.window_flags; @@ -560,9 +572,13 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) data.crect = r; if (q->isVisible()) { - if (q->platformWindow()) { - q->platformWindow()->setGeometry(q->frameGeometry()); + if (q->isWindow()) { + q->platformWindow()->setGeometry(q->frameGeometry()); + } else { + QPoint posInNativeParent = q->mapTo(q->nativeParentWidget(),QPoint()); + q->platformWindow()->setGeometry(QRect(posInNativeParent,r.size())); + } const QWidgetBackingStore *bs = maybeBackingStore(); if (bs->windowSurface) { if (isResize) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index ad7c568..98455e1 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -290,7 +290,7 @@ QPaintEngine *QGLWindowSurfaceGLPaintDevice::paintEngine() const QGLWindowSurface::QGLWindowSurface(QWidget *window) : QWindowSurface(window), d_ptr(new QGLWindowSurfacePrivate) { - Q_ASSERT(window->isTopLevel()); +// Q_ASSERT(window->isTopLevel()); d_ptr->pb = 0; d_ptr->fbo = 0; d_ptr->ctx = 0; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 2737db0..82e64e6 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -640,18 +640,8 @@ WId QTestLiteWindow::winId() const void QTestLiteWindow::setParent(const QPlatformWindow *window) { - /******** Cleaning up **********/ - Window parentXWindow, rootXWindow; - Window *children; - unsigned int nChildren; - if (XQueryTree(xd->display, x_window, &rootXWindow, &parentXWindow, &children, &nChildren)) { - if (parentXWindow) { - XUnmapWindow(xd->display, x_window); - XReparentWindow(xd->display, x_window, rootXWindow, 0, 0); - } - } - /******* Done cleaning up ********/ - XReparentWindow(xd->display,x_window,window->winId(),geometry().x(),geometry().y()); + QPoint point = widget()->mapTo(widget()->nativeParentWidget(),QPoint()); + XReparentWindow(xd->display,x_window,window->winId(),point.x(),point.y()); XMapWindow(xd->display, x_window); } @@ -701,7 +691,6 @@ void QTestLiteWindow::paintEvent() void QTestLiteWindow::resizeEvent(XConfigureEvent *e) { - if ((e->width != width || e->height != height) && e->x == 0 && e->y == 0) { //qDebug() << "resize with bogus pos" << e->x << e->y << e->width << e->height << "window"<< hex << window; } else { @@ -844,7 +833,7 @@ static inline bool isTransient(const QWidget *w) Qt::WindowFlags QTestLiteWindow::setWindowFlags(Qt::WindowFlags flags) { - Q_ASSERT(flags & Qt::Window); +// Q_ASSERT(flags & Qt::Window); window_flags = flags; if (mwm_hint_atom == XNone) { -- cgit v0.12 From 415c1ee359249e3eb44ff56e6078076d6024afeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 24 Jun 2010 09:32:19 +0200 Subject: Say hello to Q_WS_QPA! Rename Q_WS_LITE -> Q_WS_QPA --- configure | 2 +- src/corelib/global/qglobal.cpp | 10 +++--- src/corelib/global/qglobal.h | 6 ++-- src/corelib/global/qnamespace.h | 2 +- src/corelib/io/qsettings.cpp | 2 +- src/corelib/io/qsettings_p.h | 2 +- src/gui/embedded/qkbd_qws.cpp | 4 +-- src/gui/image/qnativeimage.cpp | 2 +- src/gui/image/qpixmap.cpp | 2 +- src/gui/image/qpixmap_blitter.cpp | 2 +- src/gui/image/qpixmapdatafactory.cpp | 4 +-- src/gui/kernel/qapplication.cpp | 18 +++++----- src/gui/kernel/qapplication_p.h | 10 +++--- src/gui/kernel/qcursor.h | 2 +- src/gui/kernel/qcursor_p.h | 2 +- src/gui/kernel/qdnd_p.h | 2 +- src/gui/kernel/qguiplatformplugin.cpp | 2 +- src/gui/kernel/qwidget.cpp | 30 ++++++++-------- src/gui/kernel/qwidget.h | 2 +- src/gui/kernel/qwidget_p.h | 6 ++-- src/gui/kernel/qwindowdefs.h | 4 +-- src/gui/painting/qbackingstore.cpp | 10 +++--- src/gui/painting/qgraphicssystem.cpp | 4 +-- src/gui/painting/qpaintdevice.cpp | 2 +- src/gui/painting/qpaintengine.h | 2 +- src/gui/painting/qpaintengine_raster.cpp | 6 ++-- src/gui/painting/qregion.cpp | 4 +-- src/gui/painting/qregion.h | 6 ++-- src/gui/painting/qwindowsurface.cpp | 10 +++--- src/gui/painting/qwindowsurface_p.h | 2 +- src/gui/text/qfont.cpp | 6 ++-- src/gui/text/qfont.h | 4 +-- src/gui/text/qfontdatabase.cpp | 40 +++++++++++----------- src/gui/text/qfontdatabase.h | 2 +- src/gui/text/qfontengine.cpp | 4 +-- src/gui/text/qfontengine_ft_p.h | 2 +- src/gui/text/qfontengine_p.h | 2 +- src/gui/util/qdesktopservices.cpp | 2 +- src/opengl/qgl.cpp | 8 ++--- src/opengl/qgl_p.h | 6 ++-- src/opengl/qglpixelbuffer_p.h | 8 ++--- src/opengl/qwindowsurface_gl.cpp | 6 ++-- src/opengl/qwindowsurface_gl_p.h | 2 +- .../trace/qgraphicssystem_trace.cpp | 2 +- tests/auto/qaction/tst_qaction.cpp | 2 +- 45 files changed, 129 insertions(+), 129 deletions(-) diff --git a/configure b/configure index 41ccb34..6143ac1 100755 --- a/configure +++ b/configure @@ -7691,7 +7691,7 @@ fi # QWS if [ "$PLATFORM_EMBLITE" = "yes" ]; then # Add LITE to config.h - QCONFIG_FLAGS="$QCONFIG_FLAGS Q_WS_LITE QT_NO_QWS_QPF QT_NO_QWS_QPF2" + QCONFIG_FLAGS="$QCONFIG_FLAGS Q_WS_QPA QT_NO_QWS_QPF QT_NO_QWS_QPF2" fi if [ "${CFG_USE_FLOATMATH}" = "yes" ]; then diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index f4f9702..bf78c03 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -1231,7 +1231,7 @@ bool qSharedBuild() Defined on Mac OS X. - \sa Q_WS_WIN, Q_WS_X11, Q_WS_QWS, Q_WS_LITE, Q_WS_S60 + \sa Q_WS_WIN, Q_WS_X11, Q_WS_QWS, Q_WS_QPA, Q_WS_S60 */ /*! @@ -1240,7 +1240,7 @@ bool qSharedBuild() Defined on Windows. - \sa Q_WS_MAC, Q_WS_X11, Q_WS_QWS, Q_WS_LITE, Q_WS_S60 + \sa Q_WS_MAC, Q_WS_X11, Q_WS_QWS, Q_WS_QPA, Q_WS_S60 */ /*! @@ -1249,7 +1249,7 @@ bool qSharedBuild() Defined on X11. - \sa Q_WS_MAC, Q_WS_WIN, Q_WS_QWS, Q_WS_LITE, Q_WS_S60 + \sa Q_WS_MAC, Q_WS_WIN, Q_WS_QWS, Q_WS_QPA, Q_WS_S60 */ /*! @@ -1258,11 +1258,11 @@ bool qSharedBuild() Defined on Qt for Embedded Linux. - \sa Q_WS_MAC, Q_WS_WIN, Q_WS_X11, Q_WS_LITE, Q_WS_S60 + \sa Q_WS_MAC, Q_WS_WIN, Q_WS_X11, Q_WS_QPA, Q_WS_S60 */ /*! - \macro Q_WS_LITE + \macro Q_WS_QPA \relates Defined on Qt for Embedded Linux, Lite version. diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 815b7da..00ba5c3 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -807,7 +807,7 @@ namespace QT_NAMESPACE {} # define Q_WS_PM # error "Qt does not work with OS/2 Presentation Manager or Workplace Shell" #elif defined(Q_OS_UNIX) -# if defined(Q_OS_MAC) && !defined(__USE_WS_X11__) && !defined(Q_WS_QWS) && !defined(Q_WS_LITE) +# if defined(Q_OS_MAC) && !defined(__USE_WS_X11__) && !defined(Q_WS_QWS) && !defined(Q_WS_QPA) # define Q_WS_MAC # define Q_WS_MACX # if defined(Q_OS_MAC64) @@ -819,7 +819,7 @@ namespace QT_NAMESPACE {} # if !defined(QT_NO_S60) # define Q_WS_S60 # endif -# elif !defined(Q_WS_QWS) && !defined(Q_WS_LITE) +# elif !defined(Q_WS_QWS) && !defined(Q_WS_QPA) # define Q_WS_X11 # endif #endif @@ -1078,7 +1078,7 @@ redefine to built-in booleans to make autotests work properly */ typedef int QNoImplicitBoolCast; -#if defined(QT_ARCH_ARM) || defined(QT_ARCH_ARMV6) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_MIPS) && (defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_WINCE))) || defined(QT_ARCH_SH) || defined(QT_ARCH_SH4A) +#if defined(QT_ARCH_ARM) || defined(QT_ARCH_ARMV6) || defined(QT_ARCH_AVR32) || (defined(QT_ARCH_MIPS) && (defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_WINCE))) || defined(QT_ARCH_SH) || defined(QT_ARCH_SH4A) #define QT_NO_FPU #endif diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h index 3a8b99f..6edadc5 100644 --- a/src/corelib/global/qnamespace.h +++ b/src/corelib/global/qnamespace.h @@ -1654,7 +1654,7 @@ public: typedef void *HANDLE; #elif defined(Q_WS_X11) typedef unsigned long HANDLE; -#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) typedef void * HANDLE; #elif defined(Q_OS_SYMBIAN) typedef unsigned long int HANDLE; // equivalent to TUint32 diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 703a9d2..998c7cc 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -1126,7 +1126,7 @@ static void initDefaultPaths(QMutexLocker *locker) if (env == 0) { userPath = homePath; userPath += QLatin1Char('/'); -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) userPath += QLatin1String("Settings"); #else userPath += QLatin1String(".config"); diff --git a/src/corelib/io/qsettings_p.h b/src/corelib/io/qsettings_p.h index 569a61c..5ff4d96 100644 --- a/src/corelib/io/qsettings_p.h +++ b/src/corelib/io/qsettings_p.h @@ -70,7 +70,7 @@ QT_BEGIN_NAMESPACE -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) #define QT_QSETTINGS_ALWAYS_CASE_SENSITIVE_AND_FORGET_ORIGINAL_KEY_ORDER #endif diff --git a/src/gui/embedded/qkbd_qws.cpp b/src/gui/embedded/qkbd_qws.cpp index c4dd6bd..a325b28 100644 --- a/src/gui/embedded/qkbd_qws.cpp +++ b/src/gui/embedded/qkbd_qws.cpp @@ -53,7 +53,7 @@ #include "qscreen_qws.h" #endif -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA #include #include #endif @@ -362,7 +362,7 @@ void QWSKeyboardHandler::processKeyEvent(int unicode, int keycode, Qt::KeyboardM { #if defined(Q_WS_QWS) qwsServer->processKeyEvent(unicode, keycode, modifiers, isPress, autoRepeat); -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) QEvent::Type type = isPress ? QEvent::KeyPress : QEvent::KeyRelease; QString str; if (unicode != 0xffff) diff --git a/src/gui/image/qnativeimage.cpp b/src/gui/image/qnativeimage.cpp index d4cbdc6..84c9911 100644 --- a/src/gui/image/qnativeimage.cpp +++ b/src/gui/image/qnativeimage.cpp @@ -287,7 +287,7 @@ QNativeImage::~QNativeImage() QImage::Format QNativeImage::systemFormat() { -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA return QApplicationPrivate::platformIntegration()->screens().at(0)->format(); #else return QImage::Format_RGB32; diff --git a/src/gui/image/qpixmap.cpp b/src/gui/image/qpixmap.cpp index ec640fc..1ae3bef 100644 --- a/src/gui/image/qpixmap.cpp +++ b/src/gui/image/qpixmap.cpp @@ -1934,7 +1934,7 @@ int QPixmap::defaultDepth() return 32; #elif defined(Q_OS_SYMBIAN) return S60->screenDepth; -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) return 32; //LITE: use graphicssystem (we should do that in general) #endif } diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 38a2f81..660f4d2 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -56,7 +56,7 @@ void QBlittablePixmapData::resize(int width, int height) m_blittable = 0; delete m_engine; m_engine = 0; -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA d = QApplicationPrivate::platformIntegration()->screens().at(0)->depth(); #endif w = width; diff --git a/src/gui/image/qpixmapdatafactory.cpp b/src/gui/image/qpixmapdatafactory.cpp index ac79c75..b63d046 100644 --- a/src/gui/image/qpixmapdatafactory.cpp +++ b/src/gui/image/qpixmapdatafactory.cpp @@ -53,7 +53,7 @@ #ifdef Q_WS_MAC # include #endif -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA # include #endif #ifdef Q_WS_S60 @@ -85,7 +85,7 @@ QPixmapData* QSimplePixmapDataFactory::create(QPixmapData::PixelType type) return new QRasterPixmapData(type); #elif defined(Q_WS_MAC) return new QMacPixmapData(type); -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) return new QRasterPixmapData(type); #elif defined(Q_WS_S60) return new QS60PixmapData(type); diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 8b53d35..b3e6fcd 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -447,7 +447,7 @@ QPalette *QApplicationPrivate::sys_pal = 0; // default system palette QPalette *QApplicationPrivate::set_pal = 0; // default palette set by programmer QGraphicsSystem *QApplicationPrivate::graphics_system = 0; // default graphics system -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) QPlatformIntegration *QApplicationPrivate::platform_integration = 0; #endif QString QApplicationPrivate::graphics_system_name; // graphics system id - for delayed initialization @@ -508,7 +508,7 @@ inline bool QApplicationPrivate::isAlien(QWidget *widget) { if (!widget) return false; -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) return !widget->isWindow() # ifdef Q_BACKINGSTORE_SUBSURFACES && !(widget->d_func()->maybeTopData() && widget->d_func()->maybeTopData()->windowSurface) @@ -923,7 +923,7 @@ void QApplicationPrivate::initialize() QWidgetPrivate::mapper = new QWidgetMapper; QWidgetPrivate::allWidgets = new QWidgetSet; -#if !defined(Q_WS_X11) && !defined(Q_WS_QWS) && !defined(Q_WS_LITE) +#if !defined(Q_WS_X11) && !defined(Q_WS_QWS) && !defined(Q_WS_QPA) // initialize the graphics system - on X11 this is initialized inside // qt_init() in qapplication_x11.cpp because of several reasons. // On QWS, the graphics system is set by the QScreen plugin. @@ -1590,7 +1590,7 @@ QStyle* QApplication::setStyle(const QString& style) void QApplication::setGraphicsSystem(const QString &system) { -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA Q_UNUSED(system); #else # ifdef QT_GRAPHICSSYSTEM_RUNTIME @@ -2735,7 +2735,7 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { // Update cursor for alien/graphics widgets. const bool enterOnAlien = (enter && (isAlien(enter) || enter->testAttribute(Qt::WA_DontShowOnScreen))); -#if defined(Q_WS_X11) || defined(Q_WS_LITE) +#if defined(Q_WS_X11) || defined(Q_WS_QPA) //Whenever we leave an alien widget on X11, we need to reset its nativeParentWidget()'s cursor. // This is not required on Windows as the cursor is reset on every single mouse move. QWidget *parentOfLeavingCursor = 0; @@ -2761,7 +2761,7 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { { #if defined(Q_WS_X11) qt_x11_enforce_cursor(parentOfLeavingCursor,true); -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) if (enter == QApplication::desktop()) { qt_lite_set_cursor(enter, true); } else { @@ -2791,7 +2791,7 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { qt_x11_enforce_cursor(cursorWidget, true); #elif defined(Q_WS_S60) qt_symbian_set_cursor(cursorWidget, true); -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) qt_lite_set_cursor(cursorWidget, true); #endif } @@ -3097,7 +3097,7 @@ bool QApplicationPrivate::sendMouseEvent(QWidget *receiver, QMouseEvent *event, return result; } -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_LITE) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA) /* This function should only be called when the widget changes visibility, i.e. when the \a widget is shown, hidden or deleted. This function does nothing @@ -3109,7 +3109,7 @@ extern QWidget *qt_button_down; void QApplicationPrivate::sendSyntheticEnterLeave(QWidget *widget) { #ifndef QT_NO_CURSOR -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) if (!widget || widget->isWindow()) return; #else diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 8d36519..ecfac78 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -76,7 +76,7 @@ #ifdef Q_OS_SYMBIAN #include #endif -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA #include #include "QtGui/qplatformintegration_lite.h" #endif @@ -324,7 +324,7 @@ public: { return graphics_system; } #endif -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) static QPlatformIntegration *platformIntegration() { return platform_integration; } @@ -489,7 +489,7 @@ public: static bool qt_mac_apply_settings(); #endif -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA static void processMouseEvent(QWindowSystemInterface::MouseEvent *e); static void processKeyEvent(QWindowSystemInterface::KeyEvent *e); static void processWheelEvent(QWindowSystemInterface::WheelEvent *e); @@ -552,7 +552,7 @@ public: int symbianResourceChange(const QSymbianEvent *symbianEvent); #endif -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_LITE) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA) void sendSyntheticEnterLeave(QWidget *widget); #endif @@ -660,7 +660,7 @@ Q_GUI_EXPORT void qt_translateRawTouchEvent(QWidget *window, extern void qt_x11_enforce_cursor(QWidget *); #elif defined(Q_OS_SYMBIAN) extern void qt_symbian_set_cursor(QWidget *, bool); -#elif defined (Q_WS_LITE) +#elif defined (Q_WS_QPA) extern void qt_lite_set_cursor(QWidget *, bool); #endif diff --git a/src/gui/kernel/qcursor.h b/src/gui/kernel/qcursor.h index cb9e8a6..b414a78 100644 --- a/src/gui/kernel/qcursor.h +++ b/src/gui/kernel/qcursor.h @@ -126,7 +126,7 @@ public: static int x11Screen(); #elif defined(Q_WS_MAC) Qt::HANDLE handle() const; -#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) int handle() const; #elif defined(Q_OS_SYMBIAN) Qt::HANDLE handle() const; diff --git a/src/gui/kernel/qcursor_p.h b/src/gui/kernel/qcursor_p.h index dadb83c..bfd6eac 100644 --- a/src/gui/kernel/qcursor_p.h +++ b/src/gui/kernel/qcursor_p.h @@ -91,7 +91,7 @@ public: short hx, hy; #if defined (Q_WS_MAC) int mId; -#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) int id; #endif #if defined (Q_WS_WIN) diff --git a/src/gui/kernel/qdnd_p.h b/src/gui/kernel/qdnd_p.h index 3989979..598a9de 100644 --- a/src/gui/kernel/qdnd_p.h +++ b/src/gui/kernel/qdnd_p.h @@ -261,7 +261,7 @@ public: #endif private: -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) Qt::DropAction currentActionForOverrideCursor; #endif #ifdef Q_OS_SYMBIAN diff --git a/src/gui/kernel/qguiplatformplugin.cpp b/src/gui/kernel/qguiplatformplugin.cpp index 16a2a2b..98b9c4a 100644 --- a/src/gui/kernel/qguiplatformplugin.cpp +++ b/src/gui/kernel/qguiplatformplugin.cpp @@ -152,7 +152,7 @@ QString QGuiPlatformPlugin::styleName() return QLatin1String("Windows"); // default style for Symbian without S60 #elif defined(Q_WS_X11) && defined(Q_OS_IRIX) return QLatin1String("SGI"); // default style for X11 on IRIX -#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) return QLatin1String("Plastique"); // default style for X11 and small devices #elif defined(Q_WS_MAC) return QLatin1String("Macintosh"); // default style for all Mac's diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 782cc1d..57e3a31 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -75,7 +75,7 @@ # include "qpaintengine.h" // for PorterDuff # include "private/qwindowsurface_qws_p.h" #endif -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) #include "qplatformwindow_lite.h" #endif #include "qpainter.h" @@ -259,7 +259,7 @@ QWidgetPrivate::QWidgetPrivate(int version) , hasAlienChildren(0) , window_event(0) , qd_hd(0) -#elif defined (Q_WS_LITE) +#elif defined (Q_WS_QPA) , screenNumber(0) #endif { @@ -1214,7 +1214,7 @@ void QWidgetPrivate::init(QWidget *parentWidget, Qt::WindowFlags f) // programmer specified desktop widget xinfo = desktopWidget->d_func()->xinfo; } -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) if (desktopWidget) { int screen = desktopWidget->d_func()->screenNumber; QPlatformIntegration *platform = QApplicationPrivate::platformIntegration(); @@ -1342,7 +1342,7 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) flags |= Qt::Window; } -#ifndef Q_WS_LITE +#ifndef Q_WS_QPA if (QWidget *parent = parentWidget()) { #ifdef Q_WS_MAC if (testAttribute(Qt::WA_NativeWindow) == false) @@ -1363,7 +1363,7 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow) return; } } -#endif //Q_WS_LITE +#endif //Q_WS_QPA #ifdef QT3_SUPPORT if (flags & Qt::WStaticContents) @@ -1526,7 +1526,7 @@ QWidget::~QWidget() else if (!internalWinId() && isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); } -#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) else if (isVisible()) { qApp->d_func()->sendSyntheticEnterLeave(this); } @@ -1660,7 +1660,7 @@ void QWidgetPrivate::createTLExtra() static int count = 0; qDebug() << "tlextra" << ++count; #endif -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) x->platformWindow = 0; #endif } @@ -2426,7 +2426,7 @@ void QWidgetPrivate::createWinId(WId winid) #endif const bool forceNativeWindow = q->testAttribute(Qt::WA_NativeWindow); if (!q->testAttribute(Qt::WA_WState_Created) || (forceNativeWindow && !q->internalWinId())) { -#ifndef Q_WS_LITE +#ifndef Q_WS_QPA if (!q->isWindow()) { QWidget *parent = q->parentWidget(); QWidgetPrivate *pd = parent->d_func(); @@ -2456,7 +2456,7 @@ void QWidgetPrivate::createWinId(WId winid) } #else q->create(); -#endif //Q_WS_LITE +#endif //Q_WS_QPA } } @@ -5410,7 +5410,7 @@ void QWidgetPrivate::drawWidget(QPaintDevice *pdev, const QRegion &rgn, const QP //actually send the paint event QPaintEvent e(toBePainted); QCoreApplication::sendSpontaneousEvent(q, &e); -#if !defined(Q_WS_MAC) && !defined(Q_WS_QWS) && !defined(Q_WS_LITE) +#if !defined(Q_WS_MAC) && !defined(Q_WS_QWS) && !defined(Q_WS_QPA) if (backingStore && !onScreen && !asRoot && (q->internalWinId() || !q->nativeParentWidget()->isWindow())) backingStore->markDirtyOnScreen(toBePainted, q, offset); #endif @@ -7448,7 +7448,7 @@ void QWidgetPrivate::hide_helper() // next bit tries to move the focus if the focus widget is now // hidden. if (wasVisible) { -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_LITE) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA) qApp->d_func()->sendSyntheticEnterLeave(q); #endif @@ -7580,7 +7580,7 @@ void QWidget::setVisible(bool visible) d->show_helper(); -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_LITE) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA) qApp->d_func()->sendSyntheticEnterLeave(this); #endif } @@ -7712,7 +7712,7 @@ void QWidgetPrivate::hideChildren(bool spontaneous) widget->d_func()->hide_sys(); } } -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_LITE) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined (Q_WS_QWS) || defined(Q_WS_MAC) || defined(Q_WS_QPA) qApp->d_func()->sendSyntheticEnterLeave(widget); #endif #ifndef QT_NO_ACCESSIBILITY @@ -11937,7 +11937,7 @@ QWindowSurface *QWidget::windowSurface() const return bs ? bs->windowSurface : 0; } -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) /*! \preliminary @@ -11970,7 +11970,7 @@ QPlatformWindow *QWidget::platformWindow() const return 0; } -#endif //defined(Q_WS_LITE) +#endif //defined(Q_WS_QPA) void QWidgetPrivate::getLayoutItemMargins(int *left, int *top, int *right, int *bottom) const { diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index 740f4ff..8e08ce5 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -628,7 +628,7 @@ public: void setWindowSurface(QWindowSurface *surface); QWindowSurface *windowSurface() const; -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) void setPlatformWindow(QPlatformWindow *window); QPlatformWindow *platformWindow() const; friend class QDesktopScreenWidget; diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 91cd1c5..5274c3b 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -102,7 +102,7 @@ class QWSManager; #if defined(Q_WS_MAC) class QCoreGraphicsPaintEnginePrivate; #endif -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) class QPlatformWindow; #endif class QPaintEngine; @@ -227,7 +227,7 @@ struct QTLWExtra { #endif #elif defined(Q_OS_SYMBIAN) uint inExpose : 1; // Prevents drawing recursion -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) QPlatformWindow *platformWindow; #endif }; @@ -870,7 +870,7 @@ public: void updateCursor() const; #endif QScreen* getScreen() const; -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) void setMaxWindowState_helper(); void setFullScreenSize_helper(); diff --git a/src/gui/kernel/qwindowdefs.h b/src/gui/kernel/qwindowdefs.h index ea3281f..1dc7203 100644 --- a/src/gui/kernel/qwindowdefs.h +++ b/src/gui/kernel/qwindowdefs.h @@ -131,11 +131,11 @@ QT_END_HEADER #endif // Q_WS_QWS -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) typedef unsigned long WId; -#endif // Q_WS_LITE +#endif // Q_WS_QPA #if defined(Q_OS_SYMBIAN) class CCoeControl; diff --git a/src/gui/painting/qbackingstore.cpp b/src/gui/painting/qbackingstore.cpp index 590b9a8..a73d63f 100644 --- a/src/gui/painting/qbackingstore.cpp +++ b/src/gui/painting/qbackingstore.cpp @@ -286,7 +286,7 @@ bool QWidgetBackingStore::bltRect(const QRect &rect, int dx, int dy, QWidget *wi void QWidgetBackingStore::releaseBuffer() { if (windowSurface) -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) windowSurface->resize(QSize()); #else windowSurface->setGeometry(QRect()); @@ -420,7 +420,7 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const { const bool widgetDirty = widget && widget != tlw; const QRect tlwRect(topLevelRect()); -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) const QRect surfaceGeometry(tlwRect.topLeft(), windowSurface->size()); #else const QRect surfaceGeometry(windowSurface->geometry()); @@ -475,7 +475,7 @@ QRegion QWidgetBackingStore::dirtyRegion(QWidget *widget) const QRegion QWidgetBackingStore::staticContents(QWidget *parent, const QRect &withinClipRect) const { if (!parent && tlw->testAttribute(Qt::WA_StaticContents)) { -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) const QSize surfaceGeometry(windowSurface->size()); #else const QRect surfaceGeometry(windowSurface->geometry()); @@ -1183,7 +1183,7 @@ void QWidgetBackingStore::sync() const bool inTopLevelResize = tlwExtra->inTopLevelResize; const QRect tlwRect(topLevelRect()); -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA const QRect surfaceGeometry(tlwRect.topLeft(), windowSurface->size()); #else const QRect surfaceGeometry(windowSurface->geometry()); @@ -1207,7 +1207,7 @@ void QWidgetBackingStore::sync() } } -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA if (inTopLevelResize || surfaceGeometry.size() != tlwRect.size()) windowSurface->resize(tlwRect.size()); #else diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp index c9866ae..9f00e2a 100644 --- a/src/gui/painting/qgraphicssystem.cpp +++ b/src/gui/painting/qgraphicssystem.cpp @@ -50,7 +50,7 @@ #ifdef Q_WS_MAC # include #endif -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA # include #endif #ifdef Q_WS_S60 @@ -77,7 +77,7 @@ QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType typ return new QRasterPixmapData(type); #elif defined(Q_WS_MAC) return new QMacPixmapData(type); -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) return QApplicationPrivate::platformIntegration()->createPixmapData(type); #elif defined(Q_WS_S60) return new QS60PixmapData(type); diff --git a/src/gui/painting/qpaintdevice.cpp b/src/gui/painting/qpaintdevice.cpp index 0042a47..cde7bfa 100644 --- a/src/gui/painting/qpaintdevice.cpp +++ b/src/gui/painting/qpaintdevice.cpp @@ -59,7 +59,7 @@ QPaintDevice::~QPaintDevice() } -#ifndef Q_WS_LITE +#ifndef Q_WS_QPA int QPaintDevice::metric(PaintDeviceMetric) const { qWarning("QPaintDevice::metrics: Device has no metric information"); diff --git a/src/gui/painting/qpaintengine.h b/src/gui/painting/qpaintengine.h index 349ebeb..ddb6195 100644 --- a/src/gui/painting/qpaintengine.h +++ b/src/gui/painting/qpaintengine.h @@ -271,7 +271,7 @@ private: friend class QtopiaPrintEnginePrivate; friend class QProxyFontEngine; #endif -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA friend class QProxyFontEngine; #endif friend class QPainter; diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 4fad0c6..97db24b 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -95,7 +95,7 @@ # include #elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) # include -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) # include #endif @@ -3410,9 +3410,9 @@ void QRasterPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte } #endif // Q_WS_QWS -#if (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) || defined(Q_WS_LITE)) && !defined(QT_NO_FREETYPE) +#if (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) || defined(Q_WS_QPA)) && !defined(QT_NO_FREETYPE) -#if (defined(Q_WS_QWS) || defined(Q_WS_LITE)) && !defined(QT_NO_QWS_QPF2) +#if (defined(Q_WS_QWS) || defined(Q_WS_QPA)) && !defined(QT_NO_QWS_QPF2) if (fontEngine->type() == QFontEngine::QPF2) { QFontEngine *renderingEngine = static_cast(fontEngine)->renderingEngine(); if (renderingEngine) diff --git a/src/gui/painting/qregion.cpp b/src/gui/painting/qregion.cpp index c667f84..c57db82 100644 --- a/src/gui/painting/qregion.cpp +++ b/src/gui/painting/qregion.cpp @@ -1620,7 +1620,7 @@ QT_END_INCLUDE_NAMESPACE QT_BEGIN_INCLUDE_NAMESPACE # include "qregion_win.cpp" QT_END_INCLUDE_NAMESPACE -#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) static QRegionPrivate qrp; QRegion::QRegionData QRegion::shared_empty = {Q_BASIC_ATOMIC_INITIALIZER(1), &qrp}; #endif @@ -4231,7 +4231,7 @@ QRect QRegion::boundingRect() const Returns true if \a rect is guaranteed to be fully contained in \a region. A false return value does not guarantee the opposite. */ -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) Q_GUI_EXPORT #endif bool qt_region_strictContains(const QRegion ®ion, const QRect &rect) diff --git a/src/gui/painting/qregion.h b/src/gui/painting/qregion.h index 66a3e7f..463d9ef 100644 --- a/src/gui/painting/qregion.h +++ b/src/gui/painting/qregion.h @@ -59,7 +59,7 @@ QT_MODULE(Gui) template class QVector; class QVariant; -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) struct QRegionPrivate; #endif @@ -163,7 +163,7 @@ public: #endif HIMutableShapeRef toHIMutableShape() const; static QRegion fromHIShapeRef(HIShapeRef shape); -#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) inline void *handle() const { return d->qt_rgn; } #endif #endif @@ -203,7 +203,7 @@ private: #elif defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA) mutable RgnHandle unused; // Here for binary compatability reasons. ### Qt 5 remove. #endif -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) QRegionPrivate *qt_rgn; #endif }; diff --git a/src/gui/painting/qwindowsurface.cpp b/src/gui/painting/qwindowsurface.cpp index c42ead0..845cf6d 100644 --- a/src/gui/painting/qwindowsurface.cpp +++ b/src/gui/painting/qwindowsurface.cpp @@ -58,11 +58,11 @@ public: } QWidget *window; -#if !defined(Q_WS_LITE) +#if !defined(Q_WS_QPA) QRect geometry; #else QSize size; -#endif //Q_WS_LITE +#endif //Q_WS_QPA QRegion staticContents; QList bufferImages; uint staticContentsSupport : 1; @@ -157,7 +157,7 @@ void QWindowSurface::endPaint(const QRegion &) d_ptr->bufferImages.clear(); } -#if !defined(Q_WS_LITE) +#if !defined(Q_WS_QPA) /*! Sets the currently allocated area to be the given \a rect. @@ -188,7 +188,7 @@ QSize QWindowSurface::size() const { return d_ptr->size; } -#endif //Q_WS_LITE +#endif //Q_WS_QPA /*! Scrolls the given \a area \a dx pixels to the right and \a dy @@ -345,7 +345,7 @@ void QWindowSurface::setPartialUpdateSupport(bool enable) d_ptr->partialUpdateSupport = enable; } -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA #define Q_EXPORT_SCROLLRECT Q_GUI_EXPORT #else #define Q_EXPORT_SCROLLRECT diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h index 512cb97..da02f5a 100644 --- a/src/gui/painting/qwindowsurface_p.h +++ b/src/gui/painting/qwindowsurface_p.h @@ -80,7 +80,7 @@ public: // can be larger than just the offset from the top-level widget as there may also be window // decorations which are painted into the window surface. virtual void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) = 0; -#if !defined(Q_WS_LITE) +#if !defined(Q_WS_QPA) virtual void setGeometry(const QRect &rect); QRect geometry() const; #else diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index bfd4ee9..3861196 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -75,7 +75,7 @@ #ifdef Q_OS_SYMBIAN #include #endif -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA #include #include #endif @@ -176,7 +176,7 @@ Q_GUI_EXPORT int qt_defaultDpiX() if (!subScreens.isEmpty()) screen = subScreens.at(0); dpi = qRound(screen->width() / (screen->physicalWidth() / qreal(25.4))); -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); if (pi) { QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0); @@ -215,7 +215,7 @@ Q_GUI_EXPORT int qt_defaultDpiY() if (!subScreens.isEmpty()) screen = subScreens.at(0); dpi = qRound(screen->height() / (screen->physicalHeight() / qreal(25.4))); -#elif defined(Q_WS_LITE) +#elif defined(Q_WS_QPA) QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); if (pi) { QPlatformScreen *screen = QApplicationPrivate::platformIntegration()->screens().at(0); diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index 0189281..583b4ff 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -46,7 +46,7 @@ #include #include -#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) typedef struct FT_FaceRec_* FT_Face; #endif @@ -233,7 +233,7 @@ public: #ifdef Q_WS_MAC quint32 macFontID() const; #endif -#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) FT_Face freetypeFace() const; #endif diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 853eb05..748b271 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -56,7 +56,7 @@ #include #include -#if (defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) +#if (defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) # include # include FT_TRUETYPE_TABLES_H #endif @@ -152,10 +152,10 @@ struct QtFontSize unsigned short count : 16; #endif // Q_WS_X11 -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) QByteArray fileName; int fileIndex; -#endif // defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#endif // defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) unsigned short pixelSize : 16; }; @@ -231,14 +231,14 @@ struct QtFontStyle delete [] weightName; delete [] setwidthName; #endif -#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) while (count) { // bitfield count-- in while condition does not work correctly in mwccsym2 count--; #ifdef Q_WS_X11 free(pixelSizes[count].encodings); #endif -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) pixelSizes[count].fileName.~QByteArray(); #endif } @@ -256,7 +256,7 @@ struct QtFontStyle const char *weightName; const char *setwidthName; #endif // Q_WS_X11 -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) bool antialiased; #endif @@ -302,7 +302,7 @@ QtFontSize *QtFontStyle::pixelSize(unsigned short size, bool add) pixelSizes[count].count = 0; pixelSizes[count].encodings = 0; #endif -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) new (&pixelSizes[count].fileName) QByteArray; pixelSizes[count].fileIndex = 0; #endif @@ -388,7 +388,7 @@ struct QtFontFamily fixedPitchComputed(false), #endif name(n), count(0), foundries(0) -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) , bogusWritingSystems(false) #endif { @@ -428,7 +428,7 @@ struct QtFontFamily int count; QtFontFoundry **foundries; -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) bool bogusWritingSystems; QStringList fallbackFamilies; #endif @@ -475,7 +475,7 @@ QtFontFoundry *QtFontFamily::foundry(const QString &f, bool create) // ### copied to tools/makeqpf/qpf2.cpp -#if ((defined(Q_WS_QWS) || defined(Q_WS_LITE)) && !defined(QT_NO_FREETYPE)) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || (defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA)) +#if ((defined(Q_WS_QWS) || defined(Q_WS_QPA)) && !defined(QT_NO_FREETYPE)) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || (defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA)) // see the Unicode subset bitfields in the MSDN docs static int requiredUnicodeBits[QFontDatabase::WritingSystemsCount][2] = { @@ -617,7 +617,7 @@ class QFontDatabasePrivate public: QFontDatabasePrivate() : count(0), families(0), reregisterAppFonts(false) -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) , stream(0) #endif #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) @@ -665,11 +665,11 @@ public: void invalidate(); -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) bool loadFromCache(const QString &fontPath); void addQPF2File(const QByteArray &file); #endif // Q_WS_QWS -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) void addFont(const QString &familyname, const char *foundryname, int weight, bool italic, int pixelSize, const QByteArray &file, int fileIndex, bool antialiased, @@ -678,7 +678,7 @@ public: QStringList addTTFile(const QByteArray &file, const QByteArray &fontData = QByteArray()); #endif // QT_NO_FREETYPE #endif -#if defined(Q_WS_QWS) || defined (Q_WS_LITE) +#if defined(Q_WS_QWS) || defined (Q_WS_QPA) QDataStream *stream; QStringList fallbackFamilies; #elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) @@ -732,7 +732,7 @@ QtFontFamily *QFontDatabasePrivate::family(const QString &f, bool create) return families[pos]; } -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundryname, int weight, bool italic, int pixelSize, const QByteArray &file, int fileIndex, bool antialiased, const QList &writingSystems) @@ -763,7 +763,7 @@ void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundr size->fileName = file; size->fileIndex = fileIndex; -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) if (stream) { *stream << familyname << foundry->name << weight << quint8(italic) << pixelSize << file << fileIndex << quint8(antialiased); @@ -778,7 +778,7 @@ void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundr } #endif -#if (defined(Q_WS_QWS) || defined (Q_WS_LITE) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) +#if (defined(Q_WS_QWS) || defined (Q_WS_QPA) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) QStringList QFontDatabasePrivate::addTTFile(const QByteArray &file, const QByteArray &fontData) { QStringList families; @@ -891,7 +891,7 @@ static const int scriptForWritingSystem[] = { }; -#if defined Q_WS_QWS || defined(Q_WS_LITE) || (defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG)) || defined(Q_WS_WIN) +#if defined Q_WS_QWS || defined(Q_WS_QPA) || (defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG)) || defined(Q_WS_WIN) static inline bool requiresOpenType(int writingSystem) { return ((writingSystem >= QFontDatabase::Syriac && writingSystem <= QFontDatabase::Sinhala) @@ -965,7 +965,7 @@ static void match(int script, const QFontDef &request, const QString &family_name, const QString &foundry_name, int force_encoding_id, QtFontDesc *desc, const QList &blacklistedFamilies = QList(), bool forceXLFD=false); -#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDef *fontDef) { fontDef->family = desc.family->name; @@ -1053,7 +1053,7 @@ QT_BEGIN_INCLUDE_NAMESPACE # include "qfontdatabase_mac.cpp" #elif defined(Q_WS_WIN) # include "qfontdatabase_win.cpp" -#elif defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) # include "qfontdatabase_qws.cpp" #elif defined(Q_OS_SYMBIAN) # include "qfontdatabase_s60.cpp" diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h index 1339884..6a09b77 100644 --- a/src/gui/text/qfontdatabase.h +++ b/src/gui/text/qfontdatabase.h @@ -152,7 +152,7 @@ public: private: static void createDatabase(); static void parseFontName(const QString &name, QString &foundry, QString &family); -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) static QFontEngine *findFont(int script, const QFontPrivate *fp, const QFontDef &request); #endif static void load(const QFontPrivate *d, int script); diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index 060d9bc..fdb86ce 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -742,7 +742,7 @@ QFontEngineGlyphCache *QFontEngine::glyphCache(void *key, QFontEngineGlyphCache: return 0; } -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) static inline QFixed kerning(int left, int right, const QFontEngine::KernPair *pairs, int numPairs) { uint left_right = (left << 16) + right; @@ -1157,7 +1157,7 @@ glyph_metrics_t QFontEngineBox::boundingBox(const QGlyphLayout &glyphs) return overall; } -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) void QFontEngineBox::draw(QPaintEngine *p, qreal x, qreal y, const QTextItemInt &ti) { if (!ti.glyphs.numGlyphs) diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h index 4e86c0d..372ad0c 100644 --- a/src/gui/text/qfontengine_ft_p.h +++ b/src/gui/text/qfontengine_ft_p.h @@ -271,7 +271,7 @@ private: QGlyphSet *loadTransformedGlyphSet(const QTransform &matrix); bool loadGlyphs(QGlyphSet *gs, glyph_t *glyphs, int num_glyphs, GlyphFormat format = Format_Render); -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) virtual void draw(QPaintEngine * /*p*/, qreal /*x*/, qreal /*y*/, const QTextItemInt & /*si*/) {} #endif diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index 3e39f89..fb4556b 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -235,7 +235,7 @@ public: bool symbol; mutable HB_FontRec hbFont; mutable HB_Face hbFace; -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_LITE) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) struct KernPair { uint left_right; QFixed adjust; diff --git a/src/gui/util/qdesktopservices.cpp b/src/gui/util/qdesktopservices.cpp index f26b27b..39a160e 100644 --- a/src/gui/util/qdesktopservices.cpp +++ b/src/gui/util/qdesktopservices.cpp @@ -45,7 +45,7 @@ #include -#if defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) #include "qdesktopservices_qws.cpp" #elif defined(Q_WS_X11) #include "qdesktopservices_x11.cpp" diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index a43f1d4..1241b7a 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -96,7 +96,7 @@ QT_BEGIN_NAMESPACE -#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_QPA) QGLExtensionFuncs QGLContextPrivate::qt_extensionFuncs; #endif @@ -1393,7 +1393,7 @@ QGLFormat::OpenGLVersionFlags QGLFormat::openGLVersionFlags() } } -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA hasOpenGL(); // ### I have no idea why this is needed here, but it makes things work for testlite #endif @@ -1642,7 +1642,7 @@ void QGLContextPrivate::init(QPaintDevice *dev, const QGLFormat &format) # endif vi = 0; #endif -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) platformContext = 0; #endif #if !defined(QT_NO_EGL) @@ -4049,7 +4049,7 @@ void QGLWidget::resizeOverlayGL(int, int) /*! \fn bool QGLWidget::event(QEvent *e) \reimp */ -#if !defined(Q_OS_WINCE) && !defined(Q_WS_QWS) && !defined(Q_WS_LITE) +#if !defined(Q_OS_WINCE) && !defined(Q_WS_QWS) && !defined(Q_WS_QPA) bool QGLWidget::event(QEvent *e) { Q_D(QGLWidget); diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h index a1be68f..6c1e6aa 100644 --- a/src/opengl/qgl_p.h +++ b/src/opengl/qgl_p.h @@ -68,7 +68,7 @@ #include #endif -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) #include #endif @@ -359,7 +359,7 @@ public: EGLSurface eglSurfaceForDevice() const; #endif -#if defined(Q_WS_LITE) +#if defined(Q_WS_QPA) QPlatformGLContext *platformContext; #elif defined(Q_WS_X11) || defined(Q_WS_MAC) void* cx; @@ -424,7 +424,7 @@ public: static inline QGLExtensionFuncs& extensionFuncs(const QGLContext *ctx) { return ctx->d_ptr->group->extensionFuncs(); } #endif -#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_LITE) +#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_QPA) static QGLExtensionFuncs qt_extensionFuncs; static inline QGLExtensionFuncs& extensionFuncs(const QGLContext *) { return qt_extensionFuncs; } #endif diff --git a/src/opengl/qglpixelbuffer_p.h b/src/opengl/qglpixelbuffer_p.h index a7f4159..69678d0 100644 --- a/src/opengl/qglpixelbuffer_p.h +++ b/src/opengl/qglpixelbuffer_p.h @@ -197,10 +197,10 @@ public: EGLSurface pbuf; QEglContext *ctx; int textureFormat; -#elif defined(Q_WS_LITE) - // Stubs - int pbuf; - int ctx; +#elif defined(Q_WS_QPA) + //stubs + void *pbuf; + void *ctx; #endif }; diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 98455e1..b7629c6 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -419,7 +419,7 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & QWidget *parent = widget->internalWinId() ? widget : widget->nativeParentWidget(); Q_ASSERT(parent); -#if !defined(Q_WS_LITE) +#if !defined(Q_WS_QPA) if (!geometry().isValid()) return; #else @@ -648,7 +648,7 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & } -#if !defined(Q_WS_LITE) +#if !defined(Q_WS_QPA) void QGLWindowSurface::setGeometry(const QRect &rect) { QWindowSurface::setGeometry(rect); @@ -667,7 +667,7 @@ void QGLWindowSurface::updateGeometry() { return; d_ptr->geometry_updated = false; -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA QSize surfSize = size(); #else QSize surfSize = geometry().size(); diff --git a/src/opengl/qwindowsurface_gl_p.h b/src/opengl/qwindowsurface_gl_p.h index 6bff109..10c8658 100644 --- a/src/opengl/qwindowsurface_gl_p.h +++ b/src/opengl/qwindowsurface_gl_p.h @@ -87,7 +87,7 @@ public: QPaintDevice *paintDevice(); void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); -#if !defined(Q_WS_LITE) +#if !defined(Q_WS_QPA) void setGeometry(const QRect &rect); #else virtual void resize(const QSize &size); diff --git a/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp b/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp index 695050e..e2b9f99 100644 --- a/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp +++ b/src/plugins/graphicssystems/trace/qgraphicssystem_trace.cpp @@ -98,7 +98,7 @@ QPaintDevice *QTraceWindowSurface::paintDevice() { if (!buffer) { buffer = new QPaintBuffer; -#ifdef Q_WS_LITE +#ifdef Q_WS_QPA buffer->setBoundingRect(QRect(QPoint(), size())); #else buffer->setBoundingRect(geometry()); diff --git a/tests/auto/qaction/tst_qaction.cpp b/tests/auto/qaction/tst_qaction.cpp index 26a28e7..66a1039 100644 --- a/tests/auto/qaction/tst_qaction.cpp +++ b/tests/auto/qaction/tst_qaction.cpp @@ -242,7 +242,7 @@ void tst_QAction::setStandardKeys() QList expected; #if defined(Q_WS_MAC) || defined(Q_OS_SYMBIAN) expected << QKeySequence("CTRL+C"); -#elif defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_LITE) +#elif defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_QPA) expected << QKeySequence("CTRL+C") << QKeySequence("CTRL+INSERT"); #else expected << QKeySequence("CTRL+C") << QKeySequence("F16") << QKeySequence("CTRL+INSERT"); -- cgit v0.12 From 4e27ff09ce4fae4b0af584e1dedb6fa189c6e3d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 24 Jun 2010 11:07:29 +0200 Subject: Renamed files from *_lite* to *_qpa* --- src/gui/egl/egl.pri | 2 +- src/gui/egl/qegl_lite.cpp | 111 --- src/gui/egl/qegl_qpa.cpp | 111 +++ src/gui/image/image.pri | 2 +- src/gui/image/qpixmap_lite.cpp | 49 -- src/gui/image/qpixmap_qpa.cpp | 49 ++ src/gui/kernel/kernel.pri | 52 +- src/gui/kernel/qapplication_lite.cpp | 882 --------------------- src/gui/kernel/qapplication_p.h | 2 +- src/gui/kernel/qapplication_qpa.cpp | 882 +++++++++++++++++++++ src/gui/kernel/qclipboard_lite.cpp | 163 ---- src/gui/kernel/qclipboard_qpa.cpp | 163 ++++ src/gui/kernel/qcursor_lite.cpp | 127 --- src/gui/kernel/qcursor_qpa.cpp | 127 +++ src/gui/kernel/qdesktopwidget_lite.cpp | 180 ----- src/gui/kernel/qdesktopwidget_lite_p.h | 76 -- src/gui/kernel/qdesktopwidget_qpa.cpp | 180 +++++ src/gui/kernel/qdesktopwidget_qpa_p.h | 76 ++ src/gui/kernel/qeventdispatcher_glib_lite.cpp | 139 ---- src/gui/kernel/qeventdispatcher_glib_lite_p.h | 88 -- src/gui/kernel/qeventdispatcher_glib_qpa.cpp | 139 ++++ src/gui/kernel/qeventdispatcher_glib_qpa_p.h | 88 ++ src/gui/kernel/qeventdispatcher_lite.cpp | 144 ---- src/gui/kernel/qeventdispatcher_lite_p.h | 86 -- src/gui/kernel/qeventdispatcher_qpa.cpp | 144 ++++ src/gui/kernel/qeventdispatcher_qpa_p.h | 86 ++ src/gui/kernel/qgenericplugin_lite.cpp | 112 --- src/gui/kernel/qgenericplugin_lite.h | 84 -- src/gui/kernel/qgenericplugin_qpa.cpp | 112 +++ src/gui/kernel/qgenericplugin_qpa.h | 84 ++ src/gui/kernel/qgenericpluginfactory_lite.cpp | 115 --- src/gui/kernel/qgenericpluginfactory_lite.h | 67 -- src/gui/kernel/qgenericpluginfactory_qpa.cpp | 115 +++ src/gui/kernel/qgenericpluginfactory_qpa.h | 67 ++ src/gui/kernel/qplatformglcontext_lite.h | 71 -- src/gui/kernel/qplatformglcontext_qpa.h | 71 ++ src/gui/kernel/qplatformintegration_lite.cpp | 64 -- src/gui/kernel/qplatformintegration_lite.h | 78 -- src/gui/kernel/qplatformintegration_qpa.cpp | 64 ++ src/gui/kernel/qplatformintegration_qpa.h | 78 ++ .../kernel/qplatformintegrationfactory_lite.cpp | 89 --- .../kernel/qplatformintegrationfactory_lite_p.h | 78 -- src/gui/kernel/qplatformintegrationfactory_qpa.cpp | 89 +++ src/gui/kernel/qplatformintegrationfactory_qpa_p.h | 78 ++ src/gui/kernel/qplatformintegrationplugin_lite.cpp | 55 -- src/gui/kernel/qplatformintegrationplugin_lite.h | 92 --- src/gui/kernel/qplatformintegrationplugin_qpa.cpp | 55 ++ src/gui/kernel/qplatformintegrationplugin_qpa.h | 92 +++ src/gui/kernel/qplatformscreen_lite.cpp | 66 -- src/gui/kernel/qplatformscreen_lite.h | 74 -- src/gui/kernel/qplatformscreen_qpa.cpp | 66 ++ src/gui/kernel/qplatformscreen_qpa.h | 74 ++ src/gui/kernel/qplatformwindow_lite.cpp | 85 -- src/gui/kernel/qplatformwindow_lite.h | 90 --- src/gui/kernel/qplatformwindow_qpa.cpp | 85 ++ src/gui/kernel/qplatformwindow_qpa.h | 90 +++ src/gui/kernel/qsound_lite.cpp | 74 -- src/gui/kernel/qsound_qpa.cpp | 74 ++ src/gui/kernel/qwidget.cpp | 2 +- src/gui/kernel/qwidget_lite.cpp | 809 ------------------- src/gui/kernel/qwidget_qpa.cpp | 809 +++++++++++++++++++ src/gui/painting/painting.pri | 8 +- src/gui/painting/qcolormap_lite.cpp | 231 ------ src/gui/painting/qcolormap_qpa.cpp | 231 ++++++ src/gui/painting/qgraphicssystemcursor_lite.cpp | 664 ---------------- src/gui/painting/qgraphicssystemcursor_lite.h | 97 --- src/gui/painting/qgraphicssystemcursor_qpa.cpp | 664 ++++++++++++++++ src/gui/painting/qgraphicssystemcursor_qpa.h | 97 +++ src/gui/painting/qpaintdevice_lite.cpp | 68 -- src/gui/painting/qpaintdevice_qpa.cpp | 68 ++ src/gui/text/qfont.cpp | 2 +- src/opengl/opengl.pro | 2 +- src/opengl/qgl_lite.cpp | 253 ------ src/opengl/qgl_qpa.cpp | 253 ++++++ 74 files changed, 5497 insertions(+), 5497 deletions(-) delete mode 100644 src/gui/egl/qegl_lite.cpp create mode 100644 src/gui/egl/qegl_qpa.cpp delete mode 100644 src/gui/image/qpixmap_lite.cpp create mode 100644 src/gui/image/qpixmap_qpa.cpp delete mode 100644 src/gui/kernel/qapplication_lite.cpp create mode 100644 src/gui/kernel/qapplication_qpa.cpp delete mode 100644 src/gui/kernel/qclipboard_lite.cpp create mode 100644 src/gui/kernel/qclipboard_qpa.cpp delete mode 100644 src/gui/kernel/qcursor_lite.cpp create mode 100644 src/gui/kernel/qcursor_qpa.cpp delete mode 100644 src/gui/kernel/qdesktopwidget_lite.cpp delete mode 100644 src/gui/kernel/qdesktopwidget_lite_p.h create mode 100644 src/gui/kernel/qdesktopwidget_qpa.cpp create mode 100644 src/gui/kernel/qdesktopwidget_qpa_p.h delete mode 100644 src/gui/kernel/qeventdispatcher_glib_lite.cpp delete mode 100644 src/gui/kernel/qeventdispatcher_glib_lite_p.h create mode 100644 src/gui/kernel/qeventdispatcher_glib_qpa.cpp create mode 100644 src/gui/kernel/qeventdispatcher_glib_qpa_p.h delete mode 100644 src/gui/kernel/qeventdispatcher_lite.cpp delete mode 100644 src/gui/kernel/qeventdispatcher_lite_p.h create mode 100644 src/gui/kernel/qeventdispatcher_qpa.cpp create mode 100644 src/gui/kernel/qeventdispatcher_qpa_p.h delete mode 100644 src/gui/kernel/qgenericplugin_lite.cpp delete mode 100644 src/gui/kernel/qgenericplugin_lite.h create mode 100644 src/gui/kernel/qgenericplugin_qpa.cpp create mode 100644 src/gui/kernel/qgenericplugin_qpa.h delete mode 100644 src/gui/kernel/qgenericpluginfactory_lite.cpp delete mode 100644 src/gui/kernel/qgenericpluginfactory_lite.h create mode 100644 src/gui/kernel/qgenericpluginfactory_qpa.cpp create mode 100644 src/gui/kernel/qgenericpluginfactory_qpa.h delete mode 100644 src/gui/kernel/qplatformglcontext_lite.h create mode 100644 src/gui/kernel/qplatformglcontext_qpa.h delete mode 100644 src/gui/kernel/qplatformintegration_lite.cpp delete mode 100644 src/gui/kernel/qplatformintegration_lite.h create mode 100644 src/gui/kernel/qplatformintegration_qpa.cpp create mode 100644 src/gui/kernel/qplatformintegration_qpa.h delete mode 100644 src/gui/kernel/qplatformintegrationfactory_lite.cpp delete mode 100644 src/gui/kernel/qplatformintegrationfactory_lite_p.h create mode 100644 src/gui/kernel/qplatformintegrationfactory_qpa.cpp create mode 100644 src/gui/kernel/qplatformintegrationfactory_qpa_p.h delete mode 100644 src/gui/kernel/qplatformintegrationplugin_lite.cpp delete mode 100644 src/gui/kernel/qplatformintegrationplugin_lite.h create mode 100644 src/gui/kernel/qplatformintegrationplugin_qpa.cpp create mode 100644 src/gui/kernel/qplatformintegrationplugin_qpa.h delete mode 100644 src/gui/kernel/qplatformscreen_lite.cpp delete mode 100644 src/gui/kernel/qplatformscreen_lite.h create mode 100644 src/gui/kernel/qplatformscreen_qpa.cpp create mode 100644 src/gui/kernel/qplatformscreen_qpa.h delete mode 100644 src/gui/kernel/qplatformwindow_lite.cpp delete mode 100644 src/gui/kernel/qplatformwindow_lite.h create mode 100644 src/gui/kernel/qplatformwindow_qpa.cpp create mode 100644 src/gui/kernel/qplatformwindow_qpa.h delete mode 100644 src/gui/kernel/qsound_lite.cpp create mode 100644 src/gui/kernel/qsound_qpa.cpp delete mode 100644 src/gui/kernel/qwidget_lite.cpp create mode 100644 src/gui/kernel/qwidget_qpa.cpp delete mode 100644 src/gui/painting/qcolormap_lite.cpp create mode 100644 src/gui/painting/qcolormap_qpa.cpp delete mode 100644 src/gui/painting/qgraphicssystemcursor_lite.cpp delete mode 100644 src/gui/painting/qgraphicssystemcursor_lite.h create mode 100644 src/gui/painting/qgraphicssystemcursor_qpa.cpp create mode 100644 src/gui/painting/qgraphicssystemcursor_qpa.h delete mode 100644 src/gui/painting/qpaintdevice_lite.cpp create mode 100644 src/gui/painting/qpaintdevice_qpa.cpp delete mode 100644 src/opengl/qgl_lite.cpp create mode 100644 src/opengl/qgl_qpa.cpp diff --git a/src/gui/egl/egl.pri b/src/gui/egl/egl.pri index 253c091..476f1a3 100644 --- a/src/gui/egl/egl.pri +++ b/src/gui/egl/egl.pri @@ -29,7 +29,7 @@ contains(QT_CONFIG, egl): { SOURCES += egl/qegl_qws.cpp } else { embedded_lite { - SOURCES += egl/qegl_lite.cpp + SOURCES += egl/qegl_qpa.cpp } else { symbian { SOURCES += egl/qegl_symbian.cpp diff --git a/src/gui/egl/qegl_lite.cpp b/src/gui/egl/qegl_lite.cpp deleted file mode 100644 index 10caf46..0000000 --- a/src/gui/egl/qegl_lite.cpp +++ /dev/null @@ -1,111 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include "qeglcontext_p.h" - -#if !defined(QT_NO_EGL) - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -EGLNativeDisplayType QEgl::nativeDisplay() -{ - return EGLNativeDisplayType(EGL_DEFAULT_DISPLAY); -} - -EGLNativeWindowType QEgl::nativeWindow(QWidget* widget) -{ - return (EGLNativeWindowType)(widget->winId()); -} - -EGLNativePixmapType QEgl::nativePixmap(QPixmap* pixmap) -{ - Q_UNUSED(pixmap); - return 0; -} - -//EGLDisplay QEglContext::display() -//{ -// return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY)); -//} - -static QPlatformScreen *screenForDevice(QPaintDevice *device) -{ - QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - - QList screens = pi->screens(); - - int screenNumber; - if (device && device->devType() == QInternal::Widget) - screenNumber = qApp->desktop()->screenNumber(static_cast(device)); - else - screenNumber = 0; - if (screenNumber < 0 || screenNumber >= screens.size()) - return 0; - return screens[screenNumber]; -} - -// Set pixel format and other properties based on a paint device. -void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev) -{ - if (!dev) - return; - - // Find the QGLScreen for this paint device. - QPlatformScreen *screen = screenForDevice(dev); - if (!screen) - return; - int devType = dev->devType(); - if (devType == QInternal::Image) - setPixelFormat(static_cast(dev)->format()); - else - setPixelFormat(screen->format()); -} - -QT_END_NAMESPACE - -#endif // !QT_NO_EGL diff --git a/src/gui/egl/qegl_qpa.cpp b/src/gui/egl/qegl_qpa.cpp new file mode 100644 index 0000000..10caf46 --- /dev/null +++ b/src/gui/egl/qegl_qpa.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include "qeglcontext_p.h" + +#if !defined(QT_NO_EGL) + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +EGLNativeDisplayType QEgl::nativeDisplay() +{ + return EGLNativeDisplayType(EGL_DEFAULT_DISPLAY); +} + +EGLNativeWindowType QEgl::nativeWindow(QWidget* widget) +{ + return (EGLNativeWindowType)(widget->winId()); +} + +EGLNativePixmapType QEgl::nativePixmap(QPixmap* pixmap) +{ + Q_UNUSED(pixmap); + return 0; +} + +//EGLDisplay QEglContext::display() +//{ +// return eglGetDisplay(EGLNativeDisplayType(EGL_DEFAULT_DISPLAY)); +//} + +static QPlatformScreen *screenForDevice(QPaintDevice *device) +{ + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + + QList screens = pi->screens(); + + int screenNumber; + if (device && device->devType() == QInternal::Widget) + screenNumber = qApp->desktop()->screenNumber(static_cast(device)); + else + screenNumber = 0; + if (screenNumber < 0 || screenNumber >= screens.size()) + return 0; + return screens[screenNumber]; +} + +// Set pixel format and other properties based on a paint device. +void QEglProperties::setPaintDeviceFormat(QPaintDevice *dev) +{ + if (!dev) + return; + + // Find the QGLScreen for this paint device. + QPlatformScreen *screen = screenForDevice(dev); + if (!screen) + return; + int devType = dev->devType(); + if (devType == QInternal::Image) + setPixelFormat(static_cast(dev)->format()); + else + setPixelFormat(screen->format()); +} + +QT_END_NAMESPACE + +#endif // !QT_NO_EGL diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index 1df66a0..064ba32 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -64,7 +64,7 @@ embedded { SOURCES += image/qpixmap_qws.cpp } embedded_lite { - SOURCES += image/qpixmap_lite.cpp + SOURCES += image/qpixmap_qpa.cpp } x11 { HEADERS += image/qpixmap_x11_p.h diff --git a/src/gui/image/qpixmap_lite.cpp b/src/gui/image/qpixmap_lite.cpp deleted file mode 100644 index 61be216..0000000 --- a/src/gui/image/qpixmap_lite.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h) -{ - return QApplicationPrivate::platformIntegration()->grabWindow(window, x, y, w, h); -} diff --git a/src/gui/image/qpixmap_qpa.cpp b/src/gui/image/qpixmap_qpa.cpp new file mode 100644 index 0000000..61be216 --- /dev/null +++ b/src/gui/image/qpixmap_qpa.cpp @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +QPixmap QPixmap::grabWindow(WId window, int x, int y, int w, int h) +{ + return QApplicationPrivate::platformIntegration()->grabWindow(window, x, y, w, h); +} diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index f849ad7..dcdfd04 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -51,7 +51,7 @@ HEADERS += \ kernel/qsoftkeymanager_p.h \ kernel/qsoftkeymanager_common_p.h \ kernel/qguiplatformplugin_p.h \ - kernel/qdesktopwidget_lite_p.h + kernel/qdesktopwidget_qpa_p.h SOURCES += \ kernel/qaction.cpp \ @@ -200,41 +200,41 @@ embedded { embedded_lite { HEADERS += \ - kernel/qgenericpluginfactory_lite.h \ - kernel/qgenericplugin_lite.h \ - kernel/qeventdispatcher_lite_p.h \ + kernel/qgenericpluginfactory_qpa.h \ + kernel/qgenericplugin_qpa.h \ + kernel/qeventdispatcher_qpa_p.h \ kernel/qwindowsysteminterface.h \ - kernel/qplatformintegration_lite.h \ - kernel/qplatformscreen_lite.h \ - kernel/qplatformintegrationfactory_lite_p.h \ - kernel/qplatformintegrationplugin_lite.h \ - kernel/qplatformwindow_lite.h \ - kernel/qplatformglcontext_lite.h + kernel/qplatformintegration_qpa.h \ + kernel/qplatformscreen_qpa.h \ + kernel/qplatformintegrationfactory_qpa_p.h \ + kernel/qplatformintegrationplugin_qpa.h \ + kernel/qplatformwindow_qpa.h \ + kernel/qplatformglcontext_qpa.h SOURCES += \ - kernel/qapplication_lite.cpp \ - kernel/qclipboard_lite.cpp \ - kernel/qcursor_lite.cpp \ + kernel/qapplication_qpa.cpp \ + kernel/qclipboard_qpa.cpp \ + kernel/qcursor_qpa.cpp \ kernel/qdnd_qws.cpp \ - kernel/qdesktopwidget_lite.cpp \ - kernel/qgenericpluginfactory_lite.cpp \ - kernel/qgenericplugin_lite.cpp \ + kernel/qdesktopwidget_qpa.cpp \ + kernel/qgenericpluginfactory_qpa.cpp \ + kernel/qgenericplugin_qpa.cpp \ kernel/qkeymapper_qws.cpp \ - kernel/qsound_lite.cpp \ - kernel/qwidget_lite.cpp \ - kernel/qeventdispatcher_lite.cpp \ + kernel/qsound_qpa.cpp \ + kernel/qwidget_qpa.cpp \ + kernel/qeventdispatcher_qpa.cpp \ kernel/qwindowsysteminterface.cpp \ - kernel/qplatformintegration_lite.cpp \ - kernel/qplatformscreen_lite.cpp \ - kernel/qplatformintegrationfactory_lite.cpp \ - kernel/qplatformintegrationplugin_lite.cpp \ - kernel/qplatformwindow_lite.cpp + kernel/qplatformintegration_qpa.cpp \ + kernel/qplatformscreen_qpa.cpp \ + kernel/qplatformintegrationfactory_qpa.cpp \ + kernel/qplatformintegrationplugin_qpa.cpp \ + kernel/qplatformwindow_qpa.cpp contains(QT_CONFIG, glib) { SOURCES += \ - kernel/qeventdispatcher_glib_lite.cpp + kernel/qeventdispatcher_glib_qpa.cpp HEADERS += \ - kernel/qeventdispatcher_glib_lite_p.h + kernel/qeventdispatcher_glib_qpa_p.h QMAKE_CXXFLAGS += $$QT_CFLAGS_GLIB LIBS_PRIVATE +=$$QT_LIBS_GLIB } diff --git a/src/gui/kernel/qapplication_lite.cpp b/src/gui/kernel/qapplication_lite.cpp deleted file mode 100644 index 9c36ef5..0000000 --- a/src/gui/kernel/qapplication_lite.cpp +++ /dev/null @@ -1,882 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qapplication_p.h" -#include "qcolormap.h" -#include "qpixmapcache.h" -#if !defined(QT_NO_GLIB) -#include "qeventdispatcher_glib_lite_p.h" -#endif -#include "qeventdispatcher_lite_p.h" -#ifndef QT_NO_CURSOR -#include "private/qcursor_p.h" -#endif - -#include "private/qwidget_p.h" - -#include "qgenericpluginfactory_lite.h" -#include "qplatformintegrationfactory_lite_p.h" -#include - -#include -#include -#include -#include -#include - -#include "qdesktopwidget_lite_p.h" - -QT_BEGIN_NAMESPACE - -static QString appName; -static const char *appFont = 0; // application font - -QWidget *qt_button_down = 0; // widget got last button-down - -static bool app_do_modal = false; -extern QWidgetList *qt_modal_stack; // stack of modal widgets - -int qt_last_x = 0; -int qt_last_y = 0; -QPointer qt_last_mouse_receiver = 0; - -static Qt::KeyboardModifiers modifiers = Qt::NoModifier; -static Qt::MouseButtons buttons = Qt::NoButton; -static ulong mousePressTime; -static Qt::MouseButton mousePressButton = Qt::NoButton; -static int mousePressX; -static int mousePressY; -static int mouse_double_click_distance = 5; - -void QApplicationPrivate::processUserEvent(QWindowSystemInterface::UserEvent *e) -{ - switch(e->type) { - case QEvent::MouseButtonDblClick: // if mouse event, calculate appropriate widget and local coordinates - case QEvent::MouseButtonPress: - case QEvent::MouseButtonRelease: - case QEvent::MouseMove: - QApplicationPrivate::processMouseEvent(static_cast(e)); - break; - case QEvent::Wheel: - QApplicationPrivate::processWheelEvent(static_cast(e)); - break; - case QEvent::KeyPress: - case QEvent::KeyRelease: - QApplicationPrivate::processKeyEvent(static_cast(e)); - break; - case QEvent::TouchBegin: - case QEvent::TouchUpdate: - case QEvent::TouchEnd: - QApplicationPrivate::processTouchEvent(static_cast(e)); - break; - default: - qWarning() << "Unknown user input event type:" << e->type; - break; - } -} - -QString QApplicationPrivate::appName() const -{ - return QT_PREPEND_NAMESPACE(appName); -} - -void QApplicationPrivate::createEventDispatcher() -{ - Q_Q(QApplication); -#if !defined(QT_NO_GLIB) - if (qgetenv("QT_NO_GLIB").isEmpty() && QEventDispatcherGlib::versionSupported()) - eventDispatcher = new QLiteEventDispatcherGlib(q); - else -#endif - eventDispatcher = new QEventDispatcherLite(q); -} - -static bool qt_try_modal(QWidget *widget, QEvent::Type type) -{ - QWidget * top = 0; - - if (QApplicationPrivate::tryModalHelper(widget, &top)) - return true; - - bool block_event = false; - bool paint_event = false; - - switch (type) { -#if 0 - case QEvent::Focus: - if (!static_cast(event)->simpleData.get_focus) - break; - // drop through -#endif - case QEvent::MouseButtonPress: // disallow mouse/key events - case QEvent::MouseButtonRelease: - case QEvent::MouseMove: - case QEvent::KeyPress: - case QEvent::KeyRelease: - block_event = true; - break; - default: - break; - } - - if ((block_event || paint_event) && top->parentWidget() == 0) - top->raise(); - - return !block_event; -} - - - -void QApplicationPrivate::enterModal_sys(QWidget *widget) -{ - if (!qt_modal_stack) - qt_modal_stack = new QWidgetList; - qt_modal_stack->insert(0, widget); - app_do_modal = true; -} - -void QApplicationPrivate::leaveModal_sys(QWidget *widget ) -{ - if (qt_modal_stack && qt_modal_stack->removeAll(widget)) { - if (qt_modal_stack->isEmpty()) { - delete qt_modal_stack; - qt_modal_stack = 0; - } - } - app_do_modal = qt_modal_stack != 0; -} - -bool QApplicationPrivate::modalState() -{ - return app_do_modal; -} - -void QApplicationPrivate::closePopup(QWidget *popup) -{ - Q_Q(QApplication); - if (!popupWidgets) - return; - popupWidgets->removeAll(popup); - -//### -// if (popup == qt_popup_down) { -// qt_button_down = 0; -// qt_popup_down = 0; -// } - - if (QApplicationPrivate::popupWidgets->count() == 0) { // this was the last popup - delete QApplicationPrivate::popupWidgets; - QApplicationPrivate::popupWidgets = 0; - - //### replay mouse event? - - //### transfer/release mouse grab - - //### transfer/release keyboard grab - - //give back focus - - if (active_window) { - if (QWidget *fw = active_window->focusWidget()) { - if (fw != QApplication::focusWidget()) { - fw->setFocus(Qt::PopupFocusReason); - } else { - QFocusEvent e(QEvent::FocusIn, Qt::PopupFocusReason); - q->sendEvent(fw, &e); - } - } - } - - } else { - // A popup was closed, so the previous popup gets the focus. - - QWidget* aw = QApplicationPrivate::popupWidgets->last(); - if (QWidget *fw = aw->focusWidget()) - fw->setFocus(Qt::PopupFocusReason); - - //### regrab the keyboard and mouse in case 'popup' lost the grab - - - } - -} - -static int openPopupCount = 0; -void QApplicationPrivate::openPopup(QWidget *popup) -{ - openPopupCount++; - if (!popupWidgets) { // create list - popupWidgets = new QWidgetList; - - /* only grab if you are the first/parent popup */ - //#### ->grabMouse(popup,true); - //#### ->grabKeyboard(popup,true); - //### popupGrabOk = true; - } - popupWidgets->append(popup); // add to end of list - - // popups are not focus-handled by the window system (the first - // popup grabbed the keyboard), so we have to do that manually: A - // new popup gets the focus - if (popup->focusWidget()) { - popup->focusWidget()->setFocus(Qt::PopupFocusReason); - } else if (popupWidgets->count() == 1) { // this was the first popup - if (QWidget *fw = QApplication::focusWidget()) { - QFocusEvent e(QEvent::FocusOut, Qt::PopupFocusReason); - QApplication::sendEvent(fw, &e); - } - } -} - -void QApplicationPrivate::initializeMultitouch_sys() -{ -} - -void QApplicationPrivate::cleanupMultitouch_sys() -{ -} - -void QApplicationPrivate::initializeWidgetPaletteHash() -{ -} - -void QApplication::setCursorFlashTime(int msecs) -{ - QApplicationPrivate::cursor_flash_time = msecs; -} - -int QApplication::cursorFlashTime() -{ - return QApplicationPrivate::cursor_flash_time; -} - -void QApplication::setDoubleClickInterval(int ms) -{ - QApplicationPrivate::mouse_double_click_time = ms; -} - -int QApplication::doubleClickInterval() -{ - return QApplicationPrivate::mouse_double_click_time; -} - -void QApplication::setKeyboardInputInterval(int ms) -{ - QApplicationPrivate::keyboard_input_time = ms; -} - -int QApplication::keyboardInputInterval() -{ - return QApplicationPrivate::keyboard_input_time; -} - -#ifndef QT_NO_WHEELEVENT -void QApplication::setWheelScrollLines(int lines) -{ - QApplicationPrivate::wheel_scroll_lines = lines; -} - -int QApplication::wheelScrollLines() -{ - return QApplicationPrivate::wheel_scroll_lines; -} -#endif - -void QApplication::setEffectEnabled(Qt::UIEffect effect, bool enable) -{ - switch (effect) { - case Qt::UI_AnimateMenu: - QApplicationPrivate::animate_menu = enable; - break; - case Qt::UI_FadeMenu: - if (enable) - QApplicationPrivate::animate_menu = true; - QApplicationPrivate::fade_menu = enable; - break; - case Qt::UI_AnimateCombo: - QApplicationPrivate::animate_combo = enable; - break; - case Qt::UI_AnimateTooltip: - QApplicationPrivate::animate_tooltip = enable; - break; - case Qt::UI_FadeTooltip: - if (enable) - QApplicationPrivate::animate_tooltip = true; - QApplicationPrivate::fade_tooltip = enable; - break; - case Qt::UI_AnimateToolBox: - QApplicationPrivate::animate_toolbox = enable; - break; - default: - QApplicationPrivate::animate_ui = enable; - break; - } -} - -bool QApplication::isEffectEnabled(Qt::UIEffect effect) -{ - if (QColormap::instance().depth() < 16 || !QApplicationPrivate::animate_ui) - return false; - - switch(effect) { - case Qt::UI_AnimateMenu: - return QApplicationPrivate::animate_menu; - case Qt::UI_FadeMenu: - return QApplicationPrivate::fade_menu; - case Qt::UI_AnimateCombo: - return QApplicationPrivate::animate_combo; - case Qt::UI_AnimateTooltip: - return QApplicationPrivate::animate_tooltip; - case Qt::UI_FadeTooltip: - return QApplicationPrivate::fade_tooltip; - case Qt::UI_AnimateToolBox: - return QApplicationPrivate::animate_toolbox; - default: - return QApplicationPrivate::animate_ui; - } -} - -#ifndef QT_NO_CURSOR -void QApplication::setOverrideCursor(const QCursor &cursor) -{ - qApp->d_func()->cursor_list.prepend(cursor); - qt_lite_set_cursor(0, false); -} - -void QApplication::restoreOverrideCursor() -{ - if (qApp->d_func()->cursor_list.isEmpty()) - return; - qApp->d_func()->cursor_list.removeFirst(); - qt_lite_set_cursor(0, false); -} - -#endif// QT_NO_CURSOR - -QWidget *QApplication::topLevelAt(const QPoint &pos) -{ - QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - - QList screens = pi->screens(); - QList::const_iterator screen = screens.constBegin(); - QList::const_iterator end = screens.constEnd(); - - // The first screen in a virtual environment should know about all top levels - if (pi->isVirtualDesktop()) { - QWidget *w = (*screen)->topLevelAt(pos); - return w; - } - - while (screen != end) { - if ((*screen)->geometry().contains(pos)) - return (*screen)->topLevelAt(pos); - ++screen; - } - return 0; -} - -void QApplication::beep() -{ -} - -void QApplication::alert(QWidget *, int) -{ -} - -static void init_platform(const QString &name) -{ - QApplicationPrivate::platform_integration = QPlatformIntegrationFactory::create(name); - if (!QApplicationPrivate::platform_integration) { - QStringList keys = QPlatformIntegrationFactory::keys(); - QString fatalMessage = - QString::fromLatin1("Failed to load platform plugin \"%1\". Available platforms are: \n").arg(name); - foreach(QString key, keys) { - fatalMessage.append(key + QString::fromLatin1("\n")); - } - qFatal("%s", fatalMessage.toLocal8Bit().constData()); - - } - -} - - -static void cleanup_platform() -{ - delete QApplicationPrivate::platform_integration; - QApplicationPrivate::platform_integration = 0; -} - -static void init_plugins(const QList pluginList) -{ - for (int i = 0; i < pluginList.count(); ++i) { - QByteArray pluginSpec = pluginList.at(i); - qDebug() << "init_plugins" << i << pluginSpec; - int colonPos = pluginSpec.indexOf(':'); - QObject *plugin; - if (colonPos < 0) - plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec), QString()); - else - plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec.mid(0, colonPos)), - QLatin1String(pluginSpec.mid(colonPos+1))); - qDebug() << " created" << plugin; - } -} - -#ifndef QT_NO_QWS_INPUTMETHODS -class QDummyInputContext : public QInputContext -{ -public: - explicit QDummyInputContext(QObject* parent = 0) : QInputContext(parent) {} - ~QDummyInputContext() {} - QString identifierName() { return QString(); } - QString language() { return QString(); } - - void reset() {} - bool isComposing() const { return false; } - -}; -#endif // QT_NO_QWS_INPUTMETHODS - -void qt_init(QApplicationPrivate *priv, int type) -{ - Q_UNUSED(type); - - qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); - char *p; - char **argv = priv->argv; - int argc = priv->argc; - - if (argv && *argv) { //apparently, we allow people to pass 0 on the other platforms - p = strrchr(argv[0], '/'); - appName = QString::fromLocal8Bit(p ? p + 1 : argv[0]); - } - - QList pluginList; - QString platformName = qgetenv("QT_LITE_PLATFORM"); - - // Get command line params - - int j = argc ? 1 : 0; - for (int i=1; iargc) { - priv->argv[j] = 0; - priv->argc = j; - } - -#if 0 - QByteArray pluginEnv = qgetenv("QT_LITE_PLUGINS"); - if (!pluginEnv.isEmpty()) { - pluginList.append(pluginEnv.split(';')); - } -#endif - - init_platform(platformName); - init_plugins(pluginList); - - QColormap::initialize(); - QFont::initialize(); -#ifndef QT_NO_CURSOR -// QCursorData::initialize(); -#endif - - qApp->setObjectName(appName); - -#ifndef QT_NO_QWS_INPUTMETHODS - qApp->setInputContext(new QDummyInputContext(qApp)); -#endif -} - -void qt_cleanup() -{ - cleanup_platform(); - - QPixmapCache::clear(); -#ifndef QT_NO_CURSOR - QCursorData::cleanup(); -#endif - QFont::cleanup(); - QColormap::cleanup(); - delete QApplicationPrivate::inputContext; - QApplicationPrivate::inputContext = 0; - - QApplicationPrivate::active_window = 0; //### this should not be necessary -} - - -#ifdef QT3_SUPPORT -void QApplication::setMainWidget(QWidget *mainWidget) -{ - QApplicationPrivate::main_widget = mainWidget; - if (QApplicationPrivate::main_widget && windowIcon().isNull() - && QApplicationPrivate::main_widget->testAttribute(Qt::WA_SetWindowIcon)) - setWindowIcon(QApplicationPrivate::main_widget->windowIcon()); -} -#endif - -void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent *e) -{ - // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); - static QWeakPointer implicit_mouse_grabber; - - QEvent::Type type; - // move first - Qt::MouseButtons stateChange = e->buttons ^ buttons; - if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { - QWindowSystemInterface::MouseEvent * newMouseEvent = new QWindowSystemInterface::MouseEvent(e->widget.data(), e->timestamp, e->localPos, e->globalPos, e->buttons); - QWindowSystemInterfacePrivate::userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop - stateChange = Qt::NoButton; - } - - QWidget * tlw = e->widget.data(); - - QPoint localPoint = e->localPos; - QPoint globalPoint = e->globalPos; - QWidget *mouseWindow = tlw; - - Qt::MouseButton button = Qt::NoButton; - - - if (qt_last_x != globalPoint.x() || qt_last_y != globalPoint.y()) { - type = QEvent::MouseMove; - qt_last_x = globalPoint.x(); - qt_last_y = globalPoint.y(); - if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance|| - qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance) - mousePressButton = Qt::NoButton; - } - else { // check to see if a new button has been pressed/released - for (int check = Qt::LeftButton; - check <= Qt::XButton2; - check = check << 1) { - if (check & stateChange) { - button = Qt::MouseButton(check); - break; - } - } - if (button == Qt::NoButton) { - // Ignore mouse events that don't change the current state - return; - } - buttons = e->buttons; - if (button & e->buttons) { - if ((e->timestamp - mousePressTime) < static_cast(QApplication::doubleClickInterval()) && button == mousePressButton) { - type = QEvent::MouseButtonDblClick; - mousePressButton = Qt::NoButton; - } - else { - type = QEvent::MouseButtonPress; - mousePressTime = e->timestamp; - mousePressButton = button; - mousePressX = qt_last_x; - mousePressY = qt_last_y; - } - } - else - type = QEvent::MouseButtonRelease; - } - - if (self->inPopupMode()) { - //popup mouse handling is magical... - mouseWindow = qApp->activePopupWidget(); - - implicit_mouse_grabber.clear(); - //### how should popup mode and implicit mouse grab interact? - - } else if (tlw && app_do_modal && !qt_try_modal(tlw, e->type) ) { - //even if we're blocked by modality, we should deliver the mouse release event.. - //### this code is not completely correct: multiple buttons can be pressed simultaneously - if (!(implicit_mouse_grabber && buttons == Qt::NoButton)) { - //qDebug() << "modal blocked mouse event to" << tlw; - return; - } - } - - // find the tlw if we didn't get it from the plugin - if (!mouseWindow) { - mouseWindow = QApplication::topLevelAt(globalPoint); - } - - if (!mouseWindow && !implicit_mouse_grabber) - mouseWindow = QApplication::desktop(); - - if (mouseWindow && mouseWindow != tlw) { - //we did not get a sensible localPoint from the window system, so let's calculate it - localPoint = mouseWindow->mapFromGlobal(globalPoint); - } - - // which child should have it? - QWidget *mouseWidget = mouseWindow; - if (mouseWindow) { - QWidget *w = mouseWindow->childAt(localPoint); - if (w) { - mouseWidget = w; - } - } - - //handle implicit mouse grab - if (type == QEvent::MouseButtonPress && !implicit_mouse_grabber) { - implicit_mouse_grabber = mouseWidget; - - Q_ASSERT(mouseWindow); - mouseWindow->activateWindow(); //focus - } else if (implicit_mouse_grabber) { - mouseWidget = implicit_mouse_grabber.data(); - mouseWindow = mouseWidget->window(); - if (mouseWindow != tlw) - localPoint = mouseWindow->mapFromGlobal(globalPoint); - } - - Q_ASSERT(mouseWidget); - - //localPoint is local to mouseWindow, but it needs to be local to mouseWidget - localPoint = mouseWidget->mapFrom(mouseWindow, localPoint); - - if (buttons == Qt::NoButton) { - //qDebug() << "resetting mouse grabber"; - implicit_mouse_grabber.clear(); - } - - if (mouseWidget != qt_last_mouse_receiver) { - dispatchEnterLeave(mouseWidget, qt_last_mouse_receiver); - qt_last_mouse_receiver = mouseWidget; - } - - // Remember, we might enter a modal event loop when sending the event, - // so think carefully before adding code below this point. - - // qDebug() << "sending mouse ev." << ev.type() << localPoint << globalPoint << ev.button() << ev.buttons() << mouseWidget << "mouse grabber" << implicit_mouse_grabber; - - QMouseEvent ev(type, localPoint, globalPoint, button, buttons, modifiers); - - QList > cursors = QGraphicsSystemCursorPrivate::getInstances(); - foreach (QWeakPointer cursor, cursors) { - if (cursor) - cursor.data()->pointerEvent(ev); - } - - QApplication::sendSpontaneousEvent(mouseWidget, &ev); -} - - -//### there's a lot of duplicated logic here -- refactoring required! - -void QApplicationPrivate::processWheelEvent(QWindowSystemInterface::WheelEvent *e) -{ -// QPoint localPoint = ev.pos(); - QPoint globalPoint = e->globalPos; -// bool trustLocalPoint = !!tlw; //is there something the local point can be local to? - QWidget *mouseWidget; - - qt_last_x = globalPoint.x(); - qt_last_y = globalPoint.y(); - - QWidget *mouseWindow = e->widget.data(); - - // find the tlw if we didn't get it from the plugin - if (!mouseWindow) { - mouseWindow = QApplication::topLevelAt(globalPoint); - } - - if (!mouseWindow) - return; - - mouseWidget = mouseWindow; - - if (app_do_modal && !qt_try_modal(mouseWindow, e->type) ) { - qDebug() << "modal blocked wheel event" << mouseWindow; - return; - } - QPoint p = mouseWindow->mapFromGlobal(globalPoint); - QWidget *w = mouseWindow->childAt(p); - if (w) { - mouseWidget = w; - p = mouseWidget->mapFromGlobal(globalPoint); - } - - QWheelEvent ev(p, globalPoint, e->delta, buttons, modifiers, - e->orient); - QApplication::sendSpontaneousEvent(mouseWidget, &ev); -} - - - -// Remember, Qt convention is: keyboard state is state *before* - -void QApplicationPrivate::processKeyEvent(QWindowSystemInterface::KeyEvent *e) -{ - QWidget *focusW = 0; - if (self->inPopupMode()) { - QWidget *popupW = qApp->activePopupWidget(); - focusW = popupW->focusWidget() ? popupW->focusWidget() : popupW; - } - if (!focusW) - focusW = QApplication::focusWidget(); - if (!focusW) { - focusW = e->widget.data(); - } - if (!focusW) - focusW = QApplication::activeWindow(); - - //qDebug() << "handleKeyEvent" << hex << e->key() << e->modifiers() << e->text() << "widget" << focusW; - - if (!focusW) - return; - if (app_do_modal && !qt_try_modal(focusW, e->type)) - return; - - modifiers = e->modifiers; - QKeyEvent ev(e->type, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); - QApplication::sendSpontaneousEvent(focusW, &ev); -} - -void QApplicationPrivate::processGeometryChange(QWidget *tlw, const QRect &newRect) -{ - if (!tlw->isWindow()) - return; //geo of native child widgets is controlled by lighthouse - //so we already have sent the events; besides this new rect - //is not mapped to parent - - QRect cr(tlw->geometry()); - - bool isResize = cr.size() != newRect.size(); - bool isMove = cr.topLeft() != newRect.topLeft(); - tlw->data->crect = newRect; - if (isResize) { - QResizeEvent e(tlw->data->crect.size(), cr.size()); - QApplication::sendSpontaneousEvent(tlw, &e); - tlw->update(); - } - - if (isMove) { - //### frame geometry - QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft()); - QApplication::sendSpontaneousEvent(tlw, &e); - } -} - -void QApplicationPrivate::processCloseEvent(QWidget *tlw) -{ - tlw->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); -} - -void QApplicationPrivate::processTouchEvent(QWindowSystemInterface::TouchEvent *e) -{ - translateRawTouchEvent(e->widget.data(), e->devType, e->points); -} - -void QApplicationPrivate::reportScreenCount(int count) -{ - // This operation only makes sense after the QApplication constructor runs - if (QCoreApplication::startingUp()) - return; - - QApplication::desktop()->d_func()->updateScreenList(); - // signal anything listening for creation or deletion of screens - QDesktopWidget *desktop = QApplication::desktop(); - emit desktop->screenCountChanged(count); -} - -void QApplicationPrivate::reportGeometryChange(int screenIndex) -{ - // This operation only makes sense after the QApplication constructor runs - if (QCoreApplication::startingUp()) - return; - - QApplication::desktop()->d_func()->updateScreenList(); - - // signal anything listening for screen geometry changes - QDesktopWidget *desktop = QApplication::desktop(); - emit desktop->resized(screenIndex); - - // make sure maximized and fullscreen windows are updated - QWidgetList list = QApplication::topLevelWidgets(); - for (int i = list.size() - 1; i >= 0; --i) { - QWidget *w = list.at(i); - if (w->isFullScreen()) - w->d_func()->setFullScreenSize_helper(); - else if (w->isMaximized()) - w->d_func()->setMaxWindowState_helper(); - } -} - -void QApplicationPrivate::reportAvailableGeometryChange(int screenIndex) -{ - // This operation only makes sense after the QApplication constructor runs - if (QCoreApplication::startingUp()) - return; - - QApplication::desktop()->d_func()->updateScreenList(); - - // signal anything listening for screen geometry changes - QDesktopWidget *desktop = QApplication::desktop(); - emit desktop->workAreaResized(screenIndex); - - // make sure maximized and fullscreen windows are updated - QWidgetList list = QApplication::topLevelWidgets(); - for (int i = list.size() - 1; i >= 0; --i) { - QWidget *w = list.at(i); - if (w->isFullScreen()) - w->d_func()->setFullScreenSize_helper(); - else if (w->isMaximized()) - w->d_func()->setMaxWindowState_helper(); - } -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index ecfac78..7d98f4d 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -78,7 +78,7 @@ #endif #ifdef Q_WS_QPA #include -#include "QtGui/qplatformintegration_lite.h" +#include "QtGui/qplatformintegration_qpa.h" #endif QT_BEGIN_NAMESPACE diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp new file mode 100644 index 0000000..afa069b --- /dev/null +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -0,0 +1,882 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qapplication_p.h" +#include "qcolormap.h" +#include "qpixmapcache.h" +#if !defined(QT_NO_GLIB) +#include "qeventdispatcher_glib_qpa_p.h" +#endif +#include "qeventdispatcher_qpa_p.h" +#ifndef QT_NO_CURSOR +#include "private/qcursor_p.h" +#endif + +#include "private/qwidget_p.h" + +#include "qgenericpluginfactory_qpa.h" +#include "qplatformintegrationfactory_qpa_p.h" +#include + +#include +#include +#include +#include +#include + +#include "qdesktopwidget_qpa_p.h" + +QT_BEGIN_NAMESPACE + +static QString appName; +static const char *appFont = 0; // application font + +QWidget *qt_button_down = 0; // widget got last button-down + +static bool app_do_modal = false; +extern QWidgetList *qt_modal_stack; // stack of modal widgets + +int qt_last_x = 0; +int qt_last_y = 0; +QPointer qt_last_mouse_receiver = 0; + +static Qt::KeyboardModifiers modifiers = Qt::NoModifier; +static Qt::MouseButtons buttons = Qt::NoButton; +static ulong mousePressTime; +static Qt::MouseButton mousePressButton = Qt::NoButton; +static int mousePressX; +static int mousePressY; +static int mouse_double_click_distance = 5; + +void QApplicationPrivate::processUserEvent(QWindowSystemInterface::UserEvent *e) +{ + switch(e->type) { + case QEvent::MouseButtonDblClick: // if mouse event, calculate appropriate widget and local coordinates + case QEvent::MouseButtonPress: + case QEvent::MouseButtonRelease: + case QEvent::MouseMove: + QApplicationPrivate::processMouseEvent(static_cast(e)); + break; + case QEvent::Wheel: + QApplicationPrivate::processWheelEvent(static_cast(e)); + break; + case QEvent::KeyPress: + case QEvent::KeyRelease: + QApplicationPrivate::processKeyEvent(static_cast(e)); + break; + case QEvent::TouchBegin: + case QEvent::TouchUpdate: + case QEvent::TouchEnd: + QApplicationPrivate::processTouchEvent(static_cast(e)); + break; + default: + qWarning() << "Unknown user input event type:" << e->type; + break; + } +} + +QString QApplicationPrivate::appName() const +{ + return QT_PREPEND_NAMESPACE(appName); +} + +void QApplicationPrivate::createEventDispatcher() +{ + Q_Q(QApplication); +#if !defined(QT_NO_GLIB) + if (qgetenv("QT_NO_GLIB").isEmpty() && QEventDispatcherGlib::versionSupported()) + eventDispatcher = new QLiteEventDispatcherGlib(q); + else +#endif + eventDispatcher = new QEventDispatcherLite(q); +} + +static bool qt_try_modal(QWidget *widget, QEvent::Type type) +{ + QWidget * top = 0; + + if (QApplicationPrivate::tryModalHelper(widget, &top)) + return true; + + bool block_event = false; + bool paint_event = false; + + switch (type) { +#if 0 + case QEvent::Focus: + if (!static_cast(event)->simpleData.get_focus) + break; + // drop through +#endif + case QEvent::MouseButtonPress: // disallow mouse/key events + case QEvent::MouseButtonRelease: + case QEvent::MouseMove: + case QEvent::KeyPress: + case QEvent::KeyRelease: + block_event = true; + break; + default: + break; + } + + if ((block_event || paint_event) && top->parentWidget() == 0) + top->raise(); + + return !block_event; +} + + + +void QApplicationPrivate::enterModal_sys(QWidget *widget) +{ + if (!qt_modal_stack) + qt_modal_stack = new QWidgetList; + qt_modal_stack->insert(0, widget); + app_do_modal = true; +} + +void QApplicationPrivate::leaveModal_sys(QWidget *widget ) +{ + if (qt_modal_stack && qt_modal_stack->removeAll(widget)) { + if (qt_modal_stack->isEmpty()) { + delete qt_modal_stack; + qt_modal_stack = 0; + } + } + app_do_modal = qt_modal_stack != 0; +} + +bool QApplicationPrivate::modalState() +{ + return app_do_modal; +} + +void QApplicationPrivate::closePopup(QWidget *popup) +{ + Q_Q(QApplication); + if (!popupWidgets) + return; + popupWidgets->removeAll(popup); + +//### +// if (popup == qt_popup_down) { +// qt_button_down = 0; +// qt_popup_down = 0; +// } + + if (QApplicationPrivate::popupWidgets->count() == 0) { // this was the last popup + delete QApplicationPrivate::popupWidgets; + QApplicationPrivate::popupWidgets = 0; + + //### replay mouse event? + + //### transfer/release mouse grab + + //### transfer/release keyboard grab + + //give back focus + + if (active_window) { + if (QWidget *fw = active_window->focusWidget()) { + if (fw != QApplication::focusWidget()) { + fw->setFocus(Qt::PopupFocusReason); + } else { + QFocusEvent e(QEvent::FocusIn, Qt::PopupFocusReason); + q->sendEvent(fw, &e); + } + } + } + + } else { + // A popup was closed, so the previous popup gets the focus. + + QWidget* aw = QApplicationPrivate::popupWidgets->last(); + if (QWidget *fw = aw->focusWidget()) + fw->setFocus(Qt::PopupFocusReason); + + //### regrab the keyboard and mouse in case 'popup' lost the grab + + + } + +} + +static int openPopupCount = 0; +void QApplicationPrivate::openPopup(QWidget *popup) +{ + openPopupCount++; + if (!popupWidgets) { // create list + popupWidgets = new QWidgetList; + + /* only grab if you are the first/parent popup */ + //#### ->grabMouse(popup,true); + //#### ->grabKeyboard(popup,true); + //### popupGrabOk = true; + } + popupWidgets->append(popup); // add to end of list + + // popups are not focus-handled by the window system (the first + // popup grabbed the keyboard), so we have to do that manually: A + // new popup gets the focus + if (popup->focusWidget()) { + popup->focusWidget()->setFocus(Qt::PopupFocusReason); + } else if (popupWidgets->count() == 1) { // this was the first popup + if (QWidget *fw = QApplication::focusWidget()) { + QFocusEvent e(QEvent::FocusOut, Qt::PopupFocusReason); + QApplication::sendEvent(fw, &e); + } + } +} + +void QApplicationPrivate::initializeMultitouch_sys() +{ +} + +void QApplicationPrivate::cleanupMultitouch_sys() +{ +} + +void QApplicationPrivate::initializeWidgetPaletteHash() +{ +} + +void QApplication::setCursorFlashTime(int msecs) +{ + QApplicationPrivate::cursor_flash_time = msecs; +} + +int QApplication::cursorFlashTime() +{ + return QApplicationPrivate::cursor_flash_time; +} + +void QApplication::setDoubleClickInterval(int ms) +{ + QApplicationPrivate::mouse_double_click_time = ms; +} + +int QApplication::doubleClickInterval() +{ + return QApplicationPrivate::mouse_double_click_time; +} + +void QApplication::setKeyboardInputInterval(int ms) +{ + QApplicationPrivate::keyboard_input_time = ms; +} + +int QApplication::keyboardInputInterval() +{ + return QApplicationPrivate::keyboard_input_time; +} + +#ifndef QT_NO_WHEELEVENT +void QApplication::setWheelScrollLines(int lines) +{ + QApplicationPrivate::wheel_scroll_lines = lines; +} + +int QApplication::wheelScrollLines() +{ + return QApplicationPrivate::wheel_scroll_lines; +} +#endif + +void QApplication::setEffectEnabled(Qt::UIEffect effect, bool enable) +{ + switch (effect) { + case Qt::UI_AnimateMenu: + QApplicationPrivate::animate_menu = enable; + break; + case Qt::UI_FadeMenu: + if (enable) + QApplicationPrivate::animate_menu = true; + QApplicationPrivate::fade_menu = enable; + break; + case Qt::UI_AnimateCombo: + QApplicationPrivate::animate_combo = enable; + break; + case Qt::UI_AnimateTooltip: + QApplicationPrivate::animate_tooltip = enable; + break; + case Qt::UI_FadeTooltip: + if (enable) + QApplicationPrivate::animate_tooltip = true; + QApplicationPrivate::fade_tooltip = enable; + break; + case Qt::UI_AnimateToolBox: + QApplicationPrivate::animate_toolbox = enable; + break; + default: + QApplicationPrivate::animate_ui = enable; + break; + } +} + +bool QApplication::isEffectEnabled(Qt::UIEffect effect) +{ + if (QColormap::instance().depth() < 16 || !QApplicationPrivate::animate_ui) + return false; + + switch(effect) { + case Qt::UI_AnimateMenu: + return QApplicationPrivate::animate_menu; + case Qt::UI_FadeMenu: + return QApplicationPrivate::fade_menu; + case Qt::UI_AnimateCombo: + return QApplicationPrivate::animate_combo; + case Qt::UI_AnimateTooltip: + return QApplicationPrivate::animate_tooltip; + case Qt::UI_FadeTooltip: + return QApplicationPrivate::fade_tooltip; + case Qt::UI_AnimateToolBox: + return QApplicationPrivate::animate_toolbox; + default: + return QApplicationPrivate::animate_ui; + } +} + +#ifndef QT_NO_CURSOR +void QApplication::setOverrideCursor(const QCursor &cursor) +{ + qApp->d_func()->cursor_list.prepend(cursor); + qt_lite_set_cursor(0, false); +} + +void QApplication::restoreOverrideCursor() +{ + if (qApp->d_func()->cursor_list.isEmpty()) + return; + qApp->d_func()->cursor_list.removeFirst(); + qt_lite_set_cursor(0, false); +} + +#endif// QT_NO_CURSOR + +QWidget *QApplication::topLevelAt(const QPoint &pos) +{ + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + + QList screens = pi->screens(); + QList::const_iterator screen = screens.constBegin(); + QList::const_iterator end = screens.constEnd(); + + // The first screen in a virtual environment should know about all top levels + if (pi->isVirtualDesktop()) { + QWidget *w = (*screen)->topLevelAt(pos); + return w; + } + + while (screen != end) { + if ((*screen)->geometry().contains(pos)) + return (*screen)->topLevelAt(pos); + ++screen; + } + return 0; +} + +void QApplication::beep() +{ +} + +void QApplication::alert(QWidget *, int) +{ +} + +static void init_platform(const QString &name) +{ + QApplicationPrivate::platform_integration = QPlatformIntegrationFactory::create(name); + if (!QApplicationPrivate::platform_integration) { + QStringList keys = QPlatformIntegrationFactory::keys(); + QString fatalMessage = + QString::fromLatin1("Failed to load platform plugin \"%1\". Available platforms are: \n").arg(name); + foreach(QString key, keys) { + fatalMessage.append(key + QString::fromLatin1("\n")); + } + qFatal("%s", fatalMessage.toLocal8Bit().constData()); + + } + +} + + +static void cleanup_platform() +{ + delete QApplicationPrivate::platform_integration; + QApplicationPrivate::platform_integration = 0; +} + +static void init_plugins(const QList pluginList) +{ + for (int i = 0; i < pluginList.count(); ++i) { + QByteArray pluginSpec = pluginList.at(i); + qDebug() << "init_plugins" << i << pluginSpec; + int colonPos = pluginSpec.indexOf(':'); + QObject *plugin; + if (colonPos < 0) + plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec), QString()); + else + plugin = QGenericPluginFactory::create(QLatin1String(pluginSpec.mid(0, colonPos)), + QLatin1String(pluginSpec.mid(colonPos+1))); + qDebug() << " created" << plugin; + } +} + +#ifndef QT_NO_QWS_INPUTMETHODS +class QDummyInputContext : public QInputContext +{ +public: + explicit QDummyInputContext(QObject* parent = 0) : QInputContext(parent) {} + ~QDummyInputContext() {} + QString identifierName() { return QString(); } + QString language() { return QString(); } + + void reset() {} + bool isComposing() const { return false; } + +}; +#endif // QT_NO_QWS_INPUTMETHODS + +void qt_init(QApplicationPrivate *priv, int type) +{ + Q_UNUSED(type); + + qApp->setAttribute(Qt::AA_DontCreateNativeWidgetSiblings); + char *p; + char **argv = priv->argv; + int argc = priv->argc; + + if (argv && *argv) { //apparently, we allow people to pass 0 on the other platforms + p = strrchr(argv[0], '/'); + appName = QString::fromLocal8Bit(p ? p + 1 : argv[0]); + } + + QList pluginList; + QString platformName = qgetenv("QT_LITE_PLATFORM"); + + // Get command line params + + int j = argc ? 1 : 0; + for (int i=1; iargc) { + priv->argv[j] = 0; + priv->argc = j; + } + +#if 0 + QByteArray pluginEnv = qgetenv("QT_LITE_PLUGINS"); + if (!pluginEnv.isEmpty()) { + pluginList.append(pluginEnv.split(';')); + } +#endif + + init_platform(platformName); + init_plugins(pluginList); + + QColormap::initialize(); + QFont::initialize(); +#ifndef QT_NO_CURSOR +// QCursorData::initialize(); +#endif + + qApp->setObjectName(appName); + +#ifndef QT_NO_QWS_INPUTMETHODS + qApp->setInputContext(new QDummyInputContext(qApp)); +#endif +} + +void qt_cleanup() +{ + cleanup_platform(); + + QPixmapCache::clear(); +#ifndef QT_NO_CURSOR + QCursorData::cleanup(); +#endif + QFont::cleanup(); + QColormap::cleanup(); + delete QApplicationPrivate::inputContext; + QApplicationPrivate::inputContext = 0; + + QApplicationPrivate::active_window = 0; //### this should not be necessary +} + + +#ifdef QT3_SUPPORT +void QApplication::setMainWidget(QWidget *mainWidget) +{ + QApplicationPrivate::main_widget = mainWidget; + if (QApplicationPrivate::main_widget && windowIcon().isNull() + && QApplicationPrivate::main_widget->testAttribute(Qt::WA_SetWindowIcon)) + setWindowIcon(QApplicationPrivate::main_widget->windowIcon()); +} +#endif + +void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent *e) +{ + // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); + static QWeakPointer implicit_mouse_grabber; + + QEvent::Type type; + // move first + Qt::MouseButtons stateChange = e->buttons ^ buttons; + if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { + QWindowSystemInterface::MouseEvent * newMouseEvent = new QWindowSystemInterface::MouseEvent(e->widget.data(), e->timestamp, e->localPos, e->globalPos, e->buttons); + QWindowSystemInterfacePrivate::userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop + stateChange = Qt::NoButton; + } + + QWidget * tlw = e->widget.data(); + + QPoint localPoint = e->localPos; + QPoint globalPoint = e->globalPos; + QWidget *mouseWindow = tlw; + + Qt::MouseButton button = Qt::NoButton; + + + if (qt_last_x != globalPoint.x() || qt_last_y != globalPoint.y()) { + type = QEvent::MouseMove; + qt_last_x = globalPoint.x(); + qt_last_y = globalPoint.y(); + if (qAbs(globalPoint.x() - mousePressX) > mouse_double_click_distance|| + qAbs(globalPoint.y() - mousePressY) > mouse_double_click_distance) + mousePressButton = Qt::NoButton; + } + else { // check to see if a new button has been pressed/released + for (int check = Qt::LeftButton; + check <= Qt::XButton2; + check = check << 1) { + if (check & stateChange) { + button = Qt::MouseButton(check); + break; + } + } + if (button == Qt::NoButton) { + // Ignore mouse events that don't change the current state + return; + } + buttons = e->buttons; + if (button & e->buttons) { + if ((e->timestamp - mousePressTime) < static_cast(QApplication::doubleClickInterval()) && button == mousePressButton) { + type = QEvent::MouseButtonDblClick; + mousePressButton = Qt::NoButton; + } + else { + type = QEvent::MouseButtonPress; + mousePressTime = e->timestamp; + mousePressButton = button; + mousePressX = qt_last_x; + mousePressY = qt_last_y; + } + } + else + type = QEvent::MouseButtonRelease; + } + + if (self->inPopupMode()) { + //popup mouse handling is magical... + mouseWindow = qApp->activePopupWidget(); + + implicit_mouse_grabber.clear(); + //### how should popup mode and implicit mouse grab interact? + + } else if (tlw && app_do_modal && !qt_try_modal(tlw, e->type) ) { + //even if we're blocked by modality, we should deliver the mouse release event.. + //### this code is not completely correct: multiple buttons can be pressed simultaneously + if (!(implicit_mouse_grabber && buttons == Qt::NoButton)) { + //qDebug() << "modal blocked mouse event to" << tlw; + return; + } + } + + // find the tlw if we didn't get it from the plugin + if (!mouseWindow) { + mouseWindow = QApplication::topLevelAt(globalPoint); + } + + if (!mouseWindow && !implicit_mouse_grabber) + mouseWindow = QApplication::desktop(); + + if (mouseWindow && mouseWindow != tlw) { + //we did not get a sensible localPoint from the window system, so let's calculate it + localPoint = mouseWindow->mapFromGlobal(globalPoint); + } + + // which child should have it? + QWidget *mouseWidget = mouseWindow; + if (mouseWindow) { + QWidget *w = mouseWindow->childAt(localPoint); + if (w) { + mouseWidget = w; + } + } + + //handle implicit mouse grab + if (type == QEvent::MouseButtonPress && !implicit_mouse_grabber) { + implicit_mouse_grabber = mouseWidget; + + Q_ASSERT(mouseWindow); + mouseWindow->activateWindow(); //focus + } else if (implicit_mouse_grabber) { + mouseWidget = implicit_mouse_grabber.data(); + mouseWindow = mouseWidget->window(); + if (mouseWindow != tlw) + localPoint = mouseWindow->mapFromGlobal(globalPoint); + } + + Q_ASSERT(mouseWidget); + + //localPoint is local to mouseWindow, but it needs to be local to mouseWidget + localPoint = mouseWidget->mapFrom(mouseWindow, localPoint); + + if (buttons == Qt::NoButton) { + //qDebug() << "resetting mouse grabber"; + implicit_mouse_grabber.clear(); + } + + if (mouseWidget != qt_last_mouse_receiver) { + dispatchEnterLeave(mouseWidget, qt_last_mouse_receiver); + qt_last_mouse_receiver = mouseWidget; + } + + // Remember, we might enter a modal event loop when sending the event, + // so think carefully before adding code below this point. + + // qDebug() << "sending mouse ev." << ev.type() << localPoint << globalPoint << ev.button() << ev.buttons() << mouseWidget << "mouse grabber" << implicit_mouse_grabber; + + QMouseEvent ev(type, localPoint, globalPoint, button, buttons, modifiers); + + QList > cursors = QGraphicsSystemCursorPrivate::getInstances(); + foreach (QWeakPointer cursor, cursors) { + if (cursor) + cursor.data()->pointerEvent(ev); + } + + QApplication::sendSpontaneousEvent(mouseWidget, &ev); +} + + +//### there's a lot of duplicated logic here -- refactoring required! + +void QApplicationPrivate::processWheelEvent(QWindowSystemInterface::WheelEvent *e) +{ +// QPoint localPoint = ev.pos(); + QPoint globalPoint = e->globalPos; +// bool trustLocalPoint = !!tlw; //is there something the local point can be local to? + QWidget *mouseWidget; + + qt_last_x = globalPoint.x(); + qt_last_y = globalPoint.y(); + + QWidget *mouseWindow = e->widget.data(); + + // find the tlw if we didn't get it from the plugin + if (!mouseWindow) { + mouseWindow = QApplication::topLevelAt(globalPoint); + } + + if (!mouseWindow) + return; + + mouseWidget = mouseWindow; + + if (app_do_modal && !qt_try_modal(mouseWindow, e->type) ) { + qDebug() << "modal blocked wheel event" << mouseWindow; + return; + } + QPoint p = mouseWindow->mapFromGlobal(globalPoint); + QWidget *w = mouseWindow->childAt(p); + if (w) { + mouseWidget = w; + p = mouseWidget->mapFromGlobal(globalPoint); + } + + QWheelEvent ev(p, globalPoint, e->delta, buttons, modifiers, + e->orient); + QApplication::sendSpontaneousEvent(mouseWidget, &ev); +} + + + +// Remember, Qt convention is: keyboard state is state *before* + +void QApplicationPrivate::processKeyEvent(QWindowSystemInterface::KeyEvent *e) +{ + QWidget *focusW = 0; + if (self->inPopupMode()) { + QWidget *popupW = qApp->activePopupWidget(); + focusW = popupW->focusWidget() ? popupW->focusWidget() : popupW; + } + if (!focusW) + focusW = QApplication::focusWidget(); + if (!focusW) { + focusW = e->widget.data(); + } + if (!focusW) + focusW = QApplication::activeWindow(); + + //qDebug() << "handleKeyEvent" << hex << e->key() << e->modifiers() << e->text() << "widget" << focusW; + + if (!focusW) + return; + if (app_do_modal && !qt_try_modal(focusW, e->type)) + return; + + modifiers = e->modifiers; + QKeyEvent ev(e->type, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); + QApplication::sendSpontaneousEvent(focusW, &ev); +} + +void QApplicationPrivate::processGeometryChange(QWidget *tlw, const QRect &newRect) +{ + if (!tlw->isWindow()) + return; //geo of native child widgets is controlled by lighthouse + //so we already have sent the events; besides this new rect + //is not mapped to parent + + QRect cr(tlw->geometry()); + + bool isResize = cr.size() != newRect.size(); + bool isMove = cr.topLeft() != newRect.topLeft(); + tlw->data->crect = newRect; + if (isResize) { + QResizeEvent e(tlw->data->crect.size(), cr.size()); + QApplication::sendSpontaneousEvent(tlw, &e); + tlw->update(); + } + + if (isMove) { + //### frame geometry + QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft()); + QApplication::sendSpontaneousEvent(tlw, &e); + } +} + +void QApplicationPrivate::processCloseEvent(QWidget *tlw) +{ + tlw->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); +} + +void QApplicationPrivate::processTouchEvent(QWindowSystemInterface::TouchEvent *e) +{ + translateRawTouchEvent(e->widget.data(), e->devType, e->points); +} + +void QApplicationPrivate::reportScreenCount(int count) +{ + // This operation only makes sense after the QApplication constructor runs + if (QCoreApplication::startingUp()) + return; + + QApplication::desktop()->d_func()->updateScreenList(); + // signal anything listening for creation or deletion of screens + QDesktopWidget *desktop = QApplication::desktop(); + emit desktop->screenCountChanged(count); +} + +void QApplicationPrivate::reportGeometryChange(int screenIndex) +{ + // This operation only makes sense after the QApplication constructor runs + if (QCoreApplication::startingUp()) + return; + + QApplication::desktop()->d_func()->updateScreenList(); + + // signal anything listening for screen geometry changes + QDesktopWidget *desktop = QApplication::desktop(); + emit desktop->resized(screenIndex); + + // make sure maximized and fullscreen windows are updated + QWidgetList list = QApplication::topLevelWidgets(); + for (int i = list.size() - 1; i >= 0; --i) { + QWidget *w = list.at(i); + if (w->isFullScreen()) + w->d_func()->setFullScreenSize_helper(); + else if (w->isMaximized()) + w->d_func()->setMaxWindowState_helper(); + } +} + +void QApplicationPrivate::reportAvailableGeometryChange(int screenIndex) +{ + // This operation only makes sense after the QApplication constructor runs + if (QCoreApplication::startingUp()) + return; + + QApplication::desktop()->d_func()->updateScreenList(); + + // signal anything listening for screen geometry changes + QDesktopWidget *desktop = QApplication::desktop(); + emit desktop->workAreaResized(screenIndex); + + // make sure maximized and fullscreen windows are updated + QWidgetList list = QApplication::topLevelWidgets(); + for (int i = list.size() - 1; i >= 0; --i) { + QWidget *w = list.at(i); + if (w->isFullScreen()) + w->d_func()->setFullScreenSize_helper(); + else if (w->isMaximized()) + w->d_func()->setMaxWindowState_helper(); + } +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qclipboard_lite.cpp b/src/gui/kernel/qclipboard_lite.cpp deleted file mode 100644 index 92b9e83..0000000 --- a/src/gui/kernel/qclipboard_lite.cpp +++ /dev/null @@ -1,163 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qclipboard.h" - -#ifndef QT_NO_CLIPBOARD - -#include "qmimedata.h" -#include "qapplication.h" - -QT_BEGIN_NAMESPACE - -QT_USE_NAMESPACE - - -class QClipboardData -{ -public: - QClipboardData(); - ~QClipboardData(); - - void setSource(QMimeData* s) - { - if (s == src) - return; - delete src; - src = s; - } - QMimeData* source() - { return src; } - - void clear(); - -private: - QMimeData* src; -}; - -QClipboardData::QClipboardData() -{ - src = 0; -} - -QClipboardData::~QClipboardData() -{ - delete src; -} - -void QClipboardData::clear() -{ - delete src; - src = 0; -} - - -static QClipboardData *internalCbData = 0; - -static void cleanupClipboardData() -{ - delete internalCbData; - internalCbData = 0; -} - -static QClipboardData *clipboardData() -{ - if (internalCbData == 0) { - internalCbData = new QClipboardData; - qAddPostRoutine(cleanupClipboardData); - } - return internalCbData; -} - - -void QClipboard::clear(Mode mode) -{ - setText(QString(), mode); -} - - -bool QClipboard::event(QEvent *e) -{ - return QObject::event(e); -} - -const QMimeData* QClipboard::mimeData(Mode mode) const -{ - if (mode != Clipboard) return 0; - - QClipboardData *d = clipboardData(); - return d->source(); -} - -void QClipboard::setMimeData(QMimeData* src, Mode mode) -{ - if (mode != Clipboard) return; - - QClipboardData *d = clipboardData(); - - d->setSource(src); - - emitChanged(QClipboard::Clipboard); -} - -bool QClipboard::supportsMode(Mode mode) const -{ - return (mode == Clipboard); -} - -bool QClipboard::ownsMode(Mode mode) const -{ - if (mode == Clipboard) - qWarning("QClipboard::ownsClipboard: UNIMPLEMENTED!"); - return false; -} - -void QClipboard::connectNotify( const char * ) -{ -} - -void QClipboard::ownerDestroyed() -{ -} - -#endif // QT_NO_CLIPBOARD - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qclipboard_qpa.cpp b/src/gui/kernel/qclipboard_qpa.cpp new file mode 100644 index 0000000..92b9e83 --- /dev/null +++ b/src/gui/kernel/qclipboard_qpa.cpp @@ -0,0 +1,163 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qclipboard.h" + +#ifndef QT_NO_CLIPBOARD + +#include "qmimedata.h" +#include "qapplication.h" + +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + + +class QClipboardData +{ +public: + QClipboardData(); + ~QClipboardData(); + + void setSource(QMimeData* s) + { + if (s == src) + return; + delete src; + src = s; + } + QMimeData* source() + { return src; } + + void clear(); + +private: + QMimeData* src; +}; + +QClipboardData::QClipboardData() +{ + src = 0; +} + +QClipboardData::~QClipboardData() +{ + delete src; +} + +void QClipboardData::clear() +{ + delete src; + src = 0; +} + + +static QClipboardData *internalCbData = 0; + +static void cleanupClipboardData() +{ + delete internalCbData; + internalCbData = 0; +} + +static QClipboardData *clipboardData() +{ + if (internalCbData == 0) { + internalCbData = new QClipboardData; + qAddPostRoutine(cleanupClipboardData); + } + return internalCbData; +} + + +void QClipboard::clear(Mode mode) +{ + setText(QString(), mode); +} + + +bool QClipboard::event(QEvent *e) +{ + return QObject::event(e); +} + +const QMimeData* QClipboard::mimeData(Mode mode) const +{ + if (mode != Clipboard) return 0; + + QClipboardData *d = clipboardData(); + return d->source(); +} + +void QClipboard::setMimeData(QMimeData* src, Mode mode) +{ + if (mode != Clipboard) return; + + QClipboardData *d = clipboardData(); + + d->setSource(src); + + emitChanged(QClipboard::Clipboard); +} + +bool QClipboard::supportsMode(Mode mode) const +{ + return (mode == Clipboard); +} + +bool QClipboard::ownsMode(Mode mode) const +{ + if (mode == Clipboard) + qWarning("QClipboard::ownsClipboard: UNIMPLEMENTED!"); + return false; +} + +void QClipboard::connectNotify( const char * ) +{ +} + +void QClipboard::ownerDestroyed() +{ +} + +#endif // QT_NO_CLIPBOARD + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qcursor_lite.cpp b/src/gui/kernel/qcursor_lite.cpp deleted file mode 100644 index a6ae7d3..0000000 --- a/src/gui/kernel/qcursor_lite.cpp +++ /dev/null @@ -1,127 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include - -QT_BEGIN_NAMESPACE - -QT_USE_NAMESPACE - -#ifndef QT_NO_CURSOR - -static int nextCursorId = Qt::BitmapCursor; - -/***************************************************************************** - Internal QCursorData class - *****************************************************************************/ - -QCursorData::QCursorData(Qt::CursorShape s) - : cshape(s), bm(0), bmm(0), hx(0), hy(0), id(s) -{ - ref = 1; -} - -QCursorData::~QCursorData() -{ - delete bm; - delete bmm; -} - - -/***************************************************************************** - Global cursors - *****************************************************************************/ - -extern QCursorData *qt_cursorTable[Qt::LastCursor + 1]; // qcursor.cpp - -int QCursor::handle() const -{ - return d->id; -} - - -QCursorData *QCursorData::setBitmap(const QBitmap &bitmap, const QBitmap &mask, int hotX, int hotY) -{ - if (!QCursorData::initialized) - QCursorData::initialize(); - if (bitmap.depth() != 1 || mask.depth() != 1 || bitmap.size() != mask.size()) { - qWarning("QCursor: Cannot create bitmap cursor; invalid bitmap(s)"); - QCursorData *c = qt_cursorTable[0]; - c->ref.ref(); - return c; - } - QCursorData *d = new QCursorData; - d->bm = new QBitmap(bitmap); - d->bmm = new QBitmap(mask); - d->cshape = Qt::BitmapCursor; - d->id = ++nextCursorId; - d->hx = hotX >= 0 ? hotX : bitmap.width() / 2; - d->hy = hotY >= 0 ? hotY : bitmap.height() / 2; - - return d; -} - -void QCursorData::update() -{ -} - -#endif //QT_NO_CURSOR - -extern int qt_last_x,qt_last_y; - -QPoint QCursor::pos() -{ - return QPoint(qt_last_x, qt_last_y); -} - -void QCursor::setPos(int x, int y) -{ - // Need to check, since some X servers generate null mouse move - // events, causing looping in applications which call setPos() on - // every mouse move event. - // - if (pos() == QPoint(x, y)) - return; -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qcursor_qpa.cpp b/src/gui/kernel/qcursor_qpa.cpp new file mode 100644 index 0000000..a6ae7d3 --- /dev/null +++ b/src/gui/kernel/qcursor_qpa.cpp @@ -0,0 +1,127 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + +#ifndef QT_NO_CURSOR + +static int nextCursorId = Qt::BitmapCursor; + +/***************************************************************************** + Internal QCursorData class + *****************************************************************************/ + +QCursorData::QCursorData(Qt::CursorShape s) + : cshape(s), bm(0), bmm(0), hx(0), hy(0), id(s) +{ + ref = 1; +} + +QCursorData::~QCursorData() +{ + delete bm; + delete bmm; +} + + +/***************************************************************************** + Global cursors + *****************************************************************************/ + +extern QCursorData *qt_cursorTable[Qt::LastCursor + 1]; // qcursor.cpp + +int QCursor::handle() const +{ + return d->id; +} + + +QCursorData *QCursorData::setBitmap(const QBitmap &bitmap, const QBitmap &mask, int hotX, int hotY) +{ + if (!QCursorData::initialized) + QCursorData::initialize(); + if (bitmap.depth() != 1 || mask.depth() != 1 || bitmap.size() != mask.size()) { + qWarning("QCursor: Cannot create bitmap cursor; invalid bitmap(s)"); + QCursorData *c = qt_cursorTable[0]; + c->ref.ref(); + return c; + } + QCursorData *d = new QCursorData; + d->bm = new QBitmap(bitmap); + d->bmm = new QBitmap(mask); + d->cshape = Qt::BitmapCursor; + d->id = ++nextCursorId; + d->hx = hotX >= 0 ? hotX : bitmap.width() / 2; + d->hy = hotY >= 0 ? hotY : bitmap.height() / 2; + + return d; +} + +void QCursorData::update() +{ +} + +#endif //QT_NO_CURSOR + +extern int qt_last_x,qt_last_y; + +QPoint QCursor::pos() +{ + return QPoint(qt_last_x, qt_last_y); +} + +void QCursor::setPos(int x, int y) +{ + // Need to check, since some X servers generate null mouse move + // events, causing looping in applications which call setPos() on + // every mouse move event. + // + if (pos() == QPoint(x, y)) + return; +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qdesktopwidget_lite.cpp b/src/gui/kernel/qdesktopwidget_lite.cpp deleted file mode 100644 index 6ba5dd9..0000000 --- a/src/gui/kernel/qdesktopwidget_lite.cpp +++ /dev/null @@ -1,180 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qdesktopwidget.h" -#include "private/qapplication_p.h" -#include "private/qgraphicssystem_p.h" -#include -#include "private/qwidget_p.h" -#include "private/qdesktopwidget_lite_p.h" -QT_BEGIN_NAMESPACE - -QT_USE_NAMESPACE - -void QDesktopWidgetPrivate::updateScreenList() -{ - QList screenList = QApplicationPrivate::platformIntegration()->screens(); - int targetLength = screenList.length(); - int currentLength = screens.length(); - - // Add or remove screen widgets as necessary - if(currentLength > targetLength) { - QDesktopScreenWidget *screen; - while (currentLength-- > targetLength) { - screen = screens.takeLast(); - delete screen; - } - } - else if (currentLength < targetLength) { - QDesktopScreenWidget *screen; - while (currentLength < targetLength) { - screen = new QDesktopScreenWidget(currentLength++); - screens.append(screen); - } - } - - QRegion virtualGeometry; - bool doVirtualGeometry = QApplicationPrivate::platformIntegration()->isVirtualDesktop(); - - // update the geometry of each screen widget - for (int i = 0; i < screens.length(); i++) { - QRect screenGeometry = screenList.at(i)->geometry(); - screens.at(i)->setGeometry(screenGeometry); - if (doVirtualGeometry) - virtualGeometry += screenGeometry; - } - - virtualScreen.setGeometry(virtualGeometry.boundingRect()); - Q_Q(QDesktopWidget); - q->setGeometry(virtualScreen.geometry()); -} - -QDesktopWidget::QDesktopWidget() - : QWidget(*new QDesktopWidgetPrivate, 0, Qt::Desktop) -{ - Q_D(QDesktopWidget); - setObjectName(QLatin1String("desktop")); - d->updateScreenList(); -} - -QDesktopWidget::~QDesktopWidget() -{ -} - -bool QDesktopWidget::isVirtualDesktop() const -{ - return QApplicationPrivate::platformIntegration()->isVirtualDesktop(); -} - -int QDesktopWidget::primaryScreen() const -{ - return 0; -} - -int QDesktopWidget::numScreens() const -{ - QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - return qMax(pi->screens().size(), 1); -} - -QWidget *QDesktopWidget::screen(int screen) -{ - Q_D(QDesktopWidget); - if (QApplicationPrivate::platformIntegration()->isVirtualDesktop()) - return &d->virtualScreen; - if (screen < 0 || screen >= d->screens.length()) - return d->screens.at(0); - return d->screens.at(screen); -} - -const QRect QDesktopWidget::availableGeometry(int screenNo) const -{ - QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - QList screens = pi->screens(); - if (screenNo == -1) - screenNo = 0; - if (screenNo < 0 || screenNo >= screens.size()) - return QRect(); - else - return screens[screenNo]->availableGeometry(); -} - -const QRect QDesktopWidget::screenGeometry(int screenNo) const -{ - QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - QList screens = pi->screens(); - if (screenNo == -1) - screenNo = 0; - if (screenNo < 0 || screenNo >= screens.size()) - return QRect(); - else - return screens[screenNo]->geometry(); -} - -int QDesktopWidget::screenNumber(const QWidget *w) const -{ - if (!w) - return 0; - - QRect frame = w->frameGeometry(); - if (!w->isWindow()) - frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0))); - const QPoint midpoint = (frame.topLeft() + frame.bottomRight()) / 2; - return screenNumber(midpoint); -} - -int QDesktopWidget::screenNumber(const QPoint &p) const -{ - QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - QList screens = pi->screens(); - - for (int i = 0; i < screens.size(); ++i) - if (screens[i]->geometry().contains(p)) - return i; - - return primaryScreen(); //even better would be closest screen -} - -void QDesktopWidget::resizeEvent(QResizeEvent *) -{ -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qdesktopwidget_lite_p.h b/src/gui/kernel/qdesktopwidget_lite_p.h deleted file mode 100644 index 33e4c98..0000000 --- a/src/gui/kernel/qdesktopwidget_lite_p.h +++ /dev/null @@ -1,76 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of other Qt classes. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#ifndef QDESKTOPWIDGET_LITE_P_H -#define QDESKTOPWIDGET_LITE_P_H - -#include "QDesktopWidget" -#include "private/qwidget_p.h" - -class QDesktopScreenWidget : public QWidget { - Q_OBJECT -public: - QDesktopScreenWidget(int screenNumber = -1) { setWindowFlags(Qt::Desktop); setVisible(false); d_func()->screenNumber = screenNumber; } -}; - -class QDesktopWidgetPrivate : public QWidgetPrivate { - Q_DECLARE_PUBLIC(QDesktopWidget) - -public: - ~QDesktopWidgetPrivate() {foreach(QDesktopScreenWidget *s, screens) delete s; } - void updateScreenList(); - - QList screens; - QDesktopScreenWidget virtualScreen; -}; - -#endif // QDESKTOPWIDGET_LITE_P_H diff --git a/src/gui/kernel/qdesktopwidget_qpa.cpp b/src/gui/kernel/qdesktopwidget_qpa.cpp new file mode 100644 index 0000000..cff05f5 --- /dev/null +++ b/src/gui/kernel/qdesktopwidget_qpa.cpp @@ -0,0 +1,180 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qdesktopwidget.h" +#include "private/qapplication_p.h" +#include "private/qgraphicssystem_p.h" +#include +#include "private/qwidget_p.h" +#include "private/qdesktopwidget_qpa_p.h" +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + +void QDesktopWidgetPrivate::updateScreenList() +{ + QList screenList = QApplicationPrivate::platformIntegration()->screens(); + int targetLength = screenList.length(); + int currentLength = screens.length(); + + // Add or remove screen widgets as necessary + if(currentLength > targetLength) { + QDesktopScreenWidget *screen; + while (currentLength-- > targetLength) { + screen = screens.takeLast(); + delete screen; + } + } + else if (currentLength < targetLength) { + QDesktopScreenWidget *screen; + while (currentLength < targetLength) { + screen = new QDesktopScreenWidget(currentLength++); + screens.append(screen); + } + } + + QRegion virtualGeometry; + bool doVirtualGeometry = QApplicationPrivate::platformIntegration()->isVirtualDesktop(); + + // update the geometry of each screen widget + for (int i = 0; i < screens.length(); i++) { + QRect screenGeometry = screenList.at(i)->geometry(); + screens.at(i)->setGeometry(screenGeometry); + if (doVirtualGeometry) + virtualGeometry += screenGeometry; + } + + virtualScreen.setGeometry(virtualGeometry.boundingRect()); + Q_Q(QDesktopWidget); + q->setGeometry(virtualScreen.geometry()); +} + +QDesktopWidget::QDesktopWidget() + : QWidget(*new QDesktopWidgetPrivate, 0, Qt::Desktop) +{ + Q_D(QDesktopWidget); + setObjectName(QLatin1String("desktop")); + d->updateScreenList(); +} + +QDesktopWidget::~QDesktopWidget() +{ +} + +bool QDesktopWidget::isVirtualDesktop() const +{ + return QApplicationPrivate::platformIntegration()->isVirtualDesktop(); +} + +int QDesktopWidget::primaryScreen() const +{ + return 0; +} + +int QDesktopWidget::numScreens() const +{ + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + return qMax(pi->screens().size(), 1); +} + +QWidget *QDesktopWidget::screen(int screen) +{ + Q_D(QDesktopWidget); + if (QApplicationPrivate::platformIntegration()->isVirtualDesktop()) + return &d->virtualScreen; + if (screen < 0 || screen >= d->screens.length()) + return d->screens.at(0); + return d->screens.at(screen); +} + +const QRect QDesktopWidget::availableGeometry(int screenNo) const +{ + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); + if (screenNo == -1) + screenNo = 0; + if (screenNo < 0 || screenNo >= screens.size()) + return QRect(); + else + return screens[screenNo]->availableGeometry(); +} + +const QRect QDesktopWidget::screenGeometry(int screenNo) const +{ + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); + if (screenNo == -1) + screenNo = 0; + if (screenNo < 0 || screenNo >= screens.size()) + return QRect(); + else + return screens[screenNo]->geometry(); +} + +int QDesktopWidget::screenNumber(const QWidget *w) const +{ + if (!w) + return 0; + + QRect frame = w->frameGeometry(); + if (!w->isWindow()) + frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0))); + const QPoint midpoint = (frame.topLeft() + frame.bottomRight()) / 2; + return screenNumber(midpoint); +} + +int QDesktopWidget::screenNumber(const QPoint &p) const +{ + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); + + for (int i = 0; i < screens.size(); ++i) + if (screens[i]->geometry().contains(p)) + return i; + + return primaryScreen(); //even better would be closest screen +} + +void QDesktopWidget::resizeEvent(QResizeEvent *) +{ +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qdesktopwidget_qpa_p.h b/src/gui/kernel/qdesktopwidget_qpa_p.h new file mode 100644 index 0000000..33e4c98 --- /dev/null +++ b/src/gui/kernel/qdesktopwidget_qpa_p.h @@ -0,0 +1,76 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of other Qt classes. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#ifndef QDESKTOPWIDGET_LITE_P_H +#define QDESKTOPWIDGET_LITE_P_H + +#include "QDesktopWidget" +#include "private/qwidget_p.h" + +class QDesktopScreenWidget : public QWidget { + Q_OBJECT +public: + QDesktopScreenWidget(int screenNumber = -1) { setWindowFlags(Qt::Desktop); setVisible(false); d_func()->screenNumber = screenNumber; } +}; + +class QDesktopWidgetPrivate : public QWidgetPrivate { + Q_DECLARE_PUBLIC(QDesktopWidget) + +public: + ~QDesktopWidgetPrivate() {foreach(QDesktopScreenWidget *s, screens) delete s; } + void updateScreenList(); + + QList screens; + QDesktopScreenWidget virtualScreen; +}; + +#endif // QDESKTOPWIDGET_LITE_P_H diff --git a/src/gui/kernel/qeventdispatcher_glib_lite.cpp b/src/gui/kernel/qeventdispatcher_glib_lite.cpp deleted file mode 100644 index 744925c..0000000 --- a/src/gui/kernel/qeventdispatcher_glib_lite.cpp +++ /dev/null @@ -1,139 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qeventdispatcher_glib_lite_p.h" - -#include "qapplication.h" - -#include "qplatformdefs.h" -#include "qapplication.h" - -#include -#include "qapplication_p.h" - -#include - -QT_BEGIN_NAMESPACE - -struct GUserEventSource -{ - GSource source; - QLiteEventDispatcherGlib *q; -}; - -static gboolean userEventSourcePrepare(GSource *s, gint *timeout) -{ - Q_UNUSED(s) - Q_UNUSED(timeout) - - return QWindowSystemInterfacePrivate::userEventsQueued() > 0; -} - -static gboolean userEventSourceCheck(GSource *source) -{ - return userEventSourcePrepare(source, 0); -} - -static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) -{ - GUserEventSource * source = reinterpret_cast(s); - - QWindowSystemInterface::UserEvent * event; - while (QWindowSystemInterfacePrivate::userEventsQueued()) { - event = QWindowSystemInterfacePrivate::getUserEvent(); - if (!event) - break; - - // send through event filter - if (source->q->filterEvent(event)) { - delete event; - continue; - } - QApplicationPrivate::processUserEvent(event); - delete event; - } - - return true; -} - - -static GSourceFuncs userEventSourceFuncs = { - userEventSourcePrepare, - userEventSourceCheck, - userEventSourceDispatch, - NULL, - NULL, - NULL -}; - -QLiteEventDispatcherGlibPrivate::QLiteEventDispatcherGlibPrivate(GMainContext *context) - : QEventDispatcherGlibPrivate(context) -{ - userEventSource = reinterpret_cast(g_source_new(&userEventSourceFuncs, - sizeof(GUserEventSource))); - userEventSource->q = 0; - g_source_set_can_recurse(&userEventSource->source, true); - g_source_attach(&userEventSource->source, mainContext); -} - - -QLiteEventDispatcherGlib::QLiteEventDispatcherGlib(QObject *parent) - : QEventDispatcherGlib(*new QLiteEventDispatcherGlibPrivate, parent) -{ - Q_D(QLiteEventDispatcherGlib); - d->userEventSource->q = this; -} - -QLiteEventDispatcherGlib::~QLiteEventDispatcherGlib() -{ - Q_D(QLiteEventDispatcherGlib); - - g_source_destroy(&d->userEventSource->source); - g_source_unref(&d->userEventSource->source); - d->userEventSource = 0; -} - -bool QLiteEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) -{ - return QEventDispatcherGlib::processEvents(flags); -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qeventdispatcher_glib_lite_p.h b/src/gui/kernel/qeventdispatcher_glib_lite_p.h deleted file mode 100644 index 6ebdb25..0000000 --- a/src/gui/kernel/qeventdispatcher_glib_lite_p.h +++ /dev/null @@ -1,88 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QLITEEVENTDISPATCHER_GLIB_P_H -#define QLITEEVENTDISPATCHER_GLIB_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists for the convenience -// of the QLibrary class. This header file may change from -// version to version without notice, or even be removed. -// -// We mean it. -// - -#include - -typedef struct _GMainContext GMainContext; - -QT_BEGIN_NAMESPACE -class QLiteEventDispatcherGlibPrivate; - -class QLiteEventDispatcherGlib : public QEventDispatcherGlib -{ - Q_OBJECT - Q_DECLARE_PRIVATE(QLiteEventDispatcherGlib) - -public: - explicit QLiteEventDispatcherGlib(QObject *parent = 0); - ~QLiteEventDispatcherGlib(); - - bool processEvents(QEventLoop::ProcessEventsFlags flags); -}; - -struct GUserEventSource; - -class QLiteEventDispatcherGlibPrivate : public QEventDispatcherGlibPrivate -{ - Q_DECLARE_PUBLIC(QLiteEventDispatcherGlib) -public: - QLiteEventDispatcherGlibPrivate(GMainContext *context = 0); - GUserEventSource *userEventSource; -}; - - -QT_END_NAMESPACE - -#endif // QLITEEVENTDISPATCHER_GLIB_P_H diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp new file mode 100644 index 0000000..f45902c --- /dev/null +++ b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp @@ -0,0 +1,139 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qeventdispatcher_glib_qpa_p.h" + +#include "qapplication.h" + +#include "qplatformdefs.h" +#include "qapplication.h" + +#include +#include "qapplication_p.h" + +#include + +QT_BEGIN_NAMESPACE + +struct GUserEventSource +{ + GSource source; + QLiteEventDispatcherGlib *q; +}; + +static gboolean userEventSourcePrepare(GSource *s, gint *timeout) +{ + Q_UNUSED(s) + Q_UNUSED(timeout) + + return QWindowSystemInterfacePrivate::userEventsQueued() > 0; +} + +static gboolean userEventSourceCheck(GSource *source) +{ + return userEventSourcePrepare(source, 0); +} + +static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) +{ + GUserEventSource * source = reinterpret_cast(s); + + QWindowSystemInterface::UserEvent * event; + while (QWindowSystemInterfacePrivate::userEventsQueued()) { + event = QWindowSystemInterfacePrivate::getUserEvent(); + if (!event) + break; + + // send through event filter + if (source->q->filterEvent(event)) { + delete event; + continue; + } + QApplicationPrivate::processUserEvent(event); + delete event; + } + + return true; +} + + +static GSourceFuncs userEventSourceFuncs = { + userEventSourcePrepare, + userEventSourceCheck, + userEventSourceDispatch, + NULL, + NULL, + NULL +}; + +QLiteEventDispatcherGlibPrivate::QLiteEventDispatcherGlibPrivate(GMainContext *context) + : QEventDispatcherGlibPrivate(context) +{ + userEventSource = reinterpret_cast(g_source_new(&userEventSourceFuncs, + sizeof(GUserEventSource))); + userEventSource->q = 0; + g_source_set_can_recurse(&userEventSource->source, true); + g_source_attach(&userEventSource->source, mainContext); +} + + +QLiteEventDispatcherGlib::QLiteEventDispatcherGlib(QObject *parent) + : QEventDispatcherGlib(*new QLiteEventDispatcherGlibPrivate, parent) +{ + Q_D(QLiteEventDispatcherGlib); + d->userEventSource->q = this; +} + +QLiteEventDispatcherGlib::~QLiteEventDispatcherGlib() +{ + Q_D(QLiteEventDispatcherGlib); + + g_source_destroy(&d->userEventSource->source); + g_source_unref(&d->userEventSource->source); + d->userEventSource = 0; +} + +bool QLiteEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) +{ + return QEventDispatcherGlib::processEvents(flags); +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa_p.h b/src/gui/kernel/qeventdispatcher_glib_qpa_p.h new file mode 100644 index 0000000..6ebdb25 --- /dev/null +++ b/src/gui/kernel/qeventdispatcher_glib_qpa_p.h @@ -0,0 +1,88 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QLITEEVENTDISPATCHER_GLIB_P_H +#define QLITEEVENTDISPATCHER_GLIB_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists for the convenience +// of the QLibrary class. This header file may change from +// version to version without notice, or even be removed. +// +// We mean it. +// + +#include + +typedef struct _GMainContext GMainContext; + +QT_BEGIN_NAMESPACE +class QLiteEventDispatcherGlibPrivate; + +class QLiteEventDispatcherGlib : public QEventDispatcherGlib +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QLiteEventDispatcherGlib) + +public: + explicit QLiteEventDispatcherGlib(QObject *parent = 0); + ~QLiteEventDispatcherGlib(); + + bool processEvents(QEventLoop::ProcessEventsFlags flags); +}; + +struct GUserEventSource; + +class QLiteEventDispatcherGlibPrivate : public QEventDispatcherGlibPrivate +{ + Q_DECLARE_PUBLIC(QLiteEventDispatcherGlib) +public: + QLiteEventDispatcherGlibPrivate(GMainContext *context = 0); + GUserEventSource *userEventSource; +}; + + +QT_END_NAMESPACE + +#endif // QLITEEVENTDISPATCHER_GLIB_P_H diff --git a/src/gui/kernel/qeventdispatcher_lite.cpp b/src/gui/kernel/qeventdispatcher_lite.cpp deleted file mode 100644 index 5b99a2f..0000000 --- a/src/gui/kernel/qeventdispatcher_lite.cpp +++ /dev/null @@ -1,144 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qplatformdefs.h" -#include "qapplication.h" -#include "qeventdispatcher_lite_p.h" -#include "private/qeventdispatcher_unix_p.h" -#include "qapplication_p.h" -#ifndef QT_NO_THREAD -# include "qmutex.h" -#endif -#include - -#include -QT_BEGIN_NAMESPACE - -QT_USE_NAMESPACE - -class QEventDispatcherLitePrivate : public QEventDispatcherUNIXPrivate -{ - Q_DECLARE_PUBLIC(QEventDispatcherLite) -public: - inline QEventDispatcherLitePrivate() - { } -}; - - -QEventDispatcherLite::QEventDispatcherLite(QObject *parent) - : QEventDispatcherUNIX(*new QEventDispatcherLitePrivate, parent) -{ } - -QEventDispatcherLite::~QEventDispatcherLite() -{ } - - - -//#define ZERO_FOR_THE_MOMENT - -bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) -{ - Q_D(QEventDispatcherLite); - int nevents = 0; - - // handle gui and posted events - d->interrupt = false; - QApplication::sendPostedEvents(); - - while (!d->interrupt) { // also flushes output buffer ###can be optimized - QWindowSystemInterface::UserEvent *event; - if (!(flags & QEventLoop::ExcludeUserInputEvents) - && QWindowSystemInterfacePrivate::userEventsQueued() > 0) { - // process a pending user input event - event = QWindowSystemInterfacePrivate::getUserEvent(); - if (!event) - break; - } else { - break; - } - - if (filterEvent(event)) { - delete event; - continue; - } - nevents++; - - QApplicationPrivate::processUserEvent(event); - delete event; - } - - if (!d->interrupt) { - if (QEventDispatcherUNIX::processEvents(flags)) - return true; - } - return (nevents > 0); -} - -bool QEventDispatcherLite::hasPendingEvents() -{ - extern uint qGlobalPostedEventsCount(); // from qapplication.cpp - return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::userEventsQueued();; -} - -void QEventDispatcherLite::startingUp() -{ - -} - -void QEventDispatcherLite::closingDown() -{ - -} - -void QEventDispatcherLite::flush() -{ - if(qApp) - qApp->sendPostedEvents(); -} - - -int QEventDispatcherLite::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - timeval *timeout) -{ - return QEventDispatcherUNIX::select(nfds, readfds, writefds, exceptfds, timeout); -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qeventdispatcher_lite_p.h b/src/gui/kernel/qeventdispatcher_lite_p.h deleted file mode 100644 index c098e6c..0000000 --- a/src/gui/kernel/qeventdispatcher_lite_p.h +++ /dev/null @@ -1,86 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QEVENTDISPATCHER_LITE_P_H -#define QEVENTDISPATCHER_LITE_P_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include "private/qeventdispatcher_unix_p.h" - -QT_BEGIN_NAMESPACE - -class QEventDispatcherLitePrivate; - -class QEventDispatcherLite : public QEventDispatcherUNIX -{ - Q_OBJECT - Q_DECLARE_PRIVATE(QEventDispatcherLite) - -public: - explicit QEventDispatcherLite(QObject *parent = 0); - ~QEventDispatcherLite(); - - bool processEvents(QEventLoop::ProcessEventsFlags flags); - bool hasPendingEvents(); - - void flush(); - - void startingUp(); - void closingDown(); - -protected: - int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, - timeval *timeout); -}; - -QT_END_NAMESPACE - -#endif // QEVENTDISPATCHER_LITE_P_H diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp new file mode 100644 index 0000000..c6b5636 --- /dev/null +++ b/src/gui/kernel/qeventdispatcher_qpa.cpp @@ -0,0 +1,144 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformdefs.h" +#include "qapplication.h" +#include "qeventdispatcher_qpa_p.h" +#include "private/qeventdispatcher_unix_p.h" +#include "qapplication_p.h" +#ifndef QT_NO_THREAD +# include "qmutex.h" +#endif +#include + +#include +QT_BEGIN_NAMESPACE + +QT_USE_NAMESPACE + +class QEventDispatcherLitePrivate : public QEventDispatcherUNIXPrivate +{ + Q_DECLARE_PUBLIC(QEventDispatcherLite) +public: + inline QEventDispatcherLitePrivate() + { } +}; + + +QEventDispatcherLite::QEventDispatcherLite(QObject *parent) + : QEventDispatcherUNIX(*new QEventDispatcherLitePrivate, parent) +{ } + +QEventDispatcherLite::~QEventDispatcherLite() +{ } + + + +//#define ZERO_FOR_THE_MOMENT + +bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) +{ + Q_D(QEventDispatcherLite); + int nevents = 0; + + // handle gui and posted events + d->interrupt = false; + QApplication::sendPostedEvents(); + + while (!d->interrupt) { // also flushes output buffer ###can be optimized + QWindowSystemInterface::UserEvent *event; + if (!(flags & QEventLoop::ExcludeUserInputEvents) + && QWindowSystemInterfacePrivate::userEventsQueued() > 0) { + // process a pending user input event + event = QWindowSystemInterfacePrivate::getUserEvent(); + if (!event) + break; + } else { + break; + } + + if (filterEvent(event)) { + delete event; + continue; + } + nevents++; + + QApplicationPrivate::processUserEvent(event); + delete event; + } + + if (!d->interrupt) { + if (QEventDispatcherUNIX::processEvents(flags)) + return true; + } + return (nevents > 0); +} + +bool QEventDispatcherLite::hasPendingEvents() +{ + extern uint qGlobalPostedEventsCount(); // from qapplication.cpp + return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::userEventsQueued();; +} + +void QEventDispatcherLite::startingUp() +{ + +} + +void QEventDispatcherLite::closingDown() +{ + +} + +void QEventDispatcherLite::flush() +{ + if(qApp) + qApp->sendPostedEvents(); +} + + +int QEventDispatcherLite::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + timeval *timeout) +{ + return QEventDispatcherUNIX::select(nfds, readfds, writefds, exceptfds, timeout); +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qeventdispatcher_qpa_p.h b/src/gui/kernel/qeventdispatcher_qpa_p.h new file mode 100644 index 0000000..c098e6c --- /dev/null +++ b/src/gui/kernel/qeventdispatcher_qpa_p.h @@ -0,0 +1,86 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QEVENTDISPATCHER_LITE_P_H +#define QEVENTDISPATCHER_LITE_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include "private/qeventdispatcher_unix_p.h" + +QT_BEGIN_NAMESPACE + +class QEventDispatcherLitePrivate; + +class QEventDispatcherLite : public QEventDispatcherUNIX +{ + Q_OBJECT + Q_DECLARE_PRIVATE(QEventDispatcherLite) + +public: + explicit QEventDispatcherLite(QObject *parent = 0); + ~QEventDispatcherLite(); + + bool processEvents(QEventLoop::ProcessEventsFlags flags); + bool hasPendingEvents(); + + void flush(); + + void startingUp(); + void closingDown(); + +protected: + int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, + timeval *timeout); +}; + +QT_END_NAMESPACE + +#endif // QEVENTDISPATCHER_LITE_P_H diff --git a/src/gui/kernel/qgenericplugin_lite.cpp b/src/gui/kernel/qgenericplugin_lite.cpp deleted file mode 100644 index 6a0fdb6..0000000 --- a/src/gui/kernel/qgenericplugin_lite.cpp +++ /dev/null @@ -1,112 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgenericplugin_lite.h" - -#ifndef QT_NO_LIBRARY - -QT_BEGIN_NAMESPACE - -/*! - \class QGenericPlugin - \ingroup plugins - \ingroup lite - - \brief The QGenericPlugin class is an abstract base class for - window-system related plugins in Qt for Embedded Linux LITE. - - Note that this class is only available in \l{Qt for Embedded Linux LITE}. - - A mouse plugin can be created by subclassing - QGenericPlugin and reimplementing the pure virtual keys() and - create() functions. By exporting the derived class using the - Q_EXPORT_PLUGIN2() macro, The default implementation of the - QGenericPluginFactory class will automatically detect the plugin and - load the driver into the server application at run-time. See \l - {How to Create Qt Plugins} for details. - - \sa QGenericPluginFactory -*/ - -/*! - \fn QStringList QGenericPlugin::keys() const - - Implement this function to return the list of valid keys, i.e. the - drivers supported by this plugin. - - \sa create() -*/ - -/*! - Constructs a plugin with the given \a parent. - - Note that this constructor is invoked automatically by the - Q_EXPORT_PLUGIN2() macro, so there is no need for calling it - explicitly. -*/ -QGenericPlugin::QGenericPlugin(QObject *parent) - : QObject(parent) -{ -} - -/*! - Destroys the plugin. - - Note that Qt destroys a plugin automatically when it is no longer - used, so there is no need for calling the destructor explicitly. -*/ -QGenericPlugin::~QGenericPlugin() -{ -} - -/*! - \fn QObject* QGenericPlugin::create(const QString &key, const QString& specification) - - Implement this function to create a driver matching the type - specified by the given \a key and \a specification parameters. Note that - keys are case-insensitive. - - \sa keys() -*/ - -QT_END_NAMESPACE - -#endif // QT_NO_LIBRARY diff --git a/src/gui/kernel/qgenericplugin_lite.h b/src/gui/kernel/qgenericplugin_lite.h deleted file mode 100644 index a468a9f..0000000 --- a/src/gui/kernel/qgenericplugin_lite.h +++ /dev/null @@ -1,84 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGENERICPLUGIN_LITE_H -#define QGENERICPLUGIN_LITE_H - -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -#ifndef QT_NO_LIBRARY - -//class QGenericObject; ????? - - struct Q_GUI_EXPORT QGenericPluginFactoryInterface : public QFactoryInterface -{ - virtual QObject* create(const QString &name, const QString &spec) = 0; -}; - -#define QGenericPluginFactoryInterface_iid "com.trolltech.Qt.QGenericPluginFactoryInterface" -Q_DECLARE_INTERFACE(QGenericPluginFactoryInterface, QGenericPluginFactoryInterface_iid) - -class Q_GUI_EXPORT QGenericPlugin : public QObject, public QGenericPluginFactoryInterface -{ - Q_OBJECT - Q_INTERFACES(QGenericPluginFactoryInterface:QFactoryInterface) -public: - explicit QGenericPlugin(QObject *parent = 0); - ~QGenericPlugin(); - - virtual QStringList keys() const = 0; - virtual QObject* create(const QString& name, const QString &spec) = 0; -}; - -#endif // QT_NO_LIBRARY - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QMOUSEDRIVERPLUGIN_QWS_H diff --git a/src/gui/kernel/qgenericplugin_qpa.cpp b/src/gui/kernel/qgenericplugin_qpa.cpp new file mode 100644 index 0000000..6290b40 --- /dev/null +++ b/src/gui/kernel/qgenericplugin_qpa.cpp @@ -0,0 +1,112 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgenericplugin_qpa.h" + +#ifndef QT_NO_LIBRARY + +QT_BEGIN_NAMESPACE + +/*! + \class QGenericPlugin + \ingroup plugins + \ingroup lite + + \brief The QGenericPlugin class is an abstract base class for + window-system related plugins in Qt for Embedded Linux LITE. + + Note that this class is only available in \l{Qt for Embedded Linux LITE}. + + A mouse plugin can be created by subclassing + QGenericPlugin and reimplementing the pure virtual keys() and + create() functions. By exporting the derived class using the + Q_EXPORT_PLUGIN2() macro, The default implementation of the + QGenericPluginFactory class will automatically detect the plugin and + load the driver into the server application at run-time. See \l + {How to Create Qt Plugins} for details. + + \sa QGenericPluginFactory +*/ + +/*! + \fn QStringList QGenericPlugin::keys() const + + Implement this function to return the list of valid keys, i.e. the + drivers supported by this plugin. + + \sa create() +*/ + +/*! + Constructs a plugin with the given \a parent. + + Note that this constructor is invoked automatically by the + Q_EXPORT_PLUGIN2() macro, so there is no need for calling it + explicitly. +*/ +QGenericPlugin::QGenericPlugin(QObject *parent) + : QObject(parent) +{ +} + +/*! + Destroys the plugin. + + Note that Qt destroys a plugin automatically when it is no longer + used, so there is no need for calling the destructor explicitly. +*/ +QGenericPlugin::~QGenericPlugin() +{ +} + +/*! + \fn QObject* QGenericPlugin::create(const QString &key, const QString& specification) + + Implement this function to create a driver matching the type + specified by the given \a key and \a specification parameters. Note that + keys are case-insensitive. + + \sa keys() +*/ + +QT_END_NAMESPACE + +#endif // QT_NO_LIBRARY diff --git a/src/gui/kernel/qgenericplugin_qpa.h b/src/gui/kernel/qgenericplugin_qpa.h new file mode 100644 index 0000000..a468a9f --- /dev/null +++ b/src/gui/kernel/qgenericplugin_qpa.h @@ -0,0 +1,84 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGENERICPLUGIN_LITE_H +#define QGENERICPLUGIN_LITE_H + +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +#ifndef QT_NO_LIBRARY + +//class QGenericObject; ????? + + struct Q_GUI_EXPORT QGenericPluginFactoryInterface : public QFactoryInterface +{ + virtual QObject* create(const QString &name, const QString &spec) = 0; +}; + +#define QGenericPluginFactoryInterface_iid "com.trolltech.Qt.QGenericPluginFactoryInterface" +Q_DECLARE_INTERFACE(QGenericPluginFactoryInterface, QGenericPluginFactoryInterface_iid) + +class Q_GUI_EXPORT QGenericPlugin : public QObject, public QGenericPluginFactoryInterface +{ + Q_OBJECT + Q_INTERFACES(QGenericPluginFactoryInterface:QFactoryInterface) +public: + explicit QGenericPlugin(QObject *parent = 0); + ~QGenericPlugin(); + + virtual QStringList keys() const = 0; + virtual QObject* create(const QString& name, const QString &spec) = 0; +}; + +#endif // QT_NO_LIBRARY + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QMOUSEDRIVERPLUGIN_QWS_H diff --git a/src/gui/kernel/qgenericpluginfactory_lite.cpp b/src/gui/kernel/qgenericpluginfactory_lite.cpp deleted file mode 100644 index 76accbe..0000000 --- a/src/gui/kernel/qgenericpluginfactory_lite.cpp +++ /dev/null @@ -1,115 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qgenericpluginfactory_lite.h" - -#include "qapplication.h" -#include "private/qfactoryloader_p.h" -#include "qgenericplugin_lite.h" -#include "qdebug.h" - -QT_BEGIN_NAMESPACE - -#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) -#ifndef QT_NO_LIBRARY - -Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, - (QGenericPluginFactoryInterface_iid, - QLatin1String("/generic"), Qt::CaseInsensitive)) - -#endif //QT_NO_LIBRARY -#endif //QT_MAKEDLL - -/*! - \class QGenericPluginFactory - \ingroup qws - - \brief The QGenericPluginFactory class creates window-system - related plugin drivers in Qt for Embedded Linux LITE. - - Note that this class is only available in \l{Qt for Embedded Linux LITE}. - - - \sa QGenericPlugin -*/ - -/*! - Creates the driver specified by \a key, using the given \a specification. - - Note that the keys are case-insensitive. - - \sa keys() -*/ -QObject *QGenericPluginFactory::create(const QString& key, const QString &specification) -{ - QString driver = key.toLower(); - -#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) -#ifndef QT_NO_LIBRARY - if (QGenericPluginFactoryInterface *factory = qobject_cast(loader()->instance(driver))) - return factory->create(driver, specification); -#endif -#endif - return 0; -} - -/*! - Returns the list of valid keys, i.e. the available mouse drivers. - - \sa create() -*/ -QStringList QGenericPluginFactory::keys() -{ - QStringList list; - -#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) -#ifndef QT_NO_LIBRARY - QStringList plugins = loader()->keys(); - for (int i = 0; i < plugins.size(); ++i) { - if (!list.contains(plugins.at(i))) - list += plugins.at(i); - } -#endif //QT_NO_LIBRARY -#endif //QT_MAKEDLL - return list; -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qgenericpluginfactory_lite.h b/src/gui/kernel/qgenericpluginfactory_lite.h deleted file mode 100644 index 86886f1..0000000 --- a/src/gui/kernel/qgenericpluginfactory_lite.h +++ /dev/null @@ -1,67 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QGENERICPLUGINFACTORY_LITE_H -#define QGENERICPLUGINFACTORY_LITE_H - -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -class QString; -class QObject; - -class Q_GUI_EXPORT QGenericPluginFactory -{ -public: - static QStringList keys(); - static QObject *create(const QString&, const QString &); -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QGENERICPLUGINFACTORY_QWS_H diff --git a/src/gui/kernel/qgenericpluginfactory_qpa.cpp b/src/gui/kernel/qgenericpluginfactory_qpa.cpp new file mode 100644 index 0000000..dcc7cc7 --- /dev/null +++ b/src/gui/kernel/qgenericpluginfactory_qpa.cpp @@ -0,0 +1,115 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qgenericpluginfactory_qpa.h" + +#include "qapplication.h" +#include "private/qfactoryloader_p.h" +#include "qgenericplugin_qpa.h" +#include "qdebug.h" + +QT_BEGIN_NAMESPACE + +#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) +#ifndef QT_NO_LIBRARY + +Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, + (QGenericPluginFactoryInterface_iid, + QLatin1String("/generic"), Qt::CaseInsensitive)) + +#endif //QT_NO_LIBRARY +#endif //QT_MAKEDLL + +/*! + \class QGenericPluginFactory + \ingroup qws + + \brief The QGenericPluginFactory class creates window-system + related plugin drivers in Qt for Embedded Linux LITE. + + Note that this class is only available in \l{Qt for Embedded Linux LITE}. + + + \sa QGenericPlugin +*/ + +/*! + Creates the driver specified by \a key, using the given \a specification. + + Note that the keys are case-insensitive. + + \sa keys() +*/ +QObject *QGenericPluginFactory::create(const QString& key, const QString &specification) +{ + QString driver = key.toLower(); + +#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) +#ifndef QT_NO_LIBRARY + if (QGenericPluginFactoryInterface *factory = qobject_cast(loader()->instance(driver))) + return factory->create(driver, specification); +#endif +#endif + return 0; +} + +/*! + Returns the list of valid keys, i.e. the available mouse drivers. + + \sa create() +*/ +QStringList QGenericPluginFactory::keys() +{ + QStringList list; + +#if !defined(Q_OS_WIN32) || defined(QT_MAKEDLL) +#ifndef QT_NO_LIBRARY + QStringList plugins = loader()->keys(); + for (int i = 0; i < plugins.size(); ++i) { + if (!list.contains(plugins.at(i))) + list += plugins.at(i); + } +#endif //QT_NO_LIBRARY +#endif //QT_MAKEDLL + return list; +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qgenericpluginfactory_qpa.h b/src/gui/kernel/qgenericpluginfactory_qpa.h new file mode 100644 index 0000000..86886f1 --- /dev/null +++ b/src/gui/kernel/qgenericpluginfactory_qpa.h @@ -0,0 +1,67 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QGENERICPLUGINFACTORY_LITE_H +#define QGENERICPLUGINFACTORY_LITE_H + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class QString; +class QObject; + +class Q_GUI_EXPORT QGenericPluginFactory +{ +public: + static QStringList keys(); + static QObject *create(const QString&, const QString &); +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QGENERICPLUGINFACTORY_QWS_H diff --git a/src/gui/kernel/qplatformglcontext_lite.h b/src/gui/kernel/qplatformglcontext_lite.h deleted file mode 100644 index 8aeb635..0000000 --- a/src/gui/kernel/qplatformglcontext_lite.h +++ /dev/null @@ -1,71 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenGL module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORM_GL_CONTEXT_H -#define QPLATFORM_GL_CONTEXT_H - -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -class Q_OPENGL_EXPORT QPlatformGLContext -{ -public: - //QPlatformGLContext(); - //virtual ~QPlatformGLContext(); - - //virtual bool create(QPaintDevice* device, QPlatformGLContext* shareContext) = 0; - - virtual void makeCurrent() = 0; - virtual void doneCurrent() = 0; - virtual void swapBuffers() = 0; - virtual void* getProcAddress(const QString& procName) = 0; - -}; - -QT_END_NAMESPACE - -QT_END_HEADER - - -#endif // QPLATFORM_GL_INTEGRATION_P_H diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h new file mode 100644 index 0000000..8aeb635 --- /dev/null +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -0,0 +1,71 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORM_GL_CONTEXT_H +#define QPLATFORM_GL_CONTEXT_H + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class Q_OPENGL_EXPORT QPlatformGLContext +{ +public: + //QPlatformGLContext(); + //virtual ~QPlatformGLContext(); + + //virtual bool create(QPaintDevice* device, QPlatformGLContext* shareContext) = 0; + + virtual void makeCurrent() = 0; + virtual void doneCurrent() = 0; + virtual void swapBuffers() = 0; + virtual void* getProcAddress(const QString& procName) = 0; + +}; + +QT_END_NAMESPACE + +QT_END_HEADER + + +#endif // QPLATFORM_GL_INTEGRATION_P_H diff --git a/src/gui/kernel/qplatformintegration_lite.cpp b/src/gui/kernel/qplatformintegration_lite.cpp deleted file mode 100644 index 6499570..0000000 --- a/src/gui/kernel/qplatformintegration_lite.cpp +++ /dev/null @@ -1,64 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qplatformintegration_lite.h" - -QT_BEGIN_NAMESPACE - -QBlittable *QPlatformIntegration::createBlittable(const QSize &) const -{ return 0; } - -QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, int height) const -{ - Q_UNUSED(window); - Q_UNUSED(x); - Q_UNUSED(y); - Q_UNUSED(width); - Q_UNUSED(height); - return QPixmap(); -} - -bool QPlatformIntegration::hasOpenGL() const -{ - return false; -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_lite.h b/src/gui/kernel/qplatformintegration_lite.h deleted file mode 100644 index 88c3049..0000000 --- a/src/gui/kernel/qplatformintegration_lite.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORMINTEGRATION_H -#define QPLATFORMINTEGRATION_H - -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -class Q_GUI_EXPORT QPlatformIntegration -{ -public: - virtual ~QPlatformIntegration() { }; - -// GraphicsSystem functions - virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; - virtual QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const = 0; - virtual QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const = 0; - virtual QBlittable *createBlittable(const QSize &size) const; - virtual void moveToScreen(QWidget *window, int screen) {Q_UNUSED(window); Q_UNUSED(screen);} - -// Window System functions - virtual QList screens() const = 0; - virtual bool isVirtualDesktop() { return false; } - virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; - - virtual bool hasOpenGL() const; -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPLATFORMINTEGRATION_H diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp new file mode 100644 index 0000000..8666911 --- /dev/null +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -0,0 +1,64 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformintegration_qpa.h" + +QT_BEGIN_NAMESPACE + +QBlittable *QPlatformIntegration::createBlittable(const QSize &) const +{ return 0; } + +QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, int height) const +{ + Q_UNUSED(window); + Q_UNUSED(x); + Q_UNUSED(y); + Q_UNUSED(width); + Q_UNUSED(height); + return QPixmap(); +} + +bool QPlatformIntegration::hasOpenGL() const +{ + return false; +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h new file mode 100644 index 0000000..f80b0ae --- /dev/null +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATION_H +#define QPLATFORMINTEGRATION_H + +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class Q_GUI_EXPORT QPlatformIntegration +{ +public: + virtual ~QPlatformIntegration() { }; + +// GraphicsSystem functions + virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; + virtual QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const = 0; + virtual QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const = 0; + virtual QBlittable *createBlittable(const QSize &size) const; + virtual void moveToScreen(QWidget *window, int screen) {Q_UNUSED(window); Q_UNUSED(screen);} + +// Window System functions + virtual QList screens() const = 0; + virtual bool isVirtualDesktop() { return false; } + virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + + virtual bool hasOpenGL() const; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMINTEGRATION_H diff --git a/src/gui/kernel/qplatformintegrationfactory_lite.cpp b/src/gui/kernel/qplatformintegrationfactory_lite.cpp deleted file mode 100644 index cd7d171..0000000 --- a/src/gui/kernel/qplatformintegrationfactory_lite.cpp +++ /dev/null @@ -1,89 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qplatformintegrationfactory_lite_p.h" -#include -#include "private/qfactoryloader_p.h" -#include "qmutex.h" - -#include "qapplication.h" -#include "qdebug.h" - -QT_BEGIN_NAMESPACE - -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) -Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, - (QPlatformIntegrationFactoryInterface_iid, QLatin1String("/platforms"), Qt::CaseInsensitive)) -#endif - -QPlatformIntegration *QPlatformIntegrationFactory::create(const QString& key) -{ - QPlatformIntegration *ret = 0; - QStringList paramList = key.split(QLatin1Char(':')); - QString platform = paramList.takeFirst().toLower(); - -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) - qDebug() << loader()->keys(); - if (QPlatformIntegrationFactoryInterface *factory = qobject_cast(loader()->instance(platform))) - ret = factory->create(platform, paramList); -#endif - - return ret; -} - -/*! - Returns the list of valid keys, i.e. the keys this factory can - create styles for. - - \sa create() -*/ -QStringList QPlatformIntegrationFactory::keys() -{ -#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) - QStringList list = loader()->keys(); -#else - QStringList list; -#endif - return list; -} - -QT_END_NAMESPACE - diff --git a/src/gui/kernel/qplatformintegrationfactory_lite_p.h b/src/gui/kernel/qplatformintegrationfactory_lite_p.h deleted file mode 100644 index ba02d2c..0000000 --- a/src/gui/kernel/qplatformintegrationfactory_lite_p.h +++ /dev/null @@ -1,78 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORMINTEGRATIONFACTORY_H -#define QPLATFORMINTEGRATIONFACTORY_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -class QPlatformIntegration; - -class QPlatformIntegrationFactory -{ -public: - static QStringList keys(); - static QPlatformIntegration *create(const QString&); -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPLATFORMINTEGRATIONFACTORY_H - diff --git a/src/gui/kernel/qplatformintegrationfactory_qpa.cpp b/src/gui/kernel/qplatformintegrationfactory_qpa.cpp new file mode 100644 index 0000000..4f2bfa5 --- /dev/null +++ b/src/gui/kernel/qplatformintegrationfactory_qpa.cpp @@ -0,0 +1,89 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformintegrationfactory_qpa_p.h" +#include +#include "private/qfactoryloader_p.h" +#include "qmutex.h" + +#include "qapplication.h" +#include "qdebug.h" + +QT_BEGIN_NAMESPACE + +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) +Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, + (QPlatformIntegrationFactoryInterface_iid, QLatin1String("/platforms"), Qt::CaseInsensitive)) +#endif + +QPlatformIntegration *QPlatformIntegrationFactory::create(const QString& key) +{ + QPlatformIntegration *ret = 0; + QStringList paramList = key.split(QLatin1Char(':')); + QString platform = paramList.takeFirst().toLower(); + +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) + qDebug() << loader()->keys(); + if (QPlatformIntegrationFactoryInterface *factory = qobject_cast(loader()->instance(platform))) + ret = factory->create(platform, paramList); +#endif + + return ret; +} + +/*! + Returns the list of valid keys, i.e. the keys this factory can + create styles for. + + \sa create() +*/ +QStringList QPlatformIntegrationFactory::keys() +{ +#if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) + QStringList list = loader()->keys(); +#else + QStringList list; +#endif + return list; +} + +QT_END_NAMESPACE + diff --git a/src/gui/kernel/qplatformintegrationfactory_qpa_p.h b/src/gui/kernel/qplatformintegrationfactory_qpa_p.h new file mode 100644 index 0000000..ba02d2c --- /dev/null +++ b/src/gui/kernel/qplatformintegrationfactory_qpa_p.h @@ -0,0 +1,78 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATIONFACTORY_H +#define QPLATFORMINTEGRATIONFACTORY_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class QPlatformIntegration; + +class QPlatformIntegrationFactory +{ +public: + static QStringList keys(); + static QPlatformIntegration *create(const QString&); +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMINTEGRATIONFACTORY_H + diff --git a/src/gui/kernel/qplatformintegrationplugin_lite.cpp b/src/gui/kernel/qplatformintegrationplugin_lite.cpp deleted file mode 100644 index cb1ed83..0000000 --- a/src/gui/kernel/qplatformintegrationplugin_lite.cpp +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qplatformintegrationplugin_lite.h" - -QT_BEGIN_NAMESPACE - -QPlatformIntegrationPlugin::QPlatformIntegrationPlugin(QObject *parent) - : QObject(parent) -{ -} - -QPlatformIntegrationPlugin::~QPlatformIntegrationPlugin() -{ -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegrationplugin_lite.h b/src/gui/kernel/qplatformintegrationplugin_lite.h deleted file mode 100644 index 9c37cf7..0000000 --- a/src/gui/kernel/qplatformintegrationplugin_lite.h +++ /dev/null @@ -1,92 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORMINTEGRATIONPLUGIN_H -#define QPLATFORMINTEGRATIONPLUGIN_H - -// -// W A R N I N G -// ------------- -// -// This file is not part of the Qt API. It exists purely as an -// implementation detail. This header file may change from version to -// version without notice, or even be removed. -// -// We mean it. -// - -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -class QPlatformIntegration; - -struct QPlatformIntegrationFactoryInterface : public QFactoryInterface -{ - virtual QPlatformIntegration *create(const QString &key, const QStringList ¶mList) = 0; -}; - -#define QPlatformIntegrationFactoryInterface_iid "com.nokia.Qt.QPlatformIntegrationFactoryInterface" - -Q_DECLARE_INTERFACE(QPlatformIntegrationFactoryInterface, QPlatformIntegrationFactoryInterface_iid) - -class Q_GUI_EXPORT QPlatformIntegrationPlugin : public QObject, public QPlatformIntegrationFactoryInterface -{ - Q_OBJECT - Q_INTERFACES(QPlatformIntegrationFactoryInterface:QFactoryInterface) -public: - explicit QPlatformIntegrationPlugin(QObject *parent = 0); - ~QPlatformIntegrationPlugin(); - - virtual QStringList keys() const = 0; - virtual QPlatformIntegration *create(const QString &key, const QStringList ¶mList) = 0; -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPLATFORMINTEGRATIONPLUGIN_H diff --git a/src/gui/kernel/qplatformintegrationplugin_qpa.cpp b/src/gui/kernel/qplatformintegrationplugin_qpa.cpp new file mode 100644 index 0000000..3bf2474 --- /dev/null +++ b/src/gui/kernel/qplatformintegrationplugin_qpa.cpp @@ -0,0 +1,55 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformintegrationplugin_qpa.h" + +QT_BEGIN_NAMESPACE + +QPlatformIntegrationPlugin::QPlatformIntegrationPlugin(QObject *parent) + : QObject(parent) +{ +} + +QPlatformIntegrationPlugin::~QPlatformIntegrationPlugin() +{ +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegrationplugin_qpa.h b/src/gui/kernel/qplatformintegrationplugin_qpa.h new file mode 100644 index 0000000..9c37cf7 --- /dev/null +++ b/src/gui/kernel/qplatformintegrationplugin_qpa.h @@ -0,0 +1,92 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATIONPLUGIN_H +#define QPLATFORMINTEGRATIONPLUGIN_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class QPlatformIntegration; + +struct QPlatformIntegrationFactoryInterface : public QFactoryInterface +{ + virtual QPlatformIntegration *create(const QString &key, const QStringList ¶mList) = 0; +}; + +#define QPlatformIntegrationFactoryInterface_iid "com.nokia.Qt.QPlatformIntegrationFactoryInterface" + +Q_DECLARE_INTERFACE(QPlatformIntegrationFactoryInterface, QPlatformIntegrationFactoryInterface_iid) + +class Q_GUI_EXPORT QPlatformIntegrationPlugin : public QObject, public QPlatformIntegrationFactoryInterface +{ + Q_OBJECT + Q_INTERFACES(QPlatformIntegrationFactoryInterface:QFactoryInterface) +public: + explicit QPlatformIntegrationPlugin(QObject *parent = 0); + ~QPlatformIntegrationPlugin(); + + virtual QStringList keys() const = 0; + virtual QPlatformIntegration *create(const QString &key, const QStringList ¶mList) = 0; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMINTEGRATIONPLUGIN_H diff --git a/src/gui/kernel/qplatformscreen_lite.cpp b/src/gui/kernel/qplatformscreen_lite.cpp deleted file mode 100644 index 4c0a02b..0000000 --- a/src/gui/kernel/qplatformscreen_lite.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qplatformscreen_lite.h" -#include -#include - -QWidget *QPlatformScreen::topLevelAt(const QPoint & pos) const -{ - QWidgetList list = QApplication::topLevelWidgets(); - for (int i = list.size()-1; i >= 0; --i) { - QWidget *w = list[i]; - //### mask is ignored - if (w != QApplication::desktop() && w->isVisible() && w->geometry().contains(pos)) - return w; - } - - return 0; -} - -QSize QPlatformScreen::physicalSize() const -{ - static const int dpi = 100; - int width = geometry().width() / dpi * qreal(25.4) ; - int height = geometry().height() / dpi * qreal(25.4) ; - return QSize(width,height); -} - diff --git a/src/gui/kernel/qplatformscreen_lite.h b/src/gui/kernel/qplatformscreen_lite.h deleted file mode 100644 index 7d0e28d..0000000 --- a/src/gui/kernel/qplatformscreen_lite.h +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QPLATFORMSCREEN_H -#define QPLATFORMSCREEN_H - -#include -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -class Q_GUI_EXPORT QPlatformScreen : public QObject -{ - Q_OBJECT -public: - virtual ~QPlatformScreen() { } - - virtual QRect geometry() const = 0; - virtual QRect availableGeometry() const {return geometry();}; - virtual int depth() const = 0; - virtual QImage::Format format() const = 0; - virtual QSize physicalSize() const; - virtual void setDirty(const QRect &) {} - virtual QWidget *topLevelAt(const QPoint &point) const; -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QPLATFORMSCREEN_H diff --git a/src/gui/kernel/qplatformscreen_qpa.cpp b/src/gui/kernel/qplatformscreen_qpa.cpp new file mode 100644 index 0000000..478d2d6 --- /dev/null +++ b/src/gui/kernel/qplatformscreen_qpa.cpp @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformscreen_qpa.h" +#include +#include + +QWidget *QPlatformScreen::topLevelAt(const QPoint & pos) const +{ + QWidgetList list = QApplication::topLevelWidgets(); + for (int i = list.size()-1; i >= 0; --i) { + QWidget *w = list[i]; + //### mask is ignored + if (w != QApplication::desktop() && w->isVisible() && w->geometry().contains(pos)) + return w; + } + + return 0; +} + +QSize QPlatformScreen::physicalSize() const +{ + static const int dpi = 100; + int width = geometry().width() / dpi * qreal(25.4) ; + int height = geometry().height() / dpi * qreal(25.4) ; + return QSize(width,height); +} + diff --git a/src/gui/kernel/qplatformscreen_qpa.h b/src/gui/kernel/qplatformscreen_qpa.h new file mode 100644 index 0000000..7d0e28d --- /dev/null +++ b/src/gui/kernel/qplatformscreen_qpa.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMSCREEN_H +#define QPLATFORMSCREEN_H + +#include +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class Q_GUI_EXPORT QPlatformScreen : public QObject +{ + Q_OBJECT +public: + virtual ~QPlatformScreen() { } + + virtual QRect geometry() const = 0; + virtual QRect availableGeometry() const {return geometry();}; + virtual int depth() const = 0; + virtual QImage::Format format() const = 0; + virtual QSize physicalSize() const; + virtual void setDirty(const QRect &) {} + virtual QWidget *topLevelAt(const QPoint &point) const; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMSCREEN_H diff --git a/src/gui/kernel/qplatformwindow_lite.cpp b/src/gui/kernel/qplatformwindow_lite.cpp deleted file mode 100644 index 9efbf8b..0000000 --- a/src/gui/kernel/qplatformwindow_lite.cpp +++ /dev/null @@ -1,85 +0,0 @@ -#include "qplatformwindow_lite.h" - -#include - -class QPlatformWindowPrivate -{ - QWidget *tlw; - QRect rect; - friend class QPlatformWindow; -}; - -QPlatformWindow::QPlatformWindow(QWidget *tlw) - : d_ptr(new QPlatformWindowPrivate) -{ - Q_D(QPlatformWindow); - d->tlw = tlw; - tlw->setPlatformWindow(this); -} - -QPlatformWindow::~QPlatformWindow() -{ -} - -QWidget *QPlatformWindow::widget() const -{ - Q_D(const QPlatformWindow); - return d->tlw; -} - -void QPlatformWindow::setGeometry(const QRect &rect) -{ - Q_D(QPlatformWindow); - d->rect = rect; -} - -QRect QPlatformWindow::geometry() const -{ - Q_D(const QPlatformWindow); - return d->rect; -} - -/*! -Reimplemented in subclasses to show the surface if \a visible is \c true, and hide it if \a visible is \c false. -*/ -void QPlatformWindow::setVisible(bool visible) -{ - Q_UNUSED(visible); -} -/*! -Requests setting the window flags of this surface to \a type. Returns the actual flags set. -*/ -Qt::WindowFlags QPlatformWindow::setWindowFlags(Qt::WindowFlags flags) -{ - Q_UNUSED(flags); - return Qt::Window; -} - -/*! - Returns the effective window flags for this surface. -*/ -Qt::WindowFlags QPlatformWindow::windowFlags() const -{ - return Qt::Window; -} - -WId QPlatformWindow::winId() const { return WId(0); } - -void QPlatformWindow::setParent(const QPlatformWindow *) { qWarning("This plugin does not support setParent!"); } - -void QPlatformWindow::setWindowTitle(const QString &) {} - -void QPlatformWindow::raise() { qWarning("This plugin does not support raise()"); } - -void QPlatformWindow::lower() { qWarning("This plugin does not support lower()"); } - -void QPlatformWindow::setOpacity(qreal level) -{ - Q_UNUSED(level); - qWarning("This plugin does not support setting window opacity"); -} - -QPlatformGLContext *QPlatformWindow::glContext() -{ - return 0; -} diff --git a/src/gui/kernel/qplatformwindow_lite.h b/src/gui/kernel/qplatformwindow_lite.h deleted file mode 100644 index 5f8d259..0000000 --- a/src/gui/kernel/qplatformwindow_lite.h +++ /dev/null @@ -1,90 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QPLATFORMWINDOW_H -#define QPLATFORMWINDOW_H - - -#include -#include -#include -#include - - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -class QPlatformWindowPrivate; -class QWidget; -class QPlatformGLContext; - -class Q_GUI_EXPORT QPlatformWindow -{ - Q_DECLARE_PRIVATE(QPlatformWindow); -public: - QPlatformWindow(QWidget *tlw); - virtual ~QPlatformWindow(); - - QWidget *widget() const; - virtual void setGeometry(const QRect &rect); - virtual QRect geometry() const; - - virtual void setVisible(bool visible); - virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); - virtual Qt::WindowFlags windowFlags() const; - virtual WId winId() const; - virtual void setParent(const QPlatformWindow *window); - - virtual void setWindowTitle(const QString &); - virtual void raise(); - virtual void lower(); - - virtual void setOpacity(qreal level); - - virtual QPlatformGLContext *glContext(); -protected: - QScopedPointer d_ptr; -}; - -QT_END_NAMESPACE - -QT_END_HEADER -#endif //QPLATFORMWINDOW_H diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp new file mode 100644 index 0000000..c0e642c --- /dev/null +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -0,0 +1,85 @@ +#include "qplatformwindow_qpa.h" + +#include + +class QPlatformWindowPrivate +{ + QWidget *tlw; + QRect rect; + friend class QPlatformWindow; +}; + +QPlatformWindow::QPlatformWindow(QWidget *tlw) + : d_ptr(new QPlatformWindowPrivate) +{ + Q_D(QPlatformWindow); + d->tlw = tlw; + tlw->setPlatformWindow(this); +} + +QPlatformWindow::~QPlatformWindow() +{ +} + +QWidget *QPlatformWindow::widget() const +{ + Q_D(const QPlatformWindow); + return d->tlw; +} + +void QPlatformWindow::setGeometry(const QRect &rect) +{ + Q_D(QPlatformWindow); + d->rect = rect; +} + +QRect QPlatformWindow::geometry() const +{ + Q_D(const QPlatformWindow); + return d->rect; +} + +/*! +Reimplemented in subclasses to show the surface if \a visible is \c true, and hide it if \a visible is \c false. +*/ +void QPlatformWindow::setVisible(bool visible) +{ + Q_UNUSED(visible); +} +/*! +Requests setting the window flags of this surface to \a type. Returns the actual flags set. +*/ +Qt::WindowFlags QPlatformWindow::setWindowFlags(Qt::WindowFlags flags) +{ + Q_UNUSED(flags); + return Qt::Window; +} + +/*! + Returns the effective window flags for this surface. +*/ +Qt::WindowFlags QPlatformWindow::windowFlags() const +{ + return Qt::Window; +} + +WId QPlatformWindow::winId() const { return WId(0); } + +void QPlatformWindow::setParent(const QPlatformWindow *) { qWarning("This plugin does not support setParent!"); } + +void QPlatformWindow::setWindowTitle(const QString &) {} + +void QPlatformWindow::raise() { qWarning("This plugin does not support raise()"); } + +void QPlatformWindow::lower() { qWarning("This plugin does not support lower()"); } + +void QPlatformWindow::setOpacity(qreal level) +{ + Q_UNUSED(level); + qWarning("This plugin does not support setting window opacity"); +} + +QPlatformGLContext *QPlatformWindow::glContext() +{ + return 0; +} diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h new file mode 100644 index 0000000..5f8d259 --- /dev/null +++ b/src/gui/kernel/qplatformwindow_qpa.h @@ -0,0 +1,90 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QPLATFORMWINDOW_H +#define QPLATFORMWINDOW_H + + +#include +#include +#include +#include + + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QPlatformWindowPrivate; +class QWidget; +class QPlatformGLContext; + +class Q_GUI_EXPORT QPlatformWindow +{ + Q_DECLARE_PRIVATE(QPlatformWindow); +public: + QPlatformWindow(QWidget *tlw); + virtual ~QPlatformWindow(); + + QWidget *widget() const; + virtual void setGeometry(const QRect &rect); + virtual QRect geometry() const; + + virtual void setVisible(bool visible); + virtual Qt::WindowFlags setWindowFlags(Qt::WindowFlags flags); + virtual Qt::WindowFlags windowFlags() const; + virtual WId winId() const; + virtual void setParent(const QPlatformWindow *window); + + virtual void setWindowTitle(const QString &); + virtual void raise(); + virtual void lower(); + + virtual void setOpacity(qreal level); + + virtual QPlatformGLContext *glContext(); +protected: + QScopedPointer d_ptr; +}; + +QT_END_NAMESPACE + +QT_END_HEADER +#endif //QPLATFORMWINDOW_H diff --git a/src/gui/kernel/qsound_lite.cpp b/src/gui/kernel/qsound_lite.cpp deleted file mode 100644 index a4c74a8..0000000 --- a/src/gui/kernel/qsound_lite.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qapplication.h" - -#ifndef QT_NO_SOUND - -#include "qsound.h" -#include "qsound_p.h" - -class QAuServerLite : public QAuServer -{ - Q_OBJECT -public: - QAuServerLite( QObject* parent ); - - void play( QSound* s ) {} - void stop( QSound* s ) {} - bool okay() { return false; } -}; - -QAuServerLite::QAuServerLite(QObject* parent) : - QAuServer(parent) -{ -} - -QAuServer* qt_new_audio_server() -{ - return new QAuServerLite(qApp); -} - -#include "qsound_lite.moc" - -#endif // QT_NO_SOUND - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qsound_qpa.cpp b/src/gui/kernel/qsound_qpa.cpp new file mode 100644 index 0000000..0714185 --- /dev/null +++ b/src/gui/kernel/qsound_qpa.cpp @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qapplication.h" + +#ifndef QT_NO_SOUND + +#include "qsound.h" +#include "qsound_p.h" + +class QAuServerLite : public QAuServer +{ + Q_OBJECT +public: + QAuServerLite( QObject* parent ); + + void play( QSound* s ) {} + void stop( QSound* s ) {} + bool okay() { return false; } +}; + +QAuServerLite::QAuServerLite(QObject* parent) : + QAuServer(parent) +{ +} + +QAuServer* qt_new_audio_server() +{ + return new QAuServerLite(qApp); +} + +#include "qsound_qpa.moc" + +#endif // QT_NO_SOUND + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 57e3a31..53b35dd 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -76,7 +76,7 @@ # include "private/qwindowsurface_qws_p.h" #endif #if defined(Q_WS_QPA) -#include "qplatformwindow_lite.h" +#include "qplatformwindow_qpa.h" #endif #include "qpainter.h" #include "qtooltip.h" diff --git a/src/gui/kernel/qwidget_lite.cpp b/src/gui/kernel/qwidget_lite.cpp deleted file mode 100644 index f92eb61..0000000 --- a/src/gui/kernel/qwidget_lite.cpp +++ /dev/null @@ -1,809 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "QtGui/qwidget.h" -#include "QtGui/qevent.h" -#include "QtGui/qapplication.h" -#include "QtGui/private/qbackingstore_p.h" -#include "QtGui/private/qwidget_p.h" -#include "QtGui/private/qgraphicssystem_p.h" -#include "QtGui/private/qapplication_p.h" -#include "QtGui/qdesktopwidget.h" -#include "QtGui/qplatformwindow_lite.h" - -#include - -QT_BEGIN_NAMESPACE -static QPlatformScreen *qt_screenForWidget(const QWidget *w); - -void setParentForChildrenOfWidget(QPlatformWindow *window, const QWidget *widget) -{ - QObjectList children = widget->children(); - for (int i = 0; i < children.size(); i++) { - if (children.at(i)->isWidgetType()) { - const QWidget *childWidget = qobject_cast(children.at(i)); - if (childWidget) { // should not be nessesary - if (childWidget->platformWindow()) { - childWidget->platformWindow()->setParent(window); - } else { - setParentForChildrenOfWidget(window,childWidget); - } - } - } - } -} - -void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyOldWindow) -{ - Q_Q(QWidget); - - Q_UNUSED(window); - Q_UNUSED(initializeWindow); - Q_UNUSED(destroyOldWindow); - // XXX - - Qt::WindowFlags flags = data.window_flags; - - if ((!q->testAttribute(Qt::WA_NativeWindow) && !q->isWindow()) || q->windowType() == Qt::Desktop ) - return; // we only care about real toplevels - - QWindowSurface *surface = q->windowSurface(); - QPlatformWindow *platformWindow = q->platformWindow(); - - if (!platformWindow) { - platformWindow = QApplicationPrivate::platformIntegration()->createPlatformWindow(q); - } - Q_ASSERT(platformWindow); - - if (!surface) { - surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId()); - } - - data.window_flags = q->platformWindow()->setWindowFlags(data.window_flags); - - setWinId(q->platformWindow()->winId()); - - //first check children. then find who for parent. - setParentForChildrenOfWidget(platformWindow,q); - if (QWidget *nativeParent = q->nativeParentWidget()) { - if (nativeParent->platformWindow()) { - platformWindow->setParent(nativeParent->platformWindow()); - } - } - - QApplicationPrivate::platformIntegration()->moveToScreen(q, screenNumber); -// qDebug() << "create_sys" << q << q->internalWinId(); -} - -void QWidget::destroy(bool destroyWindow, bool destroySubWindows) -{ - Q_D(QWidget); - //### jl: subwindows now enabled - Q_UNUSED(destroySubWindows); - - if ((windowType() == Qt::Popup)) - qApp->d_func()->closePopup(this); - - //### we don't have proper focus event handling yet - if (this == QApplicationPrivate::active_window) - QApplication::setActiveWindow(0); - - if (windowType() != Qt::Desktop) { - if (destroyWindow && isWindow()) { - QTLWExtra *topData = d->maybeTopData(); - if (topData) { - delete topData->platformWindow; - topData->platformWindow = 0; - } - } else { - if (parentWidget() && parentWidget()->testAttribute(Qt::WA_WState_Created)) { - d->hide_sys(); - } - } - } -} - -void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) -{ - Q_Q(QWidget); - - // QWidget *oldParent = q->parentWidget(); - Qt::WindowFlags oldFlags = data.window_flags; - - int targetScreen = -1; - // Handle a request to move the widget to a particular screen - if (newparent && newparent->windowType() == Qt::Desktop) { - // make sure the widget is created on the same screen as the - // programmer specified desktop widget - - // get the desktop's screen number - targetScreen = newparent->d_func()->screenNumber; - newparent = 0; - } - - if (parent != newparent) { - QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function??? - if (q->platformWindow()) { - QWidget * parentWithWindow = newparent->platformWindow()? newparent : newparent->nativeParentWidget(); - if (parentWithWindow && parentWithWindow->platformWindow()) { - q->platformWindow()->setParent(parentWithWindow->platformWindow()); - } - } - - } - - if (!newparent) { - f |= Qt::Window; - if (targetScreen == -1) { - if (parent) - targetScreen = qobject_cast(parent)->d_func()->screenNumber; - } - } - - bool explicitlyHidden = q->testAttribute(Qt::WA_WState_Hidden) && q->testAttribute(Qt::WA_WState_ExplicitShowHide); - - data.window_flags = f; - q->setAttribute(Qt::WA_WState_Created, false); - q->setAttribute(Qt::WA_WState_Visible, false); - q->setAttribute(Qt::WA_WState_Hidden, false); - - if (f & Qt::Window) { - //qDebug() << "setParent_sys" << q << newparent << hex << f; - if (QPlatformWindow *window = q->platformWindow()) - data.window_flags = window->setWindowFlags(data.window_flags); - } - // XXX Reparenting child to toplevel or vice versa ### - if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { - //qDebug() << "setParent_sys() change to toplevel"; - q->create(); //### this cannot be right - } else if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { - qDebug() << "######## setParent_sys() change from toplevel not implemented ########"; - } - - - if (q->isWindow() || (!newparent || newparent->isVisible()) || explicitlyHidden) - q->setAttribute(Qt::WA_WState_Hidden); - q->setAttribute(Qt::WA_WState_ExplicitShowHide, explicitlyHidden); - - // move the window to the selected screen - if (!newparent && targetScreen != -1) { - screenNumber = targetScreen; - // only if it is already created - if (q->testAttribute(Qt::WA_WState_Created)) { - QPlatformIntegration *platform = QApplicationPrivate::platformIntegration(); - platform->moveToScreen(q, targetScreen); - } - } -} - -QPoint QWidget::mapToGlobal(const QPoint &pos) const -{ - int x=pos.x(), y=pos.y(); - const QWidget* w = this; - while (w) { - x += w->data->crect.x(); - y += w->data->crect.y(); - w = w->isWindow() ? 0 : w->parentWidget(); - } - return QPoint(x, y); -} - -QPoint QWidget::mapFromGlobal(const QPoint &pos) const -{ - int x=pos.x(), y=pos.y(); - const QWidget* w = this; - while (w) { - x -= w->data->crect.x(); - y -= w->data->crect.y(); - w = w->isWindow() ? 0 : w->parentWidget(); - } - return QPoint(x, y); -} - -void QWidgetPrivate::updateSystemBackground() {} - -#ifndef QT_NO_CURSOR -void QWidgetPrivate::setCursor_sys(const QCursor &cursor) -{ - Q_UNUSED(cursor); - Q_Q(QWidget); - if (q->isVisible()) - qt_lite_set_cursor(q, false); -} - -void QWidgetPrivate::unsetCursor_sys() -{ - Q_Q(QWidget); - if (q->isVisible()) - qt_lite_set_cursor(q, false); -} - -void QWidgetPrivate::updateCursor() const -{ - // XXX -} - -#endif //QT_NO_CURSOR - -void QWidgetPrivate::setWindowTitle_sys(const QString &caption) -{ - Q_Q(QWidget); - if (!q->isWindow()) - return; - - if (QPlatformWindow *window = q->platformWindow()) - window->setWindowTitle(caption); - -} - -void QWidgetPrivate::setWindowIcon_sys(bool /*forceReset*/) -{ -} - -void QWidgetPrivate::setWindowIconText_sys(const QString &iconText) -{ - Q_UNUSED(iconText); -} - -QWidget *qt_pressGrab = 0; -QWidget *qt_mouseGrb = 0; -static QWidget *keyboardGrb = 0; - -void QWidget::grabMouse() -{ - if (qt_mouseGrb) - qt_mouseGrb->releaseMouse(); - - // XXX - //qwsDisplay()->grabMouse(this,true); - - qt_mouseGrb = this; - qt_pressGrab = 0; -} - -#ifndef QT_NO_CURSOR -void QWidget::grabMouse(const QCursor &cursor) -{ - Q_UNUSED(cursor); - - if (qt_mouseGrb) - qt_mouseGrb->releaseMouse(); - - // XXX - //qwsDisplay()->grabMouse(this,true); - //qwsDisplay()->selectCursor(this, cursor.handle()); - qt_mouseGrb = this; - qt_pressGrab = 0; -} -#endif - -void QWidget::releaseMouse() -{ - if (qt_mouseGrb == this) { - // XXX - //qwsDisplay()->grabMouse(this,false); - qt_mouseGrb = 0; - } -} - -void QWidget::grabKeyboard() -{ - if (keyboardGrb) - keyboardGrb->releaseKeyboard(); - // XXX - //qwsDisplay()->grabKeyboard(this, true); - keyboardGrb = this; -} - -void QWidget::releaseKeyboard() -{ - if (keyboardGrb == this) { - // XXX - //qwsDisplay()->grabKeyboard(this, false); - keyboardGrb = 0; - } -} - -QWidget *QWidget::mouseGrabber() -{ - if (qt_mouseGrb) - return qt_mouseGrb; - return qt_pressGrab; -} - -QWidget *QWidget::keyboardGrabber() -{ - return keyboardGrb; -} - -void QWidget::activateWindow() -{ - // XXX -// qDebug() << "QWidget::activateWindow" << this; - QApplication::setActiveWindow(this); //##### -} - -void QWidgetPrivate::show_sys() -{ - Q_Q(QWidget); - q->setAttribute(Qt::WA_Mapped); - if (q->testAttribute(Qt::WA_DontShowOnScreen)) { - invalidateBuffer(q->rect()); - return; - } - - QApplication::postEvent(q, new QUpdateLaterEvent(q->rect())); - - QPlatformWindow *window = q->platformWindow(); - if (window) { - const QRect geomRect = q->geometry(); - const QRect windowRect = window->geometry(); - if (windowRect != geomRect) { - window->setGeometry(geomRect); - } - if (q->isWindow()) { - if (QWindowSurface *surface = q->windowSurface()) - if (windowRect.size() != geomRect.size()) { - surface->resize(geomRect.size()); - } - - if (window) - window->setVisible(true); - - if (q->windowType() != Qt::Popup && q->windowType() != Qt::ToolTip && !(q->windowFlags() & Qt::X11BypassWindowManagerHint)) - q->activateWindow(); //### - } - } -} - - -void QWidgetPrivate::hide_sys() -{ - Q_Q(QWidget); - q->setAttribute(Qt::WA_Mapped, false); - if (!q->isWindow()) { - QWidget *p = q->parentWidget(); - if (p &&p->isVisible()) { - invalidateBuffer(q->rect()); - } - return; - } - if (QPlatformWindow *window = q->platformWindow()) { - window->setVisible(false); - } - - //### we don't yet have proper focus event handling - if (q == QApplicationPrivate::active_window) - QApplication::setActiveWindow(0); - -} - -void QWidgetPrivate::setMaxWindowState_helper() -{ - setFullScreenSize_helper(); //### decoration size -} - -void QWidgetPrivate::setFullScreenSize_helper() -{ - Q_Q(QWidget); - - const uint old_state = data.in_set_window_state; - data.in_set_window_state = 1; - - const QRect screen = qApp->desktop()->screenGeometry(qApp->desktop()->screenNumber(q)); - q->move(screen.topLeft()); - q->resize(screen.size()); - - data.in_set_window_state = old_state; -} - -static Qt::WindowStates effectiveState(Qt::WindowStates state) - { - if (state & Qt::WindowMinimized) - return Qt::WindowMinimized; - else if (state & Qt::WindowFullScreen) - return Qt::WindowFullScreen; - else if (state & Qt::WindowMaximized) - return Qt::WindowMaximized; - return Qt::WindowNoState; - } - -void QWidget::setWindowState(Qt::WindowStates newstate) -{ - Q_D(QWidget); - Qt::WindowStates oldstate = windowState(); - if (oldstate == newstate) - return; - if (isWindow() && !testAttribute(Qt::WA_WState_Created)) - create(); - - data->window_state = newstate; - data->in_set_window_state = 1; - bool needShow = false; - Qt::WindowStates newEffectiveState = effectiveState(newstate); - Qt::WindowStates oldEffectiveState = effectiveState(oldstate); - if (isWindow() && newEffectiveState != oldEffectiveState) { - d->createTLExtra(); - if (oldEffectiveState == Qt::WindowNoState) { //normal - d->topData()->normalGeometry = geometry(); - } else if (oldEffectiveState == Qt::WindowFullScreen) { - setParent(0, d->topData()->savedFlags); - needShow = true; - } else if (oldEffectiveState == Qt::WindowMinimized) { - needShow = true; - } - - if (newEffectiveState == Qt::WindowMinimized) { - //### not ideal... - hide(); - needShow = false; - } else if (newEffectiveState == Qt::WindowFullScreen) { - d->topData()->savedFlags = windowFlags(); - setParent(0, Qt::FramelessWindowHint | (windowFlags() & Qt::WindowStaysOnTopHint)); - d->setFullScreenSize_helper(); - raise(); - needShow = true; - } else if (newEffectiveState == Qt::WindowMaximized) { - createWinId(); - d->setMaxWindowState_helper(); - } else { //normal - QRect r = d->topData()->normalGeometry; - if (r.width() >= 0) { - d->topData()->normalGeometry = QRect(0,0,-1,-1); - setGeometry(r); - } - } - } - data->in_set_window_state = 0; - - if (needShow) - show(); - - if (newstate & Qt::WindowActive) - activateWindow(); - - QWindowStateChangeEvent e(oldstate); - QApplication::sendEvent(this, &e); -} - -void QWidgetPrivate::setFocus_sys() -{ - -} - -void QWidgetPrivate::raise_sys() -{ - Q_Q(QWidget); - if (q->isWindow()) { - q->platformWindow()->raise(); - } -} - -void QWidgetPrivate::lower_sys() -{ - Q_Q(QWidget); - if (q->isWindow()) { - Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); - q->platformWindow()->lower(); - } else if (QWidget *p = q->parentWidget()) { - setDirtyOpaqueRegion(); - p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); - } -} - -void QWidgetPrivate::stackUnder_sys(QWidget*) -{ - Q_Q(QWidget); - if (QWidget *p = q->parentWidget()) { - setDirtyOpaqueRegion(); - p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); - } -} - -void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) -{ - Q_Q(QWidget); - if (extra) { // any size restrictions? - w = qMin(w,extra->maxw); - h = qMin(h,extra->maxh); - w = qMax(w,extra->minw); - h = qMax(h,extra->minh); - } - - QPoint oldp = q->geometry().topLeft(); - QSize olds = q->size(); - QRect r(x, y, w, h); - - bool isResize = olds != r.size(); - isMove = oldp != r.topLeft(); //### why do we have isMove as a parameter? - - - // We only care about stuff that changes the geometry, or may - // cause the window manager to change its state - if (r.size() == olds && oldp == r.topLeft()) - return; - - if (!data.in_set_window_state) { - q->data->window_state &= ~Qt::WindowMaximized; - q->data->window_state &= ~Qt::WindowFullScreen; - if (q->isWindow()) - topData()->normalGeometry = QRect(0, 0, -1, -1); - } - - QPoint oldPos = q->pos(); - data.crect = r; - - if (q->isVisible()) { - if (q->platformWindow()) { - if (q->isWindow()) { - q->platformWindow()->setGeometry(q->frameGeometry()); - } else { - QPoint posInNativeParent = q->mapTo(q->nativeParentWidget(),QPoint()); - q->platformWindow()->setGeometry(QRect(posInNativeParent,r.size())); - } - const QWidgetBackingStore *bs = maybeBackingStore(); - if (bs->windowSurface) { - if (isResize) - bs->windowSurface->resize(r.size()); - } - } else { - if (isMove && !isResize) - moveRect(QRect(oldPos, olds), x - oldPos.x(), y - oldPos.y()); - else - invalidateBuffer_resizeHelper(oldPos, olds); - } - - if (isMove) { - QMoveEvent e(q->pos(), oldPos); - QApplication::sendEvent(q, &e); - } - if (isResize) { - QResizeEvent e(r.size(), olds); - QApplication::sendEvent(q, &e); - if (q->isWindow()) - q->update(); - } - } else { // not visible - if (isMove && q->pos() != oldPos) - q->setAttribute(Qt::WA_PendingMoveEvent, true); - if (isResize) - q->setAttribute(Qt::WA_PendingResizeEvent, true); - } - -} - -void QWidgetPrivate::setConstraints_sys() -{ -} - -void QWidgetPrivate::scroll_sys(int dx, int dy) -{ - Q_Q(QWidget); - scrollChildren(dx, dy); - scrollRect(q->rect(), dx, dy); -} - -void QWidgetPrivate::scroll_sys(int dx, int dy, const QRect &r) -{ - scrollRect(r, dx, dy); -} - -static QPlatformScreen *qt_screenForWidget(const QWidget *w) -{ - if (!w) - return 0; - QRect frame = w->frameGeometry(); - if (!w->isWindow()) - frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0))); - const QPoint p = (frame.topLeft() + frame.bottomRight()) / 2; - - QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - QList screens = pi->screens(); - - for (int i = 0; i < screens.size(); ++i) { - if (screens[i]->geometry().contains(p)) - return screens[i]; - } - - // Assume screen zero if we have it. - if (!screens.isEmpty()) - return screens[0]; - else - qWarning("qt_screenForWidget: no screens"); - - return 0; -} - -int QWidget::metric(PaintDeviceMetric m) const -{ - Q_D(const QWidget); - - QPlatformScreen *screen = qt_screenForWidget(this); - if (!screen) { - if (m == PdmDpiX || m == PdmDpiY) - return 72; - return QPaintDevice::metric(m); - } - int val; - if (m == PdmWidth) { - val = data->crect.width(); - } else if (m == PdmWidthMM) { - val = data->crect.width() * screen->physicalSize().width() / screen->geometry().width(); - } else if (m == PdmHeight) { - val = data->crect.height(); - } else if (m == PdmHeightMM) { - val = data->crect.height() * screen->physicalSize().height() / screen->geometry().height(); - } else if (m == PdmDepth) { - return screen->depth(); - } else if (m == PdmDpiX || m == PdmPhysicalDpiX) { - if (d->extra && d->extra->customDpiX) - return d->extra->customDpiX; - else if (d->parent) - return static_cast(d->parent)->metric(m); - return qRound(screen->geometry().width() / double(screen->physicalSize().width() / 25.4)); - } else if (m == PdmDpiY || m == PdmPhysicalDpiY) { - if (d->extra && d->extra->customDpiY) - return d->extra->customDpiY; - else if (d->parent) - return static_cast(d->parent)->metric(m); - return qRound(screen->geometry().height() / double(screen->physicalSize().height() / 25.4)); - } else { - val = QPaintDevice::metric(m);// XXX - } - return val; -} - -void QWidgetPrivate::createSysExtra() -{ -} - -void QWidgetPrivate::deleteSysExtra() -{ -} - -void QWidgetPrivate::createTLSysExtra() -{ -} - -void QWidgetPrivate::deleteTLSysExtra() -{ -} - -void QWidgetPrivate::registerDropSite(bool on) -{ - Q_UNUSED(on); -} - -void QWidgetPrivate::setMask_sys(const QRegion ®ion) -{ - Q_UNUSED(region); - // XXX -} - -void QWidgetPrivate::updateFrameStrut() -{ - // XXX -} - -void QWidgetPrivate::setWindowOpacity_sys(qreal level) -{ - Q_Q(QWidget); - q->platformWindow()->setOpacity(level); -} - -void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &oldRect) -{ - Q_UNUSED(dontShow); - Q_UNUSED(oldRect); - // XXX -} - -QPaintEngine *QWidget::paintEngine() const -{ - qWarning("QWidget::paintEngine: Should no longer be called"); - return 0; //##### @@@ -} - -QWindowSurface *QWidgetPrivate::createDefaultWindowSurface_sys() -{ - Q_Q(QWidget); - return QApplicationPrivate::platformIntegration()->createWindowSurface(q,0); -} - -void QWidgetPrivate::setModal_sys() -{ -} - -#ifndef QT_NO_CURSOR -void qt_lite_set_cursor(QWidget * w, bool force) -{ - static QCursor arrowCursor(Qt::ArrowCursor); - static QPointer lastUnderMouse = 0; - - QCursor * override = QApplication::overrideCursor(); - - if (override && w != 0) - return; - - QWidget *cursorWidget; - QCursor cursorCursor; - - do { - if (w == 0) { - if (override) { - cursorCursor = *override; - cursorWidget = QApplication::topLevelAt(QCursor::pos()); - break; - } - w = QApplication::widgetAt(QCursor::pos()); - if (w == 0) // clear the override cursor while over empty space - w = QApplication::desktop(); - } else if (force) { - lastUnderMouse = w; - } else if (w->testAttribute(Qt::WA_WState_Created) && lastUnderMouse - && lastUnderMouse->effectiveWinId() == w->effectiveWinId()) { - w = lastUnderMouse; - } - if (w == QApplication::desktop() && !override) { - cursorCursor = arrowCursor; - cursorWidget = w; - break; - } - - QWidget * curWin = QApplication::activeWindow(); - if (!curWin && w && w->internalWinId()) - return; - QWidget* cW = w && !w->internalWinId() ? w : curWin; - - if (!cW || cW->window() != w->window() || - !cW->isVisible() || !cW->underMouse() || override) - return; - - cursorCursor = w->cursor(); - cursorWidget = w; - } while (0); - foreach (QWeakPointer cursor, QGraphicsSystemCursorPrivate::getInstances()) - if (cursor) - cursor.data()->changeCursor(&cursorCursor, cursorWidget); -} -#endif //QT_NO_CURSOR - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp new file mode 100644 index 0000000..11fa211 --- /dev/null +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -0,0 +1,809 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "QtGui/qwidget.h" +#include "QtGui/qevent.h" +#include "QtGui/qapplication.h" +#include "QtGui/private/qbackingstore_p.h" +#include "QtGui/private/qwidget_p.h" +#include "QtGui/private/qgraphicssystem_p.h" +#include "QtGui/private/qapplication_p.h" +#include "QtGui/qdesktopwidget.h" +#include "QtGui/qplatformwindow_qpa.h" + +#include + +QT_BEGIN_NAMESPACE +static QPlatformScreen *qt_screenForWidget(const QWidget *w); + +void setParentForChildrenOfWidget(QPlatformWindow *window, const QWidget *widget) +{ + QObjectList children = widget->children(); + for (int i = 0; i < children.size(); i++) { + if (children.at(i)->isWidgetType()) { + const QWidget *childWidget = qobject_cast(children.at(i)); + if (childWidget) { // should not be nessesary + if (childWidget->platformWindow()) { + childWidget->platformWindow()->setParent(window); + } else { + setParentForChildrenOfWidget(window,childWidget); + } + } + } + } +} + +void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyOldWindow) +{ + Q_Q(QWidget); + + Q_UNUSED(window); + Q_UNUSED(initializeWindow); + Q_UNUSED(destroyOldWindow); + // XXX + + Qt::WindowFlags flags = data.window_flags; + + if ((!q->testAttribute(Qt::WA_NativeWindow) && !q->isWindow()) || q->windowType() == Qt::Desktop ) + return; // we only care about real toplevels + + QWindowSurface *surface = q->windowSurface(); + QPlatformWindow *platformWindow = q->platformWindow(); + + if (!platformWindow) { + platformWindow = QApplicationPrivate::platformIntegration()->createPlatformWindow(q); + } + Q_ASSERT(platformWindow); + + if (!surface) { + surface = QApplicationPrivate::platformIntegration()->createWindowSurface(q,platformWindow->winId()); + } + + data.window_flags = q->platformWindow()->setWindowFlags(data.window_flags); + + setWinId(q->platformWindow()->winId()); + + //first check children. then find who for parent. + setParentForChildrenOfWidget(platformWindow,q); + if (QWidget *nativeParent = q->nativeParentWidget()) { + if (nativeParent->platformWindow()) { + platformWindow->setParent(nativeParent->platformWindow()); + } + } + + QApplicationPrivate::platformIntegration()->moveToScreen(q, screenNumber); +// qDebug() << "create_sys" << q << q->internalWinId(); +} + +void QWidget::destroy(bool destroyWindow, bool destroySubWindows) +{ + Q_D(QWidget); + //### jl: subwindows now enabled + Q_UNUSED(destroySubWindows); + + if ((windowType() == Qt::Popup)) + qApp->d_func()->closePopup(this); + + //### we don't have proper focus event handling yet + if (this == QApplicationPrivate::active_window) + QApplication::setActiveWindow(0); + + if (windowType() != Qt::Desktop) { + if (destroyWindow && isWindow()) { + QTLWExtra *topData = d->maybeTopData(); + if (topData) { + delete topData->platformWindow; + topData->platformWindow = 0; + } + } else { + if (parentWidget() && parentWidget()->testAttribute(Qt::WA_WState_Created)) { + d->hide_sys(); + } + } + } +} + +void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) +{ + Q_Q(QWidget); + + // QWidget *oldParent = q->parentWidget(); + Qt::WindowFlags oldFlags = data.window_flags; + + int targetScreen = -1; + // Handle a request to move the widget to a particular screen + if (newparent && newparent->windowType() == Qt::Desktop) { + // make sure the widget is created on the same screen as the + // programmer specified desktop widget + + // get the desktop's screen number + targetScreen = newparent->d_func()->screenNumber; + newparent = 0; + } + + if (parent != newparent) { + QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function??? + if (q->platformWindow()) { + QWidget * parentWithWindow = newparent->platformWindow()? newparent : newparent->nativeParentWidget(); + if (parentWithWindow && parentWithWindow->platformWindow()) { + q->platformWindow()->setParent(parentWithWindow->platformWindow()); + } + } + + } + + if (!newparent) { + f |= Qt::Window; + if (targetScreen == -1) { + if (parent) + targetScreen = qobject_cast(parent)->d_func()->screenNumber; + } + } + + bool explicitlyHidden = q->testAttribute(Qt::WA_WState_Hidden) && q->testAttribute(Qt::WA_WState_ExplicitShowHide); + + data.window_flags = f; + q->setAttribute(Qt::WA_WState_Created, false); + q->setAttribute(Qt::WA_WState_Visible, false); + q->setAttribute(Qt::WA_WState_Hidden, false); + + if (f & Qt::Window) { + //qDebug() << "setParent_sys" << q << newparent << hex << f; + if (QPlatformWindow *window = q->platformWindow()) + data.window_flags = window->setWindowFlags(data.window_flags); + } + // XXX Reparenting child to toplevel or vice versa ### + if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { + //qDebug() << "setParent_sys() change to toplevel"; + q->create(); //### this cannot be right + } else if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { + qDebug() << "######## setParent_sys() change from toplevel not implemented ########"; + } + + + if (q->isWindow() || (!newparent || newparent->isVisible()) || explicitlyHidden) + q->setAttribute(Qt::WA_WState_Hidden); + q->setAttribute(Qt::WA_WState_ExplicitShowHide, explicitlyHidden); + + // move the window to the selected screen + if (!newparent && targetScreen != -1) { + screenNumber = targetScreen; + // only if it is already created + if (q->testAttribute(Qt::WA_WState_Created)) { + QPlatformIntegration *platform = QApplicationPrivate::platformIntegration(); + platform->moveToScreen(q, targetScreen); + } + } +} + +QPoint QWidget::mapToGlobal(const QPoint &pos) const +{ + int x=pos.x(), y=pos.y(); + const QWidget* w = this; + while (w) { + x += w->data->crect.x(); + y += w->data->crect.y(); + w = w->isWindow() ? 0 : w->parentWidget(); + } + return QPoint(x, y); +} + +QPoint QWidget::mapFromGlobal(const QPoint &pos) const +{ + int x=pos.x(), y=pos.y(); + const QWidget* w = this; + while (w) { + x -= w->data->crect.x(); + y -= w->data->crect.y(); + w = w->isWindow() ? 0 : w->parentWidget(); + } + return QPoint(x, y); +} + +void QWidgetPrivate::updateSystemBackground() {} + +#ifndef QT_NO_CURSOR +void QWidgetPrivate::setCursor_sys(const QCursor &cursor) +{ + Q_UNUSED(cursor); + Q_Q(QWidget); + if (q->isVisible()) + qt_lite_set_cursor(q, false); +} + +void QWidgetPrivate::unsetCursor_sys() +{ + Q_Q(QWidget); + if (q->isVisible()) + qt_lite_set_cursor(q, false); +} + +void QWidgetPrivate::updateCursor() const +{ + // XXX +} + +#endif //QT_NO_CURSOR + +void QWidgetPrivate::setWindowTitle_sys(const QString &caption) +{ + Q_Q(QWidget); + if (!q->isWindow()) + return; + + if (QPlatformWindow *window = q->platformWindow()) + window->setWindowTitle(caption); + +} + +void QWidgetPrivate::setWindowIcon_sys(bool /*forceReset*/) +{ +} + +void QWidgetPrivate::setWindowIconText_sys(const QString &iconText) +{ + Q_UNUSED(iconText); +} + +QWidget *qt_pressGrab = 0; +QWidget *qt_mouseGrb = 0; +static QWidget *keyboardGrb = 0; + +void QWidget::grabMouse() +{ + if (qt_mouseGrb) + qt_mouseGrb->releaseMouse(); + + // XXX + //qwsDisplay()->grabMouse(this,true); + + qt_mouseGrb = this; + qt_pressGrab = 0; +} + +#ifndef QT_NO_CURSOR +void QWidget::grabMouse(const QCursor &cursor) +{ + Q_UNUSED(cursor); + + if (qt_mouseGrb) + qt_mouseGrb->releaseMouse(); + + // XXX + //qwsDisplay()->grabMouse(this,true); + //qwsDisplay()->selectCursor(this, cursor.handle()); + qt_mouseGrb = this; + qt_pressGrab = 0; +} +#endif + +void QWidget::releaseMouse() +{ + if (qt_mouseGrb == this) { + // XXX + //qwsDisplay()->grabMouse(this,false); + qt_mouseGrb = 0; + } +} + +void QWidget::grabKeyboard() +{ + if (keyboardGrb) + keyboardGrb->releaseKeyboard(); + // XXX + //qwsDisplay()->grabKeyboard(this, true); + keyboardGrb = this; +} + +void QWidget::releaseKeyboard() +{ + if (keyboardGrb == this) { + // XXX + //qwsDisplay()->grabKeyboard(this, false); + keyboardGrb = 0; + } +} + +QWidget *QWidget::mouseGrabber() +{ + if (qt_mouseGrb) + return qt_mouseGrb; + return qt_pressGrab; +} + +QWidget *QWidget::keyboardGrabber() +{ + return keyboardGrb; +} + +void QWidget::activateWindow() +{ + // XXX +// qDebug() << "QWidget::activateWindow" << this; + QApplication::setActiveWindow(this); //##### +} + +void QWidgetPrivate::show_sys() +{ + Q_Q(QWidget); + q->setAttribute(Qt::WA_Mapped); + if (q->testAttribute(Qt::WA_DontShowOnScreen)) { + invalidateBuffer(q->rect()); + return; + } + + QApplication::postEvent(q, new QUpdateLaterEvent(q->rect())); + + QPlatformWindow *window = q->platformWindow(); + if (window) { + const QRect geomRect = q->geometry(); + const QRect windowRect = window->geometry(); + if (windowRect != geomRect) { + window->setGeometry(geomRect); + } + if (q->isWindow()) { + if (QWindowSurface *surface = q->windowSurface()) + if (windowRect.size() != geomRect.size()) { + surface->resize(geomRect.size()); + } + + if (window) + window->setVisible(true); + + if (q->windowType() != Qt::Popup && q->windowType() != Qt::ToolTip && !(q->windowFlags() & Qt::X11BypassWindowManagerHint)) + q->activateWindow(); //### + } + } +} + + +void QWidgetPrivate::hide_sys() +{ + Q_Q(QWidget); + q->setAttribute(Qt::WA_Mapped, false); + if (!q->isWindow()) { + QWidget *p = q->parentWidget(); + if (p &&p->isVisible()) { + invalidateBuffer(q->rect()); + } + return; + } + if (QPlatformWindow *window = q->platformWindow()) { + window->setVisible(false); + } + + //### we don't yet have proper focus event handling + if (q == QApplicationPrivate::active_window) + QApplication::setActiveWindow(0); + +} + +void QWidgetPrivate::setMaxWindowState_helper() +{ + setFullScreenSize_helper(); //### decoration size +} + +void QWidgetPrivate::setFullScreenSize_helper() +{ + Q_Q(QWidget); + + const uint old_state = data.in_set_window_state; + data.in_set_window_state = 1; + + const QRect screen = qApp->desktop()->screenGeometry(qApp->desktop()->screenNumber(q)); + q->move(screen.topLeft()); + q->resize(screen.size()); + + data.in_set_window_state = old_state; +} + +static Qt::WindowStates effectiveState(Qt::WindowStates state) + { + if (state & Qt::WindowMinimized) + return Qt::WindowMinimized; + else if (state & Qt::WindowFullScreen) + return Qt::WindowFullScreen; + else if (state & Qt::WindowMaximized) + return Qt::WindowMaximized; + return Qt::WindowNoState; + } + +void QWidget::setWindowState(Qt::WindowStates newstate) +{ + Q_D(QWidget); + Qt::WindowStates oldstate = windowState(); + if (oldstate == newstate) + return; + if (isWindow() && !testAttribute(Qt::WA_WState_Created)) + create(); + + data->window_state = newstate; + data->in_set_window_state = 1; + bool needShow = false; + Qt::WindowStates newEffectiveState = effectiveState(newstate); + Qt::WindowStates oldEffectiveState = effectiveState(oldstate); + if (isWindow() && newEffectiveState != oldEffectiveState) { + d->createTLExtra(); + if (oldEffectiveState == Qt::WindowNoState) { //normal + d->topData()->normalGeometry = geometry(); + } else if (oldEffectiveState == Qt::WindowFullScreen) { + setParent(0, d->topData()->savedFlags); + needShow = true; + } else if (oldEffectiveState == Qt::WindowMinimized) { + needShow = true; + } + + if (newEffectiveState == Qt::WindowMinimized) { + //### not ideal... + hide(); + needShow = false; + } else if (newEffectiveState == Qt::WindowFullScreen) { + d->topData()->savedFlags = windowFlags(); + setParent(0, Qt::FramelessWindowHint | (windowFlags() & Qt::WindowStaysOnTopHint)); + d->setFullScreenSize_helper(); + raise(); + needShow = true; + } else if (newEffectiveState == Qt::WindowMaximized) { + createWinId(); + d->setMaxWindowState_helper(); + } else { //normal + QRect r = d->topData()->normalGeometry; + if (r.width() >= 0) { + d->topData()->normalGeometry = QRect(0,0,-1,-1); + setGeometry(r); + } + } + } + data->in_set_window_state = 0; + + if (needShow) + show(); + + if (newstate & Qt::WindowActive) + activateWindow(); + + QWindowStateChangeEvent e(oldstate); + QApplication::sendEvent(this, &e); +} + +void QWidgetPrivate::setFocus_sys() +{ + +} + +void QWidgetPrivate::raise_sys() +{ + Q_Q(QWidget); + if (q->isWindow()) { + q->platformWindow()->raise(); + } +} + +void QWidgetPrivate::lower_sys() +{ + Q_Q(QWidget); + if (q->isWindow()) { + Q_ASSERT(q->testAttribute(Qt::WA_WState_Created)); + q->platformWindow()->lower(); + } else if (QWidget *p = q->parentWidget()) { + setDirtyOpaqueRegion(); + p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); + } +} + +void QWidgetPrivate::stackUnder_sys(QWidget*) +{ + Q_Q(QWidget); + if (QWidget *p = q->parentWidget()) { + setDirtyOpaqueRegion(); + p->d_func()->invalidateBuffer(effectiveRectFor(q->geometry())); + } +} + +void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) +{ + Q_Q(QWidget); + if (extra) { // any size restrictions? + w = qMin(w,extra->maxw); + h = qMin(h,extra->maxh); + w = qMax(w,extra->minw); + h = qMax(h,extra->minh); + } + + QPoint oldp = q->geometry().topLeft(); + QSize olds = q->size(); + QRect r(x, y, w, h); + + bool isResize = olds != r.size(); + isMove = oldp != r.topLeft(); //### why do we have isMove as a parameter? + + + // We only care about stuff that changes the geometry, or may + // cause the window manager to change its state + if (r.size() == olds && oldp == r.topLeft()) + return; + + if (!data.in_set_window_state) { + q->data->window_state &= ~Qt::WindowMaximized; + q->data->window_state &= ~Qt::WindowFullScreen; + if (q->isWindow()) + topData()->normalGeometry = QRect(0, 0, -1, -1); + } + + QPoint oldPos = q->pos(); + data.crect = r; + + if (q->isVisible()) { + if (q->platformWindow()) { + if (q->isWindow()) { + q->platformWindow()->setGeometry(q->frameGeometry()); + } else { + QPoint posInNativeParent = q->mapTo(q->nativeParentWidget(),QPoint()); + q->platformWindow()->setGeometry(QRect(posInNativeParent,r.size())); + } + const QWidgetBackingStore *bs = maybeBackingStore(); + if (bs->windowSurface) { + if (isResize) + bs->windowSurface->resize(r.size()); + } + } else { + if (isMove && !isResize) + moveRect(QRect(oldPos, olds), x - oldPos.x(), y - oldPos.y()); + else + invalidateBuffer_resizeHelper(oldPos, olds); + } + + if (isMove) { + QMoveEvent e(q->pos(), oldPos); + QApplication::sendEvent(q, &e); + } + if (isResize) { + QResizeEvent e(r.size(), olds); + QApplication::sendEvent(q, &e); + if (q->isWindow()) + q->update(); + } + } else { // not visible + if (isMove && q->pos() != oldPos) + q->setAttribute(Qt::WA_PendingMoveEvent, true); + if (isResize) + q->setAttribute(Qt::WA_PendingResizeEvent, true); + } + +} + +void QWidgetPrivate::setConstraints_sys() +{ +} + +void QWidgetPrivate::scroll_sys(int dx, int dy) +{ + Q_Q(QWidget); + scrollChildren(dx, dy); + scrollRect(q->rect(), dx, dy); +} + +void QWidgetPrivate::scroll_sys(int dx, int dy, const QRect &r) +{ + scrollRect(r, dx, dy); +} + +static QPlatformScreen *qt_screenForWidget(const QWidget *w) +{ + if (!w) + return 0; + QRect frame = w->frameGeometry(); + if (!w->isWindow()) + frame.moveTopLeft(w->mapToGlobal(QPoint(0, 0))); + const QPoint p = (frame.topLeft() + frame.bottomRight()) / 2; + + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); + + for (int i = 0; i < screens.size(); ++i) { + if (screens[i]->geometry().contains(p)) + return screens[i]; + } + + // Assume screen zero if we have it. + if (!screens.isEmpty()) + return screens[0]; + else + qWarning("qt_screenForWidget: no screens"); + + return 0; +} + +int QWidget::metric(PaintDeviceMetric m) const +{ + Q_D(const QWidget); + + QPlatformScreen *screen = qt_screenForWidget(this); + if (!screen) { + if (m == PdmDpiX || m == PdmDpiY) + return 72; + return QPaintDevice::metric(m); + } + int val; + if (m == PdmWidth) { + val = data->crect.width(); + } else if (m == PdmWidthMM) { + val = data->crect.width() * screen->physicalSize().width() / screen->geometry().width(); + } else if (m == PdmHeight) { + val = data->crect.height(); + } else if (m == PdmHeightMM) { + val = data->crect.height() * screen->physicalSize().height() / screen->geometry().height(); + } else if (m == PdmDepth) { + return screen->depth(); + } else if (m == PdmDpiX || m == PdmPhysicalDpiX) { + if (d->extra && d->extra->customDpiX) + return d->extra->customDpiX; + else if (d->parent) + return static_cast(d->parent)->metric(m); + return qRound(screen->geometry().width() / double(screen->physicalSize().width() / 25.4)); + } else if (m == PdmDpiY || m == PdmPhysicalDpiY) { + if (d->extra && d->extra->customDpiY) + return d->extra->customDpiY; + else if (d->parent) + return static_cast(d->parent)->metric(m); + return qRound(screen->geometry().height() / double(screen->physicalSize().height() / 25.4)); + } else { + val = QPaintDevice::metric(m);// XXX + } + return val; +} + +void QWidgetPrivate::createSysExtra() +{ +} + +void QWidgetPrivate::deleteSysExtra() +{ +} + +void QWidgetPrivate::createTLSysExtra() +{ +} + +void QWidgetPrivate::deleteTLSysExtra() +{ +} + +void QWidgetPrivate::registerDropSite(bool on) +{ + Q_UNUSED(on); +} + +void QWidgetPrivate::setMask_sys(const QRegion ®ion) +{ + Q_UNUSED(region); + // XXX +} + +void QWidgetPrivate::updateFrameStrut() +{ + // XXX +} + +void QWidgetPrivate::setWindowOpacity_sys(qreal level) +{ + Q_Q(QWidget); + q->platformWindow()->setOpacity(level); +} + +void QWidgetPrivate::setWSGeometry(bool dontShow, const QRect &oldRect) +{ + Q_UNUSED(dontShow); + Q_UNUSED(oldRect); + // XXX +} + +QPaintEngine *QWidget::paintEngine() const +{ + qWarning("QWidget::paintEngine: Should no longer be called"); + return 0; //##### @@@ +} + +QWindowSurface *QWidgetPrivate::createDefaultWindowSurface_sys() +{ + Q_Q(QWidget); + return QApplicationPrivate::platformIntegration()->createWindowSurface(q,0); +} + +void QWidgetPrivate::setModal_sys() +{ +} + +#ifndef QT_NO_CURSOR +void qt_lite_set_cursor(QWidget * w, bool force) +{ + static QCursor arrowCursor(Qt::ArrowCursor); + static QPointer lastUnderMouse = 0; + + QCursor * override = QApplication::overrideCursor(); + + if (override && w != 0) + return; + + QWidget *cursorWidget; + QCursor cursorCursor; + + do { + if (w == 0) { + if (override) { + cursorCursor = *override; + cursorWidget = QApplication::topLevelAt(QCursor::pos()); + break; + } + w = QApplication::widgetAt(QCursor::pos()); + if (w == 0) // clear the override cursor while over empty space + w = QApplication::desktop(); + } else if (force) { + lastUnderMouse = w; + } else if (w->testAttribute(Qt::WA_WState_Created) && lastUnderMouse + && lastUnderMouse->effectiveWinId() == w->effectiveWinId()) { + w = lastUnderMouse; + } + if (w == QApplication::desktop() && !override) { + cursorCursor = arrowCursor; + cursorWidget = w; + break; + } + + QWidget * curWin = QApplication::activeWindow(); + if (!curWin && w && w->internalWinId()) + return; + QWidget* cW = w && !w->internalWinId() ? w : curWin; + + if (!cW || cW->window() != w->window() || + !cW->isVisible() || !cW->underMouse() || override) + return; + + cursorCursor = w->cursor(); + cursorWidget = w; + } while (0); + foreach (QWeakPointer cursor, QGraphicsSystemCursorPrivate::getInstances()) + if (cursor) + cursor.data()->changeCursor(&cursorCursor, cursorWidget); +} +#endif //QT_NO_CURSOR + +QT_END_NAMESPACE diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 46be728..07017ec 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -189,11 +189,11 @@ embedded { embedded_lite { SOURCES += \ - painting/qcolormap_lite.cpp \ - painting/qpaintdevice_lite.cpp \ - painting/qgraphicssystemcursor_lite.cpp + painting/qcolormap_qpa.cpp \ + painting/qpaintdevice_qpa.cpp \ + painting/qgraphicssystemcursor_qpa.cpp HEADERS += \ - painting/qgraphicssystemcursor_lite.h + painting/qgraphicssystemcursor_qpa.h } symbian { diff --git a/src/gui/painting/qcolormap_lite.cpp b/src/gui/painting/qcolormap_lite.cpp deleted file mode 100644 index 1f4fea8..0000000 --- a/src/gui/painting/qcolormap_lite.cpp +++ /dev/null @@ -1,231 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qcolormap.h" -#include "qcolor.h" -#include "qpaintdevice.h" -#include "private/qapplication_p.h" -#include "private/qgraphicssystem_p.h" - -QT_BEGIN_NAMESPACE - -class QColormapPrivate -{ -public: - inline QColormapPrivate() - : ref(1), mode(QColormap::Direct), depth(0), numcolors(0) - { } - - QAtomicInt ref; - - QColormap::Mode mode; - int depth; - int numcolors; -}; - -static QColormapPrivate *screenMap = 0; - -void QColormap::initialize() -{ - screenMap = new QColormapPrivate; - - QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); - QList screens = pi->screens(); - - screenMap->depth = screens[0]->depth(); - if (screenMap->depth < 8) { - screenMap->mode = QColormap::Indexed; - screenMap->numcolors = 256; - } else { - screenMap->mode = QColormap::Direct; - screenMap->numcolors = -1; - } -} - -void QColormap::cleanup() -{ - delete screenMap; - screenMap = 0; -} - -QColormap QColormap::instance(int /*screen*/) -{ - return QColormap(); -} - -QColormap::QColormap() - : d(screenMap) -{ d->ref.ref(); } - -QColormap::QColormap(const QColormap &colormap) - :d (colormap.d) -{ d->ref.ref(); } - -QColormap::~QColormap() -{ - if (!d->ref.deref()) - delete d; -} - -QColormap::Mode QColormap::mode() const -{ return d->mode; } - - -int QColormap::depth() const -{ return d->depth; } - - -int QColormap::size() const -{ - return d->numcolors; -} - -#ifndef QT_QWS_DEPTH16_RGB -#define QT_QWS_DEPTH16_RGB 565 -#endif -static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100); -static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10); -static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10); -static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits); -static const int qt_green_shift = qt_bbits-(8-qt_gbits); -static const int qt_neg_blue_shift = 8-qt_bbits; -static const int qt_blue_mask = (1<> qt_neg_blue_shift; - - return (tb & qt_blue_mask) | (tg & qt_green_mask) | (tr & qt_red_mask); -} - -inline QRgb qt_conv16ToRgb(ushort c) -{ - const int r=(c & qt_red_mask); - const int g=(c & qt_green_mask); - const int b=(c & qt_blue_mask); - const int tr = r >> qt_red_shift | r >> qt_red_rounding_shift; - const int tg = g >> qt_green_shift | g >> qt_green_rounding_shift; - const int tb = b << qt_neg_blue_shift | b >> qt_blue_rounding_shift; - - return qRgb(tr,tg,tb); -} - -uint QColormap::pixel(const QColor &color) const -{ - QRgb rgb = color.rgba(); - if (d->mode == QColormap::Direct) { - switch(d->depth) { - case 16: - return qt_convRgbTo16(rgb); - case 24: - case 32: - { - const int r = qRed(rgb); - const int g = qGreen(rgb); - const int b = qBlue(rgb); - const int red_shift = 16; - const int green_shift = 8; - const int red_mask = 0xff0000; - const int green_mask = 0x00ff00; - const int blue_mask = 0x0000ff; - const int tg = g << green_shift; -#ifdef QT_QWS_DEPTH_32_BGR - if (qt_screen->pixelType() == QScreen::BGRPixel) { - const int tb = b << red_shift; - return 0xff000000 | (r & blue_mask) | (tg & green_mask) | (tb & red_mask); - } -#endif - const int tr = r << red_shift; - return 0xff000000 | (b & blue_mask) | (tg & green_mask) | (tr & red_mask); - } - } - } - //XXX - //return qt_screen->alloc(qRed(rgb), qGreen(rgb), qBlue(rgb)); - return 0; -} - -const QColor QColormap::colorAt(uint pixel) const -{ - if (d->mode == Direct) { - if (d->depth == 16) { - pixel = qt_conv16ToRgb(pixel); - } - const int red_shift = 16; - const int green_shift = 8; - const int red_mask = 0xff0000; - const int green_mask = 0x00ff00; - const int blue_mask = 0x0000ff; -#ifdef QT_QWS_DEPTH_32_BGR - if (qt_screen->pixelType() == QScreen::BGRPixel) { - return QColor((pixel & blue_mask), - (pixel & green_mask) >> green_shift, - (pixel & red_mask) >> red_shift); - } -#endif - return QColor((pixel & red_mask) >> red_shift, - (pixel & green_mask) >> green_shift, - (pixel & blue_mask)); - } -#if 0 // XXX - Q_ASSERT_X(int(pixel) < qt_screen->numCols(), "QColormap::colorAt", "pixel out of bounds of palette"); - return QColor(qt_screen->clut()[pixel]); -#endif - return QColor(); -} - -const QVector QColormap::colormap() const -{ - return QVector(); -} - -QColormap &QColormap::operator=(const QColormap &colormap) -{ qAtomicAssign(d, colormap.d); return *this; } - -QT_END_NAMESPACE diff --git a/src/gui/painting/qcolormap_qpa.cpp b/src/gui/painting/qcolormap_qpa.cpp new file mode 100644 index 0000000..1f4fea8 --- /dev/null +++ b/src/gui/painting/qcolormap_qpa.cpp @@ -0,0 +1,231 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcolormap.h" +#include "qcolor.h" +#include "qpaintdevice.h" +#include "private/qapplication_p.h" +#include "private/qgraphicssystem_p.h" + +QT_BEGIN_NAMESPACE + +class QColormapPrivate +{ +public: + inline QColormapPrivate() + : ref(1), mode(QColormap::Direct), depth(0), numcolors(0) + { } + + QAtomicInt ref; + + QColormap::Mode mode; + int depth; + int numcolors; +}; + +static QColormapPrivate *screenMap = 0; + +void QColormap::initialize() +{ + screenMap = new QColormapPrivate; + + QPlatformIntegration *pi = QApplicationPrivate::platformIntegration(); + QList screens = pi->screens(); + + screenMap->depth = screens[0]->depth(); + if (screenMap->depth < 8) { + screenMap->mode = QColormap::Indexed; + screenMap->numcolors = 256; + } else { + screenMap->mode = QColormap::Direct; + screenMap->numcolors = -1; + } +} + +void QColormap::cleanup() +{ + delete screenMap; + screenMap = 0; +} + +QColormap QColormap::instance(int /*screen*/) +{ + return QColormap(); +} + +QColormap::QColormap() + : d(screenMap) +{ d->ref.ref(); } + +QColormap::QColormap(const QColormap &colormap) + :d (colormap.d) +{ d->ref.ref(); } + +QColormap::~QColormap() +{ + if (!d->ref.deref()) + delete d; +} + +QColormap::Mode QColormap::mode() const +{ return d->mode; } + + +int QColormap::depth() const +{ return d->depth; } + + +int QColormap::size() const +{ + return d->numcolors; +} + +#ifndef QT_QWS_DEPTH16_RGB +#define QT_QWS_DEPTH16_RGB 565 +#endif +static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100); +static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10); +static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10); +static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits); +static const int qt_green_shift = qt_bbits-(8-qt_gbits); +static const int qt_neg_blue_shift = 8-qt_bbits; +static const int qt_blue_mask = (1<> qt_neg_blue_shift; + + return (tb & qt_blue_mask) | (tg & qt_green_mask) | (tr & qt_red_mask); +} + +inline QRgb qt_conv16ToRgb(ushort c) +{ + const int r=(c & qt_red_mask); + const int g=(c & qt_green_mask); + const int b=(c & qt_blue_mask); + const int tr = r >> qt_red_shift | r >> qt_red_rounding_shift; + const int tg = g >> qt_green_shift | g >> qt_green_rounding_shift; + const int tb = b << qt_neg_blue_shift | b >> qt_blue_rounding_shift; + + return qRgb(tr,tg,tb); +} + +uint QColormap::pixel(const QColor &color) const +{ + QRgb rgb = color.rgba(); + if (d->mode == QColormap::Direct) { + switch(d->depth) { + case 16: + return qt_convRgbTo16(rgb); + case 24: + case 32: + { + const int r = qRed(rgb); + const int g = qGreen(rgb); + const int b = qBlue(rgb); + const int red_shift = 16; + const int green_shift = 8; + const int red_mask = 0xff0000; + const int green_mask = 0x00ff00; + const int blue_mask = 0x0000ff; + const int tg = g << green_shift; +#ifdef QT_QWS_DEPTH_32_BGR + if (qt_screen->pixelType() == QScreen::BGRPixel) { + const int tb = b << red_shift; + return 0xff000000 | (r & blue_mask) | (tg & green_mask) | (tb & red_mask); + } +#endif + const int tr = r << red_shift; + return 0xff000000 | (b & blue_mask) | (tg & green_mask) | (tr & red_mask); + } + } + } + //XXX + //return qt_screen->alloc(qRed(rgb), qGreen(rgb), qBlue(rgb)); + return 0; +} + +const QColor QColormap::colorAt(uint pixel) const +{ + if (d->mode == Direct) { + if (d->depth == 16) { + pixel = qt_conv16ToRgb(pixel); + } + const int red_shift = 16; + const int green_shift = 8; + const int red_mask = 0xff0000; + const int green_mask = 0x00ff00; + const int blue_mask = 0x0000ff; +#ifdef QT_QWS_DEPTH_32_BGR + if (qt_screen->pixelType() == QScreen::BGRPixel) { + return QColor((pixel & blue_mask), + (pixel & green_mask) >> green_shift, + (pixel & red_mask) >> red_shift); + } +#endif + return QColor((pixel & red_mask) >> red_shift, + (pixel & green_mask) >> green_shift, + (pixel & blue_mask)); + } +#if 0 // XXX + Q_ASSERT_X(int(pixel) < qt_screen->numCols(), "QColormap::colorAt", "pixel out of bounds of palette"); + return QColor(qt_screen->clut()[pixel]); +#endif + return QColor(); +} + +const QVector QColormap::colormap() const +{ + return QVector(); +} + +QColormap &QColormap::operator=(const QColormap &colormap) +{ qAtomicAssign(d, colormap.d); return *this; } + +QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor_lite.cpp b/src/gui/painting/qgraphicssystemcursor_lite.cpp deleted file mode 100644 index 752b406..0000000 --- a/src/gui/painting/qgraphicssystemcursor_lite.cpp +++ /dev/null @@ -1,664 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "qgraphicssystemcursor_lite.h" - -#include -#include -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -QList > QGraphicsSystemCursorPrivate::instances; - -/*! - \class QGraphicsSystemCursor - - \brief The QGraphicsSystemCursor class provides information about - pointer device events (movement, buttons), and requests to change - the currently displayed cursor. - - Note that QGraphicsSystemCursor does not include any graphics for - display. An application that sets a QCursor may provide its own - graphics. - - \sa QGraphicsSystemCursorImage -*/ - -/*! - \fn virtual void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & event) - - This method is called by Qt whenever a QMouseEvent is generated by the - underlying pointer input. \a event is a reference to the QMouseEvent in - question. A default do-nothing implementation is provided. - - \sa QApplicationPrivate::handleMouseEvent() -*/ - -/*! - \fn virtual void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) - - \brief This method is called by Qt whenever the cursor graphic should be changed. - - Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. - - \a widgetCursor is a pointer to the QCursor that should be displayed. - - \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note - that this may be 0 if the current position is not occupied by a displayed widget. - - \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() -*/ - -/*! - \fn QGraphicsSystemCursor::QGraphicsSystemCursor() - - \brief Constructs a QGraphicsSystemCursor -*/ -QGraphicsSystemCursor::QGraphicsSystemCursor(QPlatformScreen *scr ) - : screen(scr) -{ - QGraphicsSystemCursorPrivate::instances.append(this); -} - -// End of display and pointer event handling code -// Beginning of built-in cursor graphics -// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp - -/*! - \class QGraphicsSystemCursorImage - - \brief The QGraphicsSystemCursorImage class provides a set of graphics - intended to be used as cursors. - - \sa QGraphicsSystemCursor -*/ - -static QGraphicsSystemCursorImage *systemCursorTable[Qt::LastCursor+1]; -static bool systemCursorTableInit = false; - -// 16 x 16 -static const uchar cur_arrow_bits[] = { - 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, - 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, - 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; -static const uchar mcur_arrow_bits[] = { - 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, - 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, - 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; - -static const unsigned char cur_up_arrow_bits[] = { - 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, - 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; -static const unsigned char mcur_up_arrow_bits[] = { - 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, - 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; - -static const unsigned char cur_cross_bits[] = { - 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; -static const unsigned char mcur_cross_bits[] = { - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; - -static const uchar cur_ibeam_bits[] = { - 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_ibeam_bits[] = { - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; - -static const uchar cur_ver_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, - 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; -static const uchar mcur_ver_bits[] = { - 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, - 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, - 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; - -static const uchar cur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, - 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, - 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, - 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; -static const uchar cur_bdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, - 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, - 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_bdiag_bits[] = { - 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, - 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, - 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; -static const uchar cur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, - 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, - 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, - 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, - 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; -static const uchar cur_blank_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -// 20 x 20 -static const uchar forbidden_bits[] = { - 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, - 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, - 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, - 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; - -static const uchar forbiddenm_bits[] = { - 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, - 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, - 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, - 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; - -// 32 x 32 -static const uchar wait_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, - 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, - 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, - 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar wait_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, - 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar hsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, - 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar hsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, - 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, - 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, - 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phand_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, - 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, - 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, - 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phandm_bits[] = { - 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, - 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, - 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, - 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, - 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar size_all_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, - 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar size_all_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, - 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar whatsthis_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, - 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, - 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, - 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, - 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, - 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static const uchar whatsthism_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, - 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, - 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, - 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, - 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, - 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - -static const uchar busy_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, - 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, - 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, - 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, - 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; -static const uchar busym_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, - 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, - 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, - 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, - 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -// 16 x 16 -static const uchar openhand_bits[] = { - 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, - 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, - 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; -static const uchar openhandm_bits[] = { - 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, - 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, - 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; -static const uchar closedhand_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, - 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, - 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; -static const uchar closedhandm_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, - 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, - 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; - -void QGraphicsSystemCursorImage::createSystemCursor(int id) -{ - if (!systemCursorTableInit) { - for (int i = 0; i <= Qt::LastCursor; i++) - systemCursorTable[i] = 0; - systemCursorTableInit = true; - } - switch (id) { - // 16x16 cursors - case Qt::ArrowCursor: - systemCursorTable[Qt::ArrowCursor] = - new QGraphicsSystemCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); - break; - - case Qt::UpArrowCursor: - systemCursorTable[Qt::UpArrowCursor] = - new QGraphicsSystemCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); - break; - - case Qt::CrossCursor: - systemCursorTable[Qt::CrossCursor] = - new QGraphicsSystemCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); - break; - - case Qt::IBeamCursor: - systemCursorTable[Qt::IBeamCursor] = - new QGraphicsSystemCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); - break; - - case Qt::SizeVerCursor: - systemCursorTable[Qt::SizeVerCursor] = - new QGraphicsSystemCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); - break; - - case Qt::SizeHorCursor: - systemCursorTable[Qt::SizeHorCursor] = - new QGraphicsSystemCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); - break; - - case Qt::SizeBDiagCursor: - systemCursorTable[Qt::SizeBDiagCursor] = - new QGraphicsSystemCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); - break; - - case Qt::SizeFDiagCursor: - systemCursorTable[Qt::SizeFDiagCursor] = - new QGraphicsSystemCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); - break; - - case Qt::BlankCursor: - systemCursorTable[Qt::BlankCursor] = - new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); - break; - - // 20x20 cursors - case Qt::ForbiddenCursor: - systemCursorTable[Qt::ForbiddenCursor] = - new QGraphicsSystemCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); - break; - - // 32x32 cursors - case Qt::WaitCursor: - systemCursorTable[Qt::WaitCursor] = - new QGraphicsSystemCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); - break; - - case Qt::SplitVCursor: - systemCursorTable[Qt::SplitVCursor] = - new QGraphicsSystemCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SplitHCursor: - systemCursorTable[Qt::SplitHCursor] = - new QGraphicsSystemCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SizeAllCursor: - systemCursorTable[Qt::SizeAllCursor] = - new QGraphicsSystemCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); - break; - - case Qt::PointingHandCursor: - systemCursorTable[Qt::PointingHandCursor] = - new QGraphicsSystemCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); - break; - - case Qt::WhatsThisCursor: - systemCursorTable[Qt::WhatsThisCursor] = - new QGraphicsSystemCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); - break; - case Qt::BusyCursor: - systemCursorTable[Qt::BusyCursor] = - new QGraphicsSystemCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); - break; - - case Qt::OpenHandCursor: - systemCursorTable[Qt::OpenHandCursor] = - new QGraphicsSystemCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); - break; - case Qt::ClosedHandCursor: - systemCursorTable[Qt::ClosedHandCursor] = - new QGraphicsSystemCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); - break; - default: - qWarning("Unknown system cursor %d", id); - } -} - -/*! - \fn void QGraphicsSystemCursorImage::set(Qt::CursorShape id) - - \brief Calling this method sets the cursor image to the specified shape - - \a id is one of the defined Qt::CursorShape values. - - If id is invalid, Qt::BitmapCursor, or unknown by the implementation, - Qt::ArrowCursor is used instead. -*/ - -void QGraphicsSystemCursorImage::set(Qt::CursorShape id) -{ - QGraphicsSystemCursorImage *cursor = 0; - if (id >= 0 && id <= Qt::LastCursor) { - if (!systemCursorTable[id]) - createSystemCursor(id); - cursor = systemCursorTable[id]; - } - - if (cursor == 0) { - if (!systemCursorTable[Qt::ArrowCursor]) - createSystemCursor(Qt::ArrowCursor); - cursor = systemCursorTable[Qt::ArrowCursor]; - } - cursorImage = cursor->cursorImage; - hot = cursor->hot; -} - -/*! - \fn void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) - - \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) - - \a image A pointer to a QImage - - \a hx The x coordinate of the cursor's hotspot - - \a hy the y coordinate of the cursor's hotspot -*/ - -void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - cursorImage = *image; -} - -/*! - \fn void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) - - \brief set the cursor image to the graphic represented by the combination of data, mask, - width, and height - - \a data The pixel data of the graphic - - \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn - - \a width The width of the graphic in pixels - - \a height The height of the graphic in pixels - - \a hx The X hotspot of the cursor graphic - - \a hy The Y hotspot of the cursor graphic -*/ -void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, - int width, int height, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - - cursorImage = QImage(width,height, QImage::Format_Indexed8); - - if (!width || !height || !data || !mask || cursorImage.isNull()) - return; - - cursorImage.setNumColors(3); - cursorImage.setColor(0, 0xff000000); - cursorImage.setColor(1, 0xffffffff); - cursorImage.setColor(2, 0x00000000); - - int bytesPerLine = (width + 7) / 8; - int p = 0; - int d, m; - - int x = -1, w = 0; - - uchar *cursor_data = cursorImage.bits(); - int bpl = cursorImage.bytesPerLine(); - for (int i = 0; i < height; i++) - { - for (int j = 0; j < bytesPerLine; j++, data++, mask++) - { - for (int b = 0; b < 8 && j*8+b < width; b++) - { - d = *data & (1 << b); - m = *mask & (1 << b); - if (d && m) p = 0; - else if (!d && m) p = 1; - else p = 2; - cursor_data[j*8+b] = p; - - // calc region - if (x < 0 && m) - x = j*8+b; - else if (x >= 0 && !m) { - x = -1; - w = 0; - } - if (m) - w++; - } - } - if (x >= 0) { - x = -1; - w = 0; - } - cursor_data += bpl; - } - -} - -/*! - \fn QGraphicsSystemCursorImage::QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - - \brief set the cursor image to the graphic represented by the combination of data, mask, - width, and height - - \a data The pixel data of the graphic - - \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn - - \a width The width of the graphic in pixels - - \a height The height of the graphic in pixels - - \a hotX The X hotspot of the cursor graphic - - \a hotY The Y hotspot of the cursor graphic - - \sa set -*/ - -/*! - \fn QImage *QGraphicsSystemCursorImage::image() - - \brief Return the cursor graphic as a pointer to a QImage -*/ - -/*! - \fn QPoint QGraphicsSystemCursorImage::hotspot() - - \brief Return the cursor's hotspot -*/ - -QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor_lite.h b/src/gui/painting/qgraphicssystemcursor_lite.h deleted file mode 100644 index 9c65f7f..0000000 --- a/src/gui/painting/qgraphicssystemcursor_lite.h +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QGRAPHICSSYSTEMCURSOR_H -#define QGRAPHICSSYSTEMCURSOR_H - -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -// Cursor graphics management -class Q_GUI_EXPORT QGraphicsSystemCursorImage { -public: - QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - { set(data, mask, width, height, hotX, hotY); } - QImage * image() { return &cursorImage; } - QPoint hotspot() { return hot; } - void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void set(const QImage * image, int hx, int hy); - void set(Qt::CursorShape); -private: - static void createSystemCursor(int id); - QImage cursorImage; - QPoint hot; -}; - -class QGraphicsSystemCursor; - -class QGraphicsSystemCursorPrivate { -public: - static QList > getInstances() { return instances; } - static QList > instances; -}; - -class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { -public: - QGraphicsSystemCursor(QPlatformScreen *); - - // input methods - virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } - virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; - -protected: - QPlatformScreen* screen; // Where to request an update - -private: - Q_DECLARE_PRIVATE(QGraphicsSystemCursor); - friend void qt_lite_set_cursor(QWidget * w, bool force); - friend class QApplicationPrivate; -}; - -QT_END_NAMESPACE - -#endif // QGRAPHICSSYSTEMCURSOR_H diff --git a/src/gui/painting/qgraphicssystemcursor_qpa.cpp b/src/gui/painting/qgraphicssystemcursor_qpa.cpp new file mode 100644 index 0000000..24376f9 --- /dev/null +++ b/src/gui/painting/qgraphicssystemcursor_qpa.cpp @@ -0,0 +1,664 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qgraphicssystemcursor_qpa.h" + +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +QList > QGraphicsSystemCursorPrivate::instances; + +/*! + \class QGraphicsSystemCursor + + \brief The QGraphicsSystemCursor class provides information about + pointer device events (movement, buttons), and requests to change + the currently displayed cursor. + + Note that QGraphicsSystemCursor does not include any graphics for + display. An application that sets a QCursor may provide its own + graphics. + + \sa QGraphicsSystemCursorImage +*/ + +/*! + \fn virtual void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & event) + + This method is called by Qt whenever a QMouseEvent is generated by the + underlying pointer input. \a event is a reference to the QMouseEvent in + question. A default do-nothing implementation is provided. + + \sa QApplicationPrivate::handleMouseEvent() +*/ + +/*! + \fn virtual void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) + + \brief This method is called by Qt whenever the cursor graphic should be changed. + + Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. + + \a widgetCursor is a pointer to the QCursor that should be displayed. + + \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note + that this may be 0 if the current position is not occupied by a displayed widget. + + \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() +*/ + +/*! + \fn QGraphicsSystemCursor::QGraphicsSystemCursor() + + \brief Constructs a QGraphicsSystemCursor +*/ +QGraphicsSystemCursor::QGraphicsSystemCursor(QPlatformScreen *scr ) + : screen(scr) +{ + QGraphicsSystemCursorPrivate::instances.append(this); +} + +// End of display and pointer event handling code +// Beginning of built-in cursor graphics +// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp + +/*! + \class QGraphicsSystemCursorImage + + \brief The QGraphicsSystemCursorImage class provides a set of graphics + intended to be used as cursors. + + \sa QGraphicsSystemCursor +*/ + +static QGraphicsSystemCursorImage *systemCursorTable[Qt::LastCursor+1]; +static bool systemCursorTableInit = false; + +// 16 x 16 +static const uchar cur_arrow_bits[] = { + 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, + 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, + 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; +static const uchar mcur_arrow_bits[] = { + 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, + 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, + 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; + +static const unsigned char cur_up_arrow_bits[] = { + 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, + 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; +static const unsigned char mcur_up_arrow_bits[] = { + 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, + 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; + +static const unsigned char cur_cross_bits[] = { + 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; +static const unsigned char mcur_cross_bits[] = { + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; + +static const uchar cur_ibeam_bits[] = { + 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_ibeam_bits[] = { + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; + +static const uchar cur_ver_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; +static const uchar mcur_ver_bits[] = { + 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, + 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, + 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; + +static const uchar cur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, + 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, + 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, + 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; +static const uchar cur_bdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, + 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, + 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_bdiag_bits[] = { + 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, + 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, + 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; +static const uchar cur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, + 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, + 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, + 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, + 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; +static const uchar cur_blank_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +// 20 x 20 +static const uchar forbidden_bits[] = { + 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, + 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, + 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, + 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; + +static const uchar forbiddenm_bits[] = { + 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, + 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, + 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, + 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; + +// 32 x 32 +static const uchar wait_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, + 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, + 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, + 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar wait_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, + 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar hsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, + 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar hsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, + 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, + 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, + 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phand_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, + 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, + 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phandm_bits[] = { + 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, + 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, + 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, + 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, + 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar size_all_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, + 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar size_all_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, + 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar whatsthis_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, + 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, + 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, + 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, + 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +static const uchar whatsthism_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, + 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, + 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, + 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, + 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, + 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; + +static const uchar busy_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, + 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, + 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, + 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, + 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static const uchar busym_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, + 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, + 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, + 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, + 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +// 16 x 16 +static const uchar openhand_bits[] = { + 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, + 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, + 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; +static const uchar openhandm_bits[] = { + 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, + 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, + 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; +static const uchar closedhand_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, + 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, + 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; +static const uchar closedhandm_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, + 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, + 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; + +void QGraphicsSystemCursorImage::createSystemCursor(int id) +{ + if (!systemCursorTableInit) { + for (int i = 0; i <= Qt::LastCursor; i++) + systemCursorTable[i] = 0; + systemCursorTableInit = true; + } + switch (id) { + // 16x16 cursors + case Qt::ArrowCursor: + systemCursorTable[Qt::ArrowCursor] = + new QGraphicsSystemCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); + break; + + case Qt::UpArrowCursor: + systemCursorTable[Qt::UpArrowCursor] = + new QGraphicsSystemCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); + break; + + case Qt::CrossCursor: + systemCursorTable[Qt::CrossCursor] = + new QGraphicsSystemCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); + break; + + case Qt::IBeamCursor: + systemCursorTable[Qt::IBeamCursor] = + new QGraphicsSystemCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); + break; + + case Qt::SizeVerCursor: + systemCursorTable[Qt::SizeVerCursor] = + new QGraphicsSystemCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); + break; + + case Qt::SizeHorCursor: + systemCursorTable[Qt::SizeHorCursor] = + new QGraphicsSystemCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); + break; + + case Qt::SizeBDiagCursor: + systemCursorTable[Qt::SizeBDiagCursor] = + new QGraphicsSystemCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); + break; + + case Qt::SizeFDiagCursor: + systemCursorTable[Qt::SizeFDiagCursor] = + new QGraphicsSystemCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); + break; + + case Qt::BlankCursor: + systemCursorTable[Qt::BlankCursor] = + new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); + break; + + // 20x20 cursors + case Qt::ForbiddenCursor: + systemCursorTable[Qt::ForbiddenCursor] = + new QGraphicsSystemCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); + break; + + // 32x32 cursors + case Qt::WaitCursor: + systemCursorTable[Qt::WaitCursor] = + new QGraphicsSystemCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); + break; + + case Qt::SplitVCursor: + systemCursorTable[Qt::SplitVCursor] = + new QGraphicsSystemCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SplitHCursor: + systemCursorTable[Qt::SplitHCursor] = + new QGraphicsSystemCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SizeAllCursor: + systemCursorTable[Qt::SizeAllCursor] = + new QGraphicsSystemCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); + break; + + case Qt::PointingHandCursor: + systemCursorTable[Qt::PointingHandCursor] = + new QGraphicsSystemCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); + break; + + case Qt::WhatsThisCursor: + systemCursorTable[Qt::WhatsThisCursor] = + new QGraphicsSystemCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); + break; + case Qt::BusyCursor: + systemCursorTable[Qt::BusyCursor] = + new QGraphicsSystemCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); + break; + + case Qt::OpenHandCursor: + systemCursorTable[Qt::OpenHandCursor] = + new QGraphicsSystemCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); + break; + case Qt::ClosedHandCursor: + systemCursorTable[Qt::ClosedHandCursor] = + new QGraphicsSystemCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); + break; + default: + qWarning("Unknown system cursor %d", id); + } +} + +/*! + \fn void QGraphicsSystemCursorImage::set(Qt::CursorShape id) + + \brief Calling this method sets the cursor image to the specified shape + + \a id is one of the defined Qt::CursorShape values. + + If id is invalid, Qt::BitmapCursor, or unknown by the implementation, + Qt::ArrowCursor is used instead. +*/ + +void QGraphicsSystemCursorImage::set(Qt::CursorShape id) +{ + QGraphicsSystemCursorImage *cursor = 0; + if (id >= 0 && id <= Qt::LastCursor) { + if (!systemCursorTable[id]) + createSystemCursor(id); + cursor = systemCursorTable[id]; + } + + if (cursor == 0) { + if (!systemCursorTable[Qt::ArrowCursor]) + createSystemCursor(Qt::ArrowCursor); + cursor = systemCursorTable[Qt::ArrowCursor]; + } + cursorImage = cursor->cursorImage; + hot = cursor->hot; +} + +/*! + \fn void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) + + \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) + + \a image A pointer to a QImage + + \a hx The x coordinate of the cursor's hotspot + + \a hy the y coordinate of the cursor's hotspot +*/ + +void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + cursorImage = *image; +} + +/*! + \fn void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hx The X hotspot of the cursor graphic + + \a hy The Y hotspot of the cursor graphic +*/ +void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, + int width, int height, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + + cursorImage = QImage(width,height, QImage::Format_Indexed8); + + if (!width || !height || !data || !mask || cursorImage.isNull()) + return; + + cursorImage.setNumColors(3); + cursorImage.setColor(0, 0xff000000); + cursorImage.setColor(1, 0xffffffff); + cursorImage.setColor(2, 0x00000000); + + int bytesPerLine = (width + 7) / 8; + int p = 0; + int d, m; + + int x = -1, w = 0; + + uchar *cursor_data = cursorImage.bits(); + int bpl = cursorImage.bytesPerLine(); + for (int i = 0; i < height; i++) + { + for (int j = 0; j < bytesPerLine; j++, data++, mask++) + { + for (int b = 0; b < 8 && j*8+b < width; b++) + { + d = *data & (1 << b); + m = *mask & (1 << b); + if (d && m) p = 0; + else if (!d && m) p = 1; + else p = 2; + cursor_data[j*8+b] = p; + + // calc region + if (x < 0 && m) + x = j*8+b; + else if (x >= 0 && !m) { + x = -1; + w = 0; + } + if (m) + w++; + } + } + if (x >= 0) { + x = -1; + w = 0; + } + cursor_data += bpl; + } + +} + +/*! + \fn QGraphicsSystemCursorImage::QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hotX The X hotspot of the cursor graphic + + \a hotY The Y hotspot of the cursor graphic + + \sa set +*/ + +/*! + \fn QImage *QGraphicsSystemCursorImage::image() + + \brief Return the cursor graphic as a pointer to a QImage +*/ + +/*! + \fn QPoint QGraphicsSystemCursorImage::hotspot() + + \brief Return the cursor's hotspot +*/ + +QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor_qpa.h b/src/gui/painting/qgraphicssystemcursor_qpa.h new file mode 100644 index 0000000..9c65f7f --- /dev/null +++ b/src/gui/painting/qgraphicssystemcursor_qpa.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QGRAPHICSSYSTEMCURSOR_H +#define QGRAPHICSSYSTEMCURSOR_H + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +// Cursor graphics management +class Q_GUI_EXPORT QGraphicsSystemCursorImage { +public: + QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + { set(data, mask, width, height, hotX, hotY); } + QImage * image() { return &cursorImage; } + QPoint hotspot() { return hot; } + void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void set(const QImage * image, int hx, int hy); + void set(Qt::CursorShape); +private: + static void createSystemCursor(int id); + QImage cursorImage; + QPoint hot; +}; + +class QGraphicsSystemCursor; + +class QGraphicsSystemCursorPrivate { +public: + static QList > getInstances() { return instances; } + static QList > instances; +}; + +class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { +public: + QGraphicsSystemCursor(QPlatformScreen *); + + // input methods + virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } + virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; + +protected: + QPlatformScreen* screen; // Where to request an update + +private: + Q_DECLARE_PRIVATE(QGraphicsSystemCursor); + friend void qt_lite_set_cursor(QWidget * w, bool force); + friend class QApplicationPrivate; +}; + +QT_END_NAMESPACE + +#endif // QGRAPHICSSYSTEMCURSOR_H diff --git a/src/gui/painting/qpaintdevice_lite.cpp b/src/gui/painting/qpaintdevice_lite.cpp deleted file mode 100644 index 0d1ca92..0000000 --- a/src/gui/painting/qpaintdevice_lite.cpp +++ /dev/null @@ -1,68 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qpaintdevice.h" -#include "qpainter.h" -#include "qwidget.h" -#include "qbitmap.h" -#include "qapplication.h" - -QT_BEGIN_NAMESPACE - -extern void qt_painter_removePaintDevice(QPaintDevice *); //qpainter.cpp - -int QPaintDevice::metric(PaintDeviceMetric m) const -{ - qWarning("QPaintDevice::metrics: Device has no metric information"); - if (m == PdmDpiX) { - return 72; - } else if (m == PdmDpiY) { - return 72; - } else if (m == PdmNumColors) { - // FIXME: does this need to be a real value? - return 256; - } else { - qDebug("Unrecognised metric %d!",m); - return 0; - } -} - -QT_END_NAMESPACE diff --git a/src/gui/painting/qpaintdevice_qpa.cpp b/src/gui/painting/qpaintdevice_qpa.cpp new file mode 100644 index 0000000..0d1ca92 --- /dev/null +++ b/src/gui/painting/qpaintdevice_qpa.cpp @@ -0,0 +1,68 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qpaintdevice.h" +#include "qpainter.h" +#include "qwidget.h" +#include "qbitmap.h" +#include "qapplication.h" + +QT_BEGIN_NAMESPACE + +extern void qt_painter_removePaintDevice(QPaintDevice *); //qpainter.cpp + +int QPaintDevice::metric(PaintDeviceMetric m) const +{ + qWarning("QPaintDevice::metrics: Device has no metric information"); + if (m == PdmDpiX) { + return 72; + } else if (m == PdmDpiY) { + return 72; + } else if (m == PdmNumColors) { + // FIXME: does this need to be a real value? + return 256; + } else { + qDebug("Unrecognised metric %d!",m); + return 0; + } +} + +QT_END_NAMESPACE diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp index 3861196..e258a39 100644 --- a/src/gui/text/qfont.cpp +++ b/src/gui/text/qfont.cpp @@ -76,7 +76,7 @@ #include #endif #ifdef Q_WS_QPA -#include +#include #include #endif diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 97c12b3..f196e00 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -80,7 +80,7 @@ SOURCES += qgl.cpp \ embedded_lite { DEFINES += QT_NO_EGL - SOURCES += qgl_lite.cpp \ + SOURCES += qgl_qpa.cpp \ qglpixelbuffer_stub.cpp } diff --git a/src/opengl/qgl_lite.cpp b/src/opengl/qgl_lite.cpp deleted file mode 100644 index 2003cc1..0000000 --- a/src/opengl/qgl_lite.cpp +++ /dev/null @@ -1,253 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenGL module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include -#include - -#include -#include - -#include "qgl.h" -#include "qgl_p.h" - -QT_BEGIN_NAMESPACE - - -bool QGLFormat::hasOpenGL() -{ - return QApplicationPrivate::platformIntegration()->hasOpenGL(); -} - -bool QGLContext::chooseContext(const QGLContext* shareContext) -{ - Q_D(QGLContext); - if (!d->paintDevice && d->paintDevice->devType() != QInternal::Widget) { - d->valid = false; - }else { - QWidget *widget = static_cast(d->paintDevice); - if (!widget->platformWindow()){ - widget->winId();//make window - } - d->platformContext = widget->platformWindow()->glContext(); - d->valid =(bool) d->platformContext; - } - - return d->valid; -} - -void QGLContext::reset() -{ - Q_D(QGLContext); - if (!d->valid) - return; - d->cleanup(); - doneCurrent(); - - if (d->platformContext) { - delete d->platformContext; - d->platformContext = 0; - } - - d->crWin = false; - d->sharing = false; - d->valid = false; - d->transpColor = QColor(); - d->initDone = false; - QGLContextGroup::removeShare(this); -} - -void QGLContext::makeCurrent() -{ - Q_D(QGLContext); - d->platformContext->makeCurrent(); - QGLContextPrivate::setCurrentContext(this); -} - -void QGLContext::doneCurrent() -{ - Q_D(QGLContext); - d->platformContext->doneCurrent(); - QGLContextPrivate::setCurrentContext(0); -} - -void QGLContext::swapBuffers() const -{ - Q_D(const QGLContext); - d->platformContext->swapBuffers(); -} - -void *QGLContext::getProcAddress(const QString &procName) const -{ - Q_D(const QGLContext); - return d->platformContext->getProcAddress(procName); -} - -void QGLWidget::setContext(QGLContext *context, - const QGLContext* shareContext, - bool deleteOldContext) -{ - Q_D(QGLWidget); - if (context == 0) { - qWarning("QGLWidget::setContext: Cannot set null context"); - return; - } - if (!context->deviceIsPixmap() && context->device() != this) { - qWarning("QGLWidget::setContext: Context must refer to this widget"); - return; - } - - if (d->glcx) - d->glcx->doneCurrent(); - QGLContext* oldcx = d->glcx; - d->glcx = context; - - if (!d->glcx->isValid()) - d->glcx->create(shareContext ? shareContext : oldcx); - - if (deleteOldContext) - delete oldcx; -} - -void QGLWidgetPrivate::init(QGLContext *context, const QGLWidget *shareWidget) -{ - initContext(context, shareWidget); -} - -bool QGLFormat::hasOpenGLOverlays() -{ - return false; -} - -QColor QGLContext::overlayTransparentColor() const -{ - return QColor(); // Invalid color -} - -uint QGLContext::colorIndex(const QColor&) const -{ - return 0; -} - -void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase) -{ - Q_UNUSED(fnt); - Q_UNUSED(listBase); -} - -/* - QGLTemporaryContext implementation -*/ -class QGLTemporaryContextPrivate -{ -public: - QGLWidget *widget; -}; - -QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) - : d(new QGLTemporaryContextPrivate) -{ - d->widget = new QGLWidget; - d->widget->makeCurrent(); -} - -QGLTemporaryContext::~QGLTemporaryContext() -{ - delete d->widget; -} - - -bool QGLWidgetPrivate::renderCxPm(QPixmap*) -{ - return false; -} - -/*! \internal - Free up any allocated colormaps. This fn is only called for - top-level widgets. -*/ -void QGLWidgetPrivate::cleanupColormaps() -{ -} - -void QGLWidget::setMouseTracking(bool enable) -{ - Q_UNUSED(enable); -} - -bool QGLWidget::event(QEvent *e) -{ - return QWidget::event(e); -} - -void QGLWidget::resizeEvent(QResizeEvent *e) -{ - return QWidget::resizeEvent(e); -} - - -const QGLContext* QGLWidget::overlayContext() const -{ - return 0; -} - -void QGLWidget::makeOverlayCurrent() -{ -} - - -void QGLWidget::updateOverlayGL() -{ -} - -const QGLColormap & QGLWidget::colormap() const -{ - Q_D(const QGLWidget); - return d->cmap; -} - -void QGLWidget::setColormap(const QGLColormap & c) -{ - Q_UNUSED(c); -} - -QT_END_NAMESPACE diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp new file mode 100644 index 0000000..2003cc1 --- /dev/null +++ b/src/opengl/qgl_qpa.cpp @@ -0,0 +1,253 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +#include +#include + +#include "qgl.h" +#include "qgl_p.h" + +QT_BEGIN_NAMESPACE + + +bool QGLFormat::hasOpenGL() +{ + return QApplicationPrivate::platformIntegration()->hasOpenGL(); +} + +bool QGLContext::chooseContext(const QGLContext* shareContext) +{ + Q_D(QGLContext); + if (!d->paintDevice && d->paintDevice->devType() != QInternal::Widget) { + d->valid = false; + }else { + QWidget *widget = static_cast(d->paintDevice); + if (!widget->platformWindow()){ + widget->winId();//make window + } + d->platformContext = widget->platformWindow()->glContext(); + d->valid =(bool) d->platformContext; + } + + return d->valid; +} + +void QGLContext::reset() +{ + Q_D(QGLContext); + if (!d->valid) + return; + d->cleanup(); + doneCurrent(); + + if (d->platformContext) { + delete d->platformContext; + d->platformContext = 0; + } + + d->crWin = false; + d->sharing = false; + d->valid = false; + d->transpColor = QColor(); + d->initDone = false; + QGLContextGroup::removeShare(this); +} + +void QGLContext::makeCurrent() +{ + Q_D(QGLContext); + d->platformContext->makeCurrent(); + QGLContextPrivate::setCurrentContext(this); +} + +void QGLContext::doneCurrent() +{ + Q_D(QGLContext); + d->platformContext->doneCurrent(); + QGLContextPrivate::setCurrentContext(0); +} + +void QGLContext::swapBuffers() const +{ + Q_D(const QGLContext); + d->platformContext->swapBuffers(); +} + +void *QGLContext::getProcAddress(const QString &procName) const +{ + Q_D(const QGLContext); + return d->platformContext->getProcAddress(procName); +} + +void QGLWidget::setContext(QGLContext *context, + const QGLContext* shareContext, + bool deleteOldContext) +{ + Q_D(QGLWidget); + if (context == 0) { + qWarning("QGLWidget::setContext: Cannot set null context"); + return; + } + if (!context->deviceIsPixmap() && context->device() != this) { + qWarning("QGLWidget::setContext: Context must refer to this widget"); + return; + } + + if (d->glcx) + d->glcx->doneCurrent(); + QGLContext* oldcx = d->glcx; + d->glcx = context; + + if (!d->glcx->isValid()) + d->glcx->create(shareContext ? shareContext : oldcx); + + if (deleteOldContext) + delete oldcx; +} + +void QGLWidgetPrivate::init(QGLContext *context, const QGLWidget *shareWidget) +{ + initContext(context, shareWidget); +} + +bool QGLFormat::hasOpenGLOverlays() +{ + return false; +} + +QColor QGLContext::overlayTransparentColor() const +{ + return QColor(); // Invalid color +} + +uint QGLContext::colorIndex(const QColor&) const +{ + return 0; +} + +void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase) +{ + Q_UNUSED(fnt); + Q_UNUSED(listBase); +} + +/* + QGLTemporaryContext implementation +*/ +class QGLTemporaryContextPrivate +{ +public: + QGLWidget *widget; +}; + +QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) + : d(new QGLTemporaryContextPrivate) +{ + d->widget = new QGLWidget; + d->widget->makeCurrent(); +} + +QGLTemporaryContext::~QGLTemporaryContext() +{ + delete d->widget; +} + + +bool QGLWidgetPrivate::renderCxPm(QPixmap*) +{ + return false; +} + +/*! \internal + Free up any allocated colormaps. This fn is only called for + top-level widgets. +*/ +void QGLWidgetPrivate::cleanupColormaps() +{ +} + +void QGLWidget::setMouseTracking(bool enable) +{ + Q_UNUSED(enable); +} + +bool QGLWidget::event(QEvent *e) +{ + return QWidget::event(e); +} + +void QGLWidget::resizeEvent(QResizeEvent *e) +{ + return QWidget::resizeEvent(e); +} + + +const QGLContext* QGLWidget::overlayContext() const +{ + return 0; +} + +void QGLWidget::makeOverlayCurrent() +{ +} + + +void QGLWidget::updateOverlayGL() +{ +} + +const QGLColormap & QGLWidget::colormap() const +{ + Q_D(const QGLWidget); + return d->cmap; +} + +void QGLWidget::setColormap(const QGLColormap & c) +{ + Q_UNUSED(c); +} + +QT_END_NAMESPACE -- cgit v0.12 From 9716e12e0f5590ebc23ad9fb7ba75c6a3c5aadab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 24 Jun 2010 11:41:39 +0200 Subject: Adding -qpa configure switch also renaming the embedded_lite qmake switch to be qpa --- configure | 118 ++++++++++++------------ src/3rdparty/webkit/WebCore/WebCore.pro | 2 +- src/corelib/kernel/kernel.pri | 2 +- src/gui/accessible/accessible.pri | 2 +- src/gui/dialogs/dialogs.pri | 4 +- src/gui/egl/egl.pri | 2 +- src/gui/gui.pro | 2 +- src/gui/image/image.pri | 4 +- src/gui/inputmethod/inputmethod.pri | 2 +- src/gui/kernel/kernel.pri | 4 +- src/gui/painting/painting.pri | 14 +-- src/gui/styles/styles.pri | 2 +- src/gui/text/text.pri | 4 +- src/gui/util/util.pri | 4 +- src/gui/widgets/widgets.pri | 2 +- src/opengl/opengl.pro | 4 +- src/plugins/graphicssystems/graphicssystems.pro | 6 +- src/plugins/platforms/platforms.pro | 9 +- src/plugins/plugins.pro | 4 +- src/qt_install.pri | 2 +- tools/tools.pro | 2 +- 21 files changed, 94 insertions(+), 101 deletions(-) diff --git a/configure b/configure index 6143ac1..c33b522 100755 --- a/configure +++ b/configure @@ -187,7 +187,7 @@ fi PLATFORM_X11=no PLATFORM_MAC=no PLATFORM_QWS=maybe -PLATFORM_EMBLITE=maybe +PLATFORM_QPA=maybe BUILD_ON_MAC=no; [ -d /System/Library/Frameworks/Carbon.framework ] && BUILD_ON_MAC=yes @@ -286,8 +286,8 @@ earlyArgParse() VAL=$1 fi ;; - -embedded-lite) - VAR=embedded-lite + -embedded-lite|-qpa) + VAR=qpa # this option may or may not be followed by an argument if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then VAL=auto @@ -338,24 +338,24 @@ earlyArgParse() PLATFORM_X11=no PLATFORM_MAC=no PLATFORM_QWS=yes - PLATFORM_EMBLITE=no + PLATFORM_QPA=no fi else echo "No license exists to enable Qt for Embedded Linux. Disabling." CFG_EMBEDDED=no fi ;; - embedded-lite) + qpa) CFG_EMBEDDED="$VAL" - if [ "$PLATFORM_EMBLITE" != "no" ]; then - if [ "$PLATFORM_EMBLITE" = "maybe" ]; then + if [ "$PLATFORM_QPA" != "no" ]; then + if [ "$PLATFORM_QPA" = "maybe" ]; then PLATFORM_X11=no PLATFORM_MAC=no PLATFORM_QWS=no - PLATFORM_EMBLITE=yes + PLATFORM_QPA=yes fi else - echo "No license exists to enable Qt for Embedded Linux Lite. Disabling." + echo "No license exists to enable Qt QPA. Disabling." CFG_EMBEDDED=no fi ;; @@ -426,7 +426,7 @@ elif [ -f "$relpath"/LICENSE.PREVIEW.COMMERCIAL ] && [ $COMMERCIAL_USER = "yes" elif [ $COMMERCIAL_USER = "yes" ]; then # one of commercial editions [ "$PLATFORM_MAC" = "maybe" ] && PLATFORM_MAC=yes - [ "$PLATFORM_EMBLITE" = "maybe" ] && PLATFORM_EMBLITE=no + [ "$PLATFORM_QPA" = "maybe" ] && PLATFORM_QPA=no [ "$PLATFORM_QWS" = "maybe" ] && PLATFORM_QWS=no # read in the license file @@ -519,7 +519,7 @@ elif [ $COMMERCIAL_USER = "yes" ]; then PlatformCode=`echo "$PlatformCode" | sed 's/.$//'` ;; esac - ### EMBEDDED_LITE logic missing ### + ### EMBEDDED_QPA logic missing ### case "$PlatformCode,$PLATFORM_MAC,$PLATFORM_QWS" in X9,* | XC,* | XU,* | XW,* | XM,*) # Qt All-OS @@ -948,8 +948,8 @@ if [ "$CFG_EMBEDDED" = "nacl" ]; then echo "Setting NaCl options:" echo "-static" CFG_SHARED=no - echo "-embedded-lite nacl" - PLATFORM_EMBLITE=yes + echo "-qpa nacl" + PLATFORM_QPA=yes echo "-fast" OPT_FAST=yes echo "-release" @@ -1026,7 +1026,7 @@ while [ "$#" -gt 0 ]; do ;; #Qt style options that pass an argument -qconfig) - if [ "$PLATFORM_QWS" != "yes" -a "$PLATFORM_EMBLITE" != "yes" ]; then + if [ "$PLATFORM_QWS" != "yes" -a "$PLATFORM_QPA" != "yes" ]; then echo echo "WARNING: -qconfig is only tested and supported on Qt for Embedded Linux." echo @@ -1066,8 +1066,8 @@ while [ "$#" -gt 0 ]; do VAL=$1 fi ;; - -embedded-lite) - VAR=embedded-lite + -embedded-lite|-qpa) + VAR=qpa # this option may or may not be followed by an argument if [ -z "$2" ] || echo "$2" | grep '^-' >/dev/null 2>&1; then VAL=auto @@ -1297,24 +1297,24 @@ while [ "$#" -gt 0 ]; do PLATFORM_X11=no PLATFORM_MAC=no PLATFORM_QWS=yes - PLATFORM_EMBLITE=no + PLATFORM_QPA=no fi else echo "No license exists to enable Qt for Embedded Linux. Disabling." CFG_EMBEDDED=no fi ;; - embedded-lite) + embedded-lite|qpa) CFG_EMBEDDED="$VAL" - if [ "$PLATFORM_EMBLITE" != "no" ]; then - if [ "$PLATFORM_EMBLITE" = "maybe" ]; then + if [ "$PLATFORM_QPA" != "no" ]; then + if [ "$PLATFORM_QPA" = "maybe" ]; then PLATFORM_X11=no PLATFORM_MAC=no PLATFORM_QWS=no - PLATFORM_EMBLITE=yes + PLATFORM_QPA=yes fi else - echo "No license exists to enable Qt for Embedded Linux Lite. Disabling." + echo "No license exists to enable Qt QPA. Disabling." CFG_EMBEDDED=no fi ;; @@ -1420,8 +1420,8 @@ while [ "$#" -gt 0 ]; do PLATFORM_MAC=no elif [ "$PLATFORM_QWS" = "yes" ]; then PLATFORM_QWS=no - elif [ "$PLATFORM_EMBLITE" = "yes" ]; then - PLATFORM_EMBLITE=no + elif [ "$PLATFORM_QPA" = "yes" ]; then + PLATFORM_QPA=no fi if [ "$CFG_FRAMEWORK" = "auto" ]; then CFG_FRAMEWORK=no @@ -2311,7 +2311,7 @@ if [ "$CFG_GUI" = "no" ]; then fi #disable Qt3Support for Lighthouse -if [ "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QPA" = "yes" ]; then CFG_QT3SUPPORT="no" fi @@ -2385,7 +2385,7 @@ if [ "$OPT_SHADOW" = "yes" ]; then [ "$OPT_VERBOSE" = "yes" ] && echo "Performing shadow build..." fi -if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then +if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ] && [ "$CFG_DEBUG_RELEASE" = "yes" ]; then echo echo "WARNING: -debug-and-release is not supported anymore on Qt/X11 and Qt for Embedded Linux" echo "By default, Qt is built in release mode with separate debug information, so" @@ -2489,7 +2489,7 @@ if [ "$OPT_SHADOW" = "yes" ]; then fi # symlink fonts to be able to run application from build directory -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ] && [ ! -d "${outpath}/lib/fonts" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ] && [ ! -d "${outpath}/lib/fonts" ]; then if [ "$PLATFORM" = "$XPLATFORM" ]; then mkdir -p "${outpath}/lib" ln -s "${relpath}/lib/fonts" "${outpath}/lib/fonts" @@ -2529,7 +2529,7 @@ fi ### help #------------------------------------------------------------------------------- [ "$PLATFORM_QWS" = "yes" -a "$CFG_EMBEDDED" = "no" ] && CFG_EMBEDDED=auto -[ "$PLATFORM_EMBLITE" = "yes" -a "$CFG_EMBEDDED" = "no" ] && CFG_EMBEDDED=auto +[ "$PLATFORM_QPA" = "yes" -a "$CFG_EMBEDDED" = "no" ] && CFG_EMBEDDED=auto if [ "$CFG_EMBEDDED" != "no" ]; then case "$UNAME_SYSTEM:$UNAME_RELEASE" in Darwin:*) @@ -2604,7 +2604,7 @@ if [ "$CFG_EMBEDDED" != "no" ]; then echo "Qt for Embedded Linux is not supported on this platform. Disabling." CFG_EMBEDDED=no PLATFORM_QWS=no - PLATFORM_EMBLITE=no + PLATFORM_QPA=no ;; esac fi @@ -2773,7 +2773,7 @@ if [ -z "$PLATFORM" ]; then esac fi -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then CFG_SM=no PLATFORMS=`find "$relpath/mkspecs/qws" | sed "s,$relpath/mkspecs/qws/,,"` else @@ -3087,7 +3087,7 @@ fi if [ "$OPT_VERBOSE" = "yes" ]; then echo "System architecture: '$CFG_ARCH'" - if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then + if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then echo "Host architecture: '$CFG_HOST_ARCH'" fi fi @@ -3278,7 +3278,7 @@ if [ "$CFG_USE_GNUMAKE" = "auto" ] && "$MAKE" -v | grep "GNU Make" >/dev/null 2> fi # If -opengl wasn't specified, don't try to auto-detect -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ] && [ "$CFG_OPENGL" = "auto" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ] && [ "$CFG_OPENGL" = "auto" ]; then CFG_OPENGL=no fi @@ -3354,8 +3354,8 @@ if [ -z "$QT_INSTALL_PREFIX" ]; then if [ -z "$QT_INSTALL_PREFIX" ]; then # still empty if [ "$CFG_DEV" = "yes" ]; then QT_INSTALL_PREFIX="$outpath" # In Development, we use sandboxed builds by default - elif [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then - if [ "$PLATFORM_EMBLITE" = "yes" ]; then + elif [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then + if [ "$PLATFORM_QPA" = "yes" ]; then QT_INSTALL_PREFIX="/usr/local/Trolltech/QtLighthouse-${QT_VERSION}" else QT_INSTALL_PREFIX="/usr/local/Trolltech/QtEmbedded-${QT_VERSION}" @@ -3576,7 +3576,7 @@ Installation options: -prefix ...... This will install everything relative to (default $QT_INSTALL_PREFIX) EOF -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then cat <: arm mips x86 generic - -embedded-lite This will enable the Lighthouse build. + -qpa ......... This will enable the QPA build. Example values for : arm mips x86 generic - Lighthouse does not use QWS. + QPA is a window system agnostic implementation of Qt. -armfpa ............. Target platform uses the ARM-FPA floating point format. -no-armfpa .......... Target platform does not use the ARM-FPA floating point format. @@ -4190,7 +4190,7 @@ EOF fi -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" -o "$PLATFORM_X11" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" -o "$PLATFORM_X11" = "yes" ]; then if [ "$CFG_GLIB" = "no" ]; then GBY=" " GBN="+" @@ -4229,7 +4229,7 @@ fi # Help # LICENSING, INTERACTIVE PART # ----------------------------------------------------------------------------- -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then Platform="Qt for Embedded Linux" elif [ "$PLATFORM_MAC" = "yes" ]; then Platform="Qt for Mac OS X" @@ -5285,7 +5285,7 @@ fi # auto-detect iconv(3) support if [ "$CFG_ICONV" != "no" ]; then - if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then + if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then CFG_ICONV=no elif "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" "$OPT_VERBOSE" "$relpath" "$outpath" "config.tests/unix/iconv" "POSIX iconv" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then CFG_ICONV=yes @@ -5346,7 +5346,7 @@ if [ "$PLATFORM_MAC" = "yes" -a ! -z "$QT_NAMESPACE" ]; then fi # X11/QWS/Lighthouse -if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_X11" = "yes" -o "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then # auto-detect Glib support if [ "$CFG_GLIB" != "no" ]; then @@ -5917,7 +5917,7 @@ if [ "$PLATFORM_MAC" = "yes" ]; then fi -if [ "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QPA" = "yes" ]; then # auto-detect OpenGL support (es1 = OpenGL ES 1.x Common, es2 = OpenGL ES 2.x) if [ "$CFG_OPENGL" = "auto" ] || [ "$CFG_OPENGL" = "yes" ]; then if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/unix/opengldesktop "OpenGL" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then @@ -6026,7 +6026,7 @@ if [ "$PLATFORM_QWS" = "yes" ]; then fi fi -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then # screen drivers for screen in ${CFG_GFX_ON} ${CFG_GFX_PLUGIN}; do @@ -6210,7 +6210,7 @@ fi if [ "$CFG_DOUBLEFORMAT" = "auto" ]; then - if [ "$PLATFORM_QWS" != "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then + if [ "$PLATFORM_QWS" != "yes" -o "$PLATFORM_QPA" = "yes" ]; then CFG_DOUBLEFORMAT=normal else "$unixtests/doubleformat.test" "$XQMAKESPEC" $OPT_VERBOSE "$relpath" "$outpath" @@ -6489,7 +6489,7 @@ fi #------------------------------------------------------------------------------- ### fix this: user input should be validated in a loop -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then PROMPT_FOR_DEPTHS="yes" else PROMPT_FOR_DEPTHS="no" @@ -6684,7 +6684,7 @@ else fi if [ "$CFG_OPENGL" = "es1" ] || [ "$CFG_OPENGL" = "es2" ]; then - if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then + if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then if [ "$PLATFORM_QWS" = "yes" ]; then QCONFIG_FLAGS="$QCONFIG_FLAGS Q_BACKINGSTORE_SUBSURFACES" else @@ -6731,10 +6731,10 @@ if [ "$PLATFORM_QWS" = "yes" ]; then QT_CONFIG="$QT_CONFIG embedded" rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes fi -if [ "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QPA" = "yes" ]; then QMAKE_OUTDIR="${QMAKE_OUTDIR}-emb-$CFG_EMBEDDED" - QMAKE_CONFIG="$QMAKE_CONFIG embedded_lite" - QT_CONFIG="$QT_CONFIG embedded_lite" + QMAKE_CONFIG="$QMAKE_CONFIG qpa" + QT_CONFIG="$QT_CONFIG qpa" rm -f "src/.moc/$QMAKE_OUTDIR/allmoc.cpp" # needs remaking if config changes fi @@ -6991,7 +6991,7 @@ if [ '!' -z "$I_FLAGS" ]; then fi # turn off exceptions for the compilers that support it -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then COMPILER=`echo $XPLATFORM | cut -f 3- -d-` else COMPILER=`echo $PLATFORM | cut -f 2- -d-` @@ -6999,7 +6999,7 @@ fi if [ "$CFG_EXCEPTIONS" = "unspecified" -a "$PLATFORM_QWS" = "yes" ]; then CFG_EXCEPTIONS=no fi -if [ "$CFG_EXCEPTIONS" = "unspecified" -a "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$CFG_EXCEPTIONS" = "unspecified" -a "$PLATFORM_QPA" = "yes" ]; then CFG_EXCEPTIONS=no fi @@ -7388,7 +7388,7 @@ esac # ipv6 # # X11 : x11sm xinerama xcursor xfixes xrandr xrender mitshm fontconfig xkb -# Embedded: embedded embedded_lite freetype +# Embedded: embedded qpa freetype # ALL_OPTIONS= BUILD_CONFIG= @@ -7689,8 +7689,8 @@ if [ "$PLATFORM_QWS" = "yes" ]; then done fi # QWS -if [ "$PLATFORM_EMBLITE" = "yes" ]; then - # Add LITE to config.h +if [ "$PLATFORM_QPA" = "yes" ]; then + # Add QPA to config.h QCONFIG_FLAGS="$QCONFIG_FLAGS Q_WS_QPA QT_NO_QWS_QPF QT_NO_QWS_QPF2" fi @@ -8102,7 +8102,7 @@ else echo "Architecture: $CFG_ARCH" fi -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then echo "Host architecture: $CFG_HOST_ARCH" fi @@ -8210,7 +8210,7 @@ else fi echo "zlib support ........... $CFG_ZLIB" echo "Session management ..... $CFG_SM" -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_EMBLITE" = "yes" ]; then +if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ]; then echo "Embedded support ....... $CFG_EMBEDDED" if [ "$CFG_QWS_FREETYPE" = "auto" ]; then echo "Freetype2 support ...... $CFG_QWS_FREETYPE ($CFG_LIBFREETYPE)" diff --git a/src/3rdparty/webkit/WebCore/WebCore.pro b/src/3rdparty/webkit/WebCore/WebCore.pro index afb1bcd..9870769 100644 --- a/src/3rdparty/webkit/WebCore/WebCore.pro +++ b/src/3rdparty/webkit/WebCore/WebCore.pro @@ -49,7 +49,7 @@ TEMPLATE = lib TARGET = QtWebKit contains(QT_CONFIG, embedded):CONFIG += embedded -contains(QT_CONFIG, embedded_lite):CONFIG += embedded +contains(QT_CONFIG, qpa):CONFIG += embedded CONFIG(standalone_package) { isEmpty(WC_GENERATED_SOURCES_DIR):WC_GENERATED_SOURCES_DIR = $$PWD/generated diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index 6f53a3f..1e27c31 100644 --- a/src/corelib/kernel/kernel.pri +++ b/src/corelib/kernel/kernel.pri @@ -78,7 +78,7 @@ wince*: { kernel/qfunctions_wince.h } -mac:!embedded:!embedded_lite { +mac:!embedded:!qpa{ SOURCES += \ kernel/qcoreapplication_mac.cpp } diff --git a/src/gui/accessible/accessible.pri b/src/gui/accessible/accessible.pri index afa5ecd..31362ff 100644 --- a/src/gui/accessible/accessible.pri +++ b/src/gui/accessible/accessible.pri @@ -12,7 +12,7 @@ contains(QT_CONFIG, accessibility) { accessible/qaccessiblewidget.cpp \ accessible/qaccessibleplugin.cpp - mac:!embedded:!embedded_lite { + mac:!embedded:!qpa { HEADERS += accessible/qaccessible_mac_p.h OBJECTIVE_SOURCES += accessible/qaccessible_mac.mm \ accessible/qaccessible_mac_cocoa.mm diff --git a/src/gui/dialogs/dialogs.pri b/src/gui/dialogs/dialogs.pri index 20bdabc..cd8e71a 100644 --- a/src/gui/dialogs/dialogs.pri +++ b/src/gui/dialogs/dialogs.pri @@ -27,7 +27,7 @@ HEADERS += \ dialogs/qwizard.h \ dialogs/qprintpreviewdialog.h -!embedded:!embedded_lite:mac { +!embedded:!qpa:mac { OBJECTIVE_SOURCES += dialogs/qfiledialog_mac.mm \ dialogs/qfontdialog_mac.mm \ dialogs/qnspanelproxy_mac.mm \ @@ -61,7 +61,7 @@ win32 { !win32-borland:!wince*: LIBS += -lshell32 # the filedialog needs this library } -!mac:!embedded:!symbian:unix|embedded_lite { +!mac:!embedded:!symbian:unix|qpa { HEADERS += dialogs/qpagesetupdialog_unix_p.h SOURCES += dialogs/qprintdialog_unix.cpp \ dialogs/qpagesetupdialog_unix.cpp diff --git a/src/gui/egl/egl.pri b/src/gui/egl/egl.pri index 476f1a3..8e8664c 100644 --- a/src/gui/egl/egl.pri +++ b/src/gui/egl/egl.pri @@ -28,7 +28,7 @@ contains(QT_CONFIG, egl): { embedded { SOURCES += egl/qegl_qws.cpp } else { - embedded_lite { + qpa { SOURCES += egl/qegl_qpa.cpp } else { symbian { diff --git a/src/gui/gui.pro b/src/gui/gui.pro index 4fbdb36..772f70b 100644 --- a/src/gui/gui.pro +++ b/src/gui/gui.pro @@ -5,7 +5,7 @@ DEFINES += QT_BUILD_GUI_LIB QT_NO_USING_NAMESPACE win32-msvc*|win32-icc:QMAKE_LFLAGS += /BASE:0x65000000 irix-cc*:QMAKE_CXXFLAGS += -no_prelink -ptused -!win32:!embedded:!embedded_lite:!mac:!symbian:CONFIG += x11 +!win32:!embedded:!qpa:!mac:!symbian:CONFIG += x11 unix:QMAKE_PKGCONFIG_REQUIRES = QtCore diff --git a/src/gui/image/image.pri b/src/gui/image/image.pri index 064ba32..13447e7 100644 --- a/src/gui/image/image.pri +++ b/src/gui/image/image.pri @@ -63,14 +63,14 @@ win32 { embedded { SOURCES += image/qpixmap_qws.cpp } -embedded_lite { +qpa { SOURCES += image/qpixmap_qpa.cpp } x11 { HEADERS += image/qpixmap_x11_p.h SOURCES += image/qpixmap_x11.cpp } -!embedded:!embedded_lite:mac { +!embedded:!qpa:mac { HEADERS += image/qpixmap_mac_p.h SOURCES += image/qpixmap_mac.cpp } diff --git a/src/gui/inputmethod/inputmethod.pri b/src/gui/inputmethod/inputmethod.pri index 6a3ef83..d439438 100644 --- a/src/gui/inputmethod/inputmethod.pri +++ b/src/gui/inputmethod/inputmethod.pri @@ -19,7 +19,7 @@ embedded { HEADERS += inputmethod/qwsinputcontext_p.h SOURCES += inputmethod/qwsinputcontext_qws.cpp } -mac:!embedded:!embedded_lite { +mac:!embedded:!qpa { HEADERS += inputmethod/qmacinputcontext_p.h SOURCES += inputmethod/qmacinputcontext_mac.cpp } diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index dcdfd04..5d92456 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -198,7 +198,7 @@ embedded { } } -embedded_lite { +qpa { HEADERS += \ kernel/qgenericpluginfactory_qpa.h \ kernel/qgenericplugin_qpa.h \ @@ -240,7 +240,7 @@ embedded_lite { } } -!embedded:!embedded_lite:!x11:mac { +!embedded:!qpa:!x11:mac { SOURCES += \ kernel/qclipboard_mac.cpp \ kernel/qmime_mac.cpp \ diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 07017ec..8d9b09e 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -119,7 +119,7 @@ embedded { SOURCES += \ painting/qgraphicssystem_qws.cpp \ -} else: if(!embedded_lite) { +} else: if(!qpa) { HEADERS += \ painting/qgraphicssystem_raster_p.h \ painting/qgraphicssystem_runtime_p.h \ @@ -147,7 +147,7 @@ unix:x11 { painting/qpaintengine_x11.cpp } -!embedded:!embedded_lite:!x11:mac { +!embedded:!qpa:!x11:mac { HEADERS += \ painting/qpaintengine_mac_p.h \ painting/qgraphicssystem_mac_p.h \ @@ -163,14 +163,14 @@ unix:x11 { painting/qprintengine_mac.mm \ } -unix:!mac:!symbian|embedded_lite { +unix:!mac:!symbian|qpa { HEADERS += \ painting/qprinterinfo_unix_p.h SOURCES += \ painting/qprinterinfo_unix.cpp } -win32|x11|mac|embedded|embedded_lite|symbian { +win32|x11|mac|embedded|qpa|symbian { SOURCES += painting/qbackingstore.cpp HEADERS += painting/qbackingstore_p.h } @@ -187,7 +187,7 @@ embedded { painting/qpaintdevice_qws.cpp } -embedded_lite { +qpa { SOURCES += \ painting/qcolormap_qpa.cpp \ painting/qpaintdevice_qpa.cpp \ @@ -206,7 +206,7 @@ symbian { painting/qpaintengine_s60_p.h } -x11|embedded|embedded_lite { +x11|embedded|qpa { contains(QT_CONFIG,qtopia) { DEFINES += QT_NO_CUPS QT_NO_LPR } else { @@ -372,7 +372,7 @@ x11 { SOURCES += painting/qwindowsurface_x11.cpp } -!embedded:!embedded_lite:mac { +!embedded:!qpa:mac { HEADERS += painting/qwindowsurface_mac_p.h SOURCES += painting/qwindowsurface_mac.cpp } diff --git a/src/gui/styles/styles.pri b/src/gui/styles/styles.pri index 9d6b6fb..0bac0aa 100644 --- a/src/gui/styles/styles.pri +++ b/src/gui/styles/styles.pri @@ -35,7 +35,7 @@ contains( styles, all ) { styles = mac windows windowsxp windowsvista } -x11|embedded|embedded_lite|!macx-*:styles -= mac +x11|embedded|qpa|!macx-*:styles -= mac x11{ QMAKE_CXXFLAGS += $$QT_CFLAGS_QGTKSTYLE diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index d7bddf5..04ab7df 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -89,7 +89,7 @@ unix:x11 { text/qfontengine_ft.cpp } -!embedded:!embedded_lite:!x11:mac { +!embedded:!qpa:!x11:mac { SOURCES += \ text/qfont_mac.cpp OBJECTIVE_SOURCES += text/qfontengine_mac.mm @@ -110,7 +110,7 @@ embedded { DEFINES += QT_NO_FONTCONFIG } -embedded_lite { +qpa { SOURCES += \ text/qfont_qws.cpp \ text/qfontengine_ft.cpp \ diff --git a/src/gui/util/util.pri b/src/gui/util/util.pri index dd99aa8..f66f9ff 100644 --- a/src/gui/util/util.pri +++ b/src/gui/util/util.pri @@ -33,12 +33,12 @@ unix:x11 { util/qsystemtrayicon_x11.cpp } -embedded|embedded_lite { +embedded|qpa { SOURCES += \ util/qsystemtrayicon_qws.cpp } -!embedded:!embedded_lite:!x11:mac { +!embedded:!qpa:!x11:mac { OBJECTIVE_SOURCES += util/qsystemtrayicon_mac.mm } diff --git a/src/gui/widgets/widgets.pri b/src/gui/widgets/widgets.pri index 9fe2b3d..669b838 100644 --- a/src/gui/widgets/widgets.pri +++ b/src/gui/widgets/widgets.pri @@ -144,7 +144,7 @@ SOURCES += \ widgets/qplaintextedit.cpp \ widgets/qprintpreviewwidget.cpp -!embedded:!embedded_lite:mac { +!embedded:!qpa:mac { HEADERS += widgets/qmacnativewidget_mac.h \ widgets/qmaccocoaviewcontainer_mac.h OBJECTIVE_HEADERS += widgets/qcocoatoolbardelegate_mac_p.h \ diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index f196e00..09a6b0f 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -11,7 +11,7 @@ unix:QMAKE_PKGCONFIG_REQUIRES = QtCore QtGui include(../qbase.pri) -!win32:!embedded:!mac:!embedded_lite:CONFIG += x11 +!win32:!embedded:!mac:!qpa:CONFIG += x11 contains(QT_CONFIG, opengl):CONFIG += opengl contains(QT_CONFIG, opengles1):CONFIG += opengles1 contains(QT_CONFIG, opengles2):CONFIG += opengles2 @@ -77,7 +77,7 @@ SOURCES += qgl.cpp \ } -embedded_lite { +qpa { DEFINES += QT_NO_EGL SOURCES += qgl_qpa.cpp \ diff --git a/src/plugins/graphicssystems/graphicssystems.pro b/src/plugins/graphicssystems/graphicssystems.pro index c00c9ff..7a8f4d6 100644 --- a/src/plugins/graphicssystems/graphicssystems.pro +++ b/src/plugins/graphicssystems/graphicssystems.pro @@ -2,11 +2,7 @@ TEMPLATE = subdirs SUBDIRS += trace !wince*:contains(QT_CONFIG, opengl):SUBDIRS += opengl contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl) { - embedded_lite { - SUBDIRS += openvglite - } else { - SUBDIRS += openvg - } + SUBDIRS += openvg } contains(QT_CONFIG, shivavg) { diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro index 9688443..b68230c 100644 --- a/src/plugins/platforms/platforms.pro +++ b/src/plugins/platforms/platforms.pro @@ -1,14 +1,11 @@ TEMPLATE = subdirs contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl) { - embedded_lite { - SUBDIRS += openvglite - } + SUBDIRS += openvglite } -embedded_lite { SUBDIRS += minimal -} -embedded_lite:x11 { +#this don't work. but leave it for now +qpa:x11 { SUBDIRS += testlite } diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro index 04e8c7c..bc76a0c 100644 --- a/src/plugins/plugins.pro +++ b/src/plugins/plugins.pro @@ -7,12 +7,12 @@ unix:!symbian { SUBDIRS *= codecs } !contains(QT_CONFIG, no-gui): SUBDIRS *= imageformats iconengines -!embedded:!embedded_lite:SUBDIRS *= graphicssystems +!embedded:!qpa:SUBDIRS *= graphicssystems embedded:SUBDIRS *= gfxdrivers decorations mousedrivers kbddrivers !win32:!embedded:!mac:!symbian:SUBDIRS *= inputmethods !symbian:!contains(QT_CONFIG, no-gui):SUBDIRS += accessible symbian:SUBDIRS += s60 contains(QT_CONFIG, phonon): SUBDIRS *= phonon contains(QT_CONFIG, multimedia): SUBDIRS *= audio - +qpa:SUBDIRS += platforms diff --git a/src/qt_install.pri b/src/qt_install.pri index 3cea79c..268bb86 100644 --- a/src/qt_install.pri +++ b/src/qt_install.pri @@ -38,7 +38,7 @@ qt_install_headers { } } -embedded|embedded_lite: equals(TARGET, QtGui) { +embedded|qpa: equals(TARGET, QtGui) { # install fonts for embedded INSTALLS += fonts fonts.path = $$[QT_INSTALL_LIBS]/fonts diff --git a/tools/tools.pro b/tools/tools.pro index 03d01a0..8002b4b 100644 --- a/tools/tools.pro +++ b/tools/tools.pro @@ -20,7 +20,7 @@ TEMPLATE = subdirs SUBDIRS += designer } } - unix:!mac:!embedded:!embedded_lite:contains(QT_CONFIG, qt3support):SUBDIRS += qtconfig + unix:!mac:!embedded:!qpa:contains(QT_CONFIG, qt3support):SUBDIRS += qtconfig win32:!wince*:SUBDIRS += activeqt } contains(QT_CONFIG, declarative):SUBDIRS += qml -- cgit v0.12 From 3a34a71c6f70a709ac494e65d465dcd4e346ccbb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 24 Jun 2010 12:46:49 +0200 Subject: Remove QSound for Lighthouse --- src/gui/kernel/kernel.pri | 13 +++++--- src/gui/kernel/qsound_qpa.cpp | 74 ------------------------------------------- 2 files changed, 9 insertions(+), 78 deletions(-) delete mode 100644 src/gui/kernel/qsound_qpa.cpp diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 5d92456..965cbe3 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -32,8 +32,6 @@ HEADERS += \ kernel/qshortcutmap_p.h \ kernel/qsizepolicy.h \ kernel/qpalette.h \ - kernel/qsound.h \ - kernel/qsound_p.h \ kernel/qstackedlayout.h \ kernel/qtooltip.h \ kernel/qwhatsthis.h \ @@ -73,7 +71,6 @@ SOURCES += \ kernel/qpalette.cpp \ kernel/qshortcut.cpp \ kernel/qshortcutmap.cpp \ - kernel/qsound.cpp \ kernel/qstackedlayout.cpp \ kernel/qtooltip.cpp \ kernel/qguivariant.cpp \ @@ -198,6 +195,15 @@ embedded { } } +!qpa { + HEADERS += \ + kernel/qsound.h \ + kernel/qsound_p.h + + SOURCES += \ + kernel/qsound.cpp +} + qpa { HEADERS += \ kernel/qgenericpluginfactory_qpa.h \ @@ -220,7 +226,6 @@ qpa { kernel/qgenericpluginfactory_qpa.cpp \ kernel/qgenericplugin_qpa.cpp \ kernel/qkeymapper_qws.cpp \ - kernel/qsound_qpa.cpp \ kernel/qwidget_qpa.cpp \ kernel/qeventdispatcher_qpa.cpp \ kernel/qwindowsysteminterface.cpp \ diff --git a/src/gui/kernel/qsound_qpa.cpp b/src/gui/kernel/qsound_qpa.cpp deleted file mode 100644 index 0714185..0000000 --- a/src/gui/kernel/qsound_qpa.cpp +++ /dev/null @@ -1,74 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qapplication.h" - -#ifndef QT_NO_SOUND - -#include "qsound.h" -#include "qsound_p.h" - -class QAuServerLite : public QAuServer -{ - Q_OBJECT -public: - QAuServerLite( QObject* parent ); - - void play( QSound* s ) {} - void stop( QSound* s ) {} - bool okay() { return false; } -}; - -QAuServerLite::QAuServerLite(QObject* parent) : - QAuServer(parent) -{ -} - -QAuServer* qt_new_audio_server() -{ - return new QAuServerLite(qApp); -} - -#include "qsound_qpa.moc" - -#endif // QT_NO_SOUND - -QT_END_NAMESPACE -- cgit v0.12 From 1e88fd57c693db1e4b6f0c42a2c05fad935fb4b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 24 Jun 2010 14:02:41 +0200 Subject: Refactored QGraphicsSystemCursor -> QPlatformCursor --- src/gui/image/qpixmap_blitter.cpp | 4 + src/gui/kernel/qapplication_qpa.cpp | 6 +- src/gui/kernel/qwidget_qpa.cpp | 4 +- src/gui/painting/painting.pri | 4 +- src/gui/painting/qgraphicssystemcursor_qpa.cpp | 664 --------------------- src/gui/painting/qgraphicssystemcursor_qpa.h | 97 --- src/gui/painting/qplatformcursor_qpa.cpp | 664 +++++++++++++++++++++ src/gui/painting/qplatformcursor_qpa.h | 97 +++ src/plugins/platforms/directfb/qdirectfbcursor.cpp | 4 +- src/plugins/platforms/directfb/qdirectfbcursor.h | 6 +- src/plugins/platforms/fb_base/fb_base.cpp | 24 +- src/plugins/platforms/fb_base/fb_base.h | 10 +- .../platforms/linuxfb/qlinuxfbintegration.cpp | 2 +- .../platforms/testlite/qtestliteintegration.cpp | 6 +- src/plugins/platforms/vnc/qvnccursor.cpp | 6 +- src/plugins/platforms/vnc/qvnccursor.h | 2 +- 16 files changed, 802 insertions(+), 798 deletions(-) delete mode 100644 src/gui/painting/qgraphicssystemcursor_qpa.cpp delete mode 100644 src/gui/painting/qgraphicssystemcursor_qpa.h create mode 100644 src/gui/painting/qplatformcursor_qpa.cpp create mode 100644 src/gui/painting/qplatformcursor_qpa.h diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 660f4d2..d91a269 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -37,7 +37,11 @@ QBlittable *QBlittablePixmapData::blittable() const { if (!m_blittable) { QBlittablePixmapData *that = const_cast(this); +#ifdef Q_WS_QPA //####jl: graphics system nor platformintegration should have createBlittable + that->m_blittable = QApplicationPrivate::platformIntegration()->createBlittable(QSize(w,h)); +#else that->m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QSize(w,h)); +#endif } return m_blittable; diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index afa069b..1fc202c 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -57,7 +57,7 @@ #include #include -#include +#include #include #include #include @@ -705,8 +705,8 @@ void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent * QMouseEvent ev(type, localPoint, globalPoint, button, buttons, modifiers); - QList > cursors = QGraphicsSystemCursorPrivate::getInstances(); - foreach (QWeakPointer cursor, cursors) { + QList > cursors = QPlatformCursorPrivate::getInstances(); + foreach (QWeakPointer cursor, cursors) { if (cursor) cursor.data()->pointerEvent(ev); } diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index 11fa211..a543c8f 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -49,7 +49,7 @@ #include "QtGui/qdesktopwidget.h" #include "QtGui/qplatformwindow_qpa.h" -#include +#include QT_BEGIN_NAMESPACE static QPlatformScreen *qt_screenForWidget(const QWidget *w); @@ -800,7 +800,7 @@ void qt_lite_set_cursor(QWidget * w, bool force) cursorCursor = w->cursor(); cursorWidget = w; } while (0); - foreach (QWeakPointer cursor, QGraphicsSystemCursorPrivate::getInstances()) + foreach (QWeakPointer cursor, QPlatformCursorPrivate::getInstances()) if (cursor) cursor.data()->changeCursor(&cursorCursor, cursorWidget); } diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 8d9b09e..b235320 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -191,9 +191,9 @@ qpa { SOURCES += \ painting/qcolormap_qpa.cpp \ painting/qpaintdevice_qpa.cpp \ - painting/qgraphicssystemcursor_qpa.cpp + painting/qplatformcursor_qpa.cpp HEADERS += \ - painting/qgraphicssystemcursor_qpa.h + painting/qplatformcursor_qpa.h } symbian { diff --git a/src/gui/painting/qgraphicssystemcursor_qpa.cpp b/src/gui/painting/qgraphicssystemcursor_qpa.cpp deleted file mode 100644 index 24376f9..0000000 --- a/src/gui/painting/qgraphicssystemcursor_qpa.cpp +++ /dev/null @@ -1,664 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "qgraphicssystemcursor_qpa.h" - -#include -#include -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -QList > QGraphicsSystemCursorPrivate::instances; - -/*! - \class QGraphicsSystemCursor - - \brief The QGraphicsSystemCursor class provides information about - pointer device events (movement, buttons), and requests to change - the currently displayed cursor. - - Note that QGraphicsSystemCursor does not include any graphics for - display. An application that sets a QCursor may provide its own - graphics. - - \sa QGraphicsSystemCursorImage -*/ - -/*! - \fn virtual void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & event) - - This method is called by Qt whenever a QMouseEvent is generated by the - underlying pointer input. \a event is a reference to the QMouseEvent in - question. A default do-nothing implementation is provided. - - \sa QApplicationPrivate::handleMouseEvent() -*/ - -/*! - \fn virtual void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) - - \brief This method is called by Qt whenever the cursor graphic should be changed. - - Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. - - \a widgetCursor is a pointer to the QCursor that should be displayed. - - \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note - that this may be 0 if the current position is not occupied by a displayed widget. - - \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() -*/ - -/*! - \fn QGraphicsSystemCursor::QGraphicsSystemCursor() - - \brief Constructs a QGraphicsSystemCursor -*/ -QGraphicsSystemCursor::QGraphicsSystemCursor(QPlatformScreen *scr ) - : screen(scr) -{ - QGraphicsSystemCursorPrivate::instances.append(this); -} - -// End of display and pointer event handling code -// Beginning of built-in cursor graphics -// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp - -/*! - \class QGraphicsSystemCursorImage - - \brief The QGraphicsSystemCursorImage class provides a set of graphics - intended to be used as cursors. - - \sa QGraphicsSystemCursor -*/ - -static QGraphicsSystemCursorImage *systemCursorTable[Qt::LastCursor+1]; -static bool systemCursorTableInit = false; - -// 16 x 16 -static const uchar cur_arrow_bits[] = { - 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, - 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, - 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; -static const uchar mcur_arrow_bits[] = { - 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, - 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, - 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; - -static const unsigned char cur_up_arrow_bits[] = { - 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, - 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; -static const unsigned char mcur_up_arrow_bits[] = { - 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, - 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; - -static const unsigned char cur_cross_bits[] = { - 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; -static const unsigned char mcur_cross_bits[] = { - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; - -static const uchar cur_ibeam_bits[] = { - 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_ibeam_bits[] = { - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; - -static const uchar cur_ver_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, - 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; -static const uchar mcur_ver_bits[] = { - 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, - 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, - 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; - -static const uchar cur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, - 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, - 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, - 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; -static const uchar cur_bdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, - 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, - 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_bdiag_bits[] = { - 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, - 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, - 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; -static const uchar cur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, - 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, - 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, - 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, - 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; -static const uchar cur_blank_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -// 20 x 20 -static const uchar forbidden_bits[] = { - 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, - 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, - 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, - 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; - -static const uchar forbiddenm_bits[] = { - 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, - 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, - 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, - 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; - -// 32 x 32 -static const uchar wait_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, - 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, - 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, - 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar wait_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, - 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar hsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, - 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar hsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, - 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, - 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, - 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phand_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, - 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, - 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, - 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phandm_bits[] = { - 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, - 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, - 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, - 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, - 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar size_all_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, - 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar size_all_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, - 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar whatsthis_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, - 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, - 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, - 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, - 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, - 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static const uchar whatsthism_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, - 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, - 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, - 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, - 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, - 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - -static const uchar busy_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, - 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, - 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, - 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, - 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; -static const uchar busym_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, - 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, - 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, - 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, - 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -// 16 x 16 -static const uchar openhand_bits[] = { - 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, - 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, - 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; -static const uchar openhandm_bits[] = { - 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, - 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, - 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; -static const uchar closedhand_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, - 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, - 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; -static const uchar closedhandm_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, - 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, - 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; - -void QGraphicsSystemCursorImage::createSystemCursor(int id) -{ - if (!systemCursorTableInit) { - for (int i = 0; i <= Qt::LastCursor; i++) - systemCursorTable[i] = 0; - systemCursorTableInit = true; - } - switch (id) { - // 16x16 cursors - case Qt::ArrowCursor: - systemCursorTable[Qt::ArrowCursor] = - new QGraphicsSystemCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); - break; - - case Qt::UpArrowCursor: - systemCursorTable[Qt::UpArrowCursor] = - new QGraphicsSystemCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); - break; - - case Qt::CrossCursor: - systemCursorTable[Qt::CrossCursor] = - new QGraphicsSystemCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); - break; - - case Qt::IBeamCursor: - systemCursorTable[Qt::IBeamCursor] = - new QGraphicsSystemCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); - break; - - case Qt::SizeVerCursor: - systemCursorTable[Qt::SizeVerCursor] = - new QGraphicsSystemCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); - break; - - case Qt::SizeHorCursor: - systemCursorTable[Qt::SizeHorCursor] = - new QGraphicsSystemCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); - break; - - case Qt::SizeBDiagCursor: - systemCursorTable[Qt::SizeBDiagCursor] = - new QGraphicsSystemCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); - break; - - case Qt::SizeFDiagCursor: - systemCursorTable[Qt::SizeFDiagCursor] = - new QGraphicsSystemCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); - break; - - case Qt::BlankCursor: - systemCursorTable[Qt::BlankCursor] = - new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); - break; - - // 20x20 cursors - case Qt::ForbiddenCursor: - systemCursorTable[Qt::ForbiddenCursor] = - new QGraphicsSystemCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); - break; - - // 32x32 cursors - case Qt::WaitCursor: - systemCursorTable[Qt::WaitCursor] = - new QGraphicsSystemCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); - break; - - case Qt::SplitVCursor: - systemCursorTable[Qt::SplitVCursor] = - new QGraphicsSystemCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SplitHCursor: - systemCursorTable[Qt::SplitHCursor] = - new QGraphicsSystemCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SizeAllCursor: - systemCursorTable[Qt::SizeAllCursor] = - new QGraphicsSystemCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); - break; - - case Qt::PointingHandCursor: - systemCursorTable[Qt::PointingHandCursor] = - new QGraphicsSystemCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); - break; - - case Qt::WhatsThisCursor: - systemCursorTable[Qt::WhatsThisCursor] = - new QGraphicsSystemCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); - break; - case Qt::BusyCursor: - systemCursorTable[Qt::BusyCursor] = - new QGraphicsSystemCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); - break; - - case Qt::OpenHandCursor: - systemCursorTable[Qt::OpenHandCursor] = - new QGraphicsSystemCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); - break; - case Qt::ClosedHandCursor: - systemCursorTable[Qt::ClosedHandCursor] = - new QGraphicsSystemCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); - break; - default: - qWarning("Unknown system cursor %d", id); - } -} - -/*! - \fn void QGraphicsSystemCursorImage::set(Qt::CursorShape id) - - \brief Calling this method sets the cursor image to the specified shape - - \a id is one of the defined Qt::CursorShape values. - - If id is invalid, Qt::BitmapCursor, or unknown by the implementation, - Qt::ArrowCursor is used instead. -*/ - -void QGraphicsSystemCursorImage::set(Qt::CursorShape id) -{ - QGraphicsSystemCursorImage *cursor = 0; - if (id >= 0 && id <= Qt::LastCursor) { - if (!systemCursorTable[id]) - createSystemCursor(id); - cursor = systemCursorTable[id]; - } - - if (cursor == 0) { - if (!systemCursorTable[Qt::ArrowCursor]) - createSystemCursor(Qt::ArrowCursor); - cursor = systemCursorTable[Qt::ArrowCursor]; - } - cursorImage = cursor->cursorImage; - hot = cursor->hot; -} - -/*! - \fn void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) - - \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) - - \a image A pointer to a QImage - - \a hx The x coordinate of the cursor's hotspot - - \a hy the y coordinate of the cursor's hotspot -*/ - -void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - cursorImage = *image; -} - -/*! - \fn void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) - - \brief set the cursor image to the graphic represented by the combination of data, mask, - width, and height - - \a data The pixel data of the graphic - - \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn - - \a width The width of the graphic in pixels - - \a height The height of the graphic in pixels - - \a hx The X hotspot of the cursor graphic - - \a hy The Y hotspot of the cursor graphic -*/ -void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, - int width, int height, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - - cursorImage = QImage(width,height, QImage::Format_Indexed8); - - if (!width || !height || !data || !mask || cursorImage.isNull()) - return; - - cursorImage.setNumColors(3); - cursorImage.setColor(0, 0xff000000); - cursorImage.setColor(1, 0xffffffff); - cursorImage.setColor(2, 0x00000000); - - int bytesPerLine = (width + 7) / 8; - int p = 0; - int d, m; - - int x = -1, w = 0; - - uchar *cursor_data = cursorImage.bits(); - int bpl = cursorImage.bytesPerLine(); - for (int i = 0; i < height; i++) - { - for (int j = 0; j < bytesPerLine; j++, data++, mask++) - { - for (int b = 0; b < 8 && j*8+b < width; b++) - { - d = *data & (1 << b); - m = *mask & (1 << b); - if (d && m) p = 0; - else if (!d && m) p = 1; - else p = 2; - cursor_data[j*8+b] = p; - - // calc region - if (x < 0 && m) - x = j*8+b; - else if (x >= 0 && !m) { - x = -1; - w = 0; - } - if (m) - w++; - } - } - if (x >= 0) { - x = -1; - w = 0; - } - cursor_data += bpl; - } - -} - -/*! - \fn QGraphicsSystemCursorImage::QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - - \brief set the cursor image to the graphic represented by the combination of data, mask, - width, and height - - \a data The pixel data of the graphic - - \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn - - \a width The width of the graphic in pixels - - \a height The height of the graphic in pixels - - \a hotX The X hotspot of the cursor graphic - - \a hotY The Y hotspot of the cursor graphic - - \sa set -*/ - -/*! - \fn QImage *QGraphicsSystemCursorImage::image() - - \brief Return the cursor graphic as a pointer to a QImage -*/ - -/*! - \fn QPoint QGraphicsSystemCursorImage::hotspot() - - \brief Return the cursor's hotspot -*/ - -QT_END_NAMESPACE diff --git a/src/gui/painting/qgraphicssystemcursor_qpa.h b/src/gui/painting/qgraphicssystemcursor_qpa.h deleted file mode 100644 index 9c65f7f..0000000 --- a/src/gui/painting/qgraphicssystemcursor_qpa.h +++ /dev/null @@ -1,97 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QGRAPHICSSYSTEMCURSOR_H -#define QGRAPHICSSYSTEMCURSOR_H - -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_NAMESPACE - -// Cursor graphics management -class Q_GUI_EXPORT QGraphicsSystemCursorImage { -public: - QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - { set(data, mask, width, height, hotX, hotY); } - QImage * image() { return &cursorImage; } - QPoint hotspot() { return hot; } - void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void set(const QImage * image, int hx, int hy); - void set(Qt::CursorShape); -private: - static void createSystemCursor(int id); - QImage cursorImage; - QPoint hot; -}; - -class QGraphicsSystemCursor; - -class QGraphicsSystemCursorPrivate { -public: - static QList > getInstances() { return instances; } - static QList > instances; -}; - -class Q_GUI_EXPORT QGraphicsSystemCursor : public QObject { -public: - QGraphicsSystemCursor(QPlatformScreen *); - - // input methods - virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } - virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; - -protected: - QPlatformScreen* screen; // Where to request an update - -private: - Q_DECLARE_PRIVATE(QGraphicsSystemCursor); - friend void qt_lite_set_cursor(QWidget * w, bool force); - friend class QApplicationPrivate; -}; - -QT_END_NAMESPACE - -#endif // QGRAPHICSSYSTEMCURSOR_H diff --git a/src/gui/painting/qplatformcursor_qpa.cpp b/src/gui/painting/qplatformcursor_qpa.cpp new file mode 100644 index 0000000..6665396 --- /dev/null +++ b/src/gui/painting/qplatformcursor_qpa.cpp @@ -0,0 +1,664 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qplatformcursor_qpa.h" + +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +QList > QPlatformCursorPrivate::instances; + +/*! + \class QGraphicsSystemCursor + + \brief The QGraphicsSystemCursor class provides information about + pointer device events (movement, buttons), and requests to change + the currently displayed cursor. + + Note that QGraphicsSystemCursor does not include any graphics for + display. An application that sets a QCursor may provide its own + graphics. + + \sa QGraphicsSystemCursorImage +*/ + +/*! + \fn virtual void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & event) + + This method is called by Qt whenever a QMouseEvent is generated by the + underlying pointer input. \a event is a reference to the QMouseEvent in + question. A default do-nothing implementation is provided. + + \sa QApplicationPrivate::handleMouseEvent() +*/ + +/*! + \fn virtual void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) + + \brief This method is called by Qt whenever the cursor graphic should be changed. + + Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. + + \a widgetCursor is a pointer to the QCursor that should be displayed. + + \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note + that this may be 0 if the current position is not occupied by a displayed widget. + + \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() +*/ + +/*! + \fn QGraphicsSystemCursor::QGraphicsSystemCursor() + + \brief Constructs a QGraphicsSystemCursor +*/ +QPlatformCursor::QPlatformCursor(QPlatformScreen *scr ) + : screen(scr) +{ + QPlatformCursorPrivate::instances.append(this); +} + +// End of display and pointer event handling code +// Beginning of built-in cursor graphics +// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp + +/*! + \class QGraphicsSystemCursorImage + + \brief The QGraphicsSystemCursorImage class provides a set of graphics + intended to be used as cursors. + + \sa QGraphicsSystemCursor +*/ + +static QPlatformCursorImage *systemCursorTable[Qt::LastCursor+1]; +static bool systemCursorTableInit = false; + +// 16 x 16 +static const uchar cur_arrow_bits[] = { + 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, + 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, + 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; +static const uchar mcur_arrow_bits[] = { + 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, + 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, + 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; + +static const unsigned char cur_up_arrow_bits[] = { + 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, + 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; +static const unsigned char mcur_up_arrow_bits[] = { + 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, + 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; + +static const unsigned char cur_cross_bits[] = { + 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; +static const unsigned char mcur_cross_bits[] = { + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; + +static const uchar cur_ibeam_bits[] = { + 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_ibeam_bits[] = { + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; + +static const uchar cur_ver_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; +static const uchar mcur_ver_bits[] = { + 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, + 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, + 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; + +static const uchar cur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, + 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, + 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, + 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; +static const uchar cur_bdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, + 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, + 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_bdiag_bits[] = { + 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, + 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, + 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; +static const uchar cur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, + 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, + 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, + 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, + 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; +static const uchar cur_blank_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +// 20 x 20 +static const uchar forbidden_bits[] = { + 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, + 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, + 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, + 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; + +static const uchar forbiddenm_bits[] = { + 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, + 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, + 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, + 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; + +// 32 x 32 +static const uchar wait_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, + 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, + 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, + 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar wait_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, + 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar hsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, + 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar hsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, + 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, + 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, + 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phand_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, + 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, + 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phandm_bits[] = { + 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, + 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, + 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, + 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, + 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar size_all_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, + 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar size_all_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, + 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar whatsthis_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, + 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, + 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, + 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, + 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +static const uchar whatsthism_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, + 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, + 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, + 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, + 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, + 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; + +static const uchar busy_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, + 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, + 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, + 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, + 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static const uchar busym_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, + 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, + 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, + 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, + 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +// 16 x 16 +static const uchar openhand_bits[] = { + 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, + 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, + 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; +static const uchar openhandm_bits[] = { + 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, + 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, + 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; +static const uchar closedhand_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, + 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, + 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; +static const uchar closedhandm_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, + 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, + 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; + +void QPlatformCursorImage::createSystemCursor(int id) +{ + if (!systemCursorTableInit) { + for (int i = 0; i <= Qt::LastCursor; i++) + systemCursorTable[i] = 0; + systemCursorTableInit = true; + } + switch (id) { + // 16x16 cursors + case Qt::ArrowCursor: + systemCursorTable[Qt::ArrowCursor] = + new QPlatformCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); + break; + + case Qt::UpArrowCursor: + systemCursorTable[Qt::UpArrowCursor] = + new QPlatformCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); + break; + + case Qt::CrossCursor: + systemCursorTable[Qt::CrossCursor] = + new QPlatformCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); + break; + + case Qt::IBeamCursor: + systemCursorTable[Qt::IBeamCursor] = + new QPlatformCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); + break; + + case Qt::SizeVerCursor: + systemCursorTable[Qt::SizeVerCursor] = + new QPlatformCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); + break; + + case Qt::SizeHorCursor: + systemCursorTable[Qt::SizeHorCursor] = + new QPlatformCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); + break; + + case Qt::SizeBDiagCursor: + systemCursorTable[Qt::SizeBDiagCursor] = + new QPlatformCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); + break; + + case Qt::SizeFDiagCursor: + systemCursorTable[Qt::SizeFDiagCursor] = + new QPlatformCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); + break; + + case Qt::BlankCursor: + systemCursorTable[Qt::BlankCursor] = + new QPlatformCursorImage(0, 0, 0, 0, 0, 0); + break; + + // 20x20 cursors + case Qt::ForbiddenCursor: + systemCursorTable[Qt::ForbiddenCursor] = + new QPlatformCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); + break; + + // 32x32 cursors + case Qt::WaitCursor: + systemCursorTable[Qt::WaitCursor] = + new QPlatformCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); + break; + + case Qt::SplitVCursor: + systemCursorTable[Qt::SplitVCursor] = + new QPlatformCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SplitHCursor: + systemCursorTable[Qt::SplitHCursor] = + new QPlatformCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SizeAllCursor: + systemCursorTable[Qt::SizeAllCursor] = + new QPlatformCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); + break; + + case Qt::PointingHandCursor: + systemCursorTable[Qt::PointingHandCursor] = + new QPlatformCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); + break; + + case Qt::WhatsThisCursor: + systemCursorTable[Qt::WhatsThisCursor] = + new QPlatformCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); + break; + case Qt::BusyCursor: + systemCursorTable[Qt::BusyCursor] = + new QPlatformCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); + break; + + case Qt::OpenHandCursor: + systemCursorTable[Qt::OpenHandCursor] = + new QPlatformCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); + break; + case Qt::ClosedHandCursor: + systemCursorTable[Qt::ClosedHandCursor] = + new QPlatformCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); + break; + default: + qWarning("Unknown system cursor %d", id); + } +} + +/*! + \fn void QGraphicsSystemCursorImage::set(Qt::CursorShape id) + + \brief Calling this method sets the cursor image to the specified shape + + \a id is one of the defined Qt::CursorShape values. + + If id is invalid, Qt::BitmapCursor, or unknown by the implementation, + Qt::ArrowCursor is used instead. +*/ + +void QPlatformCursorImage::set(Qt::CursorShape id) +{ + QPlatformCursorImage *cursor = 0; + if (id >= 0 && id <= Qt::LastCursor) { + if (!systemCursorTable[id]) + createSystemCursor(id); + cursor = systemCursorTable[id]; + } + + if (cursor == 0) { + if (!systemCursorTable[Qt::ArrowCursor]) + createSystemCursor(Qt::ArrowCursor); + cursor = systemCursorTable[Qt::ArrowCursor]; + } + cursorImage = cursor->cursorImage; + hot = cursor->hot; +} + +/*! + \fn void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) + + \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) + + \a image A pointer to a QImage + + \a hx The x coordinate of the cursor's hotspot + + \a hy the y coordinate of the cursor's hotspot +*/ + +void QPlatformCursorImage::set(const QImage * image, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + cursorImage = *image; +} + +/*! + \fn void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hx The X hotspot of the cursor graphic + + \a hy The Y hotspot of the cursor graphic +*/ +void QPlatformCursorImage::set(const uchar *data, const uchar *mask, + int width, int height, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + + cursorImage = QImage(width,height, QImage::Format_Indexed8); + + if (!width || !height || !data || !mask || cursorImage.isNull()) + return; + + cursorImage.setNumColors(3); + cursorImage.setColor(0, 0xff000000); + cursorImage.setColor(1, 0xffffffff); + cursorImage.setColor(2, 0x00000000); + + int bytesPerLine = (width + 7) / 8; + int p = 0; + int d, m; + + int x = -1, w = 0; + + uchar *cursor_data = cursorImage.bits(); + int bpl = cursorImage.bytesPerLine(); + for (int i = 0; i < height; i++) + { + for (int j = 0; j < bytesPerLine; j++, data++, mask++) + { + for (int b = 0; b < 8 && j*8+b < width; b++) + { + d = *data & (1 << b); + m = *mask & (1 << b); + if (d && m) p = 0; + else if (!d && m) p = 1; + else p = 2; + cursor_data[j*8+b] = p; + + // calc region + if (x < 0 && m) + x = j*8+b; + else if (x >= 0 && !m) { + x = -1; + w = 0; + } + if (m) + w++; + } + } + if (x >= 0) { + x = -1; + w = 0; + } + cursor_data += bpl; + } + +} + +/*! + \fn QGraphicsSystemCursorImage::QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hotX The X hotspot of the cursor graphic + + \a hotY The Y hotspot of the cursor graphic + + \sa set +*/ + +/*! + \fn QImage *QGraphicsSystemCursorImage::image() + + \brief Return the cursor graphic as a pointer to a QImage +*/ + +/*! + \fn QPoint QGraphicsSystemCursorImage::hotspot() + + \brief Return the cursor's hotspot +*/ + +QT_END_NAMESPACE diff --git a/src/gui/painting/qplatformcursor_qpa.h b/src/gui/painting/qplatformcursor_qpa.h new file mode 100644 index 0000000..bb8bbb7 --- /dev/null +++ b/src/gui/painting/qplatformcursor_qpa.h @@ -0,0 +1,97 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QGRAPHICSSYSTEMCURSOR_H +#define QGRAPHICSSYSTEMCURSOR_H + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +// Cursor graphics management +class Q_GUI_EXPORT QPlatformCursorImage { +public: + QPlatformCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + { set(data, mask, width, height, hotX, hotY); } + QImage * image() { return &cursorImage; } + QPoint hotspot() { return hot; } + void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void set(const QImage * image, int hx, int hy); + void set(Qt::CursorShape); +private: + static void createSystemCursor(int id); + QImage cursorImage; + QPoint hot; +}; + +class QPlatformCursor; + +class QPlatformCursorPrivate { +public: + static QList > getInstances() { return instances; } + static QList > instances; +}; + +class Q_GUI_EXPORT QPlatformCursor : public QObject { +public: + QPlatformCursor(QPlatformScreen *); + + // input methods + virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } + virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; + +protected: + QPlatformScreen* screen; // Where to request an update + +private: + Q_DECLARE_PRIVATE(QPlatformCursor); + friend void qt_lite_set_cursor(QWidget * w, bool force); + friend class QApplicationPrivate; +}; + +QT_END_NAMESPACE + +#endif // QGRAPHICSSYSTEMCURSOR_H diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.cpp b/src/plugins/platforms/directfb/qdirectfbcursor.cpp index 2edae45..f2c9f35 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.cpp +++ b/src/plugins/platforms/directfb/qdirectfbcursor.cpp @@ -3,10 +3,10 @@ QDirectFBCursor::QDirectFBCursor(QPlatformScreen* screen) : - QGraphicsSystemCursor(screen), surface(0) + QPlatformCursor(screen), surface(0) { QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY, &m_layer); - image = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); + image = new QPlatformCursorImage(0, 0, 0, 0, 0, 0); } void QDirectFBCursor::changeCursor(QCursor * cursor, QWidget * widget) diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h index 1566e7c..6aecb16 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.h +++ b/src/plugins/platforms/directfb/qdirectfbcursor.h @@ -1,12 +1,12 @@ #ifndef QDIRECTFBCURSOR_H #define QDIRECTFBCURSOR_H -#include +#include #include class QDirectFbScreen; class QDirectFbBlitter; -class QDirectFBCursor : public QGraphicsSystemCursor +class QDirectFBCursor : public QPlatformCursor { public: QDirectFBCursor(QPlatformScreen *screem); @@ -15,7 +15,7 @@ public: private: IDirectFBDisplayLayer * m_layer; IDirectFBSurface * surface; - QGraphicsSystemCursorImage * image; + QPlatformCursorImage * image; QDirectFbBlitter *blitter; }; diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index 213a710..ef7ab02 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -3,17 +3,17 @@ #include #include #include -#include +#include #include -QGraphicsSystemSoftwareCursor::QGraphicsSystemSoftwareCursor(QPlatformScreen *scr) - : QGraphicsSystemCursor(scr), currentRect(QRect()), prevRect(QRect()) +QPlatformSoftwareCursor::QPlatformSoftwareCursor(QPlatformScreen *scr) + : QPlatformCursor(scr), currentRect(QRect()), prevRect(QRect()) { - graphic = new QGraphicsSystemCursorImage(0, 0, 0, 0, 0, 0); + graphic = new QPlatformCursorImage(0, 0, 0, 0, 0, 0); setCursor(Qt::ArrowCursor); } -QRect QGraphicsSystemSoftwareCursor::getCurrentRect() +QRect QPlatformSoftwareCursor::getCurrentRect() { QRect rect = graphic->image()->rect().translated(-graphic->hotspot().x(), -graphic->hotspot().y()); @@ -24,7 +24,7 @@ QRect QGraphicsSystemSoftwareCursor::getCurrentRect() } -void QGraphicsSystemSoftwareCursor::pointerEvent(const QMouseEvent & e) +void QPlatformSoftwareCursor::pointerEvent(const QMouseEvent & e) { Q_UNUSED(e); QPoint screenOffset = screen->geometry().topLeft(); @@ -35,7 +35,7 @@ void QGraphicsSystemSoftwareCursor::pointerEvent(const QMouseEvent & e) } } -QRect QGraphicsSystemSoftwareCursor::drawCursor(QPainter & painter) +QRect QPlatformSoftwareCursor::drawCursor(QPainter & painter) { dirty = false; if (currentRect.isNull()) @@ -53,7 +53,7 @@ QRect QGraphicsSystemSoftwareCursor::drawCursor(QPainter & painter) return prevRect; } -QRect QGraphicsSystemSoftwareCursor::dirtyRect() +QRect QPlatformSoftwareCursor::dirtyRect() { if (onScreen) { onScreen = false; @@ -62,22 +62,22 @@ QRect QGraphicsSystemSoftwareCursor::dirtyRect() return QRect(); } -void QGraphicsSystemSoftwareCursor::setCursor(Qt::CursorShape shape) +void QPlatformSoftwareCursor::setCursor(Qt::CursorShape shape) { graphic->set(shape); } -void QGraphicsSystemSoftwareCursor::setCursor(const QImage * image, int hotx, int hoty) +void QPlatformSoftwareCursor::setCursor(const QImage * image, int hotx, int hoty) { graphic->set(image, hotx, hoty); } -void QGraphicsSystemSoftwareCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) +void QPlatformSoftwareCursor::setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) { graphic->set(data, mask, width, height, hotX, hotY); } -void QGraphicsSystemSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) +void QPlatformSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) { Q_UNUSED(widget); Qt::CursorShape shape = widgetCursor->shape(); diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 3b5075d..10f292e 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include #include @@ -16,10 +16,10 @@ class QPainter; class QFbScreen; -class QGraphicsSystemSoftwareCursor : public QGraphicsSystemCursor +class QPlatformSoftwareCursor : public QPlatformCursor { public: - QGraphicsSystemSoftwareCursor(QPlatformScreen * scr); + QPlatformSoftwareCursor(QPlatformScreen * scr); // output methods QRect dirtyRect(); @@ -35,7 +35,7 @@ public: virtual QRect lastPainted() { return prevRect; } protected: - QGraphicsSystemCursorImage * graphic; + QPlatformCursorImage * graphic; private: void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); @@ -142,7 +142,7 @@ public: protected: QList windowStack; QRegion repaintRegion; - QGraphicsSystemSoftwareCursor * cursor; + QPlatformSoftwareCursor * cursor; QTimer redrawTimer; protected slots: diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index f79f956..437af81 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -811,7 +811,7 @@ QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w, mFormat); mFbScreenImage = new QImage(data, mGeometry.width(), mGeometry.height(), bytesPerLine, mFormat); - cursor = new QGraphicsSystemSoftwareCursor(this); + cursor = new QPlatformSoftwareCursor(this); } void QLinuxFbScreen::setGeometry(QRect rect) diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index 46f2384..3f500c0 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -46,7 +46,7 @@ #include #include -#include +#include #include "qtestlitewindow.h" @@ -59,10 +59,10 @@ QT_BEGIN_NAMESPACE -class MyCursor : QGraphicsSystemCursor +class MyCursor : QPlatformCursor { public: - MyCursor(QPlatformScreen *screen) : QGraphicsSystemCursor(screen) {} + MyCursor(QPlatformScreen *screen) : QPlatformCursor(screen) {} void changeCursor(QCursor * cursor, QWidget * widget) { QTestLiteWindow *w = 0; diff --git a/src/plugins/platforms/vnc/qvnccursor.cpp b/src/plugins/platforms/vnc/qvnccursor.cpp index 72dcb25..e83696d 100644 --- a/src/plugins/platforms/vnc/qvnccursor.cpp +++ b/src/plugins/platforms/vnc/qvnccursor.cpp @@ -54,13 +54,13 @@ QT_BEGIN_NAMESPACE QVNCCursor::QVNCCursor(QVNCServer * srvr, QVNCScreen *scr ) - :QGraphicsSystemSoftwareCursor(scr), useVncCursor(false), server(srvr) + :QPlatformSoftwareCursor(scr), useVncCursor(false), server(srvr) { } void QVNCCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) { - QGraphicsSystemSoftwareCursor::changeCursor(widgetCursor, widget); + QPlatformSoftwareCursor::changeCursor(widgetCursor, widget); if (useVncCursor) { server->setDirtyCursor(); } else { @@ -84,7 +84,7 @@ QRect QVNCCursor::drawCursor(QPainter & painter) if (useVncCursor) return QRect(); - return QGraphicsSystemSoftwareCursor::drawCursor(painter); + return QPlatformSoftwareCursor::drawCursor(painter); } void QVNCCursor::clearClientCursor() diff --git a/src/plugins/platforms/vnc/qvnccursor.h b/src/plugins/platforms/vnc/qvnccursor.h index 2c6ff5b..eeb3686 100644 --- a/src/plugins/platforms/vnc/qvnccursor.h +++ b/src/plugins/platforms/vnc/qvnccursor.h @@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE class QVNCScreen; class QVNCServer; -class QVNCCursor : public QGraphicsSystemSoftwareCursor { +class QVNCCursor : public QPlatformSoftwareCursor { public: QVNCCursor(QVNCServer *, QVNCScreen *); -- cgit v0.12 From 13cc79de7b96cfe367869a748d07d502997d0342 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 24 Jun 2010 14:41:17 +0200 Subject: Refactored classes and functions using lite --- src/gui/kernel/kernel.pri | 6 +++--- src/gui/kernel/qapplication.cpp | 9 ++++----- src/gui/kernel/qapplication_p.h | 4 ++-- src/gui/kernel/qapplication_qpa.cpp | 12 ++++++------ src/gui/kernel/qdesktopwidget_qpa_p.h | 6 +++--- src/gui/kernel/qeventdispatcher_glib_qpa.cpp | 16 ++++++++-------- src/gui/kernel/qeventdispatcher_glib_qpa_p.h | 22 +++++++++++----------- src/gui/kernel/qeventdispatcher_qpa.cpp | 26 +++++++++++++------------- src/gui/kernel/qeventdispatcher_qpa_p.h | 16 ++++++++-------- src/gui/kernel/qgenericplugin_qpa.cpp | 6 +++--- src/gui/kernel/qgenericplugin_qpa.h | 6 +++--- src/gui/kernel/qgenericpluginfactory_qpa.cpp | 6 +++--- src/gui/kernel/qgenericpluginfactory_qpa.h | 6 +++--- src/gui/kernel/qwidget_qpa.cpp | 6 +++--- src/gui/kernel/qwindowsysteminterface.cpp | 2 +- src/gui/painting/qplatformcursor_qpa.h | 2 +- 16 files changed, 75 insertions(+), 76 deletions(-) diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 965cbe3..f773906 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -48,8 +48,7 @@ HEADERS += \ kernel/qgesturemanager_p.h \ kernel/qsoftkeymanager_p.h \ kernel/qsoftkeymanager_common_p.h \ - kernel/qguiplatformplugin_p.h \ - kernel/qdesktopwidget_qpa_p.h + kernel/qguiplatformplugin_p.h SOURCES += \ kernel/qaction.cpp \ @@ -215,7 +214,8 @@ qpa { kernel/qplatformintegrationfactory_qpa_p.h \ kernel/qplatformintegrationplugin_qpa.h \ kernel/qplatformwindow_qpa.h \ - kernel/qplatformglcontext_qpa.h + kernel/qplatformglcontext_qpa.h \ + kernel/qdesktopwidget_qpa_p.h SOURCES += \ kernel/qapplication_qpa.cpp \ diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index b3e6fcd..e1ed588 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -927,8 +927,7 @@ void QApplicationPrivate::initialize() // initialize the graphics system - on X11 this is initialized inside // qt_init() in qapplication_x11.cpp because of several reasons. // On QWS, the graphics system is set by the QScreen plugin. - // For lighthouse it will be initialized to QLiteGraphicsSystem - // when the platformIntegration plugin is instansiated in qt_init( + // We don't use graphics systems in Qt QPA graphics_system = QGraphicsSystemFactory::create(graphics_system_name); #endif @@ -2763,9 +2762,9 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { qt_x11_enforce_cursor(parentOfLeavingCursor,true); #elif defined(Q_WS_QPA) if (enter == QApplication::desktop()) { - qt_lite_set_cursor(enter, true); + qt_qpa_set_cursor(enter, true); } else { - qt_lite_set_cursor(parentOfLeavingCursor, true); + qt_qpa_set_cursor(parentOfLeavingCursor, true); } #endif } @@ -2792,7 +2791,7 @@ void QApplicationPrivate::dispatchEnterLeave(QWidget* enter, QWidget* leave) { #elif defined(Q_WS_S60) qt_symbian_set_cursor(cursorWidget, true); #elif defined(Q_WS_QPA) - qt_lite_set_cursor(cursorWidget, true); + qt_qpa_set_cursor(cursorWidget, true); #endif } } diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 7d98f4d..68ec648 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -328,7 +328,7 @@ public: static QPlatformIntegration *platformIntegration() { return platform_integration; } - static QAbstractEventDispatcher *qt_lite_core_dispatcher() + static QAbstractEventDispatcher *qt_qpa_core_dispatcher() { return QCoreApplication::instance()->d_func()->threadData->eventDispatcher; } #endif @@ -661,7 +661,7 @@ Q_GUI_EXPORT void qt_translateRawTouchEvent(QWidget *window, #elif defined(Q_OS_SYMBIAN) extern void qt_symbian_set_cursor(QWidget *, bool); #elif defined (Q_WS_QPA) - extern void qt_lite_set_cursor(QWidget *, bool); + extern void qt_qpa_set_cursor(QWidget *, bool); #endif QT_END_NAMESPACE diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index 1fc202c..2adcfc1 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -123,10 +123,10 @@ void QApplicationPrivate::createEventDispatcher() Q_Q(QApplication); #if !defined(QT_NO_GLIB) if (qgetenv("QT_NO_GLIB").isEmpty() && QEventDispatcherGlib::versionSupported()) - eventDispatcher = new QLiteEventDispatcherGlib(q); + eventDispatcher = new QPAEventDispatcherGlib(q); else #endif - eventDispatcher = new QEventDispatcherLite(q); + eventDispatcher = new QEventDispatcherQPA(q); } static bool qt_try_modal(QWidget *widget, QEvent::Type type) @@ -378,7 +378,7 @@ bool QApplication::isEffectEnabled(Qt::UIEffect effect) void QApplication::setOverrideCursor(const QCursor &cursor) { qApp->d_func()->cursor_list.prepend(cursor); - qt_lite_set_cursor(0, false); + qt_qpa_set_cursor(0, false); } void QApplication::restoreOverrideCursor() @@ -386,7 +386,7 @@ void QApplication::restoreOverrideCursor() if (qApp->d_func()->cursor_list.isEmpty()) return; qApp->d_func()->cursor_list.removeFirst(); - qt_lite_set_cursor(0, false); + qt_qpa_set_cursor(0, false); } #endif// QT_NO_CURSOR @@ -490,7 +490,7 @@ void qt_init(QApplicationPrivate *priv, int type) } QList pluginList; - QString platformName = qgetenv("QT_LITE_PLATFORM"); + QString platformName = qgetenv("QT_QPA_PLATFORM"); // Get command line params @@ -521,7 +521,7 @@ void qt_init(QApplicationPrivate *priv, int type) } #if 0 - QByteArray pluginEnv = qgetenv("QT_LITE_PLUGINS"); + QByteArray pluginEnv = qgetenv("QT_QPA_PLUGINS"); if (!pluginEnv.isEmpty()) { pluginList.append(pluginEnv.split(';')); } diff --git a/src/gui/kernel/qdesktopwidget_qpa_p.h b/src/gui/kernel/qdesktopwidget_qpa_p.h index 33e4c98..8bed09d 100644 --- a/src/gui/kernel/qdesktopwidget_qpa_p.h +++ b/src/gui/kernel/qdesktopwidget_qpa_p.h @@ -50,8 +50,8 @@ // We mean it. // -#ifndef QDESKTOPWIDGET_LITE_P_H -#define QDESKTOPWIDGET_LITE_P_H +#ifndef QDESKTOPWIDGET_QPA_P_H +#define QDESKTOPWIDGET_QPA_P_H #include "QDesktopWidget" #include "private/qwidget_p.h" @@ -73,4 +73,4 @@ public: QDesktopScreenWidget virtualScreen; }; -#endif // QDESKTOPWIDGET_LITE_P_H +#endif // QDESKTOPWIDGET_QPA_P_H diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp index f45902c..9585b26 100644 --- a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp @@ -56,7 +56,7 @@ QT_BEGIN_NAMESPACE struct GUserEventSource { GSource source; - QLiteEventDispatcherGlib *q; + QPAEventDispatcherGlib *q; }; static gboolean userEventSourcePrepare(GSource *s, gint *timeout) @@ -104,7 +104,7 @@ static GSourceFuncs userEventSourceFuncs = { NULL }; -QLiteEventDispatcherGlibPrivate::QLiteEventDispatcherGlibPrivate(GMainContext *context) +QPAEventDispatcherGlibPrivate::QPAEventDispatcherGlibPrivate(GMainContext *context) : QEventDispatcherGlibPrivate(context) { userEventSource = reinterpret_cast(g_source_new(&userEventSourceFuncs, @@ -115,23 +115,23 @@ QLiteEventDispatcherGlibPrivate::QLiteEventDispatcherGlibPrivate(GMainContext *c } -QLiteEventDispatcherGlib::QLiteEventDispatcherGlib(QObject *parent) - : QEventDispatcherGlib(*new QLiteEventDispatcherGlibPrivate, parent) +QPAEventDispatcherGlib::QPAEventDispatcherGlib(QObject *parent) + : QEventDispatcherGlib(*new QPAEventDispatcherGlibPrivate, parent) { - Q_D(QLiteEventDispatcherGlib); + Q_D(QPAEventDispatcherGlib); d->userEventSource->q = this; } -QLiteEventDispatcherGlib::~QLiteEventDispatcherGlib() +QPAEventDispatcherGlib::~QPAEventDispatcherGlib() { - Q_D(QLiteEventDispatcherGlib); + Q_D(QPAEventDispatcherGlib); g_source_destroy(&d->userEventSource->source); g_source_unref(&d->userEventSource->source); d->userEventSource = 0; } -bool QLiteEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) +bool QPAEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) { return QEventDispatcherGlib::processEvents(flags); } diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa_p.h b/src/gui/kernel/qeventdispatcher_glib_qpa_p.h index 6ebdb25..1c32ab2 100644 --- a/src/gui/kernel/qeventdispatcher_glib_qpa_p.h +++ b/src/gui/kernel/qeventdispatcher_glib_qpa_p.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef QLITEEVENTDISPATCHER_GLIB_P_H -#define QLITEEVENTDISPATCHER_GLIB_P_H +#ifndef QEVENTDISPATCHER_GLIB_QPA_P_H +#define QEVENTDISPATCHER_GLIB_QPA_P_H // // W A R N I N G @@ -58,31 +58,31 @@ typedef struct _GMainContext GMainContext; QT_BEGIN_NAMESPACE -class QLiteEventDispatcherGlibPrivate; +class QPAEventDispatcherGlibPrivate; -class QLiteEventDispatcherGlib : public QEventDispatcherGlib +class QPAEventDispatcherGlib : public QEventDispatcherGlib { Q_OBJECT - Q_DECLARE_PRIVATE(QLiteEventDispatcherGlib) + Q_DECLARE_PRIVATE(QPAEventDispatcherGlib) public: - explicit QLiteEventDispatcherGlib(QObject *parent = 0); - ~QLiteEventDispatcherGlib(); + explicit QPAEventDispatcherGlib(QObject *parent = 0); + ~QPAEventDispatcherGlib(); bool processEvents(QEventLoop::ProcessEventsFlags flags); }; struct GUserEventSource; -class QLiteEventDispatcherGlibPrivate : public QEventDispatcherGlibPrivate +class QPAEventDispatcherGlibPrivate : public QEventDispatcherGlibPrivate { - Q_DECLARE_PUBLIC(QLiteEventDispatcherGlib) + Q_DECLARE_PUBLIC(QPAEventDispatcherGlib) public: - QLiteEventDispatcherGlibPrivate(GMainContext *context = 0); + QPAEventDispatcherGlibPrivate(GMainContext *context = 0); GUserEventSource *userEventSource; }; QT_END_NAMESPACE -#endif // QLITEEVENTDISPATCHER_GLIB_P_H +#endif // QEVENTDISPATCHER_GLIB_QPA_P_H diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp index c6b5636..5740548 100644 --- a/src/gui/kernel/qeventdispatcher_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_qpa.cpp @@ -54,29 +54,29 @@ QT_BEGIN_NAMESPACE QT_USE_NAMESPACE -class QEventDispatcherLitePrivate : public QEventDispatcherUNIXPrivate +class QEventDispatcherQPAPrivate : public QEventDispatcherUNIXPrivate { - Q_DECLARE_PUBLIC(QEventDispatcherLite) + Q_DECLARE_PUBLIC(QEventDispatcherQPA) public: - inline QEventDispatcherLitePrivate() + inline QEventDispatcherQPAPrivate() { } }; -QEventDispatcherLite::QEventDispatcherLite(QObject *parent) - : QEventDispatcherUNIX(*new QEventDispatcherLitePrivate, parent) +QEventDispatcherQPA::QEventDispatcherQPA(QObject *parent) + : QEventDispatcherUNIX(*new QEventDispatcherQPAPrivate, parent) { } -QEventDispatcherLite::~QEventDispatcherLite() +QEventDispatcherQPA::~QEventDispatcherQPA() { } //#define ZERO_FOR_THE_MOMENT -bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) +bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags) { - Q_D(QEventDispatcherLite); + Q_D(QEventDispatcherQPA); int nevents = 0; // handle gui and posted events @@ -112,30 +112,30 @@ bool QEventDispatcherLite::processEvents(QEventLoop::ProcessEventsFlags flags) return (nevents > 0); } -bool QEventDispatcherLite::hasPendingEvents() +bool QEventDispatcherQPA::hasPendingEvents() { extern uint qGlobalPostedEventsCount(); // from qapplication.cpp return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::userEventsQueued();; } -void QEventDispatcherLite::startingUp() +void QEventDispatcherQPA::startingUp() { } -void QEventDispatcherLite::closingDown() +void QEventDispatcherQPA::closingDown() { } -void QEventDispatcherLite::flush() +void QEventDispatcherQPA::flush() { if(qApp) qApp->sendPostedEvents(); } -int QEventDispatcherLite::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, +int QEventDispatcherQPA::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, timeval *timeout) { return QEventDispatcherUNIX::select(nfds, readfds, writefds, exceptfds, timeout); diff --git a/src/gui/kernel/qeventdispatcher_qpa_p.h b/src/gui/kernel/qeventdispatcher_qpa_p.h index c098e6c..878daaa 100644 --- a/src/gui/kernel/qeventdispatcher_qpa_p.h +++ b/src/gui/kernel/qeventdispatcher_qpa_p.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef QEVENTDISPATCHER_LITE_P_H -#define QEVENTDISPATCHER_LITE_P_H +#ifndef QEVENTDISPATCHER_QPA_P_H +#define QEVENTDISPATCHER_QPA_P_H // // W A R N I N G @@ -57,16 +57,16 @@ QT_BEGIN_NAMESPACE -class QEventDispatcherLitePrivate; +class QEventDispatcherQPAPrivate; -class QEventDispatcherLite : public QEventDispatcherUNIX +class QEventDispatcherQPA : public QEventDispatcherUNIX { Q_OBJECT - Q_DECLARE_PRIVATE(QEventDispatcherLite) + Q_DECLARE_PRIVATE(QEventDispatcherQPA) public: - explicit QEventDispatcherLite(QObject *parent = 0); - ~QEventDispatcherLite(); + explicit QEventDispatcherQPA(QObject *parent = 0); + ~QEventDispatcherQPA(); bool processEvents(QEventLoop::ProcessEventsFlags flags); bool hasPendingEvents(); @@ -83,4 +83,4 @@ protected: QT_END_NAMESPACE -#endif // QEVENTDISPATCHER_LITE_P_H +#endif // QEVENTDISPATCHER_QPA_P_H diff --git a/src/gui/kernel/qgenericplugin_qpa.cpp b/src/gui/kernel/qgenericplugin_qpa.cpp index 6290b40..43d6525 100644 --- a/src/gui/kernel/qgenericplugin_qpa.cpp +++ b/src/gui/kernel/qgenericplugin_qpa.cpp @@ -48,12 +48,12 @@ QT_BEGIN_NAMESPACE /*! \class QGenericPlugin \ingroup plugins - \ingroup lite + \ingroup qpa \brief The QGenericPlugin class is an abstract base class for - window-system related plugins in Qt for Embedded Linux LITE. + window-system related plugins in Qt QPA. - Note that this class is only available in \l{Qt for Embedded Linux LITE}. + Note that this class is only available in \l{Qt QPA}. A mouse plugin can be created by subclassing QGenericPlugin and reimplementing the pure virtual keys() and diff --git a/src/gui/kernel/qgenericplugin_qpa.h b/src/gui/kernel/qgenericplugin_qpa.h index a468a9f..e1792cd 100644 --- a/src/gui/kernel/qgenericplugin_qpa.h +++ b/src/gui/kernel/qgenericplugin_qpa.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef QGENERICPLUGIN_LITE_H -#define QGENERICPLUGIN_LITE_H +#ifndef QGENERICPLUGIN_QPA_H +#define QGENERICPLUGIN_QPA_H #include #include @@ -81,4 +81,4 @@ QT_END_NAMESPACE QT_END_HEADER -#endif // QMOUSEDRIVERPLUGIN_QWS_H +#endif // QGENERICPLUGIN_QPA_H diff --git a/src/gui/kernel/qgenericpluginfactory_qpa.cpp b/src/gui/kernel/qgenericpluginfactory_qpa.cpp index dcc7cc7..abc575a 100644 --- a/src/gui/kernel/qgenericpluginfactory_qpa.cpp +++ b/src/gui/kernel/qgenericpluginfactory_qpa.cpp @@ -60,12 +60,12 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, /*! \class QGenericPluginFactory - \ingroup qws + \ingroup qpa \brief The QGenericPluginFactory class creates window-system - related plugin drivers in Qt for Embedded Linux LITE. + related plugin drivers in Qt QPA. - Note that this class is only available in \l{Qt for Embedded Linux LITE}. + Note that this class is only available in \l{Qt QPA}. \sa QGenericPlugin diff --git a/src/gui/kernel/qgenericpluginfactory_qpa.h b/src/gui/kernel/qgenericpluginfactory_qpa.h index 86886f1..59eac38 100644 --- a/src/gui/kernel/qgenericpluginfactory_qpa.h +++ b/src/gui/kernel/qgenericpluginfactory_qpa.h @@ -39,8 +39,8 @@ ** ****************************************************************************/ -#ifndef QGENERICPLUGINFACTORY_LITE_H -#define QGENERICPLUGINFACTORY_LITE_H +#ifndef QGENERICPLUGINFACTORY_QPA_H +#define QGENERICPLUGINFACTORY_QPA_H #include @@ -64,4 +64,4 @@ QT_END_NAMESPACE QT_END_HEADER -#endif // QGENERICPLUGINFACTORY_QWS_H +#endif // QGENERICPLUGINFACTORY_QPA_H diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index a543c8f..8bb3f38 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -246,14 +246,14 @@ void QWidgetPrivate::setCursor_sys(const QCursor &cursor) Q_UNUSED(cursor); Q_Q(QWidget); if (q->isVisible()) - qt_lite_set_cursor(q, false); + qt_qpa_set_cursor(q, false); } void QWidgetPrivate::unsetCursor_sys() { Q_Q(QWidget); if (q->isVisible()) - qt_lite_set_cursor(q, false); + qt_qpa_set_cursor(q, false); } void QWidgetPrivate::updateCursor() const @@ -753,7 +753,7 @@ void QWidgetPrivate::setModal_sys() } #ifndef QT_NO_CURSOR -void qt_lite_set_cursor(QWidget * w, bool force) +void qt_qpa_set_cursor(QWidget * w, bool force) { static QCursor arrowCursor(Qt::ArrowCursor); static QPointer lastUnderMouse = 0; diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp index c9d177d..4cf9ded 100644 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ b/src/gui/kernel/qwindowsysteminterface.cpp @@ -129,7 +129,7 @@ void QWindowSystemInterfacePrivate::queueUserEvent(QWindowSystemInterface::UserE userEventQueue.append(ev); queueMutex.unlock(); - QAbstractEventDispatcher *dispatcher = QApplicationPrivate::qt_lite_core_dispatcher(); + QAbstractEventDispatcher *dispatcher = QApplicationPrivate::qt_qpa_core_dispatcher(); if (dispatcher) dispatcher->wakeUp(); } diff --git a/src/gui/painting/qplatformcursor_qpa.h b/src/gui/painting/qplatformcursor_qpa.h index bb8bbb7..5f1654d 100644 --- a/src/gui/painting/qplatformcursor_qpa.h +++ b/src/gui/painting/qplatformcursor_qpa.h @@ -88,7 +88,7 @@ protected: private: Q_DECLARE_PRIVATE(QPlatformCursor); - friend void qt_lite_set_cursor(QWidget * w, bool force); + friend void qt_qpa_set_cursor(QWidget * w, bool force); friend class QApplicationPrivate; }; -- cgit v0.12 From bd337d251a3ff54c6845f1c4469ec7c99068971e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 24 Jun 2010 15:03:26 +0200 Subject: Removed QGraphicsSystem include from QPlatformIntegration --- src/gui/kernel/qplatformintegration_qpa.h | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index f80b0ae..ea0ed35 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -42,19 +42,24 @@ #ifndef QPLATFORMINTEGRATION_H #define QPLATFORMINTEGRATION_H -#include +#include +#include #include QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -QT_MODULE(Gui) +//QT_MODULE(Gui) +class QPlatformWindow; +class QWindowSurface; +class QBlittable; +class QWidget; class Q_GUI_EXPORT QPlatformIntegration { public: - virtual ~QPlatformIntegration() { }; + virtual ~QPlatformIntegration() { } // GraphicsSystem functions virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; @@ -69,6 +74,7 @@ public: virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; virtual bool hasOpenGL() const; + }; QT_END_NAMESPACE -- cgit v0.12 From d879c51dea3521d36a2f47e2406a99386f442254 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 24 Jun 2010 15:50:16 +0200 Subject: Compile fix for testlite plugin --- src/plugins/platforms/testlite/qtestliteintegration.h | 3 +++ src/plugins/platforms/testlite/qtestlitewindow.cpp | 1 + 2 files changed, 4 insertions(+) diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h index 01d428c..ac10841 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.h +++ b/src/plugins/platforms/testlite/qtestliteintegration.h @@ -45,6 +45,9 @@ #include #include +//make sure textstream is included before any X11 headers +#include + QT_BEGIN_NAMESPACE class MyDisplay; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 82e64e6..0f6c921 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -41,6 +41,7 @@ #include "qtestliteintegration.h" #include +#include #include "qtestlitewindow.h" -- cgit v0.12 From 38e29c10cfdee145cb5e56f789f2b156a7ae3b35 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 29 Jun 2010 10:21:35 +0200 Subject: Compile after _qpa renaming --- src/plugins/generic/linuxinput/main.cpp | 2 +- src/plugins/generic/tslib/main.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/plugins/generic/linuxinput/main.cpp b/src/plugins/generic/linuxinput/main.cpp index 25e80eb..dc05254 100644 --- a/src/plugins/generic/linuxinput/main.cpp +++ b/src/plugins/generic/linuxinput/main.cpp @@ -39,7 +39,7 @@ ** ****************************************************************************/ -#include +#include #include "qlinuxinput.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/generic/tslib/main.cpp b/src/plugins/generic/tslib/main.cpp index 4e8e50a..502c6a0 100644 --- a/src/plugins/generic/tslib/main.cpp +++ b/src/plugins/generic/tslib/main.cpp @@ -39,7 +39,7 @@ ** ****************************************************************************/ -#include +#include #include "qtslib.h" QT_BEGIN_NAMESPACE -- cgit v0.12 From 9cc54422943c0fc662b7b0c9a0d10565f7f6e73b Mon Sep 17 00:00:00 2001 From: Jeremy Katz Date: Wed, 30 Jun 2010 11:09:25 +0200 Subject: check for a null new parent before trying to access its platformWindow This fixes a crash seen in the arora browser when exiting --- src/gui/kernel/qwidget_qpa.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index 8bb3f38..1acf398 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -161,7 +161,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (parent != newparent) { QObjectPrivate::setParent_helper(newparent); //### why does this have to be done in the _sys function??? - if (q->platformWindow()) { + if (q->platformWindow() && newparent) { QWidget * parentWithWindow = newparent->platformWindow()? newparent : newparent->nativeParentWidget(); if (parentWithWindow && parentWithWindow->platformWindow()) { q->platformWindow()->setParent(parentWithWindow->platformWindow()); -- cgit v0.12 From d7168ae0ff930f19f206a1b56c03fc35b22bb948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 7 Jul 2010 15:09:35 +0200 Subject: Never compile lighthouse with EGL support it should reside in the plugin, not in the opengl module nor in gui --- configure | 5 +++++ src/gui/kernel/qplatformglcontext_qpa.h | 5 +---- src/opengl/opengl.pro | 2 -- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/configure b/configure index 23aa101..a57f6ce 100755 --- a/configure +++ b/configure @@ -6636,6 +6636,11 @@ else QT_CONFIG="$QT_CONFIG accessibility" fi +# egl stuff does not belong in lighthouse, but rather in plugins +if [ "$PLATFORM_QPA" = "yes" ]; then + CFG_EGL="no" +fi + # enable egl if [ "$CFG_EGL" = "no" ]; then QCONFIG_FLAGS="$QCONFIG_FLAGS QT_NO_EGL" diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index 8aeb635..dcfd54c 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -51,10 +51,7 @@ QT_BEGIN_NAMESPACE class Q_OPENGL_EXPORT QPlatformGLContext { public: - //QPlatformGLContext(); - //virtual ~QPlatformGLContext(); - - //virtual bool create(QPaintDevice* device, QPlatformGLContext* shareContext) = 0; + virtual ~QPlatformGLContext() { } virtual void makeCurrent() = 0; virtual void doneCurrent() = 0; diff --git a/src/opengl/opengl.pro b/src/opengl/opengl.pro index 09a6b0f..772c27f 100644 --- a/src/opengl/opengl.pro +++ b/src/opengl/opengl.pro @@ -78,8 +78,6 @@ SOURCES += qgl.cpp \ } qpa { - DEFINES += QT_NO_EGL - SOURCES += qgl_qpa.cpp \ qglpixelbuffer_stub.cpp } -- cgit v0.12 From 8ede118779b0b4cde591f3bf5ec94f7a6f25e2a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 7 Jul 2010 15:11:01 +0200 Subject: Make openkode work with new interfaces and moved egl stuff into plugin --- .../platforms/openkode/qopenkodeglintegration.cpp | 189 ++++----------------- .../platforms/openkode/qopenkodeglintegration.h | 14 +- .../platforms/openkode/qopenkodeintegration.cpp | 41 ++++- .../platforms/openkode/qopenkodeintegration.h | 9 +- src/plugins/platforms/openkode/qopenkodewindow.cpp | 160 ++++++++++++++--- src/plugins/platforms/openkode/qopenkodewindow.h | 14 +- .../platforms/openkode/qopenkodewindowsurface.cpp | 39 ++--- .../platforms/openkode/qopenkodewindowsurface.h | 8 +- 8 files changed, 239 insertions(+), 235 deletions(-) diff --git a/src/plugins/platforms/openkode/qopenkodeglintegration.cpp b/src/plugins/platforms/openkode/qopenkodeglintegration.cpp index 7223538..4296876 100644 --- a/src/plugins/platforms/openkode/qopenkodeglintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeglintegration.cpp @@ -40,198 +40,69 @@ ****************************************************************************/ #include "qopenkodeglintegration.h" + +#include + #include #include #include #include -#include -void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLFormat& glFormat) +QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi) + : m_eglDisplay(display) + , m_eglSurface(surface) + , m_eglApi(eglApi) { - int redSize = glFormat.redBufferSize(); - int greenSize = glFormat.greenBufferSize(); - int blueSize = glFormat.blueBufferSize(); - int alphaSize = glFormat.alphaBufferSize(); - int depthSize = glFormat.depthBufferSize(); - int stencilSize = glFormat.stencilBufferSize(); - int sampleCount = glFormat.samples(); - - // QGLFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that - // type has been requested. So we must check QGLFormat's booleans too if size is -1: - if (glFormat.alpha() && alphaSize <= 0) - alphaSize = 1; - if (glFormat.depth() && depthSize <= 0) - depthSize = 1; - if (glFormat.stencil() && stencilSize <= 0) - stencilSize = 1; - if (glFormat.sampleBuffers() && sampleCount <= 0) - sampleCount = 1; - - // We want to make sure 16-bit configs are chosen over 32-bit configs as they will provide - // the best performance. The EGL config selection algorithm is a bit stange in this regard: - // The selection criteria for EGL_BUFFER_SIZE is "AtLeast", so we can't use it to discard - // 32-bit configs completely from the selection. So it then comes to the sorting algorithm. - // The red/green/blue sizes have a sort priority of 3, so they are sorted by first. The sort - // order is special and described as "by larger _total_ number of color bits.". So EGL will - // put 32-bit configs in the list before the 16-bit configs. However, the spec also goes on - // to say "If the requested number of bits in attrib_list for a particular component is 0, - // then the number of bits for that component is not considered". This part of the spec also - // seems to imply that setting the red/green/blue bits to zero means none of the components - // are considered and EGL disregards the entire sorting rule. It then looks to the next - // highest priority rule, which is EGL_BUFFER_SIZE. Despite the selection criteria being - // "AtLeast" for EGL_BUFFER_SIZE, it's sort order is "smaller" meaning 16-bit configs are - // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit, - // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that - // if the application sets the red/green/blue size to 5/6/5 on the QGLFormat, they will - // probably get a 32-bit config, even when there's an RGB565 config avaliable. Oh well. - - // Now normalize the values so -1 becomes 0 - redSize = redSize > 0 ? redSize : 0; - greenSize = greenSize > 0 ? greenSize : 0; - blueSize = blueSize > 0 ? blueSize : 0; - alphaSize = alphaSize > 0 ? alphaSize : 0; - depthSize = depthSize > 0 ? depthSize : 0; - stencilSize = stencilSize > 0 ? stencilSize : 0; - sampleCount = sampleCount > 0 ? sampleCount : 0; - - eglProperties.setValue(EGL_RED_SIZE, redSize); - eglProperties.setValue(EGL_GREEN_SIZE, greenSize); - eglProperties.setValue(EGL_BLUE_SIZE, blueSize); - eglProperties.setValue(EGL_ALPHA_SIZE, alphaSize); - eglProperties.setValue(EGL_DEPTH_SIZE, depthSize); - eglProperties.setValue(EGL_STENCIL_SIZE, stencilSize); - eglProperties.setValue(EGL_SAMPLES, sampleCount); - eglProperties.setValue(EGL_SAMPLE_BUFFERS, sampleCount ? 1 : 0); -} - -// Updates "format" with the parameters of the selected configuration. -void qt_glformat_from_eglconfig(QGLFormat& format, const EGLConfig config) -{ - EGLint redSize = 0; - EGLint greenSize = 0; - EGLint blueSize = 0; - EGLint alphaSize = 0; - EGLint depthSize = 0; - EGLint stencilSize = 0; - EGLint sampleCount = 0; - EGLint level = 0; - - EGLDisplay display = QEgl::display(); - eglGetConfigAttrib(display, config, EGL_RED_SIZE, &redSize); - eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &greenSize); - eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &blueSize); - eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &alphaSize); - eglGetConfigAttrib(display, config, EGL_DEPTH_SIZE, &depthSize); - eglGetConfigAttrib(display, config, EGL_STENCIL_SIZE, &stencilSize); - eglGetConfigAttrib(display, config, EGL_SAMPLES, &sampleCount); - eglGetConfigAttrib(display, config, EGL_LEVEL, &level); - - format.setRedBufferSize(redSize); - format.setGreenBufferSize(greenSize); - format.setBlueBufferSize(blueSize); - format.setAlphaBufferSize(alphaSize); - format.setDepthBufferSize(depthSize); - format.setStencilBufferSize(stencilSize); - format.setSamples(sampleCount); - format.setPlane(level + 1); // EGL calls level 0 "normal" whereas Qt calls 1 "normal" - format.setDirectRendering(true); // All EGL contexts are direct-rendered - format.setRgba(true); // EGL doesn't support colour index rendering - format.setStereo(false); // EGL doesn't support stereo buffers - format.setAccumBufferSize(0); // EGL doesn't support accululation buffers - - // Clear the EGL error state because some of the above may - // have errored out because the attribute is not applicable - // to the surface type. Such errors don't matter. - eglGetError(); -} + if (m_eglSurface == EGL_NO_SURFACE) { + qWarning("Createing QEGLPlatformContext with no surface"); + } -QEGLPlatformContext::QEGLPlatformContext() -{ + eglBindAPI(m_eglApi); + m_eglContext = eglCreateContext(m_eglDisplay,config, KD_NULL,contextAttrs); + if (!m_eglContext) { + qErrnoWarning("QEGLPlatformContext could not create eglContext"); + } } QEGLPlatformContext::~QEGLPlatformContext() { if (m_eglSurface != EGL_NO_SURFACE) { doneCurrent(); - eglDestroySurface(QEgl::display(), m_eglSurface); + eglDestroySurface(m_eglDisplay, m_eglSurface); m_eglSurface = EGL_NO_SURFACE; } - if (m_context != EGL_NO_CONTEXT) { - eglDestroyContext(QEgl::display(), m_context); - m_context = EGL_NO_CONTEXT; - } -} - -bool QEGLPlatformContext::create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext) -{ - QEglProperties properties; - properties.setValue(EGL_CONTEXT_CLIENT_VERSION, 2); - //lets go with all defaults :) Seems like we get bad attributes for anything else - //qt_eglproperties_set_glformat(properties,format); - format.setDepthBufferSize(1); - EGLConfig config = QEgl::defaultConfig(device->devType(), QEgl::OpenGL,QEgl::Renderable); - QEGLPlatformContext *eglShareContext = static_cast(shareContext); - if (shareContext && eglShareContext->m_context != EGL_NO_CONTEXT) { - m_context = eglCreateContext(QEgl::display(), config, eglShareContext->m_context, properties.properties()); - if (m_context == EGL_NO_CONTEXT) { - qWarning() << "QEglContext::createContext(): Could not share context:" << QEgl::errorString(); - shareContext = 0; - } - } else { - m_context = eglCreateContext(QEgl::display(), config, EGL_NO_CONTEXT, properties.properties()); - if (m_context == EGL_NO_CONTEXT) { - qWarning() << "QEglContext::createContext(): Unable to create EGL context:" << QEgl::errorString(); - return false; - } + if (m_eglContext != EGL_NO_CONTEXT) { + eglDestroyContext(m_eglDisplay, m_eglContext); + m_eglContext = EGL_NO_CONTEXT; } - //Get/create the EGLSurface - if (device && device->devType() == QInternal::Widget){ - QWidget* widget = static_cast(device); - QGLWidget* glWidget = qobject_cast(widget); - - if (!widget->isTopLevel()) { - qWarning("Creating a GL context is only supported on top-level QWidgets"); - return false; - } - EGLNativeWindowType winId = (EGLNativeWindowType) widget->window()->winId(); - - m_eglSurface = eglCreateWindowSurface(QEgl::display(), config, winId, 0); - makeCurrent(); - glClearColor(0.0, 0.0, 0.0, 1.0); - swapBuffers(); - - - } else { - qDebug() << "QEGLPlatformContext::create: didn't create surface!!!!!"; - } - return true; - } void QEGLPlatformContext::makeCurrent() { - eglBindAPI(EGL_OPENGL_API); - bool ok = eglMakeCurrent(QEgl::display(), m_eglSurface, m_eglSurface, m_context); + eglBindAPI(m_eglApi); + bool ok = eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext); if (!ok) - qWarning() << "QEGLPlatformContext::makeCurrent(" << m_eglSurface << "):" << QEgl::errorString(); + qWarning() << "QEGLPlatformContext::makeCurrent(" << m_eglSurface << "):" << eglGetError(); } void QEGLPlatformContext::doneCurrent() { - eglBindAPI(EGL_OPENGL_ES_API); - bool ok = eglMakeCurrent(QEgl::display(), EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + eglBindAPI(m_eglApi); + bool ok = eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); if (!ok) - qWarning() << "QEGLPlatformContext::doneCurrent():" << QEgl::errorString(); + qWarning() << "QEGLPlatformContext::doneCurrent():" << eglGetError(); } void QEGLPlatformContext::swapBuffers() { - bool ok = eglSwapBuffers(QEgl::display(), m_eglSurface); + eglBindAPI(m_eglApi); + bool ok = eglSwapBuffers(m_eglDisplay, m_eglSurface); if (!ok) - qWarning() << "QEGLPlatformContext::swapBuffers():" << QEgl::errorString(); + qWarning() << "QEGLPlatformContext::swapBuffers():" << eglGetError(); } void* QEGLPlatformContext::getProcAddress(const QString& procName) { - eglGetProcAddress(qPrintable(procName)); + eglBindAPI(m_eglApi); + return (void *)eglGetProcAddress(qPrintable(procName)); } diff --git a/src/plugins/platforms/openkode/qopenkodeglintegration.h b/src/plugins/platforms/openkode/qopenkodeglintegration.h index b0b7a48..19d155a 100644 --- a/src/plugins/platforms/openkode/qopenkodeglintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeglintegration.h @@ -42,29 +42,25 @@ #ifndef QOPENKODEGLINTEGRATION_H #define QOPENKODEGLINTEGRATION_H -#include -#include +#include #include -void qt_eglproperties_set_glformat(QEglProperties& eglProperties, const QGLFormat& glFormat); -// Updates "format" with the parameters of the selected configuration. -void qt_glformat_from_eglconfig(QGLFormat& format, const EGLConfig config); - class QEGLPlatformContext : public QPlatformGLContext { public: - QEGLPlatformContext(); + QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi); ~QEGLPlatformContext(); - bool create(QPaintDevice* device, QGLFormat& format, QPlatformGLContext* shareContext); void makeCurrent(); void doneCurrent(); void swapBuffers(); void* getProcAddress(const QString& procName); private: - EGLContext m_context; + EGLContext m_eglContext; + EGLDisplay m_eglDisplay; EGLSurface m_eglSurface; + EGLenum m_eglApi; }; #endif //QOPENKODEGLINTEGRATION_H diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index 5e461ae..52b57d9 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -57,6 +57,8 @@ #include #include +#include + #include "GLES2/gl2ext.h" #include @@ -85,6 +87,19 @@ QOpenKODEScreen::QOpenKODEScreen() return; } + KDboolean enabled = KD_TRUE; + kdSetDisplayPropertybvNV(kdDisplay, + KD_DISPLAYPROPERTY_ENABLED_NV, + &enabled); + KDboolean power = KD_DISPLAY_POWER_ON; + kdSetDisplayPropertyivNV(kdDisplay, + KD_DISPLAYPROPERTY_POWER_NV, + &power); + + kdSetDisplayPropertycvNV(kdDisplay, + KD_DISPLAYPROPERTY_DESKTOP_NAME_NV, + KD_DEFAULT_DESKTOP_NV); + KDDisplayModeNV mode; if (kdGetDisplayModeNV(kdDisplay, &mode)) { qErrnoWarning(kdGetError(), "Could not get display mode"); @@ -95,15 +110,26 @@ QOpenKODEScreen::QOpenKODEScreen() KDint desktopSize[] = { mode.width, mode.height }; - if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { - qErrnoWarning(kdGetError(), "Could not set desktop size"); - return; - } +// if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { +// qErrnoWarning(kdGetError(), "Could not set desktop size"); +// return; +// } // Once we've set up the desktop and display we don't need them anymore kdReleaseDisplayNV(kdDisplay); kdReleaseDesktopNV(kdDesktop); + mEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); + if (mEglDisplay == EGL_NO_DISPLAY) { + qErrnoWarning("EGL failed to obtain display"); + } + + /* Initialize EGL display */ + EGLBoolean rvbool = eglInitialize(mEglDisplay, 0, 0); + if (!rvbool) { + qErrnoWarning("EGL failed to initialize display"); + } + const int defaultDpi = 72; mGeometry = QRect(0, 0, mode.width, mode.height); mPhysicalSize = QSize(mode.width * 25.4 / defaultDpi, mode.height * 25.4 / defaultDpi); @@ -212,17 +238,14 @@ QPlatformWindow *QOpenKODEIntegration::createPlatformWindow(QWidget *tlw, WId ) QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId wid) const { - return new QOpenKODEWindowSurface(widget, wid); +// return new QOpenKODEWindowSurface(widget, wid); + return new QGLWindowSurface(widget); } bool QOpenKODEIntegration::hasOpenGL() const { return true; } -QPlatformGLContext *QOpenKODEIntegration::createGLContext() -{ - return new QEGLPlatformContext; -} GLuint QOpenKODEIntegration::blitterProgram() { diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index f53c520..9029086 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -46,10 +46,10 @@ #include #include -#include -#include +#include -# include +#include +#include QT_BEGIN_NAMESPACE @@ -57,6 +57,7 @@ struct KDDesktopNV; class QOpenKODEScreen : public QPlatformScreen { + Q_OBJECT public: QOpenKODEScreen(); ~QOpenKODEScreen() {} @@ -66,11 +67,13 @@ public: QImage::Format format() const { return mFormat; } QSize physicalSize() const { return mPhysicalSize; } + EGLDisplay eglDisplay() { return mEglDisplay; } public: QRect mGeometry; int mDepth; QImage::Format mFormat; QSize mPhysicalSize; + EGLDisplay mEglDisplay; }; class QOpenKODEIntegration : public QPlatformIntegration diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 4d18a6f..88e6a75 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -39,40 +39,112 @@ ** ****************************************************************************/ #include "qopenkodewindow.h" +#include "qopenkodeintegration.h" +#include "qopenkodeglintegration.h" +#include #include -#include +#include + #include +#include +#include #include QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) : QPlatformWindow(tlw) { - /* Initialize EGL display */ - EGLBoolean rvbool = eglInitialize(QEgl::display(), KD_NULL, KD_NULL); - if (!rvbool) { - kdLogMessage("EGL failed to initialize display\n"); + EGLint configAttrs[] = { + EGL_RED_SIZE, 1, + EGL_GREEN_SIZE, 1, + EGL_BLUE_SIZE, 1, + EGL_BUFFER_SIZE, 16, + EGL_DEPTH_SIZE, 0, + EGL_LEVEL, 0, + EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, +// #ifdef EGL_NV_coverage_sample +// EGL_COVERAGE_BUFFERS_NV, 1, +// EGL_COVERAGE_SAMPLES_NV, 5, +// #endif + EGL_ALPHA_SIZE, 0, +// EGL_LUMINANCE_SIZE, 0, + EGL_ALPHA_MASK_SIZE, 0, + EGL_SAMPLES, 0, + EGL_SAMPLE_BUFFERS, 0, +// EGL_STENCIL_SIZE, 0, + EGL_SURFACE_TYPE, EGL_WINDOW_BIT, + EGL_TRANSPARENT_TYPE, EGL_NONE, + EGL_NONE + }; + EGLint contextAttrs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, // NOTE: not needed for VG + EGL_NONE + }; + + // EGL_RENDER_BUFFER, EGL_BACK_BUFFER, +// m_eglWindowAttrs.append(EGL_RENDER_BUFFER); +// m_eglWindowAttrs.append(EGL_BACK_BUFFER); + m_eglWindowAttrs.append(EGL_NONE); + + EGLenum eglApi = EGL_OPENGL_ES_API; + eglBindAPI(eglApi); + + QList screens = QApplicationPrivate::platformIntegration()->screens(); + //XXXX: jl figure out how to pick the correct screen. +// Q_ASSERT(screens.size() > tlw->d_func()->screenNumber); +// QOpenKODEScreen *screen = qobject_cast(screens.at(tlw->d_func()->screenNumber)); + QOpenKODEScreen *screen = qobject_cast(screens.at(0)); + if (!screen) { + qErrnoWarning("Could not make QOpenKODEWindow without a screen"); + } + + EGLint configCount; + // Find out how many configurations suit our needs + EGLBoolean eglStatus = eglChooseConfig(screen->eglDisplay(), configAttrs, + KD_NULL, 0, &configCount); + if (!eglStatus || !configCount) { + qErrnoWarning("EGL failed to return any matching configurations"); + } + + qDebug() << "config count" << configCount; + + // Allocate room for the list of matching configurations + EGLConfig *configList = (EGLConfig*)kdMalloc(configCount * sizeof(EGLConfig)); + if (!configList) { + qErrnoWarning("kdMalloc failure obtaining configuration list"); } - kdWindow = kdCreateWindow(QEgl::display(), - QEgl::defaultConfig(QInternal::Widget,QEgl::OpenGL,QEgl::Renderable), + // Obtain the configuration list from EGL + eglStatus = eglChooseConfig(screen->eglDisplay(), configAttrs, + configList, configCount, &configCount); + if (!eglStatus || !configCount) { + qErrnoWarning("EGL failed to populate configuration list"); + } + + // Select an EGL configuration that matches the native window + + m_eglConfig = configList[11]; + kdFree(configList);//free the list not the configs + + m_kdWindow = kdCreateWindow(screen->eglDisplay(), + m_eglConfig, KD_NULL); - if (!kdWindow) { + if (!m_kdWindow) { qErrnoWarning(kdGetError(), "Error creating native window"); return; } const KDint windowSize[2] = { tlw->width(), tlw->height()-1 }; - if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { + if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { qErrnoWarning(kdGetError(), "Could not set native window size"); return; } - KDboolean visibillity(false); - if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { - qErrnoWarning(kdGetError(), "Could not set visibillity to false"); - } +// KDboolean visibillity(false); +// if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { +// qErrnoWarning(kdGetError(), "Could not set visibillity to false"); +// } // const KDboolean windowExclusive[] = { false }; // if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { @@ -81,28 +153,44 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) // } // const KDint windowPos[2] = { tlw->x(), tlw->y() }; - if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { qErrnoWarning(kdGetError(), "Could not set native window position"); return; } - if (kdRealizeWindow(kdWindow, &eglWindow)) { + if (kdRealizeWindow(m_kdWindow, &m_eglWindow)) { qErrnoWarning(kdGetError(), "Could not realize native window"); return; } + + KDint32 layer = 1; + kdGetWindowPropertyiv(m_kdWindow,KD_WINDOWPROPERTY_DESKTOP_LAYER_NV,&layer); + qDebug() << "LAYER:" << layer; + + EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); + + qDebug() << "surface id " << surface; + + m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig,contextAttrs,surface,eglApi); + m_platformGlContext->makeCurrent(); + glClearColor(0,0,0,0); + + } QOpenKODEWindow::~QOpenKODEWindow() { - qDebug() << "destroying window"; - kdDestroyWindow(kdWindow); + qDebug() << "destroying window" << m_kdWindow; +// delete m_platformGlContext; + kdDestroyWindow(m_kdWindow); } void QOpenKODEWindow::setGeometry(const QRect &rect) { + qDebug() << "setting geo"; const QRect geo = geometry(); if (geo.size() != rect.size()) { const KDint windowSize[2] = { rect.width(), rect.height() }; - if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { + if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { qErrnoWarning(kdGetError(), "Could not set native window size"); //return; } @@ -110,18 +198,50 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) if (geo.topLeft() != rect.topLeft()) { const KDint windowPos[2] = { rect.x(), rect.y() }; - if (kdSetWindowPropertyiv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { qErrnoWarning(kdGetError(), "Could not set native window position"); //return; } } + delete m_platformGlContext; + + QList screens = QApplicationPrivate::platformIntegration()->screens(); + //XXXX: jl figure out how to pick the correct screen. +// Q_ASSERT(screens.size() > tlw->d_func()->screenNumber); +// QOpenKODEScreen *screen = qobject_cast(screens.at(tlw->d_func()->screenNumber)); + QOpenKODEScreen *screen = qobject_cast(screens.at(0)); + +// if (kdRealizeWindow(m_kdWindow, &m_eglWindow)) { +// qErrnoWarning(kdGetError(), "Could not realize native window in geo"); +// return; +// } + + EGLint contextAttrs[] = { + EGL_CONTEXT_CLIENT_VERSION, 2, // NOTE: not needed for VG + EGL_NONE + }; + + EGLenum eglApi = EGL_OPENGL_ES_API; + + EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); + + qDebug() << "surface id " << surface; + + m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig,contextAttrs,surface,eglApi); + m_platformGlContext->makeCurrent(); + glClearColor(0,0,0,1); } void QOpenKODEWindow::setVisible(bool visible) { KDboolean visibillity(visible); - if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { + if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { qErrnoWarning(kdGetError(), "Could not set visibillity to false"); } } + +QPlatformGLContext *QOpenKODEWindow::glContext() +{ + return m_platformGlContext; +} diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index 741e676..04fa70a 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -43,9 +43,12 @@ #define QOPENKODEWINDOW_H #include +#include #include +class QEGLPlatformContext; + class QOpenKODEWindow : public QPlatformWindow { public: @@ -54,11 +57,16 @@ public: void setGeometry(const QRect &rect); void setVisible(bool visible); - WId winId() const { return WId(eglWindow); } + WId winId() const { return WId(m_eglWindow); } + + QPlatformGLContext *glContext(); private: - struct KDWindow *kdWindow; - EGLNativeWindowType eglWindow; + struct KDWindow *m_kdWindow; + EGLNativeWindowType m_eglWindow; + EGLConfig m_eglConfig; + QVector m_eglWindowAttrs; + QEGLPlatformContext *m_platformGlContext; }; #endif //QOPENKODEWINDOW_H diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp index dacd019..a349031 100644 --- a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp @@ -45,21 +45,14 @@ #include "qopenkodewindow.h" #include +#include QT_BEGIN_NAMESPACE QOpenKODEWindowSurface::QOpenKODEWindowSurface - (QWidget *window, WId winId) - : QWindowSurface(window), - mSurface(EGL_NO_SURFACE), - mWin((EGLNativeWindowType) winId) + (QWidget *window, WId) + : QWindowSurface(window), m_platformGLContext(window->platformWindow()->glContext()) { - EGLConfig config = QEgl::defaultConfig(QInternal::Widget,QEgl::OpenGL,QEgl::Renderable); - mContext.setConfig(config); - if (!mContext.createContext()) { - qWarning("QOpenKODEWindowSurface: Unable to create context"); - return; - } } QOpenKODEWindowSurface::~QOpenKODEWindowSurface() @@ -72,19 +65,16 @@ QPaintDevice *QOpenKODEWindowSurface::paintDevice() } // ### TODO - this updates the entire toplevel, should only update the region -void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoint &offset) +void QOpenKODEWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) { - mContext.makeCurrent(mSurface); + m_platformGLContext->makeCurrent(); if (!offset.isNull()) { qWarning("Offset flushing not supported yet"); return; } - if (!mContext.makeCurrent(mSurface)) { - qWarning("EGL couldn't make context/surface current: 0x%x", eglGetError()); - return; - } + m_platformGLContext->makeCurrent(); QRect boundingRect = region.boundingRect(); @@ -103,7 +93,7 @@ void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoin y = boundingRect.y(); } -// qDebug() << "flush" << widget << offset << region.boundingRect() << mImage.format() << blitImage.format(); + qDebug() << "flush" << widget << offset << region.boundingRect() << mImage.format() << blitImage.format(); GLuint shaderProgram = QOpenKODEIntegration::blitterProgram(); @@ -159,8 +149,8 @@ void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoin eglWaitGL(); - mContext.swapBuffers(mSurface); - mContext.doneCurrent(); + m_platformGLContext->swapBuffers(); + m_platformGLContext->doneCurrent(); eglWaitNative(EGL_CORE_NATIVE_ENGINE); } @@ -168,21 +158,14 @@ void QOpenKODEWindowSurface::flush(QWidget *, const QRegion ®ion, const QPoin void QOpenKODEWindowSurface::resize(const QSize &size) { QWindowSurface::resize(size); - mContext.destroySurface(mSurface); - mSurface = EGL_NO_SURFACE; mImage = QImage(); } void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) { Q_UNUSED(region); - if (mSurface == EGL_NO_SURFACE) { - EGLConfig config = QEgl::defaultConfig(QInternal::Widget,QEgl::OpenGL,QEgl::Renderable); - EGLint windowAttrs[] = { EGL_NONE }; - mSurface = eglCreateWindowSurface(QEgl::display(), config, mWin, windowAttrs); - if (mSurface == EGL_NO_SURFACE) { - qWarning("QEglContext::createSurface(): Unable to create EGL surface, error = 0x%x", eglGetError()); - } + if (mImage.isNull()) { + m_platformGLContext = window()->platformWindow()->glContext(); mImage = QImage(size(),QImage::Format_RGB32); } } diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.h b/src/plugins/platforms/openkode/qopenkodewindowsurface.h index 568dbc2..4acd1d8 100644 --- a/src/plugins/platforms/openkode/qopenkodewindowsurface.h +++ b/src/plugins/platforms/openkode/qopenkodewindowsurface.h @@ -43,11 +43,13 @@ #define QWINDOWSURFACE_OPENKODE_H #include -#include + +#include QT_BEGIN_NAMESPACE class QOpenKODEWindow; +class QPlatformGLContext; class QOpenKODEWindowSurface : public QWindowSurface { @@ -65,9 +67,7 @@ public: private: QImage mImage; - EGLSurface mSurface; - QEglContext mContext; - EGLNativeWindowType mWin; + QPlatformGLContext *m_platformGLContext; }; QT_END_NAMESPACE -- cgit v0.12 From 2b384a4df14fab0f377b04df24b67ee7634f8403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 8 Jul 2010 08:28:35 +0200 Subject: Make tempcontext use new lighthouse api --- src/opengl/qgl_qpa.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 2003cc1..be2ef87 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -180,14 +180,16 @@ void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase) class QGLTemporaryContextPrivate { public: - QGLWidget *widget; + QWidget *widget; }; QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) : d(new QGLTemporaryContextPrivate) { - d->widget = new QGLWidget; - d->widget->makeCurrent(); + d->widget = new QWidget; + d->widget->setGeometry(0,0,3,3); + d->widget->winId(); + d->widget->platformWindow()->glContext()->makeCurrent(); } QGLTemporaryContext::~QGLTemporaryContext() -- cgit v0.12 From 13e75dd03d2fb8a1f01406c30520cef80cb2800a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 8 Jul 2010 10:19:01 +0200 Subject: Fix deletion of QPlatformGLContext it is owned by the QPlatformWindow, and should thus be delted by it, even for QGLContext --- src/opengl/qgl_qpa.cpp | 2 +- src/plugins/platforms/openkode/qopenkodewindow.cpp | 36 ++++++---------------- 2 files changed, 10 insertions(+), 28 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index be2ef87..aa124fe 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -84,7 +84,7 @@ void QGLContext::reset() doneCurrent(); if (d->platformContext) { - delete d->platformContext; + //dont delete. This will be done by the platform d->platformContext = 0; } diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 88e6a75..e40783f 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -82,7 +82,6 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) EGL_NONE }; - // EGL_RENDER_BUFFER, EGL_BACK_BUFFER, // m_eglWindowAttrs.append(EGL_RENDER_BUFFER); // m_eglWindowAttrs.append(EGL_BACK_BUFFER); m_eglWindowAttrs.append(EGL_NONE); @@ -141,17 +140,11 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) return; } -// KDboolean visibillity(false); -// if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { -// qErrnoWarning(kdGetError(), "Could not set visibillity to false"); -// } - -// const KDboolean windowExclusive[] = { false }; -// if (kdSetWindowPropertybv(kdWindow, KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, windowExclusive)) { -// qErrnoWarning(kdGetError(), "Could not set exclusive bit"); -// //return; -// } -// + KDboolean visibillity(false); + if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { + qErrnoWarning(kdGetError(), "Could not set visibillity to false"); + } + const KDint windowPos[2] = { tlw->x(), tlw->y() }; if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { qErrnoWarning(kdGetError(), "Could not set native window position"); @@ -169,19 +162,13 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); - qDebug() << "surface id " << surface; - m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig,contextAttrs,surface,eglApi); - m_platformGlContext->makeCurrent(); - glClearColor(0,0,0,0); - - } QOpenKODEWindow::~QOpenKODEWindow() { qDebug() << "destroying window" << m_kdWindow; -// delete m_platformGlContext; + delete m_platformGlContext; kdDestroyWindow(m_kdWindow); } void QOpenKODEWindow::setGeometry(const QRect &rect) @@ -189,7 +176,7 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) qDebug() << "setting geo"; const QRect geo = geometry(); if (geo.size() != rect.size()) { - const KDint windowSize[2] = { rect.width(), rect.height() }; + const KDint windowSize[2] = { rect.width(), rect.height() -1 }; if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { qErrnoWarning(kdGetError(), "Could not set native window size"); //return; @@ -206,17 +193,13 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) delete m_platformGlContext; + /********####neeeds cleaning up **********/ QList screens = QApplicationPrivate::platformIntegration()->screens(); //XXXX: jl figure out how to pick the correct screen. // Q_ASSERT(screens.size() > tlw->d_func()->screenNumber); // QOpenKODEScreen *screen = qobject_cast(screens.at(tlw->d_func()->screenNumber)); QOpenKODEScreen *screen = qobject_cast(screens.at(0)); -// if (kdRealizeWindow(m_kdWindow, &m_eglWindow)) { -// qErrnoWarning(kdGetError(), "Could not realize native window in geo"); -// return; -// } - EGLint contextAttrs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, // NOTE: not needed for VG EGL_NONE @@ -229,8 +212,7 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) qDebug() << "surface id " << surface; m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig,contextAttrs,surface,eglApi); - m_platformGlContext->makeCurrent(); - glClearColor(0,0,0,1); + /*******************************************/ } void QOpenKODEWindow::setVisible(bool visible) -- cgit v0.12 From c7590d9f255e1efd3dc528e1052f997f4f477009 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 8 Jul 2010 11:08:49 +0200 Subject: cleaning up QOpenKODEWindow --- src/plugins/platforms/openkode/qopenkodewindow.cpp | 35 +++++++--------------- src/plugins/platforms/openkode/qopenkodewindow.h | 2 ++ 2 files changed, 13 insertions(+), 24 deletions(-) diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index e40783f..52117ad 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -77,17 +77,17 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) EGL_TRANSPARENT_TYPE, EGL_NONE, EGL_NONE }; - EGLint contextAttrs[] = { - EGL_CONTEXT_CLIENT_VERSION, 2, // NOTE: not needed for VG - EGL_NONE - }; + + m_eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); + m_eglContextAttrs.append(2); + m_eglContextAttrs.append(EGL_NONE); // m_eglWindowAttrs.append(EGL_RENDER_BUFFER); // m_eglWindowAttrs.append(EGL_BACK_BUFFER); m_eglWindowAttrs.append(EGL_NONE); - EGLenum eglApi = EGL_OPENGL_ES_API; - eglBindAPI(eglApi); + m_eglApi = EGL_OPENGL_ES_API; + eglBindAPI(m_eglApi); QList screens = QApplicationPrivate::platformIntegration()->screens(); //XXXX: jl figure out how to pick the correct screen. @@ -162,7 +162,8 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); - m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig,contextAttrs,surface,eglApi); + m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(), m_eglConfig, + m_eglContextAttrs.data(), surface, m_eglApi); } QOpenKODEWindow::~QOpenKODEWindow() @@ -191,28 +192,14 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) } } + //need to recreate context delete m_platformGlContext; - /********####neeeds cleaning up **********/ QList screens = QApplicationPrivate::platformIntegration()->screens(); - //XXXX: jl figure out how to pick the correct screen. -// Q_ASSERT(screens.size() > tlw->d_func()->screenNumber); -// QOpenKODEScreen *screen = qobject_cast(screens.at(tlw->d_func()->screenNumber)); QOpenKODEScreen *screen = qobject_cast(screens.at(0)); - - EGLint contextAttrs[] = { - EGL_CONTEXT_CLIENT_VERSION, 2, // NOTE: not needed for VG - EGL_NONE - }; - - EGLenum eglApi = EGL_OPENGL_ES_API; - EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); - - qDebug() << "surface id " << surface; - - m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig,contextAttrs,surface,eglApi); - /*******************************************/ + m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig, + m_eglContextAttrs.data(),surface,m_eglApi); } void QOpenKODEWindow::setVisible(bool visible) diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index 04fa70a..51252a9 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -66,6 +66,8 @@ private: EGLNativeWindowType m_eglWindow; EGLConfig m_eglConfig; QVector m_eglWindowAttrs; + QVector m_eglContextAttrs; + EGLenum m_eglApi; QEGLPlatformContext *m_platformGlContext; }; -- cgit v0.12 From e7054204ff74bde531d293de5b360587724f6857 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 9 Jul 2010 16:04:46 +0200 Subject: Added QPlatformWindowFormat Its mostly a copy of QGLFormat Only plugin that uses it is the openkode, and thats just a poc. --- src/gui/kernel/kernel.pri | 6 +- src/gui/kernel/qplatformwindow_qpa.cpp | 41 + src/gui/kernel/qplatformwindow_qpa.h | 2 + src/gui/kernel/qplatformwindowformat_qpa.cpp | 1283 ++++++++++++++++++++ src/gui/kernel/qplatformwindowformat_qpa.h | 256 ++++ src/gui/kernel/qwidget.cpp | 37 +- src/gui/kernel/qwidget.h | 8 + src/gui/kernel/qwidget_p.h | 1 + src/gui/kernel/qwidget_qpa.cpp | 52 + .../platforms/openkode/qopenkodeintegration.cpp | 8 +- src/plugins/platforms/openkode/qopenkodewindow.cpp | 290 ++++- 11 files changed, 1891 insertions(+), 93 deletions(-) create mode 100644 src/gui/kernel/qplatformwindowformat_qpa.cpp create mode 100644 src/gui/kernel/qplatformwindowformat_qpa.h diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index f773906..e9b8f25 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -214,9 +214,10 @@ qpa { kernel/qplatformintegrationfactory_qpa_p.h \ kernel/qplatformintegrationplugin_qpa.h \ kernel/qplatformwindow_qpa.h \ + kernel/qplatformwindowformat_qpa.h \ kernel/qplatformglcontext_qpa.h \ kernel/qdesktopwidget_qpa_p.h - + SOURCES += \ kernel/qapplication_qpa.cpp \ kernel/qclipboard_qpa.cpp \ @@ -233,7 +234,8 @@ qpa { kernel/qplatformscreen_qpa.cpp \ kernel/qplatformintegrationfactory_qpa.cpp \ kernel/qplatformintegrationplugin_qpa.cpp \ - kernel/qplatformwindow_qpa.cpp + kernel/qplatformwindow_qpa.cpp \ + kernel/qplatformwindowformat_qpa.cpp contains(QT_CONFIG, glib) { SOURCES += \ diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp index c0e642c..4cd8ead 100644 --- a/src/gui/kernel/qplatformwindow_qpa.cpp +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qplatformwindow_qpa.h" #include diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h index 5f8d259..e8b5ad8 100644 --- a/src/gui/kernel/qplatformwindow_qpa.h +++ b/src/gui/kernel/qplatformwindow_qpa.h @@ -82,6 +82,8 @@ public: virtual QPlatformGLContext *glContext(); protected: QScopedPointer d_ptr; +private: + Q_DISABLE_COPY(QPlatformWindow); }; QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformwindowformat_qpa.cpp b/src/gui/kernel/qplatformwindowformat_qpa.cpp new file mode 100644 index 0000000..4ded26b --- /dev/null +++ b/src/gui/kernel/qplatformwindowformat_qpa.cpp @@ -0,0 +1,1283 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformwindowformat_qpa.h" + +Q_GLOBAL_STATIC(QPlatformWindowFormat, q_platformwindow_default_format); + +class QPlatformWindowFormatPrivate +{ +public: + QPlatformWindowFormatPrivate() + : ref(1) + , opts(QPlatformWindowFormat::DoubleBuffer | QPlatformWindowFormat::DepthBuffer + | QPlatformWindowFormat::Rgba | QPlatformWindowFormat::DirectRendering + | QPlatformWindowFormat::StencilBuffer | QPlatformWindowFormat::DeprecatedFunctions) + , depthSize(-1) + , accumSize(-1) + , stencilSize(-1) + , redSize(-1) + , greenSize(-1) + , blueSize(-1) + , alphaSize(-1) + , numSamples(-1) + , swapInterval(-1) + , majorVersion(1) + , minorVersion(0) + , profile(QPlatformWindowFormat::NoProfile) + { + } + + QPlatformWindowFormatPrivate(const QPlatformWindowFormatPrivate *other) + : ref(1), + opts(other->opts), + depthSize(other->depthSize), + accumSize(other->accumSize), + stencilSize(other->stencilSize), + redSize(other->redSize), + greenSize(other->greenSize), + blueSize(other->blueSize), + alphaSize(other->alphaSize), + numSamples(other->numSamples), + swapInterval(other->swapInterval), + majorVersion(other->majorVersion), + minorVersion(other->minorVersion), + profile(other->profile) + { + } + QAtomicInt ref; + QPlatformWindowFormat::FormatOptions opts; + int depthSize; + int accumSize; + int stencilSize; + int redSize; + int greenSize; + int blueSize; + int alphaSize; + int numSamples; + int swapInterval; + int majorVersion; + int minorVersion; + QPlatformWindowFormat::OpenGLContextProfile profile; +}; + +/*! + \class QGLFormat + \brief The QGLFormat class specifies the display format of an OpenGL + rendering context. + + \ingroup painting-3D + + A display format has several characteristics: + \list + \i \link setDoubleBuffer() Double or single buffering.\endlink + \i \link setDepth() Depth buffer.\endlink + \i \link setRgba() RGBA or color index mode.\endlink + \i \link setAlpha() Alpha channel.\endlink + \i \link setAccum() Accumulation buffer.\endlink + \i \link setStencil() Stencil buffer.\endlink + \i \link setStereo() Stereo buffers.\endlink + \i \link setDirectRendering() Direct rendering.\endlink + \i \link setOverlay() Presence of an overlay.\endlink + \i \link setPlane() Plane of an overlay.\endlink + \i \link setSampleBuffers() Multisample buffers.\endlink + \endlist + + You can also specify preferred bit depths for the color buffer, + depth buffer, alpha buffer, accumulation buffer and the stencil + buffer with the functions: setRedBufferSize(), setGreenBufferSize(), + setBlueBufferSize(), setDepthBufferSize(), setAlphaBufferSize(), + setAccumBufferSize() and setStencilBufferSize(). + + Note that even if you specify that you prefer a 32 bit depth + buffer (e.g. with setDepthBufferSize(32)), the format that is + chosen may not have a 32 bit depth buffer, even if there is a + format available with a 32 bit depth buffer. The main reason for + this is how the system dependant picking algorithms work on the + different platforms, and some format options may have higher + precedence than others. + + You create and tell a QGLFormat object what rendering options you + want from an OpenGL rendering context. + + OpenGL drivers or accelerated hardware may or may not support + advanced features such as alpha channel or stereographic viewing. + If you request some features that the driver/hardware does not + provide when you create a QGLWidget, you will get a rendering + context with the nearest subset of features. + + There are different ways to define the display characteristics of + a rendering context. One is to create a QGLFormat and make it the + default for the entire application: + \snippet doc/src/snippets/code/src_opengl_qgl.cpp 0 + + Or you can specify the desired format when creating an object of + your QGLWidget subclass: + \snippet doc/src/snippets/code/src_opengl_qgl.cpp 1 + + After the widget has been created, you can find out which of the + requested features the system was able to provide: + \snippet doc/src/snippets/code/src_opengl_qgl.cpp 2 + + \legalese + OpenGL is a trademark of Silicon Graphics, Inc. in the + United States and other countries. + \endlegalese + + \sa QGLContext, QGLWidget +*/ + +/*! + Constructs a QGLFormat object with the following default settings: + \list + \i \link setDoubleBuffer() Double buffer:\endlink Enabled. + \i \link setDepth() Depth buffer:\endlink Enabled. + \i \link setRgba() RGBA:\endlink Enabled (i.e., color index disabled). + \i \link setAlpha() Alpha channel:\endlink Disabled. + \i \link setAccum() Accumulator buffer:\endlink Disabled. + \i \link setStencil() Stencil buffer:\endlink Enabled. + \i \link setStereo() Stereo:\endlink Disabled. + \i \link setDirectRendering() Direct rendering:\endlink Enabled. + \i \link setOverlay() Overlay:\endlink Disabled. + \i \link setPlane() Plane:\endlink 0 (i.e., normal plane). + \i \link setSampleBuffers() Multisample buffers:\endlink Disabled. + \endlist +*/ + +QPlatformWindowFormat::QPlatformWindowFormat() +{ + d = new QPlatformWindowFormatPrivate; +} + + +/*! + Creates a QGLFormat object that is a copy of the current + defaultFormat(). + + If \a options is not 0, the default format is modified by the + specified format options. The \a options parameter should be + QGL::FormatOption values OR'ed together. + + This constructor makes it easy to specify a certain desired format + in classes derived from QGLWidget, for example: + \snippet doc/src/snippets/code/src_opengl_qgl.cpp 3 + + Note that there are QGL::FormatOption values to turn format settings + both on and off, e.g. QGL::DepthBuffer and QGL::NoDepthBuffer, + QGL::DirectRendering and QGL::IndirectRendering, etc. + + The \a plane parameter defaults to 0 and is the plane which this + format should be associated with. Not all OpenGL implementations + supports overlay/underlay rendering planes. + + \sa defaultFormat(), setOption(), setPlane() +*/ + +QPlatformWindowFormat::QPlatformWindowFormat(QPlatformWindowFormat::FormatOptions options) +{ + d = new QPlatformWindowFormatPrivate; + QPlatformWindowFormat::FormatOptions newOpts = options; + d->opts = defaultFormat().d->opts; + d->opts |= (newOpts & 0xffff); + d->opts &= ~(newOpts >> 16); +} + +/*! + \internal +*/ +void QPlatformWindowFormat::detach() +{ + if (d->ref != 1) { + QPlatformWindowFormatPrivate *newd = new QPlatformWindowFormatPrivate(d); + if (!d->ref.deref()) + delete d; + d = newd; + } +} + +/*! + Constructs a copy of \a other. +*/ + +QPlatformWindowFormat::QPlatformWindowFormat(const QPlatformWindowFormat &other) +{ + d = other.d; + d->ref.ref(); +} + +/*! + Assigns \a other to this object. +*/ + +QPlatformWindowFormat &QPlatformWindowFormat::operator=(const QPlatformWindowFormat &other) +{ + if (d != other.d) { + other.d->ref.ref(); + if (!d->ref.deref()) + delete d; + d = other.d; + } + return *this; +} + +/*! + Destroys the QGLFormat. +*/ +QPlatformWindowFormat::~QPlatformWindowFormat() +{ + if (!d->ref.deref()) + delete d; +} + +/*! + \fn bool QGLFormat::doubleBuffer() const + + Returns true if double buffering is enabled; otherwise returns + false. Double buffering is enabled by default. + + \sa setDoubleBuffer() +*/ + +/*! + If \a enable is true sets double buffering; otherwise sets single + buffering. + + Double buffering is enabled by default. + + Double buffering is a technique where graphics are rendered on an + off-screen buffer and not directly to the screen. When the drawing + has been completed, the program calls a swapBuffers() function to + exchange the screen contents with the buffer. The result is + flicker-free drawing and often better performance. + + \sa doubleBuffer(), QGLContext::swapBuffers(), + QGLWidget::swapBuffers() +*/ + +void QPlatformWindowFormat::setDoubleBuffer(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::DoubleBuffer : QPlatformWindowFormat::SingleBuffer); +} + + +/*! + \fn bool QGLFormat::depth() const + + Returns true if the depth buffer is enabled; otherwise returns + false. The depth buffer is enabled by default. + + \sa setDepth(), setDepthBufferSize() +*/ + +/*! + If \a enable is true enables the depth buffer; otherwise disables + the depth buffer. + + The depth buffer is enabled by default. + + The purpose of a depth buffer (or Z-buffering) is to remove hidden + surfaces. Pixels are assigned Z values based on the distance to + the viewer. A pixel with a high Z value is closer to the viewer + than a pixel with a low Z value. This information is used to + decide whether to draw a pixel or not. + + \sa depth(), setDepthBufferSize() +*/ + +void QPlatformWindowFormat::setDepth(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::DepthBuffer : QPlatformWindowFormat::NoDepthBuffer); +} + + +/*! + \fn bool QGLFormat::rgba() const + + Returns true if RGBA color mode is set. Returns false if color + index mode is set. The default color mode is RGBA. + + \sa setRgba() +*/ + +/*! + If \a enable is true sets RGBA mode. If \a enable is false sets + color index mode. + + The default color mode is RGBA. + + RGBA is the preferred mode for most OpenGL applications. In RGBA + color mode you specify colors as red + green + blue + alpha + quadruplets. + + In color index mode you specify an index into a color lookup + table. + + \sa rgba() +*/ + +void QPlatformWindowFormat::setRgba(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::Rgba : QPlatformWindowFormat::ColorIndex); +} + + +/*! + \fn bool QGLFormat::alpha() const + + Returns true if the alpha buffer in the framebuffer is enabled; + otherwise returns false. The alpha buffer is disabled by default. + + \sa setAlpha(), setAlphaBufferSize() +*/ + +/*! + If \a enable is true enables the alpha buffer; otherwise disables + the alpha buffer. + + The alpha buffer is disabled by default. + + The alpha buffer is typically used for implementing transparency + or translucency. The A in RGBA specifies the transparency of a + pixel. + + \sa alpha(), setAlphaBufferSize() +*/ + +void QPlatformWindowFormat::setAlpha(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::AlphaChannel : QPlatformWindowFormat::NoAlphaChannel); +} + + +/*! + \fn bool QGLFormat::accum() const + + Returns true if the accumulation buffer is enabled; otherwise + returns false. The accumulation buffer is disabled by default. + + \sa setAccum(), setAccumBufferSize() +*/ + +/*! + If \a enable is true enables the accumulation buffer; otherwise + disables the accumulation buffer. + + The accumulation buffer is disabled by default. + + The accumulation buffer is used to create blur effects and + multiple exposures. + + \sa accum(), setAccumBufferSize() +*/ + +void QPlatformWindowFormat::setAccum(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::AccumBuffer : QPlatformWindowFormat::NoAccumBuffer); +} + + +/*! + \fn bool QGLFormat::stencil() const + + Returns true if the stencil buffer is enabled; otherwise returns + false. The stencil buffer is enabled by default. + + \sa setStencil(), setStencilBufferSize() +*/ + +/*! + If \a enable is true enables the stencil buffer; otherwise + disables the stencil buffer. + + The stencil buffer is enabled by default. + + The stencil buffer masks certain parts of the drawing area so that + masked parts are not drawn on. + + \sa stencil(), setStencilBufferSize() +*/ + +void QPlatformWindowFormat::setStencil(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::StencilBuffer: QPlatformWindowFormat::NoStencilBuffer); +} + + +/*! + \fn bool QGLFormat::stereo() const + + Returns true if stereo buffering is enabled; otherwise returns + false. Stereo buffering is disabled by default. + + \sa setStereo() +*/ + +/*! + If \a enable is true enables stereo buffering; otherwise disables + stereo buffering. + + Stereo buffering is disabled by default. + + Stereo buffering provides extra color buffers to generate left-eye + and right-eye images. + + \sa stereo() +*/ + +void QPlatformWindowFormat::setStereo(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::StereoBuffers : QPlatformWindowFormat::NoStereoBuffers); +} + + +/*! + \fn bool QGLFormat::directRendering() const + + Returns true if direct rendering is enabled; otherwise returns + false. + + Direct rendering is enabled by default. + + \sa setDirectRendering() +*/ + +/*! + If \a enable is true enables direct rendering; otherwise disables + direct rendering. + + Direct rendering is enabled by default. + + Enabling this option will make OpenGL bypass the underlying window + system and render directly from hardware to the screen, if this is + supported by the system. + + \sa directRendering() +*/ + +void QPlatformWindowFormat::setDirectRendering(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::DirectRendering : QPlatformWindowFormat::IndirectRendering); +} + +/*! + \fn bool QGLFormat::sampleBuffers() const + + Returns true if multisample buffer support is enabled; otherwise + returns false. + + The multisample buffer is disabled by default. + + \sa setSampleBuffers() +*/ + +/*! + If \a enable is true, a GL context with multisample buffer support + is picked; otherwise ignored. + + \sa sampleBuffers(), setSamples(), samples() +*/ +void QPlatformWindowFormat::setSampleBuffers(bool enable) +{ + setOption(enable ? QPlatformWindowFormat::SampleBuffers : QPlatformWindowFormat::NoSampleBuffers); +} + +/*! + Returns the number of samples per pixel when multisampling is + enabled. By default, the highest number of samples that is + available is used. + + \sa setSampleBuffers(), sampleBuffers(), setSamples() +*/ +int QPlatformWindowFormat::samples() const +{ + return d->numSamples; +} + +/*! + Set the preferred number of samples per pixel when multisampling + is enabled to \a numSamples. By default, the highest number of + samples available is used. + + \sa setSampleBuffers(), sampleBuffers(), samples() +*/ +void QPlatformWindowFormat::setSamples(int numSamples) +{ + detach(); + if (numSamples < 0) { + qWarning("QGLFormat::setSamples: Cannot have negative number of samples per pixel %d", numSamples); + return; + } + d->numSamples = numSamples; + setSampleBuffers(numSamples > 0); +} + +/*! + \since 4.2 + + Set the preferred swap interval. This can be used to sync the GL + drawing into a system window to the vertical refresh of the screen. + Setting an \a interval value of 0 will turn the vertical refresh syncing + off, any value higher than 0 will turn the vertical syncing on. + + Under Windows and under X11, where the \c{WGL_EXT_swap_control} + and \c{GLX_SGI_video_sync} extensions are used, the \a interval + parameter can be used to set the minimum number of video frames + that are displayed before a buffer swap will occur. In effect, + setting the \a interval to 10, means there will be 10 vertical + retraces between every buffer swap. + + Under Windows the \c{WGL_EXT_swap_control} extension has to be present, + and under X11 the \c{GLX_SGI_video_sync} extension has to be present. +*/ +void QPlatformWindowFormat::setSwapInterval(int interval) +{ + detach(); + d->swapInterval = interval; +} + +/*! + \since 4.2 + + Returns the currently set swap interval. -1 is returned if setting + the swap interval isn't supported in the system GL implementation. +*/ +int QPlatformWindowFormat::swapInterval() const +{ + return d->swapInterval; +} + +///*! +// \fn bool QGLFormat::hasOverlay() const + +// Returns true if overlay plane is enabled; otherwise returns false. + +// Overlay is disabled by default. + +// \sa setOverlay() +//*/ + +///*! +// If \a enable is true enables an overlay plane; otherwise disables +// the overlay plane. + +// Enabling the overlay plane will cause QGLWidget to create an +// additional context in an overlay plane. See the QGLWidget +// documentation for further information. + +// \sa hasOverlay() +//*/ + +//void QPlatformWindowFormat::setOverlay(bool enable) +//{ +// setOption(enable ? QPlatformWindowFormat::HasOverlay : QPlatformWindowFormat::NoOverlay); +//} + +/*! + Sets the format option to \a opt. + + \sa testOption() +*/ + +void QPlatformWindowFormat::setOption(QPlatformWindowFormat::FormatOptions opt) +{ + detach(); + if (opt & 0xffff) + d->opts |= opt; + else + d->opts &= ~(opt >> 16); +} + + + +/*! + Returns true if format option \a opt is set; otherwise returns false. + + \sa setOption() +*/ + +bool QPlatformWindowFormat::testOption(QPlatformWindowFormat::FormatOptions opt) const +{ + if (opt & 0xffff) + return (d->opts & opt) != 0; + else + return (d->opts & (opt >> 16)) == 0; +} + +/*! + Set the minimum depth buffer size to \a size. + + \sa depthBufferSize(), setDepth(), depth() +*/ +void QPlatformWindowFormat::setDepthBufferSize(int size) +{ + detach(); + if (size < 0) { + qWarning("QGLFormat::setDepthBufferSize: Cannot set negative depth buffer size %d", size); + return; + } + d->depthSize = size; + setDepth(size > 0); +} + +/*! + Returns the depth buffer size. + + \sa depth(), setDepth(), setDepthBufferSize() +*/ +int QPlatformWindowFormat::depthBufferSize() const +{ + return d->depthSize; +} + +/*! + \since 4.2 + + Set the preferred red buffer size to \a size. + + \sa setGreenBufferSize(), setBlueBufferSize(), setAlphaBufferSize() +*/ +void QPlatformWindowFormat::setRedBufferSize(int size) +{ + detach(); + if (size < 0) { + qWarning("QGLFormat::setRedBufferSize: Cannot set negative red buffer size %d", size); + return; + } + d->redSize = size; +} + +/*! + \since 4.2 + + Returns the red buffer size. + + \sa setRedBufferSize() +*/ +int QPlatformWindowFormat::redBufferSize() const +{ + return d->redSize; +} + +/*! + \since 4.2 + + Set the preferred green buffer size to \a size. + + \sa setRedBufferSize(), setBlueBufferSize(), setAlphaBufferSize() +*/ +void QPlatformWindowFormat::setGreenBufferSize(int size) +{ + detach(); + if (size < 0) { + qWarning("QGLFormat::setGreenBufferSize: Cannot set negative green buffer size %d", size); + return; + } + d->greenSize = size; +} + +/*! + \since 4.2 + + Returns the green buffer size. + + \sa setGreenBufferSize() +*/ +int QPlatformWindowFormat::greenBufferSize() const +{ + return d->greenSize; +} + +/*! + \since 4.2 + + Set the preferred blue buffer size to \a size. + + \sa setRedBufferSize(), setGreenBufferSize(), setAlphaBufferSize() +*/ +void QPlatformWindowFormat::setBlueBufferSize(int size) +{ + detach(); + if (size < 0) { + qWarning("QGLFormat::setBlueBufferSize: Cannot set negative blue buffer size %d", size); + return; + } + d->blueSize = size; +} + +/*! + \since 4.2 + + Returns the blue buffer size. + + \sa setBlueBufferSize() +*/ +int QPlatformWindowFormat::blueBufferSize() const +{ + return d->blueSize; +} + +/*! + Set the preferred alpha buffer size to \a size. + This function implicitly enables the alpha channel. + + \sa setRedBufferSize(), setGreenBufferSize(), alphaBufferSize() +*/ +void QPlatformWindowFormat::setAlphaBufferSize(int size) +{ + detach(); + if (size < 0) { + qWarning("QGLFormat::setAlphaBufferSize: Cannot set negative alpha buffer size %d", size); + return; + } + d->alphaSize = size; + setAlpha(size > 0); +} + +/*! + Returns the alpha buffer size. + + \sa alpha(), setAlpha(), setAlphaBufferSize() +*/ +int QPlatformWindowFormat::alphaBufferSize() const +{ + return d->alphaSize; +} + +/*! + Set the preferred accumulation buffer size, where \a size is the + bit depth for each RGBA component. + + \sa accum(), setAccum(), accumBufferSize() +*/ +void QPlatformWindowFormat::setAccumBufferSize(int size) +{ + detach(); + if (size < 0) { + qWarning("QGLFormat::setAccumBufferSize: Cannot set negative accumulate buffer size %d", size); + return; + } + d->accumSize = size; + setAccum(size > 0); +} + +/*! + Returns the accumulation buffer size. + + \sa setAccumBufferSize(), accum(), setAccum() +*/ +int QPlatformWindowFormat::accumBufferSize() const +{ + return d->accumSize; +} + +/*! + Set the preferred stencil buffer size to \a size. + + \sa stencilBufferSize(), setStencil(), stencil() +*/ +void QPlatformWindowFormat::setStencilBufferSize(int size) +{ + detach(); + if (size < 0) { + qWarning("QGLFormat::setStencilBufferSize: Cannot set negative stencil buffer size %d", size); + return; + } + d->stencilSize = size; + setStencil(size > 0); +} + +/*! + Returns the stencil buffer size. + + \sa stencil(), setStencil(), setStencilBufferSize() +*/ +int QPlatformWindowFormat::stencilBufferSize() const +{ + return d->stencilSize; +} + +/*! + \since 4.7 + + Set the OpenGL version to the \a major and \a minor numbers. If a + context compatible with the requested OpenGL version cannot be + created, a context compatible with version 1.x is created instead. + + \sa majorVersion(), minorVersion() +*/ +void QPlatformWindowFormat::setVersion(int major, int minor) +{ + if (major < 1 || minor < 0) { + qWarning("QGLFormat::setVersion: Cannot set zero or negative version number %d.%d", major, minor); + return; + } + detach(); + d->majorVersion = major; + d->minorVersion = minor; +} + +/*! + \since 4.7 + + Returns the OpenGL major version. + + \sa setVersion(), minorVersion() +*/ +int QPlatformWindowFormat::majorVersion() const +{ + return d->majorVersion; +} + +/*! + \since 4.7 + + Returns the OpenGL minor version. + + \sa setVersion(), majorVersion() +*/ +int QPlatformWindowFormat::minorVersion() const +{ + return d->minorVersion; +} + +/*! + \enum QGLFormat::OpenGLContextProfile + \since 4.7 + + This enum describes the OpenGL context profiles that can be + specified for contexts implementing OpenGL version 3.2 or + higher. These profiles are different from OpenGL ES profiles. + + \value NoProfile OpenGL version is lower than 3.2. + \value CoreProfile Functionality deprecated in OpenGL version 3.0 is not available. + \value CompatibilityProfile Functionality from earlier OpenGL versions is available. +*/ + +/*! + \since 4.7 + + Set the OpenGL context profile to \a profile. The \a profile is + ignored if the requested OpenGL version is less than 3.2. + + \sa profile() +*/ +void QPlatformWindowFormat::setProfile(OpenGLContextProfile profile) +{ + detach(); + d->profile = profile; +} + +/*! + \since 4.7 + + Returns the OpenGL context profile. + + \sa setProfile() +*/ +QPlatformWindowFormat::OpenGLContextProfile QPlatformWindowFormat::profile() const +{ + return d->profile; +} + + +/*! + \fn bool QGLFormat::hasOpenGL() + + Returns true if the window system has any OpenGL support; + otherwise returns false. + + \warning This function must not be called until the QApplication + object has been created. +*/ + + + +/*! + \fn bool QGLFormat::hasOpenGLOverlays() + + Returns true if the window system supports OpenGL overlays; + otherwise returns false. + + \warning This function must not be called until the QApplication + object has been created. +*/ + +QPlatformWindowFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(const QString &versionString) +{ + QPlatformWindowFormat::OpenGLVersionFlags versionFlags = QPlatformWindowFormat::OpenGL_Version_None; + + if (versionString.startsWith(QLatin1String("OpenGL ES"))) { + QStringList parts = versionString.split(QLatin1Char(' ')); + if (parts.size() >= 3) { + if (parts[2].startsWith(QLatin1String("1."))) { + if (parts[1].endsWith(QLatin1String("-CM"))) { + versionFlags |= QPlatformWindowFormat::OpenGL_ES_Common_Version_1_0 | + QPlatformWindowFormat::OpenGL_ES_CommonLite_Version_1_0; + if (parts[2].startsWith(QLatin1String("1.1"))) + versionFlags |= QPlatformWindowFormat::OpenGL_ES_Common_Version_1_1 | + QPlatformWindowFormat::OpenGL_ES_CommonLite_Version_1_1; + } else { + // Not -CM, must be CL, CommonLite + versionFlags |= QPlatformWindowFormat::OpenGL_ES_CommonLite_Version_1_0; + if (parts[2].startsWith(QLatin1String("1.1"))) + versionFlags |= QPlatformWindowFormat::OpenGL_ES_CommonLite_Version_1_1; + } + } else { + // OpenGL ES version 2.0 or higher + versionFlags |= QPlatformWindowFormat::OpenGL_ES_Version_2_0; + } + } else { + // if < 3 parts to the name, it is an unrecognised OpenGL ES + qWarning("Unrecognised OpenGL ES version"); + } + } else { + // not ES, regular OpenGL, the version numbers are first in the string + if (versionString.startsWith(QLatin1String("1."))) { + switch (versionString[2].toAscii()) { + case '5': + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_5; + case '4': + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_4; + case '3': + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_3; + case '2': + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_2; + case '1': + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1; + default: + break; + } + } else if (versionString.startsWith(QLatin1String("2."))) { + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1 | + QPlatformWindowFormat::OpenGL_Version_1_2 | + QPlatformWindowFormat::OpenGL_Version_1_3 | + QPlatformWindowFormat::OpenGL_Version_1_4 | + QPlatformWindowFormat::OpenGL_Version_1_5 | + QPlatformWindowFormat::OpenGL_Version_2_0; + if (versionString[2].toAscii() == '1') + versionFlags |= QPlatformWindowFormat::OpenGL_Version_2_1; + } else if (versionString.startsWith(QLatin1String("3."))) { + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1 | + QPlatformWindowFormat::OpenGL_Version_1_2 | + QPlatformWindowFormat::OpenGL_Version_1_3 | + QPlatformWindowFormat::OpenGL_Version_1_4 | + QPlatformWindowFormat::OpenGL_Version_1_5 | + QPlatformWindowFormat::OpenGL_Version_2_0 | + QPlatformWindowFormat::OpenGL_Version_2_1 | + QPlatformWindowFormat::OpenGL_Version_3_0; + switch (versionString[2].toAscii()) { + case '3': + versionFlags |= QPlatformWindowFormat::OpenGL_Version_3_3; + case '2': + versionFlags |= QPlatformWindowFormat::OpenGL_Version_3_2; + case '1': + versionFlags |= QPlatformWindowFormat::OpenGL_Version_3_1; + case '0': + break; + default: + versionFlags |= QPlatformWindowFormat::OpenGL_Version_3_1 | + QPlatformWindowFormat::OpenGL_Version_3_2 | + QPlatformWindowFormat::OpenGL_Version_3_3; + break; + } + } else if (versionString.startsWith(QLatin1String("4."))) { + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1 | + QPlatformWindowFormat::OpenGL_Version_1_2 | + QPlatformWindowFormat::OpenGL_Version_1_3 | + QPlatformWindowFormat::OpenGL_Version_1_4 | + QPlatformWindowFormat::OpenGL_Version_1_5 | + QPlatformWindowFormat::OpenGL_Version_2_0 | + QPlatformWindowFormat::OpenGL_Version_2_1 | + QPlatformWindowFormat::OpenGL_Version_3_0 | + QPlatformWindowFormat::OpenGL_Version_3_1 | + QPlatformWindowFormat::OpenGL_Version_3_2 | + QPlatformWindowFormat::OpenGL_Version_3_3 | + QPlatformWindowFormat::OpenGL_Version_4_0; + } else { + versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1 | + QPlatformWindowFormat::OpenGL_Version_1_2 | + QPlatformWindowFormat::OpenGL_Version_1_3 | + QPlatformWindowFormat::OpenGL_Version_1_4 | + QPlatformWindowFormat::OpenGL_Version_1_5 | + QPlatformWindowFormat::OpenGL_Version_2_0 | + QPlatformWindowFormat::OpenGL_Version_2_1 | + QPlatformWindowFormat::OpenGL_Version_3_0 | + QPlatformWindowFormat::OpenGL_Version_3_1 | + QPlatformWindowFormat::OpenGL_Version_3_2 | + QPlatformWindowFormat::OpenGL_Version_3_3 | + QPlatformWindowFormat::OpenGL_Version_4_0; + } + } + return versionFlags; +} + +/*! + \enum QGLFormat::OpenGLVersionFlag + \since 4.2 + + This enum describes the various OpenGL versions that are + recognized by Qt. Use the QGLFormat::openGLVersionFlags() function + to identify which versions that are supported at runtime. + + \value OpenGL_Version_None If no OpenGL is present or if no OpenGL context is current. + + \value OpenGL_Version_1_1 OpenGL version 1.1 or higher is present. + + \value OpenGL_Version_1_2 OpenGL version 1.2 or higher is present. + + \value OpenGL_Version_1_3 OpenGL version 1.3 or higher is present. + + \value OpenGL_Version_1_4 OpenGL version 1.4 or higher is present. + + \value OpenGL_Version_1_5 OpenGL version 1.5 or higher is present. + + \value OpenGL_Version_2_0 OpenGL version 2.0 or higher is present. + Note that version 2.0 supports all the functionality of version 1.5. + + \value OpenGL_Version_2_1 OpenGL version 2.1 or higher is present. + + \value OpenGL_Version_3_0 OpenGL version 3.0 or higher is present. + + \value OpenGL_Version_3_1 OpenGL version 3.1 or higher is present. + Note that OpenGL version 3.1 or higher does not necessarily support all the features of + version 3.0 and lower. + + \value OpenGL_Version_3_2 OpenGL version 3.2 or higher is present. + + \value OpenGL_ES_CommonLite_Version_1_0 OpenGL ES version 1.0 Common Lite or higher is present. + + \value OpenGL_ES_Common_Version_1_0 OpenGL ES version 1.0 Common or higher is present. + The Common profile supports all the features of Common Lite. + + \value OpenGL_ES_CommonLite_Version_1_1 OpenGL ES version 1.1 Common Lite or higher is present. + + \value OpenGL_ES_Common_Version_1_1 OpenGL ES version 1.1 Common or higher is present. + The Common profile supports all the features of Common Lite. + + \value OpenGL_ES_Version_2_0 OpenGL ES version 2.0 or higher is present. + Note that OpenGL ES version 2.0 does not support all the features of OpenGL ES 1.x. + So if OpenGL_ES_Version_2_0 is returned, none of the ES 1.x flags are returned. + + See also \l{http://www.opengl.org} for more information about the different + revisions of OpenGL. + + \sa openGLVersionFlags() +*/ + +/*! + \since 4.2 + + Identifies, at runtime, which OpenGL versions that are supported + by the current platform. + + Note that if OpenGL version 1.5 is supported, its predecessors + (i.e., version 1.4 and lower) are also supported. To identify the + support of a particular feature, like multi texturing, test for + the version in which the feature was first introduced (i.e., + version 1.3 in the case of multi texturing) to adapt to the largest + possible group of runtime platforms. + + This function needs a valid current OpenGL context to work; + otherwise it will return OpenGL_Version_None. + + \sa hasOpenGL(), hasOpenGLOverlays() +*/ +QPlatformWindowFormat::OpenGLVersionFlags QPlatformWindowFormat::openGLVersionFlags() +{ +// static bool cachedDefault = false; + static OpenGLVersionFlags defaultVersionFlags = OpenGL_Version_None; +// QGLContext *currentCtx = const_cast(QGLContext::currentContext()); +// QGLTemporaryContext *tmpContext = 0; + +// if (currentCtx && currentCtx->d_func()->version_flags_cached) +// return currentCtx->d_func()->version_flags; + +// if (!currentCtx) { +// if (cachedDefault) { +// return defaultVersionFlags; +// } else { +// if (!hasOpenGL()) +// return defaultVersionFlags; +// tmpContext = new QGLTemporaryContext; +// cachedDefault = true; +// } +// } + +// QString versionString(QLatin1String(reinterpret_cast(glGetString(GL_VERSION)))); +// OpenGLVersionFlags versionFlags = qOpenGLVersionFlagsFromString(versionString); +// if (currentCtx) { +// currentCtx->d_func()->version_flags_cached = true; +// currentCtx->d_func()->version_flags = versionFlags; +// } +// if (tmpContext) { +// defaultVersionFlags = versionFlags; +// delete tmpContext; +// } + +// return versionFlags; + return defaultVersionFlags; +} + + +/*! + Returns the default QGLFormat for the application. All QGLWidget + objects that are created use this format unless another format is + specified, e.g. when they are constructed. + + If no special default format has been set using + setDefaultFormat(), the default format is the same as that created + with QGLFormat(). + + \sa setDefaultFormat() +*/ + +QPlatformWindowFormat QPlatformWindowFormat::defaultFormat() +{ + return *q_platformwindow_default_format(); +} + +/*! + Sets a new default QGLFormat for the application to \a f. For + example, to set single buffering as the default instead of double + buffering, your main() might contain code like this: + \snippet doc/src/snippets/code/src_opengl_qgl.cpp 4 + + \sa defaultFormat() +*/ + +void QPlatformWindowFormat::setDefaultFormat(const QPlatformWindowFormat &f) +{ + *q_platformwindow_default_format() = f; +} + + +/*! + Returns the default QGLFormat for overlay contexts. + + The default overlay format is: + \list + \i \link setDoubleBuffer() Double buffer:\endlink Disabled. + \i \link setDepth() Depth buffer:\endlink Disabled. + \i \link setRgba() RGBA:\endlink Disabled (i.e., color index enabled). + \i \link setAlpha() Alpha channel:\endlink Disabled. + \i \link setAccum() Accumulator buffer:\endlink Disabled. + \i \link setStencil() Stencil buffer:\endlink Disabled. + \i \link setStereo() Stereo:\endlink Disabled. + \i \link setDirectRendering() Direct rendering:\endlink Enabled. + \i \link setOverlay() Overlay:\endlink Disabled. + \i \link setSampleBuffers() Multisample buffers:\endlink Disabled. + \i \link setPlane() Plane:\endlink 1 (i.e., first overlay plane). + \endlist + + \sa setDefaultFormat() +*/ + +//QPlatformWindowFormat QPlatformWindowFormat::defaultOverlayFormat() +//{ +// return *defaultOverlayFormatInstance(); +//} + +///*! +// Sets a new default QGLFormat for overlay contexts to \a f. This +// format is used whenever a QGLWidget is created with a format that +// hasOverlay() enabled. + +// For example, to get a double buffered overlay context (if +// available), use code like this: + +// \snippet doc/src/snippets/code/src_opengl_qgl.cpp 5 + +// As usual, you can find out after widget creation whether the +// underlying OpenGL system was able to provide the requested +// specification: + +// \snippet doc/src/snippets/code/src_opengl_qgl.cpp 6 + +// \sa defaultOverlayFormat() +//*/ + +//void QPlatformWindowFormat::setDefaultOverlayFormat(const QPlatformWindowFormat &f) +//{ +// QPlatformWindowFormat *defaultFormat = defaultOverlayFormatInstance(); +// *defaultFormat = f; +// // Make sure the user doesn't request that the overlays themselves +// // have overlays, since it is unlikely that the system supports +// // infinitely many planes... +// defaultFormat->setOverlay(false); +//} + + +/*! + Returns true if all the options of the two QGLFormat objects + \a a and \a b are equal; otherwise returns false. + + \relates QGLFormat +*/ + +bool operator==(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) +{ + return (a.d == b.d) || ((int) a.d->opts == (int) b.d->opts + && a.d->alphaSize == b.d->alphaSize + && a.d->accumSize == b.d->accumSize + && a.d->stencilSize == b.d->stencilSize + && a.d->depthSize == b.d->depthSize + && a.d->redSize == b.d->redSize + && a.d->greenSize == b.d->greenSize + && a.d->blueSize == b.d->blueSize + && a.d->numSamples == b.d->numSamples + && a.d->swapInterval == b.d->swapInterval + && a.d->majorVersion == b.d->majorVersion + && a.d->minorVersion == b.d->minorVersion + && a.d->profile == b.d->profile); +} + + +/*! + Returns false if all the options of the two QGLFormat objects + \a a and \a b are equal; otherwise returns true. + + \relates QGLFormat +*/ + +bool operator!=(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) +{ + return !(a == b); +} diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h new file mode 100644 index 0000000..929ad7a --- /dev/null +++ b/src/gui/kernel/qplatformwindowformat_qpa.h @@ -0,0 +1,256 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QPLATFORMWINDOWFORMAT_QPA_H +#define QPLATFORMWINDOWFORMAT_QPA_H + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QPlatformWindowFormatPrivate; + +class Q_GUI_EXPORT QPlatformWindowFormat +{ +public: + enum FormatOption { + DoubleBuffer = 0x0001, + DepthBuffer = 0x0002, + Rgba = 0x0004, + AlphaChannel = 0x0008, + AccumBuffer = 0x0010, + StencilBuffer = 0x0020, + StereoBuffers = 0x0040, + DirectRendering = 0x0080, + HasOverlay = 0x0100, + SampleBuffers = 0x0200, + DeprecatedFunctions = 0x0400, + SingleBuffer = DoubleBuffer << 16, + NoDepthBuffer = DepthBuffer << 16, + ColorIndex = Rgba << 16, + NoAlphaChannel = AlphaChannel << 16, + NoAccumBuffer = AccumBuffer << 16, + NoStencilBuffer = StencilBuffer << 16, + NoStereoBuffers = StereoBuffers << 16, + IndirectRendering = DirectRendering << 16, + NoOverlay = HasOverlay << 16, + NoSampleBuffers = SampleBuffers << 16, + NoDeprecatedFunctions = DeprecatedFunctions << 16 + }; + Q_DECLARE_FLAGS(FormatOptions, FormatOption) + + enum OpenGLVersionFlag { + OpenGL_Version_None = 0x00000000, + OpenGL_Version_1_1 = 0x00000001, + OpenGL_Version_1_2 = 0x00000002, + OpenGL_Version_1_3 = 0x00000004, + OpenGL_Version_1_4 = 0x00000008, + OpenGL_Version_1_5 = 0x00000010, + OpenGL_Version_2_0 = 0x00000020, + OpenGL_Version_2_1 = 0x00000040, + OpenGL_ES_Common_Version_1_0 = 0x00000080, + OpenGL_ES_CommonLite_Version_1_0 = 0x00000100, + OpenGL_ES_Common_Version_1_1 = 0x00000200, + OpenGL_ES_CommonLite_Version_1_1 = 0x00000400, + OpenGL_ES_Version_2_0 = 0x00000800, + OpenGL_Version_3_0 = 0x00001000, + OpenGL_Version_3_1 = 0x00002000, + OpenGL_Version_3_2 = 0x00004000, + OpenGL_Version_3_3 = 0x00008000, + OpenGL_Version_4_0 = 0x00010000 + }; + Q_DECLARE_FLAGS(OpenGLVersionFlags, OpenGLVersionFlag) + + QPlatformWindowFormat(); + QPlatformWindowFormat(FormatOptions options); + QPlatformWindowFormat(const QPlatformWindowFormat &other); + QPlatformWindowFormat &operator=(const QPlatformWindowFormat &other); + ~QPlatformWindowFormat(); + + void setDepthBufferSize(int size); + int depthBufferSize() const; + + void setAccumBufferSize(int size); + int accumBufferSize() const; + + void setRedBufferSize(int size); + int redBufferSize() const; + + void setGreenBufferSize(int size); + int greenBufferSize() const; + + void setBlueBufferSize(int size); + int blueBufferSize() const; + + void setAlphaBufferSize(int size); + int alphaBufferSize() const; + + void setStencilBufferSize(int size); + int stencilBufferSize() const; + + void setSampleBuffers(bool enable); + bool sampleBuffers() const; + + void setSamples(int numSamples); + int samples() const; + + void setSwapInterval(int interval); + int swapInterval() const; + + bool doubleBuffer() const; + void setDoubleBuffer(bool enable); + bool depth() const; + void setDepth(bool enable); + bool rgba() const; + void setRgba(bool enable); + bool alpha() const; + void setAlpha(bool enable); + bool accum() const; + void setAccum(bool enable); + bool stencil() const; + void setStencil(bool enable); + bool stereo() const; + void setStereo(bool enable); + bool directRendering() const; + void setDirectRendering(bool enable); +// bool hasOverlay() const; +// void setOverlay(bool enable); + + void setOption(QPlatformWindowFormat::FormatOptions opt); + bool testOption(QPlatformWindowFormat::FormatOptions opt) const; + + static QPlatformWindowFormat defaultFormat(); + static void setDefaultFormat(const QPlatformWindowFormat& f); + +// static QPlatformWindowFormat defaultOverlayFormat(); +// static void setDefaultOverlayFormat(const QPlatformWindowFormat& f); + + static bool hasOpenGL(); + static bool hasOpenGLOverlays(); + + void setVersion(int major, int minor); + int majorVersion() const; + int minorVersion() const; + + enum OpenGLContextProfile { + NoProfile, + CoreProfile, + CompatibilityProfile + }; + + void setProfile(OpenGLContextProfile profile); + OpenGLContextProfile profile() const; + + + static OpenGLVersionFlags openGLVersionFlags(); + +private: + QPlatformWindowFormatPrivate *d; + + void detach(); + + friend Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindowFormat&); + friend Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&); +}; + +Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindowFormat&); +Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&); + +Q_DECLARE_OPERATORS_FOR_FLAGS(QPlatformWindowFormat::FormatOptions) +Q_DECLARE_OPERATORS_FOR_FLAGS(QPlatformWindowFormat::OpenGLVersionFlags) + +inline bool QPlatformWindowFormat::doubleBuffer() const +{ + return testOption(QPlatformWindowFormat::DoubleBuffer); +} + +inline bool QPlatformWindowFormat::depth() const +{ + return testOption(QPlatformWindowFormat::DepthBuffer); +} + +inline bool QPlatformWindowFormat::rgba() const +{ + return testOption(QPlatformWindowFormat::Rgba); +} + +inline bool QPlatformWindowFormat::alpha() const +{ + return testOption(QPlatformWindowFormat::AlphaChannel); +} + +inline bool QPlatformWindowFormat::accum() const +{ + return testOption(QPlatformWindowFormat::AccumBuffer); +} + +inline bool QPlatformWindowFormat::stencil() const +{ + return testOption(QPlatformWindowFormat::StencilBuffer); +} + +inline bool QPlatformWindowFormat::stereo() const +{ + return testOption(QPlatformWindowFormat::StereoBuffers); +} + +inline bool QPlatformWindowFormat::directRendering() const +{ + return testOption(QPlatformWindowFormat::DirectRendering); +} + +//inline bool QPlatformWindowFormat::hasOverlay() const +//{ +// return testOption(QPlatformWindowFormat::HasOverlay); +//} + +inline bool QPlatformWindowFormat::sampleBuffers() const +{ + return testOption(QPlatformWindowFormat::SampleBuffers); +} + + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif //QPLATFORMWINDOWFORMAT_QPA_H diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 53b35dd..943da79 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -1662,6 +1662,7 @@ void QWidgetPrivate::createTLExtra() #endif #if defined(Q_WS_QPA) x->platformWindow = 0; + x->platformWindowFormat = QPlatformWindowFormat::defaultFormat(); #endif } } @@ -2455,6 +2456,7 @@ void QWidgetPrivate::createWinId(WId winid) q->create(); } #else + Q_UNUSED(winid); q->create(); #endif //Q_WS_QPA @@ -11937,41 +11939,6 @@ QWindowSurface *QWidget::windowSurface() const return bs ? bs->windowSurface : 0; } -#if defined(Q_WS_QPA) -/*! - \preliminary - - Sets the window to be the \a window specified. - The QWidget takes ownership of the \a surface. -*/ -void QWidget::setPlatformWindow(QPlatformWindow *window) -{ - Q_D(QWidget); - - QTLWExtra *topData = d->topData(); - if (topData->platformWindow == window) - return; - - delete topData->platformWindow; - topData->platformWindow = window; -} - -/*! - \preliminary - - Returns the QPlatformWindow this widget will be drawn into. -*/ -QPlatformWindow *QWidget::platformWindow() const -{ - Q_D(const QWidget); - QTLWExtra *extra = d->maybeTopData(); - if (extra && extra->platformWindow) - return extra->platformWindow; - - return 0; -} -#endif //defined(Q_WS_QPA) - void QWidgetPrivate::getLayoutItemMargins(int *left, int *top, int *right, int *bottom) const { if (left) diff --git a/src/gui/kernel/qwidget.h b/src/gui/kernel/qwidget.h index 8e08ce5..c750465 100644 --- a/src/gui/kernel/qwidget.h +++ b/src/gui/kernel/qwidget.h @@ -56,6 +56,10 @@ #include #include +#ifdef Q_WS_QPA //should this go somewhere else? +#include +#endif + #ifdef QT_INCLUDE_COMPAT #include #endif @@ -631,6 +635,10 @@ public: #if defined(Q_WS_QPA) void setPlatformWindow(QPlatformWindow *window); QPlatformWindow *platformWindow() const; + + void setPlatformWindowFormat(const QPlatformWindowFormat &format); + QPlatformWindowFormat platformWindowFormat() const; + friend class QDesktopScreenWidget; #endif diff --git a/src/gui/kernel/qwidget_p.h b/src/gui/kernel/qwidget_p.h index 5274c3b..3903124 100644 --- a/src/gui/kernel/qwidget_p.h +++ b/src/gui/kernel/qwidget_p.h @@ -229,6 +229,7 @@ struct QTLWExtra { uint inExpose : 1; // Prevents drawing recursion #elif defined(Q_WS_QPA) QPlatformWindow *platformWindow; + QPlatformWindowFormat platformWindowFormat; #endif }; diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index 1acf398..4229a05 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -691,6 +691,58 @@ int QWidget::metric(PaintDeviceMetric m) const return val; } +/*! + \preliminary + + Sets the window to be the \a window specified. + The QWidget takes ownership of the \a surface. +*/ +void QWidget::setPlatformWindow(QPlatformWindow *window) +{ + Q_D(QWidget); + + QTLWExtra *topData = d->topData(); + if (topData->platformWindow == window) + return; + + delete topData->platformWindow; + topData->platformWindow = window; +} + +/*! + \preliminary + + Returns the QPlatformWindow this widget will be drawn into. +*/ +QPlatformWindow *QWidget::platformWindow() const +{ + Q_D(const QWidget); + QTLWExtra *extra = d->maybeTopData(); + if (extra && extra->platformWindow) + return extra->platformWindow; + + return 0; +} + +void QWidget::setPlatformWindowFormat(const QPlatformWindowFormat &format) +{ + Q_D(QWidget); + QTLWExtra *topData = d->topData(); + topData->platformWindowFormat = format; +} + +QPlatformWindowFormat QWidget::platformWindowFormat() const +{ + Q_D(const QWidget); + + QTLWExtra *extra = d->maybeTopData(); + if (extra){ + return extra->platformWindowFormat; + } else { + return QPlatformWindowFormat::defaultFormat(); + } +} + void QWidgetPrivate::createSysExtra() { } diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index 52b57d9..eed268e 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -110,10 +110,10 @@ QOpenKODEScreen::QOpenKODEScreen() KDint desktopSize[] = { mode.width, mode.height }; -// if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { -// qErrnoWarning(kdGetError(), "Could not set desktop size"); -// return; -// } + if (kdSetDesktopPropertyivNV(kdDesktop, KD_DESKTOPPROPERTY_SIZE_NV, desktopSize)) { + qErrnoWarning(kdGetError(), "Could not set desktop size"); + return; + } // Once we've set up the desktop and display we don't need them anymore kdReleaseDisplayNV(kdDisplay); diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 52117ad..f62eae5 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -50,33 +50,243 @@ #include #include #include + +#include #include +QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format) +{ + int redSize = format.redBufferSize(); + int greenSize = format.greenBufferSize(); + int blueSize = format.blueBufferSize(); + int alphaSize = format.alphaBufferSize(); + int depthSize = format.depthBufferSize(); + int stencilSize = format.stencilBufferSize(); + int sampleCount = format.samples(); + + // QPlatformWindowFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that + // type has been requested. So we must check QPlatformWindowFormat's booleans too if size is -1: + if (format.alpha() && alphaSize <= 0) + alphaSize = 1; + if (format.depth() && depthSize <= 0) + depthSize = 1; + if (format.stencil() && stencilSize <= 0) + stencilSize = 1; + if (format.sampleBuffers() && sampleCount <= 0) + sampleCount = 1; + + // We want to make sure 16-bit configs are chosen over 32-bit configs as they will provide + // the best performance. The EGL config selection algorithm is a bit stange in this regard: + // The selection criteria for EGL_BUFFER_SIZE is "AtLeast", so we can't use it to discard + // 32-bit configs completely from the selection. So it then comes to the sorting algorithm. + // The red/green/blue sizes have a sort priority of 3, so they are sorted by first. The sort + // order is special and described as "by larger _total_ number of color bits.". So EGL will + // put 32-bit configs in the list before the 16-bit configs. However, the spec also goes on + // to say "If the requested number of bits in attrib_list for a particular component is 0, + // then the number of bits for that component is not considered". This part of the spec also + // seems to imply that setting the red/green/blue bits to zero means none of the components + // are considered and EGL disregards the entire sorting rule. It then looks to the next + // highest priority rule, which is EGL_BUFFER_SIZE. Despite the selection criteria being + // "AtLeast" for EGL_BUFFER_SIZE, it's sort order is "smaller" meaning 16-bit configs are + // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit, + // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that + // if the application sets the red/green/blue size to 5/6/5 on the QPlatformWindowFormat, + // they will probably get a 32-bit config, even when there's an RGB565 config avaliable. + + // Now normalize the values so -1 becomes 0 + redSize = redSize > 0 ? redSize : 0; + greenSize = greenSize > 0 ? greenSize : 0; + blueSize = blueSize > 0 ? blueSize : 0; + alphaSize = alphaSize > 0 ? alphaSize : 0; + depthSize = depthSize > 0 ? depthSize : 0; + stencilSize = stencilSize > 0 ? stencilSize : 0; + sampleCount = sampleCount > 0 ? sampleCount : 0; + + QVector configAttributes; + + configAttributes.append(EGL_RED_SIZE); + configAttributes.append(redSize); + + configAttributes.append(EGL_GREEN_SIZE); + configAttributes.append(greenSize); + + configAttributes.append(EGL_BLUE_SIZE); + configAttributes.append(blueSize); + + configAttributes.append(EGL_ALPHA_SIZE); + configAttributes.append(alphaSize); + + configAttributes.append(EGL_DEPTH_SIZE); + configAttributes.append(depthSize); + + configAttributes.append(EGL_STENCIL_SIZE); + configAttributes.append(stencilSize); + + configAttributes.append(EGL_SAMPLES); + configAttributes.append(sampleCount); + + configAttributes.append(EGL_SAMPLE_BUFFERS); + configAttributes.append(sampleCount? 1:0); + + return configAttributes; +} + +bool q_reduceConfigAttributes(QVector *configAttributes) +{ + int i = -1; + // Reduce the complexity of a configuration request to ask for less + // because the previous request did not result in success. Returns + // true if the complexity was reduced, or false if no further + // reductions in complexity are possible. + + i = configAttributes->indexOf(EGL_SWAP_BEHAVIOR); + if (i >= 0) { + configAttributes->remove(i,2); + } + +#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT + // For OpenVG, we sometimes try to create a surface using a pre-multiplied format. If we can't + // find a config which supports pre-multiplied formats, remove the flag on the surface type: + + i = configAttributes->indexOf(EGL_SURFACE_TYPE); + if (i >= 0) { + EGLint surfaceType = configAttributes->at(i +1); + if (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) { + surfaceType ^= EGL_VG_ALPHA_FORMAT_PRE_BIT; + configAttributes->replace(i+1,surfaceType); + return true; + } + } +#endif + + // EGL chooses configs with the highest color depth over + // those with smaller (but faster) lower color depths. One + // way around this is to set EGL_BUFFER_SIZE to 16, which + // trumps the others. Of course, there may not be a 16-bit + // config avaliable, so it's the first restraint we remove. + i = configAttributes->indexOf(EGL_BUFFER_SIZE); + if (i >= 0) { + if (configAttributes->at(i+1) == 16) { + configAttributes->remove(i,2); + return true; + } + } + + i = configAttributes->indexOf(EGL_SAMPLE_BUFFERS); + if (i >= 0) { + configAttributes->remove(i,2); + i = configAttributes->indexOf(EGL_SAMPLES); + if (i >= 0) { + configAttributes->remove(i,2); + } + return true; + } + + i = configAttributes->indexOf(EGL_ALPHA_SIZE); + if (i >= 0) { + configAttributes->remove(i,2); +#if defined(EGL_BIND_TO_TEXTURE_RGBA) && defined(EGL_BIND_TO_TEXTURE_RGB) + i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGBA); + if (i >= 0) { + configAttributes->replace(i,EGL_BIND_TO_TEXTURE_RGB); + configAttributes->replace(i+1,TRUE); + + } +#endif + return true; + } + + i = configAttributes->indexOf(EGL_STENCIL_SIZE); + if (i >= 0) { + configAttributes->remove(i,2); + return true; + } + i = configAttributes->indexOf(EGL_DEPTH_SIZE); + if (i >= 0) { + configAttributes->remove(i,2); + return true; + } +#ifdef EGL_BIND_TO_TEXTURE_RGB + i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGB); + if (i >= 0) { + configAttributes->remove(i,2); + return true; + } +#endif + + return false; +} + +EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format, EGLenum eglApi) +{ + EGLConfig cfg = 0; + QVector configureAttributes = q_createConfigAttributesFromFormat(format); + configureAttributes.append(EGL_SURFACE_TYPE); + configureAttributes.append(EGL_WINDOW_BIT); + + configureAttributes.append(EGL_RENDERABLE_TYPE); + configureAttributes.append(EGL_OPENGL_ES2_BIT); + + configureAttributes.append(EGL_NONE); + + do { + // Get the number of matching configurations for this set of properties. + EGLint matching = 0; + if (!eglChooseConfig(display, configureAttributes.constData(), 0, 0, &matching) || !matching) + continue; + +// // If we want the best pixel format, then return the first +// // matching configuration. +// if (match == QEgl::BestPixelFormat) { +// eglChooseConfig(display, props.properties(), &cfg, 1, &matching); +// if (matching < 1) +// continue; +// return cfg; +// } + + // Fetch all of the matching configurations and find the + // first that matches the pixel format we wanted. + int i = configureAttributes.indexOf(EGL_RED_SIZE); + int confAttrRed = configureAttributes.at(i+1); + i = configureAttributes.indexOf(EGL_GREEN_SIZE); + int confAttrGreen = configureAttributes.at(i+1); + i = configureAttributes.indexOf(EGL_BLUE_SIZE); + int confAttrBlue = configureAttributes.at(i+1); + i = configureAttributes.indexOf(EGL_ALPHA_SIZE); + int confAttrAlpha = configureAttributes.at(i+1); + + EGLint size = matching; + EGLConfig *configs = new EGLConfig [size]; + eglChooseConfig(display, configureAttributes.constData(), configs, size, &matching); + for (EGLint index = 0; index < size; ++index) { + EGLint red, green, blue, alpha; + eglGetConfigAttrib(display, configs[index], EGL_RED_SIZE, &red); + eglGetConfigAttrib(display, configs[index], EGL_GREEN_SIZE, &green); + eglGetConfigAttrib(display, configs[index], EGL_BLUE_SIZE, &blue); + eglGetConfigAttrib(display, configs[index], EGL_ALPHA_SIZE, &alpha); +// qDebug() << "red" << red << confAttrRed; +// qDebug() << "green" << green << confAttrGreen; +// qDebug() << "blue" << blue << confAttrBlue; +// qDebug() << "alpha" << alpha << confAttrAlpha << (confAttrAlpha == 0 || alpha == confAttrAlpha); + if (red == confAttrRed && + green == confAttrGreen && + blue == confAttrBlue && + (confAttrAlpha == 0 || + alpha == confAttrAlpha)) { + cfg = configs[index]; + delete [] configs; + return cfg; + } + } + delete [] configs; + } while (q_reduceConfigAttributes(&configureAttributes)); + qDebug() << "RETURNING NULL!"; + return 0; +} + QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) : QPlatformWindow(tlw) { - EGLint configAttrs[] = { - EGL_RED_SIZE, 1, - EGL_GREEN_SIZE, 1, - EGL_BLUE_SIZE, 1, - EGL_BUFFER_SIZE, 16, - EGL_DEPTH_SIZE, 0, - EGL_LEVEL, 0, - EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, -// #ifdef EGL_NV_coverage_sample -// EGL_COVERAGE_BUFFERS_NV, 1, -// EGL_COVERAGE_SAMPLES_NV, 5, -// #endif - EGL_ALPHA_SIZE, 0, -// EGL_LUMINANCE_SIZE, 0, - EGL_ALPHA_MASK_SIZE, 0, - EGL_SAMPLES, 0, - EGL_SAMPLE_BUFFERS, 0, -// EGL_STENCIL_SIZE, 0, - EGL_SURFACE_TYPE, EGL_WINDOW_BIT, - EGL_TRANSPARENT_TYPE, EGL_NONE, - EGL_NONE - }; m_eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); m_eglContextAttrs.append(2); @@ -98,33 +308,13 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) qErrnoWarning("Could not make QOpenKODEWindow without a screen"); } - EGLint configCount; - // Find out how many configurations suit our needs - EGLBoolean eglStatus = eglChooseConfig(screen->eglDisplay(), configAttrs, - KD_NULL, 0, &configCount); - if (!eglStatus || !configCount) { - qErrnoWarning("EGL failed to return any matching configurations"); - } - - qDebug() << "config count" << configCount; - - // Allocate room for the list of matching configurations - EGLConfig *configList = (EGLConfig*)kdMalloc(configCount * sizeof(EGLConfig)); - if (!configList) { - qErrnoWarning("kdMalloc failure obtaining configuration list"); - } + QPlatformWindowFormat format = tlw->platformWindowFormat(); + format.setRedBufferSize(5); + format.setGreenBufferSize(6); + format.setBlueBufferSize(5); + tlw->setPlatformWindowFormat(format); - // Obtain the configuration list from EGL - eglStatus = eglChooseConfig(screen->eglDisplay(), configAttrs, - configList, configCount, &configCount); - if (!eglStatus || !configCount) { - qErrnoWarning("EGL failed to populate configuration list"); - } - - // Select an EGL configuration that matches the native window - - m_eglConfig = configList[11]; - kdFree(configList);//free the list not the configs + m_eglConfig = q_configFromQPlatformWindowFormat(screen->eglDisplay(),tlw->platformWindowFormat(),m_eglApi); m_kdWindow = kdCreateWindow(screen->eglDisplay(), m_eglConfig, @@ -156,10 +346,6 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) return; } - KDint32 layer = 1; - kdGetWindowPropertyiv(m_kdWindow,KD_WINDOWPROPERTY_DESKTOP_LAYER_NV,&layer); - qDebug() << "LAYER:" << layer; - EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(), m_eglConfig, -- cgit v0.12 From 82ea3e45567dbe83d97638124e7351dc462afe3c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 12 Jul 2010 09:43:04 +0200 Subject: clean up QPlatformWindowFormat --- src/gui/kernel/qapplication.cpp | 2 + src/gui/kernel/qplatformintegration_qpa.h | 2 +- src/gui/kernel/qplatformwindowformat_qpa.cpp | 342 ++------------------------- src/gui/kernel/qplatformwindowformat_qpa.h | 47 +--- 4 files changed, 25 insertions(+), 368 deletions(-) diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index e1ed588..ac79958 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -6032,6 +6032,8 @@ QPixmap QApplicationPrivate::getPixmapCursor(Qt::CursorShape cshape) default: break; } +#else + Q_UNUSED(cshape); #endif return QPixmap(); } diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index ea0ed35..8c1659f 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -42,8 +42,8 @@ #ifndef QPLATFORMINTEGRATION_H #define QPLATFORMINTEGRATION_H -#include #include +#include #include QT_BEGIN_HEADER diff --git a/src/gui/kernel/qplatformwindowformat_qpa.cpp b/src/gui/kernel/qplatformwindowformat_qpa.cpp index 4ded26b..bc234ab 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.cpp +++ b/src/gui/kernel/qplatformwindowformat_qpa.cpp @@ -62,7 +62,7 @@ public: , swapInterval(-1) , majorVersion(1) , minorVersion(0) - , profile(QPlatformWindowFormat::NoProfile) + , windowApi(QPlatformWindowFormat::Raster) { } @@ -80,7 +80,7 @@ public: swapInterval(other->swapInterval), majorVersion(other->majorVersion), minorVersion(other->minorVersion), - profile(other->profile) + windowApi(other->windowApi) { } QAtomicInt ref; @@ -96,7 +96,7 @@ public: int swapInterval; int majorVersion; int minorVersion; - QPlatformWindowFormat::OpenGLContextProfile profile; + QPlatformWindowFormat::WindowApi windowApi; }; /*! @@ -584,6 +584,17 @@ int QPlatformWindowFormat::swapInterval() const return d->swapInterval; } +void QPlatformWindowFormat::setWindowApi(QPlatformWindowFormat::WindowApi api) +{ + detach(); + d->windowApi = api; +} + +QPlatformWindowFormat::WindowApi QPlatformWindowFormat::windowApi() const +{ + return d->windowApi; +} + ///*! // \fn bool QGLFormat::hasOverlay() const @@ -835,329 +846,6 @@ int QPlatformWindowFormat::stencilBufferSize() const } /*! - \since 4.7 - - Set the OpenGL version to the \a major and \a minor numbers. If a - context compatible with the requested OpenGL version cannot be - created, a context compatible with version 1.x is created instead. - - \sa majorVersion(), minorVersion() -*/ -void QPlatformWindowFormat::setVersion(int major, int minor) -{ - if (major < 1 || minor < 0) { - qWarning("QGLFormat::setVersion: Cannot set zero or negative version number %d.%d", major, minor); - return; - } - detach(); - d->majorVersion = major; - d->minorVersion = minor; -} - -/*! - \since 4.7 - - Returns the OpenGL major version. - - \sa setVersion(), minorVersion() -*/ -int QPlatformWindowFormat::majorVersion() const -{ - return d->majorVersion; -} - -/*! - \since 4.7 - - Returns the OpenGL minor version. - - \sa setVersion(), majorVersion() -*/ -int QPlatformWindowFormat::minorVersion() const -{ - return d->minorVersion; -} - -/*! - \enum QGLFormat::OpenGLContextProfile - \since 4.7 - - This enum describes the OpenGL context profiles that can be - specified for contexts implementing OpenGL version 3.2 or - higher. These profiles are different from OpenGL ES profiles. - - \value NoProfile OpenGL version is lower than 3.2. - \value CoreProfile Functionality deprecated in OpenGL version 3.0 is not available. - \value CompatibilityProfile Functionality from earlier OpenGL versions is available. -*/ - -/*! - \since 4.7 - - Set the OpenGL context profile to \a profile. The \a profile is - ignored if the requested OpenGL version is less than 3.2. - - \sa profile() -*/ -void QPlatformWindowFormat::setProfile(OpenGLContextProfile profile) -{ - detach(); - d->profile = profile; -} - -/*! - \since 4.7 - - Returns the OpenGL context profile. - - \sa setProfile() -*/ -QPlatformWindowFormat::OpenGLContextProfile QPlatformWindowFormat::profile() const -{ - return d->profile; -} - - -/*! - \fn bool QGLFormat::hasOpenGL() - - Returns true if the window system has any OpenGL support; - otherwise returns false. - - \warning This function must not be called until the QApplication - object has been created. -*/ - - - -/*! - \fn bool QGLFormat::hasOpenGLOverlays() - - Returns true if the window system supports OpenGL overlays; - otherwise returns false. - - \warning This function must not be called until the QApplication - object has been created. -*/ - -QPlatformWindowFormat::OpenGLVersionFlags Q_AUTOTEST_EXPORT qOpenGLVersionFlagsFromString(const QString &versionString) -{ - QPlatformWindowFormat::OpenGLVersionFlags versionFlags = QPlatformWindowFormat::OpenGL_Version_None; - - if (versionString.startsWith(QLatin1String("OpenGL ES"))) { - QStringList parts = versionString.split(QLatin1Char(' ')); - if (parts.size() >= 3) { - if (parts[2].startsWith(QLatin1String("1."))) { - if (parts[1].endsWith(QLatin1String("-CM"))) { - versionFlags |= QPlatformWindowFormat::OpenGL_ES_Common_Version_1_0 | - QPlatformWindowFormat::OpenGL_ES_CommonLite_Version_1_0; - if (parts[2].startsWith(QLatin1String("1.1"))) - versionFlags |= QPlatformWindowFormat::OpenGL_ES_Common_Version_1_1 | - QPlatformWindowFormat::OpenGL_ES_CommonLite_Version_1_1; - } else { - // Not -CM, must be CL, CommonLite - versionFlags |= QPlatformWindowFormat::OpenGL_ES_CommonLite_Version_1_0; - if (parts[2].startsWith(QLatin1String("1.1"))) - versionFlags |= QPlatformWindowFormat::OpenGL_ES_CommonLite_Version_1_1; - } - } else { - // OpenGL ES version 2.0 or higher - versionFlags |= QPlatformWindowFormat::OpenGL_ES_Version_2_0; - } - } else { - // if < 3 parts to the name, it is an unrecognised OpenGL ES - qWarning("Unrecognised OpenGL ES version"); - } - } else { - // not ES, regular OpenGL, the version numbers are first in the string - if (versionString.startsWith(QLatin1String("1."))) { - switch (versionString[2].toAscii()) { - case '5': - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_5; - case '4': - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_4; - case '3': - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_3; - case '2': - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_2; - case '1': - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1; - default: - break; - } - } else if (versionString.startsWith(QLatin1String("2."))) { - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1 | - QPlatformWindowFormat::OpenGL_Version_1_2 | - QPlatformWindowFormat::OpenGL_Version_1_3 | - QPlatformWindowFormat::OpenGL_Version_1_4 | - QPlatformWindowFormat::OpenGL_Version_1_5 | - QPlatformWindowFormat::OpenGL_Version_2_0; - if (versionString[2].toAscii() == '1') - versionFlags |= QPlatformWindowFormat::OpenGL_Version_2_1; - } else if (versionString.startsWith(QLatin1String("3."))) { - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1 | - QPlatformWindowFormat::OpenGL_Version_1_2 | - QPlatformWindowFormat::OpenGL_Version_1_3 | - QPlatformWindowFormat::OpenGL_Version_1_4 | - QPlatformWindowFormat::OpenGL_Version_1_5 | - QPlatformWindowFormat::OpenGL_Version_2_0 | - QPlatformWindowFormat::OpenGL_Version_2_1 | - QPlatformWindowFormat::OpenGL_Version_3_0; - switch (versionString[2].toAscii()) { - case '3': - versionFlags |= QPlatformWindowFormat::OpenGL_Version_3_3; - case '2': - versionFlags |= QPlatformWindowFormat::OpenGL_Version_3_2; - case '1': - versionFlags |= QPlatformWindowFormat::OpenGL_Version_3_1; - case '0': - break; - default: - versionFlags |= QPlatformWindowFormat::OpenGL_Version_3_1 | - QPlatformWindowFormat::OpenGL_Version_3_2 | - QPlatformWindowFormat::OpenGL_Version_3_3; - break; - } - } else if (versionString.startsWith(QLatin1String("4."))) { - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1 | - QPlatformWindowFormat::OpenGL_Version_1_2 | - QPlatformWindowFormat::OpenGL_Version_1_3 | - QPlatformWindowFormat::OpenGL_Version_1_4 | - QPlatformWindowFormat::OpenGL_Version_1_5 | - QPlatformWindowFormat::OpenGL_Version_2_0 | - QPlatformWindowFormat::OpenGL_Version_2_1 | - QPlatformWindowFormat::OpenGL_Version_3_0 | - QPlatformWindowFormat::OpenGL_Version_3_1 | - QPlatformWindowFormat::OpenGL_Version_3_2 | - QPlatformWindowFormat::OpenGL_Version_3_3 | - QPlatformWindowFormat::OpenGL_Version_4_0; - } else { - versionFlags |= QPlatformWindowFormat::OpenGL_Version_1_1 | - QPlatformWindowFormat::OpenGL_Version_1_2 | - QPlatformWindowFormat::OpenGL_Version_1_3 | - QPlatformWindowFormat::OpenGL_Version_1_4 | - QPlatformWindowFormat::OpenGL_Version_1_5 | - QPlatformWindowFormat::OpenGL_Version_2_0 | - QPlatformWindowFormat::OpenGL_Version_2_1 | - QPlatformWindowFormat::OpenGL_Version_3_0 | - QPlatformWindowFormat::OpenGL_Version_3_1 | - QPlatformWindowFormat::OpenGL_Version_3_2 | - QPlatformWindowFormat::OpenGL_Version_3_3 | - QPlatformWindowFormat::OpenGL_Version_4_0; - } - } - return versionFlags; -} - -/*! - \enum QGLFormat::OpenGLVersionFlag - \since 4.2 - - This enum describes the various OpenGL versions that are - recognized by Qt. Use the QGLFormat::openGLVersionFlags() function - to identify which versions that are supported at runtime. - - \value OpenGL_Version_None If no OpenGL is present or if no OpenGL context is current. - - \value OpenGL_Version_1_1 OpenGL version 1.1 or higher is present. - - \value OpenGL_Version_1_2 OpenGL version 1.2 or higher is present. - - \value OpenGL_Version_1_3 OpenGL version 1.3 or higher is present. - - \value OpenGL_Version_1_4 OpenGL version 1.4 or higher is present. - - \value OpenGL_Version_1_5 OpenGL version 1.5 or higher is present. - - \value OpenGL_Version_2_0 OpenGL version 2.0 or higher is present. - Note that version 2.0 supports all the functionality of version 1.5. - - \value OpenGL_Version_2_1 OpenGL version 2.1 or higher is present. - - \value OpenGL_Version_3_0 OpenGL version 3.0 or higher is present. - - \value OpenGL_Version_3_1 OpenGL version 3.1 or higher is present. - Note that OpenGL version 3.1 or higher does not necessarily support all the features of - version 3.0 and lower. - - \value OpenGL_Version_3_2 OpenGL version 3.2 or higher is present. - - \value OpenGL_ES_CommonLite_Version_1_0 OpenGL ES version 1.0 Common Lite or higher is present. - - \value OpenGL_ES_Common_Version_1_0 OpenGL ES version 1.0 Common or higher is present. - The Common profile supports all the features of Common Lite. - - \value OpenGL_ES_CommonLite_Version_1_1 OpenGL ES version 1.1 Common Lite or higher is present. - - \value OpenGL_ES_Common_Version_1_1 OpenGL ES version 1.1 Common or higher is present. - The Common profile supports all the features of Common Lite. - - \value OpenGL_ES_Version_2_0 OpenGL ES version 2.0 or higher is present. - Note that OpenGL ES version 2.0 does not support all the features of OpenGL ES 1.x. - So if OpenGL_ES_Version_2_0 is returned, none of the ES 1.x flags are returned. - - See also \l{http://www.opengl.org} for more information about the different - revisions of OpenGL. - - \sa openGLVersionFlags() -*/ - -/*! - \since 4.2 - - Identifies, at runtime, which OpenGL versions that are supported - by the current platform. - - Note that if OpenGL version 1.5 is supported, its predecessors - (i.e., version 1.4 and lower) are also supported. To identify the - support of a particular feature, like multi texturing, test for - the version in which the feature was first introduced (i.e., - version 1.3 in the case of multi texturing) to adapt to the largest - possible group of runtime platforms. - - This function needs a valid current OpenGL context to work; - otherwise it will return OpenGL_Version_None. - - \sa hasOpenGL(), hasOpenGLOverlays() -*/ -QPlatformWindowFormat::OpenGLVersionFlags QPlatformWindowFormat::openGLVersionFlags() -{ -// static bool cachedDefault = false; - static OpenGLVersionFlags defaultVersionFlags = OpenGL_Version_None; -// QGLContext *currentCtx = const_cast(QGLContext::currentContext()); -// QGLTemporaryContext *tmpContext = 0; - -// if (currentCtx && currentCtx->d_func()->version_flags_cached) -// return currentCtx->d_func()->version_flags; - -// if (!currentCtx) { -// if (cachedDefault) { -// return defaultVersionFlags; -// } else { -// if (!hasOpenGL()) -// return defaultVersionFlags; -// tmpContext = new QGLTemporaryContext; -// cachedDefault = true; -// } -// } - -// QString versionString(QLatin1String(reinterpret_cast(glGetString(GL_VERSION)))); -// OpenGLVersionFlags versionFlags = qOpenGLVersionFlagsFromString(versionString); -// if (currentCtx) { -// currentCtx->d_func()->version_flags_cached = true; -// currentCtx->d_func()->version_flags = versionFlags; -// } -// if (tmpContext) { -// defaultVersionFlags = versionFlags; -// delete tmpContext; -// } - -// return versionFlags; - return defaultVersionFlags; -} - - -/*! Returns the default QGLFormat for the application. All QGLWidget objects that are created use this format unless another format is specified, e.g. when they are constructed. @@ -1266,7 +954,7 @@ bool operator==(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) && a.d->swapInterval == b.d->swapInterval && a.d->majorVersion == b.d->majorVersion && a.d->minorVersion == b.d->minorVersion - && a.d->profile == b.d->profile); + && a.d->windowApi == b.d->windowApi); } diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h index 929ad7a..3c5f907 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.h +++ b/src/gui/kernel/qplatformwindowformat_qpa.h @@ -78,27 +78,11 @@ public: }; Q_DECLARE_FLAGS(FormatOptions, FormatOption) - enum OpenGLVersionFlag { - OpenGL_Version_None = 0x00000000, - OpenGL_Version_1_1 = 0x00000001, - OpenGL_Version_1_2 = 0x00000002, - OpenGL_Version_1_3 = 0x00000004, - OpenGL_Version_1_4 = 0x00000008, - OpenGL_Version_1_5 = 0x00000010, - OpenGL_Version_2_0 = 0x00000020, - OpenGL_Version_2_1 = 0x00000040, - OpenGL_ES_Common_Version_1_0 = 0x00000080, - OpenGL_ES_CommonLite_Version_1_0 = 0x00000100, - OpenGL_ES_Common_Version_1_1 = 0x00000200, - OpenGL_ES_CommonLite_Version_1_1 = 0x00000400, - OpenGL_ES_Version_2_0 = 0x00000800, - OpenGL_Version_3_0 = 0x00001000, - OpenGL_Version_3_1 = 0x00002000, - OpenGL_Version_3_2 = 0x00004000, - OpenGL_Version_3_3 = 0x00008000, - OpenGL_Version_4_0 = 0x00010000 + enum WindowApi { + Raster, + OpenGL, + OpenVG }; - Q_DECLARE_FLAGS(OpenGLVersionFlags, OpenGLVersionFlag) QPlatformWindowFormat(); QPlatformWindowFormat(FormatOptions options); @@ -136,6 +120,9 @@ public: void setSwapInterval(int interval); int swapInterval() const; + void setWindowApi(QPlatformWindowFormat::WindowApi api); + WindowApi windowApi() const; + bool doubleBuffer() const; void setDoubleBuffer(bool enable); bool depth() const; @@ -164,25 +151,6 @@ public: // static QPlatformWindowFormat defaultOverlayFormat(); // static void setDefaultOverlayFormat(const QPlatformWindowFormat& f); - static bool hasOpenGL(); - static bool hasOpenGLOverlays(); - - void setVersion(int major, int minor); - int majorVersion() const; - int minorVersion() const; - - enum OpenGLContextProfile { - NoProfile, - CoreProfile, - CompatibilityProfile - }; - - void setProfile(OpenGLContextProfile profile); - OpenGLContextProfile profile() const; - - - static OpenGLVersionFlags openGLVersionFlags(); - private: QPlatformWindowFormatPrivate *d; @@ -196,7 +164,6 @@ Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindow Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&); Q_DECLARE_OPERATORS_FOR_FLAGS(QPlatformWindowFormat::FormatOptions) -Q_DECLARE_OPERATORS_FOR_FLAGS(QPlatformWindowFormat::OpenGLVersionFlags) inline bool QPlatformWindowFormat::doubleBuffer() const { -- cgit v0.12 From 4892e8fcebdbdb8a612189682f3a18db6cb51158 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 12 Jul 2010 10:34:20 +0200 Subject: Lighthouse egl refactoring Moved the openkode egl code into a convenience directory so it can be used by other plugins --- .../platforms/eglconvenience/qeglconvenience.cpp | 233 +++++++++++++++++++ .../platforms/eglconvenience/qeglconvenience.h | 54 +++++ .../eglconvenience/qeglplatformcontext.cpp | 104 +++++++++ .../platforms/eglconvenience/qeglplatformcontext.h | 66 ++++++ src/plugins/platforms/openkode/openkode.pro | 6 +- .../platforms/openkode/qopenkodeglintegration.cpp | 108 --------- .../platforms/openkode/qopenkodeglintegration.h | 66 ------ .../platforms/openkode/qopenkodeintegration.cpp | 24 +- src/plugins/platforms/openkode/qopenkodewindow.cpp | 250 +-------------------- 9 files changed, 494 insertions(+), 417 deletions(-) create mode 100644 src/plugins/platforms/eglconvenience/qeglconvenience.cpp create mode 100644 src/plugins/platforms/eglconvenience/qeglconvenience.h create mode 100644 src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp create mode 100644 src/plugins/platforms/eglconvenience/qeglplatformcontext.h delete mode 100644 src/plugins/platforms/openkode/qopenkodeglintegration.cpp delete mode 100644 src/plugins/platforms/openkode/qopenkodeglintegration.h diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp new file mode 100644 index 0000000..1064e47 --- /dev/null +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp @@ -0,0 +1,233 @@ +#include "qeglconvenience.h" + +#include + +QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format) +{ + int redSize = format.redBufferSize(); + int greenSize = format.greenBufferSize(); + int blueSize = format.blueBufferSize(); + int alphaSize = format.alphaBufferSize(); + int depthSize = format.depthBufferSize(); + int stencilSize = format.stencilBufferSize(); + int sampleCount = format.samples(); + + // QPlatformWindowFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that + // type has been requested. So we must check QPlatformWindowFormat's booleans too if size is -1: + if (format.alpha() && alphaSize <= 0) + alphaSize = 1; + if (format.depth() && depthSize <= 0) + depthSize = 1; + if (format.stencil() && stencilSize <= 0) + stencilSize = 1; + if (format.sampleBuffers() && sampleCount <= 0) + sampleCount = 1; + + // We want to make sure 16-bit configs are chosen over 32-bit configs as they will provide + // the best performance. The EGL config selection algorithm is a bit stange in this regard: + // The selection criteria for EGL_BUFFER_SIZE is "AtLeast", so we can't use it to discard + // 32-bit configs completely from the selection. So it then comes to the sorting algorithm. + // The red/green/blue sizes have a sort priority of 3, so they are sorted by first. The sort + // order is special and described as "by larger _total_ number of color bits.". So EGL will + // put 32-bit configs in the list before the 16-bit configs. However, the spec also goes on + // to say "If the requested number of bits in attrib_list for a particular component is 0, + // then the number of bits for that component is not considered". This part of the spec also + // seems to imply that setting the red/green/blue bits to zero means none of the components + // are considered and EGL disregards the entire sorting rule. It then looks to the next + // highest priority rule, which is EGL_BUFFER_SIZE. Despite the selection criteria being + // "AtLeast" for EGL_BUFFER_SIZE, it's sort order is "smaller" meaning 16-bit configs are + // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit, + // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that + // if the application sets the red/green/blue size to 5/6/5 on the QPlatformWindowFormat, + // they will probably get a 32-bit config, even when there's an RGB565 config avaliable. + + // Now normalize the values so -1 becomes 0 + redSize = redSize > 0 ? redSize : 0; + greenSize = greenSize > 0 ? greenSize : 0; + blueSize = blueSize > 0 ? blueSize : 0; + alphaSize = alphaSize > 0 ? alphaSize : 0; + depthSize = depthSize > 0 ? depthSize : 0; + stencilSize = stencilSize > 0 ? stencilSize : 0; + sampleCount = sampleCount > 0 ? sampleCount : 0; + + QVector configAttributes; + + configAttributes.append(EGL_RED_SIZE); + configAttributes.append(redSize); + + configAttributes.append(EGL_GREEN_SIZE); + configAttributes.append(greenSize); + + configAttributes.append(EGL_BLUE_SIZE); + configAttributes.append(blueSize); + + configAttributes.append(EGL_ALPHA_SIZE); + configAttributes.append(alphaSize); + + configAttributes.append(EGL_DEPTH_SIZE); + configAttributes.append(depthSize); + + configAttributes.append(EGL_STENCIL_SIZE); + configAttributes.append(stencilSize); + + configAttributes.append(EGL_SAMPLES); + configAttributes.append(sampleCount); + + configAttributes.append(EGL_SAMPLE_BUFFERS); + configAttributes.append(sampleCount? 1:0); + + return configAttributes; +} + +bool q_reduceConfigAttributes(QVector *configAttributes) +{ + int i = -1; + // Reduce the complexity of a configuration request to ask for less + // because the previous request did not result in success. Returns + // true if the complexity was reduced, or false if no further + // reductions in complexity are possible. + + i = configAttributes->indexOf(EGL_SWAP_BEHAVIOR); + if (i >= 0) { + configAttributes->remove(i,2); + } + +#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT + // For OpenVG, we sometimes try to create a surface using a pre-multiplied format. If we can't + // find a config which supports pre-multiplied formats, remove the flag on the surface type: + + i = configAttributes->indexOf(EGL_SURFACE_TYPE); + if (i >= 0) { + EGLint surfaceType = configAttributes->at(i +1); + if (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) { + surfaceType ^= EGL_VG_ALPHA_FORMAT_PRE_BIT; + configAttributes->replace(i+1,surfaceType); + return true; + } + } +#endif + + // EGL chooses configs with the highest color depth over + // those with smaller (but faster) lower color depths. One + // way around this is to set EGL_BUFFER_SIZE to 16, which + // trumps the others. Of course, there may not be a 16-bit + // config avaliable, so it's the first restraint we remove. + i = configAttributes->indexOf(EGL_BUFFER_SIZE); + if (i >= 0) { + if (configAttributes->at(i+1) == 16) { + configAttributes->remove(i,2); + return true; + } + } + + i = configAttributes->indexOf(EGL_SAMPLE_BUFFERS); + if (i >= 0) { + configAttributes->remove(i,2); + i = configAttributes->indexOf(EGL_SAMPLES); + if (i >= 0) { + configAttributes->remove(i,2); + } + return true; + } + + i = configAttributes->indexOf(EGL_ALPHA_SIZE); + if (i >= 0) { + configAttributes->remove(i,2); +#if defined(EGL_BIND_TO_TEXTURE_RGBA) && defined(EGL_BIND_TO_TEXTURE_RGB) + i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGBA); + if (i >= 0) { + configAttributes->replace(i,EGL_BIND_TO_TEXTURE_RGB); + configAttributes->replace(i+1,TRUE); + + } +#endif + return true; + } + + i = configAttributes->indexOf(EGL_STENCIL_SIZE); + if (i >= 0) { + configAttributes->remove(i,2); + return true; + } + i = configAttributes->indexOf(EGL_DEPTH_SIZE); + if (i >= 0) { + configAttributes->remove(i,2); + return true; + } +#ifdef EGL_BIND_TO_TEXTURE_RGB + i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGB); + if (i >= 0) { + configAttributes->remove(i,2); + return true; + } +#endif + + return false; +} + +EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format) +{ + EGLConfig cfg = 0; + QVector configureAttributes = q_createConfigAttributesFromFormat(format); + configureAttributes.append(EGL_SURFACE_TYPE); //we only support eglconfigs for windows for now + configureAttributes.append(EGL_WINDOW_BIT); + + configureAttributes.append(EGL_RENDERABLE_TYPE); + if (format.windowApi() == QPlatformWindowFormat::OpenVG) { + configureAttributes.append(EGL_OPENVG_BIT); + } else { + configureAttributes.append(EGL_OPENGL_ES2_BIT); + } + + configureAttributes.append(EGL_NONE); + + do { + // Get the number of matching configurations for this set of properties. + EGLint matching = 0; + if (!eglChooseConfig(display, configureAttributes.constData(), 0, 0, &matching) || !matching) + continue; + +// // If we want the best pixel format, then return the first +// // matching configuration. +// if (match == QEgl::BestPixelFormat) { +// eglChooseConfig(display, props.properties(), &cfg, 1, &matching); +// if (matching < 1) +// continue; +// return cfg; +// } + + // Fetch all of the matching configurations and find the + // first that matches the pixel format we wanted. + int i = configureAttributes.indexOf(EGL_RED_SIZE); + int confAttrRed = configureAttributes.at(i+1); + i = configureAttributes.indexOf(EGL_GREEN_SIZE); + int confAttrGreen = configureAttributes.at(i+1); + i = configureAttributes.indexOf(EGL_BLUE_SIZE); + int confAttrBlue = configureAttributes.at(i+1); + i = configureAttributes.indexOf(EGL_ALPHA_SIZE); + int confAttrAlpha = configureAttributes.at(i+1); + + EGLint size = matching; + EGLConfig *configs = new EGLConfig [size]; + eglChooseConfig(display, configureAttributes.constData(), configs, size, &matching); + for (EGLint index = 0; index < size; ++index) { + EGLint red, green, blue, alpha; + eglGetConfigAttrib(display, configs[index], EGL_RED_SIZE, &red); + eglGetConfigAttrib(display, configs[index], EGL_GREEN_SIZE, &green); + eglGetConfigAttrib(display, configs[index], EGL_BLUE_SIZE, &blue); + eglGetConfigAttrib(display, configs[index], EGL_ALPHA_SIZE, &alpha); + if (red == confAttrRed && + green == confAttrGreen && + blue == confAttrBlue && + (confAttrAlpha == 0 || + alpha == confAttrAlpha)) { + cfg = configs[index]; + delete [] configs; + return cfg; + } + } + delete [] configs; + } while (q_reduceConfigAttributes(&configureAttributes)); + qDebug() << "RETURNING NULL!"; + return 0; +} diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h new file mode 100644 index 0000000..bd5a6d3 --- /dev/null +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QEGLCONVENIENCE_H +#define QEGLCONVENIENCE_H + +#include + +#include +#include + +QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format); +bool q_reduceConfigAttributes(QVector *configAttributes); +EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format); + + +#endif //QEGLCONVENIENCE_H diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp new file mode 100644 index 0000000..6afeb70 --- /dev/null +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -0,0 +1,104 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qeglplatformcontext.h" + +#include + +#include +#include + +QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi) + : m_eglDisplay(display) + , m_eglSurface(surface) + , m_eglApi(eglApi) +{ + if (m_eglSurface == EGL_NO_SURFACE) { + qWarning("Createing QEGLPlatformContext with no surface"); + } + + eglBindAPI(m_eglApi); + m_eglContext = eglCreateContext(m_eglDisplay,config, 0,contextAttrs); + if (!m_eglContext) { + qErrnoWarning("QEGLPlatformContext could not create eglContext"); + } +} + +QEGLPlatformContext::~QEGLPlatformContext() +{ + if (m_eglSurface != EGL_NO_SURFACE) { + doneCurrent(); + eglDestroySurface(m_eglDisplay, m_eglSurface); + m_eglSurface = EGL_NO_SURFACE; + } + + if (m_eglContext != EGL_NO_CONTEXT) { + eglDestroyContext(m_eglDisplay, m_eglContext); + m_eglContext = EGL_NO_CONTEXT; + } +} + +void QEGLPlatformContext::makeCurrent() +{ + eglBindAPI(m_eglApi); + bool ok = eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext); + if (!ok) + qWarning() << "QEGLPlatformContext::makeCurrent(" << m_eglSurface << "):" << eglGetError(); +} +void QEGLPlatformContext::doneCurrent() +{ + eglBindAPI(m_eglApi); + bool ok = eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); + if (!ok) + qWarning() << "QEGLPlatformContext::doneCurrent():" << eglGetError(); +} +void QEGLPlatformContext::swapBuffers() +{ + eglBindAPI(m_eglApi); + bool ok = eglSwapBuffers(m_eglDisplay, m_eglSurface); + if (!ok) + qWarning() << "QEGLPlatformContext::swapBuffers():" << eglGetError(); +} +void* QEGLPlatformContext::getProcAddress(const QString& procName) +{ + eglBindAPI(m_eglApi); + return (void *)eglGetProcAddress(qPrintable(procName)); +} diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h new file mode 100644 index 0000000..19d155a --- /dev/null +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QOPENKODEGLINTEGRATION_H +#define QOPENKODEGLINTEGRATION_H + +#include +#include + +class QEGLPlatformContext : public QPlatformGLContext +{ +public: + QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi); + ~QEGLPlatformContext(); + + void makeCurrent(); + void doneCurrent(); + void swapBuffers(); + void* getProcAddress(const QString& procName); + +private: + EGLContext m_eglContext; + EGLDisplay m_eglDisplay; + EGLSurface m_eglSurface; + EGLenum m_eglApi; +}; + +#endif //QOPENKODEGLINTEGRATION_H diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro index 0614b3b..c039131 100644 --- a/src/plugins/platforms/openkode/openkode.pro +++ b/src/plugins/platforms/openkode/openkode.pro @@ -9,12 +9,14 @@ SOURCES = main.cpp \ qopenkodeintegration.cpp \ qopenkodewindowsurface.cpp \ qopenkodewindow.cpp \ - qopenkodeglintegration.cpp + ../eglconvenience/qeglplatformcontext.cpp \ + ../eglconvenience/qeglconvenience.cpp HEADERS = qopenkodeintegration.h \ qopenkodewindowsurface.h \ qopenkodewindow.h \ - qopenkodeglintegration.h + ../eglconvenience/qeglplatformcontext.h \ + ../eglconvenience/qeglconvenience.h RESOURCES = resources.qrc diff --git a/src/plugins/platforms/openkode/qopenkodeglintegration.cpp b/src/plugins/platforms/openkode/qopenkodeglintegration.cpp deleted file mode 100644 index 4296876..0000000 --- a/src/plugins/platforms/openkode/qopenkodeglintegration.cpp +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qopenkodeglintegration.h" - -#include - -#include -#include -#include - -#include - - -QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi) - : m_eglDisplay(display) - , m_eglSurface(surface) - , m_eglApi(eglApi) -{ - if (m_eglSurface == EGL_NO_SURFACE) { - qWarning("Createing QEGLPlatformContext with no surface"); - } - - eglBindAPI(m_eglApi); - m_eglContext = eglCreateContext(m_eglDisplay,config, KD_NULL,contextAttrs); - if (!m_eglContext) { - qErrnoWarning("QEGLPlatformContext could not create eglContext"); - } -} - -QEGLPlatformContext::~QEGLPlatformContext() -{ - if (m_eglSurface != EGL_NO_SURFACE) { - doneCurrent(); - eglDestroySurface(m_eglDisplay, m_eglSurface); - m_eglSurface = EGL_NO_SURFACE; - } - - if (m_eglContext != EGL_NO_CONTEXT) { - eglDestroyContext(m_eglDisplay, m_eglContext); - m_eglContext = EGL_NO_CONTEXT; - } -} - -void QEGLPlatformContext::makeCurrent() -{ - eglBindAPI(m_eglApi); - bool ok = eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext); - if (!ok) - qWarning() << "QEGLPlatformContext::makeCurrent(" << m_eglSurface << "):" << eglGetError(); -} -void QEGLPlatformContext::doneCurrent() -{ - eglBindAPI(m_eglApi); - bool ok = eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); - if (!ok) - qWarning() << "QEGLPlatformContext::doneCurrent():" << eglGetError(); -} -void QEGLPlatformContext::swapBuffers() -{ - eglBindAPI(m_eglApi); - bool ok = eglSwapBuffers(m_eglDisplay, m_eglSurface); - if (!ok) - qWarning() << "QEGLPlatformContext::swapBuffers():" << eglGetError(); -} -void* QEGLPlatformContext::getProcAddress(const QString& procName) -{ - eglBindAPI(m_eglApi); - return (void *)eglGetProcAddress(qPrintable(procName)); -} diff --git a/src/plugins/platforms/openkode/qopenkodeglintegration.h b/src/plugins/platforms/openkode/qopenkodeglintegration.h deleted file mode 100644 index 19d155a..0000000 --- a/src/plugins/platforms/openkode/qopenkodeglintegration.h +++ /dev/null @@ -1,66 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QOPENKODEGLINTEGRATION_H -#define QOPENKODEGLINTEGRATION_H - -#include -#include - -class QEGLPlatformContext : public QPlatformGLContext -{ -public: - QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi); - ~QEGLPlatformContext(); - - void makeCurrent(); - void doneCurrent(); - void swapBuffers(); - void* getProcAddress(const QString& procName); - -private: - EGLContext m_eglContext; - EGLDisplay m_eglDisplay; - EGLSurface m_eglSurface; - EGLenum m_eglApi; -}; - -#endif //QOPENKODEGLINTEGRATION_H diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index eed268e..270763b 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -42,7 +42,6 @@ #include "qopenkodeintegration.h" #include "qopenkodewindowsurface.h" #include "qopenkodewindow.h" -#include "qopenkodeglintegration.h" #include #include @@ -238,8 +237,27 @@ QPlatformWindow *QOpenKODEIntegration::createPlatformWindow(QWidget *tlw, WId ) QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId wid) const { -// return new QOpenKODEWindowSurface(widget, wid); - return new QGLWindowSurface(widget); + QWindowSurface *returnSurface = 0; + switch (widget->platformWindowFormat().windowApi()) { + + case QPlatformWindowFormat::Raster: + returnSurface = new QOpenKODEWindowSurface(widget, wid); + break; + + case QPlatformWindowFormat::OpenGL: + returnSurface = new QGLWindowSurface(widget); + break; + + case QPlatformWindowFormat::OpenVG: +// returnSurface = new QVGWindowSurface(widget); + break; + + default: + returnSurface = new QGLWindowSurface(widget); + break; + } + + return returnSurface; } bool QOpenKODEIntegration::hasOpenGL() const diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index f62eae5..2213a8f 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -40,7 +40,8 @@ ****************************************************************************/ #include "qopenkodewindow.h" #include "qopenkodeintegration.h" -#include "qopenkodeglintegration.h" +#include "../eglconvenience/qeglplatformcontext.h" +#include "../eglconvenience/qeglconvenience.h" #include #include @@ -54,251 +55,25 @@ #include #include -QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format) -{ - int redSize = format.redBufferSize(); - int greenSize = format.greenBufferSize(); - int blueSize = format.blueBufferSize(); - int alphaSize = format.alphaBufferSize(); - int depthSize = format.depthBufferSize(); - int stencilSize = format.stencilBufferSize(); - int sampleCount = format.samples(); - - // QPlatformWindowFormat uses a magic value of -1 to indicate "don't care", even when a buffer of that - // type has been requested. So we must check QPlatformWindowFormat's booleans too if size is -1: - if (format.alpha() && alphaSize <= 0) - alphaSize = 1; - if (format.depth() && depthSize <= 0) - depthSize = 1; - if (format.stencil() && stencilSize <= 0) - stencilSize = 1; - if (format.sampleBuffers() && sampleCount <= 0) - sampleCount = 1; - - // We want to make sure 16-bit configs are chosen over 32-bit configs as they will provide - // the best performance. The EGL config selection algorithm is a bit stange in this regard: - // The selection criteria for EGL_BUFFER_SIZE is "AtLeast", so we can't use it to discard - // 32-bit configs completely from the selection. So it then comes to the sorting algorithm. - // The red/green/blue sizes have a sort priority of 3, so they are sorted by first. The sort - // order is special and described as "by larger _total_ number of color bits.". So EGL will - // put 32-bit configs in the list before the 16-bit configs. However, the spec also goes on - // to say "If the requested number of bits in attrib_list for a particular component is 0, - // then the number of bits for that component is not considered". This part of the spec also - // seems to imply that setting the red/green/blue bits to zero means none of the components - // are considered and EGL disregards the entire sorting rule. It then looks to the next - // highest priority rule, which is EGL_BUFFER_SIZE. Despite the selection criteria being - // "AtLeast" for EGL_BUFFER_SIZE, it's sort order is "smaller" meaning 16-bit configs are - // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit, - // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that - // if the application sets the red/green/blue size to 5/6/5 on the QPlatformWindowFormat, - // they will probably get a 32-bit config, even when there's an RGB565 config avaliable. - - // Now normalize the values so -1 becomes 0 - redSize = redSize > 0 ? redSize : 0; - greenSize = greenSize > 0 ? greenSize : 0; - blueSize = blueSize > 0 ? blueSize : 0; - alphaSize = alphaSize > 0 ? alphaSize : 0; - depthSize = depthSize > 0 ? depthSize : 0; - stencilSize = stencilSize > 0 ? stencilSize : 0; - sampleCount = sampleCount > 0 ? sampleCount : 0; - - QVector configAttributes; - - configAttributes.append(EGL_RED_SIZE); - configAttributes.append(redSize); - - configAttributes.append(EGL_GREEN_SIZE); - configAttributes.append(greenSize); - configAttributes.append(EGL_BLUE_SIZE); - configAttributes.append(blueSize); - - configAttributes.append(EGL_ALPHA_SIZE); - configAttributes.append(alphaSize); - - configAttributes.append(EGL_DEPTH_SIZE); - configAttributes.append(depthSize); - - configAttributes.append(EGL_STENCIL_SIZE); - configAttributes.append(stencilSize); - - configAttributes.append(EGL_SAMPLES); - configAttributes.append(sampleCount); - - configAttributes.append(EGL_SAMPLE_BUFFERS); - configAttributes.append(sampleCount? 1:0); - - return configAttributes; -} -bool q_reduceConfigAttributes(QVector *configAttributes) +QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) + : QPlatformWindow(tlw) { - int i = -1; - // Reduce the complexity of a configuration request to ask for less - // because the previous request did not result in success. Returns - // true if the complexity was reduced, or false if no further - // reductions in complexity are possible. - - i = configAttributes->indexOf(EGL_SWAP_BEHAVIOR); - if (i >= 0) { - configAttributes->remove(i,2); - } -#ifdef EGL_VG_ALPHA_FORMAT_PRE_BIT - // For OpenVG, we sometimes try to create a surface using a pre-multiplied format. If we can't - // find a config which supports pre-multiplied formats, remove the flag on the surface type: + if (tlw->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenVG) { + m_eglApi = EGL_OPENVG_API; + } else { + m_eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); + m_eglContextAttrs.append(2); - i = configAttributes->indexOf(EGL_SURFACE_TYPE); - if (i >= 0) { - EGLint surfaceType = configAttributes->at(i +1); - if (surfaceType & EGL_VG_ALPHA_FORMAT_PRE_BIT) { - surfaceType ^= EGL_VG_ALPHA_FORMAT_PRE_BIT; - configAttributes->replace(i+1,surfaceType); - return true; - } + m_eglApi = EGL_OPENGL_ES_API; } -#endif - - // EGL chooses configs with the highest color depth over - // those with smaller (but faster) lower color depths. One - // way around this is to set EGL_BUFFER_SIZE to 16, which - // trumps the others. Of course, there may not be a 16-bit - // config avaliable, so it's the first restraint we remove. - i = configAttributes->indexOf(EGL_BUFFER_SIZE); - if (i >= 0) { - if (configAttributes->at(i+1) == 16) { - configAttributes->remove(i,2); - return true; - } - } - - i = configAttributes->indexOf(EGL_SAMPLE_BUFFERS); - if (i >= 0) { - configAttributes->remove(i,2); - i = configAttributes->indexOf(EGL_SAMPLES); - if (i >= 0) { - configAttributes->remove(i,2); - } - return true; - } - - i = configAttributes->indexOf(EGL_ALPHA_SIZE); - if (i >= 0) { - configAttributes->remove(i,2); -#if defined(EGL_BIND_TO_TEXTURE_RGBA) && defined(EGL_BIND_TO_TEXTURE_RGB) - i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGBA); - if (i >= 0) { - configAttributes->replace(i,EGL_BIND_TO_TEXTURE_RGB); - configAttributes->replace(i+1,TRUE); - - } -#endif - return true; - } - - i = configAttributes->indexOf(EGL_STENCIL_SIZE); - if (i >= 0) { - configAttributes->remove(i,2); - return true; - } - i = configAttributes->indexOf(EGL_DEPTH_SIZE); - if (i >= 0) { - configAttributes->remove(i,2); - return true; - } -#ifdef EGL_BIND_TO_TEXTURE_RGB - i = configAttributes->indexOf(EGL_BIND_TO_TEXTURE_RGB); - if (i >= 0) { - configAttributes->remove(i,2); - return true; - } -#endif - - return false; -} - -EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format, EGLenum eglApi) -{ - EGLConfig cfg = 0; - QVector configureAttributes = q_createConfigAttributesFromFormat(format); - configureAttributes.append(EGL_SURFACE_TYPE); - configureAttributes.append(EGL_WINDOW_BIT); - - configureAttributes.append(EGL_RENDERABLE_TYPE); - configureAttributes.append(EGL_OPENGL_ES2_BIT); - - configureAttributes.append(EGL_NONE); - - do { - // Get the number of matching configurations for this set of properties. - EGLint matching = 0; - if (!eglChooseConfig(display, configureAttributes.constData(), 0, 0, &matching) || !matching) - continue; - -// // If we want the best pixel format, then return the first -// // matching configuration. -// if (match == QEgl::BestPixelFormat) { -// eglChooseConfig(display, props.properties(), &cfg, 1, &matching); -// if (matching < 1) -// continue; -// return cfg; -// } - - // Fetch all of the matching configurations and find the - // first that matches the pixel format we wanted. - int i = configureAttributes.indexOf(EGL_RED_SIZE); - int confAttrRed = configureAttributes.at(i+1); - i = configureAttributes.indexOf(EGL_GREEN_SIZE); - int confAttrGreen = configureAttributes.at(i+1); - i = configureAttributes.indexOf(EGL_BLUE_SIZE); - int confAttrBlue = configureAttributes.at(i+1); - i = configureAttributes.indexOf(EGL_ALPHA_SIZE); - int confAttrAlpha = configureAttributes.at(i+1); - - EGLint size = matching; - EGLConfig *configs = new EGLConfig [size]; - eglChooseConfig(display, configureAttributes.constData(), configs, size, &matching); - for (EGLint index = 0; index < size; ++index) { - EGLint red, green, blue, alpha; - eglGetConfigAttrib(display, configs[index], EGL_RED_SIZE, &red); - eglGetConfigAttrib(display, configs[index], EGL_GREEN_SIZE, &green); - eglGetConfigAttrib(display, configs[index], EGL_BLUE_SIZE, &blue); - eglGetConfigAttrib(display, configs[index], EGL_ALPHA_SIZE, &alpha); -// qDebug() << "red" << red << confAttrRed; -// qDebug() << "green" << green << confAttrGreen; -// qDebug() << "blue" << blue << confAttrBlue; -// qDebug() << "alpha" << alpha << confAttrAlpha << (confAttrAlpha == 0 || alpha == confAttrAlpha); - if (red == confAttrRed && - green == confAttrGreen && - blue == confAttrBlue && - (confAttrAlpha == 0 || - alpha == confAttrAlpha)) { - cfg = configs[index]; - delete [] configs; - return cfg; - } - } - delete [] configs; - } while (q_reduceConfigAttributes(&configureAttributes)); - qDebug() << "RETURNING NULL!"; - return 0; -} - -QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) - : QPlatformWindow(tlw) -{ + eglBindAPI(m_eglApi); - m_eglContextAttrs.append(EGL_CONTEXT_CLIENT_VERSION); - m_eglContextAttrs.append(2); m_eglContextAttrs.append(EGL_NONE); - -// m_eglWindowAttrs.append(EGL_RENDER_BUFFER); -// m_eglWindowAttrs.append(EGL_BACK_BUFFER); m_eglWindowAttrs.append(EGL_NONE); - m_eglApi = EGL_OPENGL_ES_API; - eglBindAPI(m_eglApi); - QList screens = QApplicationPrivate::platformIntegration()->screens(); //XXXX: jl figure out how to pick the correct screen. // Q_ASSERT(screens.size() > tlw->d_func()->screenNumber); @@ -314,7 +89,7 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) format.setBlueBufferSize(5); tlw->setPlatformWindowFormat(format); - m_eglConfig = q_configFromQPlatformWindowFormat(screen->eglDisplay(),tlw->platformWindowFormat(),m_eglApi); + m_eglConfig = q_configFromQPlatformWindowFormat(screen->eglDisplay(),tlw->platformWindowFormat()); m_kdWindow = kdCreateWindow(screen->eglDisplay(), m_eglConfig, @@ -360,7 +135,6 @@ QOpenKODEWindow::~QOpenKODEWindow() } void QOpenKODEWindow::setGeometry(const QRect &rect) { - qDebug() << "setting geo"; const QRect geo = geometry(); if (geo.size() != rect.size()) { const KDint windowSize[2] = { rect.width(), rect.height() -1 }; -- cgit v0.12 From ad0d0c4b6f7958b3cde01855b0f3b9c68db5253a Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 12 Jul 2010 15:42:55 +0200 Subject: Add full-screen EGL-based GL backend QGLWidget doesn't work yet --- src/plugins/platforms/eglfs/eglintegration.cpp | 469 +++++++++++++++++++++++++ src/plugins/platforms/eglfs/eglintegration.h | 70 ++++ src/plugins/platforms/eglfs/eglintegration.pro | 14 + src/plugins/platforms/eglfs/main.cpp | 72 ++++ 4 files changed, 625 insertions(+) create mode 100644 src/plugins/platforms/eglfs/eglintegration.cpp create mode 100644 src/plugins/platforms/eglfs/eglintegration.h create mode 100644 src/plugins/platforms/eglfs/eglintegration.pro create mode 100644 src/plugins/platforms/eglfs/main.cpp diff --git a/src/plugins/platforms/eglfs/eglintegration.cpp b/src/plugins/platforms/eglfs/eglintegration.cpp new file mode 100644 index 0000000..5ea0bb2 --- /dev/null +++ b/src/plugins/platforms/eglfs/eglintegration.cpp @@ -0,0 +1,469 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "eglintegration.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../eglconvenience/qeglconvenience.h" + +//#define QEGL_EXTRA_DEBUG +#ifdef QEGL_EXTRA_DEBUG +struct AttrInfo { EGLint attr; const char *name; }; +static struct AttrInfo attrs[] = { + {EGL_BUFFER_SIZE, "EGL_BUFFER_SIZE"}, + {EGL_ALPHA_SIZE, "EGL_ALPHA_SIZE"}, + {EGL_BLUE_SIZE, "EGL_BLUE_SIZE"}, + {EGL_GREEN_SIZE, "EGL_GREEN_SIZE"}, + {EGL_RED_SIZE, "EGL_RED_SIZE"}, + {EGL_DEPTH_SIZE, "EGL_DEPTH_SIZE"}, + {EGL_STENCIL_SIZE, "EGL_STENCIL_SIZE"}, + {EGL_CONFIG_CAVEAT, "EGL_CONFIG_CAVEAT"}, + {EGL_CONFIG_ID, "EGL_CONFIG_ID"}, + {EGL_LEVEL, "EGL_LEVEL"}, + {EGL_MAX_PBUFFER_HEIGHT, "EGL_MAX_PBUFFER_HEIGHT"}, + {EGL_MAX_PBUFFER_PIXELS, "EGL_MAX_PBUFFER_PIXELS"}, + {EGL_MAX_PBUFFER_WIDTH, "EGL_MAX_PBUFFER_WIDTH"}, + {EGL_NATIVE_RENDERABLE, "EGL_NATIVE_RENDERABLE"}, + {EGL_NATIVE_VISUAL_ID, "EGL_NATIVE_VISUAL_ID"}, + {EGL_NATIVE_VISUAL_TYPE, "EGL_NATIVE_VISUAL_TYPE"}, + {EGL_SAMPLES, "EGL_SAMPLES"}, + {EGL_SAMPLE_BUFFERS, "EGL_SAMPLE_BUFFERS"}, + {EGL_SURFACE_TYPE, "EGL_SURFACE_TYPE"}, + {EGL_TRANSPARENT_TYPE, "EGL_TRANSPARENT_TYPE"}, + {EGL_TRANSPARENT_BLUE_VALUE, "EGL_TRANSPARENT_BLUE_VALUE"}, + {EGL_TRANSPARENT_GREEN_VALUE, "EGL_TRANSPARENT_GREEN_VALUE"}, + {EGL_TRANSPARENT_RED_VALUE, "EGL_TRANSPARENT_RED_VALUE"}, + {EGL_BIND_TO_TEXTURE_RGB, "EGL_BIND_TO_TEXTURE_RGB"}, + {EGL_BIND_TO_TEXTURE_RGBA, "EGL_BIND_TO_TEXTURE_RGBA"}, + {EGL_MIN_SWAP_INTERVAL, "EGL_MIN_SWAP_INTERVAL"}, + {EGL_MAX_SWAP_INTERVAL, "EGL_MAX_SWAP_INTERVAL"}, + {-1, 0}}; +#endif //QEGL_EXTRA_DEBUG + + +class QEglScreen; + +class QEglContext : public QPlatformGLContext +{ +public: + QEglContext(QGLFormat& format, QPlatformGLContext* shareContext = 0); + ~QEglContext(); + + virtual void makeCurrent(); + virtual void doneCurrent(); + virtual void swapBuffers(); + virtual void* getProcAddress(const QString& procName); + + EGLContext eglContext() {return m_context;} + QSize size() const { return m_size; } + + QGLFormat format() const { return m_format; } +private: + + EGLContext m_context; + EGLDisplay m_dpy; + EGLSurface m_surface; + QSize m_size; + static bool singleton_watch; + QGLFormat m_format; +}; + +bool QEglContext::singleton_watch = false; + +QEglContext::QEglContext(QGLFormat& format, QPlatformGLContext* shareContext) +{ + if (singleton_watch) + qFatal("There can be only one"); + singleton_watch = true; + + Q_UNUSED(shareContext); + Q_UNUSED(format); + + EGLint major, minor; +#ifdef QEGL_EXTRA_DEBUG + EGLint index; +#endif + if (!eglBindAPI(EGL_OPENGL_ES_API)) { + fprintf(stderr, "Could not bind GL_ES API\n"); + qFatal("EGL error"); + } + + m_dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + if (m_dpy == EGL_NO_DISPLAY) { + fprintf(stderr, "Could not open egl display\n"); + qFatal("EGL error"); + } + fprintf(stderr, "Opened display %p\n", m_dpy); + + if (!eglInitialize(m_dpy, &major, &minor)) { + fprintf(stderr, "Could not initialize egl display\n"); + qFatal("EGL error"); + } + + fprintf(stderr, "Initialized display %d %d\n", major, minor); + + QPlatformWindowFormat platformFormat; + platformFormat.setDepth(16); + platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); + platformFormat.setRedBufferSize(5); + platformFormat.setGreenBufferSize(6); + platformFormat.setBlueBufferSize(5); + EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); + +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "Configuration %d matches requirements\n", (int)config); + + for (index = 0; attrs[index].attr != -1; ++index) { + EGLint value; + if (eglGetConfigAttrib(m_dpy, config, attrs[index].attr, &value)) { + printf("\t%s: %d\n", attrs[index].name, (int)value); + } + } + printf("\n"); +#endif + EGLint temp; + EGLint attribList[32]; + + temp = 0; + + attribList[temp++] = EGL_CONTEXT_CLIENT_VERSION; + attribList[temp++] = 2; // GLES version 2 + attribList[temp++] = EGL_NONE; + + + m_context = eglCreateContext(m_dpy, config, NULL, attribList); + if (m_context == EGL_NO_CONTEXT) { + fprintf(stderr, "Could not create the egl context\n"); + eglTerminate(m_dpy); + qFatal("EGL error"); + } + + m_surface = eglCreateWindowSurface(m_dpy, config, 0, NULL); + if (m_surface == EGL_NO_SURFACE) { + fprintf(stderr, "Could not create the egl surface: error = 0x%x\n", eglGetError()); + eglTerminate(m_dpy); + qFatal("EGL error"); + } + + EGLint w,h; + + eglQuerySurface(m_dpy, m_surface, EGL_WIDTH, &w); + eglQuerySurface(m_dpy, m_surface, EGL_HEIGHT, &h); + fprintf(stderr, "Created surface %dx%d\n", w, h); + + m_size = QSize(w,h); + + +} + +QEglContext::~QEglContext() +{ +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglContext::~QEglContext()"; +#endif +} + +void QEglContext::makeCurrent() +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglContext::makeCurrent\n"); +#endif + if (!eglMakeCurrent(m_dpy, m_surface, m_surface, m_context)) + fprintf(stderr, "Could not make the egl context current\n"); + +#ifdef QEGL_EXTRA_DEBUG + static bool showDebug = true; + if (showDebug) { + showDebug = false; + const char *str = (const char*)glGetString(GL_VENDOR); + qDebug() << "Vendor" << str; + printf("Vendor %s\n", str); + str = (const char*)glGetString(GL_RENDERER); + qDebug() << "Renderer" << str; + printf("Renderer %s\n", str); + str = (const char*)glGetString(GL_VERSION); + qDebug() << "Version" << str; + printf("Version %s\n", str); + + str = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); + qDebug() << "Shader version" << str; + + str = (const char*)glGetString(GL_EXTENSIONS); + qDebug() << "Extensions" << str; + printf("Extensions %s\n", str); + + } +#endif +} + +void QEglContext::doneCurrent() +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglContext::doneCurrent\n"); +#endif + if (!eglMakeCurrent(m_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)) + fprintf(stderr, "Could not release the egl context\n"); +} + +void QEglContext::swapBuffers() +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglContext::swapBuffers\n"); +#endif + eglSwapBuffers(m_dpy, m_surface); +} + +void* QEglContext::getProcAddress(const QString& procName) +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglContext::getProcAddress\n"); +#endif + return (void*)eglGetProcAddress(qPrintable(procName)); +} + + +class QEglPaintDevice; +class QEglScreen : public QPlatformScreen +{ +public: + QEglScreen(); + ~QEglScreen() {} + + QRect geometry() const { /*qDebug() << "QEglScreen::geometry()";*/ return m_geometry; } + int depth() const { qDebug() << "QEglScreen::depth()"; return m_depth; } + QImage::Format format() const {qDebug() << "QEglScreen::format()"; return m_format; } + //QSize physicalSize() const { return m_physicalSize; } //### + +public: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + //QSize m_physicalSize; + QEglContext * m_platformContext; +}; + + +class QEglWindow : public QPlatformWindow +{ +public: + QEglWindow(QWidget *w, QEglScreen *screen); + QPlatformGLContext *glContext(); + + void setGeometry(const QRect &); + WId winId() const; + + QGLContext *context() { return m_context; } + QEglPaintDevice *paintDevice() { return m_pd; } +private: + QEglScreen *m_screen; + QEglPaintDevice *m_pd; + QGLContext *m_context; + WId m_winid; +}; + +class QEglPaintDevice : public QGLPaintDevice +{ +public: + QEglPaintDevice(QEglScreen *screen, QEglWindow *window); + + QSize size() const { return m_screen->geometry().size(); } + QGLContext* context() const { return m_window->context();} + + QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); } + + void beginPaint(){ + QGLPaintDevice::beginPaint(); + } +private: + QEglScreen *m_screen; + QEglWindow * m_window; +}; + + + + +QEglScreen::QEglScreen() + : m_depth(16), m_format(QImage::Format_RGB16), m_platformContext(0) +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglScreen %p\n", this); +#endif + QGLFormat format = QGLFormat::defaultFormat(); + m_platformContext = new QEglContext(format); + + + m_geometry = QRect(QPoint(), m_platformContext->size()); + +} + + + + +QEglPaintDevice::QEglPaintDevice(QEglScreen *screen, QEglWindow *window) + :QGLPaintDevice(), m_screen(screen), m_window(window) +{ +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglPaintDevice" << this << screen << window; +#endif +} + + + +QEglWindow::QEglWindow(QWidget *w, QEglScreen *screen) + : QPlatformWindow(w), m_screen(screen), m_pd(0), m_context(0) +{ + static int serialNo = 0; + m_winid = ++serialNo; +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglWindow %p: %p %p 0x%x\n", this, w, screen, uint(m_winid)); +#endif + m_pd = new QEglPaintDevice(screen, this); + m_context = new QGLContext( screen->m_platformContext->format(), w); + m_context->create(); +} + + +void QEglWindow::setGeometry(const QRect &) +{ + // We only support full-screen windows + QRect rect(m_screen->availableGeometry()); + QWindowSystemInterface::handleGeometryChange(this->widget(), rect); + + QPlatformWindow::setGeometry(rect); +} + +WId QEglWindow::winId() const +{ + return m_winid; +} + + + +QPlatformGLContext *QEglWindow::glContext() +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglWindow::glContext %p\n", m_screen->m_platformContext); +#endif + Q_ASSERT(m_screen); + return m_screen->m_platformContext; +} + +QEglIntegration::QEglIntegration() +{ + m_primaryScreen = new QEglScreen(); + + mScreens.append(m_primaryScreen); +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglIntegration\n"); +#endif +} + +QPixmapData *QEglIntegration::createPixmapData(QPixmapData::PixelType type) const +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglIntegration::createPixmapData %d\n", type); +#endif + return new QGLPixmapData(type); +} + +QPlatformWindow *QEglIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglIntegration::createPlatformWindow" << widget; +#endif + return new QEglWindow(widget, m_primaryScreen); +} + + +class QEglWindowSurface : public QWindowSurface +{ +public: + QEglWindowSurface(QWidget *window, QEglScreen *screen); + ~QEglWindowSurface() {} + + QPaintDevice *paintDevice() { return m_window->paintDevice(); } + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize(const QSize &size) {} +private: + QEglScreen *m_screen; + QEglWindow *m_window; +}; + +QEglWindowSurface::QEglWindowSurface(QWidget *window, QEglScreen *screen) + :QWindowSurface(window), m_screen(screen), m_window(0) +{ +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglWindowSurface" << window << screen; +#endif + m_window = static_cast(window->platformWindow()); +} + + +void QEglWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglWindowSurface::flush"; +#endif + m_screen->m_platformContext->swapBuffers(); +} + +QWindowSurface *QEglIntegration::createWindowSurface(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglIntegration::createWindowSurface" << widget; +#endif + return new QEglWindowSurface(widget, m_primaryScreen); +} diff --git a/src/plugins/platforms/eglfs/eglintegration.h b/src/plugins/platforms/eglfs/eglintegration.h new file mode 100644 index 0000000..7b9b8cf --- /dev/null +++ b/src/plugins/platforms/eglfs/eglintegration.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef EGLINTEGRATION_H +#define EGLINTEGRATION_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QEglScreen; +class QEglIntegration : public QPlatformIntegration +{ +public: + QEglIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QList screens() const { return mScreens; } + +private: + QList mScreens; + QEglScreen *m_primaryScreen; +}; + +QT_END_NAMESPACE + + +#endif diff --git a/src/plugins/platforms/eglfs/eglintegration.pro b/src/plugins/platforms/eglfs/eglintegration.pro new file mode 100644 index 0000000..7cd2f05 --- /dev/null +++ b/src/plugins/platforms/eglfs/eglintegration.pro @@ -0,0 +1,14 @@ +TARGET = eglintegration +TEMPLATE = lib +CONFIG += plugin + +QT += opengl + +SOURCES = main.cpp \ + eglintegration.cpp \ + ../eglconvenience/qeglconvenience.cpp +HEADERS = eglintegration.h \ + ../eglconvenience/qeglconvenience.h + +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target diff --git a/src/plugins/platforms/eglfs/main.cpp b/src/plugins/platforms/eglfs/main.cpp new file mode 100644 index 0000000..adaea78 --- /dev/null +++ b/src/plugins/platforms/eglfs/main.cpp @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include "eglintegration.h" + +QT_BEGIN_NAMESPACE + +class QEglIntegrationPlugin : public QPlatformIntegrationPlugin +{ +public: + QStringList keys() const; + QPlatformIntegration *create(const QString&, const QStringList&); +}; + +QStringList QEglIntegrationPlugin::keys() const +{ + QStringList list; + list << "EglFS"; + return list; +} + +QPlatformIntegration* QEglIntegrationPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList); + if (system.toLower() == "eglfs") + return new QEglIntegration; + + return 0; +} + +Q_EXPORT_PLUGIN2(eglintegration, QEglIntegrationPlugin) + +QT_END_NAMESPACE -- cgit v0.12 From bc5f5d99078d9ca1f4fc80fc7d0fe753d5ef396a Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 14 Jul 2010 15:51:25 +0200 Subject: Temporary hack so QtOpenGL compiles for Lighthouse --- src/opengl/qgl.cpp | 4 ++-- src/opengl/qwindowsurface_gl.cpp | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 4353d4b..2f16b99 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -2263,7 +2263,7 @@ static void convertToGLFormatHelper(QImage &dst, const QImage &img, GLenum textu } } -#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) +#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_QPA) QGLExtensionFuncs& QGLContextPrivate::extensionFuncs(const QGLContext *) { return qt_extensionFuncs; @@ -5301,7 +5301,7 @@ void QGLWidgetPrivate::initContext(QGLContext *context, const QGLWidget* shareWi glcx = new QGLContext(QGLFormat::defaultFormat(), q); } -#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) +#if defined(Q_WS_X11) || defined(Q_WS_MAC) || defined(Q_WS_QWS) || defined(Q_WS_QPA) Q_GLOBAL_STATIC(QString, qt_gl_lib_name) Q_OPENGL_EXPORT void qt_set_gl_library_name(const QString& name) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 6571a76..8c54fd1 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -499,11 +499,13 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & } } #endif +#ifndef Q_WS_QPA //############################################### if (d_ptr->paintedRegion.boundingRect() != geometry()) { // Emits warning if not supported. Should never happen unless // setPartialUpdateSupport(true) has been called. context()->d_func()->swapRegion(&d_ptr->paintedRegion); } else +#endif context()->swapBuffers(); d_ptr->paintedRegion = QRegion(); -- cgit v0.12 From 1bc01e54e190915d64d2e42a0bc18ee01131b1d5 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 15 Jul 2010 15:12:24 +0200 Subject: Remove qDebug() --- src/plugins/platforms/eglfs/eglintegration.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/eglfs/eglintegration.cpp b/src/plugins/platforms/eglfs/eglintegration.cpp index 5ea0bb2..9470c99 100644 --- a/src/plugins/platforms/eglfs/eglintegration.cpp +++ b/src/plugins/platforms/eglfs/eglintegration.cpp @@ -276,9 +276,9 @@ public: QEglScreen(); ~QEglScreen() {} - QRect geometry() const { /*qDebug() << "QEglScreen::geometry()";*/ return m_geometry; } - int depth() const { qDebug() << "QEglScreen::depth()"; return m_depth; } - QImage::Format format() const {qDebug() << "QEglScreen::format()"; return m_format; } + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } //QSize physicalSize() const { return m_physicalSize; } //### public: -- cgit v0.12 From d9b023b5d38d858f29e7095aeb25a84f09a19c13 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 15 Jul 2010 16:57:07 +0200 Subject: Eventloop integration in Lighthouse This is exprimental and does not work with the glib eventloop. --- src/gui/kernel/kernel.pri | 6 +- src/gui/kernel/qeventdispatcher_glib_qpa.cpp | 8 + src/gui/kernel/qeventdispatcher_qpa.cpp | 186 +++++++++++++++++++-- src/gui/kernel/qeventdispatcher_qpa_p.h | 6 +- .../kernel/qplatformeventloopintegration_qpa.cpp | 0 src/gui/kernel/qplatformeventloopintegration_qpa.h | 13 ++ src/gui/kernel/qplatformintegration_qpa.cpp | 5 + src/gui/kernel/qplatformintegration_qpa.h | 5 + src/plugins/platforms/openkode/openkode.pro | 6 +- .../openkode/qopenkodeeventloopintegration.cpp | 29 ++++ .../openkode/qopenkodeeventloopintegration.h | 17 ++ .../platforms/openkode/qopenkodeintegration.cpp | 42 +---- .../platforms/openkode/qopenkodeintegration.h | 4 +- src/plugins/platforms/openkode/qopenkodewindow.cpp | 1 - .../platforms/openkode/qopenkodewindowsurface.cpp | 6 +- 15 files changed, 272 insertions(+), 62 deletions(-) create mode 100644 src/gui/kernel/qplatformeventloopintegration_qpa.cpp create mode 100644 src/gui/kernel/qplatformeventloopintegration_qpa.h create mode 100644 src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp create mode 100644 src/plugins/platforms/openkode/qopenkodeeventloopintegration.h diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 02badee..ba86c1c 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -219,7 +219,8 @@ qpa { kernel/qplatformwindow_qpa.h \ kernel/qplatformwindowformat_qpa.h \ kernel/qplatformglcontext_qpa.h \ - kernel/qdesktopwidget_qpa_p.h + kernel/qdesktopwidget_qpa_p.h \ + kernel/qplatformeventloopintegration_qpa.h SOURCES += \ kernel/qapplication_qpa.cpp \ @@ -238,7 +239,8 @@ qpa { kernel/qplatformintegrationfactory_qpa.cpp \ kernel/qplatformintegrationplugin_qpa.cpp \ kernel/qplatformwindow_qpa.cpp \ - kernel/qplatformwindowformat_qpa.cpp + kernel/qplatformwindowformat_qpa.cpp \ + kernel/qplatformeventloopintegration_qpa.cpp contains(QT_CONFIG, glib) { SOURCES += \ diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp index 9585b26..981991d 100644 --- a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp @@ -133,6 +133,14 @@ QPAEventDispatcherGlib::~QPAEventDispatcherGlib() bool QPAEventDispatcherGlib::processEvents(QEventLoop::ProcessEventsFlags flags) { + static bool init = false; + if (!init) { + if (QApplicationPrivate::platformIntegration()->createEventLoopIntegration()) { + qWarning("Eventloop integration is not supported by the glib event dispatcher"); + qWarning("Use the UNIX event dispatcher by defining environment variable QT_NO_GLIB=1"); + } + init = true; + } return QEventDispatcherGlib::processEvents(flags); } diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp index 5740548..f7f3db3 100644 --- a/src/gui/kernel/qeventdispatcher_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_qpa.cpp @@ -44,24 +44,135 @@ #include "qeventdispatcher_qpa_p.h" #include "private/qeventdispatcher_unix_p.h" #include "qapplication_p.h" -#ifndef QT_NO_THREAD -# include "qmutex.h" -#endif +#include "qplatformeventloopintegration_qpa.h" + #include +#include +#include +#include #include + QT_BEGIN_NAMESPACE QT_USE_NAMESPACE +class Rendezvous +{ +public: + void checkpoint() + { + if (state.testAndSetOrdered(0,1)) { + semaphore.acquire(); + } else if (state.testAndSetAcquire(1,0)) { + semaphore.release(); + } else { + qWarning("Barrier internal error"); + } + } +private: + QSemaphore semaphore; + QAtomicInt state; +}; + +class SelectWorker : public QThread +{ +public: + SelectWorker(QEventDispatcherQPAPrivate *eventDispatcherPrivate) + : QThread(), + m_edPrivate(eventDispatcherPrivate), + m_retVal(0) + { + } + + void setSelectValues(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds) + { + m_nfds = nfds; + m_readfds = readfds; + m_writefds = writefds; + m_exceptfds = exceptfds; + + + } + + int retVal() const { + return m_retVal; + } + +protected: + void run(); + +private: + QEventDispatcherQPAPrivate *m_edPrivate; + int m_retVal; + + int m_nfds; + fd_set *m_readfds, *m_writefds, *m_exceptfds; +}; + class QEventDispatcherQPAPrivate : public QEventDispatcherUNIXPrivate { Q_DECLARE_PUBLIC(QEventDispatcherQPA) public: - inline QEventDispatcherQPAPrivate() - { } -}; + QEventDispatcherQPAPrivate() + : eventLoopIntegration(0), + barrierBeforeBlocking(0), + barrierReturnValue(0), + selectReturnMutex(0), + selectWorkerNeedsSync(true), + selectWorkerHasResult(false), + m_integrationInitialised(false), + m_hasIntegration(false) + { + } + + ~QEventDispatcherQPAPrivate() + { + delete selectWorker; + delete eventLoopIntegration; + delete barrierBeforeBlocking; + delete barrierReturnValue; + delete selectReturnMutex; + } + + bool hasIntegration() const + { + if (!m_integrationInitialised) { + QEventDispatcherQPAPrivate *that = const_cast(this); + if (qApp && (qApp->thread() == QThread::currentThread())) { // guiThread + if (QApplicationPrivate::platformIntegration()) { + that->eventLoopIntegration = QApplicationPrivate::platformIntegration()->createEventLoopIntegration(); + if (that->eventLoopIntegration) { + that->selectWorker = new SelectWorker(that); + that->barrierBeforeBlocking = new Rendezvous; + that->barrierReturnValue = new Rendezvous; + that->selectReturnMutex = new QMutex; + that->selectWorker->start(); + that->m_hasIntegration = true; + if (!QElapsedTimer::isMonotonic()) + qWarning("Having eventloop integration without monotonic timers can lead to undefined behaviour"); + } + } + } + that->m_integrationInitialised = true; + } + return m_hasIntegration; + } + + QPlatformEventLoopIntegration *eventLoopIntegration; + Rendezvous *barrierBeforeBlocking; + Rendezvous *barrierReturnValue; + + QMutex *selectReturnMutex; + bool selectWorkerNeedsSync; + bool selectWorkerHasResult; + + SelectWorker *selectWorker; +private: + bool m_integrationInitialised; + bool m_hasIntegration; +}; QEventDispatcherQPA::QEventDispatcherQPA(QObject *parent) : QEventDispatcherUNIX(*new QEventDispatcherQPAPrivate, parent) @@ -70,10 +181,6 @@ QEventDispatcherQPA::QEventDispatcherQPA(QObject *parent) QEventDispatcherQPA::~QEventDispatcherQPA() { } - - -//#define ZERO_FOR_THE_MOMENT - bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags) { Q_D(QEventDispatcherQPA); @@ -115,17 +222,24 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags) bool QEventDispatcherQPA::hasPendingEvents() { extern uint qGlobalPostedEventsCount(); // from qapplication.cpp - return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::userEventsQueued();; + return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::userEventsQueued(); } -void QEventDispatcherQPA::startingUp() +void QEventDispatcherQPA::registerSocketNotifier(QSocketNotifier *notifier) { + Q_D(QEventDispatcherQPA); + QEventDispatcherUNIX::registerSocketNotifier(notifier); + if (d->hasIntegration()) + wakeUp(); } -void QEventDispatcherQPA::closingDown() +void QEventDispatcherQPA::unregisterSocketNotifier(QSocketNotifier *notifier) { - + Q_D(QEventDispatcherQPA); + QEventDispatcherUNIX::unregisterSocketNotifier(notifier); + if (d->hasIntegration()) + wakeUp(); } void QEventDispatcherQPA::flush() @@ -138,7 +252,49 @@ void QEventDispatcherQPA::flush() int QEventDispatcherQPA::select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, timeval *timeout) { - return QEventDispatcherUNIX::select(nfds, readfds, writefds, exceptfds, timeout); + Q_D(QEventDispatcherQPA); + int retVal = 0; + if (d->hasIntegration()) { + qint64 timeoutmsec = timeout->tv_sec * 1000 + (timeout->tv_usec/1000); + d->selectReturnMutex->lock(); + if (d->selectWorkerNeedsSync) { + if (d->selectWorkerHasResult) { + retVal = d->selectWorker->retVal(); + d->selectWorkerHasResult = false; + + d->selectReturnMutex->unlock(); + d->barrierReturnValue->checkpoint(); + return retVal; + } else { + d->selectWorkerNeedsSync = false; + d->selectWorker->setSelectValues(nfds,readfds, writefds, exceptfds); + d->barrierBeforeBlocking->checkpoint(); + } + } + d->selectReturnMutex->unlock(); + d->eventLoopIntegration->processEvents(timeoutmsec); + retVal = 0; //is 0 if select has not returned + } else { + retVal = QEventDispatcherUNIX::select(nfds, readfds, writefds, exceptfds, timeout); + } + return retVal; } +void SelectWorker::run() +{ + while(true) { + m_retVal = 0; + m_edPrivate->barrierBeforeBlocking->checkpoint(); // wait for mainthread + int tmpRet = qt_safe_select(m_nfds,m_readfds,m_writefds,m_exceptfds,0); + m_edPrivate->selectReturnMutex->lock(); + m_edPrivate->eventLoopIntegration->wakeup(); + + m_edPrivate->selectWorkerNeedsSync = true; + m_edPrivate->selectWorkerHasResult = true; + m_retVal = tmpRet; + + m_edPrivate->selectReturnMutex->unlock(); + m_edPrivate->barrierReturnValue->checkpoint(); + } +} QT_END_NAMESPACE diff --git a/src/gui/kernel/qeventdispatcher_qpa_p.h b/src/gui/kernel/qeventdispatcher_qpa_p.h index 878daaa..8065c3e 100644 --- a/src/gui/kernel/qeventdispatcher_qpa_p.h +++ b/src/gui/kernel/qeventdispatcher_qpa_p.h @@ -71,10 +71,10 @@ public: bool processEvents(QEventLoop::ProcessEventsFlags flags); bool hasPendingEvents(); - void flush(); + void registerSocketNotifier(QSocketNotifier *notifier); + void unregisterSocketNotifier(QSocketNotifier *notifier); - void startingUp(); - void closingDown(); + void flush(); protected: int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.cpp b/src/gui/kernel/qplatformeventloopintegration_qpa.cpp new file mode 100644 index 0000000..e69de29 diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.h b/src/gui/kernel/qplatformeventloopintegration_qpa.h new file mode 100644 index 0000000..5e4c227 --- /dev/null +++ b/src/gui/kernel/qplatformeventloopintegration_qpa.h @@ -0,0 +1,13 @@ +#ifndef QPLATFORMEVENTLOOPINTEGRATION_QPA_H +#define QPLATFORMEVENTLOOPINTEGRATION_QPA_H + +#include + +class QPlatformEventLoopIntegration +{ +public: + virtual void processEvents( qint64 msec ) = 0; + virtual void wakeup() = 0; +}; + +#endif // QPLATFORMEVENTLOOPINTEGRATION_QPA_H diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index 8666911..b3f46ce 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -56,6 +56,11 @@ QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, in return QPixmap(); } +QPlatformEventLoopIntegration *QPlatformIntegration::createEventLoopIntegration() const +{ + return 0; +} + bool QPlatformIntegration::hasOpenGL() const { return false; diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 8c1659f..11377e7 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -55,6 +55,7 @@ class QPlatformWindow; class QWindowSurface; class QBlittable; class QWidget; +class QPlatformEventLoopIntegration; class Q_GUI_EXPORT QPlatformIntegration { @@ -73,8 +74,12 @@ public: virtual bool isVirtualDesktop() { return false; } virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; +// Experimental + virtual QPlatformEventLoopIntegration *createEventLoopIntegration() const; + virtual bool hasOpenGL() const; + }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro index c039131..2d90b15 100644 --- a/src/plugins/platforms/openkode/openkode.pro +++ b/src/plugins/platforms/openkode/openkode.pro @@ -10,13 +10,15 @@ SOURCES = main.cpp \ qopenkodewindowsurface.cpp \ qopenkodewindow.cpp \ ../eglconvenience/qeglplatformcontext.cpp \ - ../eglconvenience/qeglconvenience.cpp + ../eglconvenience/qeglconvenience.cpp \ + qopenkodeeventloopintegration.cpp HEADERS = qopenkodeintegration.h \ qopenkodewindowsurface.h \ qopenkodewindow.h \ ../eglconvenience/qeglplatformcontext.h \ - ../eglconvenience/qeglconvenience.h + ../eglconvenience/qeglconvenience.h \ + qopenkodeeventloopintegration.h RESOURCES = resources.qrc diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp new file mode 100644 index 0000000..467b5b5 --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp @@ -0,0 +1,29 @@ +#include "qopenkodeeventloopintegration.h" + +#include + +#include + +QOpenKODEEventLoopIntegration::QOpenKODEEventLoopIntegration() +{ + m_kdThread = kdThreadSelf(); +} + +void QOpenKODEEventLoopIntegration::processEvents(qint64 msec) +{ + if (msec == 0) + msec = -1; + const KDEvent *event = kdWaitEvent(msec*1000); + if (event) { + kdDefaultEvent(event); + while ((event = kdWaitEvent(0)) != 0) { + kdDefaultEvent(event); + } + } +} + +void QOpenKODEEventLoopIntegration::wakeup() +{ + KDEvent *event = kdCreateEvent(); + kdPostThreadEvent(event,m_kdThread); +} diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h new file mode 100644 index 0000000..ef04640 --- /dev/null +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h @@ -0,0 +1,17 @@ +#ifndef QOPENKODEEVENTLOOPINTEGRATION_H +#define QOPENKODEEVENTLOOPINTEGRATION_H + +#include + +class KDThread; +class QOpenKODEEventLoopIntegration : public QPlatformEventLoopIntegration +{ +public: + QOpenKODEEventLoopIntegration(); + void processEvents(qint64 msec); + void wakeup(); +private: + KDThread *m_kdThread; +}; + +#endif // QOPENKODEEVENTLOOPINTEGRATION_H diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index 270763b..5dada28 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -42,6 +42,7 @@ #include "qopenkodeintegration.h" #include "qopenkodewindowsurface.h" #include "qopenkodewindow.h" +#include "qopenkodeeventloopintegration.h" #include #include @@ -184,41 +185,11 @@ static GLuint loadShaders(const QString &vertexShader, const QString &fragmentSh return prog; } -class QOpenKODEEventLoopHelper : public QThread -{ -public: - QOpenKODEEventLoopHelper(QSemaphore *m) - : eventMutex(m) - { - m->acquire(); - } - -protected: - void run() - { - if (kdInitializeNV() == KD_ENOTINITIALIZED) { - qFatal("Did not manage to initialize openkode"); - } - eventMutex->release(); - - const KDEvent *event; - while ((event = kdWaitEvent(-1)) != 0) { - qDebug() << "!!! received event!"; - kdDefaultEvent(event); - } - } - -private: - QSemaphore *eventMutex; -}; - QOpenKODEIntegration::QOpenKODEIntegration() - : eventMutex(1) { - QOpenKODEEventLoopHelper *loop = new QOpenKODEEventLoopHelper(&eventMutex); - loop->start(); - eventMutex.acquire(); // block until initialization done - + if (kdInitializeNV() == KD_ENOTINITIALIZED) { + qFatal("Did not manage to initialize openkode"); + } QOpenKODEScreen *mPrimaryScreen = new QOpenKODEScreen(); mScreens.append(mPrimaryScreen); @@ -265,6 +236,11 @@ bool QOpenKODEIntegration::hasOpenGL() const return true; } +QPlatformEventLoopIntegration *QOpenKODEIntegration::createEventLoopIntegration() const +{ + return new QOpenKODEEventLoopIntegration; +} + GLuint QOpenKODEIntegration::blitterProgram() { static GLuint shaderProgram = 0; diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index 9029086..0eaf127 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -86,7 +86,8 @@ public: QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; bool hasOpenGL() const; - QPlatformGLContext * createGLContext(); + + QPlatformEventLoopIntegration *createEventLoopIntegration() const; virtual QList screens() const { return mScreens; } @@ -94,7 +95,6 @@ public: private: QList mScreens; - QSemaphore eventMutex; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 2213a8f..faba2fb 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -60,7 +60,6 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) : QPlatformWindow(tlw) { - if (tlw->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenVG) { m_eglApi = EGL_OPENVG_API; } else { diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp index a349031..84e27f5 100644 --- a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp @@ -93,8 +93,6 @@ void QOpenKODEWindowSurface::flush(QWidget *widget, const QRegion ®ion, const y = boundingRect.y(); } - qDebug() << "flush" << widget << offset << region.boundingRect() << mImage.format() << blitImage.format(); - GLuint shaderProgram = QOpenKODEIntegration::blitterProgram(); glUseProgram(shaderProgram); @@ -125,7 +123,7 @@ void QOpenKODEWindowSurface::flush(QWidget *widget, const QRegion ®ion, const glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, mImage.bits()); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, mImage.bits()); // Enable vertex attribute associated with vertex position glEnableVertexAttribArray(posId); @@ -166,7 +164,7 @@ void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) Q_UNUSED(region); if (mImage.isNull()) { m_platformGLContext = window()->platformWindow()->glContext(); - mImage = QImage(size(),QImage::Format_RGB32); + mImage = QImage(size(),QImage::Format_RGB888); } } -- cgit v0.12 From a7182f757e5414d7baf21fdc098f3f6649e6a1d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 20 Jul 2010 13:16:09 +0200 Subject: Cleanup directfb input handling in lighthouse --- src/plugins/platforms/directfb/qdirectfbinput.cpp | 97 +++++++--------------- src/plugins/platforms/directfb/qdirectfbinput.h | 42 +++------- .../platforms/directfb/qdirectfbintegration.cpp | 24 +++++- .../platforms/directfb/qdirectfbintegration.h | 6 +- src/plugins/platforms/directfb/qdirectfbwindow.cpp | 8 +- src/plugins/platforms/directfb/qdirectfbwindow.h | 5 +- 6 files changed, 74 insertions(+), 108 deletions(-) diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp index 90c3348..7101b7b 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.cpp +++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp @@ -10,89 +10,61 @@ #include -InputSocketWaiter::InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent) - : QThread(parent), m_eventBuffer(eventBuffer),m_shouldStop(false) +QDirectFbInput::QDirectFbInput(QObject *parent) + : QObject(parent), m_shouldStop(false) { - this->start(); -} + m_dfbInterface = QDirectFbConvenience::dfbInterface(); -InputSocketWaiter::~InputSocketWaiter() -{ - m_shouldStop = true; - m_eventBuffer->WakeUp(m_eventBuffer); - m_cleanupMutex.lock(); -} + DFBResult ok = m_dfbInterface->CreateEventBuffer(m_dfbInterface,&m_eventBuffer); + if (ok != DFB_OK) + DirectFBError("Failed to initialise eventbuffer", ok); + + m_dfbInterface->GetDisplayLayer(m_dfbInterface,DLID_PRIMARY, &m_dfbDisplayLayer); -void InputSocketWaiter::continueWaitingForEvents() -{ - m_finishedProcessingEvents.wakeAll(); } -void InputSocketWaiter::run() +void QDirectFbInput::runInputEventLoop() { - m_cleanupMutex.lock(); - while (1) { + while (true) { m_eventBuffer->WaitForEvent(m_eventBuffer); - if (m_shouldStop) + if (m_shouldStop) { + m_waitStop.release(); break; - emit newEvent(); - QMutex waitForProcessingMutex; - waitForProcessingMutex.lock(); - m_finishedProcessingEvents.wait(&waitForProcessingMutex); - } - m_cleanupMutex.unlock(); -} - -QDirectFbInput *QDirectFbInput::instance() -{ - static QDirectFbInput *input = 0; - if (!input) { - input = new QDirectFbInput(); + } + handleEvents(); } - return input; } -QDirectFbInput::QDirectFbInput() - : QObject() +void QDirectFbInput::stopInputEventLoop() { - dfbInterface = QDirectFbConvenience::dfbInterface(); - - DFBResult ok = dfbInterface->CreateEventBuffer(dfbInterface,&eventBuffer); - if (ok != DFB_OK) - DirectFBError("Failed to initialise eventbuffer", ok); - - dfbInterface->GetDisplayLayer(dfbInterface,DLID_PRIMARY, &dfbDisplayLayer); - - m_inputHandler = new InputSocketWaiter(eventBuffer,this); - connect(m_inputHandler,SIGNAL(newEvent()),this,SLOT(handleEvents())); - - connect(QApplication::instance(),SIGNAL(aboutToQuit()),SLOT(applicationEnd())); + m_shouldStop = true; + m_waitStop.acquire(); } void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) { - tlwMap.insert(id,tlw); + m_tlwMap.insert(id,tlw); IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); + m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,id,&window); - window->AttachEventBuffer(window,eventBuffer); + window->AttachEventBuffer(window,m_eventBuffer); } void QDirectFbInput::removeWindow(WId wId) { IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,wId, &window); + m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,wId, &window); - window->DetachEventBuffer(window,eventBuffer); - tlwMap.remove(wId); + window->DetachEventBuffer(window,m_eventBuffer); + m_tlwMap.remove(wId); } void QDirectFbInput::handleEvents() { - DFBResult hasEvent = eventBuffer->HasEvent(eventBuffer); + DFBResult hasEvent = m_eventBuffer->HasEvent(m_eventBuffer); while(hasEvent == DFB_OK){ DFBEvent event; - DFBResult ok = eventBuffer->GetEvent(eventBuffer,&event); + DFBResult ok = m_eventBuffer->GetEvent(m_eventBuffer,&event); if (ok != DFB_OK) DirectFBError("Failed to get event",ok); if (event.clazz == DFEC_WINDOW) { @@ -118,9 +90,8 @@ void QDirectFbInput::handleEvents() } - hasEvent = eventBuffer->HasEvent(eventBuffer); + hasEvent = m_eventBuffer->HasEvent(m_eventBuffer); } - m_inputHandler->continueWaitingForEvents(); } void QDirectFbInput::handleMouseEvents(const DFBEvent &event) @@ -140,22 +111,16 @@ void QDirectFbInput::handleMouseEvents(const DFBEvent &event) } else if (event.window.type == DWET_BUTTONUP) { window->UngrabPointer(window); } - QWidget *tlw = tlwMap.value(event.window.window_id); + QWidget *tlw = m_tlwMap.value(event.window.window_id); QWindowSystemInterface::handleMouseEvent(tlw, timestamp, p, globalPos, buttons); } -void QDirectFbInput::applicationEnd() -{ - delete m_inputHandler; - m_inputHandler = 0; -} - void QDirectFbInput::handleWheelEvent(const DFBEvent &event) { QPoint p(event.window.cx, event.window.cy); QPoint globalPos = globalPoint(event); long timestamp = (event.window.timestamp.tv_sec*1000) + (event.window.timestamp.tv_usec/1000); - QWidget *tlw = tlwMap.value(event.window.window_id); + QWidget *tlw = m_tlwMap.value(event.window.window_id); QWindowSystemInterface::handleWheelEvent(tlw, timestamp, p, globalPos, event.window.step*120, Qt::Vertical); @@ -172,13 +137,13 @@ void QDirectFbInput::handleKeyEvents(const DFBEvent &event) QChar character; if (DFB_KEY_TYPE(event.window.key_symbol) == DIKT_UNICODE) character = QChar(event.window.key_symbol); - QWidget *tlw = tlwMap.value(event.window.window_id); + QWidget *tlw = m_tlwMap.value(event.window.window_id); QWindowSystemInterface::handleKeyEvent(tlw, timestamp, type, key, modifiers, character); } void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) { - QWidget *tlw = tlwMap.value(event.window.window_id); + QWidget *tlw = m_tlwMap.value(event.window.window_id); switch (event.window.type) { case DWET_ENTER: QWindowSystemInterface::handleEnterEvent(tlw); @@ -194,7 +159,7 @@ void QDirectFbInput::handleEnterLeaveEvents(const DFBEvent &event) inline QPoint QDirectFbInput::globalPoint(const DFBEvent &event) const { IDirectFBWindow *window; - dfbDisplayLayer->GetWindow(dfbDisplayLayer,event.window.window_id,&window); + m_dfbDisplayLayer->GetWindow(m_dfbDisplayLayer,event.window.window_id,&window); int x,y; window->GetPosition(window,&x,&y); return QPoint(event.window.cx +x, event.window.cy + y); diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h index 016e7f1..0b2e7ed 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.h +++ b/src/plugins/platforms/directfb/qdirectfbinput.h @@ -1,9 +1,7 @@ #ifndef QDIRECTFBINPUT_H #define QDIRECTFBINPUT_H -#include -#include -#include +#include #include #include #include @@ -13,53 +11,35 @@ #include -class InputSocketWaiter : public QThread -{ - Q_OBJECT -public: - InputSocketWaiter(IDirectFBEventBuffer *eventBuffer, QObject *parent); - virtual ~InputSocketWaiter(); - void continueWaitingForEvents(); -protected: - void run(); -signals: - void newEvent(); -private: - IDirectFBEventBuffer *m_eventBuffer; - bool m_shouldStop; - QMutex m_cleanupMutex; - QWaitCondition m_finishedProcessingEvents; -}; - class QDirectFbInput : public QObject { Q_OBJECT public: - static QDirectFbInput *instance(); + QDirectFbInput(QObject *parent); void addWindow(DFBWindowID id, QWidget *tlw); void removeWindow(WId wId); public slots: + void runInputEventLoop(); + void stopInputEventLoop(); void handleEvents(); - void applicationEnd(); private: - QDirectFbInput(); - void handleMouseEvents(const DFBEvent &event); void handleWheelEvent(const DFBEvent &event); void handleKeyEvents(const DFBEvent &event); void handleEnterLeaveEvents(const DFBEvent &event); - IDirectFB *dfbInterface; - IDirectFBDisplayLayer *dfbDisplayLayer; - IDirectFBEventBuffer *eventBuffer; + inline QPoint globalPoint(const DFBEvent &event) const; - QHashtlwMap; - inline QPoint globalPoint(const DFBEvent &event) const; + IDirectFB *m_dfbInterface; + IDirectFBDisplayLayer *m_dfbDisplayLayer; + IDirectFBEventBuffer *m_eventBuffer; - InputSocketWaiter *m_inputHandler; + bool m_shouldStop; + QSemaphore m_waitStop; + QHashm_tlwMap; }; #endif // QDIRECTFBINPUT_H diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index 60fce7e..c47fc8d 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -49,9 +49,10 @@ #include #include -#include -#include -#include +#include +#include +#include +#include QT_BEGIN_NAMESPACE @@ -94,8 +95,22 @@ QDirectFbIntegration::QDirectFbIntegration() } delete[] argv; + QDirectFbScreen *primaryScreen = new QDirectFbScreen(0); mScreens.append(primaryScreen); + + mInputRunner = new QThread; + mInput = new QDirectFbInput(0); + mInput->moveToThread(mInputRunner); + QObject::connect(mInputRunner,SIGNAL(started()),mInput,SLOT(runInputEventLoop())); + mInputRunner->start(); +} + +QDirectFbIntegration::~QDirectFbIntegration() +{ + mInput->stopInputEventLoop(); + delete mInputRunner; + delete mInput; } QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) const @@ -109,7 +124,8 @@ QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId winId) const { Q_UNUSED(winId); - return new QDirectFbWindow(widget); + QDirectFbInput *input = const_cast(mInput);//gah + return new QDirectFbWindow(widget,input); } QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *widget, WId winId) const diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h index c0e770f..27847e2 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.h +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -50,6 +50,7 @@ QT_BEGIN_NAMESPACE +class QThread; class QDirectFBCursor; class QDirectFbScreen : public QPlatformScreen @@ -81,6 +82,7 @@ class QDirectFbIntegration : public QPlatformIntegration { public: QDirectFbIntegration(); + ~QDirectFbIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; @@ -89,10 +91,10 @@ public: QList screens() const { return mScreens; } - - private: QList mScreens; + QDirectFbInput *mInput; + QThread *mInputRunner; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp index d88953e..30e6f5a 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp @@ -45,8 +45,8 @@ #include -QDirectFbWindow::QDirectFbWindow(QWidget *tlw) - : QPlatformWindow(tlw) +QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler) + : QPlatformWindow(tlw), m_inputHandler(inputhandler) { IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); DFBDisplayLayerConfig layerConfig; @@ -83,12 +83,12 @@ QDirectFbWindow::QDirectFbWindow(QWidget *tlw) DFBWindowID id; m_dfbWindow->GetID(m_dfbWindow, &id); - QDirectFbInput::instance()->addWindow(id,tlw); + m_inputHandler->addWindow(id,tlw); } QDirectFbWindow::~QDirectFbWindow() { - QDirectFbInput::instance()->removeWindow(winId()); + m_inputHandler->removeWindow(winId()); m_dfbWindow->Destroy(m_dfbWindow); } diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h index d5fd408..b512afd 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.h +++ b/src/plugins/platforms/directfb/qdirectfbwindow.h @@ -45,13 +45,14 @@ #include #include "qdirectfbconvenience.h" +#include "qdirectfbinput.h" QT_BEGIN_NAMESPACE class QDirectFbWindow : public QPlatformWindow { public: - QDirectFbWindow(QWidget *tlw); + QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler); ~QDirectFbWindow(); void setGeometry(const QRect &rect); @@ -66,6 +67,8 @@ public: private: IDirectFBWindow *m_dfbWindow; + QDirectFbInput *m_inputHandler; + }; QT_END_NAMESPACE -- cgit v0.12 From 8dd6b648a7cf1625e078e91328ffebfa4a92529c Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 20 Jul 2010 16:13:13 +0200 Subject: Add Lighthouse #ifdefs --- tests/auto/qwidget/tst_qwidget.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index f91ad6b..5e39c27 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -357,7 +357,7 @@ private slots: void setClearAndResizeMask(); void maskedUpdate(); -#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) +#if defined(Q_WS_WIN) || defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) void syntheticEnterLeave(); void taskQTBUG_4055_sendSyntheticEnterLeave(); #endif @@ -1979,7 +1979,7 @@ void tst_QWidget::showMaximized() layouted.showNormal(); QVERIFY(!(layouted.windowState() & Qt::WindowMaximized)); -#if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE) && !defined(Q_WS_S60) +#if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE) && !defined(Q_WS_S60) && !defined(Q_WS_QPA) //embedded may choose a different size to fit on the screen. QCOMPARE(layouted.size(), layouted.sizeHint()); #endif @@ -2078,7 +2078,7 @@ void tst_QWidget::showFullScreen() layouted.showNormal(); QVERIFY(!(layouted.windowState() & Qt::WindowFullScreen)); -#if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE) && !defined (Q_WS_S60) +#if !defined(Q_WS_QWS) && !defined(Q_OS_WINCE) && !defined (Q_WS_S60) && !defined(Q_WS_QPA) //embedded may choose a different size to fit on the screen. QCOMPARE(layouted.size(), layouted.sizeHint()); #endif @@ -6362,7 +6362,7 @@ void tst_QWidget::compatibilityChildInsertedEvents() EventRecorder::EventList() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) -#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) +#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) || defined(Q_WS_QPA) << qMakePair(&widget, QEvent::UpdateRequest) #endif ; @@ -6458,7 +6458,7 @@ void tst_QWidget::compatibilityChildInsertedEvents() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) << qMakePair(&widget, QEvent::Type(QEvent::User + 2)) -#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) +#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) || defined(Q_WS_QPA) << qMakePair(&widget, QEvent::UpdateRequest) #endif ; @@ -6554,7 +6554,7 @@ void tst_QWidget::compatibilityChildInsertedEvents() << qMakePair(&widget, QEvent::PolishRequest) << qMakePair(&widget, QEvent::Type(QEvent::User + 1)) << qMakePair(&widget, QEvent::Type(QEvent::User + 2)) -#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) +#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_S60) || defined(Q_WS_QPA) << qMakePair(&widget, QEvent::UpdateRequest) #endif ; @@ -9167,7 +9167,7 @@ void tst_QWidget::maskedUpdate() QTRY_COMPARE(grandChild.paintedRegion, QRegion(grandChild.rect())); // Full update. } -#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) +#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_WS_QWS) || defined(Q_WS_QPA) void tst_QWidget::syntheticEnterLeave() { class MyWidget : public QWidget -- cgit v0.12 From bc786ded04aa316f99cf9ac4cf8b714ee46575b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 20 Jul 2010 14:38:12 +0200 Subject: Made the rest of QWindowSystemInterface callback functions thread safe and cleaned up the headerfile --- src/gui/kernel/kernel.pri | 7 +- src/gui/kernel/qapplication_p.h | 29 +-- src/gui/kernel/qapplication_qpa.cpp | 133 ++++++++------ src/gui/kernel/qeventdispatcher_glib_qpa.cpp | 10 +- src/gui/kernel/qeventdispatcher_qpa.cpp | 10 +- src/gui/kernel/qwindowsysteminterface.cpp | 186 ------------------- src/gui/kernel/qwindowsysteminterface.h | 169 ------------------ src/gui/kernel/qwindowsysteminterface_qpa.cpp | 246 ++++++++++++++++++++++++++ src/gui/kernel/qwindowsysteminterface_qpa.h | 96 ++++++++++ src/gui/kernel/qwindowsysteminterface_qpa_p.h | 201 +++++++++++++++++++++ 10 files changed, 657 insertions(+), 430 deletions(-) delete mode 100644 src/gui/kernel/qwindowsysteminterface.cpp delete mode 100644 src/gui/kernel/qwindowsysteminterface.h create mode 100644 src/gui/kernel/qwindowsysteminterface_qpa.cpp create mode 100644 src/gui/kernel/qwindowsysteminterface_qpa.h create mode 100644 src/gui/kernel/qwindowsysteminterface_qpa_p.h diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index ba86c1c..43b1ab8 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -48,7 +48,7 @@ HEADERS += \ kernel/qgesturemanager_p.h \ kernel/qsoftkeymanager_p.h \ kernel/qsoftkeymanager_common_p.h \ - kernel/qguiplatformplugin_p.h + kernel/qguiplatformplugin_p.h \ SOURCES += \ kernel/qaction.cpp \ @@ -211,7 +211,8 @@ qpa { kernel/qgenericpluginfactory_qpa.h \ kernel/qgenericplugin_qpa.h \ kernel/qeventdispatcher_qpa_p.h \ - kernel/qwindowsysteminterface.h \ + kernel/qwindowsysteminterface_qpa.h \ + kernel/qwindowsysteminterface_qpa_p.h \ kernel/qplatformintegration_qpa.h \ kernel/qplatformscreen_qpa.h \ kernel/qplatformintegrationfactory_qpa_p.h \ @@ -233,7 +234,7 @@ qpa { kernel/qkeymapper_qws.cpp \ kernel/qwidget_qpa.cpp \ kernel/qeventdispatcher_qpa.cpp \ - kernel/qwindowsysteminterface.cpp \ + kernel/qwindowsysteminterface_qpa.cpp \ kernel/qplatformintegration_qpa.cpp \ kernel/qplatformscreen_qpa.cpp \ kernel/qplatformintegrationfactory_qpa.cpp \ diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 68ec648..0602d82 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -78,6 +78,7 @@ #endif #ifdef Q_WS_QPA #include +#include "qwindowsysteminterface_qpa_p.h" #include "QtGui/qplatformintegration_qpa.h" #endif @@ -490,19 +491,27 @@ public: #endif #ifdef Q_WS_QPA - static void processMouseEvent(QWindowSystemInterface::MouseEvent *e); - static void processKeyEvent(QWindowSystemInterface::KeyEvent *e); - static void processWheelEvent(QWindowSystemInterface::WheelEvent *e); - static void processTouchEvent(QWindowSystemInterface::TouchEvent *e); + static void processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e); + static void processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e); + static void processWheelEvent(QWindowSystemInterfacePrivate::WheelEvent *e); + static void processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e); - static void processCloseEvent(QWidget *tlw); - static void processGeometryChange(QWidget *tlw, const QRect &newRect); + static void processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e); - static void processUserEvent(QWindowSystemInterface::UserEvent *e); + static void processMoveEvent(QWindowSystemInterfacePrivate::MoveEvent *e); + static void processResizeEvent(QWindowSystemInterfacePrivate::ResizeEvent *e); - static void reportScreenCount(int count); - static void reportGeometryChange(int screenIndex); - static void reportAvailableGeometryChange(int screenIndex); + static void processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e); + static void processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e); + + static void processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e); + +// static void reportScreenCount(int count); + static void reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *e); +// static void reportGeometryChange(int screenIndex); + static void reportGeometryChange(QWindowSystemInterfacePrivate::ScreenGeometryEvent *e); +// static void reportAvailableGeometryChange(int screenIndex); + static void reportAvailableGeometryChange(QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e); #endif diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index 2adcfc1..42907ae 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -60,6 +60,7 @@ #include #include #include +#include "qwindowsysteminterface_qpa_p.h" #include #include "qdesktopwidget_qpa_p.h" @@ -86,26 +87,48 @@ static int mousePressX; static int mousePressY; static int mouse_double_click_distance = 5; -void QApplicationPrivate::processUserEvent(QWindowSystemInterface::UserEvent *e) +void QApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *e) { switch(e->type) { - case QEvent::MouseButtonDblClick: // if mouse event, calculate appropriate widget and local coordinates - case QEvent::MouseButtonPress: - case QEvent::MouseButtonRelease: - case QEvent::MouseMove: - QApplicationPrivate::processMouseEvent(static_cast(e)); + case QWindowSystemInterfacePrivate::Mouse: + QApplicationPrivate::processMouseEvent(static_cast(e)); break; - case QEvent::Wheel: - QApplicationPrivate::processWheelEvent(static_cast(e)); + case QWindowSystemInterfacePrivate::Wheel: + QApplicationPrivate::processWheelEvent(static_cast(e)); break; - case QEvent::KeyPress: - case QEvent::KeyRelease: - QApplicationPrivate::processKeyEvent(static_cast(e)); + case QWindowSystemInterfacePrivate::Key: + QApplicationPrivate::processKeyEvent(static_cast(e)); + break; + case QWindowSystemInterfacePrivate::Touch: + QApplicationPrivate::processTouchEvent(static_cast(e)); + break; + case QWindowSystemInterfacePrivate::Move: + QApplicationPrivate::processMoveEvent(static_cast(e)); + break; + case QWindowSystemInterfacePrivate::Resize: + QApplicationPrivate::processResizeEvent(static_cast(e)); + break; + case QWindowSystemInterfacePrivate::Enter: + QApplicationPrivate::processEnterEvent(static_cast(e)); + break; + case QWindowSystemInterfacePrivate::Leave: + QApplicationPrivate::processLeaveEvent(static_cast(e)); + break; + case QWindowSystemInterfacePrivate::Close: + QApplicationPrivate::processCloseEvent( + static_cast(e)); + break; + case QWindowSystemInterfacePrivate::ScreenCountChange: + QApplicationPrivate::reportScreenCount( + static_cast(e)); break; - case QEvent::TouchBegin: - case QEvent::TouchUpdate: - case QEvent::TouchEnd: - QApplicationPrivate::processTouchEvent(static_cast(e)); + case QWindowSystemInterfacePrivate::ScreenGeometry: + QApplicationPrivate::reportGeometryChange( + static_cast(e)); + break; + case QWindowSystemInterfacePrivate::ScreenAvailableGeometry: + QApplicationPrivate::reportAvailableGeometryChange( + static_cast(e)); break; default: qWarning() << "Unknown user input event type:" << e->type; @@ -570,7 +593,7 @@ void QApplication::setMainWidget(QWidget *mainWidget) } #endif -void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent *e) +void QApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent *e) { // qDebug() << "handleMouseEvent" << tlw << ev.pos() << ev.globalPos() << hex << ev.buttons(); static QWeakPointer implicit_mouse_grabber; @@ -579,8 +602,9 @@ void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent * // move first Qt::MouseButtons stateChange = e->buttons ^ buttons; if (e->globalPos != QPoint(qt_last_x, qt_last_y) && (stateChange != Qt::NoButton)) { - QWindowSystemInterface::MouseEvent * newMouseEvent = new QWindowSystemInterface::MouseEvent(e->widget.data(), e->timestamp, e->localPos, e->globalPos, e->buttons); - QWindowSystemInterfacePrivate::userEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop + QWindowSystemInterfacePrivate::MouseEvent * newMouseEvent = + new QWindowSystemInterfacePrivate::MouseEvent(e->widget.data(), e->timestamp, e->localPos, e->globalPos, e->buttons); + QWindowSystemInterfacePrivate::windowSystemEventQueue.prepend(newMouseEvent); // just in case the move triggers a new event loop stateChange = Qt::NoButton; } @@ -639,7 +663,7 @@ void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent * implicit_mouse_grabber.clear(); //### how should popup mode and implicit mouse grab interact? - } else if (tlw && app_do_modal && !qt_try_modal(tlw, e->type) ) { + } else if (tlw && app_do_modal && !qt_try_modal(tlw, QEvent::MouseButtonRelease) ) { //even if we're blocked by modality, we should deliver the mouse release event.. //### this code is not completely correct: multiple buttons can be pressed simultaneously if (!(implicit_mouse_grabber && buttons == Qt::NoButton)) { @@ -717,7 +741,7 @@ void QApplicationPrivate::processMouseEvent(QWindowSystemInterface::MouseEvent * //### there's a lot of duplicated logic here -- refactoring required! -void QApplicationPrivate::processWheelEvent(QWindowSystemInterface::WheelEvent *e) +void QApplicationPrivate::processWheelEvent(QWindowSystemInterfacePrivate::WheelEvent *e) { // QPoint localPoint = ev.pos(); QPoint globalPoint = e->globalPos; @@ -739,7 +763,7 @@ void QApplicationPrivate::processWheelEvent(QWindowSystemInterface::WheelEvent * mouseWidget = mouseWindow; - if (app_do_modal && !qt_try_modal(mouseWindow, e->type) ) { + if (app_do_modal && !qt_try_modal(mouseWindow, QEvent::Wheel) ) { qDebug() << "modal blocked wheel event" << mouseWindow; return; } @@ -759,7 +783,7 @@ void QApplicationPrivate::processWheelEvent(QWindowSystemInterface::WheelEvent * // Remember, Qt convention is: keyboard state is state *before* -void QApplicationPrivate::processKeyEvent(QWindowSystemInterface::KeyEvent *e) +void QApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEvent *e) { QWidget *focusW = 0; if (self->inPopupMode()) { @@ -778,50 +802,54 @@ void QApplicationPrivate::processKeyEvent(QWindowSystemInterface::KeyEvent *e) if (!focusW) return; - if (app_do_modal && !qt_try_modal(focusW, e->type)) + if (app_do_modal && !qt_try_modal(focusW, e->keyType)) return; modifiers = e->modifiers; - QKeyEvent ev(e->type, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); + QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); QApplication::sendSpontaneousEvent(focusW, &ev); } -void QApplicationPrivate::processGeometryChange(QWidget *tlw, const QRect &newRect) +void QApplicationPrivate::processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e) { - if (!tlw->isWindow()) - return; //geo of native child widgets is controlled by lighthouse - //so we already have sent the events; besides this new rect - //is not mapped to parent + QApplicationPrivate::dispatchEnterLeave(e->enter.data(),0); + qt_last_mouse_receiver = e->enter.data(); +} - QRect cr(tlw->geometry()); +void QApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e) +{ + QApplicationPrivate::dispatchEnterLeave(0,qt_last_mouse_receiver); - bool isResize = cr.size() != newRect.size(); - bool isMove = cr.topLeft() != newRect.topLeft(); - tlw->data->crect = newRect; - if (isResize) { - QResizeEvent e(tlw->data->crect.size(), cr.size()); - QApplication::sendSpontaneousEvent(tlw, &e); - tlw->update(); - } + if (e->leave.data() && !e->leave.data()->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen + QApplicationPrivate::dispatchEnterLeave(0, e->leave.data()); + qt_last_mouse_receiver = 0; - if (isMove) { - //### frame geometry - QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft()); - QApplication::sendSpontaneousEvent(tlw, &e); - } } -void QApplicationPrivate::processCloseEvent(QWidget *tlw) +void QApplicationPrivate::processMoveEvent(QWindowSystemInterfacePrivate::MoveEvent *moveEvent) +{ + QMoveEvent e(moveEvent->moved.data()->geometry().topLeft(), moveEvent->newPos); + QApplication::sendSpontaneousEvent(moveEvent->moved.data(), &e); +} + +void QApplicationPrivate::processResizeEvent(QWindowSystemInterfacePrivate::ResizeEvent *e) +{ + QResizeEvent resizeEvent(e->sizeChanged.data()->data->crect.size(), e->newSize); + QApplication::sendSpontaneousEvent(e->sizeChanged.data(), &resizeEvent); + e->sizeChanged.data()->update(); +} + +void QApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e) { - tlw->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); + e->topLevel.data()->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); } -void QApplicationPrivate::processTouchEvent(QWindowSystemInterface::TouchEvent *e) +void QApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e) { translateRawTouchEvent(e->widget.data(), e->devType, e->points); } -void QApplicationPrivate::reportScreenCount(int count) +void QApplicationPrivate::reportScreenCount(QWindowSystemInterfacePrivate::ScreenCountEvent *e) { // This operation only makes sense after the QApplication constructor runs if (QCoreApplication::startingUp()) @@ -830,10 +858,10 @@ void QApplicationPrivate::reportScreenCount(int count) QApplication::desktop()->d_func()->updateScreenList(); // signal anything listening for creation or deletion of screens QDesktopWidget *desktop = QApplication::desktop(); - emit desktop->screenCountChanged(count); + emit desktop->screenCountChanged(e->count); } -void QApplicationPrivate::reportGeometryChange(int screenIndex) +void QApplicationPrivate::reportGeometryChange(QWindowSystemInterfacePrivate::ScreenGeometryEvent *e) { // This operation only makes sense after the QApplication constructor runs if (QCoreApplication::startingUp()) @@ -843,7 +871,7 @@ void QApplicationPrivate::reportGeometryChange(int screenIndex) // signal anything listening for screen geometry changes QDesktopWidget *desktop = QApplication::desktop(); - emit desktop->resized(screenIndex); + emit desktop->resized(e->index); // make sure maximized and fullscreen windows are updated QWidgetList list = QApplication::topLevelWidgets(); @@ -856,7 +884,8 @@ void QApplicationPrivate::reportGeometryChange(int screenIndex) } } -void QApplicationPrivate::reportAvailableGeometryChange(int screenIndex) +void QApplicationPrivate::reportAvailableGeometryChange( + QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e) { // This operation only makes sense after the QApplication constructor runs if (QCoreApplication::startingUp()) @@ -866,7 +895,7 @@ void QApplicationPrivate::reportAvailableGeometryChange(int screenIndex) // signal anything listening for screen geometry changes QDesktopWidget *desktop = QApplication::desktop(); - emit desktop->workAreaResized(screenIndex); + emit desktop->workAreaResized(e->index); // make sure maximized and fullscreen windows are updated QWidgetList list = QApplication::topLevelWidgets(); diff --git a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp index 981991d..01d40ca 100644 --- a/src/gui/kernel/qeventdispatcher_glib_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_glib_qpa.cpp @@ -64,7 +64,7 @@ static gboolean userEventSourcePrepare(GSource *s, gint *timeout) Q_UNUSED(s) Q_UNUSED(timeout) - return QWindowSystemInterfacePrivate::userEventsQueued() > 0; + return QWindowSystemInterfacePrivate::windowSystemEventsQueued() > 0; } static gboolean userEventSourceCheck(GSource *source) @@ -76,9 +76,9 @@ static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) { GUserEventSource * source = reinterpret_cast(s); - QWindowSystemInterface::UserEvent * event; - while (QWindowSystemInterfacePrivate::userEventsQueued()) { - event = QWindowSystemInterfacePrivate::getUserEvent(); + QWindowSystemInterfacePrivate::WindowSystemEvent * event; + while (QWindowSystemInterfacePrivate::windowSystemEventsQueued()) { + event = QWindowSystemInterfacePrivate::getWindowSystemEvent(); if (!event) break; @@ -87,7 +87,7 @@ static gboolean userEventSourceDispatch(GSource *s, GSourceFunc, gpointer) delete event; continue; } - QApplicationPrivate::processUserEvent(event); + QApplicationPrivate::processWindowSystemEvent(event); delete event; } diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp index f7f3db3..4464036 100644 --- a/src/gui/kernel/qeventdispatcher_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_qpa.cpp @@ -191,11 +191,11 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags) QApplication::sendPostedEvents(); while (!d->interrupt) { // also flushes output buffer ###can be optimized - QWindowSystemInterface::UserEvent *event; + QWindowSystemInterfacePrivate::WindowSystemEvent *event; if (!(flags & QEventLoop::ExcludeUserInputEvents) - && QWindowSystemInterfacePrivate::userEventsQueued() > 0) { + && QWindowSystemInterfacePrivate::windowSystemEventsQueued() > 0) { // process a pending user input event - event = QWindowSystemInterfacePrivate::getUserEvent(); + event = QWindowSystemInterfacePrivate::getWindowSystemEvent(); if (!event) break; } else { @@ -208,7 +208,7 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags) } nevents++; - QApplicationPrivate::processUserEvent(event); + QApplicationPrivate::processWindowSystemEvent(event); delete event; } @@ -222,7 +222,7 @@ bool QEventDispatcherQPA::processEvents(QEventLoop::ProcessEventsFlags flags) bool QEventDispatcherQPA::hasPendingEvents() { extern uint qGlobalPostedEventsCount(); // from qapplication.cpp - return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::userEventsQueued(); + return qGlobalPostedEventsCount() || QWindowSystemInterfacePrivate::windowSystemEventsQueued(); } void QEventDispatcherQPA::registerSocketNotifier(QSocketNotifier *notifier) diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp deleted file mode 100644 index 4cf9ded..0000000 --- a/src/gui/kernel/qwindowsysteminterface.cpp +++ /dev/null @@ -1,186 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "qwindowsysteminterface.h" -#include "qapplication_p.h" -#include - -QT_BEGIN_NAMESPACE - - -QTime QWindowSystemInterface::eventTime; - -//------------------------------------------------------------ -// -// Callback functions for plugins: -// - -QList QWindowSystemInterfacePrivate::userEventQueue; -QMutex QWindowSystemInterfacePrivate::queueMutex; - -extern QPointer qt_last_mouse_receiver; -/*! - -\a tlw == 0 means that \a ev is in global coords only - - -*/ - - -void QWindowSystemInterface::handleEnterEvent(QWidget *tlw) -{ - if (tlw) { - QApplicationPrivate::dispatchEnterLeave(tlw, 0); - qt_last_mouse_receiver = tlw; - } -} - -void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw) -{ - QApplicationPrivate::dispatchEnterLeave(0, qt_last_mouse_receiver); - if (tlw && !tlw->isAncestorOf(qt_last_mouse_receiver)) //(???) this should not happen - QApplicationPrivate::dispatchEnterLeave(0, tlw); - qt_last_mouse_receiver = 0; -} - -void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect) -{ - if (tlw) - QApplicationPrivate::processGeometryChange(tlw, newRect); -} - - -void QWindowSystemInterface::handleCloseEvent(QWidget *tlw) -{ - if (tlw) - QApplicationPrivate::processCloseEvent(tlw); -} - -void QWindowSystemInterface::handleMouseEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) -{ - MouseEvent * e = new MouseEvent(tlw, timestamp, local, global, b); - QWindowSystemInterfacePrivate::queueUserEvent(e); -} - -void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) -{ - KeyEvent * e = new KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count); - QWindowSystemInterfacePrivate::queueUserEvent(e); -} - -void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) -{ - WheelEvent *e = new WheelEvent(tlw, timestamp, local, global, d, o); - QWindowSystemInterfacePrivate::queueUserEvent(e); -} - -QWindowSystemInterface::UserEvent * QWindowSystemInterfacePrivate::getUserEvent() -{ - queueMutex.lock(); - QWindowSystemInterface::UserEvent *ret; - if (userEventQueue.isEmpty()) - ret = 0; - else - ret = userEventQueue.takeFirst(); - queueMutex.unlock(); - return ret; -} - -void QWindowSystemInterfacePrivate::queueUserEvent(QWindowSystemInterface::UserEvent *ev) -{ - queueMutex.lock(); - userEventQueue.append(ev); - queueMutex.unlock(); - - QAbstractEventDispatcher *dispatcher = QApplicationPrivate::qt_qpa_core_dispatcher(); - if (dispatcher) - dispatcher->wakeUp(); -} - -void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points) -{ - if (!points.size()) // Touch events must have at least one point - return; - - QList touchPoints; - Qt::TouchPointStates states; - QTouchEvent::TouchPoint p; - - int primaryPoint = -1; - QList::const_iterator point = points.constBegin(); - QList::const_iterator end = points.constEnd(); - while (point != end) { - p.setId(point->id); - p.setPressure(point->pressure); - states |= point->state; - Qt::TouchPointStates state = point->state; - if (point->isPrimary) { - state |= Qt::TouchPointPrimary; - primaryPoint = point->id; - } - p.setState(state); - p.setRect(point->area); - p.setScreenPos(point->area.center()); - p.setNormalizedPos(point->normalPosition); - - touchPoints.append(p); - ++point; - } - - TouchEvent *e = new TouchEvent(tlw, timestamp, type, devType, touchPoints); - QWindowSystemInterfacePrivate::queueUserEvent(e); -} - -void QWindowSystemInterface::handleScreenGeometryChange(int screenIndex) -{ - QApplicationPrivate::reportGeometryChange(screenIndex); -} - -void QWindowSystemInterface::handleScreenAvailableGeometryChange(int screenIndex) -{ - QApplicationPrivate::reportAvailableGeometryChange(screenIndex); -} - -void QWindowSystemInterface::handleScreenCountChange(int count) -{ - QApplicationPrivate::reportScreenCount(count); -} - -QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h deleted file mode 100644 index 614f983..0000000 --- a/src/gui/kernel/qwindowsysteminterface.h +++ /dev/null @@ -1,169 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtGui module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QWINDOWSYSTEMINTERFACE_H -#define QWINDOWSYSTEMINTERFACE_H - -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -class Q_GUI_EXPORT QWindowSystemInterface -{ -public: - static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { - handleMouseEvent(w, eventTime.elapsed(), local, global, b); - } - - static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b); - - static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) { - handleKeyEvent(w, eventTime.elapsed(), t, k, mods, text, autorep, count); - } - - static void handleKeyEvent(QWidget *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1); - - static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { - handleWheelEvent(w, eventTime.elapsed(), local, global, d, o); - } - - static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); - - struct TouchPoint { - int id; // for application use - bool isPrimary; // for application use - QPointF normalPosition; // touch device coordinates, (0 to 1, 0 to 1) - QRectF area; // the touched area, centered at position in screen coordinates - qreal pressure; // 0 to 1 - Qt::TouchPointStates state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released} - }; - - static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points) { - handleTouchEvent(w, eventTime.elapsed(), type, devType, points); - } - - static void handleTouchEvent(QWidget *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points); - - // delivered directly by the plugin via spontaneous events - static void handleGeometryChange(QWidget *w, const QRect &newRect); - static void handleCloseEvent(QWidget *w); - static void handleEnterEvent(QWidget *w); - static void handleLeaveEvent(QWidget *w); - - // Changes to the screen - static void handleScreenGeometryChange(int screenIndex); - static void handleScreenAvailableGeometryChange(int screenIndex); - static void handleScreenCountChange(int count); - - class UserEvent { - public: - UserEvent(QWidget * w, ulong time, QEvent::Type t) - { widget = QWeakPointer(w); type = t; timestamp = time; } - QWeakPointer widget; - QEvent::Type type; - unsigned long timestamp; - }; - - class MouseEvent : public UserEvent { - public: - MouseEvent(QWidget * w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b) - : UserEvent(w, time, QEvent::MouseMove){ localPos = local; globalPos = global; buttons = b; } - QPoint localPos; - QPoint globalPos; - Qt::MouseButtons buttons; - }; - - class WheelEvent : public UserEvent { - public: - WheelEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) - : UserEvent(w, time, QEvent::Wheel) { localPos = local; globalPos = global; delta = d; orient = o; } - int delta; - QPoint localPos; - QPoint globalPos; - Qt::Orientation orient; - }; - - class KeyEvent : public UserEvent { - public: - KeyEvent(QWidget *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) - :UserEvent(w, time, t){ key = k; unicode = text; repeat = autorep; repeatCount = count; modifiers = mods; } - int key; - QString unicode; - bool repeat; - ushort repeatCount; - Qt::KeyboardModifiers modifiers; - }; - - class TouchEvent : public UserEvent { - public: - TouchEvent(QWidget *w, ulong time, QEvent::Type t, QTouchEvent::DeviceType d, const QList &p) - :UserEvent(w, time, t) { devType = d; points = p; } - QTouchEvent::DeviceType devType; - QList points; - }; - -private: - static QTime eventTime; - -}; - -class QWindowSystemInterfacePrivate { -public: - static QList userEventQueue; - static QMutex queueMutex; - - static int userEventsQueued() { queueMutex.lock(); int ret = userEventQueue.count(); queueMutex.unlock(); return ret; } - static QWindowSystemInterface::UserEvent * getUserEvent(); - static void queueUserEvent(QWindowSystemInterface::UserEvent *ev); -}; - -QT_END_NAMESPACE -QT_END_HEADER -#endif // QWINDOWSYSTEMINTERFACE_H diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp new file mode 100644 index 0000000..dd78e8e --- /dev/null +++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp @@ -0,0 +1,246 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qwindowsysteminterface_qpa.h" +#include "qwindowsysteminterface_qpa_p.h" +#include "qapplication_p.h" +#include + +QT_BEGIN_NAMESPACE + + +QTime QWindowSystemInterfacePrivate::eventTime; + +//------------------------------------------------------------ +// +// Callback functions for plugins: +// + +QList QWindowSystemInterfacePrivate::windowSystemEventQueue; +QMutex QWindowSystemInterfacePrivate::queueMutex; + +extern QPointer qt_last_mouse_receiver; + + +void QWindowSystemInterface::handleEnterEvent(QWidget *tlw) +{ + if (tlw) { + QWindowSystemInterfacePrivate::EnterEvent *e = new QWindowSystemInterfacePrivate::EnterEvent(tlw); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); + } +} + +void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw) +{ + QWindowSystemInterfacePrivate::LeaveEvent *e = new QWindowSystemInterfacePrivate::LeaveEvent(tlw); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + +void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect) +{ + if (!tlw) + return; + if (!tlw->isWindow()) + return; //geo of native child widgets is controlled by lighthouse + //so we already have sent the events; besides this new rect + //is not mapped to parent + + QRect cr(tlw->geometry()); + + bool isResize = cr.size() != newRect.size(); + bool isMove = cr.topLeft() != newRect.topLeft(); + if (isResize) { + QWindowSystemInterfacePrivate::ResizeEvent *resizeEvent = + new QWindowSystemInterfacePrivate::ResizeEvent(tlw,newRect.size()); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(resizeEvent); + } + + if (isMove) { + QWindowSystemInterfacePrivate::MoveEvent *moveEvent = + new QWindowSystemInterfacePrivate::MoveEvent(tlw,newRect.topLeft()); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(moveEvent); + } +} + + +void QWindowSystemInterface::handleCloseEvent(QWidget *tlw) +{ + if (tlw) { + QWindowSystemInterfacePrivate::CloseEvent *e = + new QWindowSystemInterfacePrivate::CloseEvent(tlw); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); + } +} + +/*! + +\a tlw == 0 means that \a ev is in global coords only + + +*/ +void QWindowSystemInterface::handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { + unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); + handleMouseEvent(w, time, local, global, b); +} + +void QWindowSystemInterface::handleMouseEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) +{ + QWindowSystemInterfacePrivate::MouseEvent * e = + new QWindowSystemInterfacePrivate::MouseEvent(tlw, timestamp, local, global, b); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + +void QWindowSystemInterface::handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) { + unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); + handleKeyEvent(w, time, t, k, mods, text, autorep, count); +} + +void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) +{ + QWindowSystemInterfacePrivate::KeyEvent * e = + new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + +void QWindowSystemInterface::handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { + unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); + handleWheelEvent(w, time, local, global, d, o); +} + +void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) +{ + QWindowSystemInterfacePrivate::WheelEvent *e = + new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, d, o); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + +int QWindowSystemInterfacePrivate::windowSystemEventsQueued() +{ + queueMutex.lock(); + int ret = windowSystemEventQueue.count(); + queueMutex.unlock(); + return ret; +} + +QWindowSystemInterfacePrivate::WindowSystemEvent * QWindowSystemInterfacePrivate::getWindowSystemEvent() +{ + queueMutex.lock(); + QWindowSystemInterfacePrivate::WindowSystemEvent *ret; + if (windowSystemEventQueue.isEmpty()) + ret = 0; + else + ret = windowSystemEventQueue.takeFirst(); + queueMutex.unlock(); + return ret; +} + +void QWindowSystemInterfacePrivate::queueWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent *ev) +{ + queueMutex.lock(); + windowSystemEventQueue.append(ev); + queueMutex.unlock(); + + QAbstractEventDispatcher *dispatcher = QApplicationPrivate::qt_qpa_core_dispatcher(); + if (dispatcher) + dispatcher->wakeUp(); +} + +void QWindowSystemInterface::handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points) { + unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed(); + handleTouchEvent(w, time, type, devType, points); +} + +void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points) +{ + if (!points.size()) // Touch events must have at least one point + return; + + QList touchPoints; + Qt::TouchPointStates states; + QTouchEvent::TouchPoint p; + + int primaryPoint = -1; + QList::const_iterator point = points.constBegin(); + QList::const_iterator end = points.constEnd(); + while (point != end) { + p.setId(point->id); + p.setPressure(point->pressure); + states |= point->state; + Qt::TouchPointStates state = point->state; + if (point->isPrimary) { + state |= Qt::TouchPointPrimary; + primaryPoint = point->id; + } + p.setState(state); + p.setRect(point->area); + p.setScreenPos(point->area.center()); + p.setNormalizedPos(point->normalPosition); + + touchPoints.append(p); + ++point; + } + + QWindowSystemInterfacePrivate::TouchEvent *e = + new QWindowSystemInterfacePrivate::TouchEvent(tlw, timestamp, type, devType, touchPoints); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + +void QWindowSystemInterface::handleScreenGeometryChange(int screenIndex) +{ + QWindowSystemInterfacePrivate::ScreenGeometryEvent *e = + new QWindowSystemInterfacePrivate::ScreenGeometryEvent(screenIndex); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + +void QWindowSystemInterface::handleScreenAvailableGeometryChange(int screenIndex) +{ + QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent *e = + new QWindowSystemInterfacePrivate::ScreenAvailableGeometryEvent(screenIndex); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + +void QWindowSystemInterface::handleScreenCountChange(int count) +{ + QWindowSystemInterfacePrivate::ScreenCountEvent *e = + new QWindowSystemInterfacePrivate::ScreenCountEvent(count); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); +} + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.h b/src/gui/kernel/qwindowsysteminterface_qpa.h new file mode 100644 index 0000000..e57fa8e --- /dev/null +++ b/src/gui/kernel/qwindowsysteminterface_qpa.h @@ -0,0 +1,96 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QWINDOWSYSTEMINTERFACE_H +#define QWINDOWSYSTEMINTERFACE_H + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +class Q_GUI_EXPORT QWindowSystemInterface +{ +public: + static void handleMouseEvent(QWidget *w, const QPoint & local, const QPoint & global, Qt::MouseButtons b); + static void handleMouseEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b); + + static void handleKeyEvent(QWidget *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1); + static void handleKeyEvent(QWidget *w, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1); + + static void handleWheelEvent(QWidget *w, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); + static void handleWheelEvent(QWidget *w, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o); + + struct TouchPoint { + int id; // for application use + bool isPrimary; // for application use + QPointF normalPosition; // touch device coordinates, (0 to 1, 0 to 1) + QRectF area; // the touched area, centered at position in screen coordinates + qreal pressure; // 0 to 1 + Qt::TouchPointStates state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released} + }; + + static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points); + static void handleTouchEvent(QWidget *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points); + + // delivered directly by the plugin via spontaneous events + static void handleGeometryChange(QWidget *w, const QRect &newRect); + static void handleCloseEvent(QWidget *w); + static void handleEnterEvent(QWidget *w); + static void handleLeaveEvent(QWidget *w); + + // Changes to the screen + static void handleScreenGeometryChange(int screenIndex); + static void handleScreenAvailableGeometryChange(int screenIndex); + static void handleScreenCountChange(int count); +}; + +QT_END_NAMESPACE +QT_END_HEADER +#endif // QWINDOWSYSTEMINTERFACE_H diff --git a/src/gui/kernel/qwindowsysteminterface_qpa_p.h b/src/gui/kernel/qwindowsysteminterface_qpa_p.h new file mode 100644 index 0000000..90d1702 --- /dev/null +++ b/src/gui/kernel/qwindowsysteminterface_qpa_p.h @@ -0,0 +1,201 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QWINDOWSYSTEMINTERFACE_QPA_P_H +#define QWINDOWSYSTEMINTERFACE_QPA_P_H + +#include "qwindowsysteminterface_qpa.h" + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QWindowSystemInterfacePrivate { +public: + Q_ENUMS(EventType); + + enum EventType { + Close, + Resize, + Move, + Enter, + Leave, + Mouse, + Wheel, + Key, + Touch, + ScreenGeometry, + ScreenAvailableGeometry, + ScreenCountChange + }; + + class WindowSystemEvent { + public: + WindowSystemEvent(EventType t) + : type(t) { } + EventType type; + }; + + class CloseEvent : public WindowSystemEvent { + public: + CloseEvent(QWidget *tlw) + : WindowSystemEvent(Close), topLevel(tlw) { } + QWeakPointer topLevel; + }; + + class ResizeEvent : public WindowSystemEvent { + public: + ResizeEvent(QWidget *sizeChanged, const QSize &newSize) + : WindowSystemEvent(Resize), sizeChanged(sizeChanged), newSize(newSize) + { } + QWeakPointer sizeChanged; + QSize newSize; + }; + + class MoveEvent : public WindowSystemEvent { + public: + MoveEvent(QWidget *moved, const QPoint &newPos) + : WindowSystemEvent(Move), moved(moved), newPos(newPos) + { } + QWeakPointer moved; + QPoint newPos; + }; + + class EnterEvent : public WindowSystemEvent { + public: + EnterEvent(QWidget *enter) + : WindowSystemEvent(Enter), enter(enter) + { } + QWeakPointer enter; + }; + + class LeaveEvent : public WindowSystemEvent { + public: + LeaveEvent(QWidget *leave) + : WindowSystemEvent(Leave), leave(leave) + { } + QWeakPointer leave; + }; + + class UserEvent : public WindowSystemEvent { + public: + UserEvent(QWidget * w, ulong time, EventType t) + : WindowSystemEvent(t), widget(w), timestamp(time) { } + QWeakPointer widget; + unsigned long timestamp; + }; + + class MouseEvent : public UserEvent { + public: + MouseEvent(QWidget * w, ulong time, const QPoint & local, const QPoint & global, Qt::MouseButtons b) + : UserEvent(w, time, Mouse), localPos(local), globalPos(global), buttons(b) { } + QPoint localPos; + QPoint globalPos; + Qt::MouseButtons buttons; + }; + + class WheelEvent : public UserEvent { + public: + WheelEvent(QWidget *w, ulong time, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) + : UserEvent(w, time, Wheel), delta(d), localPos(local), globalPos(global), orient(o) { } + int delta; + QPoint localPos; + QPoint globalPos; + Qt::Orientation orient; + }; + + class KeyEvent : public UserEvent { + public: + KeyEvent(QWidget *w, ulong time, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1) + :UserEvent(w, time, Key), key(k), unicode(text), repeat(autorep), + repeatCount(count), modifiers(mods), keyType(t) { } + int key; + QString unicode; + bool repeat; + ushort repeatCount; + Qt::KeyboardModifiers modifiers; + QEvent::Type keyType; + }; + + class TouchEvent : public UserEvent { + public: + TouchEvent(QWidget *w, ulong time, QEvent::Type t, QTouchEvent::DeviceType d, const QList &p) + :UserEvent(w, time, Touch), devType(d), points(p), touchType(t) { } + QTouchEvent::DeviceType devType; + QList points; + QEvent::Type touchType; + + }; + + class ScreenCountEvent : public WindowSystemEvent { + public: + ScreenCountEvent (int count) + : WindowSystemEvent(ScreenCountChange) , count(count) { } + int count; + }; + + class ScreenGeometryEvent : public WindowSystemEvent { + public: + ScreenGeometryEvent(int index) + : WindowSystemEvent(ScreenGeometry), index(index) { } + int index; + }; + + class ScreenAvailableGeometryEvent : public WindowSystemEvent { + public: + ScreenAvailableGeometryEvent(int index) + : WindowSystemEvent(ScreenAvailableGeometry), index(index) { } + int index; + }; + + static QList windowSystemEventQueue; + static QMutex queueMutex; + + static int windowSystemEventsQueued(); + static WindowSystemEvent * getWindowSystemEvent(); + static void queueWindowSystemEvent(WindowSystemEvent *ev); + + static QTime eventTime; +}; + +QT_END_HEADER +QT_END_NAMESPACE + +#endif // QWINDOWSYSTEMINTERFACE_QPA_P_H -- cgit v0.12 From a17b1d7c18737de1b3c6122a1f9766cbaa0d7c26 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 21 Jul 2010 10:14:18 +0200 Subject: Less ugly hack to make QtOpenGL compile on Lighthouse This cleans up after commit bc5f5d99078d9ca1f4fc80fc7d0fe753d5ef396a --- src/gui/painting/qwindowsurface_p.h | 1 + src/opengl/qwindowsurface_gl.cpp | 2 -- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/src/gui/painting/qwindowsurface_p.h b/src/gui/painting/qwindowsurface_p.h index da02f5a..c845021 100644 --- a/src/gui/painting/qwindowsurface_p.h +++ b/src/gui/painting/qwindowsurface_p.h @@ -86,6 +86,7 @@ public: #else virtual void resize(const QSize &size); QSize size() const; + inline QRect geometry() const { return QRect(QPoint(), size()); } //### cleanup before Qt 5 #endif virtual bool scroll(const QRegion &area, int dx, int dy); diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index 8c54fd1..6571a76 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -499,13 +499,11 @@ void QGLWindowSurface::flush(QWidget *widget, const QRegion &rgn, const QPoint & } } #endif -#ifndef Q_WS_QPA //############################################### if (d_ptr->paintedRegion.boundingRect() != geometry()) { // Emits warning if not supported. Should never happen unless // setPartialUpdateSupport(true) has been called. context()->d_func()->swapRegion(&d_ptr->paintedRegion); } else -#endif context()->swapBuffers(); d_ptr->paintedRegion = QRegion(); -- cgit v0.12 From 22edd932bb5af334bbe1a1774604332eee14814f Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 21 Jul 2010 12:24:02 +0200 Subject: Don't turn off exceptions by default in Lighthouse --- configure | 3 --- 1 file changed, 3 deletions(-) diff --git a/configure b/configure index 97f7fb2..a7f545a 100755 --- a/configure +++ b/configure @@ -7007,9 +7007,6 @@ fi if [ "$CFG_EXCEPTIONS" = "unspecified" -a "$PLATFORM_QWS" = "yes" ]; then CFG_EXCEPTIONS=no fi -if [ "$CFG_EXCEPTIONS" = "unspecified" -a "$PLATFORM_QPA" = "yes" ]; then - CFG_EXCEPTIONS=no -fi if [ "$CFG_EXCEPTIONS" != "no" ]; then QTCONFIG_CONFIG="$QTCONFIG_CONFIG exceptions" -- cgit v0.12 From 705f497bc21863b2bb580d39aabe371622f937aa Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 21 Jul 2010 12:40:42 +0200 Subject: Skip QSound autotest on Lighthouse QSound is not implemented. --- tests/auto/qsound/tst_qsound.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/auto/qsound/tst_qsound.cpp b/tests/auto/qsound/tst_qsound.cpp index eda99a1..295ed91 100644 --- a/tests/auto/qsound/tst_qsound.cpp +++ b/tests/auto/qsound/tst_qsound.cpp @@ -63,6 +63,9 @@ private slots: void tst_QSound::checkFinished() { +#if defined(Q_WS_QPA) + QSKIP("QSound is not implemented on Lighthouse", SkipAll); +#else QSound sound(SRCDIR"4.wav"); sound.setLoops(3); sound.play(); @@ -72,15 +75,17 @@ void tst_QSound::checkFinished() QEXPECT_FAIL("", "QSound buggy on embedded (task QTBUG-157)", Abort); #endif QVERIFY(sound.isFinished() ); +#endif } void tst_QSound::staticPlay() { QSKIP("Test disabled -- only for manual purposes", SkipAll); - +#if !defined(Q_WS_QPA) // Check that you hear sound with static play also. QSound::play(SRCDIR"4.wav"); QTest::qWait(2000); +#endif } QTEST_MAIN(tst_QSound); -- cgit v0.12 From e485492385d5d02b170617251678a7d28d39c8d9 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 21 Jul 2010 13:31:33 +0200 Subject: Header file cleanup Make the "headers" autotest pass on Lighthouse --- src/gui/kernel/qplatformwindowformat_qpa.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h index 3c5f907..09c3520 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.h +++ b/src/gui/kernel/qplatformwindowformat_qpa.h @@ -41,7 +41,7 @@ #ifndef QPLATFORMWINDOWFORMAT_QPA_H #define QPLATFORMWINDOWFORMAT_QPA_H -#include +#include QT_BEGIN_HEADER -- cgit v0.12 From 3d0c33f70fb60095f9a1065eceb1ae1aa854af2d Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 21 Jul 2010 16:07:13 +0200 Subject: Autotest fixes for Lighthouse --- tests/auto/qwidget/tst_qwidget.cpp | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index 5e39c27..6450793 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -2167,7 +2167,10 @@ void tst_QWidget::resizeEvent() wParent.show(); QCOMPARE (wChild.m_resizeEventCount, 1); // initial resize event before paint wParent.hide(); - wChild.resize(QSize(640,480)); + QSize safeSize(640,480); + if (wChild.size() == safeSize) + safeSize.setWidth(639); + wChild.resize(safeSize); QCOMPARE (wChild.m_resizeEventCount, 1); wParent.show(); QCOMPARE (wChild.m_resizeEventCount, 2); @@ -2178,7 +2181,10 @@ void tst_QWidget::resizeEvent() wTopLevel.show(); QCOMPARE (wTopLevel.m_resizeEventCount, 1); // initial resize event before paint for toplevels wTopLevel.hide(); - wTopLevel.resize(QSize(640,480)); + QSize safeSize(640,480); + if (wTopLevel.size() == safeSize) + safeSize.setWidth(639); + wTopLevel.resize(safeSize); QCOMPARE (wTopLevel.m_resizeEventCount, 1); wTopLevel.show(); QCOMPARE (wTopLevel.m_resizeEventCount, 2); @@ -3375,6 +3381,10 @@ void tst_QWidget::widgetAt() #if defined(Q_OS_SYMBIAN) QEXPECT_FAIL("", "Symbian/S60 does only support rectangular regions", Continue); //See also task 147191 #endif +#if defined(Q_WS_QPA) + QEXPECT_FAIL("", "Window mask not implemented on Lighthouse", Continue); +#endif + QTRY_COMPARE(QApplication::widgetAt(100,100)->objectName(), w1->objectName()); QTRY_COMPARE(QApplication::widgetAt(101,101)->objectName(), w2->objectName()); @@ -3393,6 +3403,9 @@ void tst_QWidget::widgetAt() #if defined(Q_OS_SYMBIAN) QEXPECT_FAIL("", "Symbian/S60 does only support rectangular regions", Continue); //See also task 147191 #endif +#if defined(Q_WS_QPA) + QEXPECT_FAIL("", "Window mask not implemented on Lighthouse", Continue); +#endif QTRY_VERIFY(QApplication::widgetAt(100,100) == w1); QTRY_VERIFY(QApplication::widgetAt(101,101) == w2); -- cgit v0.12 From 77d17d054b8baff411613206a099af36f8e0bc43 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 21 Jul 2010 16:07:34 +0200 Subject: Quick-and-dirty grabWindoe() implementation for the VNC plugin --- src/plugins/platforms/vnc/qvncintegration.cpp | 44 +++++++++++++++++++++------ src/plugins/platforms/vnc/qvncintegration.h | 2 ++ 2 files changed, 36 insertions(+), 10 deletions(-) diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 16fa5bb..331c16a 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -156,16 +156,6 @@ QPixmapData *QVNCIntegration::createPixmapData(QPixmapData::PixelType type) cons return new QRasterPixmapData(type); } -// QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget) const -// { -// if (widget->windowType() == Qt::Desktop) -// return 0; // Don't create an explicit window surface for the destkop. -// QFbWindowSurface * surface; -// surface = new QFbWindowSurface(mPrimaryScreen, widget); -// mPrimaryScreen->addWindowSurface(surface); -// return surface; -// } - QWindowSurface *QVNCIntegration::createWindowSurface(QWidget *widget, WId) const { QFbWindowSurface * surface; @@ -192,6 +182,40 @@ QPlatformWindow *QVNCIntegration::createPlatformWindow(QWidget *widget, WId /*wi return w; } +QPixmap QVNCIntegration::grabWindow(WId window, int x, int y, int width, int height) const +{ +// qDebug() << "QVNCIntegration::grabWindow" << window << x << y << width << height; + + if (window == 0) { //desktop + QImage *desktopImage = mPrimaryScreen->image(); + if (x==0 && y == 0 && width < 0 && height < 0) { + return QPixmap::fromImage(*desktopImage); + } + if (width < 0) + width = desktopImage->width() - x; + if (height < 0) + height = desktopImage->height() - y; + int bytesPerPixel = desktopImage->depth()/8; //We don't support 1, 2, or 4 bpp + QImage img(desktopImage->scanLine(y) + bytesPerPixel*x, width, height, desktopImage->bytesPerLine(), desktopImage->format()); + return QPixmap::fromImage(img); + } + QWidget *win = QWidget::find(window); + if (win) { + QRect r = win->geometry(); + if (width < 0) + width = r.width() - x; + if (height < 0) + height = r.height() - y; + QImage *desktopImage = mPrimaryScreen->image(); + int bytesPerPixel = desktopImage->depth()/8; //We don't support 1, 2, or 4 bpp + + QImage img(desktopImage->scanLine(r.top() + y) + bytesPerPixel*(r.left()+x), width, height, desktopImage->bytesPerLine(), desktopImage->format()); + return QPixmap::fromImage(img); + } + return QPixmap(); +} + + void QVNCIntegration::moveToScreen(QWidget *window, int screen) { if (virtualDesktop) { // all windows exist on all screens in virtual desktop mode diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index d49e051..241993d 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -84,6 +84,8 @@ public: QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + QPixmap grabWindow(WId window, int x, int y, int width, int height) const; + QList screens() const { return mScreens; } bool isVirtualDesktop() { return virtualDesktop; } -- cgit v0.12 From 96f1f3d575a12967657bb534ee5accc04d52984e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 21 Jul 2010 09:58:25 +0200 Subject: Removed createBlittable factory function from PlatformIntegration and moved it onto QBlittablePixmap making the class abstract. The creator function was seen as to spesialised to be part of the PlatformIntegration class, and belonged to the QBlittablePixmap class anyway since that was the PixmapData type you would need to return to use the blitter api. Also removed the cross platform examples as they are more confusing than anything else. For usage of QBlittable look in the directfb platform integration plugin. --- src/gui/image/qpixmap_blitter.cpp | 10 +-- src/gui/image/qpixmap_blitter_p.h | 3 +- src/gui/kernel/qapplication_p.h | 4 +- src/gui/kernel/qplatformintegration_qpa.cpp | 3 - src/gui/kernel/qplatformintegration_qpa.h | 2 +- src/gui/painting/painting.pri | 6 +- src/gui/painting/qblittable_p.h | 3 +- src/gui/painting/qgraphicssystem.cpp | 3 - src/gui/painting/qgraphicssystem_p.h | 1 - .../painting/qwindowsurface_rasterblittable.cpp | 26 ------- .../painting/qwindowsurface_rasterblittable_p.h | 21 ------ .../gfxdrivers/blittableqvfb/blittableqvfb.pro | 28 -------- src/plugins/gfxdrivers/blittableqvfb/main.cpp | 81 ---------------------- .../gfxdrivers/blittableqvfb/qblittable_image.h | 48 ------------- .../blittableqvfb/qgraphicssystem_blittableqvfb.h | 47 ------------- .../blittableqvfb/qscreen_blittableqvfb.h | 14 ---- .../blittableqvfb/qwindowsurface_qwsblittable.cpp | 0 .../blittableqvfb/qwindowsurface_qwsblittable.h | 36 ---------- .../graphicssystems/blittable/blittable.pro | 11 --- src/plugins/graphicssystems/blittable/main.cpp | 73 ------------------- .../graphicssystems/blittable/qblittable_image.h | 48 ------------- .../blittable/qgraphicssystem_blittable.h | 53 -------------- src/plugins/platforms/directfb/qdirectfbblitter.h | 6 ++ .../platforms/directfb/qdirectfbintegration.cpp | 2 +- .../platforms/directfb/qdirectfbwindowsurface.cpp | 2 +- 25 files changed, 21 insertions(+), 510 deletions(-) delete mode 100644 src/gui/painting/qwindowsurface_rasterblittable.cpp delete mode 100644 src/gui/painting/qwindowsurface_rasterblittable_p.h delete mode 100644 src/plugins/gfxdrivers/blittableqvfb/blittableqvfb.pro delete mode 100644 src/plugins/gfxdrivers/blittableqvfb/main.cpp delete mode 100644 src/plugins/gfxdrivers/blittableqvfb/qblittable_image.h delete mode 100644 src/plugins/gfxdrivers/blittableqvfb/qgraphicssystem_blittableqvfb.h delete mode 100644 src/plugins/gfxdrivers/blittableqvfb/qscreen_blittableqvfb.h delete mode 100644 src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.cpp delete mode 100644 src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.h delete mode 100644 src/plugins/graphicssystems/blittable/blittable.pro delete mode 100644 src/plugins/graphicssystems/blittable/main.cpp delete mode 100644 src/plugins/graphicssystems/blittable/qblittable_image.h delete mode 100644 src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index d91a269..9a7ebe2 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -14,8 +14,8 @@ QT_BEGIN_NAMESPACE static int global_ser_no = 0; -QBlittablePixmapData::QBlittablePixmapData(QPixmapData::PixelType type) - : QPixmapData(type,BlitterClass), m_engine(0), m_blittable(0) +QBlittablePixmapData::QBlittablePixmapData() + : QPixmapData(QPixmapData::PixmapType,BlitterClass), m_engine(0), m_blittable(0) #ifdef QT_BLITTER_RASTEROVERLAY ,m_rasterOverlay(0), m_unmergedCopy(0) #endif //QT_BLITTER_RASTEROVERLAY @@ -37,11 +37,7 @@ QBlittable *QBlittablePixmapData::blittable() const { if (!m_blittable) { QBlittablePixmapData *that = const_cast(this); -#ifdef Q_WS_QPA //####jl: graphics system nor platformintegration should have createBlittable - that->m_blittable = QApplicationPrivate::platformIntegration()->createBlittable(QSize(w,h)); -#else - that->m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QSize(w,h)); -#endif + that->m_blittable = this->createBlittable(QSize(w,h)); } return m_blittable; diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index b9f7630..e404199 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -11,9 +11,10 @@ class Q_GUI_EXPORT QBlittablePixmapData : public QPixmapData { // Q_DECLARE_PRIVATE(QBlittablePixmapData); public: - QBlittablePixmapData(QPixmapData::PixelType type); + QBlittablePixmapData(); ~QBlittablePixmapData(); + virtual QBlittable *createBlittable(const QSize &size) const = 0; QBlittable *blittable() const; void setBlittable(QBlittable *blittable); diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 0602d82..de97f62 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -432,8 +432,10 @@ public: static QPalette *set_pal; static QGraphicsSystem *graphics_system; static QString graphics_system_name; - static QPlatformIntegration *platform_integration; static bool runtime_graphics_system; +#ifdef Q_WS_QPA + static QPlatformIntegration *platform_integration; +#endif private: static QFont *app_font; // private for a reason! Always use QApplication::font() instead! diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index b3f46ce..b4987f2 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -43,9 +43,6 @@ QT_BEGIN_NAMESPACE -QBlittable *QPlatformIntegration::createBlittable(const QSize &) const -{ return 0; } - QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, int height) const { Q_UNUSED(window); diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 11377e7..f6f10a8 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -66,7 +66,6 @@ public: virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; virtual QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const = 0; virtual QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const = 0; - virtual QBlittable *createBlittable(const QSize &size) const; virtual void moveToScreen(QWidget *window, int screen) {Q_UNUSED(window); Q_UNUSED(screen);} // Window System functions @@ -77,6 +76,7 @@ public: // Experimental virtual QPlatformEventLoopIntegration *createEventLoopIntegration() const; +// should it be hasGLContext? virtual bool hasOpenGL() const; diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 7ef6598..92c4e84 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -125,16 +125,14 @@ embedded { painting/qgraphicssystem_runtime_p.h \ painting/qgraphicssystemfactory_p.h \ painting/qgraphicssystemplugin_p.h \ - painting/qwindowsurface_raster_p.h \ - painting/qwindowsurface_rasterblittable_p.h \ + painting/qwindowsurface_raster_p.h SOURCES += \ painting/qgraphicssystem_raster.cpp \ painting/qgraphicssystem_runtime.cpp \ painting/qgraphicssystemfactory.cpp \ painting/qgraphicssystemplugin.cpp \ - painting/qwindowsurface_raster.cpp \ - painting/qwindowsurface_rasterblittable.cpp \ + painting/qwindowsurface_raster.cpp } unix:x11 { diff --git a/src/gui/painting/qblittable_p.h b/src/gui/painting/qblittable_p.h index 645f37e..71e80af 100644 --- a/src/gui/painting/qblittable_p.h +++ b/src/gui/painting/qblittable_p.h @@ -2,7 +2,8 @@ #define QBLITTABLE_P_H #include -#include +#include + #ifndef QT_NO_BLITTABLE QT_BEGIN_NAMESPACE diff --git a/src/gui/painting/qgraphicssystem.cpp b/src/gui/painting/qgraphicssystem.cpp index a03bdab..f594136 100644 --- a/src/gui/painting/qgraphicssystem.cpp +++ b/src/gui/painting/qgraphicssystem.cpp @@ -63,9 +63,6 @@ QGraphicsSystem::~QGraphicsSystem() { } -QBlittable *QGraphicsSystem::createBlittable(const QSize &) const -{ return 0; } - QPixmapData *QGraphicsSystem::createDefaultPixmapData(QPixmapData::PixelType type) { #ifdef Q_WS_QWS diff --git a/src/gui/painting/qgraphicssystem_p.h b/src/gui/painting/qgraphicssystem_p.h index 0d84886..a75ea61 100644 --- a/src/gui/painting/qgraphicssystem_p.h +++ b/src/gui/painting/qgraphicssystem_p.h @@ -70,7 +70,6 @@ public: virtual QPixmapData *createPixmapData(QPixmapData::PixelType type) const = 0; virtual QPixmapData *createPixmapData(QPixmapData *origin); virtual QWindowSurface *createWindowSurface(QWidget *widget) const = 0; - virtual QBlittable *createBlittable(const QSize &size) const; virtual ~QGraphicsSystem(); diff --git a/src/gui/painting/qwindowsurface_rasterblittable.cpp b/src/gui/painting/qwindowsurface_rasterblittable.cpp deleted file mode 100644 index 56a79ba..0000000 --- a/src/gui/painting/qwindowsurface_rasterblittable.cpp +++ /dev/null @@ -1,26 +0,0 @@ -#include "qwindowsurface_rasterblittable_p.h" - -#include -#include - -QRasterBlittableWindowSurface::QRasterBlittableWindowSurface(QWidget *widget) - : QRasterWindowSurface(widget), - m_currentImage(0), - m_blittable(0), - m_pmData(new QBlittablePixmapData(QPixmapData::PixmapType)), - m_pixmap(new QPixmap(m_pmData)) -{ -} - -QPaintDevice *QRasterBlittableWindowSurface::paintDevice() -{ - QPaintDevice *device = QRasterWindowSurface::paintDevice(); - if (m_currentImage != device) { - if (device->devType() == QInternal::Image) { - m_currentImage = static_cast(device); - m_blittable = createBlittable(m_currentImage); - m_pmData->setBlittable(m_blittable); - } - } - return m_pixmap; -} diff --git a/src/gui/painting/qwindowsurface_rasterblittable_p.h b/src/gui/painting/qwindowsurface_rasterblittable_p.h deleted file mode 100644 index 1e697c7..0000000 --- a/src/gui/painting/qwindowsurface_rasterblittable_p.h +++ /dev/null @@ -1,21 +0,0 @@ -#include -#include - -class QBlittable; -class QBlittablePixmapData; - -class Q_GUI_EXPORT QRasterBlittableWindowSurface : public QRasterWindowSurface -{ -public: - QRasterBlittableWindowSurface(QWidget *widget); - - virtual QBlittable *createBlittable(QImage *rasterSurface) = 0; - - QPaintDevice *paintDevice(); - -private: - QImage *m_currentImage; - QBlittable *m_blittable; - QBlittablePixmapData *m_pmData; - QPixmap *m_pixmap; -}; diff --git a/src/plugins/gfxdrivers/blittableqvfb/blittableqvfb.pro b/src/plugins/gfxdrivers/blittableqvfb/blittableqvfb.pro deleted file mode 100644 index d6a2018..0000000 --- a/src/plugins/gfxdrivers/blittableqvfb/blittableqvfb.pro +++ /dev/null @@ -1,28 +0,0 @@ -TARGET = qscreenblittablevfb -include(../../qpluginbase.pri) - -DEFINES += QT_QWS_QVFB QT_QWS_MOUSE_QVFB QT_QWS_KBD_QVFB - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/gfxdrivers - -HEADERS = qgraphicssystem_blittableqvfb.h \ - qscreen_blittableqvfb.h \ - qwindowsurface_qwsblittable.h \ - qblittable_image.h - -SOURCES = main.cpp \ - qwindowsurface_qwsblittable.cpp - -#include qvfb sources -HEADERS += \ - $$QT_SOURCE_TREE/src/gui/embedded/qscreenvfb_qws.h \ - $$QT_SOURCE_TREE/src/gui/embedded/qkbdvfb_qws.h \ - $$QT_SOURCE_TREE/src/gui/embedded/qmousevfb_qws.h - -SOURCES += \ - $$QT_SOURCE_TREE/src/gui/embedded/qscreenvfb_qws.cpp \ - $$QT_SOURCE_TREE/src/gui/embedded/qkbdvfb_qws.cpp \ - $$QT_SOURCE_TREE/src/gui/embedded/qmousevfb_qws.cpp - -target.path += $$[QT_INSTALL_PLUGINS]/gfxdrivers -INSTALLS += target diff --git a/src/plugins/gfxdrivers/blittableqvfb/main.cpp b/src/plugins/gfxdrivers/blittableqvfb/main.cpp deleted file mode 100644 index b6d2603..0000000 --- a/src/plugins/gfxdrivers/blittableqvfb/main.cpp +++ /dev/null @@ -1,81 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include -#include -#include "qscreen_blittableqvfb.h" - -#ifndef QT_NO_LIBRARY -QT_BEGIN_NAMESPACE - -class ScreenBlittableVfbDriver : public QScreenDriverPlugin -{ -public: - ScreenBlittableVfbDriver(); - - QStringList keys() const; - QScreen *create(const QString&, int displayId); -}; - -ScreenBlittableVfbDriver::ScreenBlittableVfbDriver() -: QScreenDriverPlugin() -{ -} - -QStringList ScreenBlittableVfbDriver::keys() const -{ - QStringList list; - list << "BlittableQVFb"; - return list; -} - -QScreen* ScreenBlittableVfbDriver::create(const QString& driver, int displayId) -{ - if (driver.toLower() == "blittableqvfb") - return new QBlittableVFbScreen(displayId); - - return 0; -} - -Q_EXPORT_PLUGIN2(qscreenblittablevfb, ScreenBlittableVfbDriver) - -QT_END_NAMESPACE -#endif //QT_NO_LIBRARY diff --git a/src/plugins/gfxdrivers/blittableqvfb/qblittable_image.h b/src/plugins/gfxdrivers/blittableqvfb/qblittable_image.h deleted file mode 100644 index 3f8dc69..0000000 --- a/src/plugins/gfxdrivers/blittableqvfb/qblittable_image.h +++ /dev/null @@ -1,48 +0,0 @@ -#include - -#include - - -class QImageBlittable : public QBlittable -{ -public: - QImageBlittable(QImage *image, bool deleteImage) - : QBlittable(image->size(), QBlittable::Capabilities(QBlittable::SolidRectCapability - |QBlittable::SourcePixmapCapability - |QBlittable::SourceOverPixmapCapability - |QBlittable::SourceOverScaledPixmapCapability)), - m_image(image), m_deleteImage(deleteImage) - { - - } - - ~QImageBlittable() { - if (m_deleteImage) - delete m_image; - } - - void fillRect(const QRectF &rect, const QColor &color) - { - QPainter p(lock()); - p.fillRect(rect,color); - } - void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &source) - { - //here it is possible to do a pixmap.pixmapData()->buffer() - //but is like this to show how to get the the blitter - QPixmapData *data = pixmap.pixmapData(); - Q_ASSERT(data->width() && data->height()); - Q_ASSERT(data->classId() == QPixmapData::BlitterClass); - QBlittablePixmapData *blittableData = static_cast(data); - - QPainter p(lock()); - p.drawImage(rect, *blittableData->blittable()->lock(),source); - } - -protected: - QImage *doLock() { return m_image; } - void doUnlock() { } -private: - QImage *m_image; - bool m_deleteImage; -}; diff --git a/src/plugins/gfxdrivers/blittableqvfb/qgraphicssystem_blittableqvfb.h b/src/plugins/gfxdrivers/blittableqvfb/qgraphicssystem_blittableqvfb.h deleted file mode 100644 index 89940d0..0000000 --- a/src/plugins/gfxdrivers/blittableqvfb/qgraphicssystem_blittableqvfb.h +++ /dev/null @@ -1,47 +0,0 @@ -#include -#include -#include -#include - -#include "qwindowsurface_qwsblittable.h" -#include "qblittable_image.h" -#include - -class QBlittableVFbGraphicsSystem : public QGraphicsSystem -{ -public: - QPixmapData *createPixmapData(QPixmapData::PixelType type) const - { - if (type == QPixmapData::PixmapType) { - return new QBlittablePixmapData(type); - } else { - return new QRasterPixmapData(type); - } - } - - QWindowSurface *createWindowSurface(QWidget *widget) const - { - if (QApplication::type() == QApplication::GuiServer) - return new QWSBlittableMemSurface(widget); - else - return QScreen::instance()->createSurface(widget); - } - - QBlittable *createBlittable(const QSize &size) const - { - QImage *image = new QImage(size,QImage::Format_ARGB32); - return new QImageBlittable(image,true); - } - - static QGraphicsSystem *instance() - { - static QGraphicsSystem *system = 0; - if (!system) { - system = new QBlittableVFbGraphicsSystem; - } - return system; - } - -private: - QBlittableVFbGraphicsSystem() { } -}; diff --git a/src/plugins/gfxdrivers/blittableqvfb/qscreen_blittableqvfb.h b/src/plugins/gfxdrivers/blittableqvfb/qscreen_blittableqvfb.h deleted file mode 100644 index 645aeec..0000000 --- a/src/plugins/gfxdrivers/blittableqvfb/qscreen_blittableqvfb.h +++ /dev/null @@ -1,14 +0,0 @@ -#include -#include "qgraphicssystem_blittableqvfb.h" - -class QBlittableVFbScreen : public QVFbScreen -{ -public: - explicit QBlittableVFbScreen(int display_id) - : QVFbScreen(display_id) - { - setGraphicsSystem(QBlittableVFbGraphicsSystem::instance()); - - } - -}; diff --git a/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.cpp b/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.h b/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.h deleted file mode 100644 index b955322..0000000 --- a/src/plugins/gfxdrivers/blittableqvfb/qwindowsurface_qwsblittable.h +++ /dev/null @@ -1,36 +0,0 @@ -#include "qblittable_image.h" - -#include -#include - -class QBlittablePixmapData; - -class Q_GUI_EXPORT QWSBlittableMemSurface : public QWSLocalMemSurface -{ -public: - QWSBlittableMemSurface( QWidget *window ) - : QWSLocalMemSurface(window), - m_currentPaintDevice(0), - pmData(new QBlittablePixmapData(QPixmapData::PixmapType)), - pm(pmData) - { - } - - QPaintDevice *paintDevice() - { - if (QWSLocalMemSurface::paintDevice() != m_currentPaintDevice) { - QPaintDevice *device = QWSLocalMemSurface::paintDevice(); - if (device->devType() == QInternal::Image) { - img = *static_cast(device); - pmData->setBlittable(new QImageBlittable(&img,false)); - } - } - return ± - } - -private: - QPaintDevice *m_currentPaintDevice; - QBlittablePixmapData *pmData; - QPixmap pm; -}; - diff --git a/src/plugins/graphicssystems/blittable/blittable.pro b/src/plugins/graphicssystems/blittable/blittable.pro deleted file mode 100644 index 34c4165..0000000 --- a/src/plugins/graphicssystems/blittable/blittable.pro +++ /dev/null @@ -1,11 +0,0 @@ -TARGET = qblittablegraphicssystem -include(../../qpluginbase.pri) - -QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/graphicssystems - -SOURCES = main.cpp -HEADERS = qblittable_image.h \ - qgraphicssystem_blittable.h - -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems -INSTALLS += target diff --git a/src/plugins/graphicssystems/blittable/main.cpp b/src/plugins/graphicssystems/blittable/main.cpp deleted file mode 100644 index 06c3189..0000000 --- a/src/plugins/graphicssystems/blittable/main.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include - -#include "qgraphicssystem_blittable.h" - -QT_BEGIN_NAMESPACE - -class QBlittableGraphicsSystemPlugin : public QGraphicsSystemPlugin -{ -public: - QStringList keys() const; - QGraphicsSystem *create(const QString&); -}; - -QStringList QBlittableGraphicsSystemPlugin::keys() const -{ - QStringList list; - list << QLatin1String("Blittable"); - return list; -} - -QGraphicsSystem* QBlittableGraphicsSystemPlugin::create(const QString& system) -{ - if (system.toLower() == QLatin1String("blittable")) { - return new QBlittableGraphicsSystem; - } - - return 0; -} - -Q_EXPORT_PLUGIN2(blittable, QBlittableGraphicsSystemPlugin) - -QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/blittable/qblittable_image.h b/src/plugins/graphicssystems/blittable/qblittable_image.h deleted file mode 100644 index 3f8dc69..0000000 --- a/src/plugins/graphicssystems/blittable/qblittable_image.h +++ /dev/null @@ -1,48 +0,0 @@ -#include - -#include - - -class QImageBlittable : public QBlittable -{ -public: - QImageBlittable(QImage *image, bool deleteImage) - : QBlittable(image->size(), QBlittable::Capabilities(QBlittable::SolidRectCapability - |QBlittable::SourcePixmapCapability - |QBlittable::SourceOverPixmapCapability - |QBlittable::SourceOverScaledPixmapCapability)), - m_image(image), m_deleteImage(deleteImage) - { - - } - - ~QImageBlittable() { - if (m_deleteImage) - delete m_image; - } - - void fillRect(const QRectF &rect, const QColor &color) - { - QPainter p(lock()); - p.fillRect(rect,color); - } - void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &source) - { - //here it is possible to do a pixmap.pixmapData()->buffer() - //but is like this to show how to get the the blitter - QPixmapData *data = pixmap.pixmapData(); - Q_ASSERT(data->width() && data->height()); - Q_ASSERT(data->classId() == QPixmapData::BlitterClass); - QBlittablePixmapData *blittableData = static_cast(data); - - QPainter p(lock()); - p.drawImage(rect, *blittableData->blittable()->lock(),source); - } - -protected: - QImage *doLock() { return m_image; } - void doUnlock() { } -private: - QImage *m_image; - bool m_deleteImage; -}; diff --git a/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h b/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h deleted file mode 100644 index d45907f..0000000 --- a/src/plugins/graphicssystems/blittable/qgraphicssystem_blittable.h +++ /dev/null @@ -1,53 +0,0 @@ -#include -#include -#include -#include -#include - -#include "qblittable_image.h" - -class QImageBlittableWindowSurface : public QRasterBlittableWindowSurface -{ -public: - QImageBlittableWindowSurface(QWidget *widget) - : QRasterBlittableWindowSurface(widget) - {} - - QBlittable *createBlittable(QImage *rasterSurface) - { - return new QImageBlittable(rasterSurface,false); - } - -}; - -class QBlittableGraphicsSystem : public QGraphicsSystem -{ -public: - ~QBlittableGraphicsSystem() { } - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const - { - if (type == QPixmapData::PixmapType) - return new QBlittablePixmapData(type); - else - return new QRasterPixmapData(type); - } - - QWindowSurface *createWindowSurface(QWidget *widget) const - { - return new QImageBlittableWindowSurface(widget); - } - - QBlittable *createBlittable(const QSize &size) const - { - QImage *image = new QImage(size, QImage::Format_ARGB32_Premultiplied); - return new QImageBlittable(image,true); - } - - QList screens() - { return m_screens; } - - QList m_screens; -}; - - diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h index 85a303a..2a39912 100644 --- a/src/plugins/platforms/directfb/qdirectfbblitter.h +++ b/src/plugins/platforms/directfb/qdirectfbblitter.h @@ -26,4 +26,10 @@ protected: friend class QDirectFbConvenience; }; +class QDirectFbBlitterPixmapData : public QBlittablePixmapData +{ +public: + QBlittable *createBlittable(const QSize &size) const { return new QDirectFbBlitter(size); } +}; + #endif // QDIRECTFBBLITTER_H diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index c47fc8d..b19a1d9 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -118,7 +118,7 @@ QPixmapData *QDirectFbIntegration::createPixmapData(QPixmapData::PixelType type) if (type == QPixmapData::BitmapType) return new QRasterPixmapData(type); else - return new QBlittablePixmapData(type); + return new QDirectFbBlitterPixmapData; } QPlatformWindow *QDirectFbIntegration::createPlatformWindow(QWidget *widget, WId winId) const diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp index 4ca9a72..271d061 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp @@ -63,7 +63,7 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window, WId wId) dfbWindow->GetSurface(dfbWindow,&m_dfbSurface); //WRONGSIZE QDirectFbBlitter *blitter = new QDirectFbBlitter(window->rect().size(), m_dfbSurface); - m_pmdata = new QBlittablePixmapData(QPixmapData::PixmapType); + m_pmdata = new QDirectFbBlitterPixmapData; m_pmdata->setBlittable(blitter); m_pixmap = new QPixmap(m_pmdata); } -- cgit v0.12 From 733ea3622dc6feb06979bade95318664a94a6e21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 22 Jul 2010 12:03:52 +0200 Subject: Fix Resize bug introduced by bc786ded04aa316f99cf9ac4cf8b714ee46575b5 --- src/gui/kernel/qapplication_qpa.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index 42907ae..a433ccd 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -828,12 +828,14 @@ void QApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::Leave void QApplicationPrivate::processMoveEvent(QWindowSystemInterfacePrivate::MoveEvent *moveEvent) { - QMoveEvent e(moveEvent->moved.data()->geometry().topLeft(), moveEvent->newPos); - QApplication::sendSpontaneousEvent(moveEvent->moved.data(), &e); + moveEvent->moved.data()->data->crect.setTopLeft(moveEvent->newPos); + QMoveEvent e(moveEvent->moved.data()->geometry().topLeft(), moveEvent->newPos); + QApplication::sendSpontaneousEvent(moveEvent->moved.data(), &e); } void QApplicationPrivate::processResizeEvent(QWindowSystemInterfacePrivate::ResizeEvent *e) { + e->sizeChanged.data()->data->crect.setSize(e->newSize); QResizeEvent resizeEvent(e->sizeChanged.data()->data->crect.size(), e->newSize); QApplication::sendSpontaneousEvent(e->sizeChanged.data(), &resizeEvent); e->sizeChanged.data()->update(); -- cgit v0.12 From ec0ce7be116f0c4f854ef1efbb90d22f7c76aa4d Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 22 Jul 2010 14:53:02 +0200 Subject: Don't crash if widget is deleted before event is processed --- src/gui/kernel/qapplication_qpa.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index a433ccd..d289dee 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -828,6 +828,10 @@ void QApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::Leave void QApplicationPrivate::processMoveEvent(QWindowSystemInterfacePrivate::MoveEvent *moveEvent) { + if (moveEvent->moved.isNull()) { + //qDebug() << "QApplicationPrivate::processMoveEvent NULL"; + return; + } moveEvent->moved.data()->data->crect.setTopLeft(moveEvent->newPos); QMoveEvent e(moveEvent->moved.data()->geometry().topLeft(), moveEvent->newPos); QApplication::sendSpontaneousEvent(moveEvent->moved.data(), &e); @@ -835,6 +839,10 @@ void QApplicationPrivate::processMoveEvent(QWindowSystemInterfacePrivate::MoveEv void QApplicationPrivate::processResizeEvent(QWindowSystemInterfacePrivate::ResizeEvent *e) { + if (e->sizeChanged.isNull()) { + //qDebug() << "QApplicationPrivate::processResizeEvent NULL"; + return; + } e->sizeChanged.data()->data->crect.setSize(e->newSize); QResizeEvent resizeEvent(e->sizeChanged.data()->data->crect.size(), e->newSize); QApplication::sendSpontaneousEvent(e->sizeChanged.data(), &resizeEvent); @@ -843,6 +851,10 @@ void QApplicationPrivate::processResizeEvent(QWindowSystemInterfacePrivate::Resi void QApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e) { + if (e->topLevel.isNull()) { + //qDebug() << "QApplicationPrivate::processCloseEvent NULL"; + return; + } e->topLevel.data()->d_func()->close_helper(QWidgetPrivate::CloseWithSpontaneousEvent); } -- cgit v0.12 From d15e6a32aeced893a5b5b790f3235cc7b3e0b9af Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 22 Jul 2010 14:53:53 +0200 Subject: Implement reparenting a created toplevel window --- src/gui/kernel/qwidget_qpa.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index 4229a05..ac868eb 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -60,7 +60,7 @@ void setParentForChildrenOfWidget(QPlatformWindow *window, const QWidget *widget for (int i = 0; i < children.size(); i++) { if (children.at(i)->isWidgetType()) { const QWidget *childWidget = qobject_cast(children.at(i)); - if (childWidget) { // should not be nessesary + if (childWidget) { // should not be necessary if (childWidget->platformWindow()) { childWidget->platformWindow()->setParent(window); } else { @@ -179,6 +179,12 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) } bool explicitlyHidden = q->testAttribute(Qt::WA_WState_Hidden) && q->testAttribute(Qt::WA_WState_ExplicitShowHide); + + // Reparenting toplevel to child + if (!(f&Qt::Window) && (oldFlags&Qt::Window)) { + //qDebug() << "setParent_sys() change from toplevel"; + q->destroy(); + } data.window_flags = f; q->setAttribute(Qt::WA_WState_Created, false); @@ -190,12 +196,11 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) if (QPlatformWindow *window = q->platformWindow()) data.window_flags = window->setWindowFlags(data.window_flags); } - // XXX Reparenting child to toplevel or vice versa ### + + // Reparenting child to toplevel if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { //qDebug() << "setParent_sys() change to toplevel"; - q->create(); //### this cannot be right - } else if ((f&Qt::Window) && !(oldFlags&Qt::Window)) { - qDebug() << "######## setParent_sys() change from toplevel not implemented ########"; + q->create(); //### too early: this ought to happen at show() time } -- cgit v0.12 From be08fbc13f7370b6cc0c34660b4d1c16e4fdd3f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 23 Jul 2010 10:24:06 +0200 Subject: Handle behavior change in resize and move events in Lighthouse Dont post the resize event and move event seperatly on the windowsystemintegration event queue, but as one event which will be processed in one go. --- src/gui/kernel/qapplication_p.h | 3 +- src/gui/kernel/qapplication_qpa.cpp | 47 ++++++++++++++------------- src/gui/kernel/qwidget_qpa.cpp | 1 + src/gui/kernel/qwindowsysteminterface_qpa.cpp | 24 ++------------ src/gui/kernel/qwindowsysteminterface_qpa_p.h | 22 ++++--------- 5 files changed, 35 insertions(+), 62 deletions(-) diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index de97f62..933e0ab 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -500,8 +500,7 @@ public: static void processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e); - static void processMoveEvent(QWindowSystemInterfacePrivate::MoveEvent *e); - static void processResizeEvent(QWindowSystemInterfacePrivate::ResizeEvent *e); + static void processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e); static void processEnterEvent(QWindowSystemInterfacePrivate::EnterEvent *e); static void processLeaveEvent(QWindowSystemInterfacePrivate::LeaveEvent *e); diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index d289dee..26ae82d 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -102,11 +102,8 @@ void QApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate case QWindowSystemInterfacePrivate::Touch: QApplicationPrivate::processTouchEvent(static_cast(e)); break; - case QWindowSystemInterfacePrivate::Move: - QApplicationPrivate::processMoveEvent(static_cast(e)); - break; - case QWindowSystemInterfacePrivate::Resize: - QApplicationPrivate::processResizeEvent(static_cast(e)); + case QWindowSystemInterfacePrivate::GeometryChange: + QApplicationPrivate::processGeometryChangeEvent(static_cast(e)); break; case QWindowSystemInterfacePrivate::Enter: QApplicationPrivate::processEnterEvent(static_cast(e)); @@ -826,27 +823,33 @@ void QApplicationPrivate::processLeaveEvent(QWindowSystemInterfacePrivate::Leave } -void QApplicationPrivate::processMoveEvent(QWindowSystemInterfacePrivate::MoveEvent *moveEvent) + +void QApplicationPrivate::processGeometryChangeEvent(QWindowSystemInterfacePrivate::GeometryChangeEvent *e) { - if (moveEvent->moved.isNull()) { - //qDebug() << "QApplicationPrivate::processMoveEvent NULL"; - return; + if (e->tlw.isNull()) + return; + QWidget *tlw = e->tlw.data(); + if (!tlw->isWindow()) + return; //geo of native child widgets is controlled by lighthouse + //so we already have sent the events; besides this new rect + //is not mapped to parent + + QRect newRect = e->newGeometry; + QRect cr(tlw->geometry()); + bool isResize = cr.size() != newRect.size(); + bool isMove = cr.topLeft() != newRect.topLeft(); + tlw->data->crect = newRect; + if (isResize) { + QResizeEvent e(tlw->data->crect.size(), cr.size()); + QApplication::sendSpontaneousEvent(tlw, &e); + tlw->update(); } - moveEvent->moved.data()->data->crect.setTopLeft(moveEvent->newPos); - QMoveEvent e(moveEvent->moved.data()->geometry().topLeft(), moveEvent->newPos); - QApplication::sendSpontaneousEvent(moveEvent->moved.data(), &e); -} -void QApplicationPrivate::processResizeEvent(QWindowSystemInterfacePrivate::ResizeEvent *e) -{ - if (e->sizeChanged.isNull()) { - //qDebug() << "QApplicationPrivate::processResizeEvent NULL"; - return; + if (isMove) { + //### frame geometry + QMoveEvent e(tlw->data->crect.topLeft(), cr.topLeft()); + QApplication::sendSpontaneousEvent(tlw, &e); } - e->sizeChanged.data()->data->crect.setSize(e->newSize); - QResizeEvent resizeEvent(e->sizeChanged.data()->data->crect.size(), e->newSize); - QApplication::sendSpontaneousEvent(e->sizeChanged.data(), &resizeEvent); - e->sizeChanged.data()->update(); } void QApplicationPrivate::processCloseEvent(QWindowSystemInterfacePrivate::CloseEvent *e) diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index ac868eb..1b7d9d2 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -128,6 +128,7 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) if (windowType() != Qt::Desktop) { if (destroyWindow && isWindow()) { +//### jl: delete all child windows... QTLWExtra *topData = d->maybeTopData(); if (topData) { delete topData->platformWindow; diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp index dd78e8e..c49bd36 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.cpp +++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp @@ -75,28 +75,8 @@ void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw) void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect) { - if (!tlw) - return; - if (!tlw->isWindow()) - return; //geo of native child widgets is controlled by lighthouse - //so we already have sent the events; besides this new rect - //is not mapped to parent - - QRect cr(tlw->geometry()); - - bool isResize = cr.size() != newRect.size(); - bool isMove = cr.topLeft() != newRect.topLeft(); - if (isResize) { - QWindowSystemInterfacePrivate::ResizeEvent *resizeEvent = - new QWindowSystemInterfacePrivate::ResizeEvent(tlw,newRect.size()); - QWindowSystemInterfacePrivate::queueWindowSystemEvent(resizeEvent); - } - - if (isMove) { - QWindowSystemInterfacePrivate::MoveEvent *moveEvent = - new QWindowSystemInterfacePrivate::MoveEvent(tlw,newRect.topLeft()); - QWindowSystemInterfacePrivate::queueWindowSystemEvent(moveEvent); - } + QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw,newRect); + QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); } diff --git a/src/gui/kernel/qwindowsysteminterface_qpa_p.h b/src/gui/kernel/qwindowsysteminterface_qpa_p.h index 90d1702..5f3ac5d 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa_p.h +++ b/src/gui/kernel/qwindowsysteminterface_qpa_p.h @@ -53,8 +53,7 @@ public: enum EventType { Close, - Resize, - Move, + GeometryChange, Enter, Leave, Mouse, @@ -80,22 +79,13 @@ public: QWeakPointer topLevel; }; - class ResizeEvent : public WindowSystemEvent { + class GeometryChangeEvent : public WindowSystemEvent { public: - ResizeEvent(QWidget *sizeChanged, const QSize &newSize) - : WindowSystemEvent(Resize), sizeChanged(sizeChanged), newSize(newSize) + GeometryChangeEvent(QWidget *tlw, const QRect &newGeometry) + : WindowSystemEvent(GeometryChange), tlw(tlw), newGeometry(newGeometry) { } - QWeakPointer sizeChanged; - QSize newSize; - }; - - class MoveEvent : public WindowSystemEvent { - public: - MoveEvent(QWidget *moved, const QPoint &newPos) - : WindowSystemEvent(Move), moved(moved), newPos(newPos) - { } - QWeakPointer moved; - QPoint newPos; + QWeakPointer tlw; + QRect newGeometry; }; class EnterEvent : public WindowSystemEvent { -- cgit v0.12 From 699d74a9fae0b2d03e5c74bfb9590f6f0809ef4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 23 Jul 2010 09:46:23 +0200 Subject: Make it possible to have shared contexts to Lighthouse This adds a getter to QPlatformGLContext for the "default shared context". The setter is protected as it is the plugins responsibillity to create it or not. QPlatformWindowFormat has also gotten a pointer to a QPlatformGLContext for a non default shared context. Only implemented shared contexts in testlite for now. --- src/gui/kernel/kernel.pri | 3 +- src/gui/kernel/qapplication_qpa.cpp | 4 +- src/gui/kernel/qplatformglcontext_qpa.cpp | 54 +++++++++ src/gui/kernel/qplatformglcontext_qpa.h | 5 + src/gui/kernel/qplatformintegration_qpa.h | 6 +- src/gui/kernel/qplatformwindowformat_qpa.cpp | 37 ++++-- src/gui/kernel/qplatformwindowformat_qpa.h | 17 ++- src/gui/kernel/qwidget.cpp | 2 + src/gui/kernel/qwidget_qpa.cpp | 2 +- src/opengl/qgl_qpa.cpp | 3 + src/plugins/platforms/testlite/qglxintegration.cpp | 133 +++++++++++++++------ src/plugins/platforms/testlite/qglxintegration.h | 18 ++- src/plugins/platforms/testlite/qtestlitewindow.cpp | 43 +++---- 13 files changed, 247 insertions(+), 80 deletions(-) create mode 100644 src/gui/kernel/qplatformglcontext_qpa.cpp diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 43b1ab8..9941b1b 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -241,7 +241,8 @@ qpa { kernel/qplatformintegrationplugin_qpa.cpp \ kernel/qplatformwindow_qpa.cpp \ kernel/qplatformwindowformat_qpa.cpp \ - kernel/qplatformeventloopintegration_qpa.cpp + kernel/qplatformeventloopintegration_qpa.cpp \ + kernel/qplatformglcontext_qpa.cpp contains(QT_CONFIG, glib) { SOURCES += \ diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index 26ae82d..e5b5396 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -510,7 +510,7 @@ void qt_init(QApplicationPrivate *priv, int type) } QList pluginList; - QString platformName = qgetenv("QT_QPA_PLATFORM"); + QString platformName = QLatin1String(qgetenv("QT_QPA_PLATFORM")); // Get command line params @@ -526,7 +526,7 @@ void qt_init(QApplicationPrivate *priv, int type) appFont = argv[i]; } else if (arg == "-platform") { if (++i < argc) - platformName = argv[i]; + platformName = QLatin1String(argv[i]); } else if (arg == "-plugin") { if (++i < argc) pluginList << argv[i]; diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp new file mode 100644 index 0000000..a2ffbf3 --- /dev/null +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenGL module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qplatformglcontext_qpa.h" + +static QPlatformGLContext *staticSharedContext = 0; + +void QPlatformGLContext::setDefaultSharedContext(QPlatformGLContext *sharedContext) +{ + staticSharedContext = sharedContext; +} + +QPlatformGLContext *QPlatformGLContext::defaultSharedContext() +{ + return staticSharedContext; +} diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index dcfd54c..9f3bfb3 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -58,6 +58,11 @@ public: virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; + static QPlatformGLContext *defaultSharedContext(); + +protected: + static void setDefaultSharedContext(QPlatformGLContext *sharedContext); + }; QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index f6f10a8..9f7367e 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -73,10 +73,12 @@ public: virtual bool isVirtualDesktop() { return false; } virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; -// Experimental +// Experimental in mainthread eventloop integration +// This should only be used if it is only possible to do window system event processing in +// the gui thread. All of the functions in QWindowSystemInterface are thread safe. virtual QPlatformEventLoopIntegration *createEventLoopIntegration() const; -// should it be hasGLContext? +//jl:XXX should it be hasGLContext and do we need it at all? virtual bool hasOpenGL() const; diff --git a/src/gui/kernel/qplatformwindowformat_qpa.cpp b/src/gui/kernel/qplatformwindowformat_qpa.cpp index bc234ab..9d86948 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.cpp +++ b/src/gui/kernel/qplatformwindowformat_qpa.cpp @@ -50,7 +50,8 @@ public: : ref(1) , opts(QPlatformWindowFormat::DoubleBuffer | QPlatformWindowFormat::DepthBuffer | QPlatformWindowFormat::Rgba | QPlatformWindowFormat::DirectRendering - | QPlatformWindowFormat::StencilBuffer | QPlatformWindowFormat::DeprecatedFunctions) + | QPlatformWindowFormat::StencilBuffer | QPlatformWindowFormat::DeprecatedFunctions + | QPlatformWindowFormat::UseDefaultSharedContext) , depthSize(-1) , accumSize(-1) , stencilSize(-1) @@ -60,9 +61,8 @@ public: , alphaSize(-1) , numSamples(-1) , swapInterval(-1) - , majorVersion(1) - , minorVersion(0) , windowApi(QPlatformWindowFormat::Raster) + , sharedContext(0) { } @@ -78,9 +78,8 @@ public: alphaSize(other->alphaSize), numSamples(other->numSamples), swapInterval(other->swapInterval), - majorVersion(other->majorVersion), - minorVersion(other->minorVersion), - windowApi(other->windowApi) + windowApi(other->windowApi), + sharedContext(other->sharedContext) { } QAtomicInt ref; @@ -94,9 +93,8 @@ public: int alphaSize; int numSamples; int swapInterval; - int majorVersion; - int minorVersion; QPlatformWindowFormat::WindowApi windowApi; + QPlatformGLContext *sharedContext; }; /*! @@ -519,6 +517,16 @@ void QPlatformWindowFormat::setSampleBuffers(bool enable) setOption(enable ? QPlatformWindowFormat::SampleBuffers : QPlatformWindowFormat::NoSampleBuffers); } +void QPlatformWindowFormat::setUseDefaultSharedContext(bool enable) +{ + if (enable) { + setOption(QPlatformWindowFormat::UseDefaultSharedContext); + d->sharedContext = 0; + } else { + setOption(QPlatformWindowFormat::NoDefaultSharedContext); + } +} + /*! Returns the number of samples per pixel when multisampling is enabled. By default, the highest number of samples that is @@ -595,6 +603,17 @@ QPlatformWindowFormat::WindowApi QPlatformWindowFormat::windowApi() const return d->windowApi; } +void QPlatformWindowFormat::setSharedContext(QPlatformGLContext *context) +{ + setUseDefaultSharedContext(false); + d->sharedContext = context; +} + +QPlatformGLContext *QPlatformWindowFormat::sharedGLContext() const +{ + return d->sharedContext; +} + ///*! // \fn bool QGLFormat::hasOverlay() const @@ -952,8 +971,6 @@ bool operator==(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) && a.d->blueSize == b.d->blueSize && a.d->numSamples == b.d->numSamples && a.d->swapInterval == b.d->swapInterval - && a.d->majorVersion == b.d->majorVersion - && a.d->minorVersion == b.d->minorVersion && a.d->windowApi == b.d->windowApi); } diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h index 3c5f907..37e628d 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.h +++ b/src/gui/kernel/qplatformwindowformat_qpa.h @@ -64,6 +64,7 @@ public: HasOverlay = 0x0100, SampleBuffers = 0x0200, DeprecatedFunctions = 0x0400, + UseDefaultSharedContext = 0x0800, SingleBuffer = DoubleBuffer << 16, NoDepthBuffer = DepthBuffer << 16, ColorIndex = Rgba << 16, @@ -74,7 +75,9 @@ public: IndirectRendering = DirectRendering << 16, NoOverlay = HasOverlay << 16, NoSampleBuffers = SampleBuffers << 16, - NoDeprecatedFunctions = DeprecatedFunctions << 16 + NoDeprecatedFunctions = DeprecatedFunctions << 16, + NoDefaultSharedContext = UseDefaultSharedContext << 16 + }; Q_DECLARE_FLAGS(FormatOptions, FormatOption) @@ -123,6 +126,9 @@ public: void setWindowApi(QPlatformWindowFormat::WindowApi api); WindowApi windowApi() const; + void setSharedContext(QPlatformGLContext *context); + QPlatformGLContext *sharedGLContext() const; + bool doubleBuffer() const; void setDoubleBuffer(bool enable); bool depth() const; @@ -139,6 +145,8 @@ public: void setStereo(bool enable); bool directRendering() const; void setDirectRendering(bool enable); + bool useDefaultSharedContext() const; + void setUseDefaultSharedContext(bool enable); // bool hasOverlay() const; // void setOverlay(bool enable); @@ -148,9 +156,6 @@ public: static QPlatformWindowFormat defaultFormat(); static void setDefaultFormat(const QPlatformWindowFormat& f); -// static QPlatformWindowFormat defaultOverlayFormat(); -// static void setDefaultOverlayFormat(const QPlatformWindowFormat& f); - private: QPlatformWindowFormatPrivate *d; @@ -215,6 +220,10 @@ inline bool QPlatformWindowFormat::sampleBuffers() const return testOption(QPlatformWindowFormat::SampleBuffers); } +inline bool QPlatformWindowFormat::useDefaultSharedContext() const +{ + return testOption(QPlatformWindowFormat::UseDefaultSharedContext); +} QT_END_NAMESPACE diff --git a/src/gui/kernel/qwidget.cpp b/src/gui/kernel/qwidget.cpp index 958c476..c236c60 100644 --- a/src/gui/kernel/qwidget.cpp +++ b/src/gui/kernel/qwidget.cpp @@ -2410,7 +2410,9 @@ WId QWidget::winId() const qDebug() << "QWidget::winId: creating native window for" << this; #endif QWidget *that = const_cast(this); +#ifndef Q_WS_QPA that->setAttribute(Qt::WA_NativeWindow); +#endif that->d_func()->createWinId(); return that->data->winid; } diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index 1b7d9d2..104c529 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -182,7 +182,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) bool explicitlyHidden = q->testAttribute(Qt::WA_WState_Hidden) && q->testAttribute(Qt::WA_WState_ExplicitShowHide); // Reparenting toplevel to child - if (!(f&Qt::Window) && (oldFlags&Qt::Window)) { + if (!(f&Qt::Window) && (oldFlags&Qt::Window) && !q->testAttribute(Qt::WA_NativeWindow)) { //qDebug() << "setParent_sys() change from toplevel"; q->destroy(); } diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index aa124fe..0fc885c 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -66,6 +66,9 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) }else { QWidget *widget = static_cast(d->paintDevice); if (!widget->platformWindow()){ + QPlatformWindowFormat format = widget->platformWindowFormat(); + format.setWindowApi(QPlatformWindowFormat::OpenGL); + widget->setPlatformWindowFormat(format); widget->winId();//make window } d->platformContext = widget->platformWindow()->glContext(); diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index ba89dbd..4d807b0 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -57,8 +57,12 @@ QT_BEGIN_NAMESPACE -GLXFBConfig qt_glx_integration_choose_config(MyDisplay* xd, QGLFormat& format, int drawableType) +QMutex QGLXGLContext::m_defaultSharedContextMutex(QMutex::Recursive); + +QVector QGLXGLContext::buildSpec(const QPlatformWindowFormat &format) { + QVector spec(48); + int i = 0; int depthSize = 0; int stencilSize = 0; int sampleSize = 0; @@ -70,33 +74,30 @@ GLXFBConfig qt_glx_integration_choose_config(MyDisplay* xd, QGLFormat& format, i if (format.sampleBuffers()) sampleSize = (format.samples() == -1) ? 1 : format.samples(); - int configAttribs[] = { - GLX_DRAWABLE_TYPE, drawableType, - GLX_LEVEL, format.plane(), - GLX_RENDER_TYPE, GLX_RGBA_BIT, - GLX_DOUBLEBUFFER, format.doubleBuffer() ? True : False, - GLX_STEREO, format.stereo() ? True : False, - - GLX_DEPTH_SIZE, depthSize, - GLX_STENCIL_SIZE, stencilSize, - GLX_SAMPLE_BUFFERS_ARB, sampleSize, - - GLX_RED_SIZE, (format.redBufferSize() == -1) ? 1 : format.redBufferSize(), - GLX_GREEN_SIZE, (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(), - GLX_BLUE_SIZE, (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(), - GLX_ALPHA_SIZE, (format.alphaBufferSize() == -1) ? 0 : format.alphaBufferSize(), - - GLX_ACCUM_RED_SIZE, (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(), - GLX_ACCUM_GREEN_SIZE, (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(), - GLX_ACCUM_BLUE_SIZE, (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(), - GLX_ACCUM_ALPHA_SIZE, (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(), - XNone - }; + spec[i++] = GLX_DRAWABLE_TYPE; spec[i++] = GLX_WINDOW_BIT; + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT; + spec[i++] = GLX_DOUBLEBUFFER; spec[i++] = format.doubleBuffer() ? True : False; + spec[i++] = GLX_STEREO; spec[i++] = format.stereo() ? True : False; - GLXFBConfig *configs; - int configCount = 0; - configs = glXChooseFBConfig(xd->display, xd->screen, configAttribs, &configCount); + spec[i++] = GLX_DEPTH_SIZE; spec[i++] = depthSize; + spec[i++] = GLX_STENCIL_SIZE; spec[i++] = stencilSize; + spec[i++] = GLX_SAMPLE_BUFFERS_ARB; spec[i++] = sampleSize; + spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize(); + spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(); + spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(); + spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 0 : format.alphaBufferSize(); + + spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); + spec[i++] = XNone; + return spec; +} + +GLXFBConfig QGLXGLContext::findConfig(const GLXFBConfig *configs, int configCount, const QPlatformWindowFormat &format, const MyDisplay *xd) +{ if (!configs) return 0; @@ -121,31 +122,60 @@ GLXFBConfig qt_glx_integration_choose_config(MyDisplay* xd, QGLFormat& format, i } else break; // Just choose the first in the list if there's no alpha requested } - - // TODO: Populate the QGLFormat with the values of the GLXFBConfig - - XFree(configs); return chosenConfig; } -QGLXGLContext::QGLXGLContext(WId winId, MyDisplay *xd, QGLFormat& format, QPlatformGLContext* shareContext) +QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindowFormat &format) : QPlatformGLContext() , m_xd(xd) - , m_drawable((Drawable)winId) - , m_config(0) + , m_drawable((Drawable)window) , m_context(0) { + if (!QPlatformGLContext::defaultSharedContext()) { + if (m_defaultSharedContextMutex.tryLock()){ + createDefaultSharedContex(xd); + m_defaultSharedContextMutex.unlock(); + } else { + m_defaultSharedContextMutex.lock(); //wait to the the shared context is created + m_defaultSharedContextMutex.unlock(); + } + } + + QPlatformGLContext *sharePlatformContext; + if (format.useDefaultSharedContext()) { + sharePlatformContext = QPlatformGLContext::defaultSharedContext(); + } else { + sharePlatformContext = format.sharedGLContext(); + } GLXContext shareGlxContext = 0; - if (shareContext) - shareGlxContext = static_cast(shareContext)->glxContext(); + if (sharePlatformContext) + shareGlxContext = static_cast(sharePlatformContext)->glxContext(); - m_config = qt_glx_integration_choose_config(m_xd, format, GLX_WINDOW_BIT); + QVector spec = buildSpec(format); + int confcount = 0; + GLXFBConfig *configs; + configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); + if (confcount) + { + GLXFBConfig config = findConfig(configs,confcount,format,xd); + m_context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,shareGlxContext,TRUE); + XFree(configs); + } else { + qFatal("Warning no context created"); + } - m_context = glXCreateNewContext(m_xd->display, m_config, GLX_RGBA_TYPE, shareGlxContext, True); #ifdef MYX11_DEBUG qDebug() << "QGLXGLContext::create context" << m_context; #endif +// TODO: Populate the QGLFormat with the values of the GLXFBConfig + +} + +QGLXGLContext::QGLXGLContext(MyDisplay *display, Drawable drawable, GLXContext context) + : QPlatformGLContext(), m_xd(display), m_drawable(drawable), m_context(context) +{ + } QGLXGLContext::~QGLXGLContext() @@ -156,6 +186,35 @@ QGLXGLContext::~QGLXGLContext() } } +void QGLXGLContext::createDefaultSharedContex(MyDisplay *xd) +{ + int x = 0; + int y = 0; + int w = 3; + int h = 3; + + Window sharedWindow = XCreateSimpleWindow(xd->display, xd->rootWindow(), + x, y, w, h, 0 /*border_width*/, + xd->blackPixel(), xd->whitePixel()); + GLXContext context; + QPlatformWindowFormat format; + QVector spec = buildSpec(format); + int confcount = 0; + GLXFBConfig *configs; + configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); + if (confcount) + { + GLXFBConfig config = findConfig(configs,confcount,format,xd); + context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,0,TRUE); + XFree(configs); + QPlatformGLContext *sharedContext = new QGLXGLContext(xd,sharedWindow,context); + QPlatformGLContext::setDefaultSharedContext(sharedContext); + } else { + qFatal("Warning no shared context created"); + } + +} + void QGLXGLContext::makeCurrent() { #ifdef MYX11_DEBUG diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index 6d9a216..decbe36 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -42,7 +42,13 @@ #ifndef Q_GLX_CONTEXT_H #define Q_GLX_CONTEXT_H +#include "qtestlitewindow.h" + #include +#include + +#include + #include QT_BEGIN_NAMESPACE @@ -52,7 +58,7 @@ class MyDisplay; class QGLXGLContext : public QPlatformGLContext { public: - QGLXGLContext(WId winId, MyDisplay *xd, QGLFormat& format, QPlatformGLContext* shareContext); + QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindowFormat &format); ~QGLXGLContext(); virtual void makeCurrent(); @@ -61,11 +67,19 @@ public: virtual void* getProcAddress(const QString& procName); GLXContext glxContext() {return m_context;} + + private: + static QVector buildSpec(const QPlatformWindowFormat &format); + static GLXFBConfig findConfig(const GLXFBConfig *configs,int configCount, const QPlatformWindowFormat &format, const MyDisplay *xd); + MyDisplay *m_xd; Drawable m_drawable; - GLXFBConfig m_config; GLXContext m_context; + + QGLXGLContext (MyDisplay *display, Drawable drawable, GLXContext context); + static QMutex m_defaultSharedContextMutex; + static void createDefaultSharedContex(MyDisplay *xd); }; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 0f6c921..f774458 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -84,8 +84,6 @@ static bool seen_badwindow; static Atom wmProtocolsAtom; static Atom wmDeleteWindowAtom; - - class MyX11CursorNode { public: @@ -155,14 +153,26 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration xd = platformIntegration->xd; xd->windowList.append(this); { - int x = 0; - int y = 0; - int w = 300; - int h = 300; //### - - x_window = XCreateSimpleWindow(xd->display, xd->rootWindow(), - x, y, w, h, 0 /*border_width*/, - xd->blackPixel(), xd->whitePixel()); + int x = window->x(); + int y = window->y(); + int w = window->width(); + int h = window->height(); + +// int n, i; +// if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL) { +// x_visualInfo = QGLXGLContext::findVisual(window->platformWindowFormat(),xd); + +// XSetWindowAttributes a; +// a.background_pixel = xd->whitePixel(); +// a.border_pixel = xd->blackPixel(); +// x_window = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, +// 0, visualInfo()->depth, InputOutput, visualInfo()->visual, +// CWBackPixel|CWBorderPixel, &a); +// } else { + x_window = XCreateSimpleWindow(xd->display, xd->rootWindow(), + x, y, w, h, 0 /*border_width*/, + xd->blackPixel(), xd->whitePixel()); +// } #ifdef MYX11_DEBUG qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; @@ -187,16 +197,7 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration wmProtocolsAtom, XA_ATOM, 32, PropModeAppend, (unsigned char *) &wmDeleteWindowAtom, 1); - - - setWindowTitle(QLatin1String("Qt Lighthouse")); - currentCursor = -1; - - setWindowFlags(window->windowFlags()); //##### This should not be the plugin's responsibility - - - //xw->windowTL = this; } @@ -209,6 +210,7 @@ QTestLiteWindow::~QTestLiteWindow() XDestroyWindow(xd->display, x_window); xd->windowList.removeAll(this); + delete mGLContext; } @@ -1019,8 +1021,7 @@ QPlatformGLContext *QTestLiteWindow::glContext() QPlatformGLContext *QTestLiteWindow::createGLContext() { - QGLFormat format; - QPlatformGLContext *context = new QGLXGLContext(x_window, xd, format, 0); + QPlatformGLContext *context = new QGLXGLContext(x_window, xd, widget()->platformWindowFormat()); return context; } -- cgit v0.12 From 4fb48f92e7553e8854c943e6117875c2e2b393f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 26 Jul 2010 08:09:04 +0200 Subject: Destroy subwindows in lighthouse --- src/gui/kernel/qwidget_qpa.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index 104c529..3584f87 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -116,8 +116,6 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO void QWidget::destroy(bool destroyWindow, bool destroySubWindows) { Q_D(QWidget); - //### jl: subwindows now enabled - Q_UNUSED(destroySubWindows); if ((windowType() == Qt::Popup)) qApp->d_func()->closePopup(this); @@ -127,8 +125,18 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) QApplication::setActiveWindow(0); if (windowType() != Qt::Desktop) { - if (destroyWindow && isWindow()) { -//### jl: delete all child windows... + if (destroySubWindows) { + QObjectList childList(children()); + for (int i = 0; i < childList.size(); i++) { + QWidget *widget = qobject_cast(childList.at(i)); + if (widget && widget->testAttribute(Qt::WA_NativeWindow)) { + if (widget->platformWindow()) { + widget->destroy(); + } + } + } + } + if (destroyWindow) { QTLWExtra *topData = d->maybeTopData(); if (topData) { delete topData->platformWindow; -- cgit v0.12 From 11a16e38df8022b41aae0d41a67e8b5542801d1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 26 Jul 2010 08:15:22 +0200 Subject: fix QGLContext::reset in lighthouse --- src/opengl/qgl_qpa.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 0fc885c..917842b 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -87,8 +87,10 @@ void QGLContext::reset() doneCurrent(); if (d->platformContext) { - //dont delete. This will be done by the platform - d->platformContext = 0; + if (d->paintDevice && d->paintDevice->devType() == QInternal::Widget) { + QWidget *widget = static_cast(d->paintDevice); + widget->destroy(); + } } d->crWin = false; -- cgit v0.12 From 925fc21fcfdb48093032921e76c9274512699a9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 26 Jul 2010 08:18:18 +0200 Subject: Added QGLFormat to QPlatformWindowFormat conversion --- src/gui/kernel/qplatformwindowformat_qpa.cpp | 68 +++++++++++++-------------- src/opengl/qgl_qpa.cpp | 70 ++++++++++++++++++++++++++-- 2 files changed, 100 insertions(+), 38 deletions(-) diff --git a/src/gui/kernel/qplatformwindowformat_qpa.cpp b/src/gui/kernel/qplatformwindowformat_qpa.cpp index 9d86948..1112ba9 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.cpp +++ b/src/gui/kernel/qplatformwindowformat_qpa.cpp @@ -98,8 +98,8 @@ public: }; /*! - \class QGLFormat - \brief The QGLFormat class specifies the display format of an OpenGL + \class QPlatformWindowFormat + \brief The QPlatformWindowFormat class specifies the display format of an OpenGL rendering context. \ingroup painting-3D @@ -133,7 +133,7 @@ public: different platforms, and some format options may have higher precedence than others. - You create and tell a QGLFormat object what rendering options you + You create and tell a QPlatformWindowFormat object what rendering options you want from an OpenGL rendering context. OpenGL drivers or accelerated hardware may or may not support @@ -143,7 +143,7 @@ public: context with the nearest subset of features. There are different ways to define the display characteristics of - a rendering context. One is to create a QGLFormat and make it the + a rendering context. One is to create a QPlatformWindowFormat and make it the default for the entire application: \snippet doc/src/snippets/code/src_opengl_qgl.cpp 0 @@ -164,7 +164,7 @@ public: */ /*! - Constructs a QGLFormat object with the following default settings: + Constructs a QPlatformWindowFormat object with the following default settings: \list \i \link setDoubleBuffer() Double buffer:\endlink Enabled. \i \link setDepth() Depth buffer:\endlink Enabled. @@ -187,7 +187,7 @@ QPlatformWindowFormat::QPlatformWindowFormat() /*! - Creates a QGLFormat object that is a copy of the current + Creates a QPlatformWindowFormat object that is a copy of the current defaultFormat(). If \a options is not 0, the default format is modified by the @@ -257,7 +257,7 @@ QPlatformWindowFormat &QPlatformWindowFormat::operator=(const QPlatformWindowFor } /*! - Destroys the QGLFormat. + Destroys the QPlatformWindowFormat. */ QPlatformWindowFormat::~QPlatformWindowFormat() { @@ -266,7 +266,7 @@ QPlatformWindowFormat::~QPlatformWindowFormat() } /*! - \fn bool QGLFormat::doubleBuffer() const + \fn bool QPlatformWindowFormat::doubleBuffer() const Returns true if double buffering is enabled; otherwise returns false. Double buffering is enabled by default. @@ -297,7 +297,7 @@ void QPlatformWindowFormat::setDoubleBuffer(bool enable) /*! - \fn bool QGLFormat::depth() const + \fn bool QPlatformWindowFormat::depth() const Returns true if the depth buffer is enabled; otherwise returns false. The depth buffer is enabled by default. @@ -327,7 +327,7 @@ void QPlatformWindowFormat::setDepth(bool enable) /*! - \fn bool QGLFormat::rgba() const + \fn bool QPlatformWindowFormat::rgba() const Returns true if RGBA color mode is set. Returns false if color index mode is set. The default color mode is RGBA. @@ -358,7 +358,7 @@ void QPlatformWindowFormat::setRgba(bool enable) /*! - \fn bool QGLFormat::alpha() const + \fn bool QPlatformWindowFormat::alpha() const Returns true if the alpha buffer in the framebuffer is enabled; otherwise returns false. The alpha buffer is disabled by default. @@ -386,7 +386,7 @@ void QPlatformWindowFormat::setAlpha(bool enable) /*! - \fn bool QGLFormat::accum() const + \fn bool QPlatformWindowFormat::accum() const Returns true if the accumulation buffer is enabled; otherwise returns false. The accumulation buffer is disabled by default. @@ -413,7 +413,7 @@ void QPlatformWindowFormat::setAccum(bool enable) /*! - \fn bool QGLFormat::stencil() const + \fn bool QPlatformWindowFormat::stencil() const Returns true if the stencil buffer is enabled; otherwise returns false. The stencil buffer is enabled by default. @@ -440,7 +440,7 @@ void QPlatformWindowFormat::setStencil(bool enable) /*! - \fn bool QGLFormat::stereo() const + \fn bool QPlatformWindowFormat::stereo() const Returns true if stereo buffering is enabled; otherwise returns false. Stereo buffering is disabled by default. @@ -467,7 +467,7 @@ void QPlatformWindowFormat::setStereo(bool enable) /*! - \fn bool QGLFormat::directRendering() const + \fn bool QPlatformWindowFormat::directRendering() const Returns true if direct rendering is enabled; otherwise returns false. @@ -496,7 +496,7 @@ void QPlatformWindowFormat::setDirectRendering(bool enable) } /*! - \fn bool QGLFormat::sampleBuffers() const + \fn bool QPlatformWindowFormat::sampleBuffers() const Returns true if multisample buffer support is enabled; otherwise returns false. @@ -550,7 +550,7 @@ void QPlatformWindowFormat::setSamples(int numSamples) { detach(); if (numSamples < 0) { - qWarning("QGLFormat::setSamples: Cannot have negative number of samples per pixel %d", numSamples); + qWarning("QPlatformWindowFormat::setSamples: Cannot have negative number of samples per pixel %d", numSamples); return; } d->numSamples = numSamples; @@ -615,7 +615,7 @@ QPlatformGLContext *QPlatformWindowFormat::sharedGLContext() const } ///*! -// \fn bool QGLFormat::hasOverlay() const +// \fn bool QPlatformWindowFormat::hasOverlay() const // Returns true if overlay plane is enabled; otherwise returns false. @@ -680,7 +680,7 @@ void QPlatformWindowFormat::setDepthBufferSize(int size) { detach(); if (size < 0) { - qWarning("QGLFormat::setDepthBufferSize: Cannot set negative depth buffer size %d", size); + qWarning("QPlatformWindowFormat::setDepthBufferSize: Cannot set negative depth buffer size %d", size); return; } d->depthSize = size; @@ -708,7 +708,7 @@ void QPlatformWindowFormat::setRedBufferSize(int size) { detach(); if (size < 0) { - qWarning("QGLFormat::setRedBufferSize: Cannot set negative red buffer size %d", size); + qWarning("QPlatformWindowFormat::setRedBufferSize: Cannot set negative red buffer size %d", size); return; } d->redSize = size; @@ -737,7 +737,7 @@ void QPlatformWindowFormat::setGreenBufferSize(int size) { detach(); if (size < 0) { - qWarning("QGLFormat::setGreenBufferSize: Cannot set negative green buffer size %d", size); + qWarning("QPlatformWindowFormat::setGreenBufferSize: Cannot set negative green buffer size %d", size); return; } d->greenSize = size; @@ -766,7 +766,7 @@ void QPlatformWindowFormat::setBlueBufferSize(int size) { detach(); if (size < 0) { - qWarning("QGLFormat::setBlueBufferSize: Cannot set negative blue buffer size %d", size); + qWarning("QPlatformWindowFormat::setBlueBufferSize: Cannot set negative blue buffer size %d", size); return; } d->blueSize = size; @@ -794,7 +794,7 @@ void QPlatformWindowFormat::setAlphaBufferSize(int size) { detach(); if (size < 0) { - qWarning("QGLFormat::setAlphaBufferSize: Cannot set negative alpha buffer size %d", size); + qWarning("QPlatformWindowFormat::setAlphaBufferSize: Cannot set negative alpha buffer size %d", size); return; } d->alphaSize = size; @@ -821,7 +821,7 @@ void QPlatformWindowFormat::setAccumBufferSize(int size) { detach(); if (size < 0) { - qWarning("QGLFormat::setAccumBufferSize: Cannot set negative accumulate buffer size %d", size); + qWarning("QPlatformWindowFormat::setAccumBufferSize: Cannot set negative accumulate buffer size %d", size); return; } d->accumSize = size; @@ -847,7 +847,7 @@ void QPlatformWindowFormat::setStencilBufferSize(int size) { detach(); if (size < 0) { - qWarning("QGLFormat::setStencilBufferSize: Cannot set negative stencil buffer size %d", size); + qWarning("QPlatformWindowFormat::setStencilBufferSize: Cannot set negative stencil buffer size %d", size); return; } d->stencilSize = size; @@ -865,13 +865,13 @@ int QPlatformWindowFormat::stencilBufferSize() const } /*! - Returns the default QGLFormat for the application. All QGLWidget + Returns the default QPlatformWindowFormat for the application. All QGLWidget objects that are created use this format unless another format is specified, e.g. when they are constructed. If no special default format has been set using setDefaultFormat(), the default format is the same as that created - with QGLFormat(). + with QPlatformWindowFormat(). \sa setDefaultFormat() */ @@ -882,7 +882,7 @@ QPlatformWindowFormat QPlatformWindowFormat::defaultFormat() } /*! - Sets a new default QGLFormat for the application to \a f. For + Sets a new default QPlatformWindowFormat for the application to \a f. For example, to set single buffering as the default instead of double buffering, your main() might contain code like this: \snippet doc/src/snippets/code/src_opengl_qgl.cpp 4 @@ -897,7 +897,7 @@ void QPlatformWindowFormat::setDefaultFormat(const QPlatformWindowFormat &f) /*! - Returns the default QGLFormat for overlay contexts. + Returns the default QPlatformWindowFormat for overlay contexts. The default overlay format is: \list @@ -923,7 +923,7 @@ void QPlatformWindowFormat::setDefaultFormat(const QPlatformWindowFormat &f) //} ///*! -// Sets a new default QGLFormat for overlay contexts to \a f. This +// Sets a new default QPlatformWindowFormat for overlay contexts to \a f. This // format is used whenever a QGLWidget is created with a format that // hasOverlay() enabled. @@ -953,10 +953,10 @@ void QPlatformWindowFormat::setDefaultFormat(const QPlatformWindowFormat &f) /*! - Returns true if all the options of the two QGLFormat objects + Returns true if all the options of the two QPlatformWindowFormat objects \a a and \a b are equal; otherwise returns false. - \relates QGLFormat + \relates QPlatformWindowFormat */ bool operator==(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) @@ -976,10 +976,10 @@ bool operator==(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) /*! - Returns false if all the options of the two QGLFormat objects + Returns false if all the options of the two QPlatformWindowFormat objects \a a and \a b are equal; otherwise returns true. - \relates QGLFormat + \relates QPlatformWindowFormat */ bool operator!=(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 917842b..8fa210b 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -52,6 +52,67 @@ QT_BEGIN_NAMESPACE +static QGLFormat qt_platformwindowformat_to_glformat(const QPlatformWindowFormat &format) +{ + QGLFormat retFormat; + retFormat.setAccum(format.accum()); + if (format.accumBufferSize() >= 0) + retFormat.setAccumBufferSize(format.accumBufferSize()); + retFormat.setAlpha(format.alpha()); + if (format.alphaBufferSize() >= 0) + retFormat.setAlphaBufferSize(format.alphaBufferSize()); + if (format.blueBufferSize() >= 0) + retFormat.setBlueBufferSize(format.blueBufferSize()); + retFormat.setDepth(format.depth()); + if (format.depthBufferSize() >= 0) + retFormat.setDepthBufferSize(format.depthBufferSize()); + retFormat.setDirectRendering(format.directRendering()); + retFormat.setDoubleBuffer(format.doubleBuffer()); + if (format.greenBufferSize() >= 0) + retFormat.setGreenBufferSize(format.greenBufferSize()); + if (format.redBufferSize() >= 0) + retFormat.setRedBufferSize(format.redBufferSize()); + retFormat.setRgba(format.rgba()); + retFormat.setSampleBuffers(format.sampleBuffers()); + retFormat.setSamples(format.sampleBuffers()); + retFormat.setStencil(format.stencil()); + if (format.stencilBufferSize() >= 0) + retFormat.setStencilBufferSize(format.stencilBufferSize()); + retFormat.setStereo(format.stereo()); + retFormat.setSwapInterval(format.swapInterval()); + return retFormat; +} + +static QPlatformWindowFormat qt_glformat_to_platformwindowformat(const QGLFormat &format) +{ + QPlatformWindowFormat retFormat; + retFormat.setAccum(format.accum()); + if (format.accumBufferSize() >= 0) + retFormat.setAccumBufferSize(format.accumBufferSize()); + retFormat.setAlpha(format.alpha()); + if (format.alphaBufferSize() >= 0) + retFormat.setAlphaBufferSize(format.alphaBufferSize()); + if (format.blueBufferSize() >= 0) + retFormat.setBlueBufferSize(format.blueBufferSize()); + retFormat.setDepth(format.depth()); + if (format.depthBufferSize() >= 0) + retFormat.setDepthBufferSize(format.depthBufferSize()); + retFormat.setDirectRendering(format.directRendering()); + retFormat.setDoubleBuffer(format.doubleBuffer()); + if (format.greenBufferSize() >= 0) + retFormat.setGreenBufferSize(format.greenBufferSize()); + if (format.redBufferSize() >= 0) + retFormat.setRedBufferSize(format.redBufferSize()); + retFormat.setRgba(format.rgba()); + retFormat.setSampleBuffers(format.sampleBuffers()); + retFormat.setSamples(format.sampleBuffers()); + retFormat.setStencil(format.stencil()); + if (format.stencilBufferSize() >= 0) + retFormat.setStencilBufferSize(format.stencilBufferSize()); + retFormat.setStereo(format.stereo()); + retFormat.setSwapInterval(format.swapInterval()); + return retFormat; +} bool QGLFormat::hasOpenGL() { @@ -61,14 +122,15 @@ bool QGLFormat::hasOpenGL() bool QGLContext::chooseContext(const QGLContext* shareContext) { Q_D(QGLContext); - if (!d->paintDevice && d->paintDevice->devType() != QInternal::Widget) { + if (!d->paintDevice || d->paintDevice->devType() != QInternal::Widget) { d->valid = false; }else { QWidget *widget = static_cast(d->paintDevice); if (!widget->platformWindow()){ - QPlatformWindowFormat format = widget->platformWindowFormat(); - format.setWindowApi(QPlatformWindowFormat::OpenGL); - widget->setPlatformWindowFormat(format); + QGLFormat glformat = format(); + QPlatformWindowFormat winFormat = qt_glformat_to_platformwindowformat(glformat); + winFormat.setWindowApi(QPlatformWindowFormat::OpenGL); + widget->setPlatformWindowFormat(winFormat); widget->winId();//make window } d->platformContext = widget->platformWindow()->glContext(); -- cgit v0.12 From f3ae27721ad0e71923e8538370731f91acb53601 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 26 Jul 2010 09:34:10 +0200 Subject: Renamed files in EGLFS platform plugin --- src/plugins/platforms/eglfs/eglfs.pro | 16 + src/plugins/platforms/eglfs/eglintegration.cpp | 469 ---------------------- src/plugins/platforms/eglfs/eglintegration.h | 70 ---- src/plugins/platforms/eglfs/eglintegration.pro | 14 - src/plugins/platforms/eglfs/main.cpp | 2 +- src/plugins/platforms/eglfs/qeglfsintegration.cpp | 469 ++++++++++++++++++++++ src/plugins/platforms/eglfs/qeglfsintegration.h | 70 ++++ 7 files changed, 556 insertions(+), 554 deletions(-) create mode 100644 src/plugins/platforms/eglfs/eglfs.pro delete mode 100644 src/plugins/platforms/eglfs/eglintegration.cpp delete mode 100644 src/plugins/platforms/eglfs/eglintegration.h delete mode 100644 src/plugins/platforms/eglfs/eglintegration.pro create mode 100644 src/plugins/platforms/eglfs/qeglfsintegration.cpp create mode 100644 src/plugins/platforms/eglfs/qeglfsintegration.h diff --git a/src/plugins/platforms/eglfs/eglfs.pro b/src/plugins/platforms/eglfs/eglfs.pro new file mode 100644 index 0000000..2cc5997 --- /dev/null +++ b/src/plugins/platforms/eglfs/eglfs.pro @@ -0,0 +1,16 @@ +TARGET = qeglfs +TEMPLATE = lib +CONFIG += plugin + +QT += opengl + +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms + +SOURCES = main.cpp \ + qeglfsintegration.cpp \ + ../eglconvenience/qeglconvenience.cpp +HEADERS = qeglfsintegration.h \ + ../eglconvenience/qeglconvenience.h + +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target diff --git a/src/plugins/platforms/eglfs/eglintegration.cpp b/src/plugins/platforms/eglfs/eglintegration.cpp deleted file mode 100644 index 9470c99..0000000 --- a/src/plugins/platforms/eglfs/eglintegration.cpp +++ /dev/null @@ -1,469 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "eglintegration.h" - -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "../eglconvenience/qeglconvenience.h" - -//#define QEGL_EXTRA_DEBUG -#ifdef QEGL_EXTRA_DEBUG -struct AttrInfo { EGLint attr; const char *name; }; -static struct AttrInfo attrs[] = { - {EGL_BUFFER_SIZE, "EGL_BUFFER_SIZE"}, - {EGL_ALPHA_SIZE, "EGL_ALPHA_SIZE"}, - {EGL_BLUE_SIZE, "EGL_BLUE_SIZE"}, - {EGL_GREEN_SIZE, "EGL_GREEN_SIZE"}, - {EGL_RED_SIZE, "EGL_RED_SIZE"}, - {EGL_DEPTH_SIZE, "EGL_DEPTH_SIZE"}, - {EGL_STENCIL_SIZE, "EGL_STENCIL_SIZE"}, - {EGL_CONFIG_CAVEAT, "EGL_CONFIG_CAVEAT"}, - {EGL_CONFIG_ID, "EGL_CONFIG_ID"}, - {EGL_LEVEL, "EGL_LEVEL"}, - {EGL_MAX_PBUFFER_HEIGHT, "EGL_MAX_PBUFFER_HEIGHT"}, - {EGL_MAX_PBUFFER_PIXELS, "EGL_MAX_PBUFFER_PIXELS"}, - {EGL_MAX_PBUFFER_WIDTH, "EGL_MAX_PBUFFER_WIDTH"}, - {EGL_NATIVE_RENDERABLE, "EGL_NATIVE_RENDERABLE"}, - {EGL_NATIVE_VISUAL_ID, "EGL_NATIVE_VISUAL_ID"}, - {EGL_NATIVE_VISUAL_TYPE, "EGL_NATIVE_VISUAL_TYPE"}, - {EGL_SAMPLES, "EGL_SAMPLES"}, - {EGL_SAMPLE_BUFFERS, "EGL_SAMPLE_BUFFERS"}, - {EGL_SURFACE_TYPE, "EGL_SURFACE_TYPE"}, - {EGL_TRANSPARENT_TYPE, "EGL_TRANSPARENT_TYPE"}, - {EGL_TRANSPARENT_BLUE_VALUE, "EGL_TRANSPARENT_BLUE_VALUE"}, - {EGL_TRANSPARENT_GREEN_VALUE, "EGL_TRANSPARENT_GREEN_VALUE"}, - {EGL_TRANSPARENT_RED_VALUE, "EGL_TRANSPARENT_RED_VALUE"}, - {EGL_BIND_TO_TEXTURE_RGB, "EGL_BIND_TO_TEXTURE_RGB"}, - {EGL_BIND_TO_TEXTURE_RGBA, "EGL_BIND_TO_TEXTURE_RGBA"}, - {EGL_MIN_SWAP_INTERVAL, "EGL_MIN_SWAP_INTERVAL"}, - {EGL_MAX_SWAP_INTERVAL, "EGL_MAX_SWAP_INTERVAL"}, - {-1, 0}}; -#endif //QEGL_EXTRA_DEBUG - - -class QEglScreen; - -class QEglContext : public QPlatformGLContext -{ -public: - QEglContext(QGLFormat& format, QPlatformGLContext* shareContext = 0); - ~QEglContext(); - - virtual void makeCurrent(); - virtual void doneCurrent(); - virtual void swapBuffers(); - virtual void* getProcAddress(const QString& procName); - - EGLContext eglContext() {return m_context;} - QSize size() const { return m_size; } - - QGLFormat format() const { return m_format; } -private: - - EGLContext m_context; - EGLDisplay m_dpy; - EGLSurface m_surface; - QSize m_size; - static bool singleton_watch; - QGLFormat m_format; -}; - -bool QEglContext::singleton_watch = false; - -QEglContext::QEglContext(QGLFormat& format, QPlatformGLContext* shareContext) -{ - if (singleton_watch) - qFatal("There can be only one"); - singleton_watch = true; - - Q_UNUSED(shareContext); - Q_UNUSED(format); - - EGLint major, minor; -#ifdef QEGL_EXTRA_DEBUG - EGLint index; -#endif - if (!eglBindAPI(EGL_OPENGL_ES_API)) { - fprintf(stderr, "Could not bind GL_ES API\n"); - qFatal("EGL error"); - } - - m_dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); - if (m_dpy == EGL_NO_DISPLAY) { - fprintf(stderr, "Could not open egl display\n"); - qFatal("EGL error"); - } - fprintf(stderr, "Opened display %p\n", m_dpy); - - if (!eglInitialize(m_dpy, &major, &minor)) { - fprintf(stderr, "Could not initialize egl display\n"); - qFatal("EGL error"); - } - - fprintf(stderr, "Initialized display %d %d\n", major, minor); - - QPlatformWindowFormat platformFormat; - platformFormat.setDepth(16); - platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); - platformFormat.setRedBufferSize(5); - platformFormat.setGreenBufferSize(6); - platformFormat.setBlueBufferSize(5); - EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); - -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "Configuration %d matches requirements\n", (int)config); - - for (index = 0; attrs[index].attr != -1; ++index) { - EGLint value; - if (eglGetConfigAttrib(m_dpy, config, attrs[index].attr, &value)) { - printf("\t%s: %d\n", attrs[index].name, (int)value); - } - } - printf("\n"); -#endif - EGLint temp; - EGLint attribList[32]; - - temp = 0; - - attribList[temp++] = EGL_CONTEXT_CLIENT_VERSION; - attribList[temp++] = 2; // GLES version 2 - attribList[temp++] = EGL_NONE; - - - m_context = eglCreateContext(m_dpy, config, NULL, attribList); - if (m_context == EGL_NO_CONTEXT) { - fprintf(stderr, "Could not create the egl context\n"); - eglTerminate(m_dpy); - qFatal("EGL error"); - } - - m_surface = eglCreateWindowSurface(m_dpy, config, 0, NULL); - if (m_surface == EGL_NO_SURFACE) { - fprintf(stderr, "Could not create the egl surface: error = 0x%x\n", eglGetError()); - eglTerminate(m_dpy); - qFatal("EGL error"); - } - - EGLint w,h; - - eglQuerySurface(m_dpy, m_surface, EGL_WIDTH, &w); - eglQuerySurface(m_dpy, m_surface, EGL_HEIGHT, &h); - fprintf(stderr, "Created surface %dx%d\n", w, h); - - m_size = QSize(w,h); - - -} - -QEglContext::~QEglContext() -{ -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglContext::~QEglContext()"; -#endif -} - -void QEglContext::makeCurrent() -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglContext::makeCurrent\n"); -#endif - if (!eglMakeCurrent(m_dpy, m_surface, m_surface, m_context)) - fprintf(stderr, "Could not make the egl context current\n"); - -#ifdef QEGL_EXTRA_DEBUG - static bool showDebug = true; - if (showDebug) { - showDebug = false; - const char *str = (const char*)glGetString(GL_VENDOR); - qDebug() << "Vendor" << str; - printf("Vendor %s\n", str); - str = (const char*)glGetString(GL_RENDERER); - qDebug() << "Renderer" << str; - printf("Renderer %s\n", str); - str = (const char*)glGetString(GL_VERSION); - qDebug() << "Version" << str; - printf("Version %s\n", str); - - str = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); - qDebug() << "Shader version" << str; - - str = (const char*)glGetString(GL_EXTENSIONS); - qDebug() << "Extensions" << str; - printf("Extensions %s\n", str); - - } -#endif -} - -void QEglContext::doneCurrent() -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglContext::doneCurrent\n"); -#endif - if (!eglMakeCurrent(m_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)) - fprintf(stderr, "Could not release the egl context\n"); -} - -void QEglContext::swapBuffers() -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglContext::swapBuffers\n"); -#endif - eglSwapBuffers(m_dpy, m_surface); -} - -void* QEglContext::getProcAddress(const QString& procName) -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglContext::getProcAddress\n"); -#endif - return (void*)eglGetProcAddress(qPrintable(procName)); -} - - -class QEglPaintDevice; -class QEglScreen : public QPlatformScreen -{ -public: - QEglScreen(); - ~QEglScreen() {} - - QRect geometry() const { return m_geometry; } - int depth() const { return m_depth; } - QImage::Format format() const { return m_format; } - //QSize physicalSize() const { return m_physicalSize; } //### - -public: - QRect m_geometry; - int m_depth; - QImage::Format m_format; - //QSize m_physicalSize; - QEglContext * m_platformContext; -}; - - -class QEglWindow : public QPlatformWindow -{ -public: - QEglWindow(QWidget *w, QEglScreen *screen); - QPlatformGLContext *glContext(); - - void setGeometry(const QRect &); - WId winId() const; - - QGLContext *context() { return m_context; } - QEglPaintDevice *paintDevice() { return m_pd; } -private: - QEglScreen *m_screen; - QEglPaintDevice *m_pd; - QGLContext *m_context; - WId m_winid; -}; - -class QEglPaintDevice : public QGLPaintDevice -{ -public: - QEglPaintDevice(QEglScreen *screen, QEglWindow *window); - - QSize size() const { return m_screen->geometry().size(); } - QGLContext* context() const { return m_window->context();} - - QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); } - - void beginPaint(){ - QGLPaintDevice::beginPaint(); - } -private: - QEglScreen *m_screen; - QEglWindow * m_window; -}; - - - - -QEglScreen::QEglScreen() - : m_depth(16), m_format(QImage::Format_RGB16), m_platformContext(0) -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglScreen %p\n", this); -#endif - QGLFormat format = QGLFormat::defaultFormat(); - m_platformContext = new QEglContext(format); - - - m_geometry = QRect(QPoint(), m_platformContext->size()); - -} - - - - -QEglPaintDevice::QEglPaintDevice(QEglScreen *screen, QEglWindow *window) - :QGLPaintDevice(), m_screen(screen), m_window(window) -{ -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglPaintDevice" << this << screen << window; -#endif -} - - - -QEglWindow::QEglWindow(QWidget *w, QEglScreen *screen) - : QPlatformWindow(w), m_screen(screen), m_pd(0), m_context(0) -{ - static int serialNo = 0; - m_winid = ++serialNo; -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglWindow %p: %p %p 0x%x\n", this, w, screen, uint(m_winid)); -#endif - m_pd = new QEglPaintDevice(screen, this); - m_context = new QGLContext( screen->m_platformContext->format(), w); - m_context->create(); -} - - -void QEglWindow::setGeometry(const QRect &) -{ - // We only support full-screen windows - QRect rect(m_screen->availableGeometry()); - QWindowSystemInterface::handleGeometryChange(this->widget(), rect); - - QPlatformWindow::setGeometry(rect); -} - -WId QEglWindow::winId() const -{ - return m_winid; -} - - - -QPlatformGLContext *QEglWindow::glContext() -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglWindow::glContext %p\n", m_screen->m_platformContext); -#endif - Q_ASSERT(m_screen); - return m_screen->m_platformContext; -} - -QEglIntegration::QEglIntegration() -{ - m_primaryScreen = new QEglScreen(); - - mScreens.append(m_primaryScreen); -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglIntegration\n"); -#endif -} - -QPixmapData *QEglIntegration::createPixmapData(QPixmapData::PixelType type) const -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglIntegration::createPixmapData %d\n", type); -#endif - return new QGLPixmapData(type); -} - -QPlatformWindow *QEglIntegration::createPlatformWindow(QWidget *widget, WId winId) const -{ - Q_UNUSED(winId); -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglIntegration::createPlatformWindow" << widget; -#endif - return new QEglWindow(widget, m_primaryScreen); -} - - -class QEglWindowSurface : public QWindowSurface -{ -public: - QEglWindowSurface(QWidget *window, QEglScreen *screen); - ~QEglWindowSurface() {} - - QPaintDevice *paintDevice() { return m_window->paintDevice(); } - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void resize(const QSize &size) {} -private: - QEglScreen *m_screen; - QEglWindow *m_window; -}; - -QEglWindowSurface::QEglWindowSurface(QWidget *window, QEglScreen *screen) - :QWindowSurface(window), m_screen(screen), m_window(0) -{ -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglWindowSurface" << window << screen; -#endif - m_window = static_cast(window->platformWindow()); -} - - -void QEglWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglWindowSurface::flush"; -#endif - m_screen->m_platformContext->swapBuffers(); -} - -QWindowSurface *QEglIntegration::createWindowSurface(QWidget *widget, WId winId) const -{ - Q_UNUSED(winId); - -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglIntegration::createWindowSurface" << widget; -#endif - return new QEglWindowSurface(widget, m_primaryScreen); -} diff --git a/src/plugins/platforms/eglfs/eglintegration.h b/src/plugins/platforms/eglfs/eglintegration.h deleted file mode 100644 index 7b9b8cf..0000000 --- a/src/plugins/platforms/eglfs/eglintegration.h +++ /dev/null @@ -1,70 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the plugins of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef EGLINTEGRATION_H -#define EGLINTEGRATION_H - -#include -#include - -QT_BEGIN_NAMESPACE - -class QEglScreen; -class QEglIntegration : public QPlatformIntegration -{ -public: - QEglIntegration(); - - QPixmapData *createPixmapData(QPixmapData::PixelType type) const; - QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; - QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; - - QList screens() const { return mScreens; } - -private: - QList mScreens; - QEglScreen *m_primaryScreen; -}; - -QT_END_NAMESPACE - - -#endif diff --git a/src/plugins/platforms/eglfs/eglintegration.pro b/src/plugins/platforms/eglfs/eglintegration.pro deleted file mode 100644 index 7cd2f05..0000000 --- a/src/plugins/platforms/eglfs/eglintegration.pro +++ /dev/null @@ -1,14 +0,0 @@ -TARGET = eglintegration -TEMPLATE = lib -CONFIG += plugin - -QT += opengl - -SOURCES = main.cpp \ - eglintegration.cpp \ - ../eglconvenience/qeglconvenience.cpp -HEADERS = eglintegration.h \ - ../eglconvenience/qeglconvenience.h - -target.path += $$[QT_INSTALL_PLUGINS]/platforms -INSTALLS += target diff --git a/src/plugins/platforms/eglfs/main.cpp b/src/plugins/platforms/eglfs/main.cpp index adaea78..e1731e8 100644 --- a/src/plugins/platforms/eglfs/main.cpp +++ b/src/plugins/platforms/eglfs/main.cpp @@ -40,7 +40,7 @@ ****************************************************************************/ #include -#include "eglintegration.h" +#include "qeglfsintegration.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp new file mode 100644 index 0000000..4d17980 --- /dev/null +++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp @@ -0,0 +1,469 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qeglfsintegration.h" + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "../eglconvenience/qeglconvenience.h" + +//#define QEGL_EXTRA_DEBUG +#ifdef QEGL_EXTRA_DEBUG +struct AttrInfo { EGLint attr; const char *name; }; +static struct AttrInfo attrs[] = { + {EGL_BUFFER_SIZE, "EGL_BUFFER_SIZE"}, + {EGL_ALPHA_SIZE, "EGL_ALPHA_SIZE"}, + {EGL_BLUE_SIZE, "EGL_BLUE_SIZE"}, + {EGL_GREEN_SIZE, "EGL_GREEN_SIZE"}, + {EGL_RED_SIZE, "EGL_RED_SIZE"}, + {EGL_DEPTH_SIZE, "EGL_DEPTH_SIZE"}, + {EGL_STENCIL_SIZE, "EGL_STENCIL_SIZE"}, + {EGL_CONFIG_CAVEAT, "EGL_CONFIG_CAVEAT"}, + {EGL_CONFIG_ID, "EGL_CONFIG_ID"}, + {EGL_LEVEL, "EGL_LEVEL"}, + {EGL_MAX_PBUFFER_HEIGHT, "EGL_MAX_PBUFFER_HEIGHT"}, + {EGL_MAX_PBUFFER_PIXELS, "EGL_MAX_PBUFFER_PIXELS"}, + {EGL_MAX_PBUFFER_WIDTH, "EGL_MAX_PBUFFER_WIDTH"}, + {EGL_NATIVE_RENDERABLE, "EGL_NATIVE_RENDERABLE"}, + {EGL_NATIVE_VISUAL_ID, "EGL_NATIVE_VISUAL_ID"}, + {EGL_NATIVE_VISUAL_TYPE, "EGL_NATIVE_VISUAL_TYPE"}, + {EGL_SAMPLES, "EGL_SAMPLES"}, + {EGL_SAMPLE_BUFFERS, "EGL_SAMPLE_BUFFERS"}, + {EGL_SURFACE_TYPE, "EGL_SURFACE_TYPE"}, + {EGL_TRANSPARENT_TYPE, "EGL_TRANSPARENT_TYPE"}, + {EGL_TRANSPARENT_BLUE_VALUE, "EGL_TRANSPARENT_BLUE_VALUE"}, + {EGL_TRANSPARENT_GREEN_VALUE, "EGL_TRANSPARENT_GREEN_VALUE"}, + {EGL_TRANSPARENT_RED_VALUE, "EGL_TRANSPARENT_RED_VALUE"}, + {EGL_BIND_TO_TEXTURE_RGB, "EGL_BIND_TO_TEXTURE_RGB"}, + {EGL_BIND_TO_TEXTURE_RGBA, "EGL_BIND_TO_TEXTURE_RGBA"}, + {EGL_MIN_SWAP_INTERVAL, "EGL_MIN_SWAP_INTERVAL"}, + {EGL_MAX_SWAP_INTERVAL, "EGL_MAX_SWAP_INTERVAL"}, + {-1, 0}}; +#endif //QEGL_EXTRA_DEBUG + + +class QEglScreen; + +class QEglContext : public QPlatformGLContext +{ +public: + QEglContext(QGLFormat& format, QPlatformGLContext* shareContext = 0); + ~QEglContext(); + + virtual void makeCurrent(); + virtual void doneCurrent(); + virtual void swapBuffers(); + virtual void* getProcAddress(const QString& procName); + + EGLContext eglContext() {return m_context;} + QSize size() const { return m_size; } + + QGLFormat format() const { return m_format; } +private: + + EGLContext m_context; + EGLDisplay m_dpy; + EGLSurface m_surface; + QSize m_size; + static bool singleton_watch; + QGLFormat m_format; +}; + +bool QEglContext::singleton_watch = false; + +QEglContext::QEglContext(QGLFormat& format, QPlatformGLContext* shareContext) +{ + if (singleton_watch) + qFatal("There can be only one"); + singleton_watch = true; + + Q_UNUSED(shareContext); + Q_UNUSED(format); + + EGLint major, minor; +#ifdef QEGL_EXTRA_DEBUG + EGLint index; +#endif + if (!eglBindAPI(EGL_OPENGL_ES_API)) { + fprintf(stderr, "Could not bind GL_ES API\n"); + qFatal("EGL error"); + } + + m_dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); + if (m_dpy == EGL_NO_DISPLAY) { + fprintf(stderr, "Could not open egl display\n"); + qFatal("EGL error"); + } + fprintf(stderr, "Opened display %p\n", m_dpy); + + if (!eglInitialize(m_dpy, &major, &minor)) { + fprintf(stderr, "Could not initialize egl display\n"); + qFatal("EGL error"); + } + + fprintf(stderr, "Initialized display %d %d\n", major, minor); + + QPlatformWindowFormat platformFormat; + platformFormat.setDepth(16); + platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); + platformFormat.setRedBufferSize(5); + platformFormat.setGreenBufferSize(6); + platformFormat.setBlueBufferSize(5); + EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); + +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "Configuration %d matches requirements\n", (int)config); + + for (index = 0; attrs[index].attr != -1; ++index) { + EGLint value; + if (eglGetConfigAttrib(m_dpy, config, attrs[index].attr, &value)) { + printf("\t%s: %d\n", attrs[index].name, (int)value); + } + } + printf("\n"); +#endif + EGLint temp; + EGLint attribList[32]; + + temp = 0; + + attribList[temp++] = EGL_CONTEXT_CLIENT_VERSION; + attribList[temp++] = 2; // GLES version 2 + attribList[temp++] = EGL_NONE; + + + m_context = eglCreateContext(m_dpy, config, NULL, attribList); + if (m_context == EGL_NO_CONTEXT) { + fprintf(stderr, "Could not create the egl context\n"); + eglTerminate(m_dpy); + qFatal("EGL error"); + } + + m_surface = eglCreateWindowSurface(m_dpy, config, 0, NULL); + if (m_surface == EGL_NO_SURFACE) { + fprintf(stderr, "Could not create the egl surface: error = 0x%x\n", eglGetError()); + eglTerminate(m_dpy); + qFatal("EGL error"); + } + + EGLint w,h; + + eglQuerySurface(m_dpy, m_surface, EGL_WIDTH, &w); + eglQuerySurface(m_dpy, m_surface, EGL_HEIGHT, &h); + fprintf(stderr, "Created surface %dx%d\n", w, h); + + m_size = QSize(w,h); + + +} + +QEglContext::~QEglContext() +{ +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglContext::~QEglContext()"; +#endif +} + +void QEglContext::makeCurrent() +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglContext::makeCurrent\n"); +#endif + if (!eglMakeCurrent(m_dpy, m_surface, m_surface, m_context)) + fprintf(stderr, "Could not make the egl context current\n"); + +#ifdef QEGL_EXTRA_DEBUG + static bool showDebug = true; + if (showDebug) { + showDebug = false; + const char *str = (const char*)glGetString(GL_VENDOR); + qDebug() << "Vendor" << str; + printf("Vendor %s\n", str); + str = (const char*)glGetString(GL_RENDERER); + qDebug() << "Renderer" << str; + printf("Renderer %s\n", str); + str = (const char*)glGetString(GL_VERSION); + qDebug() << "Version" << str; + printf("Version %s\n", str); + + str = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); + qDebug() << "Shader version" << str; + + str = (const char*)glGetString(GL_EXTENSIONS); + qDebug() << "Extensions" << str; + printf("Extensions %s\n", str); + + } +#endif +} + +void QEglContext::doneCurrent() +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglContext::doneCurrent\n"); +#endif + if (!eglMakeCurrent(m_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)) + fprintf(stderr, "Could not release the egl context\n"); +} + +void QEglContext::swapBuffers() +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglContext::swapBuffers\n"); +#endif + eglSwapBuffers(m_dpy, m_surface); +} + +void* QEglContext::getProcAddress(const QString& procName) +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglContext::getProcAddress\n"); +#endif + return (void*)eglGetProcAddress(qPrintable(procName)); +} + + +class QEglPaintDevice; +class QEglScreen : public QPlatformScreen +{ +public: + QEglScreen(); + ~QEglScreen() {} + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + //QSize physicalSize() const { return m_physicalSize; } //### + +public: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + //QSize m_physicalSize; + QEglContext * m_platformContext; +}; + + +class QEglWindow : public QPlatformWindow +{ +public: + QEglWindow(QWidget *w, QEglScreen *screen); + QPlatformGLContext *glContext(); + + void setGeometry(const QRect &); + WId winId() const; + + QGLContext *context() { return m_context; } + QEglPaintDevice *paintDevice() { return m_pd; } +private: + QEglScreen *m_screen; + QEglPaintDevice *m_pd; + QGLContext *m_context; + WId m_winid; +}; + +class QEglPaintDevice : public QGLPaintDevice +{ +public: + QEglPaintDevice(QEglScreen *screen, QEglWindow *window); + + QSize size() const { return m_screen->geometry().size(); } + QGLContext* context() const { return m_window->context();} + + QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); } + + void beginPaint(){ + QGLPaintDevice::beginPaint(); + } +private: + QEglScreen *m_screen; + QEglWindow * m_window; +}; + + + + +QEglScreen::QEglScreen() + : m_depth(16), m_format(QImage::Format_RGB16), m_platformContext(0) +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglScreen %p\n", this); +#endif + QGLFormat format = QGLFormat::defaultFormat(); + m_platformContext = new QEglContext(format); + + + m_geometry = QRect(QPoint(), m_platformContext->size()); + +} + + + + +QEglPaintDevice::QEglPaintDevice(QEglScreen *screen, QEglWindow *window) + :QGLPaintDevice(), m_screen(screen), m_window(window) +{ +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglPaintDevice" << this << screen << window; +#endif +} + + + +QEglWindow::QEglWindow(QWidget *w, QEglScreen *screen) + : QPlatformWindow(w), m_screen(screen), m_pd(0), m_context(0) +{ + static int serialNo = 0; + m_winid = ++serialNo; +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglWindow %p: %p %p 0x%x\n", this, w, screen, uint(m_winid)); +#endif + m_pd = new QEglPaintDevice(screen, this); + m_context = new QGLContext( screen->m_platformContext->format(), w); + m_context->create(); +} + + +void QEglWindow::setGeometry(const QRect &) +{ + // We only support full-screen windows + QRect rect(m_screen->availableGeometry()); + QWindowSystemInterface::handleGeometryChange(this->widget(), rect); + + QPlatformWindow::setGeometry(rect); +} + +WId QEglWindow::winId() const +{ + return m_winid; +} + + + +QPlatformGLContext *QEglWindow::glContext() +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglWindow::glContext %p\n", m_screen->m_platformContext); +#endif + Q_ASSERT(m_screen); + return m_screen->m_platformContext; +} + +QEglIntegration::QEglIntegration() +{ + m_primaryScreen = new QEglScreen(); + + mScreens.append(m_primaryScreen); +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglIntegration\n"); +#endif +} + +QPixmapData *QEglIntegration::createPixmapData(QPixmapData::PixelType type) const +{ +#ifdef QEGL_EXTRA_DEBUG + fprintf(stderr, "QEglIntegration::createPixmapData %d\n", type); +#endif + return new QGLPixmapData(type); +} + +QPlatformWindow *QEglIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglIntegration::createPlatformWindow" << widget; +#endif + return new QEglWindow(widget, m_primaryScreen); +} + + +class QEglWindowSurface : public QWindowSurface +{ +public: + QEglWindowSurface(QWidget *window, QEglScreen *screen); + ~QEglWindowSurface() {} + + QPaintDevice *paintDevice() { return m_window->paintDevice(); } + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize(const QSize &size) {} +private: + QEglScreen *m_screen; + QEglWindow *m_window; +}; + +QEglWindowSurface::QEglWindowSurface(QWidget *window, QEglScreen *screen) + :QWindowSurface(window), m_screen(screen), m_window(0) +{ +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglWindowSurface" << window << screen; +#endif + m_window = static_cast(window->platformWindow()); +} + + +void QEglWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglWindowSurface::flush"; +#endif + m_screen->m_platformContext->swapBuffers(); +} + +QWindowSurface *QEglIntegration::createWindowSurface(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + +#ifdef QEGL_EXTRA_DEBUG + qDebug() << "QEglIntegration::createWindowSurface" << widget; +#endif + return new QEglWindowSurface(widget, m_primaryScreen); +} diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h new file mode 100644 index 0000000..7b9b8cf --- /dev/null +++ b/src/plugins/platforms/eglfs/qeglfsintegration.h @@ -0,0 +1,70 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef EGLINTEGRATION_H +#define EGLINTEGRATION_H + +#include +#include + +QT_BEGIN_NAMESPACE + +class QEglScreen; +class QEglIntegration : public QPlatformIntegration +{ +public: + QEglIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QList screens() const { return mScreens; } + +private: + QList mScreens; + QEglScreen *m_primaryScreen; +}; + +QT_END_NAMESPACE + + +#endif -- cgit v0.12 From 4edb2026545574e287c3d71c272c02dec9134e89 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 27 Jul 2010 07:42:44 +0200 Subject: Refactored the eglfs plugin seperated the functionality into different files, and made the paintdevice belong to the windowsurface. Everything really belongs to the screen, since everything is full screen but, this makes it more on par with the other plugins. --- src/gui/kernel/qplatformscreen_qpa.h | 2 +- .../platforms/eglconvenience/qeglconvenience.cpp | 5 +- .../eglconvenience/qeglplatformcontext.cpp | 47 ++- src/plugins/platforms/eglfs/eglfs.pro | 17 +- src/plugins/platforms/eglfs/main.cpp | 2 +- src/plugins/platforms/eglfs/qeglfsintegration.cpp | 412 +-------------------- src/plugins/platforms/eglfs/qeglfsintegration.h | 13 +- src/plugins/platforms/eglfs/qeglfsscreen.cpp | 174 +++++++++ src/plugins/platforms/eglfs/qeglfsscreen.h | 75 ++++ src/plugins/platforms/eglfs/qeglfswindow.cpp | 83 +++++ src/plugins/platforms/eglfs/qeglfswindow.h | 69 ++++ .../platforms/eglfs/qeglfswindowsurface.cpp | 103 ++++++ src/plugins/platforms/eglfs/qeglfswindowsurface.h | 66 ++++ 13 files changed, 655 insertions(+), 413 deletions(-) create mode 100644 src/plugins/platforms/eglfs/qeglfsscreen.cpp create mode 100644 src/plugins/platforms/eglfs/qeglfsscreen.h create mode 100644 src/plugins/platforms/eglfs/qeglfswindow.cpp create mode 100644 src/plugins/platforms/eglfs/qeglfswindow.h create mode 100644 src/plugins/platforms/eglfs/qeglfswindowsurface.cpp create mode 100644 src/plugins/platforms/eglfs/qeglfswindowsurface.h diff --git a/src/gui/kernel/qplatformscreen_qpa.h b/src/gui/kernel/qplatformscreen_qpa.h index 7d0e28d..f603db5 100644 --- a/src/gui/kernel/qplatformscreen_qpa.h +++ b/src/gui/kernel/qplatformscreen_qpa.h @@ -59,7 +59,7 @@ public: virtual ~QPlatformScreen() { } virtual QRect geometry() const = 0; - virtual QRect availableGeometry() const {return geometry();}; + virtual QRect availableGeometry() const {return geometry();} virtual int depth() const = 0; virtual QImage::Format format() const = 0; virtual QSize physicalSize() const; diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp index 1064e47..c50101d 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp @@ -1,7 +1,5 @@ #include "qeglconvenience.h" -#include - QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format) { int redSize = format.redBufferSize(); @@ -178,7 +176,6 @@ EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformW } else { configureAttributes.append(EGL_OPENGL_ES2_BIT); } - configureAttributes.append(EGL_NONE); do { @@ -228,6 +225,6 @@ EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformW } delete [] configs; } while (q_reduceConfigAttributes(&configureAttributes)); - qDebug() << "RETURNING NULL!"; + qWarning("Cant find EGLConfig, returning null config"); return 0; } diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp index 6afeb70..a72f7b2 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -43,7 +43,6 @@ #include -#include #include QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi) @@ -57,13 +56,18 @@ QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, E eglBindAPI(m_eglApi); m_eglContext = eglCreateContext(m_eglDisplay,config, 0,contextAttrs); - if (!m_eglContext) { - qErrnoWarning("QEGLPlatformContext could not create eglContext"); + if (m_eglContext == EGL_NO_CONTEXT) { + qWarning("Could not create the egl context\n"); + eglTerminate(m_eglDisplay); + qFatal("EGL error"); } } QEGLPlatformContext::~QEGLPlatformContext() { +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglContext::~QEglContext(): %p\n",this); +#endif if (m_eglSurface != EGL_NO_SURFACE) { doneCurrent(); eglDestroySurface(m_eglDisplay, m_eglSurface); @@ -78,27 +82,58 @@ QEGLPlatformContext::~QEGLPlatformContext() void QEGLPlatformContext::makeCurrent() { +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglContext::makeCurrent: %p\n",this); +#endif eglBindAPI(m_eglApi); bool ok = eglMakeCurrent(m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext); if (!ok) - qWarning() << "QEGLPlatformContext::makeCurrent(" << m_eglSurface << "):" << eglGetError(); + qWarning("QEGLPlatformContext::makeCurrent: eglError: %d, this: %p \n", eglGetError(), this); +#ifdef QEGL_EXTRA_DEBUG + static bool showDebug = true; + if (showDebug) { + showDebug = false; + const char *str = (const char*)glGetString(GL_VENDOR); + qWarning("Vendor %s\n", str); + str = (const char*)glGetString(GL_RENDERER); + qWarning("Renderer %s\n", str); + str = (const char*)glGetString(GL_VERSION); + qWarning("Version %s\n", str); + + str = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); + qWarning("Extensions %s\n",str); + + str = (const char*)glGetString(GL_EXTENSIONS); + qWarning("Extensions %s\n", str); + + } +#endif } void QEGLPlatformContext::doneCurrent() { +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglContext::doneCurrent:%p\n",this); +#endif eglBindAPI(m_eglApi); bool ok = eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); if (!ok) - qWarning() << "QEGLPlatformContext::doneCurrent():" << eglGetError(); + qWarning("QEGLPlatformContext::doneCurrent(): eglError: %d, this: %p \n", eglGetError(), this); } void QEGLPlatformContext::swapBuffers() { +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglContext::swapBuffers:%p\n",this); +#endif eglBindAPI(m_eglApi); bool ok = eglSwapBuffers(m_eglDisplay, m_eglSurface); if (!ok) - qWarning() << "QEGLPlatformContext::swapBuffers():" << eglGetError(); + qWarning("QEGLPlatformContext::swapBuffers(): eglError: %d, this: %p \n", eglGetError(), this); } void* QEGLPlatformContext::getProcAddress(const QString& procName) { +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglContext::getProcAddress%p\n",this); +#endif eglBindAPI(m_eglApi); return (void *)eglGetProcAddress(qPrintable(procName)); } diff --git a/src/plugins/platforms/eglfs/eglfs.pro b/src/plugins/platforms/eglfs/eglfs.pro index 2cc5997..5d1318a 100644 --- a/src/plugins/platforms/eglfs/eglfs.pro +++ b/src/plugins/platforms/eglfs/eglfs.pro @@ -6,11 +6,24 @@ QT += opengl QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms +#DEFINES += QEGL_EXTRA_DEBUG + +#DEFINES += Q_OPENKODE + SOURCES = main.cpp \ qeglfsintegration.cpp \ - ../eglconvenience/qeglconvenience.cpp + ../eglconvenience/qeglconvenience.cpp \ + ../eglconvenience/qeglplatformcontext.cpp \ + qeglfswindow.cpp \ + qeglfswindowsurface.cpp \ + qeglfsscreen.cpp + HEADERS = qeglfsintegration.h \ - ../eglconvenience/qeglconvenience.h + ../eglconvenience/qeglconvenience.h \ + ../eglconvenience/qeglplatformcontext.h \ + qeglfswindow.h \ + qeglfswindowsurface.h \ + qeglfsscreen.h target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/eglfs/main.cpp b/src/plugins/platforms/eglfs/main.cpp index e1731e8..d0a82b7 100644 --- a/src/plugins/platforms/eglfs/main.cpp +++ b/src/plugins/platforms/eglfs/main.cpp @@ -62,7 +62,7 @@ QPlatformIntegration* QEglIntegrationPlugin::create(const QString& system, const { Q_UNUSED(paramList); if (system.toLower() == "eglfs") - return new QEglIntegration; + return new QEglFSIntegration; return 0; } diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp index 4d17980..2b673ae 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp @@ -41,429 +41,53 @@ #include "qeglfsintegration.h" +#include "qeglfswindow.h" +#include "qeglfswindowsurface.h" + #include -#include +#include #include -#include -#include #include -#include -#include - -#include "../eglconvenience/qeglconvenience.h" - -//#define QEGL_EXTRA_DEBUG -#ifdef QEGL_EXTRA_DEBUG -struct AttrInfo { EGLint attr; const char *name; }; -static struct AttrInfo attrs[] = { - {EGL_BUFFER_SIZE, "EGL_BUFFER_SIZE"}, - {EGL_ALPHA_SIZE, "EGL_ALPHA_SIZE"}, - {EGL_BLUE_SIZE, "EGL_BLUE_SIZE"}, - {EGL_GREEN_SIZE, "EGL_GREEN_SIZE"}, - {EGL_RED_SIZE, "EGL_RED_SIZE"}, - {EGL_DEPTH_SIZE, "EGL_DEPTH_SIZE"}, - {EGL_STENCIL_SIZE, "EGL_STENCIL_SIZE"}, - {EGL_CONFIG_CAVEAT, "EGL_CONFIG_CAVEAT"}, - {EGL_CONFIG_ID, "EGL_CONFIG_ID"}, - {EGL_LEVEL, "EGL_LEVEL"}, - {EGL_MAX_PBUFFER_HEIGHT, "EGL_MAX_PBUFFER_HEIGHT"}, - {EGL_MAX_PBUFFER_PIXELS, "EGL_MAX_PBUFFER_PIXELS"}, - {EGL_MAX_PBUFFER_WIDTH, "EGL_MAX_PBUFFER_WIDTH"}, - {EGL_NATIVE_RENDERABLE, "EGL_NATIVE_RENDERABLE"}, - {EGL_NATIVE_VISUAL_ID, "EGL_NATIVE_VISUAL_ID"}, - {EGL_NATIVE_VISUAL_TYPE, "EGL_NATIVE_VISUAL_TYPE"}, - {EGL_SAMPLES, "EGL_SAMPLES"}, - {EGL_SAMPLE_BUFFERS, "EGL_SAMPLE_BUFFERS"}, - {EGL_SURFACE_TYPE, "EGL_SURFACE_TYPE"}, - {EGL_TRANSPARENT_TYPE, "EGL_TRANSPARENT_TYPE"}, - {EGL_TRANSPARENT_BLUE_VALUE, "EGL_TRANSPARENT_BLUE_VALUE"}, - {EGL_TRANSPARENT_GREEN_VALUE, "EGL_TRANSPARENT_GREEN_VALUE"}, - {EGL_TRANSPARENT_RED_VALUE, "EGL_TRANSPARENT_RED_VALUE"}, - {EGL_BIND_TO_TEXTURE_RGB, "EGL_BIND_TO_TEXTURE_RGB"}, - {EGL_BIND_TO_TEXTURE_RGBA, "EGL_BIND_TO_TEXTURE_RGBA"}, - {EGL_MIN_SWAP_INTERVAL, "EGL_MIN_SWAP_INTERVAL"}, - {EGL_MAX_SWAP_INTERVAL, "EGL_MAX_SWAP_INTERVAL"}, - {-1, 0}}; -#endif //QEGL_EXTRA_DEBUG - - -class QEglScreen; - -class QEglContext : public QPlatformGLContext -{ -public: - QEglContext(QGLFormat& format, QPlatformGLContext* shareContext = 0); - ~QEglContext(); - - virtual void makeCurrent(); - virtual void doneCurrent(); - virtual void swapBuffers(); - virtual void* getProcAddress(const QString& procName); - - EGLContext eglContext() {return m_context;} - QSize size() const { return m_size; } - - QGLFormat format() const { return m_format; } -private: - - EGLContext m_context; - EGLDisplay m_dpy; - EGLSurface m_surface; - QSize m_size; - static bool singleton_watch; - QGLFormat m_format; -}; - -bool QEglContext::singleton_watch = false; - -QEglContext::QEglContext(QGLFormat& format, QPlatformGLContext* shareContext) -{ - if (singleton_watch) - qFatal("There can be only one"); - singleton_watch = true; - - Q_UNUSED(shareContext); - Q_UNUSED(format); - - EGLint major, minor; -#ifdef QEGL_EXTRA_DEBUG - EGLint index; -#endif - if (!eglBindAPI(EGL_OPENGL_ES_API)) { - fprintf(stderr, "Could not bind GL_ES API\n"); - qFatal("EGL error"); - } - - m_dpy = eglGetDisplay(EGL_DEFAULT_DISPLAY); - if (m_dpy == EGL_NO_DISPLAY) { - fprintf(stderr, "Could not open egl display\n"); - qFatal("EGL error"); - } - fprintf(stderr, "Opened display %p\n", m_dpy); - - if (!eglInitialize(m_dpy, &major, &minor)) { - fprintf(stderr, "Could not initialize egl display\n"); - qFatal("EGL error"); - } - - fprintf(stderr, "Initialized display %d %d\n", major, minor); - - QPlatformWindowFormat platformFormat; - platformFormat.setDepth(16); - platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); - platformFormat.setRedBufferSize(5); - platformFormat.setGreenBufferSize(6); - platformFormat.setBlueBufferSize(5); - EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); - -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "Configuration %d matches requirements\n", (int)config); - - for (index = 0; attrs[index].attr != -1; ++index) { - EGLint value; - if (eglGetConfigAttrib(m_dpy, config, attrs[index].attr, &value)) { - printf("\t%s: %d\n", attrs[index].name, (int)value); - } - } - printf("\n"); -#endif - EGLint temp; - EGLint attribList[32]; - - temp = 0; - - attribList[temp++] = EGL_CONTEXT_CLIENT_VERSION; - attribList[temp++] = 2; // GLES version 2 - attribList[temp++] = EGL_NONE; - - - m_context = eglCreateContext(m_dpy, config, NULL, attribList); - if (m_context == EGL_NO_CONTEXT) { - fprintf(stderr, "Could not create the egl context\n"); - eglTerminate(m_dpy); - qFatal("EGL error"); - } - - m_surface = eglCreateWindowSurface(m_dpy, config, 0, NULL); - if (m_surface == EGL_NO_SURFACE) { - fprintf(stderr, "Could not create the egl surface: error = 0x%x\n", eglGetError()); - eglTerminate(m_dpy); - qFatal("EGL error"); - } - - EGLint w,h; - - eglQuerySurface(m_dpy, m_surface, EGL_WIDTH, &w); - eglQuerySurface(m_dpy, m_surface, EGL_HEIGHT, &h); - fprintf(stderr, "Created surface %dx%d\n", w, h); - - m_size = QSize(w,h); +QT_BEGIN_NAMESPACE -} - -QEglContext::~QEglContext() -{ -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglContext::~QEglContext()"; -#endif -} - -void QEglContext::makeCurrent() -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglContext::makeCurrent\n"); -#endif - if (!eglMakeCurrent(m_dpy, m_surface, m_surface, m_context)) - fprintf(stderr, "Could not make the egl context current\n"); - -#ifdef QEGL_EXTRA_DEBUG - static bool showDebug = true; - if (showDebug) { - showDebug = false; - const char *str = (const char*)glGetString(GL_VENDOR); - qDebug() << "Vendor" << str; - printf("Vendor %s\n", str); - str = (const char*)glGetString(GL_RENDERER); - qDebug() << "Renderer" << str; - printf("Renderer %s\n", str); - str = (const char*)glGetString(GL_VERSION); - qDebug() << "Version" << str; - printf("Version %s\n", str); - - str = (const char*)glGetString(GL_SHADING_LANGUAGE_VERSION); - qDebug() << "Shader version" << str; - - str = (const char*)glGetString(GL_EXTENSIONS); - qDebug() << "Extensions" << str; - printf("Extensions %s\n", str); - - } -#endif -} - -void QEglContext::doneCurrent() +QEglFSIntegration::QEglFSIntegration() { -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglContext::doneCurrent\n"); -#endif - if (!eglMakeCurrent(m_dpy, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT)) - fprintf(stderr, "Could not release the egl context\n"); -} - -void QEglContext::swapBuffers() -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglContext::swapBuffers\n"); -#endif - eglSwapBuffers(m_dpy, m_surface); -} - -void* QEglContext::getProcAddress(const QString& procName) -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglContext::getProcAddress\n"); -#endif - return (void*)eglGetProcAddress(qPrintable(procName)); -} - - -class QEglPaintDevice; -class QEglScreen : public QPlatformScreen -{ -public: - QEglScreen(); - ~QEglScreen() {} - - QRect geometry() const { return m_geometry; } - int depth() const { return m_depth; } - QImage::Format format() const { return m_format; } - //QSize physicalSize() const { return m_physicalSize; } //### - -public: - QRect m_geometry; - int m_depth; - QImage::Format m_format; - //QSize m_physicalSize; - QEglContext * m_platformContext; -}; - - -class QEglWindow : public QPlatformWindow -{ -public: - QEglWindow(QWidget *w, QEglScreen *screen); - QPlatformGLContext *glContext(); - - void setGeometry(const QRect &); - WId winId() const; - - QGLContext *context() { return m_context; } - QEglPaintDevice *paintDevice() { return m_pd; } -private: - QEglScreen *m_screen; - QEglPaintDevice *m_pd; - QGLContext *m_context; - WId m_winid; -}; - -class QEglPaintDevice : public QGLPaintDevice -{ -public: - QEglPaintDevice(QEglScreen *screen, QEglWindow *window); - - QSize size() const { return m_screen->geometry().size(); } - QGLContext* context() const { return m_window->context();} - - QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); } - - void beginPaint(){ - QGLPaintDevice::beginPaint(); - } -private: - QEglScreen *m_screen; - QEglWindow * m_window; -}; - - - - -QEglScreen::QEglScreen() - : m_depth(16), m_format(QImage::Format_RGB16), m_platformContext(0) -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglScreen %p\n", this); -#endif - QGLFormat format = QGLFormat::defaultFormat(); - m_platformContext = new QEglContext(format); - - - m_geometry = QRect(QPoint(), m_platformContext->size()); - -} - - - - -QEglPaintDevice::QEglPaintDevice(QEglScreen *screen, QEglWindow *window) - :QGLPaintDevice(), m_screen(screen), m_window(window) -{ -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglPaintDevice" << this << screen << window; -#endif -} - - - -QEglWindow::QEglWindow(QWidget *w, QEglScreen *screen) - : QPlatformWindow(w), m_screen(screen), m_pd(0), m_context(0) -{ - static int serialNo = 0; - m_winid = ++serialNo; -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglWindow %p: %p %p 0x%x\n", this, w, screen, uint(m_winid)); -#endif - m_pd = new QEglPaintDevice(screen, this); - m_context = new QGLContext( screen->m_platformContext->format(), w); - m_context->create(); -} - - -void QEglWindow::setGeometry(const QRect &) -{ - // We only support full-screen windows - QRect rect(m_screen->availableGeometry()); - QWindowSystemInterface::handleGeometryChange(this->widget(), rect); - - QPlatformWindow::setGeometry(rect); -} - -WId QEglWindow::winId() const -{ - return m_winid; -} - - - -QPlatformGLContext *QEglWindow::glContext() -{ -#ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglWindow::glContext %p\n", m_screen->m_platformContext); -#endif - Q_ASSERT(m_screen); - return m_screen->m_platformContext; -} - -QEglIntegration::QEglIntegration() -{ - m_primaryScreen = new QEglScreen(); + m_primaryScreen = new QEglFSScreen(EGL_DEFAULT_DISPLAY); mScreens.append(m_primaryScreen); #ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglIntegration\n"); + qWarning("QEglIntegration\n"); #endif } -QPixmapData *QEglIntegration::createPixmapData(QPixmapData::PixelType type) const +QPixmapData *QEglFSIntegration::createPixmapData(QPixmapData::PixelType type) const { #ifdef QEGL_EXTRA_DEBUG - fprintf(stderr, "QEglIntegration::createPixmapData %d\n", type); + qWarning("QEglIntegration::createPixmapData %d\n", type); #endif return new QGLPixmapData(type); } -QPlatformWindow *QEglIntegration::createPlatformWindow(QWidget *widget, WId winId) const +QPlatformWindow *QEglFSIntegration::createPlatformWindow(QWidget *widget, WId winId) const { Q_UNUSED(winId); #ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglIntegration::createPlatformWindow" << widget; + qWarning("QEglIntegration::createPlatformWindow %p\n",widget); #endif - return new QEglWindow(widget, m_primaryScreen); + return new QEglFSWindow(widget, m_primaryScreen); } -class QEglWindowSurface : public QWindowSurface -{ -public: - QEglWindowSurface(QWidget *window, QEglScreen *screen); - ~QEglWindowSurface() {} - - QPaintDevice *paintDevice() { return m_window->paintDevice(); } - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void resize(const QSize &size) {} -private: - QEglScreen *m_screen; - QEglWindow *m_window; -}; - -QEglWindowSurface::QEglWindowSurface(QWidget *window, QEglScreen *screen) - :QWindowSurface(window), m_screen(screen), m_window(0) -{ -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglWindowSurface" << window << screen; -#endif - m_window = static_cast(window->platformWindow()); -} - - -void QEglWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - Q_UNUSED(widget); - Q_UNUSED(region); - Q_UNUSED(offset); -#ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglWindowSurface::flush"; -#endif - m_screen->m_platformContext->swapBuffers(); -} - -QWindowSurface *QEglIntegration::createWindowSurface(QWidget *widget, WId winId) const +QWindowSurface *QEglFSIntegration::createWindowSurface(QWidget *widget, WId winId) const { Q_UNUSED(winId); #ifdef QEGL_EXTRA_DEBUG - qDebug() << "QEglIntegration::createWindowSurface" << widget; + qWarning("QEglIntegration::createWindowSurface %p\n",widget); #endif - return new QEglWindowSurface(widget, m_primaryScreen); + return new QEglFSWindowSurface(m_primaryScreen,widget); } + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h index 7b9b8cf..f15b6b2 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.h +++ b/src/plugins/platforms/eglfs/qeglfsintegration.h @@ -42,16 +42,19 @@ #ifndef EGLINTEGRATION_H #define EGLINTEGRATION_H +#include "qeglfsscreen.h" + #include #include +QT_BEGIN_HEADER + QT_BEGIN_NAMESPACE -class QEglScreen; -class QEglIntegration : public QPlatformIntegration +class QEglFSIntegration : public QPlatformIntegration { public: - QEglIntegration(); + QEglFSIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId) const; @@ -61,10 +64,10 @@ public: private: QList mScreens; - QEglScreen *m_primaryScreen; + QEglFSScreen *m_primaryScreen; }; QT_END_NAMESPACE - +QT_END_HEADER #endif diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp new file mode 100644 index 0000000..a390106 --- /dev/null +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -0,0 +1,174 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qeglfsscreen.h" + +#include "../eglconvenience/qeglconvenience.h" +#include "../eglconvenience/qeglplatformcontext.h" + +#ifdef Q_OPENKODE +#include +#include +#endif //Q_OPENKODE + +QT_BEGIN_NAMESPACE + +#ifdef QEGL_EXTRA_DEBUG +struct AttrInfo { EGLint attr; const char *name; }; +static struct AttrInfo attrs[] = { + {EGL_BUFFER_SIZE, "EGL_BUFFER_SIZE"}, + {EGL_ALPHA_SIZE, "EGL_ALPHA_SIZE"}, + {EGL_BLUE_SIZE, "EGL_BLUE_SIZE"}, + {EGL_GREEN_SIZE, "EGL_GREEN_SIZE"}, + {EGL_RED_SIZE, "EGL_RED_SIZE"}, + {EGL_DEPTH_SIZE, "EGL_DEPTH_SIZE"}, + {EGL_STENCIL_SIZE, "EGL_STENCIL_SIZE"}, + {EGL_CONFIG_CAVEAT, "EGL_CONFIG_CAVEAT"}, + {EGL_CONFIG_ID, "EGL_CONFIG_ID"}, + {EGL_LEVEL, "EGL_LEVEL"}, + {EGL_MAX_PBUFFER_HEIGHT, "EGL_MAX_PBUFFER_HEIGHT"}, + {EGL_MAX_PBUFFER_PIXELS, "EGL_MAX_PBUFFER_PIXELS"}, + {EGL_MAX_PBUFFER_WIDTH, "EGL_MAX_PBUFFER_WIDTH"}, + {EGL_NATIVE_RENDERABLE, "EGL_NATIVE_RENDERABLE"}, + {EGL_NATIVE_VISUAL_ID, "EGL_NATIVE_VISUAL_ID"}, + {EGL_NATIVE_VISUAL_TYPE, "EGL_NATIVE_VISUAL_TYPE"}, + {EGL_SAMPLES, "EGL_SAMPLES"}, + {EGL_SAMPLE_BUFFERS, "EGL_SAMPLE_BUFFERS"}, + {EGL_SURFACE_TYPE, "EGL_SURFACE_TYPE"}, + {EGL_TRANSPARENT_TYPE, "EGL_TRANSPARENT_TYPE"}, + {EGL_TRANSPARENT_BLUE_VALUE, "EGL_TRANSPARENT_BLUE_VALUE"}, + {EGL_TRANSPARENT_GREEN_VALUE, "EGL_TRANSPARENT_GREEN_VALUE"}, + {EGL_TRANSPARENT_RED_VALUE, "EGL_TRANSPARENT_RED_VALUE"}, + {EGL_BIND_TO_TEXTURE_RGB, "EGL_BIND_TO_TEXTURE_RGB"}, + {EGL_BIND_TO_TEXTURE_RGBA, "EGL_BIND_TO_TEXTURE_RGBA"}, + {EGL_MIN_SWAP_INTERVAL, "EGL_MIN_SWAP_INTERVAL"}, + {EGL_MAX_SWAP_INTERVAL, "EGL_MAX_SWAP_INTERVAL"}, + {-1, 0}}; +#endif //QEGL_EXTRA_DEBUG + +QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display) + : m_depth(16), m_format(QImage::Format_RGB16), m_platformContext(0) +{ +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglScreen %p\n", this); +#endif + + EGLint major, minor; +#ifdef QEGL_EXTRA_DEBUG + EGLint index; +#endif + if (!eglBindAPI(EGL_OPENGL_ES_API)) { + qWarning("Could not bind GL_ES API\n"); + qFatal("EGL error"); + } + + m_dpy = eglGetDisplay(display); + if (m_dpy == EGL_NO_DISPLAY) { + qWarning("Could not open egl display\n"); + qFatal("EGL error"); + } + qWarning("Opened display %p\n", m_dpy); + + if (!eglInitialize(m_dpy, &major, &minor)) { + qWarning("Could not initialize egl display\n"); + qFatal("EGL error"); + } + + qWarning("Initialized display %d %d\n", major, minor); + + QPlatformWindowFormat platformFormat; + platformFormat.setDepth(16); + platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); + platformFormat.setRedBufferSize(8); + platformFormat.setGreenBufferSize(8); + platformFormat.setBlueBufferSize(8); + EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); + + EGLNativeWindowType eglWindow = 0; +#ifdef Q_OPENKODE + if (kdInitializeNV() == KD_ENOTINITIALIZED) { + qFatal("Did not manage to initialize openkode"); + } + KDWindow *window = kdCreateWindow(m_dpy,config,0); + + kdRealizeWindow(window,&eglWindow); +#endif + + m_surface = eglCreateWindowSurface(m_dpy, config, eglWindow, NULL); + if (m_surface == EGL_NO_SURFACE) { + qWarning("Could not create the egl surface: error = 0x%x\n", eglGetError()); + eglTerminate(m_dpy); + qFatal("EGL error"); + } + // qWarning("Created surface %dx%d\n", w, h); + +#ifdef QEGL_EXTRA_DEBUG + qWarning("Configuration %d matches requirements\n", (int)config); + + for (index = 0; attrs[index].attr != -1; ++index) { + EGLint value; + if (eglGetConfigAttrib(m_dpy, config, attrs[index].attr, &value)) { + qWarning("\t%s: %d\n", attrs[index].name, (int)value); + } + } + qWarning("\n"); +#endif + + EGLint temp; + EGLint attribList[32]; + + temp = 0; + + attribList[temp++] = EGL_CONTEXT_CLIENT_VERSION; + attribList[temp++] = 2; // GLES version 2 + attribList[temp++] = EGL_NONE; + + m_platformContext = new QEGLPlatformContext(m_dpy,config,attribList,m_surface,EGL_OPENGL_ES_API); + +// qWarning("Created platformcontext"); + EGLint w,h; + + eglQuerySurface(m_dpy, m_surface, EGL_WIDTH, &w); + eglQuerySurface(m_dpy, m_surface, EGL_HEIGHT, &h); + + m_geometry = QRect(0,0,w,h); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.h b/src/plugins/platforms/eglfs/qeglfsscreen.h new file mode 100644 index 0000000..f68ab14 --- /dev/null +++ b/src/plugins/platforms/eglfs/qeglfsscreen.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QEGLSCREEN_H +#define QEGLSCREEN_H + +#include + + +#include + +QT_BEGIN_NAMESPACE + +class QPlatformGLContext; + +class QEglFSScreen : public QPlatformScreen //huh: FullScreenScreen ;) just to follow namespace +{ +public: + QEglFSScreen(EGLNativeDisplayType display); + ~QEglFSScreen() {} + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + + QPlatformGLContext *platformContext() const { return m_platformContext; } + +private: + QRect m_geometry; + int m_depth; + QImage::Format m_format; + QPlatformGLContext *m_platformContext; + EGLDisplay m_dpy; + EGLSurface m_surface; +}; + +QT_END_NAMESPACE +#endif // QEGLSCREEN_H diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp new file mode 100644 index 0000000..db15862 --- /dev/null +++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qeglfswindow.h" + +#include + +QT_BEGIN_NAMESPACE + +QEglFSWindow::QEglFSWindow(QWidget *w, QEglFSScreen *screen) + : QPlatformWindow(w), m_screen(screen) +{ + static int serialNo = 0; + m_winid = ++serialNo; +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglWindow %p: %p %p 0x%x\n", this, w, screen, uint(m_winid)); +#endif +} + + +void QEglFSWindow::setGeometry(const QRect &) +{ + // We only support full-screen windows + QRect rect(m_screen->availableGeometry()); + QWindowSystemInterface::handleGeometryChange(this->widget(), rect); + + QPlatformWindow::setGeometry(rect); +} + +WId QEglFSWindow::winId() const +{ + return m_winid; +} + + + +QPlatformGLContext *QEglFSWindow::glContext() +{ +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglWindow::glContext %p\n", m_screen->platformContext()); +#endif + Q_ASSERT(m_screen); + return m_screen->platformContext(); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfswindow.h b/src/plugins/platforms/eglfs/qeglfswindow.h new file mode 100644 index 0000000..f605cf4 --- /dev/null +++ b/src/plugins/platforms/eglfs/qeglfswindow.h @@ -0,0 +1,69 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QEGLWINDOW_H +#define QEGLWINDOW_H + +#include "qeglfsintegration.h" +#include "qeglfsscreen.h" + + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +class QEglFSWindow : public QPlatformWindow +{ +public: + QEglFSWindow(QWidget *w, QEglFSScreen *screen); + QPlatformGLContext *glContext(); + + void setGeometry(const QRect &); + WId winId() const; + +private: + QEglFSScreen *m_screen; + WId m_winid; +}; +QT_END_NAMESPACE +#endif // QEGLWINDOW_H diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp b/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp new file mode 100644 index 0000000..a613dda --- /dev/null +++ b/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qeglfswindowsurface.h" + +#include + +#include +#include + +QT_BEGIN_NAMESPACE + +class QEglFSPaintDevice : public QGLPaintDevice +{ +public: + QEglFSPaintDevice(QEglFSScreen *screen, QWidget *widget) + :QGLPaintDevice(), m_screen(screen) + { + #ifdef QEGL_EXTRA_DEBUG + qWarning("QEglPaintDevice %p, %p, %p",this, screen, widget); + #endif + QGLFormat format; + m_context = new QGLContext(format, widget); + m_context->create(); + } + + QSize size() const { return m_screen->geometry().size(); } + QGLContext* context() const { return m_context;} + + QPaintEngine *paintEngine() const { return qt_qgl_paint_engine(); } + + void beginPaint(){ + QGLPaintDevice::beginPaint(); + } +private: + QEglFSScreen *m_screen; + QGLContext *m_context; +}; + + +QEglFSWindowSurface::QEglFSWindowSurface( QEglFSScreen *screen, QWidget *window ) + :QWindowSurface(window) +{ +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglWindowSurface %p, %p", window, screen); +#endif + m_paintDevice = new QEglFSPaintDevice(screen,window); +} + +void QEglFSWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(region); + Q_UNUSED(offset); +#ifdef QEGL_EXTRA_DEBUG + qWarning("QEglWindowSurface::flush %p",widget); +#endif + widget->platformWindow()->glContext()->swapBuffers(); +} + +void QEglFSWindowSurface::resize(const QSize &size) +{ + Q_UNUSED(size); +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.h b/src/plugins/platforms/eglfs/qeglfswindowsurface.h new file mode 100644 index 0000000..571b9bd --- /dev/null +++ b/src/plugins/platforms/eglfs/qeglfswindowsurface.h @@ -0,0 +1,66 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QEGLWINDOWSURFACE_H +#define QEGLWINDOWSURFACE_H + +#include "qeglfsintegration.h" +#include "qeglfswindow.h" + +#include + +QT_BEGIN_NAMESPACE + +class QEglFSWindowSurface : public QWindowSurface +{ +public: + QEglFSWindowSurface(QEglFSScreen *screen, QWidget *window); + ~QEglFSWindowSurface() {} + + QPaintDevice *paintDevice() { return m_paintDevice; } + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize(const QSize &size); +private: + QPaintDevice *m_paintDevice; +}; + +QT_END_NAMESPACE + +#endif // QEGLWINDOWSURFACE_H -- cgit v0.12 From c984a856ccf72731da052ff8bdae88fe3921fc83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 27 Jul 2010 08:30:58 +0200 Subject: Add QT_BEGIN_NAMESPACE and QT_BEGIN_HEADER to openkode plugin --- src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp | 4 +++- src/plugins/platforms/openkode/qopenkodeeventloopintegration.h | 7 +++++++ src/plugins/platforms/openkode/qopenkodeintegration.h | 2 ++ src/plugins/platforms/openkode/qopenkodewindow.cpp | 3 ++- src/plugins/platforms/openkode/qopenkodewindow.h | 6 ++++++ src/plugins/platforms/openkode/qopenkodewindowsurface.h | 2 ++ 6 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp index 467b5b5..e21e1d7 100644 --- a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp @@ -2,7 +2,7 @@ #include -#include +QT_BEGIN_NAMESPACE QOpenKODEEventLoopIntegration::QOpenKODEEventLoopIntegration() { @@ -27,3 +27,5 @@ void QOpenKODEEventLoopIntegration::wakeup() KDEvent *event = kdCreateEvent(); kdPostThreadEvent(event,m_kdThread); } + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h index ef04640..868eda8 100644 --- a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h @@ -4,6 +4,10 @@ #include class KDThread; + +QT_BEGIN_HEADER +QT_BEGIN_NAMESPACE + class QOpenKODEEventLoopIntegration : public QPlatformEventLoopIntegration { public: @@ -14,4 +18,7 @@ private: KDThread *m_kdThread; }; +QT_END_NAMESPACE +QT_END_HEADER + #endif // QOPENKODEEVENTLOOPINTEGRATION_H diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index 0eaf127..8d3d175 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -51,6 +51,7 @@ #include #include +QT_BEGIN_HEADER QT_BEGIN_NAMESPACE struct KDDesktopNV; @@ -98,5 +99,6 @@ private: }; QT_END_NAMESPACE +QT_END_HEADER #endif diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index faba2fb..2ad9238 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -55,7 +55,7 @@ #include #include - +QT_BEGIN_NAMESPACE QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) : QPlatformWindow(tlw) @@ -173,3 +173,4 @@ QPlatformGLContext *QOpenKODEWindow::glContext() { return m_platformGlContext; } +QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index 51252a9..d11c0d8 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -47,6 +47,9 @@ #include +QT_BEGIN_HEADER +QT_BEGIN_NAMESPACE + class QEGLPlatformContext; class QOpenKODEWindow : public QPlatformWindow @@ -71,4 +74,7 @@ private: QEGLPlatformContext *m_platformGlContext; }; +QT_END_NAMESPACE +QT_END_HEADER + #endif //QOPENKODEWINDOW_H diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.h b/src/plugins/platforms/openkode/qopenkodewindowsurface.h index 4acd1d8..f12b625 100644 --- a/src/plugins/platforms/openkode/qopenkodewindowsurface.h +++ b/src/plugins/platforms/openkode/qopenkodewindowsurface.h @@ -46,6 +46,7 @@ #include +QT_BEGIN_HEADER QT_BEGIN_NAMESPACE class QOpenKODEWindow; @@ -71,5 +72,6 @@ private: }; QT_END_NAMESPACE +QT_END_HEADER #endif -- cgit v0.12 From e7c239407698f2a5d4f4b4000ecdd5969025fe1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 27 Jul 2010 08:32:57 +0200 Subject: Made QPlatformWidnow::glContext a const function --- src/gui/kernel/qplatformwindow_qpa.cpp | 2 +- src/gui/kernel/qplatformwindow_qpa.h | 2 +- src/plugins/platforms/eglfs/qeglfswindow.cpp | 2 +- src/plugins/platforms/eglfs/qeglfswindow.h | 3 ++- src/plugins/platforms/openkode/qopenkodewindow.cpp | 2 +- src/plugins/platforms/openkode/qopenkodewindow.h | 2 +- src/plugins/platforms/testlite/qglxintegration.cpp | 2 +- src/plugins/platforms/testlite/qtestlitewindow.cpp | 11 +++-------- src/plugins/platforms/testlite/qtestlitewindow.h | 3 +-- 9 files changed, 12 insertions(+), 17 deletions(-) diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp index 4cd8ead..4ac4736 100644 --- a/src/gui/kernel/qplatformwindow_qpa.cpp +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -120,7 +120,7 @@ void QPlatformWindow::setOpacity(qreal level) qWarning("This plugin does not support setting window opacity"); } -QPlatformGLContext *QPlatformWindow::glContext() +QPlatformGLContext *QPlatformWindow::glContext() const { return 0; } diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h index e8b5ad8..2275c02 100644 --- a/src/gui/kernel/qplatformwindow_qpa.h +++ b/src/gui/kernel/qplatformwindow_qpa.h @@ -79,7 +79,7 @@ public: virtual void setOpacity(qreal level); - virtual QPlatformGLContext *glContext(); + virtual QPlatformGLContext *glContext() const; protected: QScopedPointer d_ptr; private: diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp index db15862..86cc98b 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.cpp +++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp @@ -71,7 +71,7 @@ WId QEglFSWindow::winId() const -QPlatformGLContext *QEglFSWindow::glContext() +QPlatformGLContext *QEglFSWindow::glContext() const { #ifdef QEGL_EXTRA_DEBUG qWarning("QEglWindow::glContext %p\n", m_screen->platformContext()); diff --git a/src/plugins/platforms/eglfs/qeglfswindow.h b/src/plugins/platforms/eglfs/qeglfswindow.h index f605cf4..0c3bc84 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.h +++ b/src/plugins/platforms/eglfs/qeglfswindow.h @@ -56,11 +56,12 @@ class QEglFSWindow : public QPlatformWindow { public: QEglFSWindow(QWidget *w, QEglFSScreen *screen); - QPlatformGLContext *glContext(); void setGeometry(const QRect &); WId winId() const; + QPlatformGLContext *glContext() const; + private: QEglFSScreen *m_screen; WId m_winid; diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 2ad9238..81f38d2 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -169,7 +169,7 @@ void QOpenKODEWindow::setVisible(bool visible) } } -QPlatformGLContext *QOpenKODEWindow::glContext() +QPlatformGLContext *QOpenKODEWindow::glContext() const { return m_platformGlContext; } diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index d11c0d8..3e7ee56 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -62,7 +62,7 @@ public: void setVisible(bool visible); WId winId() const { return WId(m_eglWindow); } - QPlatformGLContext *glContext(); + QPlatformGLContext *glContext() const; private: struct KDWindow *m_kdWindow; diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 4d807b0..e554e8d 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -181,7 +181,7 @@ QGLXGLContext::QGLXGLContext(MyDisplay *display, Drawable drawable, GLXContext c QGLXGLContext::~QGLXGLContext() { if (m_context) { - qDebug("Destroying GLX context 0x%x", m_context); + qDebug("Destroying GLX context 0x%p", m_context); glXDestroyContext(m_xd->display, m_context); } } diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index f774458..67ec97c 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -1011,20 +1011,15 @@ void QTestLiteWindow::setCursor(QCursor * cursor) XFlush(xd->display); } -QPlatformGLContext *QTestLiteWindow::glContext() +QPlatformGLContext *QTestLiteWindow::glContext() const { if (!mGLContext) { - mGLContext = createGLContext(); + QTestLiteWindow *that = const_cast(this); + that->mGLContext = new QGLXGLContext(x_window, xd, widget()->platformWindowFormat()); } return mGLContext; } -QPlatformGLContext *QTestLiteWindow::createGLContext() -{ - QPlatformGLContext *context = new QGLXGLContext(x_window, xd, widget()->platformWindowFormat()); - return context; -} - Cursor QTestLiteWindow::createCursorBitmap(QCursor * cursor) { XColor bg, fg; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.h b/src/plugins/platforms/testlite/qtestlitewindow.h index d405578..dc628f1 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.h +++ b/src/plugins/platforms/testlite/qtestlitewindow.h @@ -127,7 +127,7 @@ public: void setCursor(QCursor * cursor); - QPlatformGLContext *glContext(); + QPlatformGLContext *glContext() const; private: int xpos, ypos; @@ -138,7 +138,6 @@ private: GC createGC(); Cursor createCursorShape(int cshape); Cursor createCursorBitmap(QCursor * cursor); - QPlatformGLContext *createGLContext(); int currentCursor; -- cgit v0.12 From 24322b3d6b1e7b33f936081a2dcaa3d62c9b501f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 28 Jul 2010 12:17:53 +0200 Subject: Fix so that eventloop intgration can have 0 timeouts --- src/gui/kernel/qeventdispatcher_qpa.cpp | 4 +++- src/gui/kernel/qwindowsysteminterface_qpa.h | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/qeventdispatcher_qpa.cpp b/src/gui/kernel/qeventdispatcher_qpa.cpp index 4464036..cb70141 100644 --- a/src/gui/kernel/qeventdispatcher_qpa.cpp +++ b/src/gui/kernel/qeventdispatcher_qpa.cpp @@ -255,7 +255,9 @@ int QEventDispatcherQPA::select(int nfds, fd_set *readfds, fd_set *writefds, fd_ Q_D(QEventDispatcherQPA); int retVal = 0; if (d->hasIntegration()) { - qint64 timeoutmsec = timeout->tv_sec * 1000 + (timeout->tv_usec/1000); + qint64 timeoutmsec = 0; + if (timeout) + timeoutmsec = timeout->tv_sec * 1000 + (timeout->tv_usec/1000); d->selectReturnMutex->lock(); if (d->selectWorkerNeedsSync) { if (d->selectWorkerHasResult) { diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.h b/src/gui/kernel/qwindowsysteminterface_qpa.h index e57fa8e..5ff4275 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.h +++ b/src/gui/kernel/qwindowsysteminterface_qpa.h @@ -79,7 +79,6 @@ public: static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points); static void handleTouchEvent(QWidget *w, ulong timestamp, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points); - // delivered directly by the plugin via spontaneous events static void handleGeometryChange(QWidget *w, const QRect &newRect); static void handleCloseEvent(QWidget *w); static void handleEnterEvent(QWidget *w); -- cgit v0.12 From da0d594f7d1b01145c5ec47f36d039435e04e7a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 2 Aug 2010 12:05:20 +0200 Subject: Make eglfs use defaultsharedcontext --- src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp | 5 +++++ src/plugins/platforms/eglconvenience/qeglplatformcontext.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp index a72f7b2..b3a5bba 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -137,3 +137,8 @@ void* QEGLPlatformContext::getProcAddress(const QString& procName) eglBindAPI(m_eglApi); return (void *)eglGetProcAddress(qPrintable(procName)); } + +void QEGLPlatformContext::makeDefaultSaredContext() +{ + setDefaultSharedContext(this); +} diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h index 19d155a..2a49129 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h @@ -56,6 +56,7 @@ public: void swapBuffers(); void* getProcAddress(const QString& procName); + void makeDefaultSaredContext(); private: EGLContext m_eglContext; EGLDisplay m_eglDisplay; -- cgit v0.12 From 6e0edcce4c215f01416a5ee8467b7abe4665e592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 2 Aug 2010 12:07:12 +0200 Subject: Make openkode plugin handle events And make it also work without a gui manager --- src/gui/kernel/qapplication_qpa.cpp | 3 + src/gui/kernel/qplatformwindow_qpa.cpp | 9 +- src/gui/kernel/qwidget_qpa.cpp | 3 + src/plugins/platforms/openkode/openkode.pro | 5 +- .../platforms/openkode/openkodekeytranslator.h | 244 +++++++++++++++++++++ .../openkode/qopenkodeeventloopintegration.cpp | 47 ++++ .../openkode/qopenkodeeventloopintegration.h | 4 + .../platforms/openkode/qopenkodeintegration.cpp | 23 +- .../platforms/openkode/qopenkodeintegration.h | 13 +- src/plugins/platforms/openkode/qopenkodewindow.cpp | 191 +++++++++++++--- src/plugins/platforms/openkode/qopenkodewindow.h | 9 +- .../platforms/openkode/qopenkodewindowsurface.cpp | 176 --------------- .../platforms/openkode/qopenkodewindowsurface.h | 77 ------- 13 files changed, 508 insertions(+), 296 deletions(-) create mode 100644 src/plugins/platforms/openkode/openkodekeytranslator.h delete mode 100644 src/plugins/platforms/openkode/qopenkodewindowsurface.cpp delete mode 100644 src/plugins/platforms/openkode/qopenkodewindowsurface.h diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index e5b5396..b89e81d 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -802,6 +802,9 @@ void QApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEven if (app_do_modal && !qt_try_modal(focusW, e->keyType)) return; + if (!focusW->isWindow()) + focusW = focusW->window(); + modifiers = e->modifiers; QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); QApplication::sendSpontaneousEvent(focusW, &ev); diff --git a/src/gui/kernel/qplatformwindow_qpa.cpp b/src/gui/kernel/qplatformwindow_qpa.cpp index 4ac4736..9d722d8 100644 --- a/src/gui/kernel/qplatformwindow_qpa.cpp +++ b/src/gui/kernel/qplatformwindow_qpa.cpp @@ -47,6 +47,7 @@ class QPlatformWindowPrivate { QWidget *tlw; QRect rect; + Qt::WindowFlags flags; friend class QPlatformWindow; }; @@ -92,8 +93,9 @@ Requests setting the window flags of this surface to \a type. Returns the actual */ Qt::WindowFlags QPlatformWindow::setWindowFlags(Qt::WindowFlags flags) { - Q_UNUSED(flags); - return Qt::Window; + Q_D(QPlatformWindow); + d->flags = flags; + return flags; } /*! @@ -101,7 +103,8 @@ Qt::WindowFlags QPlatformWindow::setWindowFlags(Qt::WindowFlags flags) */ Qt::WindowFlags QPlatformWindow::windowFlags() const { - return Qt::Window; + Q_D(const QPlatformWindow); + return d->flags; } WId QPlatformWindow::winId() const { return WId(0); } diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index 3584f87..ef53004 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -63,6 +63,7 @@ void setParentForChildrenOfWidget(QPlatformWindow *window, const QWidget *widget if (childWidget) { // should not be necessary if (childWidget->platformWindow()) { childWidget->platformWindow()->setParent(window); + childWidget->platformWindow()->setWindowFlags(Qt::SubWindow); } else { setParentForChildrenOfWidget(window,childWidget); } @@ -106,6 +107,7 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO if (QWidget *nativeParent = q->nativeParentWidget()) { if (nativeParent->platformWindow()) { platformWindow->setParent(nativeParent->platformWindow()); + platformWindow->setWindowFlags(Qt::SubWindow); } } @@ -174,6 +176,7 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) QWidget * parentWithWindow = newparent->platformWindow()? newparent : newparent->nativeParentWidget(); if (parentWithWindow && parentWithWindow->platformWindow()) { q->platformWindow()->setParent(parentWithWindow->platformWindow()); + q->platformWindow()->setWindowFlags(Qt::SubWindow); } } diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro index 2d90b15..5f2c1cc 100644 --- a/src/plugins/platforms/openkode/openkode.pro +++ b/src/plugins/platforms/openkode/openkode.pro @@ -7,18 +7,17 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp \ qopenkodeintegration.cpp \ - qopenkodewindowsurface.cpp \ qopenkodewindow.cpp \ ../eglconvenience/qeglplatformcontext.cpp \ ../eglconvenience/qeglconvenience.cpp \ qopenkodeeventloopintegration.cpp HEADERS = qopenkodeintegration.h \ - qopenkodewindowsurface.h \ qopenkodewindow.h \ ../eglconvenience/qeglplatformcontext.h \ ../eglconvenience/qeglconvenience.h \ - qopenkodeeventloopintegration.h + qopenkodeeventloopintegration.h \ + openkodekeytranslator.h RESOURCES = resources.qrc diff --git a/src/plugins/platforms/openkode/openkodekeytranslator.h b/src/plugins/platforms/openkode/openkodekeytranslator.h new file mode 100644 index 0000000..e0ba5c1 --- /dev/null +++ b/src/plugins/platforms/openkode/openkodekeytranslator.h @@ -0,0 +1,244 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at http://www.qtsoftware.com/contact. +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef OPENKODEKEYTRANSLATOR_H +#define OPENKODEKEYTRANSLATOR_H + +#ifdef KD_ATX_keyboard + +#include + +QT_BEGIN_NAMESPACE + +Qt::Key keyTranslator( int key ) +{ + switch (key) { +// KD_KEY_ACCEPT_ATX: +// KD_KEY_AGAIN_ATX: +// KD_KEY_ALLCANDIDATES_ATX +// KD_KEY_ALPHANUMERIC_ATX + case KD_KEY_ALT_ATX: + return Qt::Key_Alt; + case KD_KEY_ALTGRAPH_ATX: + return Qt::Key_AltGr; +// KD_KEY_APPS_ATX +// KD_KEY_ATTN_ATX +// KD_KEY_BROWSERBACK_ATX +// KD_KEY_BROWSERFAVORITES_ATX +// KD_KEY_BROWSERFORWARD_ATX +// KD_KEY_BROWSERHOME_ATX +// KD_KEY_BROWSERREFRESH_ATX +// KD_KEY_BROWSERSEARCH_ATX +// KD_KEY_BROWSERSTOP_ATX + case KD_KEY_CAPSLOCK_ATX: + return Qt::Key_CapsLock; + case KD_KEY_CLEAR_ATX: + return Qt::Key_Clear; + case KD_KEY_CODEINPUT_ATX: + return Qt::Key_Codeinput; +// KD_KEY_COMPOSE_ATX + case KD_KEY_CONTROL_ATX: + return Qt::Key_Control; +// KD_KEY_CRSEL_ATX +// KD_KEY_CONVERT_ATX + case KD_KEY_COPY_ATX: + return Qt::Key_Copy; + case KD_KEY_CUT_ATX: + return Qt::Key_Cut; + case KD_KEY_DOWN_ATX: + return Qt::Key_Down; + case KD_KEY_END_ATX: + return Qt::Key_End; + case KD_KEY_ENTER_ATX: + return Qt::Key_Enter; +// KD_KEY_ERASEEOF_ATX +// KD_KEY_EXECUTE_ATX +// KD_KEY_EXSEL_ATX + case KD_KEY_F1_ATX: + return Qt::Key_F1; + case KD_KEY_F2_ATX: + return Qt::Key_F2; + case KD_KEY_F3_ATX: + return Qt::Key_F3; + case KD_KEY_F4_ATX: + return Qt::Key_F4; + case KD_KEY_F5_ATX: + return Qt::Key_F5; + case KD_KEY_F6_ATX: + return Qt::Key_F6; + case KD_KEY_F7_ATX: + return Qt::Key_F7; + case KD_KEY_F8_ATX: + return Qt::Key_F8; + case KD_KEY_F9_ATX: + return Qt::Key_F9; + case KD_KEY_F10_ATX: + return Qt::Key_F10; + case KD_KEY_F11_ATX: + return Qt::Key_F11; + case KD_KEY_F12_ATX: + return Qt::Key_F12; + case KD_KEY_F13_ATX: + return Qt::Key_F13; + case KD_KEY_F14_ATX: + return Qt::Key_F14; + case KD_KEY_F15_ATX: + return Qt::Key_F15; + case KD_KEY_F16_ATX: + return Qt::Key_F16; + case KD_KEY_F17_ATX: + return Qt::Key_F17; + case KD_KEY_F18_ATX: + return Qt::Key_F18; + case KD_KEY_F19_ATX: + return Qt::Key_F19; + case KD_KEY_F20_ATX: + return Qt::Key_F20; + case KD_KEY_F21_ATX: + return Qt::Key_F21; + case KD_KEY_F22_ATX: + return Qt::Key_F22; + case KD_KEY_F23_ATX: + return Qt::Key_F23; + case KD_KEY_F24_ATX: + return Qt::Key_F24; +// KD_KEY_FINALMODE_ATX +// KD_KEY_FIND_ATX +// KD_KEY_FULLWIDTH_ATX +// KD_KEY_HALFWIDTH_ATX + case KD_KEY_HANGULMODE_ATX: + return Qt::Key_Hangul; +// KD_KEY_HANJAMODE_ATX + case KD_KEY_HELP_ATX: + return Qt::Key_Help; + case KD_KEY_HIRAGANA_ATX: + return Qt::Key_Hiragana; + case KD_KEY_HOME_ATX: + return Qt::Key_Home; + case KD_KEY_INSERT_ATX: + return Qt::Key_Insert; +// KD_KEY_JAPANESEHIRAGANA_ATX: +// KD_KEY_JAPANESEKATAKANA_ATX +// KD_KEY_JAPANESEROMAJI_ATX +// KD_KEY_JUNJAMODE_ATX + case KD_KEY_KANAMODE_ATX: + return Qt::Key_Kana_Lock; //? + case KD_KEY_KANJIMODE_ATX: + return Qt::Key_Kanji; +// KD_KEY_KATAKANA_ATX +// KD_KEY_LAUNCHAPPLICATION1_ATX +// KD_KEY_LAUNCHAPPLICATION2_ATX + case KD_KEY_LAUNCHMAIL_ATX: + return Qt::Key_MailForward; + case KD_KEY_LEFT_ATX: + return Qt::Key_Left; + case KD_KEY_META_ATX: + return Qt::Key_Meta; + case KD_KEY_MEDIANEXTTRACK_ATX: + return Qt::Key_MediaNext; + case KD_KEY_MEDIAPLAYPAUSE_ATX: + return Qt::Key_MediaPause; + case KD_KEY_MEDIAPREVIOUSTRACK_ATX: + return Qt::Key_MediaPrevious; + case KD_KEY_MEDIASTOP_ATX: + return Qt::Key_MediaStop; + case KD_KEY_MODECHANGE_ATX: + return Qt::Key_Mode_switch; +// KD_KEY_NONCONVERT_ATX + case KD_KEY_NUMLOCK_ATX: + return Qt::Key_NumLock; + case KD_KEY_PAGEDOWN_ATX: + return Qt::Key_PageDown; + case KD_KEY_PAGEUP_ATX: + return Qt::Key_PageUp; + case KD_KEY_PASTE_ATX: + return Qt::Key_Paste; + case KD_KEY_PAUSE_ATX: + return Qt::Key_Pause; + case KD_KEY_PLAY_ATX: + return Qt::Key_Play; +// KD_KEY_PREVIOUSCANDIDATE_ATX + case KD_KEY_PRINTSCREEN_ATX: + return Qt::Key_Print; +// case KD_KEY_PROCESS_ATX +// case KD_KEY_PROPS_ATX + case KD_KEY_RIGHT_ATX: + return Qt::Key_Right; +// KD_KEY_ROMANCHARACTERS_ATX + case KD_KEY_SCROLL_ATX: + return Qt::Key_ScrollLock; + case KD_KEY_SELECT_ATX: + return Qt::Key_Select; +// KD_KEY_SELECTMEDIA_ATX + case KD_KEY_SHIFT_ATX: + return Qt::Key_Shift; + case KD_KEY_STOP_ATX: + return Qt::Key_Stop; + case KD_KEY_UP_ATX: + return Qt::Key_Up; +// KD_KEY_UNDO_ATX + case KD_KEY_VOLUMEDOWN_ATX: + return Qt::Key_VolumeDown; + case KD_KEY_VOLUMEMUTE_ATX: + return Qt::Key_VolumeMute; + case KD_KEY_VOLUMEUP_ATX: + return Qt::Key_VolumeUp; + case KD_KEY_WIN_ATX: + return Qt::Key_Meta; + case KD_KEY_ZOOM_ATX: + return Qt::Key_Zoom; + case 0x8: + return Qt::Key_Backspace; + case 0x1b: + return Qt::Key_Escape; + case 0x9: + return Qt::Key_Tab; + + default: + break; + } + + return Qt::Key_Escape; +} + +QT_END_NAMESPACE +#endif //KD_ATX_keyboard +#endif // OPENKODEKEYTRANSLATOR_H diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp index e21e1d7..bc92d0e 100644 --- a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp @@ -1,12 +1,57 @@ #include "qopenkodeeventloopintegration.h" +#include + #include +#include QT_BEGIN_NAMESPACE +static const int QT_EVENT_WAKEUP_EVENTLOOP = KD_EVENT_USER + 1; + +void kdprocessevent( const KDEvent *event) +{ + switch (event->type) { + case KD_EVENT_INPUT: + qDebug() << "KD_EVENT_INPUT"; + break; + case KD_EVENT_INPUT_POINTER: + qDebug() << "KD_EVENT_INPUT_POINTER"; + break; + case KD_EVENT_WINDOW_CLOSE: + qDebug() << "KD_EVENT_WINDOW_CLOSE"; + break; + case KD_EVENT_WINDOWPROPERTY_CHANGE: + qDebug() << "KD_EVENT_WINDOWPROPERTY_CHANGE"; + qDebug() << event->data.windowproperty.pname; + break; + case KD_EVENT_WINDOW_FOCUS: + qDebug() << "KD_EVENT_WINDOW_FOCUS"; + break; + case KD_EVENT_WINDOW_REDRAW: + qDebug() << "KD_EVENT_WINDOW_REDRAW"; + break; + case KD_EVENT_USER: + qDebug() << "KD_EVENT_USER"; + break; + case KD_EVENT_INPUT_KEY_ATX: + qDebug() << "KD_EVENT_INPUT_KEY_ATX"; + break; + case QT_EVENT_WAKEUP_EVENTLOOP: +// qDebug() << "QT_EVENT_WAKEUP_EVENTLOOP"; + break; + default: + break; + } + + kdDefaultEvent(event); + +} + QOpenKODEEventLoopIntegration::QOpenKODEEventLoopIntegration() { m_kdThread = kdThreadSelf(); + kdInstallCallback(&kdprocessevent,QT_EVENT_WAKEUP_EVENTLOOP,this); } void QOpenKODEEventLoopIntegration::processEvents(qint64 msec) @@ -25,6 +70,8 @@ void QOpenKODEEventLoopIntegration::processEvents(qint64 msec) void QOpenKODEEventLoopIntegration::wakeup() { KDEvent *event = kdCreateEvent(); + event->type = QT_EVENT_WAKEUP_EVENTLOOP; + event->userptr = this; kdPostThreadEvent(event,m_kdThread); } diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h index 868eda8..03f800c 100644 --- a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h @@ -4,6 +4,7 @@ #include class KDThread; +class KDEvent; QT_BEGIN_HEADER QT_BEGIN_NAMESPACE @@ -14,7 +15,10 @@ public: QOpenKODEEventLoopIntegration(); void processEvents(qint64 msec); void wakeup(); + + void processInputEvent(const KDEvent *event); private: + KDThread *m_kdThread; }; diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index 5dada28..8fc3862 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -40,7 +40,6 @@ ****************************************************************************/ #include "qopenkodeintegration.h" -#include "qopenkodewindowsurface.h" #include "qopenkodewindow.h" #include "qopenkodeeventloopintegration.h" @@ -67,6 +66,7 @@ QT_BEGIN_NAMESPACE QOpenKODEScreen::QOpenKODEScreen() + : mIsFullScreen(false) { KDDesktopNV *kdDesktop = KD_NULL; KDDisplayNV *kdDisplay = KD_NULL; @@ -130,12 +130,13 @@ QOpenKODEScreen::QOpenKODEScreen() qErrnoWarning("EGL failed to initialize display"); } - const int defaultDpi = 72; - mGeometry = QRect(0, 0, mode.width, mode.height); - mPhysicalSize = QSize(mode.width * 25.4 / defaultDpi, mode.height * 25.4 / defaultDpi); +// cursor = new QOpenKODECursor(this); + mGeometry = QRect(0, 0, mode.width, mode.height); mDepth = 24; mFormat = QImage::Format_RGB32; + + } static GLuint loadShaders(const QString &vertexShader, const QString &fragmentShader) @@ -186,6 +187,7 @@ static GLuint loadShaders(const QString &vertexShader, const QString &fragmentSh } QOpenKODEIntegration::QOpenKODEIntegration() + : mEventLoopIntegration(0) { if (kdInitializeNV() == KD_ENOTINITIALIZED) { qFatal("Did not manage to initialize openkode"); @@ -195,6 +197,10 @@ QOpenKODEIntegration::QOpenKODEIntegration() mScreens.append(mPrimaryScreen); } +QOpenKODEIntegration::~QOpenKODEIntegration() +{ + delete mEventLoopIntegration; +} QPixmapData *QOpenKODEIntegration::createPixmapData(QPixmapData::PixelType type) const { @@ -212,9 +218,6 @@ QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId w switch (widget->platformWindowFormat().windowApi()) { case QPlatformWindowFormat::Raster: - returnSurface = new QOpenKODEWindowSurface(widget, wid); - break; - case QPlatformWindowFormat::OpenGL: returnSurface = new QGLWindowSurface(widget); break; @@ -238,7 +241,11 @@ bool QOpenKODEIntegration::hasOpenGL() const QPlatformEventLoopIntegration *QOpenKODEIntegration::createEventLoopIntegration() const { - return new QOpenKODEEventLoopIntegration; + if (!mEventLoopIntegration) { + QOpenKODEIntegration *that = const_cast(this); + that->mEventLoopIntegration = new QOpenKODEEventLoopIntegration; + } + return mEventLoopIntegration; } GLuint QOpenKODEIntegration::blitterProgram() diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index 8d3d175..454aa90 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -42,6 +42,8 @@ #ifndef QGRAPHICSSYSTEM_OPENKODE_H #define QGRAPHICSSYSTEM_OPENKODE_H +#include "qopenkodeeventloopintegration.h" + #include #include @@ -55,6 +57,7 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE struct KDDesktopNV; +class QOpenKODECursor; class QOpenKODEScreen : public QPlatformScreen { @@ -66,21 +69,24 @@ public: QRect geometry() const { return mGeometry; } int depth() const { return mDepth; } QImage::Format format() const { return mFormat; } - QSize physicalSize() const { return mPhysicalSize; } EGLDisplay eglDisplay() { return mEglDisplay; } -public: + + bool isFullScreen() const {return mIsFullScreen;} + void setFullScreen(bool fullscreen) { mIsFullScreen = fullscreen; } +private: QRect mGeometry; int mDepth; QImage::Format mFormat; - QSize mPhysicalSize; EGLDisplay mEglDisplay; + bool mIsFullScreen; }; class QOpenKODEIntegration : public QPlatformIntegration { public: QOpenKODEIntegration(); + ~QOpenKODEIntegration(); QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; @@ -96,6 +102,7 @@ public: private: QList mScreens; + QOpenKODEEventLoopIntegration *mEventLoopIntegration; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 81f38d2..c890641 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -45,6 +45,10 @@ #include #include +#include +#ifdef KD_ATX_keyboard +#include "openkodekeytranslator.h" +#endif #include @@ -57,6 +61,20 @@ QT_BEGIN_NAMESPACE +void kdProcessMouseEvents( const KDEvent *event ) +{ + QOpenKODEWindow *window = static_cast(event->userptr); + window->processMouseEvents(event); +} + +#ifdef KD_ATX_keyboard +void kdProcessKeyEvents( const KDEvent *event ) +{ + QOpenKODEWindow *window = static_cast(event->userptr); + window->processKeyEvents(event); +} +#endif //KD_ATX_keyboard + QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) : QPlatformWindow(tlw) { @@ -92,54 +110,90 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) m_kdWindow = kdCreateWindow(screen->eglDisplay(), m_eglConfig, - KD_NULL); + this); + kdInstallCallback(kdProcessMouseEvents,KD_EVENT_INPUT_POINTER,this); +#ifdef KD_ATX_keyboard + kdInstallCallback(kdProcessKeyEvents, KD_EVENT_INPUT_KEY_ATX,this); +#endif //KD_ATX_keyboard + if (!m_kdWindow) { qErrnoWarning(kdGetError(), "Error creating native window"); return; } - const KDint windowSize[2] = { tlw->width(), tlw->height()-1 }; - if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { - qErrnoWarning(kdGetError(), "Could not set native window size"); - return; + bool fullscreen = false; + KDboolean exclusive(false); + if (kdSetWindowPropertybv(m_kdWindow,KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, &exclusive)) { + fullscreen = true; } - KDboolean visibillity(false); - if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { - qErrnoWarning(kdGetError(), "Could not set visibillity to false"); - } + if (fullscreen) { + tlw->setGeometry(screen->geometry()); + screen->setFullScreen(fullscreen); + }else { + const KDint windowSize[2] = { tlw->width(), tlw->height() }; + if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { + qErrnoWarning(kdGetError(), "Could not set native window size"); + } + KDboolean visibillity(false); + if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { + qErrnoWarning(kdGetError(), "Could not set visibillity to false"); + } - const KDint windowPos[2] = { tlw->x(), tlw->y() }; - if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { - qErrnoWarning(kdGetError(), "Could not set native window position"); - return; + const KDint windowPos[2] = { tlw->x(), tlw->y() }; + if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + qErrnoWarning(kdGetError(), "Could not set native window position"); + return; + } } - if (kdRealizeWindow(m_kdWindow, &m_eglWindow)) { - qErrnoWarning(kdGetError(), "Could not realize native window"); - return; - } - EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); - m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(), m_eglConfig, - m_eglContextAttrs.data(), surface, m_eglApi); + + if (!fullscreen || (fullscreen && !QPlatformGLContext::defaultSharedContext())) { + if (kdRealizeWindow(m_kdWindow, &m_eglWindow)) { + qErrnoWarning(kdGetError(), "Could not realize native window"); + return; + } + + EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); + m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(), m_eglConfig, + m_eglContextAttrs.data(), surface, m_eglApi); + m_platformGlContext->makeDefaultSaredContext(); + } else { + m_platformGlContext = static_cast(QPlatformGLContext::defaultSharedContext()); + kdDestroyWindow(m_kdWindow); + m_kdWindow = 0; + } } + QOpenKODEWindow::~QOpenKODEWindow() { qDebug() << "destroying window" << m_kdWindow; - delete m_platformGlContext; - kdDestroyWindow(m_kdWindow); + if (m_platformGlContext != QPlatformGLContext::defaultSharedContext()) { + delete m_platformGlContext; + } + if (m_kdWindow) + kdDestroyWindow(m_kdWindow); } void QOpenKODEWindow::setGeometry(const QRect &rect) { + if (!m_kdWindow) { + QList screens = QApplicationPrivate::platformIntegration()->screens(); + QOpenKODEScreen *screen = qobject_cast(screens.at(0)); + widget()->setGeometry(screen->geometry()); + return; + } + bool needToDeleteContext = false; const QRect geo = geometry(); if (geo.size() != rect.size()) { - const KDint windowSize[2] = { rect.width(), rect.height() -1 }; + const KDint windowSize[2] = { rect.width(), rect.height() }; if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { qErrnoWarning(kdGetError(), "Could not set native window size"); //return; + } else { + needToDeleteContext = true; } } @@ -148,11 +202,16 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { qErrnoWarning(kdGetError(), "Could not set native window position"); //return; + } else { + needToDeleteContext = true; } } //need to recreate context - delete m_platformGlContext; + if (needToDeleteContext) { + qDebug() << "deleting context"; + delete m_platformGlContext; + } QList screens = QApplicationPrivate::platformIntegration()->screens(); QOpenKODEScreen *screen = qobject_cast(screens.at(0)); @@ -163,14 +222,96 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) void QOpenKODEWindow::setVisible(bool visible) { + if (!m_kdWindow) + return; KDboolean visibillity(visible); if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_VISIBILITY, &visibillity)) { - qErrnoWarning(kdGetError(), "Could not set visibillity to false"); + qErrnoWarning(kdGetError(), "Could not set visibillity property"); } } +WId QOpenKODEWindow::winId() const +{ + static int i = 0; + return i++; +} + QPlatformGLContext *QOpenKODEWindow::glContext() const { return m_platformGlContext; } + +void QOpenKODEWindow::raise() +{ + if (!m_kdWindow) + return; + KDboolean focus(true); + if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_FOCUS, &focus)) { + qErrnoWarning(kdGetError(), "Could not set focus"); + } +} + +void QOpenKODEWindow::lower() +{ + if (!m_kdWindow) + return; + KDboolean focus(false); + if (kdSetWindowPropertybv(m_kdWindow, KD_WINDOWPROPERTY_FOCUS, &focus)) { + qErrnoWarning(kdGetError(), "Could not set focus"); + } +} + +void QOpenKODEWindow::processMouseEvents(const KDEvent *event) +{ + int x = event->data.inputpointer.x; + int y = event->data.inputpointer.y; + Qt::MouseButtons buttons; + switch(event->data.inputpointer.select) { + case 1: + buttons = Qt::LeftButton; + break; + default: + buttons = Qt::NoButton; + } + qDebug() << x << y; + QPoint pos(x,y); + QWindowSystemInterface::handleMouseEvent(0,event->timestamp,pos,pos,buttons); +} + +void QOpenKODEWindow::processKeyEvents(const KDEvent *event) +{ +#ifdef KD_ATX_keyboard + //KD_KEY_PRESS_ATX 1 + QEvent::Type keyPressed = QEvent::KeyRelease; + if (event->data.keyboardInputKey.flags) + keyPressed = QEvent::KeyPress; +//KD_KEY_LOCATION_LEFT_ATX // dont care for now +//KD_KEY_LOCATION_RIGHT_ATX +//KD_KEY_LOCATION_NUMPAD_ATX + Qt::KeyboardModifiers mod = Qt::NoModifier; + int openkodeMods = event->data.keyboardInputKey.flags; + if (openkodeMods & KD_KEY_MODIFIER_SHIFT_ATX) + mod |= Qt::ShiftModifier; + if (openkodeMods & KD_KEY_MODIFIER_CTRL_ATX) + mod |= Qt::ControlModifier; + if (openkodeMods & KD_KEY_MODIFIER_ALT_ATX) + mod |= Qt::AltModifier; + if (openkodeMods & KD_KEY_MODIFIER_META_ATX) + mod |= Qt::MetaModifier; + + Qt::Key qtKey; + QChar keyText; + int key = event->data.keyboardInputKey.keycode; + if (key >= 0x20 && key <= 0x0ff){ // 8 bit printable Latin1 + qtKey = Qt::Key(key); + keyText = QChar(event->data.keyboardInputKeyChar.character); + if (!(mod & Qt::ShiftModifier)) + keyText = keyText.toLower(); + } else { + qtKey = keyTranslator(key); + } + QWindowSystemInterface::handleKeyEvent(0,event->timestamp,keyPressed,qtKey,mod,keyText); +#endif +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index 3e7ee56..1980c15 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -51,6 +51,7 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE class QEGLPlatformContext; +class QPlatformEventLoopIntegration; class QOpenKODEWindow : public QPlatformWindow { @@ -60,10 +61,16 @@ public: void setGeometry(const QRect &rect); void setVisible(bool visible); - WId winId() const { return WId(m_eglWindow); } + WId winId() const; QPlatformGLContext *glContext() const; + void raise(); + void lower(); + + void processKeyEvents( const KDEvent *event ); + void processMouseEvents( const KDEvent *event ); + private: struct KDWindow *m_kdWindow; EGLNativeWindowType m_eglWindow; diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp b/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp deleted file mode 100644 index 84e27f5..0000000 --- a/src/plugins/platforms/openkode/qopenkodewindowsurface.cpp +++ /dev/null @@ -1,176 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "qopenkodewindowsurface.h" -#include "qopenkodeintegration.h" - -#include "qopenkodewindow.h" - -#include -#include - -QT_BEGIN_NAMESPACE - -QOpenKODEWindowSurface::QOpenKODEWindowSurface - (QWidget *window, WId) - : QWindowSurface(window), m_platformGLContext(window->platformWindow()->glContext()) -{ -} - -QOpenKODEWindowSurface::~QOpenKODEWindowSurface() -{ -} - -QPaintDevice *QOpenKODEWindowSurface::paintDevice() -{ - return &mImage; -} - -// ### TODO - this updates the entire toplevel, should only update the region -void QOpenKODEWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) -{ - m_platformGLContext->makeCurrent(); - - if (!offset.isNull()) { - qWarning("Offset flushing not supported yet"); - return; - } - - m_platformGLContext->makeCurrent(); - - QRect boundingRect = region.boundingRect(); - - int x, y, w, h; - QImage blitImage; - if (true || boundingRect == mImage.rect()) { // TODO - check optimization - blitImage = mImage; - x = y = 0; - w = mImage.width(); - h = mImage.height(); - } else { - blitImage = mImage.copy(boundingRect); - w = boundingRect.width(); - h = boundingRect.height(); - x = boundingRect.x(); - y = boundingRect.y(); - } - - GLuint shaderProgram = QOpenKODEIntegration::blitterProgram(); - - glUseProgram(shaderProgram); - - GLuint index = glGetUniformLocation(shaderProgram, "window"); - glUniform2f(index, GLfloat(mImage.width()), GLfloat(mImage.height())); - - // attributes - GLuint posId = glGetAttribLocation(shaderProgram, "pos_attr"); - GLuint texcoordId = glGetAttribLocation(shaderProgram, "texcoord_attr"); - - // sampler - index = glGetUniformLocation(shaderProgram, "tex_samp"); - - glUniform1i(index, 0); - - glDisable(GL_DEPTH_TEST); - glActiveTexture(GL_TEXTURE0); - - GLuint texId; - GLfloat coords[8] = {x, y, x, y + h, x + w, y + h, x + w, y }; - GLfloat texcoords[8] = { 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 0.0 }; - - // Generate texture for checkered background - glGenTextures(1, &texId); - glBindTexture(GL_TEXTURE_2D, texId); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, mImage.bits()); - - // Enable vertex attribute associated with vertex position - glEnableVertexAttribArray(posId); - glEnableVertexAttribArray(texcoordId); - - // Set the quad vertices - glVertexAttribPointer(posId, 2, GL_FLOAT, 0, 0, coords); - glVertexAttribPointer(texcoordId, 2, GL_FLOAT, 0, 0, texcoords); - - // Draw the quad - glDrawArrays(GL_TRIANGLE_FAN, 0, 4); - - // Cleanup - glDisableVertexAttribArray(posId); - glDisableVertexAttribArray(texcoordId); - - // Release all textures - glBindTexture(GL_TEXTURE_2D, 0); - if (texId) - glDeleteTextures(1, &texId); - - eglWaitGL(); - - m_platformGLContext->swapBuffers(); - m_platformGLContext->doneCurrent(); - - eglWaitNative(EGL_CORE_NATIVE_ENGINE); -} - -void QOpenKODEWindowSurface::resize(const QSize &size) -{ - QWindowSurface::resize(size); - mImage = QImage(); - -} -void QOpenKODEWindowSurface::beginPaint(const QRegion ®ion) -{ - Q_UNUSED(region); - if (mImage.isNull()) { - m_platformGLContext = window()->platformWindow()->glContext(); - mImage = QImage(size(),QImage::Format_RGB888); - } -} - -void QOpenKODEWindowSurface::endPaint(const QRegion ®ion) -{ - Q_UNUSED(region); -} - -QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodewindowsurface.h b/src/plugins/platforms/openkode/qopenkodewindowsurface.h deleted file mode 100644 index f12b625..0000000 --- a/src/plugins/platforms/openkode/qopenkodewindowsurface.h +++ /dev/null @@ -1,77 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. -** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef QWINDOWSURFACE_OPENKODE_H -#define QWINDOWSURFACE_OPENKODE_H - -#include - -#include - -QT_BEGIN_HEADER -QT_BEGIN_NAMESPACE - -class QOpenKODEWindow; -class QPlatformGLContext; - -class QOpenKODEWindowSurface : public QWindowSurface -{ -public: - QOpenKODEWindowSurface - (QWidget *window, WId winId); - ~QOpenKODEWindowSurface(); - - QPaintDevice *paintDevice(); - void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); - void resize (const QSize &size); - - void beginPaint(const QRegion ®ion); - void endPaint(const QRegion ®ion); - -private: - QImage mImage; - QPlatformGLContext *m_platformGLContext; -}; - -QT_END_NAMESPACE -QT_END_HEADER - -#endif -- cgit v0.12 From c0eb289559705e15fe13013c72a218e647ad6d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 3 Aug 2010 08:46:44 +0200 Subject: Make it possible to view what format a QPlatformGlContext has QPlatformGlContext has now a pure virtual format getter. The way its intended to work is that the tlw has a QPlatformWindowFormat which is the requested format. Once you get the QPlatformGlContext of the window, you can request the QPlatformWindowFormat of the context to see what you really got. --- src/gui/kernel/qplatformglcontext_qpa.cpp | 3 ++ src/gui/kernel/qplatformglcontext_qpa.h | 5 +- src/opengl/qgl_qpa.cpp | 1 + .../platforms/eglconvenience/qeglconvenience.cpp | 45 +++++++++++++++++ .../platforms/eglconvenience/qeglconvenience.h | 4 ++ .../eglconvenience/qeglplatformcontext.cpp | 12 ++++- .../platforms/eglconvenience/qeglplatformcontext.h | 4 ++ src/plugins/platforms/testlite/qglxintegration.cpp | 57 ++++++++++++++++++++-- src/plugins/platforms/testlite/qglxintegration.h | 4 +- 9 files changed, 129 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index a2ffbf3..36db2b0 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -41,6 +41,9 @@ #include "qplatformglcontext_qpa.h" +QPlatformGLContext::~QPlatformGLContext() +{ } + static QPlatformGLContext *staticSharedContext = 0; void QPlatformGLContext::setDefaultSharedContext(QPlatformGLContext *sharedContext) diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index 9f3bfb3..d235848 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -51,16 +51,19 @@ QT_BEGIN_NAMESPACE class Q_OPENGL_EXPORT QPlatformGLContext { public: - virtual ~QPlatformGLContext() { } + virtual ~QPlatformGLContext(); virtual void makeCurrent() = 0; virtual void doneCurrent() = 0; virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; + virtual QPlatformWindowFormat platformWindowFormat() const = 0; + static QPlatformGLContext *defaultSharedContext(); protected: + static void setDefaultSharedContext(QPlatformGLContext *sharedContext); }; diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 8fa210b..f859ff1 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -134,6 +134,7 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) widget->winId();//make window } d->platformContext = widget->platformWindow()->glContext(); + d->glFormat = qt_platformwindowformat_to_glformat(d->platformContext->platformWindowFormat()); d->valid =(bool) d->platformContext; } diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp index c50101d..b3a4c53 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp @@ -1,5 +1,7 @@ #include "qeglconvenience.h" +QT_BEGIN_NAMESPACE + QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format) { int redSize = format.redBufferSize(); @@ -228,3 +230,46 @@ EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformW qWarning("Cant find EGLConfig, returning null config"); return 0; } + +QPlatformWindowFormat qt_qPlatformWindowFormatFromConfig(EGLDisplay display, const EGLConfig config) +{ + QPlatformWindowFormat format; + EGLint redSize = 0; + EGLint greenSize = 0; + EGLint blueSize = 0; + EGLint alphaSize = 0; + EGLint depthSize = 0; + EGLint stencilSize = 0; + EGLint sampleCount = 0; + EGLint level = 0; + + eglGetConfigAttrib(display, config, EGL_RED_SIZE, &redSize); + eglGetConfigAttrib(display, config, EGL_GREEN_SIZE, &greenSize); + eglGetConfigAttrib(display, config, EGL_BLUE_SIZE, &blueSize); + eglGetConfigAttrib(display, config, EGL_ALPHA_SIZE, &alphaSize); + eglGetConfigAttrib(display, config, EGL_DEPTH_SIZE, &depthSize); + eglGetConfigAttrib(display, config, EGL_STENCIL_SIZE, &stencilSize); + eglGetConfigAttrib(display, config, EGL_SAMPLES, &sampleCount); + eglGetConfigAttrib(display, config, EGL_LEVEL, &level); + + format.setRedBufferSize(redSize); + format.setGreenBufferSize(greenSize); + format.setBlueBufferSize(blueSize); + format.setAlphaBufferSize(alphaSize); + format.setDepthBufferSize(depthSize); + format.setStencilBufferSize(stencilSize); + format.setSamples(sampleCount); + format.setDirectRendering(true); // All EGL contexts are direct-rendered + format.setRgba(true); // EGL doesn't support colour index rendering + format.setStereo(false); // EGL doesn't support stereo buffers + format.setAccumBufferSize(0); // EGL doesn't support accululation buffers + + // Clear the EGL error state because some of the above may + // have errored out because the attribute is not applicable + // to the surface type. Such errors don't matter. + eglGetError(); + + return format; +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h index bd5a6d3..12731e1 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.h +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h @@ -46,9 +46,13 @@ #include #include +QT_BEGIN_NAMESPACE + QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format); bool q_reduceConfigAttributes(QVector *configAttributes); EGLConfig q_configFromQPlatformWindowFormat(EGLDisplay display, const QPlatformWindowFormat &format); +QPlatformWindowFormat qt_qPlatformWindowFormatFromConfig(EGLDisplay display, const EGLConfig config); +QT_END_NAMESPACE #endif //QEGLCONVENIENCE_H diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp index b3a5bba..87cd958 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -45,8 +45,11 @@ #include +#include "qeglconvenience.h" + QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi) - : m_eglDisplay(display) + : QPlatformGLContext() + , m_eglDisplay(display) , m_eglSurface(surface) , m_eglApi(eglApi) { @@ -61,6 +64,8 @@ QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, E eglTerminate(m_eglDisplay); qFatal("EGL error"); } + + m_windowFormat = qt_qPlatformWindowFormatFromConfig(display,config); } QEGLPlatformContext::~QEGLPlatformContext() @@ -142,3 +147,8 @@ void QEGLPlatformContext::makeDefaultSaredContext() { setDefaultSharedContext(this); } + +QPlatformWindowFormat QEGLPlatformContext::platformWindowFormat() const +{ + return m_windowFormat; +} diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h index 2a49129..b0cbbe0 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h @@ -57,11 +57,15 @@ public: void* getProcAddress(const QString& procName); void makeDefaultSaredContext(); + + QPlatformWindowFormat platformWindowFormat() const; private: EGLContext m_eglContext; EGLDisplay m_eglDisplay; EGLSurface m_eglSurface; EGLenum m_eglApi; + + QPlatformWindowFormat m_windowFormat; }; #endif //QOPENKODEGLINTEGRATION_H diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index e554e8d..57f9de4 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -125,6 +125,54 @@ GLXFBConfig QGLXGLContext::findConfig(const GLXFBConfig *configs, int configCoun return chosenConfig; } +QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config) +{ + QPlatformWindowFormat format; + int redSize = 0; + int greenSize = 0; + int blueSize = 0; + int alphaSize = 0; + int depthSize = 0; + int stencilSize = 0; + int sampleCount = 0; + int level = 0; + int rgba = 0; + int stereo = 0; + int accumSizeA = 0; + int accumSizeR = 0; + int accumSizeG = 0; + int accumSizeB = 0; + + glXGetFBConfigAttrib(display, config, GLX_RED_SIZE, &redSize); + glXGetFBConfigAttrib(display, config, GLX_GREEN_SIZE, &greenSize); + glXGetFBConfigAttrib(display, config, GLX_BLUE_SIZE, &blueSize); + glXGetFBConfigAttrib(display, config, GLX_ALPHA_SIZE, &alphaSize); + glXGetFBConfigAttrib(display, config, GLX_DEPTH_SIZE, &depthSize); + glXGetFBConfigAttrib(display, config, GLX_STENCIL_SIZE, &stencilSize); + glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleCount); + glXGetFBConfigAttrib(display, config, GLX_LEVEL, &level); + glXGetFBConfigAttrib(display, config, GLX_RGBA, &rgba); + glXGetFBConfigAttrib(display, config, GLX_STEREO, &stereo); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_ALPHA_SIZE, &accumSizeA); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_RED_SIZE, &accumSizeR); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_GREEN_SIZE, &accumSizeG); + glXGetFBConfigAttrib(display, config, GLX_ACCUM_BLUE_SIZE, &accumSizeB); + + format.setRedBufferSize(redSize); + format.setGreenBufferSize(greenSize); + format.setBlueBufferSize(blueSize); + format.setAlphaBufferSize(alphaSize); + format.setDepthBufferSize(depthSize); + format.setStencilBufferSize(stencilSize); + format.setSamples(sampleCount); + format.setDirectRendering(true); // We don't support anything else for now. + format.setRgba(rgba); + format.setStereo(stereo); + format.setAccumBufferSize(accumSizeA + accumSizeB + accumSizeG + accumSizeR); + + return format; +} + QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindowFormat &format) : QPlatformGLContext() , m_xd(xd) @@ -159,6 +207,7 @@ QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindow { GLXFBConfig config = findConfig(configs,confcount,format,xd); m_context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,shareGlxContext,TRUE); + m_windowFormat = QGLXGLContext::platformWindowFromGLXFBConfig(xd->display,config); XFree(configs); } else { qFatal("Warning no context created"); @@ -167,9 +216,6 @@ QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindow #ifdef MYX11_DEBUG qDebug() << "QGLXGLContext::create context" << m_context; #endif - -// TODO: Populate the QGLFormat with the values of the GLXFBConfig - } QGLXGLContext::QGLXGLContext(MyDisplay *display, Drawable drawable, GLXContext context) @@ -266,4 +312,9 @@ void* QGLXGLContext::getProcAddress(const QString& procName) return glXGetProcAddressARB(reinterpret_cast(procName.toLatin1().data())); } +QPlatformWindowFormat QGLXGLContext::platformWindowFormat() const +{ + return m_windowFormat; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index decbe36..5a98e25 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -68,14 +68,16 @@ public: GLXContext glxContext() {return m_context;} - + QPlatformWindowFormat platformWindowFormat() const; private: static QVector buildSpec(const QPlatformWindowFormat &format); static GLXFBConfig findConfig(const GLXFBConfig *configs,int configCount, const QPlatformWindowFormat &format, const MyDisplay *xd); + static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config); MyDisplay *m_xd; Drawable m_drawable; GLXContext m_context; + QPlatformWindowFormat m_windowFormat; QGLXGLContext (MyDisplay *display, Drawable drawable, GLXContext context); static QMutex m_defaultSharedContextMutex; -- cgit v0.12 From 42cdfaf86d34afeb6448723839fef70fe477deed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 3 Aug 2010 12:44:00 +0200 Subject: Make QOpenKODEWindow not delete context when in fullscreen mode --- src/plugins/platforms/openkode/qopenkodewindow.cpp | 59 +++++++++++----------- src/plugins/platforms/openkode/qopenkodewindow.h | 2 + 2 files changed, 32 insertions(+), 29 deletions(-) diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index c890641..454a50f 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -76,7 +76,7 @@ void kdProcessKeyEvents( const KDEvent *event ) #endif //KD_ATX_keyboard QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) - : QPlatformWindow(tlw) + : QPlatformWindow(tlw), isFullScreen(false) { if (tlw->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenVG) { m_eglApi = EGL_OPENVG_API; @@ -121,15 +121,14 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) return; } - bool fullscreen = false; KDboolean exclusive(false); if (kdSetWindowPropertybv(m_kdWindow,KD_WINDOWPROPERTY_DESKTOP_EXCLUSIVE_NV, &exclusive)) { - fullscreen = true; + isFullScreen = true; } - if (fullscreen) { + if (isFullScreen) { tlw->setGeometry(screen->geometry()); - screen->setFullScreen(fullscreen); + screen->setFullScreen(isFullScreen); }else { const KDint windowSize[2] = { tlw->width(), tlw->height() }; if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { @@ -150,7 +149,7 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) - if (!fullscreen || (fullscreen && !QPlatformGLContext::defaultSharedContext())) { + if (!isFullScreen || (isFullScreen && !QPlatformGLContext::defaultSharedContext())) { if (kdRealizeWindow(m_kdWindow, &m_eglWindow)) { qErrnoWarning(kdGetError(), "Could not realize native window"); return; @@ -179,31 +178,33 @@ QOpenKODEWindow::~QOpenKODEWindow() } void QOpenKODEWindow::setGeometry(const QRect &rect) { - if (!m_kdWindow) { + if (isFullScreen) { QList screens = QApplicationPrivate::platformIntegration()->screens(); QOpenKODEScreen *screen = qobject_cast(screens.at(0)); widget()->setGeometry(screen->geometry()); return; } bool needToDeleteContext = false; - const QRect geo = geometry(); - if (geo.size() != rect.size()) { - const KDint windowSize[2] = { rect.width(), rect.height() }; - if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { - qErrnoWarning(kdGetError(), "Could not set native window size"); - //return; - } else { - needToDeleteContext = true; + if (!isFullScreen) { + const QRect geo = geometry(); + if (geo.size() != rect.size()) { + const KDint windowSize[2] = { rect.width(), rect.height() }; + if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_SIZE, windowSize)) { + qErrnoWarning(kdGetError(), "Could not set native window size"); + //return; + } else { + needToDeleteContext = true; + } } - } - if (geo.topLeft() != rect.topLeft()) { - const KDint windowPos[2] = { rect.x(), rect.y() }; - if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { - qErrnoWarning(kdGetError(), "Could not set native window position"); - //return; - } else { - needToDeleteContext = true; + if (geo.topLeft() != rect.topLeft()) { + const KDint windowPos[2] = { rect.x(), rect.y() }; + if (kdSetWindowPropertyiv(m_kdWindow, KD_WINDOWPROPERTY_DESKTOP_OFFSET_NV, windowPos)) { + qErrnoWarning(kdGetError(), "Could not set native window position"); + //return; + } else { + needToDeleteContext = true; + } } } @@ -211,13 +212,13 @@ void QOpenKODEWindow::setGeometry(const QRect &rect) if (needToDeleteContext) { qDebug() << "deleting context"; delete m_platformGlContext; - } - QList screens = QApplicationPrivate::platformIntegration()->screens(); - QOpenKODEScreen *screen = qobject_cast(screens.at(0)); - EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); - m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig, - m_eglContextAttrs.data(),surface,m_eglApi); + QList screens = QApplicationPrivate::platformIntegration()->screens(); + QOpenKODEScreen *screen = qobject_cast(screens.at(0)); + EGLSurface surface = eglCreateWindowSurface(screen->eglDisplay(),m_eglConfig,m_eglWindow,m_eglWindowAttrs.constData()); + m_platformGlContext = new QEGLPlatformContext(screen->eglDisplay(),m_eglConfig, + m_eglContextAttrs.data(),surface,m_eglApi); + } } void QOpenKODEWindow::setVisible(bool visible) diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index 1980c15..27d33d6 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -79,6 +79,8 @@ private: QVector m_eglContextAttrs; EGLenum m_eglApi; QEGLPlatformContext *m_platformGlContext; + + bool isFullScreen; }; QT_END_NAMESPACE -- cgit v0.12 From 34a3b5d2a0c86a534b9d7b036fb1aaf1eb1c65b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 3 Aug 2010 14:03:28 +0200 Subject: QGLWindowSurface does not support partialupdates if not EGL is defined --- src/opengl/qwindowsurface_gl.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/opengl/qwindowsurface_gl.cpp b/src/opengl/qwindowsurface_gl.cpp index ef115bd..b3c9df1 100644 --- a/src/opengl/qwindowsurface_gl.cpp +++ b/src/opengl/qwindowsurface_gl.cpp @@ -370,6 +370,8 @@ void QGLWindowSurface::hijackWindow(QWidget *widget) setPartialUpdateSupport(false); // Force full-screen updates else setPartialUpdateSupport(true); +#else + setPartialUpdateSupport(false); #endif widgetPrivate->extraData()->glContext = ctx; -- cgit v0.12 From 7992c2d3a4413082fd40e4099f735d95d522b0f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 4 Aug 2010 13:48:43 +0200 Subject: Make QWidget::setPlatformWindowFormat recreate platformWindow if the platformWindow is visible. Also had to make sure that the QGLContext of a QGLWidget was recreated. --- src/gui/kernel/qwidget_qpa.cpp | 41 ++++++++++++++-------- src/opengl/qgl_qpa.cpp | 29 +++++++++------ src/plugins/platforms/testlite/qtestlitewindow.cpp | 2 +- 3 files changed, 47 insertions(+), 25 deletions(-) diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index ef53004..e11f1fc 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -54,22 +54,26 @@ QT_BEGIN_NAMESPACE static QPlatformScreen *qt_screenForWidget(const QWidget *w); -void setParentForChildrenOfWidget(QPlatformWindow *window, const QWidget *widget) +void q_createNativeChildrenAndSetParent(QPlatformWindow *parentWindow, const QWidget *parentWidget) { - QObjectList children = widget->children(); + QObjectList children = parentWidget->children(); for (int i = 0; i < children.size(); i++) { if (children.at(i)->isWidgetType()) { const QWidget *childWidget = qobject_cast(children.at(i)); if (childWidget) { // should not be necessary + if (childWidget->testAttribute(Qt::WA_NativeWindow)) { + if (!childWidget->platformWindow()) + childWidget->winId(); + } if (childWidget->platformWindow()) { - childWidget->platformWindow()->setParent(window); - childWidget->platformWindow()->setWindowFlags(Qt::SubWindow); + childWidget->platformWindow()->setParent(parentWindow); } else { - setParentForChildrenOfWidget(window,childWidget); + q_createNativeChildrenAndSetParent(parentWindow,childWidget); } } } } + } void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyOldWindow) @@ -79,7 +83,6 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO Q_UNUSED(window); Q_UNUSED(initializeWindow); Q_UNUSED(destroyOldWindow); - // XXX Qt::WindowFlags flags = data.window_flags; @@ -102,12 +105,13 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO setWinId(q->platformWindow()->winId()); - //first check children. then find who for parent. - setParentForChildrenOfWidget(platformWindow,q); + //first check children. and create them if necessary + q_createNativeChildrenAndSetParent(q->platformWindow(),q); + + //if we we have a parent, then set correct parent; if (QWidget *nativeParent = q->nativeParentWidget()) { if (nativeParent->platformWindow()) { platformWindow->setParent(nativeParent->platformWindow()); - platformWindow->setWindowFlags(Qt::SubWindow); } } @@ -143,6 +147,7 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) if (topData) { delete topData->platformWindow; topData->platformWindow = 0; + d->data.winid = 0; } } else { if (parentWidget() && parentWidget()->testAttribute(Qt::WA_WState_Created)) { @@ -176,7 +181,6 @@ void QWidgetPrivate::setParent_sys(QWidget *newparent, Qt::WindowFlags f) QWidget * parentWithWindow = newparent->platformWindow()? newparent : newparent->nativeParentWidget(); if (parentWithWindow && parentWithWindow->platformWindow()) { q->platformWindow()->setParent(parentWithWindow->platformWindow()); - q->platformWindow()->setWindowFlags(Qt::SubWindow); } } @@ -615,7 +619,7 @@ void QWidgetPrivate::setGeometry_sys(int x, int y, int w, int h, bool isMove) if (isResize) { QResizeEvent e(r.size(), olds); QApplication::sendEvent(q, &e); - if (q->isWindow()) + if (q->platformWindow()) q->update(); } } else { // not visible @@ -743,9 +747,18 @@ QPlatformWindow *QWidget::platformWindow() const void QWidget::setPlatformWindowFormat(const QPlatformWindowFormat &format) { - Q_D(QWidget); - QTLWExtra *topData = d->topData(); - topData->platformWindowFormat = format; + if (isWindow() || testAttribute(Qt::WA_NativeWindow)) { + Q_D(QWidget); + QTLWExtra *topData = d->topData(); + topData->platformWindowFormat = format; + if (testAttribute(Qt::WA_WState_Created)) { + bool wasVisible = testAttribute(Qt::WA_WState_Visible); + destroy(); + d->create_sys(0,true,true); + if (wasVisible) + topData->platformWindow->setVisible(true); + } + } } QPlatformWindowFormat QWidget::platformWindowFormat() const diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index f859ff1..5e05de1 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -129,11 +129,15 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) if (!widget->platformWindow()){ QGLFormat glformat = format(); QPlatformWindowFormat winFormat = qt_glformat_to_platformwindowformat(glformat); + if (shareContext) { + winFormat.setSharedContext(shareContext->d_func()->platformContext); + } winFormat.setWindowApi(QPlatformWindowFormat::OpenGL); widget->setPlatformWindowFormat(winFormat); widget->winId();//make window } d->platformContext = widget->platformWindow()->glContext(); + Q_ASSERT(d->platformContext); d->glFormat = qt_platformwindowformat_to_glformat(d->platformContext->platformWindowFormat()); d->valid =(bool) d->platformContext; } @@ -147,14 +151,6 @@ void QGLContext::reset() if (!d->valid) return; d->cleanup(); - doneCurrent(); - - if (d->platformContext) { - if (d->paintDevice && d->paintDevice->devType() == QInternal::Widget) { - QWidget *widget = static_cast(d->paintDevice); - widget->destroy(); - } - } d->crWin = false; d->sharing = false; @@ -204,8 +200,6 @@ void QGLWidget::setContext(QGLContext *context, return; } - if (d->glcx) - d->glcx->doneCurrent(); QGLContext* oldcx = d->glcx; d->glcx = context; @@ -286,11 +280,26 @@ void QGLWidget::setMouseTracking(bool enable) bool QGLWidget::event(QEvent *e) { + Q_D(QGLWidget); + if (e->type() == QEvent::WinIdChange) { + if (d->glcx->isValid()) { + if (QGLContext::currentContext() == d->glcx) + QGLContextPrivate::setCurrentContext(0); //Its not valid anymore + setContext(new QGLContext(d->glcx->requestedFormat(), this)); + + } + } return QWidget::event(e); } void QGLWidget::resizeEvent(QResizeEvent *e) { + Q_D(QGLWidget); + if (!isValid()) + return; + if (!d->glcx->initialized()) + glInit(); + resizeGL(width(), height()); return QWidget::resizeEvent(e); } diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 67ec97c..fd02bc4 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -206,11 +206,11 @@ QTestLiteWindow::~QTestLiteWindow() #ifdef MYX11_DEBUG qDebug() << "~QTestLiteWindow" << hex << x_window; #endif + delete mGLContext; XFreeGC(xd->display, gc); XDestroyWindow(xd->display, x_window); xd->windowList.removeAll(this); - delete mGLContext; } -- cgit v0.12 From 8fb1271a4c211adcf3e74f545d8133671747e230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 4 Aug 2010 16:21:09 +0200 Subject: Forgot to makeCurrent before QGLWidget::resizeGL in Lighthouse --- src/opengl/qgl_qpa.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 5e05de1..3d5b74f 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -297,6 +297,7 @@ void QGLWidget::resizeEvent(QResizeEvent *e) Q_D(QGLWidget); if (!isValid()) return; + makeCurrent(); if (!d->glcx->initialized()) glInit(); resizeGL(width(), height()); -- cgit v0.12 From 1be2e830da7aa09f92d8cdca906f8a588cd10381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 5 Aug 2010 11:55:01 +0200 Subject: Remove "disabling opengl tests by default" in configure for lighthouse --- configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configure b/configure index 52a36eb..aa2341a 100755 --- a/configure +++ b/configure @@ -3324,7 +3324,7 @@ if [ "$CFG_USE_GNUMAKE" = "auto" ] && "$MAKE" -v | grep "GNU Make" >/dev/null 2> fi # If -opengl wasn't specified, don't try to auto-detect -if [ "$PLATFORM_QWS" = "yes" -o "$PLATFORM_QPA" = "yes" ] && [ "$CFG_OPENGL" = "auto" ]; then +if [ "$PLATFORM_QWS" = "yes" ] && [ "$CFG_OPENGL" = "auto" ]; then CFG_OPENGL=no fi -- cgit v0.12 From 261fa64d61111741a9746459eac4901248eb19d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 5 Aug 2010 13:58:51 +0200 Subject: Force 16 bit in eglfs --- src/plugins/platforms/eglfs/qeglfsscreen.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp index a390106..0d72862 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -116,9 +116,9 @@ QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display) QPlatformWindowFormat platformFormat; platformFormat.setDepth(16); platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); - platformFormat.setRedBufferSize(8); - platformFormat.setGreenBufferSize(8); - platformFormat.setBlueBufferSize(8); + platformFormat.setRedBufferSize(5); + platformFormat.setGreenBufferSize(6); + platformFormat.setBlueBufferSize(5); EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); EGLNativeWindowType eglWindow = 0; -- cgit v0.12 From a1f0a650578b71fddae9db05435715338b15ba35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 07:53:28 +0200 Subject: Make the GLX integration give more correct format Also create a correct window for the format. --- src/gui/kernel/qplatformwindowformat_qpa.cpp | 24 ++++ src/gui/kernel/qplatformwindowformat_qpa.h | 7 + src/opengl/qgl_qpa.cpp | 3 +- src/plugins/platforms/testlite/qglxintegration.cpp | 159 ++++++++++++--------- src/plugins/platforms/testlite/qglxintegration.h | 7 +- src/plugins/platforms/testlite/qtestlitewindow.cpp | 25 ++-- 6 files changed, 138 insertions(+), 87 deletions(-) diff --git a/src/gui/kernel/qplatformwindowformat_qpa.cpp b/src/gui/kernel/qplatformwindowformat_qpa.cpp index 1112ba9..d497e85 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.cpp +++ b/src/gui/kernel/qplatformwindowformat_qpa.cpp @@ -41,6 +41,8 @@ #include "qplatformwindowformat_qpa.h" +#include + Q_GLOBAL_STATIC(QPlatformWindowFormat, q_platformwindow_default_format); class QPlatformWindowFormatPrivate @@ -986,3 +988,25 @@ bool operator!=(const QPlatformWindowFormat& a, const QPlatformWindowFormat& b) { return !(a == b); } + +#ifndef QT_NO_DEBUG_STREAM +QDebug operator<<(QDebug dbg, const QPlatformWindowFormat &f) +{ + const QPlatformWindowFormatPrivate * const d = f.d; + + dbg.nospace() << "QGLFormat(" + << "options " << d->opts + << ", depthBufferSize " << d->depthSize + << ", accumBufferSize " << d->accumSize + << ", stencilBufferSize " << d->stencilSize + << ", redBufferSize " << d->redSize + << ", greenBufferSize " << d->greenSize + << ", blueBufferSize " << d->blueSize + << ", alphaBufferSize " << d->alphaSize + << ", samples " << d->numSamples + << ", swapInterval " << d->swapInterval + << ')'; + + return dbg.space(); +} +#endif diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h index 37e628d..075e796 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.h +++ b/src/gui/kernel/qplatformwindowformat_qpa.h @@ -163,11 +163,18 @@ private: friend Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindowFormat&); friend Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&); +#ifndef QT_NO_DEBUG_STREAM + friend Q_GUI_EXPORT QDebug operator<<(QDebug, const QPlatformWindowFormat &); +#endif }; Q_GUI_EXPORT bool operator==(const QPlatformWindowFormat&, const QPlatformWindowFormat&); Q_GUI_EXPORT bool operator!=(const QPlatformWindowFormat&, const QPlatformWindowFormat&); +#ifndef QT_NO_DEBUG_STREAM +Q_OPENGL_EXPORT QDebug operator<<(QDebug, const QPlatformWindowFormat &); +#endif + Q_DECLARE_OPERATORS_FOR_FLAGS(QPlatformWindowFormat::FormatOptions) inline bool QPlatformWindowFormat::doubleBuffer() const diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 3d5b74f..5f0bca3 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -105,7 +105,8 @@ static QPlatformWindowFormat qt_glformat_to_platformwindowformat(const QGLFormat retFormat.setRedBufferSize(format.redBufferSize()); retFormat.setRgba(format.rgba()); retFormat.setSampleBuffers(format.sampleBuffers()); - retFormat.setSamples(format.sampleBuffers()); + if (format.samples() >= 0) + retFormat.setSamples(format.samples()); retFormat.setStencil(format.stencil()); if (format.stencilBufferSize() >= 0) retFormat.setStencilBufferSize(format.stencilBufferSize()); diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 57f9de4..47a4f5a 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -63,69 +63,94 @@ QVector QGLXGLContext::buildSpec(const QPlatformWindowFormat &format) { QVector spec(48); int i = 0; - int depthSize = 0; - int stencilSize = 0; - int sampleSize = 0; - - if (format.depth()) - depthSize = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize(); - if (format.stencil()) - stencilSize = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize(); - if (format.sampleBuffers()) - sampleSize = (format.samples() == -1) ? 1 : format.samples(); + spec[i++] = GLX_LEVEL; + spec[i++] = 0; spec[i++] = GLX_DRAWABLE_TYPE; spec[i++] = GLX_WINDOW_BIT; - spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT; + + if (format.rgba()) { + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_RGBA_BIT; + spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize(); + spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(); + spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(); + if (format.alpha()) { + spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 1 : format.alphaBufferSize(); + } + + spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + + if (format.alpha()) { + spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 1 : format.accumBufferSize(); + } + + } else { + spec[i++] = GLX_RENDER_TYPE; spec[i++] = GLX_COLOR_INDEX_BIT; //I'm really not sure if this works.... + spec[i++] = GLX_BUFFER_SIZE; spec[i++] = 8; + } + spec[i++] = GLX_DOUBLEBUFFER; spec[i++] = format.doubleBuffer() ? True : False; spec[i++] = GLX_STEREO; spec[i++] = format.stereo() ? True : False; - spec[i++] = GLX_DEPTH_SIZE; spec[i++] = depthSize; - spec[i++] = GLX_STENCIL_SIZE; spec[i++] = stencilSize; - spec[i++] = GLX_SAMPLE_BUFFERS_ARB; spec[i++] = sampleSize; + if (format.depth()) { + spec[i++] = GLX_DEPTH_SIZE; spec[i++] = (format.depthBufferSize() == -1) ? 1 : format.depthBufferSize(); + } - spec[i++] = GLX_RED_SIZE; spec[i++] = (format.redBufferSize() == -1) ? 1 : format.redBufferSize(); - spec[i++] = GLX_GREEN_SIZE; spec[i++] = (format.greenBufferSize() == -1) ? 1 : format.greenBufferSize(); - spec[i++] = GLX_BLUE_SIZE; spec[i++] = (format.blueBufferSize() == -1) ? 1 : format.blueBufferSize(); - spec[i++] = GLX_ALPHA_SIZE; spec[i++] = (format.alphaBufferSize() == -1) ? 0 : format.alphaBufferSize(); + if (format.stencil()) { + spec[i++] = GLX_STENCIL_SIZE; spec[i++] = (format.stencilBufferSize() == -1) ? 1 : format.stencilBufferSize(); + } + if (format.sampleBuffers()) { + spec[i++] = GLX_SAMPLE_BUFFERS_ARB; + spec[i++] = 1; + spec[i++] = GLX_SAMPLES_ARB; + spec[i++] = format.samples() == -1 ? 4 : format.samples(); + } - spec[i++] = GLX_ACCUM_RED_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); - spec[i++] = GLX_ACCUM_GREEN_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); - spec[i++] = GLX_ACCUM_BLUE_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); - spec[i++] = GLX_ACCUM_ALPHA_SIZE; spec[i++] = (format.accumBufferSize() == -1) ? 0 : format.accumBufferSize(); spec[i++] = XNone; return spec; } -GLXFBConfig QGLXGLContext::findConfig(const GLXFBConfig *configs, int configCount, const QPlatformWindowFormat &format, const MyDisplay *xd) +GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindowFormat &format) { - if (!configs) - return 0; - + QVector spec = buildSpec(format); + int confcount = 0; + GLXFBConfig *configs; GLXFBConfig chosenConfig = 0; - for (int i = 0; i < configCount; ++i) { - chosenConfig = configs[i]; + configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); + if (confcount) + { + for (int i = 0; i < confcount; i++) { + chosenConfig = configs[i]; + + // Make sure we try to get an ARGB visual if the format asked for an alpha: + if (format.alpha()) { + int alphaSize; + glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize); + if (alphaSize > 0) + break; + } else { + break; // Just choose the first in the list if there's no alpha requested + } + } - // Make sure we try to get an ARGB visual if the format asked for an alpha: - if (format.alpha()) { - XVisualInfo* vi; - vi = glXGetVisualFromFBConfig(xd->display, configs[i]); - if (!vi) - continue; + XFree(configs); + } - XRenderPictFormat *pictFormat = XRenderFindVisualFormat(xd->display, vi->visual); - XFree(vi); + if (!chosenConfig) + qFatal("Warning no context created"); - if (pictFormat && (pictFormat->type == PictTypeDirect) && pictFormat->direct.alphaMask) { - // The pict format for the visual matching the FBConfig indicates ARGB - break; - } - } else - break; // Just choose the first in the list if there's no alpha requested - } return chosenConfig; } -QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config) +XVisualInfo *QGLXGLContext::findVisualInfo(const MyDisplay *xd, const QPlatformWindowFormat &format) +{ + GLXFBConfig config = QGLXGLContext::findConfig(xd,format); + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(xd->display,config); + return visualInfo; +} + +QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext ctx) { QPlatformWindowFormat format; int redSize = 0; @@ -134,6 +159,7 @@ QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *disp int alphaSize = 0; int depthSize = 0; int stencilSize = 0; + int sampleBuffers = 0; int sampleCount = 0; int level = 0; int rgba = 0; @@ -143,15 +169,17 @@ QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *disp int accumSizeG = 0; int accumSizeB = 0; + XVisualInfo *vi = glXGetVisualFromFBConfig(display,config); + glXGetConfig(display,vi,GLX_RGBA,&rgba); + XFree(vi); glXGetFBConfigAttrib(display, config, GLX_RED_SIZE, &redSize); glXGetFBConfigAttrib(display, config, GLX_GREEN_SIZE, &greenSize); glXGetFBConfigAttrib(display, config, GLX_BLUE_SIZE, &blueSize); glXGetFBConfigAttrib(display, config, GLX_ALPHA_SIZE, &alphaSize); glXGetFBConfigAttrib(display, config, GLX_DEPTH_SIZE, &depthSize); glXGetFBConfigAttrib(display, config, GLX_STENCIL_SIZE, &stencilSize); - glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleCount); + glXGetFBConfigAttrib(display, config, GLX_SAMPLES, &sampleBuffers); glXGetFBConfigAttrib(display, config, GLX_LEVEL, &level); - glXGetFBConfigAttrib(display, config, GLX_RGBA, &rgba); glXGetFBConfigAttrib(display, config, GLX_STEREO, &stereo); glXGetFBConfigAttrib(display, config, GLX_ACCUM_ALPHA_SIZE, &accumSizeA); glXGetFBConfigAttrib(display, config, GLX_ACCUM_RED_SIZE, &accumSizeR); @@ -164,11 +192,16 @@ QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *disp format.setAlphaBufferSize(alphaSize); format.setDepthBufferSize(depthSize); format.setStencilBufferSize(stencilSize); - format.setSamples(sampleCount); - format.setDirectRendering(true); // We don't support anything else for now. + format.setSampleBuffers(sampleBuffers); + if (format.sampleBuffers()) { + glXGetFBConfigAttrib(display, config, GLX_SAMPLES_ARB, &sampleCount); + format.setSamples(sampleCount); + } + + format.setDirectRendering(glXIsDirect(display, ctx)); format.setRgba(rgba); format.setStereo(stereo); - format.setAccumBufferSize(accumSizeA + accumSizeB + accumSizeG + accumSizeR); + format.setAccumBufferSize(accumSizeB); return format; } @@ -199,19 +232,9 @@ QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindow if (sharePlatformContext) shareGlxContext = static_cast(sharePlatformContext)->glxContext(); - QVector spec = buildSpec(format); - int confcount = 0; - GLXFBConfig *configs; - configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); - if (confcount) - { - GLXFBConfig config = findConfig(configs,confcount,format,xd); - m_context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,shareGlxContext,TRUE); - m_windowFormat = QGLXGLContext::platformWindowFromGLXFBConfig(xd->display,config); - XFree(configs); - } else { - qFatal("Warning no context created"); - } + GLXFBConfig config = findConfig(xd,format); + m_context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,shareGlxContext,TRUE); + m_windowFormat = QGLXGLContext::platformWindowFromGLXFBConfig(xd->display,config,m_context); #ifdef MYX11_DEBUG qDebug() << "QGLXGLContext::create context" << m_context; @@ -243,16 +266,10 @@ void QGLXGLContext::createDefaultSharedContex(MyDisplay *xd) x, y, w, h, 0 /*border_width*/, xd->blackPixel(), xd->whitePixel()); GLXContext context; - QPlatformWindowFormat format; - QVector spec = buildSpec(format); - int confcount = 0; - GLXFBConfig *configs; - configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); - if (confcount) - { - GLXFBConfig config = findConfig(configs,confcount,format,xd); + QPlatformWindowFormat format = QPlatformWindowFormat::defaultFormat(); + GLXFBConfig config = findConfig(xd,format); + if (config) { context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,0,TRUE); - XFree(configs); QPlatformGLContext *sharedContext = new QGLXGLContext(xd,sharedWindow,context); QPlatformGLContext::setDefaultSharedContext(sharedContext); } else { diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index 5a98e25..2f7c70e 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -69,10 +69,13 @@ public: GLXContext glxContext() {return m_context;} QPlatformWindowFormat platformWindowFormat() const; + + static XVisualInfo *findVisualInfo(const MyDisplay *xd, const QPlatformWindowFormat &format); private: + static GLXFBConfig findConfig(const MyDisplay *xd,const QPlatformWindowFormat &format); static QVector buildSpec(const QPlatformWindowFormat &format); - static GLXFBConfig findConfig(const GLXFBConfig *configs,int configCount, const QPlatformWindowFormat &format, const MyDisplay *xd); - static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config); + static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context); + MyDisplay *m_xd; Drawable m_drawable; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index fd02bc4..39b2cc0 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -56,7 +56,6 @@ #include #include -#include #include "qglxintegration.h" #include @@ -158,21 +157,21 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration int w = window->width(); int h = window->height(); -// int n, i; -// if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL) { -// x_visualInfo = QGLXGLContext::findVisual(window->platformWindowFormat(),xd); - -// XSetWindowAttributes a; -// a.background_pixel = xd->whitePixel(); -// a.border_pixel = xd->blackPixel(); -// x_window = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, -// 0, visualInfo()->depth, InputOutput, visualInfo()->visual, -// CWBackPixel|CWBorderPixel, &a); -// } else { + if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL) { + + XVisualInfo *visualInfo = QGLXGLContext::findVisualInfo(xd,window->platformWindowFormat()); + Colormap cmap = XCreateColormap(xd->display,xd->rootWindow(),visualInfo->visual,AllocNone); + + XSetWindowAttributes a; + a.colormap = cmap; + x_window = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + } else { x_window = XCreateSimpleWindow(xd->display, xd->rootWindow(), x, y, w, h, 0 /*border_width*/, xd->blackPixel(), xd->whitePixel()); -// } + } #ifdef MYX11_DEBUG qDebug() << "QTestLiteWindow::QTestLiteWindow creating" << hex << x_window << window; -- cgit v0.12 From a8530e5db7ae25ea0ab5df4681308374abf8b6ba Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 6 Aug 2010 12:35:47 +0200 Subject: Allow customizing the default fbo from the QPlatformGLContext. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- src/gui/kernel/qplatformglcontext_qpa.cpp | 12 ++++++++++++ src/gui/kernel/qplatformglcontext_qpa.h | 1 + src/opengl/qgl_qpa.cpp | 1 + src/opengl/qglpaintdevice.cpp | 6 ++++++ 4 files changed, 20 insertions(+) diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index 36db2b0..4fcd9b8 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -44,6 +44,18 @@ QPlatformGLContext::~QPlatformGLContext() { } +/*! + The frame buffer object that a QGLWidget is painted to and that gets bound + when a QGLFramebufferObject is released. + + The default implementation returns 0, which denotes the default + window-system provided frame buffer. +*/ +GLuint QPlatformGLContext::defaultFBO() const +{ + return 0; +} + static QPlatformGLContext *staticSharedContext = 0; void QPlatformGLContext::setDefaultSharedContext(QPlatformGLContext *sharedContext) diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index d235848..9bfe676 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -57,6 +57,7 @@ public: virtual void doneCurrent() = 0; virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; + virtual GLuint defaultFBO() const; virtual QPlatformWindowFormat platformWindowFormat() const = 0; diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index 5f0bca3..b05df64 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -139,6 +139,7 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) } d->platformContext = widget->platformWindow()->glContext(); Q_ASSERT(d->platformContext); + d->default_fbo = d->platformContext->defaultFBO(); d->glFormat = qt_platformwindowformat_to_glformat(d->platformContext->platformWindowFormat()); d->valid =(bool) d->platformContext; } diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp index e1dcbfd..e12fdae 100644 --- a/src/opengl/qglpaintdevice.cpp +++ b/src/opengl/qglpaintdevice.cpp @@ -166,6 +166,12 @@ void QGLWidgetGLPaintDevice::setWidget(QGLWidget* w) void QGLWidgetGLPaintDevice::beginPaint() { + // ### This should be in setWidget(), but the context of the QGLWidget + // hasn't been set there yet. +#ifdef Q_WS_QPA + m_thisFBO = context()->d_ptr->platformContext->defaultFBO(); +#endif + QGLPaintDevice::beginPaint(); if (!glWidget->d_func()->disable_clear_on_painter_begin && glWidget->autoFillBackground()) { if (glWidget->testAttribute(Qt::WA_TranslucentBackground)) -- cgit v0.12 From 4a0ecee1fca85468c1cbcf8abb68f3d066ca4f60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 08:41:19 +0200 Subject: Make testlite work without glx --- src/plugins/platforms/testlite/qglxintegration.h | 2 -- src/plugins/platforms/testlite/qtestliteintegration.cpp | 5 +---- src/plugins/platforms/testlite/qtestlitewindow.cpp | 13 +++++++++++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index 2f7c70e..562967a 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -87,8 +87,6 @@ private: static void createDefaultSharedContex(MyDisplay *xd); }; - - QT_END_NAMESPACE #endif diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index 3f500c0..a8e0fa7 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -52,10 +52,9 @@ #ifndef QT_NO_OPENGL #include -#include "qglxintegration.h" #include #include -#endif +#endif //QT_NO_OPENGL QT_BEGIN_NAMESPACE @@ -84,9 +83,7 @@ public: QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL) -#ifndef QT_NO_OPENGL : mUseOpenGL(useOpenGL) -#endif { xd = new MyDisplay; diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 39b2cc0..1f477db 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -42,6 +42,7 @@ #include "qtestliteintegration.h" #include #include +#include #include "qtestlitewindow.h" @@ -56,7 +57,9 @@ #include #include +#ifndef QT_NO_OPENGL #include "qglxintegration.h" +#endif #include #include @@ -157,8 +160,9 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration int w = window->width(); int h = window->height(); - if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL) { - + if(window->platformWindowFormat().windowApi() == QPlatformWindowFormat::OpenGL + && QApplicationPrivate::platformIntegration()->hasOpenGL() ) { +#ifndef QT_NO_OPENGL XVisualInfo *visualInfo = QGLXGLContext::findVisualInfo(xd,window->platformWindowFormat()); Colormap cmap = XCreateColormap(xd->display,xd->rootWindow(),visualInfo->visual,AllocNone); @@ -167,6 +171,7 @@ QTestLiteWindow::QTestLiteWindow(const QTestLiteIntegration *platformIntegration x_window = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, 0, visualInfo->depth, InputOutput, visualInfo->visual, CWColormap, &a); +#endif //QT_NO_OPENGL } else { x_window = XCreateSimpleWindow(xd->display, xd->rootWindow(), x, y, w, h, 0 /*border_width*/, @@ -1012,9 +1017,13 @@ void QTestLiteWindow::setCursor(QCursor * cursor) QPlatformGLContext *QTestLiteWindow::glContext() const { + if (!QApplicationPrivate::platformIntegration()->hasOpenGL()) + return 0; if (!mGLContext) { QTestLiteWindow *that = const_cast(this); +#ifndef QT_NO_OPENGL that->mGLContext = new QGLXGLContext(x_window, xd, widget()->platformWindowFormat()); +#endif } return mGLContext; } -- cgit v0.12 From 783f218aac7c73837405af4893d8dd35b425a710 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 13:23:06 +0200 Subject: Fixed Lighthouse tempcontext to reset to current context and made glxintegrations shared context use the correct window configuration --- src/opengl/qgl_qpa.cpp | 13 ++++++++----- src/plugins/platforms/testlite/qglxintegration.cpp | 17 ++++++++++++----- 2 files changed, 20 insertions(+), 10 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index b05df64..ad125fe 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -244,20 +244,23 @@ void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase) class QGLTemporaryContextPrivate { public: - QWidget *widget; + QGLWidget *widget; + QGLContext *context; }; QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) : d(new QGLTemporaryContextPrivate) { - d->widget = new QWidget; - d->widget->setGeometry(0,0,3,3); - d->widget->winId(); - d->widget->platformWindow()->glContext()->makeCurrent(); + d->context = const_cast(QGLContext::currentContext()); + d->context->doneCurrent(); + d->widget = new QGLWidget; + d->widget->makeCurrent(); } QGLTemporaryContext::~QGLTemporaryContext() { + d->widget->doneCurrent(); + d->context->makeCurrent(); delete d->widget; } diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 47a4f5a..050643c 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -262,20 +262,27 @@ void QGLXGLContext::createDefaultSharedContex(MyDisplay *xd) int w = 3; int h = 3; - Window sharedWindow = XCreateSimpleWindow(xd->display, xd->rootWindow(), - x, y, w, h, 0 /*border_width*/, - xd->blackPixel(), xd->whitePixel()); - GLXContext context; QPlatformWindowFormat format = QPlatformWindowFormat::defaultFormat(); + GLXContext context; GLXFBConfig config = findConfig(xd,format); if (config) { + XVisualInfo *visualInfo = glXGetVisualFromFBConfig(xd->display,config); + Colormap cmap = XCreateColormap(xd->display,xd->rootWindow(),visualInfo->visual,AllocNone); + XSetWindowAttributes a; + a.colormap = cmap; + Window sharedWindow = XCreateWindow(xd->display, xd->rootWindow(),x, y, w, h, + 0, visualInfo->depth, InputOutput, visualInfo->visual, + CWColormap, &a); + context = glXCreateNewContext(xd->display,config,GLX_RGBA_TYPE,0,TRUE); QPlatformGLContext *sharedContext = new QGLXGLContext(xd,sharedWindow,context); QPlatformGLContext::setDefaultSharedContext(sharedContext); } else { - qFatal("Warning no shared context created"); + qWarning("Warning no shared context created"); } + + } void QGLXGLContext::makeCurrent() -- cgit v0.12 From 1d8ce23abdb0bd980292e4a9c8d87c019585150a Mon Sep 17 00:00:00 2001 From: Christian Kamm Date: Fri, 6 Aug 2010 13:42:43 +0200 Subject: Add missing null check to lighthouse's QGLTemporaryContext. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen Lind --- src/opengl/qgl_qpa.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index ad125fe..d87e668 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -252,7 +252,8 @@ QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) : d(new QGLTemporaryContextPrivate) { d->context = const_cast(QGLContext::currentContext()); - d->context->doneCurrent(); + if (d->context) + d->context->doneCurrent(); d->widget = new QGLWidget; d->widget->makeCurrent(); } @@ -260,7 +261,8 @@ QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) QGLTemporaryContext::~QGLTemporaryContext() { d->widget->doneCurrent(); - d->context->makeCurrent(); + if (d->context) + d->context->makeCurrent(); delete d->widget; } -- cgit v0.12 From 47bed030ffedded5914d8309bf2e1cccc1fd78d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 15:10:20 +0200 Subject: Added reduced config to glxconfig should help if there are not many glxconfigs available. Also made QGLTemporaryContext use a QWidget again instead of a QGLWidget; This allows us to ask for a smaller window size before making the context. --- src/opengl/qgl_qpa.cpp | 14 +++-- src/plugins/platforms/testlite/qglxintegration.cpp | 68 ++++++++++++++++------ src/plugins/platforms/testlite/qglxintegration.h | 1 + 3 files changed, 60 insertions(+), 23 deletions(-) diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index d87e668..c328819 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -244,7 +244,7 @@ void QGLContext::generateFontDisplayLists(const QFont & fnt, int listBase) class QGLTemporaryContextPrivate { public: - QGLWidget *widget; + QWidget *widget; QGLContext *context; }; @@ -254,13 +254,19 @@ QGLTemporaryContext::QGLTemporaryContext(bool, QWidget *) d->context = const_cast(QGLContext::currentContext()); if (d->context) d->context->doneCurrent(); - d->widget = new QGLWidget; - d->widget->makeCurrent(); + d->widget = new QWidget; + d->widget->setGeometry(0,0,3,3); + QPlatformWindowFormat format = d->widget->platformWindowFormat(); + format.setWindowApi(QPlatformWindowFormat::OpenGL); + d->widget->winId(); + + + d->widget->platformWindow()->glContext()->makeCurrent(); } QGLTemporaryContext::~QGLTemporaryContext() { - d->widget->doneCurrent(); + d->widget->platformWindow()->glContext()->doneCurrent(); if (d->context) d->context->makeCurrent(); delete d->widget; diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index 050643c..ba161c1 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -113,28 +113,33 @@ QVector QGLXGLContext::buildSpec(const QPlatformWindowFormat &format) GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindowFormat &format) { - QVector spec = buildSpec(format); - int confcount = 0; - GLXFBConfig *configs; + bool reduced = true; GLXFBConfig chosenConfig = 0; - configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); - if (confcount) - { - for (int i = 0; i < confcount; i++) { - chosenConfig = configs[i]; - - // Make sure we try to get an ARGB visual if the format asked for an alpha: - if (format.alpha()) { - int alphaSize; - glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize); - if (alphaSize > 0) - break; - } else { - break; // Just choose the first in the list if there's no alpha requested + QPlatformWindowFormat reducedFormat = format; + while (!chosenConfig && reduced) { + QVector spec = buildSpec(reducedFormat); + int confcount = 0; + GLXFBConfig *configs; + configs = glXChooseFBConfig(xd->display,xd->screen,spec.constData(),&confcount); + if (confcount) + { + for (int i = 0; i < confcount; i++) { + chosenConfig = configs[i]; + + // Make sure we try to get an ARGB visual if the format asked for an alpha: + if (format.alpha()) { + int alphaSize; + glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize); + if (alphaSize > 0) + break; + } else { + break; // Just choose the first in the list if there's no alpha requested + } } - } - XFree(configs); + XFree(configs); + } + reducedFormat = reducePlatformWindowFormat(format,&reduced); } if (!chosenConfig) @@ -206,6 +211,31 @@ QPlatformWindowFormat QGLXGLContext::platformWindowFromGLXFBConfig(Display *disp return format; } +QPlatformWindowFormat QGLXGLContext::reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced) +{ + QPlatformWindowFormat retFormat = format; + *reduced = true; + + if (retFormat.sampleBuffers()) { + retFormat.setSampleBuffers(false); + } else if (retFormat.stereo()) { + retFormat.setStereo(false); + } else if (retFormat.accum()) { + retFormat.setAccum(false); + }else if (retFormat.stencil()) { + retFormat.setStencil(false); + }else if (retFormat.alpha()) { + retFormat.setAlpha(false); + }else if (retFormat.depth()) { + retFormat.setDepth(false); + }else if (retFormat.doubleBuffer()) { + retFormat.setDoubleBuffer(false); + }else{ + *reduced = false; + } + return retFormat; +} + QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindowFormat &format) : QPlatformGLContext() , m_xd(xd) diff --git a/src/plugins/platforms/testlite/qglxintegration.h b/src/plugins/platforms/testlite/qglxintegration.h index 562967a..479be4b 100644 --- a/src/plugins/platforms/testlite/qglxintegration.h +++ b/src/plugins/platforms/testlite/qglxintegration.h @@ -75,6 +75,7 @@ private: static GLXFBConfig findConfig(const MyDisplay *xd,const QPlatformWindowFormat &format); static QVector buildSpec(const QPlatformWindowFormat &format); static QPlatformWindowFormat platformWindowFromGLXFBConfig(Display *display, GLXFBConfig config, GLXContext context); + static QPlatformWindowFormat reducePlatformWindowFormat(const QPlatformWindowFormat &format, bool *reduced); MyDisplay *m_xd; -- cgit v0.12 From eaf64f3a07533a30aa29eed85f6a3cbc744722a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 6 Aug 2010 16:31:15 +0200 Subject: Cleaned up in includes in Lighthouse headerfiles --- src/gui/kernel/qplatformglcontext_qpa.cpp | 2 +- src/gui/kernel/qplatformglcontext_qpa.h | 5 +++-- src/gui/kernel/qplatformintegration_qpa.h | 1 + src/gui/kernel/qplatformscreen_qpa.h | 9 ++++++++- src/plugins/platforms/eglconvenience/qeglconvenience.h | 2 +- src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp | 3 ++- 6 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index 4fcd9b8..516bf24 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -51,7 +51,7 @@ QPlatformGLContext::~QPlatformGLContext() The default implementation returns 0, which denotes the default window-system provided frame buffer. */ -GLuint QPlatformGLContext::defaultFBO() const +unsigned long QPlatformGLContext::defaultFBO() const { return 0; } diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index 9bfe676..3e7656b 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -42,7 +42,8 @@ #ifndef QPLATFORM_GL_CONTEXT_H #define QPLATFORM_GL_CONTEXT_H -#include +#include +#include QT_BEGIN_HEADER @@ -57,7 +58,7 @@ public: virtual void doneCurrent() = 0; virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; - virtual GLuint defaultFBO() const; + virtual unsigned long defaultFBO() const; virtual QPlatformWindowFormat platformWindowFormat() const = 0; diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 9f7367e..8cecbb4 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -43,6 +43,7 @@ #define QPLATFORMINTEGRATION_H #include +#include #include #include diff --git a/src/gui/kernel/qplatformscreen_qpa.h b/src/gui/kernel/qplatformscreen_qpa.h index f603db5..1704f0f 100644 --- a/src/gui/kernel/qplatformscreen_qpa.h +++ b/src/gui/kernel/qplatformscreen_qpa.h @@ -42,10 +42,17 @@ #ifndef QPLATFORMSCREEN_H #define QPLATFORMSCREEN_H +#include +#include +#include +#include #include -#include #include +#include +#include +#include + QT_BEGIN_HEADER QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h index 12731e1..484894b 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.h +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h @@ -41,11 +41,11 @@ #ifndef QEGLCONVENIENCE_H #define QEGLCONVENIENCE_H -#include #include #include +#include QT_BEGIN_NAMESPACE QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat &format); diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp index 87cd958..04720b5 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -41,12 +41,13 @@ #include "qeglplatformcontext.h" -#include #include #include "qeglconvenience.h" +#include + QEGLPlatformContext::QEGLPlatformContext(EGLDisplay display, EGLConfig config, EGLint contextAttrs[], EGLSurface surface, EGLenum eglApi) : QPlatformGLContext() , m_eglDisplay(display) -- cgit v0.12 From 3b048f8727a125eef2ac132d95dd3d9c2acbcab2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 11 Aug 2010 11:01:53 +0200 Subject: Revert "Allow customizing the default fbo from the QPlatformGLContext." This reverts commit a8530e5db7ae25ea0ab5df4681308374abf8b6ba. Conflicts: src/gui/kernel/qplatformglcontext_qpa.cpp src/gui/kernel/qplatformglcontext_qpa.h --- src/gui/kernel/qplatformglcontext_qpa.cpp | 12 ------------ src/gui/kernel/qplatformglcontext_qpa.h | 1 - src/opengl/qgl_qpa.cpp | 1 - src/opengl/qglpaintdevice.cpp | 6 ------ 4 files changed, 20 deletions(-) diff --git a/src/gui/kernel/qplatformglcontext_qpa.cpp b/src/gui/kernel/qplatformglcontext_qpa.cpp index 516bf24..36db2b0 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.cpp +++ b/src/gui/kernel/qplatformglcontext_qpa.cpp @@ -44,18 +44,6 @@ QPlatformGLContext::~QPlatformGLContext() { } -/*! - The frame buffer object that a QGLWidget is painted to and that gets bound - when a QGLFramebufferObject is released. - - The default implementation returns 0, which denotes the default - window-system provided frame buffer. -*/ -unsigned long QPlatformGLContext::defaultFBO() const -{ - return 0; -} - static QPlatformGLContext *staticSharedContext = 0; void QPlatformGLContext::setDefaultSharedContext(QPlatformGLContext *sharedContext) diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index 3e7656b..ff848ed 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -58,7 +58,6 @@ public: virtual void doneCurrent() = 0; virtual void swapBuffers() = 0; virtual void* getProcAddress(const QString& procName) = 0; - virtual unsigned long defaultFBO() const; virtual QPlatformWindowFormat platformWindowFormat() const = 0; diff --git a/src/opengl/qgl_qpa.cpp b/src/opengl/qgl_qpa.cpp index c328819..49c0860 100644 --- a/src/opengl/qgl_qpa.cpp +++ b/src/opengl/qgl_qpa.cpp @@ -139,7 +139,6 @@ bool QGLContext::chooseContext(const QGLContext* shareContext) } d->platformContext = widget->platformWindow()->glContext(); Q_ASSERT(d->platformContext); - d->default_fbo = d->platformContext->defaultFBO(); d->glFormat = qt_platformwindowformat_to_glformat(d->platformContext->platformWindowFormat()); d->valid =(bool) d->platformContext; } diff --git a/src/opengl/qglpaintdevice.cpp b/src/opengl/qglpaintdevice.cpp index e12fdae..e1dcbfd 100644 --- a/src/opengl/qglpaintdevice.cpp +++ b/src/opengl/qglpaintdevice.cpp @@ -166,12 +166,6 @@ void QGLWidgetGLPaintDevice::setWidget(QGLWidget* w) void QGLWidgetGLPaintDevice::beginPaint() { - // ### This should be in setWidget(), but the context of the QGLWidget - // hasn't been set there yet. -#ifdef Q_WS_QPA - m_thisFBO = context()->d_ptr->platformContext->defaultFBO(); -#endif - QGLPaintDevice::beginPaint(); if (!glWidget->d_func()->disable_clear_on_painter_begin && glWidget->autoFillBackground()) { if (glWidget->testAttribute(Qt::WA_TranslucentBackground)) -- cgit v0.12 From 144f1f710ad46e89a7c07e94f80ac3744ace5c3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 11 Aug 2010 11:07:19 +0200 Subject: Fix typo in glxintegration did actually not reduce the format more than one level, and if that didn't wasnt enough it would end up in an infinite loop. --- src/plugins/platforms/testlite/qglxintegration.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index ba161c1..fbffcab 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -125,9 +125,8 @@ GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindow { for (int i = 0; i < confcount; i++) { chosenConfig = configs[i]; - // Make sure we try to get an ARGB visual if the format asked for an alpha: - if (format.alpha()) { + if (reducedFormat.alpha()) { int alphaSize; glXGetFBConfigAttrib(xd->display,configs[i],GLX_ALPHA_SIZE,&alphaSize); if (alphaSize > 0) @@ -139,11 +138,11 @@ GLXFBConfig QGLXGLContext::findConfig(const MyDisplay *xd, const QPlatformWindow XFree(configs); } - reducedFormat = reducePlatformWindowFormat(format,&reduced); + reducedFormat = reducePlatformWindowFormat(reducedFormat,&reduced); } if (!chosenConfig) - qFatal("Warning no context created"); + qWarning("Warning no context created"); return chosenConfig; } -- cgit v0.12 From 660732ed870d584ef704941a4b6a00dc6c84f38e Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 18 Aug 2010 11:02:16 +0200 Subject: Only list activeqt once This caused build errors for the Windows platform. Looks like a merge error introduced in commit 075e96eba50 --- src/src.pro | 1 - 1 file changed, 1 deletion(-) diff --git a/src/src.pro b/src/src.pro index 6118622..94ecb1b 100644 --- a/src/src.pro +++ b/src/src.pro @@ -6,7 +6,6 @@ win32:SRC_SUBDIRS += src_winmain symbian:SRC_SUBDIRS += src_s60main SRC_SUBDIRS += src_corelib src_xml src_network src_sql src_testlib nacl: SRC_SUBDIRS -= src_network src_testlib -win32:SRC_SUBDIRS += src_activeqt !symbian:contains(QT_CONFIG, dbus):SRC_SUBDIRS += src_dbus !contains(QT_CONFIG, no-gui): SRC_SUBDIRS += src_gui !wince*:!symbian:!vxworks:contains(QT_CONFIG, qt3support): SRC_SUBDIRS += src_qt3support -- cgit v0.12 From 411525a29e1d98c5e2a7052307bcd9e386710f26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 18 Aug 2010 11:48:39 +0200 Subject: Lighthouse:Only native children uses setParent --- src/gui/kernel/qwidget_qpa.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index e11f1fc..b3599bd 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -109,9 +109,11 @@ void QWidgetPrivate::create_sys(WId window, bool initializeWindow, bool destroyO q_createNativeChildrenAndSetParent(q->platformWindow(),q); //if we we have a parent, then set correct parent; - if (QWidget *nativeParent = q->nativeParentWidget()) { - if (nativeParent->platformWindow()) { - platformWindow->setParent(nativeParent->platformWindow()); + if (!q->isWindow()) { + if (QWidget *nativeParent = q->nativeParentWidget()) { + if (nativeParent->platformWindow()) { + platformWindow->setParent(nativeParent->platformWindow()); + } } } -- cgit v0.12 From 9fb2afe3a31da4f08bdd5090a5b4aefd2035a46d Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 18 Aug 2010 12:27:08 +0200 Subject: Compile on Symbian after commit 075e96eba5001 --- src/corelib/thread/qthread_unix.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 16a0a46..f8cf67d 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -465,7 +465,7 @@ void QThread::usleep(unsigned long usecs) // Does some magic and calculate the Unix scheduler priorities // sched_policy is IN/OUT: it must be set to a valid policy before calling this function // sched_priority is OUT only -#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && !defined(Q_OS_SYMBIAN) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0) +#if defined(Q_OS_DARWIN) || !defined(Q_OS_OPENBSD) && defined(_POSIX_THREAD_PRIORITY_SCHEDULING) && (_POSIX_THREAD_PRIORITY_SCHEDULING-0 >= 0) static bool calculateUnixPriority(int priority, int *sched_policy, int *sched_priority) { #ifdef SCHED_IDLE -- cgit v0.12 From c02ad51733d0a2885ddb39cb7e3b09355ab97213 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 18 Aug 2010 12:51:00 +0200 Subject: Work around compile error with g++ for Windows --- src/gui/kernel/qapplication_win.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_win.cpp b/src/gui/kernel/qapplication_win.cpp index 628a041..b4a3f50 100644 --- a/src/gui/kernel/qapplication_win.cpp +++ b/src/gui/kernel/qapplication_win.cpp @@ -951,7 +951,7 @@ Q_GLOBAL_STATIC(WinClassNameHash, winclassNames) // const QString qt_reg_winclass(QWidget *w) // register window class { - int flags = w ? w->windowFlags() : 0; + int flags = w ? int(w->windowFlags()) : 0; int type = flags & Qt::WindowType_Mask; uint style; -- cgit v0.12 From 74d519f87e804b624ac76337fe2905d512d363fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 18 Aug 2010 14:22:09 +0200 Subject: Lighthouse: don't force sending key events to the TLW --- src/gui/kernel/qapplication_qpa.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index b89e81d..e5b5396 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -802,9 +802,6 @@ void QApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyEven if (app_do_modal && !qt_try_modal(focusW, e->keyType)) return; - if (!focusW->isWindow()) - focusW = focusW->window(); - modifiers = e->modifiers; QKeyEvent ev(e->keyType, e->key, e->modifiers, e->unicode, e->repeat, e->repeatCount); QApplication::sendSpontaneousEvent(focusW, &ev); -- cgit v0.12 From 5508ea53b0af0c580dbf7466bf2731dcbad399de Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 20 Aug 2010 10:26:50 +0200 Subject: Clean up lighthouse header files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes configure warnings Reviewed-by: Jørgen --- src/corelib/global/qglobal.h | 2 +- src/corelib/global/qnaclunimplemented.h | 8 ++++++++ src/gui/kernel/qplatformeventloopintegration_qpa.h | 12 +++++++++++- src/gui/kernel/qplatformglcontext_qpa.h | 4 +++- src/gui/kernel/qplatformintegration_qpa.h | 3 ++- src/gui/kernel/qplatformwindow_qpa.h | 2 ++ src/gui/kernel/qplatformwindowformat_qpa.h | 4 +++- src/gui/painting/qplatformcursor_qpa.h | 20 +++++++++++++------- 8 files changed, 43 insertions(+), 12 deletions(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 2d37a59..4b25503 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -2666,7 +2666,7 @@ QT_LICENSED_MODULE(DBus) #endif #ifdef Q_OS_NACL -#include +#include #endif QT_END_NAMESPACE diff --git a/src/corelib/global/qnaclunimplemented.h b/src/corelib/global/qnaclunimplemented.h index 84085b5..ba43915 100644 --- a/src/corelib/global/qnaclunimplemented.h +++ b/src/corelib/global/qnaclunimplemented.h @@ -50,6 +50,10 @@ #define PTHREAD_CANCEL_ENABLE 2 #define PTHREAD_INHERIT_SCHED 3 +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + extern "C" { void pthread_cleanup_push(void (*handler)(void *), void *arg); @@ -80,6 +84,10 @@ int open64(const char *path, int oflag, ...); int select(int nfds, fd_set * readfds, fd_set * writefds, fd_set * errorfds, struct timeval * timeout); +QT_END_NAMESPACE + +QT_END_HEADER + #endif //Q_OS_NACL #endif //QNACLUNIMPLEMENTED_H diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.h b/src/gui/kernel/qplatformeventloopintegration_qpa.h index 5e4c227..7343566 100644 --- a/src/gui/kernel/qplatformeventloopintegration_qpa.h +++ b/src/gui/kernel/qplatformeventloopintegration_qpa.h @@ -1,7 +1,13 @@ #ifndef QPLATFORMEVENTLOOPINTEGRATION_QPA_H #define QPLATFORMEVENTLOOPINTEGRATION_QPA_H -#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) class QPlatformEventLoopIntegration { @@ -10,4 +16,8 @@ public: virtual void wakeup() = 0; }; +QT_END_NAMESPACE + +QT_END_HEADER + #endif // QPLATFORMEVENTLOOPINTEGRATION_QPA_H diff --git a/src/gui/kernel/qplatformglcontext_qpa.h b/src/gui/kernel/qplatformglcontext_qpa.h index ff848ed..ed41723 100644 --- a/src/gui/kernel/qplatformglcontext_qpa.h +++ b/src/gui/kernel/qplatformglcontext_qpa.h @@ -43,12 +43,14 @@ #define QPLATFORM_GL_CONTEXT_H #include -#include +#include QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +QT_MODULE(Gui) + class Q_OPENGL_EXPORT QPlatformGLContext { public: diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 8cecbb4..9460910 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -51,7 +51,8 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE -//QT_MODULE(Gui) +QT_MODULE(Gui) + class QPlatformWindow; class QWindowSurface; class QBlittable; diff --git a/src/gui/kernel/qplatformwindow_qpa.h b/src/gui/kernel/qplatformwindow_qpa.h index 2275c02..6dfba05 100644 --- a/src/gui/kernel/qplatformwindow_qpa.h +++ b/src/gui/kernel/qplatformwindow_qpa.h @@ -52,6 +52,8 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +QT_MODULE(Gui) + class QPlatformWindowPrivate; class QWidget; class QPlatformGLContext; diff --git a/src/gui/kernel/qplatformwindowformat_qpa.h b/src/gui/kernel/qplatformwindowformat_qpa.h index 075e796..63df76a 100644 --- a/src/gui/kernel/qplatformwindowformat_qpa.h +++ b/src/gui/kernel/qplatformwindowformat_qpa.h @@ -41,12 +41,14 @@ #ifndef QPLATFORMWINDOWFORMAT_QPA_H #define QPLATFORMWINDOWFORMAT_QPA_H -#include +#include QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +QT_MODULE(Gui) + class QPlatformWindowFormatPrivate; class Q_GUI_EXPORT QPlatformWindowFormat diff --git a/src/gui/painting/qplatformcursor_qpa.h b/src/gui/painting/qplatformcursor_qpa.h index 5f1654d..abdbfee 100644 --- a/src/gui/painting/qplatformcursor_qpa.h +++ b/src/gui/painting/qplatformcursor_qpa.h @@ -41,16 +41,20 @@ #ifndef QGRAPHICSSYSTEMCURSOR_H #define QGRAPHICSSYSTEMCURSOR_H -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +QT_MODULE(Gui) + // Cursor graphics management class Q_GUI_EXPORT QPlatformCursorImage { public: @@ -94,4 +98,6 @@ private: QT_END_NAMESPACE +QT_END_HEADER + #endif // QGRAPHICSSYSTEMCURSOR_H -- cgit v0.12 From 53ce5a08f5a0a4e09ec81486275039afbf76fe3c Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 20 Aug 2010 12:14:34 +0200 Subject: Move qplatformcursor from gui/painting to gui/kernel MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen --- src/gui/kernel/kernel.pri | 6 +- src/gui/kernel/qplatformcursor_qpa.cpp | 664 +++++++++++++++++++++++++++++++ src/gui/kernel/qplatformcursor_qpa.h | 103 +++++ src/gui/painting/painting.pri | 5 +- src/gui/painting/qplatformcursor_qpa.cpp | 664 ------------------------------- src/gui/painting/qplatformcursor_qpa.h | 103 ----- 6 files changed, 772 insertions(+), 773 deletions(-) create mode 100644 src/gui/kernel/qplatformcursor_qpa.cpp create mode 100644 src/gui/kernel/qplatformcursor_qpa.h delete mode 100644 src/gui/painting/qplatformcursor_qpa.cpp delete mode 100644 src/gui/painting/qplatformcursor_qpa.h diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 9941b1b..703a1cb 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -221,7 +221,8 @@ qpa { kernel/qplatformwindowformat_qpa.h \ kernel/qplatformglcontext_qpa.h \ kernel/qdesktopwidget_qpa_p.h \ - kernel/qplatformeventloopintegration_qpa.h + kernel/qplatformeventloopintegration_qpa.h \ + painting/qplatformcursor_qpa.h SOURCES += \ kernel/qapplication_qpa.cpp \ @@ -242,7 +243,8 @@ qpa { kernel/qplatformwindow_qpa.cpp \ kernel/qplatformwindowformat_qpa.cpp \ kernel/qplatformeventloopintegration_qpa.cpp \ - kernel/qplatformglcontext_qpa.cpp + kernel/qplatformglcontext_qpa.cpp \ + painting/qplatformcursor_qpa.cpp contains(QT_CONFIG, glib) { SOURCES += \ diff --git a/src/gui/kernel/qplatformcursor_qpa.cpp b/src/gui/kernel/qplatformcursor_qpa.cpp new file mode 100644 index 0000000..6665396 --- /dev/null +++ b/src/gui/kernel/qplatformcursor_qpa.cpp @@ -0,0 +1,664 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qplatformcursor_qpa.h" + +#include +#include +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +QList > QPlatformCursorPrivate::instances; + +/*! + \class QGraphicsSystemCursor + + \brief The QGraphicsSystemCursor class provides information about + pointer device events (movement, buttons), and requests to change + the currently displayed cursor. + + Note that QGraphicsSystemCursor does not include any graphics for + display. An application that sets a QCursor may provide its own + graphics. + + \sa QGraphicsSystemCursorImage +*/ + +/*! + \fn virtual void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & event) + + This method is called by Qt whenever a QMouseEvent is generated by the + underlying pointer input. \a event is a reference to the QMouseEvent in + question. A default do-nothing implementation is provided. + + \sa QApplicationPrivate::handleMouseEvent() +*/ + +/*! + \fn virtual void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) + + \brief This method is called by Qt whenever the cursor graphic should be changed. + + Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. + + \a widgetCursor is a pointer to the QCursor that should be displayed. + + \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note + that this may be 0 if the current position is not occupied by a displayed widget. + + \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() +*/ + +/*! + \fn QGraphicsSystemCursor::QGraphicsSystemCursor() + + \brief Constructs a QGraphicsSystemCursor +*/ +QPlatformCursor::QPlatformCursor(QPlatformScreen *scr ) + : screen(scr) +{ + QPlatformCursorPrivate::instances.append(this); +} + +// End of display and pointer event handling code +// Beginning of built-in cursor graphics +// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp + +/*! + \class QGraphicsSystemCursorImage + + \brief The QGraphicsSystemCursorImage class provides a set of graphics + intended to be used as cursors. + + \sa QGraphicsSystemCursor +*/ + +static QPlatformCursorImage *systemCursorTable[Qt::LastCursor+1]; +static bool systemCursorTableInit = false; + +// 16 x 16 +static const uchar cur_arrow_bits[] = { + 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, + 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, + 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; +static const uchar mcur_arrow_bits[] = { + 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, + 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, + 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; + +static const unsigned char cur_up_arrow_bits[] = { + 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, + 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; +static const unsigned char mcur_up_arrow_bits[] = { + 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, + 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; + +static const unsigned char cur_cross_bits[] = { + 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, + 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; +static const unsigned char mcur_cross_bits[] = { + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; + +static const uchar cur_ibeam_bits[] = { + 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, + 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_ibeam_bits[] = { + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, + 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; + +static const uchar cur_ver_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, + 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, + 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; +static const uchar mcur_ver_bits[] = { + 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, + 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, + 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; + +static const uchar cur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, + 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_hor_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, + 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, + 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; +static const uchar cur_bdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, + 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, + 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_bdiag_bits[] = { + 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, + 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, + 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; +static const uchar cur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, + 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, + 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; +static const uchar mcur_fdiag_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, + 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, + 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; +static const uchar cur_blank_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +// 20 x 20 +static const uchar forbidden_bits[] = { + 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, + 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, + 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, + 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; + +static const uchar forbiddenm_bits[] = { + 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, + 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, + 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, + 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; + +// 32 x 32 +static const uchar wait_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, + 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, + 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, + 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, + 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar wait_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, + 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, + 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, + 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, + 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar hsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, + 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, + 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar hsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, + 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, + 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, + 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, + 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplit_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar vsplitm_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, + 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phand_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, + 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, + 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, + 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, + 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar phandm_bits[] = { + 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, + 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, + 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, + 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, + 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar size_all_data_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, + 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; +static const uchar size_all_mask_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, + 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, + 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, + 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, + 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + +static const uchar whatsthis_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, + 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, + 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, + 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, + 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, + 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; +static const uchar whatsthism_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, + 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, + 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, + 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, + 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, + 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, + 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; + +static const uchar busy_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, + 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, + 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, + 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, + 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, + 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, + 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +static const uchar busym_bits[] = { + 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, + 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, + 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, + 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, + 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, + 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, + 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, + 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; + +// 16 x 16 +static const uchar openhand_bits[] = { + 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, + 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, + 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; +static const uchar openhandm_bits[] = { + 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, + 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, + 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; +static const uchar closedhand_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, + 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, + 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; +static const uchar closedhandm_bits[] = { + 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, + 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, + 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; + +void QPlatformCursorImage::createSystemCursor(int id) +{ + if (!systemCursorTableInit) { + for (int i = 0; i <= Qt::LastCursor; i++) + systemCursorTable[i] = 0; + systemCursorTableInit = true; + } + switch (id) { + // 16x16 cursors + case Qt::ArrowCursor: + systemCursorTable[Qt::ArrowCursor] = + new QPlatformCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); + break; + + case Qt::UpArrowCursor: + systemCursorTable[Qt::UpArrowCursor] = + new QPlatformCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); + break; + + case Qt::CrossCursor: + systemCursorTable[Qt::CrossCursor] = + new QPlatformCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); + break; + + case Qt::IBeamCursor: + systemCursorTable[Qt::IBeamCursor] = + new QPlatformCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); + break; + + case Qt::SizeVerCursor: + systemCursorTable[Qt::SizeVerCursor] = + new QPlatformCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); + break; + + case Qt::SizeHorCursor: + systemCursorTable[Qt::SizeHorCursor] = + new QPlatformCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); + break; + + case Qt::SizeBDiagCursor: + systemCursorTable[Qt::SizeBDiagCursor] = + new QPlatformCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); + break; + + case Qt::SizeFDiagCursor: + systemCursorTable[Qt::SizeFDiagCursor] = + new QPlatformCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); + break; + + case Qt::BlankCursor: + systemCursorTable[Qt::BlankCursor] = + new QPlatformCursorImage(0, 0, 0, 0, 0, 0); + break; + + // 20x20 cursors + case Qt::ForbiddenCursor: + systemCursorTable[Qt::ForbiddenCursor] = + new QPlatformCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); + break; + + // 32x32 cursors + case Qt::WaitCursor: + systemCursorTable[Qt::WaitCursor] = + new QPlatformCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); + break; + + case Qt::SplitVCursor: + systemCursorTable[Qt::SplitVCursor] = + new QPlatformCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SplitHCursor: + systemCursorTable[Qt::SplitHCursor] = + new QPlatformCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); + break; + + case Qt::SizeAllCursor: + systemCursorTable[Qt::SizeAllCursor] = + new QPlatformCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); + break; + + case Qt::PointingHandCursor: + systemCursorTable[Qt::PointingHandCursor] = + new QPlatformCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); + break; + + case Qt::WhatsThisCursor: + systemCursorTable[Qt::WhatsThisCursor] = + new QPlatformCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); + break; + case Qt::BusyCursor: + systemCursorTable[Qt::BusyCursor] = + new QPlatformCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); + break; + + case Qt::OpenHandCursor: + systemCursorTable[Qt::OpenHandCursor] = + new QPlatformCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); + break; + case Qt::ClosedHandCursor: + systemCursorTable[Qt::ClosedHandCursor] = + new QPlatformCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); + break; + default: + qWarning("Unknown system cursor %d", id); + } +} + +/*! + \fn void QGraphicsSystemCursorImage::set(Qt::CursorShape id) + + \brief Calling this method sets the cursor image to the specified shape + + \a id is one of the defined Qt::CursorShape values. + + If id is invalid, Qt::BitmapCursor, or unknown by the implementation, + Qt::ArrowCursor is used instead. +*/ + +void QPlatformCursorImage::set(Qt::CursorShape id) +{ + QPlatformCursorImage *cursor = 0; + if (id >= 0 && id <= Qt::LastCursor) { + if (!systemCursorTable[id]) + createSystemCursor(id); + cursor = systemCursorTable[id]; + } + + if (cursor == 0) { + if (!systemCursorTable[Qt::ArrowCursor]) + createSystemCursor(Qt::ArrowCursor); + cursor = systemCursorTable[Qt::ArrowCursor]; + } + cursorImage = cursor->cursorImage; + hot = cursor->hot; +} + +/*! + \fn void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) + + \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) + + \a image A pointer to a QImage + + \a hx The x coordinate of the cursor's hotspot + + \a hy the y coordinate of the cursor's hotspot +*/ + +void QPlatformCursorImage::set(const QImage * image, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + cursorImage = *image; +} + +/*! + \fn void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hx The X hotspot of the cursor graphic + + \a hy The Y hotspot of the cursor graphic +*/ +void QPlatformCursorImage::set(const uchar *data, const uchar *mask, + int width, int height, int hx, int hy) +{ + hot.setX(hx); + hot.setY(hy); + + cursorImage = QImage(width,height, QImage::Format_Indexed8); + + if (!width || !height || !data || !mask || cursorImage.isNull()) + return; + + cursorImage.setNumColors(3); + cursorImage.setColor(0, 0xff000000); + cursorImage.setColor(1, 0xffffffff); + cursorImage.setColor(2, 0x00000000); + + int bytesPerLine = (width + 7) / 8; + int p = 0; + int d, m; + + int x = -1, w = 0; + + uchar *cursor_data = cursorImage.bits(); + int bpl = cursorImage.bytesPerLine(); + for (int i = 0; i < height; i++) + { + for (int j = 0; j < bytesPerLine; j++, data++, mask++) + { + for (int b = 0; b < 8 && j*8+b < width; b++) + { + d = *data & (1 << b); + m = *mask & (1 << b); + if (d && m) p = 0; + else if (!d && m) p = 1; + else p = 2; + cursor_data[j*8+b] = p; + + // calc region + if (x < 0 && m) + x = j*8+b; + else if (x >= 0 && !m) { + x = -1; + w = 0; + } + if (m) + w++; + } + } + if (x >= 0) { + x = -1; + w = 0; + } + cursor_data += bpl; + } + +} + +/*! + \fn QGraphicsSystemCursorImage::QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + + \brief set the cursor image to the graphic represented by the combination of data, mask, + width, and height + + \a data The pixel data of the graphic + + \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn + + \a width The width of the graphic in pixels + + \a height The height of the graphic in pixels + + \a hotX The X hotspot of the cursor graphic + + \a hotY The Y hotspot of the cursor graphic + + \sa set +*/ + +/*! + \fn QImage *QGraphicsSystemCursorImage::image() + + \brief Return the cursor graphic as a pointer to a QImage +*/ + +/*! + \fn QPoint QGraphicsSystemCursorImage::hotspot() + + \brief Return the cursor's hotspot +*/ + +QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformcursor_qpa.h b/src/gui/kernel/qplatformcursor_qpa.h new file mode 100644 index 0000000..abdbfee --- /dev/null +++ b/src/gui/kernel/qplatformcursor_qpa.h @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#ifndef QGRAPHICSSYSTEMCURSOR_H +#define QGRAPHICSSYSTEMCURSOR_H + +#include +#include +#include +#include +#include +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +QT_MODULE(Gui) + +// Cursor graphics management +class Q_GUI_EXPORT QPlatformCursorImage { +public: + QPlatformCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) + { set(data, mask, width, height, hotX, hotY); } + QImage * image() { return &cursorImage; } + QPoint hotspot() { return hot; } + void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); + void set(const QImage * image, int hx, int hy); + void set(Qt::CursorShape); +private: + static void createSystemCursor(int id); + QImage cursorImage; + QPoint hot; +}; + +class QPlatformCursor; + +class QPlatformCursorPrivate { +public: + static QList > getInstances() { return instances; } + static QList > instances; +}; + +class Q_GUI_EXPORT QPlatformCursor : public QObject { +public: + QPlatformCursor(QPlatformScreen *); + + // input methods + virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } + virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; + +protected: + QPlatformScreen* screen; // Where to request an update + +private: + Q_DECLARE_PRIVATE(QPlatformCursor); + friend void qt_qpa_set_cursor(QWidget * w, bool force); + friend class QApplicationPrivate; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QGRAPHICSSYSTEMCURSOR_H diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri index 1f76b6f..088ad42 100644 --- a/src/gui/painting/painting.pri +++ b/src/gui/painting/painting.pri @@ -188,10 +188,7 @@ embedded { qpa { SOURCES += \ painting/qcolormap_qpa.cpp \ - painting/qpaintdevice_qpa.cpp \ - painting/qplatformcursor_qpa.cpp - HEADERS += \ - painting/qplatformcursor_qpa.h + painting/qpaintdevice_qpa.cpp } symbian { diff --git a/src/gui/painting/qplatformcursor_qpa.cpp b/src/gui/painting/qplatformcursor_qpa.cpp deleted file mode 100644 index 6665396..0000000 --- a/src/gui/painting/qplatformcursor_qpa.cpp +++ /dev/null @@ -1,664 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "qplatformcursor_qpa.h" - -#include -#include -#include -#include - -#include - -QT_BEGIN_NAMESPACE - -QList > QPlatformCursorPrivate::instances; - -/*! - \class QGraphicsSystemCursor - - \brief The QGraphicsSystemCursor class provides information about - pointer device events (movement, buttons), and requests to change - the currently displayed cursor. - - Note that QGraphicsSystemCursor does not include any graphics for - display. An application that sets a QCursor may provide its own - graphics. - - \sa QGraphicsSystemCursorImage -*/ - -/*! - \fn virtual void QGraphicsSystemCursor::pointerEvent(const QMouseEvent & event) - - This method is called by Qt whenever a QMouseEvent is generated by the - underlying pointer input. \a event is a reference to the QMouseEvent in - question. A default do-nothing implementation is provided. - - \sa QApplicationPrivate::handleMouseEvent() -*/ - -/*! - \fn virtual void QGraphicsSystemCursor::changeCursor(QCursor * widgetCursor, QWidget * widget) - - \brief This method is called by Qt whenever the cursor graphic should be changed. - - Implementation of this method is mandatory for a subclass of QGraphicsSystemCursor. - - \a widgetCursor is a pointer to the QCursor that should be displayed. - - \a widget is a pointer to the widget currently displayed at QCursor::pos(). Note - that this may be 0 if the current position is not occupied by a displayed widget. - - \sa QApplicationPrivate::handleMouseEvent(), QCursor::pos() -*/ - -/*! - \fn QGraphicsSystemCursor::QGraphicsSystemCursor() - - \brief Constructs a QGraphicsSystemCursor -*/ -QPlatformCursor::QPlatformCursor(QPlatformScreen *scr ) - : screen(scr) -{ - QPlatformCursorPrivate::instances.append(this); -} - -// End of display and pointer event handling code -// Beginning of built-in cursor graphics -// from src/gui/embedded/QGraphicsSystemCursorImage_qws.cpp - -/*! - \class QGraphicsSystemCursorImage - - \brief The QGraphicsSystemCursorImage class provides a set of graphics - intended to be used as cursors. - - \sa QGraphicsSystemCursor -*/ - -static QPlatformCursorImage *systemCursorTable[Qt::LastCursor+1]; -static bool systemCursorTableInit = false; - -// 16 x 16 -static const uchar cur_arrow_bits[] = { - 0x07, 0x00, 0x39, 0x00, 0xc1, 0x01, 0x02, 0x0e, 0x02, 0x10, 0x02, 0x08, - 0x04, 0x04, 0x04, 0x02, 0x04, 0x04, 0x88, 0x08, 0x48, 0x11, 0x28, 0x22, - 0x10, 0x44, 0x00, 0x28, 0x00, 0x10, 0x00, 0x00 }; -static const uchar mcur_arrow_bits[] = { - 0x07, 0x00, 0x3f, 0x00, 0xff, 0x01, 0xfe, 0x0f, 0xfe, 0x1f, 0xfe, 0x0f, - 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x07, 0xf8, 0x0f, 0x78, 0x1f, 0x38, 0x3e, - 0x10, 0x7c, 0x00, 0x38, 0x00, 0x10, 0x00, 0x00 }; - -static const unsigned char cur_up_arrow_bits[] = { - 0x80, 0x00, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x10, 0x04, - 0x10, 0x04, 0x08, 0x08, 0x78, 0x0f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01}; -static const unsigned char mcur_up_arrow_bits[] = { - 0x80, 0x00, 0xc0, 0x01, 0xc0, 0x01, 0xe0, 0x03, 0xe0, 0x03, 0xf0, 0x07, - 0xf0, 0x07, 0xf8, 0x0f, 0xf8, 0x0f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01}; - -static const unsigned char cur_cross_bits[] = { - 0xc0, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x7f, 0x7f, 0x01, 0x40, 0x7f, 0x7f, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, - 0x40, 0x01, 0x40, 0x01, 0xc0, 0x01, 0x00, 0x00}; -static const unsigned char mcur_cross_bits[] = { - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0x00, 0x00}; - -static const uchar cur_ibeam_bits[] = { - 0x00, 0x00, 0xe0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, - 0x80, 0x00, 0xe0, 0x03, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_ibeam_bits[] = { - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, - 0xf0, 0x07, 0xf0, 0x07, 0xf0, 0x07, 0x00, 0x00 }; - -static const uchar cur_ver_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xc0, 0x03, 0xe0, 0x07, 0xf0, 0x0f, - 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xf0, 0x0f, - 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00 }; -static const uchar mcur_ver_bits[] = { - 0x00, 0x00, 0x80, 0x03, 0xc0, 0x07, 0xe0, 0x0f, 0xf0, 0x1f, 0xf8, 0x3f, - 0xfc, 0x7f, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xfc, 0x7f, 0xf8, 0x3f, - 0xf0, 0x1f, 0xe0, 0x0f, 0xc0, 0x07, 0x80, 0x03 }; - -static const uchar cur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x30, 0x18, - 0x38, 0x38, 0xfc, 0x7f, 0xfc, 0x7f, 0x38, 0x38, 0x30, 0x18, 0x20, 0x08, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_hor_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x60, 0x0c, 0x70, 0x1c, 0x78, 0x3c, - 0xfc, 0x7f, 0xfe, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xfc, 0x7f, 0x78, 0x3c, - 0x70, 0x1c, 0x60, 0x0c, 0x40, 0x04, 0x00, 0x00 }; -static const uchar cur_bdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x3e, 0x00, 0x3c, 0x00, 0x3e, - 0x00, 0x37, 0x88, 0x23, 0xd8, 0x01, 0xf8, 0x00, 0x78, 0x00, 0xf8, 0x00, - 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_bdiag_bits[] = { - 0x00, 0x00, 0xc0, 0x7f, 0x80, 0x7f, 0x00, 0x7f, 0x00, 0x7e, 0x04, 0x7f, - 0x8c, 0x7f, 0xdc, 0x77, 0xfc, 0x63, 0xfc, 0x41, 0xfc, 0x00, 0xfc, 0x01, - 0xfc, 0x03, 0xfc, 0x07, 0x00, 0x00, 0x00, 0x00 }; -static const uchar cur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x01, 0xf8, 0x00, 0x78, 0x00, - 0xf8, 0x00, 0xd8, 0x01, 0x88, 0x23, 0x00, 0x37, 0x00, 0x3e, 0x00, 0x3c, - 0x00, 0x3e, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00 }; -static const uchar mcur_fdiag_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, - 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, - 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; -static const uchar cur_blank_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -// 20 x 20 -static const uchar forbidden_bits[] = { - 0x00,0x00,0x00,0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xf0,0x00,0x38,0xc0,0x01, - 0x7c,0x80,0x03,0xec,0x00,0x03,0xce,0x01,0x07,0x86,0x03,0x06,0x06,0x07,0x06, - 0x06,0x0e,0x06,0x06,0x1c,0x06,0x0e,0x38,0x07,0x0c,0x70,0x03,0x1c,0xe0,0x03, - 0x38,0xc0,0x01,0xf0,0xe0,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00,0x00,0x00,0x00 }; - -static const uchar forbiddenm_bits[] = { - 0x80,0x1f,0x00,0xe0,0x7f,0x00,0xf0,0xff,0x00,0xf8,0xff,0x01,0xfc,0xf0,0x03, - 0xfe,0xc0,0x07,0xfe,0x81,0x07,0xff,0x83,0x0f,0xcf,0x07,0x0f,0x8f,0x0f,0x0f, - 0x0f,0x1f,0x0f,0x0f,0x3e,0x0f,0x1f,0xfc,0x0f,0x1e,0xf8,0x07,0x3e,0xf0,0x07, - 0xfc,0xe0,0x03,0xf8,0xff,0x01,0xf0,0xff,0x00,0xe0,0x7f,0x00,0x80,0x1f,0x00}; - -// 32 x 32 -static const uchar wait_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x08, 0x20, 0x00, - 0x00, 0x50, 0x15, 0x00, 0x00, 0xa0, 0x0a, 0x00, 0x00, 0x40, 0x05, 0x00, - 0x00, 0x80, 0x02, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x20, 0x08, 0x00, - 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x21, 0x00, 0x00, 0x88, 0x22, 0x00, - 0x00, 0x48, 0x25, 0x00, 0x00, 0xa8, 0x2a, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0x04, 0x40, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar wait_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xe0, 0x0f, 0x00, 0x00, 0xc0, 0x07, 0x00, - 0x00, 0x80, 0x03, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0xe0, 0x0f, 0x00, - 0x00, 0xf0, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, - 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, - 0x00, 0xfc, 0x7f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar hsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x41, 0x82, 0x00, 0x80, 0x41, 0x82, 0x01, 0xc0, 0x7f, 0xfe, 0x03, - 0x80, 0x41, 0x82, 0x01, 0x00, 0x41, 0x82, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, - 0x00, 0x40, 0x02, 0x00, 0x00, 0x40, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar hsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe3, 0xc7, 0x00, - 0x80, 0xe3, 0xc7, 0x01, 0xc0, 0xff, 0xff, 0x03, 0xe0, 0xff, 0xff, 0x07, - 0xc0, 0xff, 0xff, 0x03, 0x80, 0xe3, 0xc7, 0x01, 0x00, 0xe3, 0xc7, 0x00, - 0x00, 0xe2, 0x47, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, - 0x00, 0xe0, 0x07, 0x00, 0x00, 0xe0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplit_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar vsplitm_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, 0x80, 0xff, 0xff, 0x00, - 0x80, 0xff, 0xff, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phand_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, - 0x7e, 0x04, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x70, 0x08, 0x00, 0x00, - 0x08, 0x08, 0x00, 0x00, 0x70, 0x14, 0x00, 0x00, 0x08, 0x22, 0x00, 0x00, - 0x30, 0x41, 0x00, 0x00, 0xc0, 0x20, 0x00, 0x00, 0x40, 0x12, 0x00, 0x00, - 0x80, 0x08, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar phandm_bits[] = { - 0xfe, 0x01, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0xff, 0x07, 0x00, 0x00, - 0xff, 0x0f, 0x00, 0x00, 0xfe, 0x1f, 0x00, 0x00, 0xf8, 0x1f, 0x00, 0x00, - 0xfc, 0x1f, 0x00, 0x00, 0xf8, 0x3f, 0x00, 0x00, 0xfc, 0x7f, 0x00, 0x00, - 0xf8, 0xff, 0x00, 0x00, 0xf0, 0x7f, 0x00, 0x00, 0xe0, 0x3f, 0x00, 0x00, - 0xc0, 0x1f, 0x00, 0x00, 0x80, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar size_all_data_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x81, 0x40, 0x00, 0x80, 0x81, 0xc0, 0x00, - 0xc0, 0xff, 0xff, 0x01, 0x80, 0x81, 0xc0, 0x00, 0x00, 0x81, 0x40, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; -static const uchar size_all_mask_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0xe0, 0x03, 0x00, 0x00, 0xf0, 0x07, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0xc2, 0x21, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x80, 0xc3, 0xe1, 0x00, 0xc0, 0xff, 0xff, 0x01, - 0xe0, 0xff, 0xff, 0x03, 0xc0, 0xff, 0xff, 0x01, 0x80, 0xc3, 0xe1, 0x00, - 0x00, 0xc3, 0x61, 0x00, 0x00, 0xc2, 0x21, 0x00, 0x00, 0xc0, 0x01, 0x00, - 0x00, 0xf8, 0x0f, 0x00, 0x00, 0xf0, 0x07, 0x00, 0x00, 0xe0, 0x03, 0x00, - 0x00, 0xc0, 0x01, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - -static const uchar whatsthis_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0xf0, 0x07, 0x00, - 0x09, 0x18, 0x0e, 0x00, 0x11, 0x1c, 0x0e, 0x00, 0x21, 0x1c, 0x0e, 0x00, - 0x41, 0x1c, 0x0e, 0x00, 0x81, 0x1c, 0x0e, 0x00, 0x01, 0x01, 0x07, 0x00, - 0x01, 0x82, 0x03, 0x00, 0xc1, 0xc7, 0x01, 0x00, 0x49, 0xc0, 0x01, 0x00, - 0x95, 0xc0, 0x01, 0x00, 0x93, 0xc0, 0x01, 0x00, 0x21, 0x01, 0x00, 0x00, - 0x20, 0xc1, 0x01, 0x00, 0x40, 0xc2, 0x01, 0x00, 0x40, 0x02, 0x00, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; -static const uchar whatsthism_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0xf0, 0x07, 0x00, 0x07, 0xf8, 0x0f, 0x00, - 0x0f, 0xfc, 0x1f, 0x00, 0x1f, 0x3e, 0x1f, 0x00, 0x3f, 0x3e, 0x1f, 0x00, - 0x7f, 0x3e, 0x1f, 0x00, 0xff, 0x3e, 0x1f, 0x00, 0xff, 0x9d, 0x0f, 0x00, - 0xff, 0xc3, 0x07, 0x00, 0xff, 0xe7, 0x03, 0x00, 0x7f, 0xe0, 0x03, 0x00, - 0xf7, 0xe0, 0x03, 0x00, 0xf3, 0xe0, 0x03, 0x00, 0xe1, 0xe1, 0x03, 0x00, - 0xe0, 0xe1, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, 0xc0, 0xe3, 0x03, 0x00, - 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; - -static const uchar busy_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, - 0x09, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, - 0x41, 0xe0, 0xff, 0x00, 0x81, 0x20, 0x80, 0x00, 0x01, 0xe1, 0xff, 0x00, - 0x01, 0x42, 0x40, 0x00, 0xc1, 0x47, 0x40, 0x00, 0x49, 0x40, 0x55, 0x00, - 0x95, 0x80, 0x2a, 0x00, 0x93, 0x00, 0x15, 0x00, 0x21, 0x01, 0x0a, 0x00, - 0x20, 0x01, 0x11, 0x00, 0x40, 0x82, 0x20, 0x00, 0x40, 0x42, 0x44, 0x00, - 0x80, 0x41, 0x4a, 0x00, 0x00, 0x40, 0x55, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0x20, 0x80, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; -static const uchar busym_bits[] = { - 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, - 0x0f, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, - 0x7f, 0xe0, 0xff, 0x00, 0xff, 0xe0, 0xff, 0x00, 0xff, 0xe1, 0xff, 0x00, - 0xff, 0xc3, 0x7f, 0x00, 0xff, 0xc7, 0x7f, 0x00, 0x7f, 0xc0, 0x7f, 0x00, - 0xf7, 0x80, 0x3f, 0x00, 0xf3, 0x00, 0x1f, 0x00, 0xe1, 0x01, 0x0e, 0x00, - 0xe0, 0x01, 0x1f, 0x00, 0xc0, 0x83, 0x3f, 0x00, 0xc0, 0xc3, 0x7f, 0x00, - 0x80, 0xc1, 0x7f, 0x00, 0x00, 0xc0, 0x7f, 0x00, 0x00, 0xe0, 0xff, 0x00, - 0x00, 0xe0, 0xff, 0x00, 0x00, 0xe0, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; - -// 16 x 16 -static const uchar openhand_bits[] = { - 0x80,0x01,0x58,0x0e,0x64,0x12,0x64,0x52,0x48,0xb2,0x48,0x92, - 0x16,0x90,0x19,0x80,0x11,0x40,0x02,0x40,0x04,0x40,0x04,0x20, - 0x08,0x20,0x10,0x10,0x20,0x10,0x00,0x00}; -static const uchar openhandm_bits[] = { - 0x80,0x01,0xd8,0x0f,0xfc,0x1f,0xfc,0x5f,0xf8,0xff,0xf8,0xff, - 0xfe,0xff,0xff,0xff,0xff,0x7f,0xfe,0x7f,0xfc,0x7f,0xfc,0x3f, - 0xf8,0x3f,0xf0,0x1f,0xe0,0x1f,0x00,0x00}; -static const uchar closedhand_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0x48,0x32,0x08,0x50, - 0x10,0x40,0x18,0x40,0x04,0x40,0x04,0x20,0x08,0x20,0x10,0x10, - 0x20,0x10,0x20,0x10,0x00,0x00,0x00,0x00}; -static const uchar closedhandm_bits[] = { - 0x00,0x00,0x00,0x00,0x00,0x00,0xb0,0x0d,0xf8,0x3f,0xf8,0x7f, - 0xf0,0x7f,0xf8,0x7f,0xfc,0x7f,0xfc,0x3f,0xf8,0x3f,0xf0,0x1f, - 0xe0,0x1f,0xe0,0x1f,0x00,0x00,0x00,0x00}; - -void QPlatformCursorImage::createSystemCursor(int id) -{ - if (!systemCursorTableInit) { - for (int i = 0; i <= Qt::LastCursor; i++) - systemCursorTable[i] = 0; - systemCursorTableInit = true; - } - switch (id) { - // 16x16 cursors - case Qt::ArrowCursor: - systemCursorTable[Qt::ArrowCursor] = - new QPlatformCursorImage(cur_arrow_bits, mcur_arrow_bits, 16, 16, 0, 0); - break; - - case Qt::UpArrowCursor: - systemCursorTable[Qt::UpArrowCursor] = - new QPlatformCursorImage(cur_up_arrow_bits, mcur_up_arrow_bits, 16, 16, 7, 0); - break; - - case Qt::CrossCursor: - systemCursorTable[Qt::CrossCursor] = - new QPlatformCursorImage(cur_cross_bits, mcur_cross_bits, 16, 16, 7, 7); - break; - - case Qt::IBeamCursor: - systemCursorTable[Qt::IBeamCursor] = - new QPlatformCursorImage(cur_ibeam_bits, mcur_ibeam_bits, 16, 16, 7, 7); - break; - - case Qt::SizeVerCursor: - systemCursorTable[Qt::SizeVerCursor] = - new QPlatformCursorImage(cur_ver_bits, mcur_ver_bits, 16, 16, 7, 7); - break; - - case Qt::SizeHorCursor: - systemCursorTable[Qt::SizeHorCursor] = - new QPlatformCursorImage(cur_hor_bits, mcur_hor_bits, 16, 16, 7, 7); - break; - - case Qt::SizeBDiagCursor: - systemCursorTable[Qt::SizeBDiagCursor] = - new QPlatformCursorImage(cur_bdiag_bits, mcur_bdiag_bits, 16, 16, 7, 7); - break; - - case Qt::SizeFDiagCursor: - systemCursorTable[Qt::SizeFDiagCursor] = - new QPlatformCursorImage(cur_fdiag_bits, mcur_fdiag_bits, 16, 16, 7, 7); - break; - - case Qt::BlankCursor: - systemCursorTable[Qt::BlankCursor] = - new QPlatformCursorImage(0, 0, 0, 0, 0, 0); - break; - - // 20x20 cursors - case Qt::ForbiddenCursor: - systemCursorTable[Qt::ForbiddenCursor] = - new QPlatformCursorImage(forbidden_bits, forbiddenm_bits, 20, 20, 10, 10); - break; - - // 32x32 cursors - case Qt::WaitCursor: - systemCursorTable[Qt::WaitCursor] = - new QPlatformCursorImage(wait_data_bits, wait_mask_bits, 32, 32, 15, 15); - break; - - case Qt::SplitVCursor: - systemCursorTable[Qt::SplitVCursor] = - new QPlatformCursorImage(vsplit_bits, vsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SplitHCursor: - systemCursorTable[Qt::SplitHCursor] = - new QPlatformCursorImage(hsplit_bits, hsplitm_bits, 32, 32, 15, 15); - break; - - case Qt::SizeAllCursor: - systemCursorTable[Qt::SizeAllCursor] = - new QPlatformCursorImage(size_all_data_bits, size_all_mask_bits, 32, 32, 15, 15); - break; - - case Qt::PointingHandCursor: - systemCursorTable[Qt::PointingHandCursor] = - new QPlatformCursorImage(phand_bits, phandm_bits, 32, 32, 0, 0); - break; - - case Qt::WhatsThisCursor: - systemCursorTable[Qt::WhatsThisCursor] = - new QPlatformCursorImage(whatsthis_bits, whatsthism_bits, 32, 32, 0, 0); - break; - case Qt::BusyCursor: - systemCursorTable[Qt::BusyCursor] = - new QPlatformCursorImage(busy_bits, busym_bits, 32, 32, 0, 0); - break; - - case Qt::OpenHandCursor: - systemCursorTable[Qt::OpenHandCursor] = - new QPlatformCursorImage(openhand_bits, openhandm_bits, 16, 16, 8, 8); - break; - case Qt::ClosedHandCursor: - systemCursorTable[Qt::ClosedHandCursor] = - new QPlatformCursorImage(closedhand_bits, closedhandm_bits, 16, 16, 8, 8); - break; - default: - qWarning("Unknown system cursor %d", id); - } -} - -/*! - \fn void QGraphicsSystemCursorImage::set(Qt::CursorShape id) - - \brief Calling this method sets the cursor image to the specified shape - - \a id is one of the defined Qt::CursorShape values. - - If id is invalid, Qt::BitmapCursor, or unknown by the implementation, - Qt::ArrowCursor is used instead. -*/ - -void QPlatformCursorImage::set(Qt::CursorShape id) -{ - QPlatformCursorImage *cursor = 0; - if (id >= 0 && id <= Qt::LastCursor) { - if (!systemCursorTable[id]) - createSystemCursor(id); - cursor = systemCursorTable[id]; - } - - if (cursor == 0) { - if (!systemCursorTable[Qt::ArrowCursor]) - createSystemCursor(Qt::ArrowCursor); - cursor = systemCursorTable[Qt::ArrowCursor]; - } - cursorImage = cursor->cursorImage; - hot = cursor->hot; -} - -/*! - \fn void QGraphicsSystemCursorImage::set(const QImage * image, int hx, int hy) - - \brief Set the cursor image to the specified QImage, with the hotsport at (hx, hy) - - \a image A pointer to a QImage - - \a hx The x coordinate of the cursor's hotspot - - \a hy the y coordinate of the cursor's hotspot -*/ - -void QPlatformCursorImage::set(const QImage * image, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - cursorImage = *image; -} - -/*! - \fn void QGraphicsSystemCursorImage::set(const uchar *data, const uchar *mask, int width, int height, int hx, int hy) - - \brief set the cursor image to the graphic represented by the combination of data, mask, - width, and height - - \a data The pixel data of the graphic - - \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn - - \a width The width of the graphic in pixels - - \a height The height of the graphic in pixels - - \a hx The X hotspot of the cursor graphic - - \a hy The Y hotspot of the cursor graphic -*/ -void QPlatformCursorImage::set(const uchar *data, const uchar *mask, - int width, int height, int hx, int hy) -{ - hot.setX(hx); - hot.setY(hy); - - cursorImage = QImage(width,height, QImage::Format_Indexed8); - - if (!width || !height || !data || !mask || cursorImage.isNull()) - return; - - cursorImage.setNumColors(3); - cursorImage.setColor(0, 0xff000000); - cursorImage.setColor(1, 0xffffffff); - cursorImage.setColor(2, 0x00000000); - - int bytesPerLine = (width + 7) / 8; - int p = 0; - int d, m; - - int x = -1, w = 0; - - uchar *cursor_data = cursorImage.bits(); - int bpl = cursorImage.bytesPerLine(); - for (int i = 0; i < height; i++) - { - for (int j = 0; j < bytesPerLine; j++, data++, mask++) - { - for (int b = 0; b < 8 && j*8+b < width; b++) - { - d = *data & (1 << b); - m = *mask & (1 << b); - if (d && m) p = 0; - else if (!d && m) p = 1; - else p = 2; - cursor_data[j*8+b] = p; - - // calc region - if (x < 0 && m) - x = j*8+b; - else if (x >= 0 && !m) { - x = -1; - w = 0; - } - if (m) - w++; - } - } - if (x >= 0) { - x = -1; - w = 0; - } - cursor_data += bpl; - } - -} - -/*! - \fn QGraphicsSystemCursorImage::QGraphicsSystemCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - - \brief set the cursor image to the graphic represented by the combination of data, mask, - width, and height - - \a data The pixel data of the graphic - - \a mask Mask data for the graphic. pixels in data with a corresponding mask bit of 0 are not drawn - - \a width The width of the graphic in pixels - - \a height The height of the graphic in pixels - - \a hotX The X hotspot of the cursor graphic - - \a hotY The Y hotspot of the cursor graphic - - \sa set -*/ - -/*! - \fn QImage *QGraphicsSystemCursorImage::image() - - \brief Return the cursor graphic as a pointer to a QImage -*/ - -/*! - \fn QPoint QGraphicsSystemCursorImage::hotspot() - - \brief Return the cursor's hotspot -*/ - -QT_END_NAMESPACE diff --git a/src/gui/painting/qplatformcursor_qpa.h b/src/gui/painting/qplatformcursor_qpa.h deleted file mode 100644 index abdbfee..0000000 --- a/src/gui/painting/qplatformcursor_qpa.h +++ /dev/null @@ -1,103 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the QtOpenVG module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** No Commercial Usage -** This file contains pre-release code and may not be distributed. -** You may use this file in accordance with the terms and conditions -** contained in the Technology Preview License Agreement accompanying -** this package. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 2.1 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 2.1 requirements -** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#ifndef QGRAPHICSSYSTEMCURSOR_H -#define QGRAPHICSSYSTEMCURSOR_H - -#include -#include -#include -#include -#include -#include -#include - -QT_BEGIN_HEADER - -QT_BEGIN_NAMESPACE - -QT_MODULE(Gui) - -// Cursor graphics management -class Q_GUI_EXPORT QPlatformCursorImage { -public: - QPlatformCursorImage(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY) - { set(data, mask, width, height, hotX, hotY); } - QImage * image() { return &cursorImage; } - QPoint hotspot() { return hot; } - void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void set(const QImage * image, int hx, int hy); - void set(Qt::CursorShape); -private: - static void createSystemCursor(int id); - QImage cursorImage; - QPoint hot; -}; - -class QPlatformCursor; - -class QPlatformCursorPrivate { -public: - static QList > getInstances() { return instances; } - static QList > instances; -}; - -class Q_GUI_EXPORT QPlatformCursor : public QObject { -public: - QPlatformCursor(QPlatformScreen *); - - // input methods - virtual void pointerEvent(const QMouseEvent & event) { Q_UNUSED(event); } - virtual void changeCursor(QCursor * widgetCursor, QWidget * widget) = 0; - -protected: - QPlatformScreen* screen; // Where to request an update - -private: - Q_DECLARE_PRIVATE(QPlatformCursor); - friend void qt_qpa_set_cursor(QWidget * w, bool force); - friend class QApplicationPrivate; -}; - -QT_END_NAMESPACE - -QT_END_HEADER - -#endif // QGRAPHICSSYSTEMCURSOR_H -- cgit v0.12 From c0c2e556e98ffe550cbedb4e3a0def5dd272ce25 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 25 Aug 2010 11:31:15 +0200 Subject: qdrawhelper: fix assert in fetchTransformedBilinear There can be rounding errors. Reviewed-by: paul --- src/gui/painting/qdrawhelper.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp index d6beb72..c5704fb 100644 --- a/src/gui/painting/qdrawhelper.cpp +++ b/src/gui/painting/qdrawhelper.cpp @@ -747,7 +747,6 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * if (fdx <= fixed_scale && fdx > 0) { // scale up on X int disty = (fy & 0x0000ffff) >> 8; int idisty = 256 - disty; - int count = length * data->m11 + 2; int x = fx >> 16; // The idea is first to do the interpolation between the row s1 and the row s2 @@ -756,7 +755,9 @@ const uint * QT_FASTCALL fetchTransformedBilinear(uint *buffer, const Operator * // intermediate_buffer[0] is a buffer of red-blue component of the pixel, in the form 0x00RR00BB // intermediate_buffer[1] is the alpha-green component of the pixel, in the form 0x00AA00GG quint32 intermediate_buffer[2][buffer_size + 2]; - Q_ASSERT(length * data->m11 <= buffer_size); + // count is the size used in the intermediate_buffer. + int count = qCeil(length * data->m11) + 2; //+1 for the last pixel to interpolate with, and +1 for rounding errors. + Q_ASSERT(count <= buffer_size + 2); //length is supposed to be <= buffer_size and data->m11 < 1 in this case int f = 0; int lim = count; if (blendType == BlendTransformedBilinearTiled) { -- cgit v0.12 From db76fd9b3cc0acb49c7c017c85ac3326953167f5 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 26 Aug 2010 12:01:57 +0200 Subject: Oops, fix cut and paste bug in kernel.pri --- src/gui/kernel/kernel.pri | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri index 703a1cb..4d9110a 100644 --- a/src/gui/kernel/kernel.pri +++ b/src/gui/kernel/kernel.pri @@ -222,7 +222,7 @@ qpa { kernel/qplatformglcontext_qpa.h \ kernel/qdesktopwidget_qpa_p.h \ kernel/qplatformeventloopintegration_qpa.h \ - painting/qplatformcursor_qpa.h + kernel/qplatformcursor_qpa.h SOURCES += \ kernel/qapplication_qpa.cpp \ @@ -244,7 +244,7 @@ qpa { kernel/qplatformwindowformat_qpa.cpp \ kernel/qplatformeventloopintegration_qpa.cpp \ kernel/qplatformglcontext_qpa.cpp \ - painting/qplatformcursor_qpa.cpp + kernel/qplatformcursor_qpa.cpp contains(QT_CONFIG, glib) { SOURCES += \ -- cgit v0.12 From de66ffa4d7d057f0c782edc45374ad58322a0c4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 26 Aug 2010 09:55:31 +0200 Subject: Remove listing all platform plugins on load --- src/gui/kernel/qplatformintegrationfactory_qpa.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/gui/kernel/qplatformintegrationfactory_qpa.cpp b/src/gui/kernel/qplatformintegrationfactory_qpa.cpp index 4f2bfa5..9122e1a 100644 --- a/src/gui/kernel/qplatformintegrationfactory_qpa.cpp +++ b/src/gui/kernel/qplatformintegrationfactory_qpa.cpp @@ -61,7 +61,6 @@ QPlatformIntegration *QPlatformIntegrationFactory::create(const QString& key) QString platform = paramList.takeFirst().toLower(); #if !defined(QT_NO_LIBRARY) && !defined(QT_NO_SETTINGS) - qDebug() << loader()->keys(); if (QPlatformIntegrationFactoryInterface *factory = qobject_cast(loader()->instance(platform))) ret = factory->create(platform, paramList); #endif -- cgit v0.12 From 5e7fdcc7a4a2bb070ad7ece920ac5db81e3e6f77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 20 Aug 2010 12:33:33 +0200 Subject: Initial pluggable fontdatabase QPlatformFontDatabase added. QPlatformIntegration now has a new virtual function: QPlatformDatabase::fontDatabase() const. Most unix platform plugins wants to follow the pattern implemented in directfb, linuxfb, vnc etc. In the pro file do: include(../fontdatabases/genericunix/genericunix.pri) In the QPlatformIntegration class do: and instansiate a QGenericFontDatabase in the constructor and return it in the getter function. --- configure | 24 + lib/fonts/dejavu_sans_11_50.qpf2 | Bin 0 -> 405944 bytes src/gui/kernel/qplatformintegration_qpa.cpp | 11 + src/gui/kernel/qplatformintegration_qpa.h | 4 + src/gui/painting/qpaintengine.h | 2 +- src/gui/painting/qpaintengine_raster.cpp | 31 +- src/gui/painting/qpdf.cpp | 2 +- src/gui/text/qfont.h | 4 +- src/gui/text/qfont_qpa.cpp | 114 ++++ src/gui/text/qfontdatabase.cpp | 67 ++- src/gui/text/qfontdatabase.h | 1 + src/gui/text/qfontdatabase_qpa.cpp | 392 +++++++++++++ src/gui/text/qfontengine.cpp | 2 +- src/gui/text/qfontengine_ft.cpp | 7 +- src/gui/text/qfontengine_ft_p.h | 16 +- src/gui/text/qfontengine_p.h | 2 +- src/gui/text/qfontengine_qpa.cpp | 650 +++++++++++++++++++++ src/gui/text/qfontengine_qpa_p.h | 262 +++++++++ src/gui/text/qplatformfontdatabase_qpa.cpp | 195 +++++++ src/gui/text/qplatformfontdatabase_qpa.h | 65 +++ src/gui/text/text.pri | 22 +- src/plugins/platforms/directfb/directfb.pro | 2 + .../platforms/directfb/qdirectfbintegration.cpp | 7 +- .../platforms/directfb/qdirectfbintegration.h | 4 +- src/plugins/platforms/eglfs/eglfs.pro | 2 + src/plugins/platforms/eglfs/qeglfsintegration.cpp | 8 + src/plugins/platforms/eglfs/qeglfsintegration.h | 3 + .../fontdatabases/basicunix/basicunix.pri | 82 +++ .../basicunix/qbasicunixfontdatabase.cpp | 281 +++++++++ .../basicunix/qbasicunixfontdatabase.h | 26 + .../fontdatabases/fontconfig/fontconfig.pri | 12 + .../fontconfig/qfontconfigdatabase.cpp | 528 +++++++++++++++++ .../fontdatabases/fontconfig/qfontconfigdatabase.h | 15 + .../fontdatabases/genericunix/genericunix.pri | 10 + .../genericunix/qgenericunixfontdatabase.h | 12 + src/plugins/platforms/linuxfb/linuxfb.pro | 1 + .../platforms/linuxfb/qlinuxfbintegration.cpp | 7 + .../platforms/linuxfb/qlinuxfbintegration.h | 3 + src/plugins/platforms/platforms.pro | 12 +- src/plugins/platforms/qvfb/qvfb.pro | 2 + src/plugins/platforms/qvfb/qvfbintegration.cpp | 8 + src/plugins/platforms/qvfb/qvfbintegration.h | 3 + .../platforms/testlite/qtestliteintegration.cpp | 8 +- .../platforms/testlite/qtestliteintegration.h | 3 + src/plugins/platforms/testlite/qtestlitewindow.cpp | 10 +- src/plugins/platforms/testlite/testlite.pro | 21 +- src/plugins/platforms/vnc/qvncintegration.cpp | 8 +- src/plugins/platforms/vnc/qvncintegration.h | 4 + src/plugins/platforms/vnc/vnc.pro | 1 + 49 files changed, 2894 insertions(+), 62 deletions(-) create mode 100644 lib/fonts/dejavu_sans_11_50.qpf2 create mode 100644 src/gui/text/qfont_qpa.cpp create mode 100644 src/gui/text/qfontdatabase_qpa.cpp create mode 100644 src/gui/text/qfontengine_qpa.cpp create mode 100644 src/gui/text/qfontengine_qpa_p.h create mode 100644 src/gui/text/qplatformfontdatabase_qpa.cpp create mode 100644 src/gui/text/qplatformfontdatabase_qpa.h create mode 100644 src/plugins/platforms/fontdatabases/basicunix/basicunix.pri create mode 100644 src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp create mode 100644 src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h create mode 100644 src/plugins/platforms/fontdatabases/fontconfig/fontconfig.pri create mode 100644 src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp create mode 100644 src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h create mode 100644 src/plugins/platforms/fontdatabases/genericunix/genericunix.pri create mode 100644 src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h diff --git a/configure b/configure index bdf4588..94a0c0f 100755 --- a/configure +++ b/configure @@ -6093,6 +6093,30 @@ if [ "$PLATFORM_QPA" = "yes" ]; then exit 1 fi fi + + # auto-detect FontConfig support + if [ "$CFG_FONTCONFIG" != "no" ]; then + if [ -n "$PKG_CONFIG" ] && $PKG_CONFIG --exists fontconfig --exists freetype2 2>/dev/null; then + QT_CFLAGS_FONTCONFIG=`$PKG_CONFIG --cflags fontconfig --cflags freetype2 2>/dev/null` + QT_LIBS_FONTCONFIG=`$PKG_CONFIG --libs fontconfig --libs freetype2 2>/dev/null` + else + QT_CFLAGS_FONTCONFIG= + QT_LIBS_FONTCONFIG="-lfreetype -lfontconfig" + fi + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/fontconfig "FontConfig" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS $QT_CFLAGS_FONTCONFIG $QT_LIBS_FONTCONFIG; then + QT_CONFIG="$QT_CONFIG fontconfig" + QMakeVar set QMAKE_CFLAGS_FONTCONFIG "$QT_CFLAGS_FONTCONFIG" + QMakeVar set QMAKE_LIBS_FONTCONFIG "$QT_LIBS_FONTCONFIG" + CFG_LIBFREETYPE=system + fi + fi + + # MIT_SHM is required for testlite + if [ "$CFG_MITSHM" != "no" ]; then + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/mitshm "mitshm" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then + QT_CONFIG="$QT_CONFIG mitshm" + fi + fi fi diff --git a/lib/fonts/dejavu_sans_11_50.qpf2 b/lib/fonts/dejavu_sans_11_50.qpf2 new file mode 100644 index 0000000..c88d099 Binary files /dev/null and b/lib/fonts/dejavu_sans_11_50.qpf2 differ diff --git a/src/gui/kernel/qplatformintegration_qpa.cpp b/src/gui/kernel/qplatformintegration_qpa.cpp index b4987f2..e2a493d 100644 --- a/src/gui/kernel/qplatformintegration_qpa.cpp +++ b/src/gui/kernel/qplatformintegration_qpa.cpp @@ -41,6 +41,8 @@ #include "qplatformintegration_qpa.h" +#include + QT_BEGIN_NAMESPACE QPixmap QPlatformIntegration::grabWindow(WId window, int x, int y, int width, int height) const @@ -63,4 +65,13 @@ bool QPlatformIntegration::hasOpenGL() const return false; } +QPlatformFontDatabase *QPlatformIntegration::fontDatabase() const +{ + static QPlatformFontDatabase *db = 0; + if (!db) { + db = new QPlatformFontDatabase; + } + return db; +} + QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformintegration_qpa.h b/src/gui/kernel/qplatformintegration_qpa.h index 9460910..b1f4e5f 100644 --- a/src/gui/kernel/qplatformintegration_qpa.h +++ b/src/gui/kernel/qplatformintegration_qpa.h @@ -58,6 +58,7 @@ class QWindowSurface; class QBlittable; class QWidget; class QPlatformEventLoopIntegration; +class QPlatformFontDatabase; class Q_GUI_EXPORT QPlatformIntegration { @@ -75,6 +76,9 @@ public: virtual bool isVirtualDesktop() { return false; } virtual QPixmap grabWindow(WId window, int x, int y, int width, int height) const; +//Fontdatabase integration. + virtual QPlatformFontDatabase *fontDatabase() const; + // Experimental in mainthread eventloop integration // This should only be used if it is only possible to do window system event processing in // the gui thread. All of the functions in QWindowSystemInterface are thread safe. diff --git a/src/gui/painting/qpaintengine.h b/src/gui/painting/qpaintengine.h index ddb6195..ee9b457 100644 --- a/src/gui/painting/qpaintengine.h +++ b/src/gui/painting/qpaintengine.h @@ -272,7 +272,7 @@ private: friend class QProxyFontEngine; #endif #ifdef Q_WS_QPA - friend class QProxyFontEngine; + friend class QFontEngineQPA; #endif friend class QPainter; friend class QPainterPrivate; diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index df32ea8..7dee7e4 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -3396,9 +3396,36 @@ void QRasterPaintEngine::drawTextItem(const QPointF &p, const QTextItem &textIte } #endif // Q_WS_QWS -#if (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) || defined(Q_WS_QPA)) && !defined(QT_NO_FREETYPE) +#ifdef Q_WS_QPA + if (s->matrix.type() < QTransform::TxScale) { -#if (defined(Q_WS_QWS) || defined(Q_WS_QPA)) && !defined(QT_NO_QWS_QPF2) + QVarLengthArray positions; + QVarLengthArray glyphs; + QTransform matrix = state()->transform(); + + qreal _x = qFloor(p.x() + aliasedCoordinateDelta); + qreal _y = qFloor(p.y() + aliasedCoordinateDelta); + matrix.translate(_x, _y); + + fontEngine->getGlyphPositions(ti.glyphs, matrix, ti.flags, glyphs, positions); + if (glyphs.size() == 0) + return; + + for(int i = 0; i < glyphs.size(); i++) { + QImage img = fontEngine->alphaMapForGlyph(glyphs[i]); + glyph_metrics_t metrics = fontEngine->boundingBox(glyphs[i]); + alphaPenBlt(img.bits(), img.bytesPerLine(), img.depth(), + qRound(positions[i].x + metrics.x), + qRound(positions[i].y + metrics.y), + img.width(), img.height()); + } + return; + } +#endif //Q_WS_QPA + +#if (defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) + +#if defined(Q_WS_QWS) && !defined(QT_NO_QWS_QPF2) if (fontEngine->type() == QFontEngine::QPF2) { QFontEngine *renderingEngine = static_cast(fontEngine)->renderingEngine(); if (renderingEngine) diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp index 6e02435..fdb84e0 100644 --- a/src/gui/painting/qpdf.cpp +++ b/src/gui/painting/qpdf.cpp @@ -916,7 +916,7 @@ const char *QPdf::paperSizeToString(QPrinter::PaperSize paperSize) } -QByteArray QPdf::stripSpecialCharacters(const QByteArray &string) +Q_GUI_EXPORT QByteArray QPdf::stripSpecialCharacters(const QByteArray &string) { QByteArray s = string; s.replace(' ', ""); diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h index fd1a2dd..2cc41e1 100644 --- a/src/gui/text/qfont.h +++ b/src/gui/text/qfont.h @@ -46,7 +46,7 @@ #include #include -#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) typedef struct FT_FaceRec_* FT_Face; #endif @@ -236,7 +236,7 @@ public: #ifdef Q_WS_MAC quint32 macFontID() const; #endif -#if defined(Q_WS_X11) || defined(Q_WS_QWS) || defined(Q_WS_QPA) +#if defined(Q_WS_X11) || defined(Q_WS_QWS) FT_Face freetypeFace() const; #endif diff --git a/src/gui/text/qfont_qpa.cpp b/src/gui/text/qfont_qpa.cpp new file mode 100644 index 0000000..5fed18b --- /dev/null +++ b/src/gui/text/qfont_qpa.cpp @@ -0,0 +1,114 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +QT_BEGIN_NAMESPACE + +void QFont::initialize() +{ + QApplicationPrivate::platformIntegration()->fontDatabase()->populateFontDatabase(); +} + +void QFont::cleanup() +{ + QFontCache::cleanup(); +} + + +/***************************************************************************** + QFont member functions + *****************************************************************************/ + +Qt::HANDLE QFont::handle() const +{ + return 0; +} + +QString QFont::rawName() const +{ + return QLatin1String("unknown"); +} + +void QFont::setRawName(const QString &) +{ +} + +QString QFont::defaultFamily() const +{ + QString familyName; + switch(d->request.styleHint) { + case QFont::Times: + familyName = QString::fromLatin1("times"); + case QFont::Courier: + case QFont::Monospace: + familyName = QString::fromLatin1("monospace"); + case QFont::Decorative: + familyName = QString::fromLatin1("old english"); + case QFont::Helvetica: + case QFont::System: + default: + familyName = QString::fromLatin1("helvetica"); + } + + QStringList list = QApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(familyName,QFont::StyleNormal,QUnicodeTables::Common); + if (list.size()) { + familyName = list.at(0); + } + return familyName; +} + +QString QFont::lastResortFamily() const +{ + return QString::fromLatin1("helvetica"); +} + +QString QFont::lastResortFont() const +{ + qFatal("QFont::lastResortFont: Cannot find any reasonable font"); + // Shut compiler up + return QString(); +} + + +QT_END_NAMESPACE + diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp index 7ece6ea..72ffb1c 100644 --- a/src/gui/text/qfontdatabase.cpp +++ b/src/gui/text/qfontdatabase.cpp @@ -50,13 +50,19 @@ #include "private/qunicodetables_p.h" #include "qfontengine_p.h" +#ifdef Q_WS_QPA +#include +#include +#include "qabstractfileengine.h" +#endif + #ifdef Q_WS_X11 #include #endif #include #include -#if (defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) +#if (defined(Q_WS_QWS)|| defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) # include # include FT_TRUETYPE_TABLES_H #endif @@ -143,7 +149,7 @@ struct QtFontEncoding uchar pitch : 8; }; -struct QtFontSize +struct QtFontSize { #ifdef Q_WS_X11 QtFontEncoding *encodings; @@ -152,10 +158,13 @@ struct QtFontSize unsigned short count : 16; #endif // Q_WS_X11 -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) QByteArray fileName; int fileIndex; #endif // defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QPA) + void *handle; +#endif unsigned short pixelSize : 16; }; @@ -238,9 +247,15 @@ struct QtFontStyle #ifdef Q_WS_X11 free(pixelSizes[count].encodings); #endif -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) pixelSizes[count].fileName.~QByteArray(); #endif +#if defined (Q_WS_QPA) + QPlatformIntegration *integration = QApplicationPrivate::platformIntegration(); + if (integration) { //on shut down there will be some that we don't release. + integration->fontDatabase()->releaseHandle(pixelSizes[count].handle); + } +#endif } #endif free(pixelSizes); @@ -302,10 +317,13 @@ QtFontSize *QtFontStyle::pixelSize(unsigned short size, bool add) pixelSizes[count].count = 0; pixelSizes[count].encodings = 0; #endif -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) new (&pixelSizes[count].fileName) QByteArray; pixelSizes[count].fileIndex = 0; #endif +#if defined(Q_WS_QPA) + pixelSizes[count].handle = 0; +#endif return pixelSizes + (count++); } @@ -362,7 +380,7 @@ QtFontStyle *QtFontFoundry::style(const QtFontStyle::Key &key, bool create) } -struct QtFontFamily +struct QtFontFamily { enum WritingSystemStatus { Unknown = 0, @@ -391,6 +409,9 @@ struct QtFontFamily #if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) , bogusWritingSystems(false) #endif +#if defined(Q_WS_QPA) + , askedForFallback(false) +#endif { memset(writingSystems, 0, sizeof(writingSystems)); } @@ -432,6 +453,9 @@ struct QtFontFamily bool bogusWritingSystems; QStringList fallbackFamilies; #endif +#if defined (Q_WS_QPA) + bool askedForFallback; +#endif unsigned char writingSystems[QFontDatabase::WritingSystemsCount]; QtFontFoundry *foundry(const QString &f, bool = false); @@ -475,7 +499,7 @@ QtFontFoundry *QtFontFamily::foundry(const QString &f, bool create) // ### copied to tools/makeqpf/qpf2.cpp -#if ((defined(Q_WS_QWS) || defined(Q_WS_QPA)) && !defined(QT_NO_FREETYPE)) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || (defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA)) +#if (defined(Q_WS_QWS) && !defined(QT_NO_FREETYPE)) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || (defined(Q_WS_MAC) && !defined(QT_MAC_USE_COCOA)) // see the Unicode subset bitfields in the MSDN docs static int requiredUnicodeBits[QFontDatabase::WritingSystemsCount][2] = { @@ -617,7 +641,7 @@ class QFontDatabasePrivate public: QFontDatabasePrivate() : count(0), families(0), reregisterAppFonts(false) -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) +#if defined(Q_WS_QWS) , stream(0) #endif #if defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) @@ -665,11 +689,11 @@ public: void invalidate(); -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) +#if defined(Q_WS_QWS) bool loadFromCache(const QString &fontPath); void addQPF2File(const QByteArray &file); #endif // Q_WS_QWS -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) void addFont(const QString &familyname, const char *foundryname, int weight, bool italic, int pixelSize, const QByteArray &file, int fileIndex, bool antialiased, @@ -678,12 +702,14 @@ public: QStringList addTTFile(const QByteArray &file, const QByteArray &fontData = QByteArray()); #endif // QT_NO_FREETYPE #endif -#if defined(Q_WS_QWS) || defined (Q_WS_QPA) +#if defined(Q_WS_QWS) QDataStream *stream; - QStringList fallbackFamilies; #elif defined(Q_OS_SYMBIAN) && defined(QT_NO_FREETYPE) const QSymbianFontDatabaseExtras *symbianExtras; #endif +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) + QStringList fallbackFamilies; +#endif }; void QFontDatabasePrivate::invalidate() @@ -732,7 +758,7 @@ QtFontFamily *QFontDatabasePrivate::family(const QString &f, bool create) return families[pos]; } -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) +#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) && !defined(QT_NO_FREETYPE) void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundryname, int weight, bool italic, int pixelSize, const QByteArray &file, int fileIndex, bool antialiased, const QList &writingSystems) @@ -763,7 +789,7 @@ void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundr size->fileName = file; size->fileIndex = fileIndex; -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) +#if defined(Q_WS_QWS) if (stream) { *stream << familyname << foundry->name << weight << quint8(italic) << pixelSize << file << fileIndex << quint8(antialiased); @@ -778,7 +804,7 @@ void QFontDatabasePrivate::addFont(const QString &familyname, const char *foundr } #endif -#if (defined(Q_WS_QWS) || defined (Q_WS_QPA) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) +#if (defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN)) && !defined(QT_NO_FREETYPE) QStringList QFontDatabasePrivate::addTTFile(const QByteArray &file, const QByteArray &fontData) { QStringList families; @@ -891,7 +917,7 @@ static const int scriptForWritingSystem[] = { }; -#if defined Q_WS_QWS || defined(Q_WS_QPA) || (defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG)) || defined(Q_WS_WIN) +#if defined Q_WS_QWS || (defined(Q_WS_X11) && !defined(QT_NO_FONTCONFIG)) || defined(Q_WS_WIN) static inline bool requiresOpenType(int writingSystem) { return ((writingSystem >= QFontDatabase::Syriac && writingSystem <= QFontDatabase::Sinhala) @@ -994,7 +1020,7 @@ static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDe #endif #endif -#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_X11) || defined(Q_WS_WIN) || defined(Q_OS_SYMBIAN) || defined(Q_WS_QPA) static void getEngineData(const QFontPrivate *d, const QFontCache::Key &key) { // look for the requested font in the engine data cache @@ -1053,8 +1079,10 @@ QT_BEGIN_INCLUDE_NAMESPACE # include "qfontdatabase_mac.cpp" #elif defined(Q_WS_WIN) # include "qfontdatabase_win.cpp" -#elif defined(Q_WS_QWS) || defined(Q_WS_QPA) +#elif defined(Q_WS_QWS) # include "qfontdatabase_qws.cpp" +#elif defined(Q_WS_QPA) +# include "qfontdatabase_qpa.cpp" #elif defined(Q_OS_SYMBIAN) # include "qfontdatabase_s60.cpp" #endif @@ -1340,6 +1368,7 @@ static void match(int script, const QFontDef &request, styleKey.stretch = request.stretch; char pitch = request.ignorePitch ? '*' : request.fixedPitch ? 'm' : 'p'; + FM_DEBUG("QFontDatabase::match\n" " request:\n" " family: %s [%s], script: %d\n" @@ -2485,7 +2514,7 @@ void QFontDatabase::createDatabase() { initializeDb(); } // used from qfontengine_ft.cpp -QByteArray qt_fontdata_from_index(int index) +Q_GUI_EXPORT QByteArray qt_fontdata_from_index(int index) { QMutexLocker locker(fontDatabaseMutex()); return privateDb()->applicationFonts.value(index).data; diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h index 6a09b77..f31c19c 100644 --- a/src/gui/text/qfontdatabase.h +++ b/src/gui/text/qfontdatabase.h @@ -167,6 +167,7 @@ private: friend class QFontEngineMultiXLFD; friend class QFontEngineMultiQWS; friend class QFontEngineMultiS60; + friend class QFontEngineMultiQPA; QFontDatabasePrivate *d; }; diff --git a/src/gui/text/qfontdatabase_qpa.cpp b/src/gui/text/qfontdatabase_qpa.cpp new file mode 100644 index 0000000..53594aa --- /dev/null +++ b/src/gui/text/qfontdatabase_qpa.cpp @@ -0,0 +1,392 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qlibraryinfo.h" +#include + +#include "qfontengine_qpa_p.h" +#include "qplatformdefs.h" + +#include +#include + +#include + +QT_BEGIN_NAMESPACE + +Q_GUI_EXPORT void qt_registerFont(const QString &familyName, const QString &foundryname, int weight, + QFont::Style style, int stretch, bool antialiased, bool scalable, int pixelSize, + const QSupportedWritingSystems &writingSystems, void *handle) +{ + QFontDatabasePrivate *d = privateDb(); + // qDebug() << "Adding font" << familyname << weight << italic << pixelSize << file << fileIndex << antialiased; + QtFontStyle::Key styleKey; + styleKey.style = style; + styleKey.weight = weight; + styleKey.stretch = stretch; + QtFontFamily *f = d->family(familyName, true); + + for (int i = 0; i < QFontDatabase::WritingSystemsCount; ++i) { + if (writingSystems.supported(QFontDatabase::WritingSystem(i))) { + f->writingSystems[i] = QtFontFamily::Supported; + } else { + f->writingSystems[i] = QtFontFamily::Unsupported; + } + } + + QtFontFoundry *foundry = f->foundry(foundryname, true); + QtFontStyle *fontStyle = foundry->style(styleKey, true); + fontStyle->smoothScalable = scalable; + fontStyle->antialiased = antialiased; + QtFontSize *size = fontStyle->pixelSize(pixelSize?pixelSize:SMOOTH_SCALABLE, true); + size->handle = handle; +} + +static QStringList fallbackFamilies(const QString &family, const QFont::Style &style, const QUnicodeTables::Script &script) +{ + QStringList retList = QApplicationPrivate::platformIntegration()->fontDatabase()->fallbacksForFamily(family,style,script); + QFontDatabasePrivate *db = privateDb(); + + QStringList::iterator i; + for (i = retList.begin(); i != retList.end(); ++i) { + bool contains = false; + for (int j = 0; j < db->count; j++) { + QtFontFamily *qtFamily = db->families[j]; + if (!(i->compare(qtFamily->name,Qt::CaseInsensitive))) { + contains = true; + break; + } + } + if (!contains) { + i = retList.erase(i); + i--; + } + } + return retList; +} + +static void initializeDb() +{ + static int initialized = false; + + if (!initialized) { + //init by asking for the platformfontdb for the first time :) + QApplicationPrivate::platformIntegration()->fontDatabase()->populateFontDatabase(); + initialized = true; + } +} + +#ifndef QT_NO_SETTINGS +// called from qapplication_qws.cpp +void qt_applyFontDatabaseSettings(const QSettings &settings) +{ + initializeDb(); + QFontDatabasePrivate *db = privateDb(); + for (int i = 0; i < db->count; ++i) { + QtFontFamily *family = db->families[i]; + if (settings.contains(family->name)) + family->fallbackFamilies = settings.value(family->name).toStringList(); + } + + if (settings.contains(QLatin1String("Global Fallbacks"))) + db->fallbackFamilies = settings.value(QLatin1String("Global Fallbacks")).toStringList(); +} +#endif // QT_NO_SETTINGS + +static inline void load(const QString & = QString(), int = -1) +{ + initializeDb(); +} + +static +QFontEngine *loadSingleEngine(int script, + const QFontDef &request, + QtFontFoundry *foundry, + QtFontStyle *style, QtFontSize *size) +{ + Q_UNUSED(foundry); + + Q_ASSERT(size); + int pixelSize = size->pixelSize; + if (!pixelSize || (style->smoothScalable && pixelSize == SMOOTH_SCALABLE)) + pixelSize = request.pixelSize; + + QFontDef def = request; + def.pixelSize = pixelSize; + + QFontCache::Key key(def,script); + QFontEngine *engine = QFontCache::instance()->findEngine(key); + if (!engine) { + QPlatformFontDatabase *pfdb = QApplicationPrivate::platformIntegration()->fontDatabase(); + if (size->handle) { + engine = pfdb->fontEngine(def,QUnicodeTables::Script(script),size->handle); + if (engine) { + QFontCache::Key key(def,script); + QFontCache::instance()->instance()->insertEngine(key,engine); + } + } + + } + return engine; +} + +static +QFontEngine *loadEngine(int script, const QFontDef &request, + QtFontFamily *family, QtFontFoundry *foundry, + QtFontStyle *style, QtFontSize *size) +{ + + QFontEngine *engine = loadSingleEngine(script, request, foundry, style, size); + //make sure that the db has all fallback families + if (engine + && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol ) { + + if (family && !family->askedForFallback) { + family->fallbackFamilies = fallbackFamilies(family->name,QFont::Style(style->key.style),QUnicodeTables::Script(script)); + + family->askedForFallback = true; + } + + QStringList fallbacks = privateDb()->fallbackFamilies; + if (family && !family->fallbackFamilies.isEmpty()) + fallbacks = family->fallbackFamilies; + + engine = new QFontEngineMultiQPA(engine, script, fallbacks); + } + + return engine; +} + +static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt) +{ + QFontDatabasePrivate *db = privateDb(); + + QApplicationPrivate::platformIntegration()->fontDatabase()->addApplicationFont(fnt->data,fnt->fileName); + db->reregisterAppFonts = true; +} + +bool QFontDatabase::removeApplicationFont(int handle) +{ + QMutexLocker locker(fontDatabaseMutex()); + + QFontDatabasePrivate *db = privateDb(); + if (handle < 0 || handle >= db->applicationFonts.count()) + return false; + + db->applicationFonts[handle] = QFontDatabasePrivate::ApplicationFont(); + + db->reregisterAppFonts = true; + db->invalidate(); + return true; +} + +bool QFontDatabase::removeAllApplicationFonts() +{ + QMutexLocker locker(fontDatabaseMutex()); + + QFontDatabasePrivate *db = privateDb(); + if (db->applicationFonts.isEmpty()) + return false; + + db->applicationFonts.clear(); + db->invalidate(); + return true; +} + +bool QFontDatabase::supportsThreadedFontRendering() +{ + return true; +} + +/*! + \internal +*/ +QFontEngine * +QFontDatabase::findFont(int script, const QFontPrivate *fp, + const QFontDef &request) +{ + QMutexLocker locker(fontDatabaseMutex()); + + const int force_encoding_id = -1; + + if (!privateDb()->count) + initializeDb(); + + QFontEngine *engine; + QFontCache::Key key(request, script); + engine = QFontCache::instance()->findEngine(key); + if (engine) { + qDebug() << "Cache hit level 1"; + return engine; + } + + QString family_name, foundry_name; + + parseFontName(request.family, foundry_name, family_name); + + if (qt_enable_test_font && request.family == QLatin1String("__Qt__Box__Engine__")) { + engine =new QTestFontEngine(request.pixelSize); + engine->fontDef = request; + } + + QtFontDesc desc; + match(script, request, family_name, foundry_name, force_encoding_id, &desc); + if (desc.family != 0 && desc.foundry != 0 && desc.style != 0) { + engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size); + } else { + FM_DEBUG(" NO MATCH FOUND\n"); + } + + if (engine) { + initFontDef(desc, request, &engine->fontDef); + + if (fp) { + QFontDef def = request; + if (def.family.isEmpty()) { + def.family = fp->request.family; + def.family = def.family.left(def.family.indexOf(QLatin1Char(','))); + } + } + } + + if (!engine) { + if (!request.family.isEmpty()) { + QStringList fallbacks = fallbackFamilies(request.family,QFont::Style(request.style),QUnicodeTables::Script(script)); + for (int i = 0; i < fallbacks.size(); i++) { + QFontDef def = request; + def.family = fallbacks.at(i); + QFontCache::Key key(def,script); + engine = QFontCache::instance()->findEngine(key); + if (!engine) { + QtFontDesc desc; + match(script, def, def.family, QLatin1String(""), 0, &desc); + if (desc.family == 0 && desc.foundry == 0 && desc.style == 0) { + continue; + } + engine = loadEngine(script, def, desc.family, desc.foundry, desc.style, desc.size); + if (engine) { + initFontDef(desc, def, &engine->fontDef); + break; + } + } + } + } + + if (!engine) + engine = new QFontEngineBox(request.pixelSize); + + FM_DEBUG("returning box engine"); + } + + if (fp && fp->dpi > 0) { + engine->fontDef.pointSize = qreal(double((engine->fontDef.pixelSize * 72) / fp->dpi)); + } else { + engine->fontDef.pointSize = request.pointSize; + } + + return engine; +} + +void QFontDatabase::load(const QFontPrivate *d, int script) +{ + QFontDef req = d->request; + + if (req.pixelSize == -1) { + req.pixelSize = floor(((req.pointSize * d->dpi) / 72) * 100 + 0.5) / 100; + req.pixelSize = qRound(req.pixelSize); + } + if (req.pointSize < 0) + req.pointSize = req.pixelSize*72.0/d->dpi; + if (req.weight == 0) + req.weight = QFont::Normal; + if (req.stretch == 0) + req.stretch = 100; + + QFontCache::Key key(req, script); + + if (!d->engineData) + getEngineData(d, key); + + // the cached engineData could have already loaded the engine we want + if (d->engineData->engines[script]) + return; + + QFontEngine *fe = QFontCache::instance()->findEngine(key); + + // list of families to try + QStringList family_list; + + if (!req.family.isEmpty()) { + family_list = familyList(req); + + // add the default family + QString defaultFamily = QApplication::font().family(); + if (! family_list.contains(defaultFamily)) + family_list << defaultFamily; + + } + + // null family means find the first font matching the specified script + family_list << QString(); + + QStringList::ConstIterator it = family_list.constBegin(), end = family_list.constEnd(); + for (; !fe && it != end; ++it) { + req.family = *it; + + fe = QFontDatabase::findFont(script, d, req); + if (fe && (fe->type()==QFontEngine::Box) && !req.family.isEmpty()) + fe = 0; + } + + if (fe->symbol || (d->request.styleStrategy & QFont::NoFontMerging)) { + for (int i = 0; i < QUnicodeTables::ScriptCount; ++i) { + if (!d->engineData->engines[i]) { + d->engineData->engines[i] = fe; + fe->ref.ref(); + } + } + } else { + d->engineData->engines[script] = fe; + fe->ref.ref(); + } +} + +QT_END_NAMESPACE diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp index fdb86ce..1c705ae 100644 --- a/src/gui/text/qfontengine.cpp +++ b/src/gui/text/qfontengine.cpp @@ -481,7 +481,7 @@ static void collectSingleContour(qreal x0, qreal y0, uint *grid, int x, int y, i path->closeSubpath(); } -void qt_addBitmapToPath(qreal x0, qreal y0, const uchar *image_data, int bpl, int w, int h, QPainterPath *path) +Q_GUI_EXPORT void qt_addBitmapToPath(qreal x0, qreal y0, const uchar *image_data, int bpl, int w, int h, QPainterPath *path) { uint *grid = new uint[(w+1)*(h+1)]; // set up edges diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp index 2c4fbab..1ee7144 100644 --- a/src/gui/text/qfontengine_ft.cpp +++ b/src/gui/text/qfontengine_ft.cpp @@ -717,7 +717,7 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format) metrics = face->size->metrics; -#if defined(Q_WS_QWS) +#if defined(Q_WS_QWS) || defined(Q_WS_QPA) /* TrueType fonts with embedded bitmaps may have a bitmap font specific ascent/descent in the EBLC table. There is no direct public API @@ -749,6 +749,11 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format) return true; } +void QFontEngineFT::setDefaultHintStyle(HintStyle style) +{ + default_hint_style = style; +} + QFontEngineFT::Glyph *QFontEngineFT::loadGlyphMetrics(QGlyphSet *set, uint glyph) const { Glyph *g = set->getGlyph(glyph); diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h index 372ad0c..f40ce04 100644 --- a/src/gui/text/qfontengine_ft_p.h +++ b/src/gui/text/qfontengine_ft_p.h @@ -271,7 +271,7 @@ private: QGlyphSet *loadTransformedGlyphSet(const QTransform &matrix); bool loadGlyphs(QGlyphSet *gs, glyph_t *glyphs, int num_glyphs, GlyphFormat format = Format_Render); -#if defined(Q_WS_QWS) || defined(Q_WS_QPA) || defined(Q_OS_SYMBIAN) +#if defined(Q_WS_QWS) || defined(Q_OS_SYMBIAN) virtual void draw(QPaintEngine * /*p*/, qreal /*x*/, qreal /*y*/, const QTextItemInt & /*si*/) {} #endif @@ -282,6 +282,14 @@ private: virtual HB_Error getPointInOutline(HB_Glyph glyph, int flags, hb_uint32 point, HB_Fixed *xpos, HB_Fixed *ypos, hb_uint32 *nPoints); + enum HintStyle { + HintNone, + HintLight, + HintMedium, + HintFull + }; + + void setDefaultHintStyle(HintStyle style); protected: void freeGlyphSets(); @@ -293,12 +301,6 @@ protected: QFreetypeFace *freetype; int default_load_flags; - enum HintStyle { - HintNone, - HintLight, - HintMedium, - HintFull - }; HintStyle default_hint_style; diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h index fb4556b..897f76f 100644 --- a/src/gui/text/qfontengine_p.h +++ b/src/gui/text/qfontengine_p.h @@ -168,7 +168,7 @@ public: virtual void recalcAdvances(QGlyphLayout *, QTextEngine::ShaperFlags) const {} virtual void doKerning(QGlyphLayout *, QTextEngine::ShaperFlags) const; -#if !defined(Q_WS_X11) && !defined(Q_WS_WIN) && !defined(Q_WS_MAC) && !defined(Q_OS_SYMBIAN) +#if !defined(Q_WS_X11) && !defined(Q_WS_WIN) && !defined(Q_WS_MAC) && !defined(Q_OS_SYMBIAN) && !defined(Q_WS_QPA) virtual void draw(QPaintEngine *p, qreal x, qreal y, const QTextItemInt &si) = 0; #endif virtual void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs, diff --git a/src/gui/text/qfontengine_qpa.cpp b/src/gui/text/qfontengine_qpa.cpp new file mode 100644 index 0000000..910bbfe --- /dev/null +++ b/src/gui/text/qfontengine_qpa.cpp @@ -0,0 +1,650 @@ +#include "qfontengine_qpa_p.h" + +#include +#include +#include +#include + +#include +#include +#include + +QT_BEGIN_NAMESPACE + +//#define DEBUG_HEADER +//#define DEBUG_FONTENGINE + +static QFontEngineQPA::TagType tagTypes[QFontEngineQPA::NumTags] = { + QFontEngineQPA::StringType, // FontName + QFontEngineQPA::StringType, // FileName + QFontEngineQPA::UInt32Type, // FileIndex + QFontEngineQPA::UInt32Type, // FontRevision + QFontEngineQPA::StringType, // FreeText + QFontEngineQPA::FixedType, // Ascent + QFontEngineQPA::FixedType, // Descent + QFontEngineQPA::FixedType, // Leading + QFontEngineQPA::FixedType, // XHeight + QFontEngineQPA::FixedType, // AverageCharWidth + QFontEngineQPA::FixedType, // MaxCharWidth + QFontEngineQPA::FixedType, // LineThickness + QFontEngineQPA::FixedType, // MinLeftBearing + QFontEngineQPA::FixedType, // MinRightBearing + QFontEngineQPA::FixedType, // UnderlinePosition + QFontEngineQPA::UInt8Type, // GlyphFormat + QFontEngineQPA::UInt8Type, // PixelSize + QFontEngineQPA::UInt8Type, // Weight + QFontEngineQPA::UInt8Type, // Style + QFontEngineQPA::StringType, // EndOfHeader + QFontEngineQPA::BitFieldType// WritingSystems +}; + + +#if defined(DEBUG_HEADER) +# define DEBUG_VERIFY qDebug +#else +# define DEBUG_VERIFY if (0) qDebug +#endif + +#define READ_VERIFY(type, variable) \ + if (tagPtr + sizeof(type) > endPtr) { \ + DEBUG_VERIFY() << "read verify failed in line" << __LINE__; \ + return 0; \ + } \ + variable = qFromBigEndian(tagPtr); \ + DEBUG_VERIFY() << "read value" << variable << "of type " #type; \ + tagPtr += sizeof(type) + +template +T readValue(const uchar *&data) +{ + T value = qFromBigEndian(data); + data += sizeof(T); + return value; +} + +#define VERIFY(condition) \ + if (!(condition)) { \ + DEBUG_VERIFY() << "condition " #condition " failed in line" << __LINE__; \ + return 0; \ + } + +#define VERIFY_TAG(condition) \ + if (!(condition)) { \ + DEBUG_VERIFY() << "verifying tag condition " #condition " failed in line" << __LINE__ << "with tag" << tag; \ + return 0; \ + } + +static inline const uchar *verifyTag(const uchar *tagPtr, const uchar *endPtr) +{ + quint16 tag, length; + READ_VERIFY(quint16, tag); + READ_VERIFY(quint16, length); + if (tag == QFontEngineQPA::Tag_EndOfHeader) + return endPtr; + if (tag < QFontEngineQPA::NumTags) { + switch (tagTypes[tag]) { + case QFontEngineQPA::BitFieldType: + case QFontEngineQPA::StringType: + // can't do anything... + break; + case QFontEngineQPA::UInt32Type: + VERIFY_TAG(length == sizeof(quint32)); + break; + case QFontEngineQPA::FixedType: + VERIFY_TAG(length == sizeof(quint32)); + break; + case QFontEngineQPA::UInt8Type: + VERIFY_TAG(length == sizeof(quint8)); + break; + } +#if defined(DEBUG_HEADER) + if (length == 1) + qDebug() << "tag data" << hex << *tagPtr; + else if (length == 4) + qDebug() << "tag data" << hex << tagPtr[0] << tagPtr[1] << tagPtr[2] << tagPtr[3]; +#endif + } + return tagPtr + length; +} + +const QFontEngineQPA::Glyph *QFontEngineQPA::findGlyph(glyph_t g) const +{ + if (!g || g >= glyphMapEntries) + return 0; + const quint32 *gmapPtr = reinterpret_cast(fontData + glyphMapOffset); + quint32 glyphPos = qFromBigEndian(gmapPtr[g]); + if (glyphPos > glyphDataSize) { + if (glyphPos == 0xffffffff) + return 0; +#if defined(DEBUG_FONTENGINE) + qDebug() << "glyph" << g << "outside of glyphData, remapping font file"; +#endif + if (glyphPos > glyphDataSize) + return 0; + } + return reinterpret_cast(fontData + glyphDataOffset + glyphPos); +} + +bool QFontEngineQPA::verifyHeader(const uchar *data, int size) +{ + VERIFY(size >= int(sizeof(Header))); + const Header *header = reinterpret_cast(data); + if (header->magic[0] != 'Q' + || header->magic[1] != 'P' + || header->magic[2] != 'F' + || header->magic[3] != '2') + return false; + + VERIFY(header->majorVersion <= CurrentMajorVersion); + const quint16 dataSize = qFromBigEndian(header->dataSize); + VERIFY(size >= int(sizeof(Header)) + dataSize); + + const uchar *tagPtr = data + sizeof(Header); + const uchar *tagEndPtr = tagPtr + dataSize; + while (tagPtr < tagEndPtr - 3) { + tagPtr = verifyTag(tagPtr, tagEndPtr); + VERIFY(tagPtr); + } + + VERIFY(tagPtr <= tagEndPtr); + return true; +} + +QVariant QFontEngineQPA::extractHeaderField(const uchar *data, HeaderTag requestedTag) +{ + const Header *header = reinterpret_cast(data); + const uchar *tagPtr = data + sizeof(Header); + const uchar *endPtr = tagPtr + qFromBigEndian(header->dataSize); + while (tagPtr < endPtr - 3) { + quint16 tag = readValue(tagPtr); + quint16 length = readValue(tagPtr); + if (tag == requestedTag) { + switch (tagTypes[requestedTag]) { + case StringType: + return QVariant(QString::fromUtf8(reinterpret_cast(tagPtr), length)); + case UInt32Type: + return QVariant(readValue(tagPtr)); + case UInt8Type: + return QVariant(uint(*tagPtr)); + case FixedType: + return QVariant(QFixed::fromFixed(readValue(tagPtr)).toReal()); + case BitFieldType: + return QVariant(QByteArray(reinterpret_cast(tagPtr), length)); + } + return QVariant(); + } else if (tag == Tag_EndOfHeader) { + break; + } + tagPtr += length; + } + + return QVariant(); +} + + + +static inline unsigned int getChar(const QChar *str, int &i, const int len) +{ + unsigned int uc = str[i].unicode(); + if (uc >= 0xd800 && uc < 0xdc00 && i < len-1) { + uint low = str[i+1].unicode(); + if (low >= 0xdc00 && low < 0xe000) { + uc = (uc - 0xd800)*0x400 + (low - 0xdc00) + 0x10000; + ++i; + } + } + return uc; +} + +QFontEngineQPA::QFontEngineQPA(const QFontDef &def, const QByteArray &data) + : fontData(reinterpret_cast(data.constData())), dataSize(data.size()) +{ + fontDef = def; + cache_cost = 100; + externalCMap = 0; + cmapOffset = 0; + cmapSize = 0; + glyphMapOffset = 0; + glyphMapEntries = 0; + glyphDataOffset = 0; + glyphDataSize = 0; + kerning_pairs_loaded = false; + readOnly = true; + +#if defined(DEBUG_FONTENGINE) + qDebug() << "QFontEngineQPA::QFontEngineQPA( fd =" << fd << ", renderingFontEngine =" << renderingFontEngine << ')'; +#endif + + if (!verifyHeader(fontData, dataSize)) { +#if defined(DEBUG_FONTENGINE) + qDebug() << "verifyHeader failed!"; +#endif + return; + } + + const Header *header = reinterpret_cast(fontData); + + readOnly = (header->lock == 0xffffffff); + + const uchar *imgData = fontData + sizeof(Header) + qFromBigEndian(header->dataSize); + const uchar *endPtr = fontData + dataSize; + while (imgData <= endPtr - 8) { + quint16 blockTag = readValue(imgData); + imgData += 2; // skip padding + quint32 blockSize = readValue(imgData); + + if (blockTag == CMapBlock) { + cmapOffset = imgData - fontData; + cmapSize = blockSize; + } else if (blockTag == GMapBlock) { + glyphMapOffset = imgData - fontData; + glyphMapEntries = blockSize / 4; + } else if (blockTag == GlyphBlock) { + glyphDataOffset = imgData - fontData; + glyphDataSize = blockSize; + } + + imgData += blockSize; + } + + face_id.filename = QFile::encodeName(extractHeaderField(fontData, Tag_FileName).toString()); + face_id.index = extractHeaderField(fontData, Tag_FileIndex).toInt(); + + // get the real cmap + if (cmapOffset) { + int tableSize = cmapSize; + const uchar *cmapPtr = getCMap(fontData + cmapOffset, tableSize, &symbol, &cmapSize); + if (cmapPtr) + cmapOffset = cmapPtr - fontData; + else + cmapOffset = 0; + } else if (externalCMap) { + int tableSize = cmapSize; + externalCMap = getCMap(externalCMap, tableSize, &symbol, &cmapSize); + } + + // verify all the positions in the glyphMap + if (glyphMapOffset) { + const quint32 *gmapPtr = reinterpret_cast(fontData + glyphMapOffset); + for (uint i = 0; i < glyphMapEntries; ++i) { + quint32 glyphDataPos = qFromBigEndian(gmapPtr[i]); + if (glyphDataPos == 0xffffffff) + continue; + if (glyphDataPos >= glyphDataSize) { + // error + glyphMapOffset = 0; + glyphMapEntries = 0; + break; + } + } + } + +#if defined(DEBUG_FONTENGINE) + if (!isValid()) + qDebug() << "fontData" << fontData << "dataSize" << dataSize + << "externalCMap" << externalCMap << "cmapOffset" << cmapOffset + << "glyphMapOffset" << glyphMapOffset << "glyphDataOffset" << glyphDataOffset + << "fd" << fd << "glyphDataSize" << glyphDataSize; +#endif +} + +QFontEngineQPA::~QFontEngineQPA() +{ +} + +bool QFontEngineQPA::getSfntTableData(uint tag, uchar *buffer, uint *length) const +{ + Q_UNUSED(tag); + Q_UNUSED(buffer); + *length = 0; + return false; +} + +bool QFontEngineQPA::stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const +{ + if (*nglyphs < len) { + *nglyphs = len; + return false; + } + +#if defined(DEBUG_FONTENGINE) + QSet seenGlyphs; +#endif + + const uchar *cmap = externalCMap ? externalCMap : (fontData + cmapOffset); + + bool mirrored = flags & QTextEngine::RightToLeft; + int glyph_pos = 0; + if (symbol) { + for (int i = 0; i < len; ++i) { + unsigned int uc = getChar(str, i, len); + if (mirrored) + uc = QChar::mirroredChar(uc); + glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc); + if(!glyphs->glyphs[glyph_pos] && uc < 0x100) + glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc + 0xf000); + ++glyph_pos; + } + } else { + for (int i = 0; i < len; ++i) { + unsigned int uc = getChar(str, i, len); + if (mirrored) + uc = QChar::mirroredChar(uc); + glyphs->glyphs[glyph_pos] = getTrueTypeGlyphIndex(cmap, uc); +#if 0 && defined(DEBUG_FONTENGINE) + QChar c(uc); + if (!findGlyph(glyphs[glyph_pos].glyph) && !seenGlyphs.contains(c)) + qDebug() << "glyph for character" << c << '/' << hex << uc << "is" << dec << glyphs[glyph_pos].glyph; + + seenGlyphs.insert(c); +#endif + ++glyph_pos; + } + } + + *nglyphs = glyph_pos; + glyphs->numGlyphs = glyph_pos; + recalcAdvances(glyphs, flags); + return true; +} + +void QFontEngineQPA::recalcAdvances(QGlyphLayout *glyphs, QTextEngine::ShaperFlags) const +{ + for (int i = 0; i < glyphs->numGlyphs; ++i) { + const Glyph *g = findGlyph(glyphs->glyphs[i]); + if (!g) { + glyphs->glyphs[i] = 0; + continue; + } + glyphs->advances_x[i] = g->advance; + glyphs->advances_y[i] = 0; + } +} + +QImage QFontEngineQPA::alphaMapForGlyph(glyph_t g) +{ + const Glyph *glyph = findGlyph(g); + if (!glyph) + return QImage(); + + const uchar *bits = ((const uchar *) glyph) + sizeof(Glyph); + + QImage image(bits,glyph->width, glyph->height, glyph->bytesPerLine, QImage::Format_Indexed8); + + return image; +} + +void QFontEngineQPA::addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) +{ + addBitmapFontToPath(x, y, glyphs, path, flags); +} + +glyph_metrics_t QFontEngineQPA::boundingBox(const QGlyphLayout &glyphs) +{ + glyph_metrics_t overall; + // initialize with line height, we get the same behaviour on all platforms + overall.y = -ascent(); + overall.height = ascent() + descent() + 1; + + QFixed ymax = 0; + QFixed xmax = 0; + for (int i = 0; i < glyphs.numGlyphs; i++) { + const Glyph *g = findGlyph(glyphs.glyphs[i]); + if (!g) + continue; + + QFixed x = overall.xoff + glyphs.offsets[i].x + g->x; + QFixed y = overall.yoff + glyphs.offsets[i].y + g->y; + overall.x = qMin(overall.x, x); + overall.y = qMin(overall.y, y); + xmax = qMax(xmax, x + g->width); + ymax = qMax(ymax, y + g->height); + overall.xoff += g->advance; + } + overall.height = qMax(overall.height, ymax - overall.y); + overall.width = xmax - overall.x; + + return overall; +} + +glyph_metrics_t QFontEngineQPA::boundingBox(glyph_t glyph) +{ + glyph_metrics_t overall; + const Glyph *g = findGlyph(glyph); + if (!g) + return overall; + overall.x = g->x; + overall.y = g->y; + overall.width = g->width; + overall.height = g->height; + overall.xoff = g->advance; + return overall; +} + +QFixed QFontEngineQPA::ascent() const +{ + return QFixed::fromReal(extractHeaderField(fontData, Tag_Ascent).value()); +} + +QFixed QFontEngineQPA::descent() const +{ + return QFixed::fromReal(extractHeaderField(fontData, Tag_Descent).value()); +} + +QFixed QFontEngineQPA::leading() const +{ + return QFixed::fromReal(extractHeaderField(fontData, Tag_Leading).value()); +} + +qreal QFontEngineQPA::maxCharWidth() const +{ + return extractHeaderField(fontData, Tag_MaxCharWidth).value(); +} + +qreal QFontEngineQPA::minLeftBearing() const +{ + return extractHeaderField(fontData, Tag_MinLeftBearing).value(); +} + +qreal QFontEngineQPA::minRightBearing() const +{ + return extractHeaderField(fontData, Tag_MinRightBearing).value(); +} + +QFixed QFontEngineQPA::underlinePosition() const +{ + return QFixed::fromReal(extractHeaderField(fontData, Tag_UnderlinePosition).value()); +} + +QFixed QFontEngineQPA::lineThickness() const +{ + return QFixed::fromReal(extractHeaderField(fontData, Tag_LineThickness).value()); +} + +QFontEngine::Type QFontEngineQPA::type() const +{ + return QFontEngine::QPF2; +} + +bool QFontEngineQPA::canRender(const QChar *string, int len) +{ + const uchar *cmap = externalCMap ? externalCMap : (fontData + cmapOffset); + + if (symbol) { + for (int i = 0; i < len; ++i) { + unsigned int uc = getChar(string, i, len); + glyph_t g = getTrueTypeGlyphIndex(cmap, uc); + if(!g && uc < 0x100) + g = getTrueTypeGlyphIndex(cmap, uc + 0xf000); + if (!g) + return false; + } + } else { + for (int i = 0; i < len; ++i) { + unsigned int uc = getChar(string, i, len); + if (!getTrueTypeGlyphIndex(cmap, uc)) + return false; + } + } + return true; +} + +bool QFontEngineQPA::isValid() const +{ + return fontData && dataSize && (cmapOffset || externalCMap) + && glyphMapOffset && glyphDataOffset && glyphDataSize > 0; +} + +void QPAGenerator::generate() +{ + writeHeader(); + writeGMap(); + writeBlock(QFontEngineQPA::GlyphBlock, QByteArray()); + + dev->seek(4); // position of header.lock + writeUInt32(0); +} + +void QPAGenerator::writeHeader() +{ + QFontEngineQPA::Header header; + + header.magic[0] = 'Q'; + header.magic[1] = 'P'; + header.magic[2] = 'F'; + header.magic[3] = '2'; + header.lock = 1; + header.majorVersion = QFontEngineQPA::CurrentMajorVersion; + header.minorVersion = QFontEngineQPA::CurrentMinorVersion; + header.dataSize = 0; + dev->write((const char *)&header, sizeof(header)); + + writeTaggedString(QFontEngineQPA::Tag_FontName, fe->fontDef.family.toUtf8()); + + QFontEngine::FaceId face = fe->faceId(); + writeTaggedString(QFontEngineQPA::Tag_FileName, face.filename); + writeTaggedUInt32(QFontEngineQPA::Tag_FileIndex, face.index); + + { + uchar data[4]; + uint len = 4; + bool ok = fe->getSfntTableData(MAKE_TAG('h', 'e', 'a', 'd'), data, &len); + if (ok) { + const quint32 revision = qFromBigEndian(data); + writeTaggedUInt32(QFontEngineQPA::Tag_FontRevision, revision); + } + } + + writeTaggedQFixed(QFontEngineQPA::Tag_Ascent, fe->ascent()); + writeTaggedQFixed(QFontEngineQPA::Tag_Descent, fe->descent()); + writeTaggedQFixed(QFontEngineQPA::Tag_Leading, fe->leading()); + writeTaggedQFixed(QFontEngineQPA::Tag_XHeight, fe->xHeight()); + writeTaggedQFixed(QFontEngineQPA::Tag_AverageCharWidth, fe->averageCharWidth()); + writeTaggedQFixed(QFontEngineQPA::Tag_MaxCharWidth, QFixed::fromReal(fe->maxCharWidth())); + writeTaggedQFixed(QFontEngineQPA::Tag_LineThickness, fe->lineThickness()); + writeTaggedQFixed(QFontEngineQPA::Tag_MinLeftBearing, QFixed::fromReal(fe->minLeftBearing())); + writeTaggedQFixed(QFontEngineQPA::Tag_MinRightBearing, QFixed::fromReal(fe->minRightBearing())); + writeTaggedQFixed(QFontEngineQPA::Tag_UnderlinePosition, fe->underlinePosition()); + writeTaggedUInt8(QFontEngineQPA::Tag_PixelSize, fe->fontDef.pixelSize); + writeTaggedUInt8(QFontEngineQPA::Tag_Weight, fe->fontDef.weight); + writeTaggedUInt8(QFontEngineQPA::Tag_Style, fe->fontDef.style); + + writeTaggedUInt8(QFontEngineQPA::Tag_GlyphFormat, QFontEngineQPA::AlphamapGlyphs); + + writeTaggedString(QFontEngineQPA::Tag_EndOfHeader, QByteArray()); + align4(); + + const quint64 size = dev->pos(); + header.dataSize = qToBigEndian(size - sizeof(header)); + dev->seek(0); + dev->write((const char *)&header, sizeof(header)); + dev->seek(size); +} + +void QPAGenerator::writeGMap() +{ + const quint16 glyphCount = fe->glyphCount(); + + writeUInt16(QFontEngineQPA::GMapBlock); + writeUInt16(0); // padding + writeUInt32(glyphCount * 4); + + QByteArray &buffer = dev->buffer(); + const int numBytes = glyphCount * sizeof(quint32); + qint64 pos = buffer.size(); + buffer.resize(pos + numBytes); + qMemSet(buffer.data() + pos, 0xff, numBytes); + dev->seek(pos + numBytes); +} + +void QPAGenerator::writeBlock(QFontEngineQPA::BlockTag tag, const QByteArray &data) +{ + writeUInt16(tag); + writeUInt16(0); // padding + const int padSize = ((data.size() + 3) / 4) * 4 - data.size(); + writeUInt32(data.size() + padSize); + dev->write(data); + for (int i = 0; i < padSize; ++i) + writeUInt8(0); +} + +void QPAGenerator::writeTaggedString(QFontEngineQPA::HeaderTag tag, const QByteArray &string) +{ + writeUInt16(tag); + writeUInt16(string.length()); + dev->write(string); +} + +void QPAGenerator::writeTaggedUInt32(QFontEngineQPA::HeaderTag tag, quint32 value) +{ + writeUInt16(tag); + writeUInt16(sizeof(value)); + writeUInt32(value); +} + +void QPAGenerator::writeTaggedUInt8(QFontEngineQPA::HeaderTag tag, quint8 value) +{ + writeUInt16(tag); + writeUInt16(sizeof(value)); + writeUInt8(value); +} + +void QPAGenerator::writeTaggedQFixed(QFontEngineQPA::HeaderTag tag, QFixed value) +{ + writeUInt16(tag); + writeUInt16(sizeof(quint32)); + writeUInt32(value.value()); +} + + +/* + Creates a new multi QPA engine. + + This function takes ownership of the QFontEngine, increasing it's refcount. +*/ +QFontEngineMultiQPA::QFontEngineMultiQPA(QFontEngine *fe, int _script, const QStringList &fallbacks) + : QFontEngineMulti(fallbacks.size() + 1), + fallbackFamilies(fallbacks), script(_script) +{ + engines[0] = fe; + fe->ref.ref(); + fontDef = engines[0]->fontDef; +} + +void QFontEngineMultiQPA::loadEngine(int at) +{ + Q_ASSERT(at < engines.size()); + Q_ASSERT(engines.at(at) == 0); + + QFontDef request = fontDef; + request.styleStrategy |= QFont::NoFontMerging; + request.family = fallbackFamilies.at(at-1); + engines[at] = QFontDatabase::findFont(script, + /*fontprivate*/0, + request); + Q_ASSERT(engines[at]); + engines[at]->ref.ref(); + engines[at]->fontDef = request; +} + +QT_END_NAMESPACE diff --git a/src/gui/text/qfontengine_qpa_p.h b/src/gui/text/qfontengine_qpa_p.h new file mode 100644 index 0000000..467fca6 --- /dev/null +++ b/src/gui/text/qfontengine_qpa_p.h @@ -0,0 +1,262 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QFONTENGINE_QPA_P_H +#define QFONTENGINE_QPA_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// +#include +#include +#include +#include + +#include "qfontengine_p.h" + +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QFontEngine; +class QFreetypeFace; +class QBuffer; + +class Q_GUI_EXPORT QFontEngineQPA : public QFontEngine +{ +public: + // if you add new tags please make sure to update the tables in + // qpfutil.cpp and tools/makeqpf/qpf2.cpp + enum HeaderTag { + Tag_FontName, // 0 string + Tag_FileName, // 1 string + Tag_FileIndex, // 2 quint32 + Tag_FontRevision, // 3 quint32 + Tag_FreeText, // 4 string + Tag_Ascent, // 5 QFixed + Tag_Descent, // 6 QFixed + Tag_Leading, // 7 QFixed + Tag_XHeight, // 8 QFixed + Tag_AverageCharWidth, // 9 QFixed + Tag_MaxCharWidth, // 10 QFixed + Tag_LineThickness, // 11 QFixed + Tag_MinLeftBearing, // 12 QFixed + Tag_MinRightBearing, // 13 QFixed + Tag_UnderlinePosition, // 14 QFixed + Tag_GlyphFormat, // 15 quint8 + Tag_PixelSize, // 16 quint8 + Tag_Weight, // 17 quint8 + Tag_Style, // 18 quint8 + Tag_EndOfHeader, // 19 string + Tag_WritingSystems, // 20 bitfield + + NumTags + }; + + enum TagType { + StringType, + FixedType, + UInt8Type, + UInt32Type, + BitFieldType + }; + + struct Tag + { + quint16 tag; + quint16 size; + }; + + enum GlyphFormat { + BitmapGlyphs = 1, + AlphamapGlyphs = 8 + }; + + enum { + CurrentMajorVersion = 2, + CurrentMinorVersion = 0 + }; + + // The CMap is identical to the TrueType CMap table format + // The GMap table is a normal array with the total number of + // covered glyphs in the TrueType font + enum BlockTag { + CMapBlock, + GMapBlock, + GlyphBlock + }; + + struct Q_PACKED Header + { + char magic[4]; // 'QPF2' + quint32 lock; // values: 0 = unlocked, 0xffffffff = read-only, otherwise qws client id of locking process + quint8 majorVersion; + quint8 minorVersion; + quint16 dataSize; + }; + + struct Q_PACKED Block + { + quint16 tag; + quint16 pad; + quint32 dataSize; + }; + + struct Q_PACKED Glyph + { + quint8 width; + quint8 height; + quint8 bytesPerLine; + qint8 x; + qint8 y; + qint8 advance; + }; + + QFontEngineQPA(const QFontDef &def, const QByteArray &data); + ~QFontEngineQPA(); + + FaceId faceId() const { return face_id; } + bool getSfntTableData(uint tag, uchar *buffer, uint *length) const; + + bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, QTextEngine::ShaperFlags flags) const; + void recalcAdvances(QGlyphLayout *, QTextEngine::ShaperFlags) const; + + void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags); + QImage alphaMapForGlyph(glyph_t t); + + glyph_metrics_t boundingBox(const QGlyphLayout &glyphs); + glyph_metrics_t boundingBox(glyph_t glyph); + + QFixed ascent() const; + QFixed descent() const; + QFixed leading() const; + qreal maxCharWidth() const; + qreal minLeftBearing() const; + qreal minRightBearing() const; + QFixed underlinePosition() const; + QFixed lineThickness() const; + + Type type() const; + + bool canRender(const QChar *string, int len); + inline const char *name() const { return "QPF2"; } + + virtual int glyphCount() const { return glyphMapEntries; } + + bool isValid() const; + + const Glyph *findGlyph(glyph_t g) const; + + static bool verifyHeader(const uchar *data, int size); + static QVariant extractHeaderField(const uchar *data, HeaderTag tag); + +private: + + const uchar *fontData; + int dataSize; + const uchar *externalCMap; + quint32 cmapOffset; + int cmapSize; + quint32 glyphMapOffset; + quint32 glyphMapEntries; + quint32 glyphDataOffset; + quint32 glyphDataSize; + QString internalFileName; + QString encodedFileName; + bool readOnly; + + FaceId face_id; + QByteArray freetypeCMapTable; + mutable bool kerning_pairs_loaded; +}; + +struct QPAGenerator +{ + QPAGenerator(QBuffer *device, QFontEngine *engine) + : dev(device), fe(engine) {} + + void generate(); + void writeHeader(); + void writeGMap(); + void writeBlock(QFontEngineQPA::BlockTag tag, const QByteArray &data); + + void writeTaggedString(QFontEngineQPA::HeaderTag tag, const QByteArray &string); + void writeTaggedUInt32(QFontEngineQPA::HeaderTag tag, quint32 value); + void writeTaggedUInt8(QFontEngineQPA::HeaderTag tag, quint8 value); + void writeTaggedQFixed(QFontEngineQPA::HeaderTag tag, QFixed value); + + void writeUInt16(quint16 value) { value = qToBigEndian(value); dev->write((const char *)&value, sizeof(value)); } + void writeUInt32(quint32 value) { value = qToBigEndian(value); dev->write((const char *)&value, sizeof(value)); } + void writeUInt8(quint8 value) { dev->write((const char *)&value, sizeof(value)); } + void writeInt8(qint8 value) { dev->write((const char *)&value, sizeof(value)); } + + void align4() { while (dev->pos() & 3) { dev->putChar('\0'); } } + + QBuffer *dev; + QFontEngine *fe; +}; + +class QFontEngineMultiQPA : public QFontEngineMulti +{ +public: + QFontEngineMultiQPA(QFontEngine *fe, int script, const QStringList &fallbacks); + + void loadEngine(int at); + +private: + QStringList fallbackFamilies; + int script; +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QFONTENGINE_QPA_P_H diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp new file mode 100644 index 0000000..7bb1f9a --- /dev/null +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -0,0 +1,195 @@ +#include "qplatformfontdatabase_qpa.h" +#include +#include +#include +#include + +QT_BEGIN_NAMESPACE + +extern void qt_registerFont(const QString &familyname, const QString &foundryname, int weight, + QFont::Style style, int stretch, bool antialiased,bool scalable, int pixelSize, + const QSupportedWritingSystems &writingSystems, void *hanlde); + +void QPlatformFontDatabase::registerQPF2Font(const QByteArray &dataArray, void *handle) +{ + if (dataArray.size() == 0) + return; + + const uchar *data = reinterpret_cast(dataArray.constData()); + if (QFontEngineQPA::verifyHeader(data, dataArray.size())) { + QString fontName = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_FontName).toString(); + int pixelSize = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_PixelSize).toInt(); + QVariant weight = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_Weight); + QVariant style = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_Style); + QByteArray writingSystemBits = QFontEngineQPA::extractHeaderField(data, QFontEngineQPA::Tag_WritingSystems).toByteArray(); + + if (!fontName.isEmpty() && pixelSize) { + int fontWeight = 50; + if (weight.type() == QVariant::Int || weight.type() == QVariant::UInt) + fontWeight = weight.toInt(); + + QFont::Style fontStyle = static_cast(style.toInt()); + + QSupportedWritingSystems writingSystems; + for (int i = 0; i < writingSystemBits.count(); ++i) { + uchar currentByte = writingSystemBits.at(i); + for (int j = 0; j < 8; ++j) { + if (currentByte & 1) + writingSystems.setSupported(QFontDatabase::WritingSystem(i * 8 + j)); + currentByte >>= 1; + } + } + + registerFont(fontName,QString(),fontWeight,fontStyle,100,true,false,pixelSize,writingSystems,handle); + } + } else { + qDebug() << "header verification of QPF2 font failed. maybe it is corrupt?"; + } +} + +void QPlatformFontDatabase::registerFont(const QString &familyname, const QString &foundryname, int weight, + QFont::Style style, int stretch, bool antialiased, bool scalable, int pixelSize, + const QSupportedWritingSystems &writingSystems, void *usrPtr) +{ + if (scalable) + pixelSize = 0; + qt_registerFont(familyname,foundryname,weight,style,stretch,antialiased,scalable,pixelSize,writingSystems,usrPtr); +} + +class QWritingSystemsPrivate +{ +public: + QWritingSystemsPrivate() + : ref(1) + , vector(QFontDatabase::WritingSystemsCount,false) + { + } + + QWritingSystemsPrivate(const QWritingSystemsPrivate *other) + : ref(1) + , vector(other->vector) + { + } + + QAtomicInt ref; + QVector vector; +}; + +QSupportedWritingSystems::QSupportedWritingSystems() +{ + d = new QWritingSystemsPrivate; +} + +QSupportedWritingSystems::QSupportedWritingSystems(const QSupportedWritingSystems &other) +{ + d = other.d; + d->ref.ref(); +} + +QSupportedWritingSystems &QSupportedWritingSystems::operator=(const QSupportedWritingSystems &other) +{ + if (d != other.d) { + other.d->ref.ref(); + if (!d->ref.deref()) + delete d; + d = other.d; + } + return *this; +} + +QSupportedWritingSystems::~QSupportedWritingSystems() +{ + if (!d->ref.deref()) + delete d; +} + +void QSupportedWritingSystems::detach() +{ + if (d->ref != 1) { + QWritingSystemsPrivate *newd = new QWritingSystemsPrivate(d); + if (!d->ref.deref()) + delete d; + d = newd; + } +} + +void QSupportedWritingSystems::setSupported(QFontDatabase::WritingSystem writingSystem, bool support) +{ + detach(); + d->vector[writingSystem] = support; +} + +bool QSupportedWritingSystems::supported(QFontDatabase::WritingSystem writingSystem) const +{ + return d->vector.at(writingSystem); +} + +void QPlatformFontDatabase::populateFontDatabase() +{ + QString fontpath = fontDir(); + + if(!QFile::exists(fontpath)) { + qFatal("QFontDatabase: Cannot find font directory %s - is Qt installed correctly?", + qPrintable(fontpath)); + } + + QDir dir(fontpath); + dir.setNameFilters(QStringList() << QLatin1String("*.qpf2")); + dir.refresh(); + for (int i = 0; i < int(dir.count()); ++i) { + const QByteArray fileName = QFile::encodeName(dir.absoluteFilePath(dir[i])); + QFile file(QString::fromLocal8Bit(fileName)); + if (file.open(QFile::ReadOnly)) { + const QByteArray fileData = file.readAll(); + QByteArray *fileDataPtr = new QByteArray(fileData); + registerQPF2Font(fileData, fileDataPtr); + } + } +} + +QFontEngine *QPlatformFontDatabase::fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle) +{ + Q_UNUSED(script); + Q_UNUSED(handle); + QByteArray *fileDataPtr = static_cast(handle); + QFontEngineQPA *engine = new QFontEngineQPA(fontDef,*fileDataPtr); + qDebug() << fontDef.pixelSize << fontDef.weight << fontDef.style << fontDef.stretch << fontDef.styleHint << fontDef.styleStrategy << fontDef.family << script; + return engine; +} + +QStringList QPlatformFontDatabase::fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const +{ + Q_UNUSED(family); + Q_UNUSED(style); + Q_UNUSED(script); + return QStringList(); +} + +void QPlatformFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName) +{ + Q_UNUSED(fontData); + Q_UNUSED(fileName); + + qWarning("This plugin does not support application fonts"); +} + +void QPlatformFontDatabase::releaseHandle(void *handle) +{ + QByteArray *fileDataPtr = static_cast(handle); + delete fileDataPtr; +} + +QString QPlatformFontDatabase::fontDir() const +{ + QString fontpath = QString::fromLocal8Bit(qgetenv("QT_QPA_FONTDIR")); + if (fontpath.isEmpty()) { +#ifndef QT_NO_SETTINGS + fontpath = QLibraryInfo::location(QLibraryInfo::LibrariesPath); + fontpath += QLatin1String("/fonts"); +#endif + } + + return fontpath; +} + +QT_END_NAMESPACE diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h new file mode 100644 index 0000000..a34033f --- /dev/null +++ b/src/gui/text/qplatformfontdatabase_qpa.h @@ -0,0 +1,65 @@ +#ifndef QPLATFORMFONTDATABASE_QPA_H +#define QPLATFORMFONTDATABASE_QPA_H + +#include +#include +#include +#include +#include +#include + +QT_BEGIN_HEADER + +QT_BEGIN_NAMESPACE + +class QWritingSystemsPrivate; + +class Q_GUI_EXPORT QSupportedWritingSystems +{ +public: + + QSupportedWritingSystems(); + QSupportedWritingSystems(const QSupportedWritingSystems &other); + QSupportedWritingSystems &operator=(const QSupportedWritingSystems &other); + ~QSupportedWritingSystems(); + + void setSupported(QFontDatabase::WritingSystem, bool supported = true); + bool supported(QFontDatabase::WritingSystem) const; + +private: + void detach(); + + QWritingSystemsPrivate *d; + + friend Q_GUI_EXPORT bool operator==(const QSupportedWritingSystems &, const QSupportedWritingSystems &); + friend Q_GUI_EXPORT bool operator!=(const QSupportedWritingSystems &, const QSupportedWritingSystems &); +}; + +Q_GUI_EXPORT bool operator==(const QSupportedWritingSystems &, const QSupportedWritingSystems &); +Q_GUI_EXPORT bool operator!=(const QSupportedWritingSystems &, const QSupportedWritingSystems &); + +class QFontRequestPrivate; + +class Q_GUI_EXPORT QPlatformFontDatabase +{ +public: + virtual void populateFontDatabase(); + virtual QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle); + virtual QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const; + virtual void addApplicationFont(const QByteArray &fontData, const QString &fileName); + virtual void releaseHandle(void *handle); + + virtual QString fontDir() const; + + //callback + static void registerQPF2Font(const QByteArray &dataArray, void *handle); + static void registerFont(const QString &familyname, const QString &foundryname, int weight, + QFont::Style style, int stetch, bool antialiased, bool scalable, int pixelSize, + const QSupportedWritingSystems &writingSystems, void *handle); +}; + +QT_END_NAMESPACE + +QT_END_HEADER + +#endif // QPLATFORMFONTDATABASE_QPA_H diff --git a/src/gui/text/text.pri b/src/gui/text/text.pri index 1040ad8..8721d80 100644 --- a/src/gui/text/text.pri +++ b/src/gui/text/text.pri @@ -25,7 +25,7 @@ HEADERS += \ text/qabstracttextdocumentlayout.h \ text/qtextdocumentlayout_p.h \ text/qtextcursor.h \ - text/qtextcursor_p.h \ + text/qtextcursor_p.h \ text/qtextdocumentfragment.h \ text/qtextdocumentfragment_p.h \ text/qtextimagehandler_p.h \ @@ -39,7 +39,7 @@ HEADERS += \ text/qzipwriter_p.h \ text/qtextodfwriter_p.h \ text/qstatictext_p.h \ - text/qstatictext.h + text/qstatictext.h SOURCES += \ text/qfont.cpp \ @@ -69,7 +69,7 @@ SOURCES += \ text/qcssparser.cpp \ text/qzip.cpp \ text/qtextodfwriter.cpp \ - text/qstatictext.cpp + text/qstatictext.cpp win32 { SOURCES += \ @@ -112,15 +112,15 @@ embedded { qpa { SOURCES += \ - text/qfont_qws.cpp \ - text/qfontengine_ft.cpp \ - text/qfontengine_qpf.cpp \ - text/qabstractfontengine_qws.cpp + text/qfont_qpa.cpp \ + text/qfontengine_qpa.cpp \ + text/qplatformfontdatabase_qpa.cpp + HEADERS += \ - text/qfontengine_ft_p.h \ - text/qabstractfontengine_qws.h \ - text/qabstractfontengine_p.h + text/qplatformfontdatabase_qpa.h + DEFINES += QT_NO_FONTCONFIG + DEFINES += QT_NO_FREETYPE } symbian { @@ -142,6 +142,7 @@ symbian { } } +!qpa { contains(QT_CONFIG, freetype) { SOURCES += \ ../3rdparty/freetype/src/base/ftbase.c \ @@ -215,6 +216,7 @@ contains(QT_CONFIG, freetype) { contains(QT_CONFIG, fontconfig) { CONFIG += opentype } +}#!qpa DEFINES += QT_NO_OPENTYPE INCLUDEPATH += ../3rdparty/harfbuzz/src diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index f81ec31..48128fb 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -27,5 +27,7 @@ HEADERS = qdirectfbintegration.h \ qdirectfbinput.h \ qdirectfbcursor.h \ qdirectfbwindow.h + +include(../fontdatabases/genericunix/genericunix.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index b19a1d9..64b98db 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -46,6 +46,8 @@ #include "qdirectfbcursor.h" #include "qdirectfbwindow.h" +#include "qgenericunixfontdatabase.h" + #include #include @@ -80,6 +82,7 @@ QDirectFbScreen::~QDirectFbScreen() } QDirectFbIntegration::QDirectFbIntegration() + : mFontDb(new QGenericUnixFontDatabase()) { const QStringList args = QCoreApplication::arguments(); int argc = args.size(); @@ -133,9 +136,9 @@ QWindowSurface *QDirectFbIntegration::createWindowSurface(QWidget *widget, WId w return new QDirectFbWindowSurface(widget,winId); } -QBlittable *QDirectFbIntegration::createBlittable(const QSize &size) const +QPlatformFontDatabase *QDirectFbIntegration::fontDatabase() const { - return new QDirectFbBlitter(size); + return mFontDb; } QT_END_NAMESPACE diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h index 27847e2..d2d8367 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.h +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -87,14 +87,16 @@ public: QPixmapData *createPixmapData(QPixmapData::PixelType type) const; QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; - QBlittable *createBlittable(const QSize &size) const; QList screens() const { return mScreens; } + QPlatformFontDatabase *fontDatabase() const; + private: QList mScreens; QDirectFbInput *mInput; QThread *mInputRunner; + QPlatformFontDatabase *mFontDb; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/eglfs.pro b/src/plugins/platforms/eglfs/eglfs.pro index 5d1318a..7ad8fd9 100644 --- a/src/plugins/platforms/eglfs/eglfs.pro +++ b/src/plugins/platforms/eglfs/eglfs.pro @@ -25,5 +25,7 @@ HEADERS = qeglfsintegration.h \ qeglfswindowsurface.h \ qeglfsscreen.h +include(../fontdatabases/genericunix/genericunix.pri) + target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp index 2b673ae..07605ec 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp @@ -48,11 +48,14 @@ #include #include +#include "qgenericunixfontdatabase.h" + #include QT_BEGIN_NAMESPACE QEglFSIntegration::QEglFSIntegration() + mFontDb(new QGenericUnixFontDatabase()) { m_primaryScreen = new QEglFSScreen(EGL_DEFAULT_DISPLAY); @@ -90,4 +93,9 @@ QWindowSurface *QEglFSIntegration::createWindowSurface(QWidget *widget, WId winI return new QEglFSWindowSurface(m_primaryScreen,widget); } +QPlatformFontDatabase *QEglFSIntegration::fontDatabase() const +{ + return mFontDb; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h index f15b6b2..0342539 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.h +++ b/src/plugins/platforms/eglfs/qeglfsintegration.h @@ -62,7 +62,10 @@ public: QList screens() const { return mScreens; } + QPlatformFontDatabase *fontDatabase() const; + private: + QPlatformFontDatabase *mFontDb; QList mScreens; QEglFSScreen *m_primaryScreen; }; diff --git a/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri b/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri new file mode 100644 index 0000000..21aedba --- /dev/null +++ b/src/plugins/platforms/fontdatabases/basicunix/basicunix.pri @@ -0,0 +1,82 @@ +DEFINES += QT_NO_FONTCONFIG +HEADERS += \ + $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h \ + $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft_p.h + +SOURCES += \ + $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp \ + $$QT_SOURCE_TREE/src/gui/text/qfontengine_ft.cpp + +INCLUDEPATH += $$QT_SOURCE_TREE/src/3rdparty/harfbuzz/src + +INCLUDEPATH += $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/basicunix + +CONFIG += opentype + +contains(QT_CONFIG, freetype) { + SOURCES += \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftbase.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftbbox.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftdebug.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftglyph.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftinit.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftmm.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/fttype1.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftsynth.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftbitmap.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/bdf/bdf.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/cache/ftcache.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/cff/cff.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/cid/type1cid.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/gzip/ftgzip.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/pcf/pcf.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/pfr/pfr.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/psaux/psaux.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/pshinter/pshinter.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/psnames/psmodule.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/raster/raster.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/sfnt/sfnt.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/smooth/smooth.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/truetype/truetype.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/type1/type1.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/type42/type42.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/winfonts/winfnt.c \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/lzw/ftlzw.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvalid.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvbase.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvgdef.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvjstf.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvcommn.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvgpos.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvgsub.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/otvalid/otvmod.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afangles.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afglobal.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/aflatin.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afmodule.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afdummy.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afhints.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/afloader.c\ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/autofit/autofit.c + + symbian { + SOURCES += \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src/base/ftsystem.c + } else { + SOURCES += \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/builds/unix/ftsystem.c + INCLUDEPATH += \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/builds/unix + } + + INCLUDEPATH += \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/src \ + $$QT_SOURCE_TREE/src/3rdparty/freetype/include + + DEFINES += FT2_BUILD_LIBRARY FT_CONFIG_OPTION_SYSTEM_ZLIB + } else:contains(QT_CONFIG, system-freetype) { + # pull in the proper freetype2 include directory + include($$QT_SOURCE_TREE/config.tests/unix/freetype/freetype.pri) + LIBS_PRIVATE += -lfreetype + } + diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp new file mode 100644 index 0000000..5b8ca63 --- /dev/null +++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp @@ -0,0 +1,281 @@ +#include "qbasicunixfontdatabase.h" + +#include +#include + +#include +#include +#include + +#undef QT_NO_FREETYPE +#include +#include + +#include +#include FT_TRUETYPE_TABLES_H + +#define SimplifiedChineseCsbBit 18 +#define TraditionalChineseCsbBit 20 +#define JapaneseCsbBit 17 +#define KoreanCsbBit 21 + +static int requiredUnicodeBits[QFontDatabase::WritingSystemsCount][2] = { + // Any, + { 127, 127 }, + // Latin, + { 0, 127 }, + // Greek, + { 7, 127 }, + // Cyrillic, + { 9, 127 }, + // Armenian, + { 10, 127 }, + // Hebrew, + { 11, 127 }, + // Arabic, + { 13, 127 }, + // Syriac, + { 71, 127 }, + //Thaana, + { 72, 127 }, + //Devanagari, + { 15, 127 }, + //Bengali, + { 16, 127 }, + //Gurmukhi, + { 17, 127 }, + //Gujarati, + { 18, 127 }, + //Oriya, + { 19, 127 }, + //Tamil, + { 20, 127 }, + //Telugu, + { 21, 127 }, + //Kannada, + { 22, 127 }, + //Malayalam, + { 23, 127 }, + //Sinhala, + { 73, 127 }, + //Thai, + { 24, 127 }, + //Lao, + { 25, 127 }, + //Tibetan, + { 70, 127 }, + //Myanmar, + { 74, 127 }, + // Georgian, + { 26, 127 }, + // Khmer, + { 80, 127 }, + // SimplifiedChinese, + { 126, 127 }, + // TraditionalChinese, + { 126, 127 }, + // Japanese, + { 126, 127 }, + // Korean, + { 56, 127 }, + // Vietnamese, + { 0, 127 }, // same as latin1 + // Other, + { 126, 127 }, + // Ogham, + { 78, 127 }, + // Runic, + { 79, 127 }, + // Nko, + { 14, 127 }, +}; + +static QSupportedWritingSystems determineWritingSystemsFromTrueTypeBits(quint32 unicodeRange[4], quint32 codePageRange[2]) +{ + QSupportedWritingSystems writingSystems; + bool hasScript = false; + + int i; + for(i = 0; i < QFontDatabase::WritingSystemsCount; i++) { + int bit = requiredUnicodeBits[i][0]; + int index = bit/32; + int flag = 1 << (bit&31); + if (bit != 126 && unicodeRange[index] & flag) { + bit = requiredUnicodeBits[i][1]; + index = bit/32; + + flag = 1 << (bit&31); + if (bit == 127 || unicodeRange[index] & flag) { + writingSystems.setSupported(QFontDatabase::WritingSystem(i)); + hasScript = true; + // qDebug("font %s: index=%d, flag=%8x supports script %d", familyName.latin1(), index, flag, i); + } + } + } + if(codePageRange[0] & (1 << SimplifiedChineseCsbBit)) { + writingSystems.setSupported(QFontDatabase::SimplifiedChinese); + hasScript = true; + //qDebug("font %s supports Simplified Chinese", familyName.latin1()); + } + if(codePageRange[0] & (1 << TraditionalChineseCsbBit)) { + writingSystems.setSupported(QFontDatabase::TraditionalChinese); + hasScript = true; + //qDebug("font %s supports Traditional Chinese", familyName.latin1()); + } + if(codePageRange[0] & (1 << JapaneseCsbBit)) { + writingSystems.setSupported(QFontDatabase::Japanese); + hasScript = true; + //qDebug("font %s supports Japanese", familyName.latin1()); + } + if(codePageRange[0] & (1 << KoreanCsbBit)) { + writingSystems.setSupported(QFontDatabase::Korean); + hasScript = true; + //qDebug("font %s supports Korean", familyName.latin1()); + } + if (!hasScript) + writingSystems.setSupported(QFontDatabase::Symbol); + + return writingSystems; +} + +static inline bool scriptRequiresOpenType(int script) +{ + return ((script >= QUnicodeTables::Syriac && script <= QUnicodeTables::Sinhala) + || script == QUnicodeTables::Khmer || script == QUnicodeTables::Nko); +} + +void QBasicUnixFontDatabase::populateFontDatabase() +{ + QPlatformFontDatabase::populateFontDatabase(); + QString fontpath = fontDir(); + + if(!QFile::exists(fontpath)) { + qFatal("QFontDatabase: Cannot find font directory %s - is Qt installed correctly?", + qPrintable(fontpath)); + } + + QDir dir(fontpath); + dir.setNameFilters(QStringList() << QLatin1String("*.ttf") + << QLatin1String("*.ttc") << QLatin1String("*.pfa") + << QLatin1String("*.pfb")); + dir.refresh(); + for (int i = 0; i < int(dir.count()); ++i) { + const QByteArray file = QFile::encodeName(dir.absoluteFilePath(dir[i])); +// qDebug() << "looking at" << file; + addTTFile(QByteArray(), file); + } +} + +QFontEngine *QBasicUnixFontDatabase::fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *usrPtr) +{ + QFontEngineFT *engine; + FontFile *fontfile = static_cast (usrPtr); + QFontEngine::FaceId fid; + fid.filename = fontfile->fileName.toLocal8Bit(); + fid.index = fontfile->indexValue; + engine = new QFontEngineFT(fontDef); + + bool antialias = !(fontDef.styleStrategy & QFont::NoAntialias); + QFontEngineFT::GlyphFormat format = antialias? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono; + if (!engine->init(fid,antialias,format)) { + delete engine; + engine = 0; + return engine; + } + if (engine->invalid()) { + delete engine; + engine = 0; + } else if (scriptRequiresOpenType(script)) { + HB_Face hbFace = engine->harfbuzzFace(); + if (!hbFace || !hbFace->supported_scripts[script]) { + delete engine; + engine = 0; + } + } + + return engine; +} + +QStringList QBasicUnixFontDatabase::fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const +{ + Q_UNUSED(family); + Q_UNUSED(style); + Q_UNUSED(script); + return QStringList(); +} + +void QBasicUnixFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName) +{ + addTTFile(fontData,fileName.toLocal8Bit()); +} + +void QBasicUnixFontDatabase::releaseHandle(void *handle) +{ + FontFile *file = static_cast(handle); + delete file; +} + +void QBasicUnixFontDatabase::addTTFile(const QByteArray &fontData, const QByteArray &file) +{ + extern FT_Library qt_getFreetype(); + FT_Library library = qt_getFreetype(); + + int index = 0; + int numFaces = 0; + do { + FT_Face face; + FT_Error error; + if (!fontData.isEmpty()) { + error = FT_New_Memory_Face(library, (const FT_Byte *)fontData.constData(), fontData.size(), index, &face); + } else { + error = FT_New_Face(library, file.constData(), index, &face); + } + if (error != FT_Err_Ok) { + qDebug() << "FT_New_Face failed with index" << index << ":" << hex << error; + break; + } + numFaces = face->num_faces; + + int weight = QFont::Normal; + + QFont::Style style = QFont::StyleNormal; + if (face->style_flags & FT_STYLE_FLAG_ITALIC) + style = QFont::StyleItalic; + + if (face->style_flags & FT_STYLE_FLAG_BOLD) + weight = QFont::Bold; + + QSupportedWritingSystems writingSystems; + // detect symbol fonts + for (int i = 0; i < face->num_charmaps; ++i) { + FT_CharMap cm = face->charmaps[i]; + if (cm->encoding == ft_encoding_adobe_custom + || cm->encoding == ft_encoding_symbol) { + writingSystems.setSupported(QFontDatabase::Symbol); + break; + } + } + + TT_OS2 *os2 = (TT_OS2 *)FT_Get_Sfnt_Table(face, ft_sfnt_os2); + if (os2) { + quint32 unicodeRange[4] = { + os2->ulUnicodeRange1, os2->ulUnicodeRange2, os2->ulUnicodeRange3, os2->ulUnicodeRange4 + }; + quint32 codePageRange[2] = { + os2->ulCodePageRange1, os2->ulCodePageRange2 + }; + + writingSystems = determineWritingSystemsFromTrueTypeBits(unicodeRange, codePageRange); + } + + QString family = QString::fromAscii(face->family_name); + FontFile *fontFile = new FontFile; + fontFile->fileName = file; + fontFile->indexValue = index; + + registerFont(family,"",weight,style,100,true,true,0,writingSystems,fontFile); + + FT_Done_Face(face); + ++index; + } while (index < numFaces); +} diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h new file mode 100644 index 0000000..401a4aa --- /dev/null +++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h @@ -0,0 +1,26 @@ +#ifndef QBASICUNIXFONTDATABASE_H +#define QBASICUNIXFONTDATABASE_H + +#include +#include +#include + +struct FontFile +{ + QString fileName; + int indexValue; +}; + +class QBasicUnixFontDatabase : public QPlatformFontDatabase +{ +public: + void populateFontDatabase(); + QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle); + QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const; + void addApplicationFont(const QByteArray &fontData, const QString &fileName); + void releaseHandle(void *handle); + + static void addTTFile(const QByteArray &fontData, const QByteArray &file); +}; + +#endif // QBASICUNIXFONTDATABASE_H diff --git a/src/plugins/platforms/fontdatabases/fontconfig/fontconfig.pri b/src/plugins/platforms/fontdatabases/fontconfig/fontconfig.pri new file mode 100644 index 0000000..19c74ed --- /dev/null +++ b/src/plugins/platforms/fontdatabases/fontconfig/fontconfig.pri @@ -0,0 +1,12 @@ +include(../basicunix/basicunix.pri) + +HEADERS += \ + $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h + +SOURCES += \ + $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp + +INCLUDEPATH += $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/fontconfig +LIBS_PRIVATE += -lfontconfig + + diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp new file mode 100644 index 0000000..562cb2d --- /dev/null +++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -0,0 +1,528 @@ +#include "qfontconfigdatabase.h" + +#include +#include + +#include + +#include +#include + +#include +#include + + + +#include +#include FT_TRUETYPE_TABLES_H + +#include + +#define SimplifiedChineseCsbBit 18 +#define TraditionalChineseCsbBit 20 +#define JapaneseCsbBit 17 +#define KoreanCsbBit 21 + +static inline bool requiresOpenType(int writingSystem) +{ + return ((writingSystem >= QFontDatabase::Syriac && writingSystem <= QFontDatabase::Sinhala) + || writingSystem == QFontDatabase::Khmer || writingSystem == QFontDatabase::Nko); +} +static inline bool scriptRequiresOpenType(int script) +{ + return ((script >= QUnicodeTables::Syriac && script <= QUnicodeTables::Sinhala) + || script == QUnicodeTables::Khmer || script == QUnicodeTables::Nko); +} + +static int getFCWeight(int fc_weight) +{ + int qtweight = QFont::Black; + if (fc_weight <= (FC_WEIGHT_LIGHT + FC_WEIGHT_MEDIUM) / 2) + qtweight = QFont::Light; + else if (fc_weight <= (FC_WEIGHT_MEDIUM + FC_WEIGHT_DEMIBOLD) / 2) + qtweight = QFont::Normal; + else if (fc_weight <= (FC_WEIGHT_DEMIBOLD + FC_WEIGHT_BOLD) / 2) + qtweight = QFont::DemiBold; + else if (fc_weight <= (FC_WEIGHT_BOLD + FC_WEIGHT_BLACK) / 2) + qtweight = QFont::Bold; + + return qtweight; +} + +static const char *specialLanguages[] = { + "en", // Common + "el", // Greek + "ru", // Cyrillic + "hy", // Armenian + "he", // Hebrew + "ar", // Arabic + "syr", // Syriac + "div", // Thaana + "hi", // Devanagari + "bn", // Bengali + "pa", // Gurmukhi + "gu", // Gujarati + "or", // Oriya + "ta", // Tamil + "te", // Telugu + "kn", // Kannada + "ml", // Malayalam + "si", // Sinhala + "th", // Thai + "lo", // Lao + "bo", // Tibetan + "my", // Myanmar + "ka", // Georgian + "ko", // Hangul + "", // Ogham + "", // Runic + "km", // Khmer + "" // N'Ko +}; +enum { SpecialLanguageCount = sizeof(specialLanguages) / sizeof(const char *) }; + +static const ushort specialChars[] = { + 0, // English + 0, // Greek + 0, // Cyrillic + 0, // Armenian + 0, // Hebrew + 0, // Arabic + 0, // Syriac + 0, // Thaana + 0, // Devanagari + 0, // Bengali + 0, // Gurmukhi + 0, // Gujarati + 0, // Oriya + 0, // Tamil + 0xc15, // Telugu + 0xc95, // Kannada + 0xd15, // Malayalam + 0xd9a, // Sinhala + 0, // Thai + 0, // Lao + 0, // Tibetan + 0x1000, // Myanmar + 0, // Georgian + 0, // Hangul + 0x1681, // Ogham + 0x16a0, // Runic + 0, // Khmer + 0x7ca // N'Ko +}; +enum { SpecialCharCount = sizeof(specialChars) / sizeof(ushort) }; + +// this could become a list of all languages used for each writing +// system, instead of using the single most common language. +static const char *languageForWritingSystem[] = { + 0, // Any + "en", // Latin + "el", // Greek + "ru", // Cyrillic + "hy", // Armenian + "he", // Hebrew + "ar", // Arabic + "syr", // Syriac + "div", // Thaana + "hi", // Devanagari + "bn", // Bengali + "pa", // Gurmukhi + "gu", // Gujarati + "or", // Oriya + "ta", // Tamil + "te", // Telugu + "kn", // Kannada + "ml", // Malayalam + "si", // Sinhala + "th", // Thai + "lo", // Lao + "bo", // Tibetan + "my", // Myanmar + "ka", // Georgian + "km", // Khmer + "zh-cn", // SimplifiedChinese + "zh-tw", // TraditionalChinese + "ja", // Japanese + "ko", // Korean + "vi", // Vietnamese + 0, // Symbol + 0, // Ogham + 0, // Runic + 0 // N'Ko +}; +enum { LanguageCount = sizeof(languageForWritingSystem) / sizeof(const char *) }; + +// Unfortunately FontConfig doesn't know about some languages. We have to test these through the +// charset. The lists below contain the systems where we need to do this. +static const ushort sampleCharForWritingSystem[] = { + 0, // Any + 0, // Latin + 0, // Greek + 0, // Cyrillic + 0, // Armenian + 0, // Hebrew + 0, // Arabic + 0, // Syriac + 0, // Thaana + 0, // Devanagari + 0, // Bengali + 0, // Gurmukhi + 0, // Gujarati + 0, // Oriya + 0, // Tamil + 0xc15, // Telugu + 0xc95, // Kannada + 0xd15, // Malayalam + 0xd9a, // Sinhala + 0, // Thai + 0, // Lao + 0, // Tibetan + 0x1000, // Myanmar + 0, // Georgian + 0, // Khmer + 0, // SimplifiedChinese + 0, // TraditionalChinese + 0, // Japanese + 0, // Korean + 0, // Vietnamese + 0, // Symbol + 0x1681, // Ogham + 0x16a0, // Runic + 0x7ca // N'Ko +}; +enum { SampleCharCount = sizeof(sampleCharForWritingSystem) / sizeof(ushort) }; + +// Newer FontConfig let's us sort out fonts that contain certain glyphs, but no +// open type tables for is directly. Do this so we don't pick some strange +// pseudo unicode font +static const char *openType[] = { + 0, // Any + 0, // Latin + 0, // Greek + 0, // Cyrillic + 0, // Armenian + 0, // Hebrew + 0, // Arabic + "syrc", // Syriac + "thaa", // Thaana + "deva", // Devanagari + "beng", // Bengali + "guru", // Gurmukhi + "gurj", // Gujarati + "orya", // Oriya + "taml", // Tamil + "telu", // Telugu + "knda", // Kannada + "mlym", // Malayalam + "sinh", // Sinhala + 0, // Thai + 0, // Lao + "tibt", // Tibetan + "mymr", // Myanmar + 0, // Georgian + "khmr", // Khmer + 0, // SimplifiedChinese + 0, // TraditionalChinese + 0, // Japanese + 0, // Korean + 0, // Vietnamese + 0, // Symbol + 0, // Ogham + 0, // Runic + "nko " // N'Ko +}; + +void QFontconfigDatabase::populateFontDatabase() +{ + FcFontSet *fonts; + + QString familyName; + FcChar8 *value = 0; + int weight_value; + int slant_value; + int spacing_value; + FcChar8 *file_value; + int indexValue; + FcChar8 *foundry_value; + FcBool scalable; + FcBool antialias; + + { + FcObjectSet *os = FcObjectSetCreate(); + FcPattern *pattern = FcPatternCreate(); + const char *properties [] = { + FC_FAMILY, FC_WEIGHT, FC_SLANT, + FC_SPACING, FC_FILE, FC_INDEX, + FC_LANG, FC_CHARSET, FC_FOUNDRY, FC_SCALABLE, FC_PIXEL_SIZE, FC_WEIGHT, + FC_WIDTH, +#if FC_VERSION >= 20297 + FC_CAPABILITY, +#endif + (const char *)0 + }; + const char **p = properties; + while (*p) { + FcObjectSetAdd(os, *p); + ++p; + } + fonts = FcFontList(0, pattern, os); + FcObjectSetDestroy(os); + FcPatternDestroy(pattern); + } + + for (int i = 0; i < fonts->nfont; i++) { + if (FcPatternGetString(fonts->fonts[i], FC_FAMILY, 0, &value) != FcResultMatch) + continue; + // capitalize(value); + familyName = QString::fromUtf8((const char *)value); + slant_value = FC_SLANT_ROMAN; + weight_value = FC_WEIGHT_MEDIUM; + spacing_value = FC_PROPORTIONAL; + file_value = 0; + indexValue = 0; + scalable = FcTrue; + + + if (FcPatternGetInteger (fonts->fonts[i], FC_SLANT, 0, &slant_value) != FcResultMatch) + slant_value = FC_SLANT_ROMAN; + if (FcPatternGetInteger (fonts->fonts[i], FC_WEIGHT, 0, &weight_value) != FcResultMatch) + weight_value = FC_WEIGHT_MEDIUM; + if (FcPatternGetInteger (fonts->fonts[i], FC_SPACING, 0, &spacing_value) != FcResultMatch) + spacing_value = FC_PROPORTIONAL; + if (FcPatternGetString (fonts->fonts[i], FC_FILE, 0, &file_value) != FcResultMatch) + file_value = 0; + if (FcPatternGetInteger (fonts->fonts[i], FC_INDEX, 0, &indexValue) != FcResultMatch) + indexValue = 0; + if (FcPatternGetBool(fonts->fonts[i], FC_SCALABLE, 0, &scalable) != FcResultMatch) + scalable = FcTrue; + if (FcPatternGetString(fonts->fonts[i], FC_FOUNDRY, 0, &foundry_value) != FcResultMatch) + foundry_value = 0; + if(FcPatternGetBool(fonts->fonts[i],FC_ANTIALIAS,0,&antialias) != FcResultMatch) + antialias = true; + + QSupportedWritingSystems writingSystems; + FcLangSet *langset = 0; + FcResult res = FcPatternGetLangSet(fonts->fonts[i], FC_LANG, 0, &langset); + if (res == FcResultMatch) { + for (int i = 1; i < LanguageCount; ++i) { + const FcChar8 *lang = (const FcChar8*) languageForWritingSystem[i]; + if (lang) { + FcLangResult langRes = FcLangSetHasLang(langset, lang); + if (langRes != FcLangDifferentLang) + writingSystems.setSupported(QFontDatabase::WritingSystem(i)); + } + } + } else { + // we set Other to supported for symbol fonts. It makes no + // sense to merge these with other ones, as they are + // special in a way. + writingSystems.setSupported(QFontDatabase::Other); + } + + FcCharSet *cs = 0; + res = FcPatternGetCharSet(fonts->fonts[i], FC_CHARSET, 0, &cs); + if (res == FcResultMatch) { + // some languages are not supported by FontConfig, we rather check the + // charset to detect these + for (int i = 1; i < SampleCharCount; ++i) { + if (!sampleCharForWritingSystem[i]) + continue; + if (FcCharSetHasChar(cs, sampleCharForWritingSystem[i])) + writingSystems.setSupported(QFontDatabase::WritingSystem(i)); + } + } + +#if FC_VERSION >= 20297 + for (int j = 1; j < LanguageCount; ++j) { + if (writingSystems.supported(QFontDatabase::WritingSystem(j)) + && requiresOpenType(j) && openType[j]) { + FcChar8 *cap; + res = FcPatternGetString (fonts->fonts[i], FC_CAPABILITY, 0, &cap); + if (res != FcResultMatch || !strstr((const char *)cap, openType[j])) + writingSystems.setSupported(QFontDatabase::WritingSystem(j),false); + } + } +#endif + + FontFile *fontFile = new FontFile; + fontFile->fileName = QLatin1String((const char *)file_value); + fontFile->indexValue = indexValue; + + QFont::Style style = (slant_value == FC_SLANT_ITALIC) + ? QFont::StyleItalic + : ((slant_value == FC_SLANT_OBLIQUE) + ? QFont::StyleOblique + : QFont::StyleNormal); + int weight = getFCWeight(weight_value); + + double pixel_size = 0; + if (!scalable) { + int width = 100; + FcPatternGetInteger (fonts->fonts[i], FC_WIDTH, 0, &width); + FcPatternGetDouble (fonts->fonts[i], FC_PIXEL_SIZE, 0, &pixel_size); + } + + QPlatformFontDatabase::registerFont(familyName,QLatin1String((const char *)foundry_value),weight,style,100,antialias,scalable,pixel_size,writingSystems,fontFile); +// qDebug() << familyName << (const char *)foundry_value << weight << style << &writingSystems << scalable << true << pixel_size; + } + + FcFontSetDestroy (fonts); + + struct FcDefaultFont { + const char *qtname; + const char *rawname; + bool fixed; + }; + const FcDefaultFont defaults[] = { + { "Serif", "serif", false }, + { "Sans Serif", "sans-serif", false }, + { "Monospace", "monospace", true }, + { 0, 0, false } + }; + const FcDefaultFont *f = defaults; + // aliases only make sense for 'common', not for any of the specials + QSupportedWritingSystems ws; + ws.setSupported(QFontDatabase::Latin); + + while (f->qtname) { + registerFont(f->qtname,"",50,QFont::StyleNormal,100,true,true,0,ws,0); + registerFont(f->qtname,"",50,QFont::StyleItalic,100,true,true,0,ws,0); + registerFont(f->qtname,"",50,QFont::StyleOblique,100,true,true,0,ws,0); + ++f; + } + + const FcDefaultFont *s = defaults; + QFont font("Sans Serif"); + font.setPointSize(9); + QApplication::setFont(font); +} + +QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables::Script script, void *usrPtr) +{ + QFontDef fontDef = f; + + QFontEngineFT *engine; + FontFile *fontfile = static_cast (usrPtr); + QFontEngine::FaceId fid; + fid.filename = fontfile->fileName.toLocal8Bit(); + fid.index = fontfile->indexValue; + + //try and get the pattern + FcPattern *pattern = FcPatternCreate(); + + bool antialias = !(fontDef.styleStrategy & QFont::NoAntialias); + QFontEngineFT::GlyphFormat format = antialias? QFontEngineFT::Format_A8 : QFontEngineFT::Format_Mono; + + engine = new QFontEngineFT(fontDef); + + FcValue value; + value.type = FcTypeString; + QByteArray cs = fontDef.family.toUtf8(); + value.u.s = (const FcChar8 *)cs.data(); + FcPatternAdd(pattern,FC_FAMILY,value,true); + + + value.u.s = (const FcChar8 *)fid.filename.data(); + FcPatternAdd(pattern,FC_FILE,value,true); + + value.type = FcTypeInteger; + value.u.i = fid.index; + FcPatternAdd(pattern,FC_INDEX,value,true); + + QFontEngineFT::HintStyle default_hint_style; + + if (FcConfigSubstitute(0,pattern,FcMatchPattern)) { + + //hinting + int hint_style = 0; + if (FcPatternGetInteger (pattern, FC_HINT_STYLE, 0, &hint_style) == FcResultNoMatch) + hint_style = QFontEngineFT::HintFull; + switch (hint_style) { + case FC_HINT_NONE: + default_hint_style = QFontEngineFT::HintNone; + break; + case FC_HINT_SLIGHT: + default_hint_style = QFontEngineFT::HintLight; + break; + case FC_HINT_MEDIUM: + default_hint_style = QFontEngineFT::HintMedium; + break; + default: + default_hint_style = QFontEngineFT::HintFull; + break; + } + } + + engine->setDefaultHintStyle(default_hint_style); + if (!engine->init(fid,antialias,format)) { + delete engine; + engine = 0; + return engine; + } + if (engine->invalid()) { + delete engine; + engine = 0; + } else if (scriptRequiresOpenType(script)) { + HB_Face hbFace = engine->harfbuzzFace(); + if (!hbFace || !hbFace->supported_scripts[script]) { + delete engine; + engine = 0; + } + } + + return engine; +} + +QStringList QFontconfigDatabase::fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const +{ + QStringList fallbackFamilies; + FcPattern *pattern = FcPatternCreate(); + if (!pattern) + return fallbackFamilies; + + FcValue value; + value.type = FcTypeString; + QByteArray cs = family.toUtf8(); + value.u.s = (const FcChar8 *)cs.data(); + FcPatternAdd(pattern,FC_FAMILY,value,true); + + int slant_value = FC_SLANT_ROMAN; + if (style == QFont::StyleItalic) + slant_value = FC_SLANT_ITALIC; + else if (style == QFont::StyleOblique) + slant_value = FC_SLANT_OBLIQUE; + FcPatternAddInteger(pattern, FC_SLANT, slant_value); + + if (script != QUnicodeTables::Common && *specialLanguages[script] != '\0') { + Q_ASSERT(script < QUnicodeTables::ScriptCount); + FcLangSet *ls = FcLangSetCreate(); + FcLangSetAdd(ls, (const FcChar8*)specialLanguages[script]); + FcPatternAddLangSet(pattern, FC_LANG, ls); + FcLangSetDestroy(ls); + } + + FcConfigSubstitute(0, pattern, FcMatchPattern); + FcConfigSubstitute(0, pattern, FcMatchFont); + + FcResult result = FcResultMatch; + FcFontSet *fontSet = FcFontSort(0,pattern,FcFalse,0,&result); + + if (fontSet && result == FcResultMatch) + { + for (int i = 0; i < fontSet->nfont; i++) { + FcChar8 *value = 0; + if (FcPatternGetString(fontSet->fonts[i], FC_FAMILY, 0, &value) != FcResultMatch) + continue; + // capitalize(value); + QString familyName = QString::fromUtf8((const char *)value); + if (!fallbackFamilies.contains(familyName,Qt::CaseInsensitive)) { + fallbackFamilies << familyName; + } + + } + } +// qDebug() << "fallbackFamilies for:" << family << fallbackFamilies; + + return fallbackFamilies; +} diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h new file mode 100644 index 0000000..5945b6e --- /dev/null +++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h @@ -0,0 +1,15 @@ +#ifndef QFONTCONFIGDATABASE_H +#define QFONTCONFIGDATABASE_H + +#include +#include "qbasicunixfontdatabase.h" + +class QFontconfigDatabase : public QBasicUnixFontDatabase +{ +public: + void populateFontDatabase(); + QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle); + QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const; +}; + +#endif // QFONTCONFIGDATABASE_H diff --git a/src/plugins/platforms/fontdatabases/genericunix/genericunix.pri b/src/plugins/platforms/fontdatabases/genericunix/genericunix.pri new file mode 100644 index 0000000..dbcfbce --- /dev/null +++ b/src/plugins/platforms/fontdatabases/genericunix/genericunix.pri @@ -0,0 +1,10 @@ +contains(QT_CONFIG, fontconfig) { + include(../fontconfig/fontconfig.pri) + DEFINES += Q_FONTCONFIGDATABASE +} else { + include(../basicunix/basicunix.pri) +} + +INCLUDEPATH += $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/genericunix +HEADERS += \ + $$QT_SOURCE_TREE/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h diff --git a/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h b/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h new file mode 100644 index 0000000..ec083f8 --- /dev/null +++ b/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h @@ -0,0 +1,12 @@ +#ifndef QGENERICUNIXFONTDATABASE_H +#define QGENERICUNIXFONTDATABASE_H + +#ifdef Q_FONTCONFIGDATABASE +#include "qfontconfigdatabase.h" +typedef QFontconfigDatabase QGenericUnixFontDatabase; +#else +#include "qbasicunixfontdatabase.h" +typedef QBasicUnixFontDatabase QGenericUnixFontDatabase; +#endif //Q_FONTCONFIGDATABASE + +#endif // QGENERICUNIXFONTDATABASE_H diff --git a/src/plugins/platforms/linuxfb/linuxfb.pro b/src/plugins/platforms/linuxfb/linuxfb.pro index 8d4b6d7..216b899 100644 --- a/src/plugins/platforms/linuxfb/linuxfb.pro +++ b/src/plugins/platforms/linuxfb/linuxfb.pro @@ -7,6 +7,7 @@ SOURCES = main.cpp qlinuxfbintegration.cpp HEADERS = qlinuxfbintegration.h include(../fb_base/fb_base.pri) +include(../fontdatabases/genericunix/genericunix.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp index 437af81..aa1d401 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp @@ -41,6 +41,7 @@ #include "qlinuxfbintegration.h" #include "../fb_base/fb_base.h" +#include "qgenericunixfontdatabase.h" #include #include // overrides QT_OPEN #include @@ -156,6 +157,7 @@ void QLinuxFbIntegrationPrivate::closeTty() } QLinuxFbIntegration::QLinuxFbIntegration() + :fontDb(new QGenericUnixFontDatabase()) { d_ptr = new QLinuxFbIntegrationPrivate(); @@ -799,6 +801,11 @@ QPlatformWindow *QLinuxFbIntegration::createPlatformWindow(QWidget *widget, WId return w; } +QPlatformFontDatabase *QLinuxFbIntegration::fontDatabase() const +{ + return fontDb; +} + QLinuxFbScreen::QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat) : compositePainter(0) { diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h index dc61df5..a5d7abd 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h @@ -82,6 +82,8 @@ public: QList screens() const { return mScreens; } + QPlatformFontDatabase *fontDatabase() const; + private: QLinuxFbScreen *mPrimaryScreen; QList mScreens; @@ -122,6 +124,7 @@ private: void setPixelFormat(struct fb_var_screeninfo); void createPalette(fb_cmap &cmap, fb_var_screeninfo &vinfo, fb_fix_screeninfo &finfo); void blank(bool on); + QPlatformFontDatabase *fontDb; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro index b68230c..3446e81 100644 --- a/src/plugins/platforms/platforms.pro +++ b/src/plugins/platforms/platforms.pro @@ -5,7 +5,15 @@ contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl) { SUBDIRS += minimal -#this don't work. but leave it for now -qpa:x11 { +contains(QT_CONFIG, mitshm) { SUBDIRS += testlite } + +linux { + SUBDIRS += linuxfb +} + +unix { + SUBDIRS += vnc \ + qvfb +} diff --git a/src/plugins/platforms/qvfb/qvfb.pro b/src/plugins/platforms/qvfb/qvfb.pro index a560755..d2b332a 100644 --- a/src/plugins/platforms/qvfb/qvfb.pro +++ b/src/plugins/platforms/qvfb/qvfb.pro @@ -7,5 +7,7 @@ QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp qvfbintegration.cpp qvfbwindowsurface.cpp HEADERS = qvfbintegration.h qvfbwindowsurface.h +include(../fontdatabases/genericunix/genericunix.pri) + target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/qvfb/qvfbintegration.cpp b/src/plugins/platforms/qvfb/qvfbintegration.cpp index a50763a..0cc3938 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.cpp +++ b/src/plugins/platforms/qvfb/qvfbintegration.cpp @@ -62,6 +62,8 @@ #include #include +#include "qgenericunixfontdatabase.h" + QT_BEGIN_NAMESPACE @@ -409,6 +411,7 @@ QImage *QVFbScreen::screenImage() } QVFbIntegration::QVFbIntegration(const QStringList ¶mList) + : mFontDb(new QGenericUnixFontDatabase()) { int displayId = 0; if (paramList.length() > 0) @@ -435,6 +438,11 @@ QPlatformWindow *QVFbIntegration::createPlatformWindow(QWidget *widget, WId) con return new QVFbWindow(mPrimaryScreen, widget); } +QPlatformFontDatabase *QVFbIntegration::fontDatabase() const +{ + return mFontDb; +} + QT_END_NAMESPACE #include "qvfbintegration.moc" diff --git a/src/plugins/platforms/qvfb/qvfbintegration.h b/src/plugins/platforms/qvfb/qvfbintegration.h index e46e0da..198a45c 100644 --- a/src/plugins/platforms/qvfb/qvfbintegration.h +++ b/src/plugins/platforms/qvfb/qvfbintegration.h @@ -84,9 +84,12 @@ public: QList screens() const { return mScreens; } + QPlatformFontDatabase *fontDatabase() const; + private: QVFbScreen *mPrimaryScreen; QList mScreens; + QPlatformFontDatabase *mFontDb; }; diff --git a/src/plugins/platforms/testlite/qtestliteintegration.cpp b/src/plugins/platforms/testlite/qtestliteintegration.cpp index a8e0fa7..68e9051 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.cpp +++ b/src/plugins/platforms/testlite/qtestliteintegration.cpp @@ -49,6 +49,7 @@ #include #include "qtestlitewindow.h" +#include "qgenericunixfontdatabase.h" #ifndef QT_NO_OPENGL #include @@ -84,8 +85,8 @@ public: QTestLiteIntegration::QTestLiteIntegration(bool useOpenGL) : mUseOpenGL(useOpenGL) + , mFontDb(new QGenericUnixFontDatabase()) { - xd = new MyDisplay; mPrimaryScreen = new QTestLiteScreen(); @@ -136,6 +137,11 @@ QPixmap QTestLiteIntegration::grabWindow(WId window, int x, int y, int width, in return QPixmap::fromImage(img); } +QPlatformFontDatabase *QTestLiteIntegration::fontDatabase() const +{ + return mFontDb; +} + bool QTestLiteIntegration::hasOpenGL() const { #ifndef QT_NO_OPENGL diff --git a/src/plugins/platforms/testlite/qtestliteintegration.h b/src/plugins/platforms/testlite/qtestliteintegration.h index ac10841..8286ef0 100644 --- a/src/plugins/platforms/testlite/qtestliteintegration.h +++ b/src/plugins/platforms/testlite/qtestliteintegration.h @@ -84,6 +84,8 @@ public: QList screens() const { return mScreens; } + QPlatformFontDatabase *fontDatabase() const; + bool hasOpenGL() const; MyDisplay *xd; @@ -92,6 +94,7 @@ private: bool mUseOpenGL; QTestLiteScreen *mPrimaryScreen; QList mScreens; + QPlatformFontDatabase *mFontDb; }; QT_END_NAMESPACE diff --git a/src/plugins/platforms/testlite/qtestlitewindow.cpp b/src/plugins/platforms/testlite/qtestlitewindow.cpp index 1f477db..1de4b9d 100644 --- a/src/plugins/platforms/testlite/qtestlitewindow.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindow.cpp @@ -622,7 +622,7 @@ void QTestLiteWindow::handleKeyEvent(QEvent::Type type, void *ev) int qtcode = chars.toUpper()[0]; //Not exactly right... if (modifiers & Qt::ControlModifier && qtcode < ' ') qtcode = chars[0] + '@'; - QWindowSystemInterface::handleKeyEvent(widget(), e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); + QWindowSystemInterface::handleKeyEvent(0, e->time, type, qtcode, modifiers, QString::fromLatin1(chars)); } else { qWarning() << "unknown X keycode" << hex << e->keycode << keySym; } @@ -647,9 +647,9 @@ WId QTestLiteWindow::winId() const void QTestLiteWindow::setParent(const QPlatformWindow *window) { - QPoint point = widget()->mapTo(widget()->nativeParentWidget(),QPoint()); - XReparentWindow(xd->display,x_window,window->winId(),point.x(),point.y()); - XMapWindow(xd->display, x_window); + QPoint point = widget()->mapTo(widget()->nativeParentWidget(),QPoint()); + XReparentWindow(xd->display,x_window,window->winId(),point.x(),point.y()); + XMapWindow(xd->display, x_window); } void QTestLiteWindow::raise() @@ -1441,7 +1441,7 @@ bool MyDisplay::handleEvent(XEvent *xe) xw->handleMouseEvent(QEvent::MouseMove, &xe->xbutton); break; - case XKeyPress: + case XKeyPress: xw->handleKeyEvent(QEvent::KeyPress, &xe->xkey); break; diff --git a/src/plugins/platforms/testlite/testlite.pro b/src/plugins/platforms/testlite/testlite.pro index 0a5ebb2..05bd384 100644 --- a/src/plugins/platforms/testlite/testlite.pro +++ b/src/plugins/platforms/testlite/testlite.pro @@ -1,18 +1,29 @@ -TARGET = qtestlitegraphicssystem -include(../../qpluginbase.pri) +TARGET = qtestlite +include(../../qpluginbase.pri) QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms -SOURCES = main.cpp qtestliteintegration.cpp qtestlitewindowsurface.cpp qtestlitewindow.cpp -HEADERS = qtestliteintegration.h qtestlitewindowsurface.h qtestlitewindow.h +SOURCES = \ + main.cpp \ + qtestliteintegration.cpp \ + qtestlitewindowsurface.cpp \ + qtestlitewindow.cpp + +HEADERS = \ + qtestliteintegration.h \ + qtestlitewindowsurface.h \ + qtestlitewindow.h + LIBS += -lX11 -lXext +include (../fontdatabases/genericunix/genericunix.pri) + contains(QT_CONFIG, opengl) { QT += opengl HEADERS += qglxintegration.h SOURCES += qglxintegration.cpp } -target.path += $$[QT_INSTALL_PLUGINS]/graphicssystems +target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/vnc/qvncintegration.cpp b/src/plugins/platforms/vnc/qvncintegration.cpp index 331c16a..b36ff33 100644 --- a/src/plugins/platforms/vnc/qvncintegration.cpp +++ b/src/plugins/platforms/vnc/qvncintegration.cpp @@ -49,6 +49,7 @@ #include #include +#include "qgenericunixfontdatabase.h" QVNCScreen::QVNCScreen(QRect screenSize, int screenId) : QFbScreen::QFbScreen() @@ -100,7 +101,7 @@ static void usage() } QVNCIntegration::QVNCIntegration(const QStringList& paramList) - : virtualDesktop(false) + : virtualDesktop(false), fontDb(new QGenericUnixFontDatabase()) { int sizeX = defaultWidth(); int sizeY = defaultHeight(); @@ -234,3 +235,8 @@ void QVNCIntegration::moveToScreen(QWidget *window, int screen) window->platformWindow()->setGeometry(window->geometry()); // this should be unified elsewhere newScreen->addWindow(static_cast(window->platformWindow())); } + +QPlatformFontDatabase *QVNCIntegration::fontDatabase() const +{ + return fontDb; +} diff --git a/src/plugins/platforms/vnc/qvncintegration.h b/src/plugins/platforms/vnc/qvncintegration.h index 241993d..dfc0e6b 100644 --- a/src/plugins/platforms/vnc/qvncintegration.h +++ b/src/plugins/platforms/vnc/qvncintegration.h @@ -45,6 +45,7 @@ #include "qvnccursor.h" #include "../fb_base/fb_base.h" #include +#include "qgenericunixfontdatabase.h" QT_BEGIN_NAMESPACE @@ -91,10 +92,13 @@ public: bool isVirtualDesktop() { return virtualDesktop; } void moveToScreen(QWidget *window, int screen); + QPlatformFontDatabase *fontDatabase() const; + private: QVNCScreen *mPrimaryScreen; QList mScreens; bool virtualDesktop; + QPlatformFontDatabase *fontDb; }; diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index 65824a2..6c448f5 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -13,6 +13,7 @@ HEADERS += qvnccursor.h SOURCES += qvnccursor.cpp include(../fb_base/fb_base.pri) +include(../fontdatabases/genericunix/genericunix.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms -- cgit v0.12 From 4e630e3af2f33a123abb58f15f95d640d9054cd6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 2 Sep 2010 15:27:27 +0200 Subject: Lighthouse: Move shared context init so it is not created untill anyone asks for it. --- src/plugins/platforms/testlite/qglxintegration.cpp | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/plugins/platforms/testlite/qglxintegration.cpp b/src/plugins/platforms/testlite/qglxintegration.cpp index fbffcab..e262d5b 100644 --- a/src/plugins/platforms/testlite/qglxintegration.cpp +++ b/src/plugins/platforms/testlite/qglxintegration.cpp @@ -241,18 +241,18 @@ QGLXGLContext::QGLXGLContext(Window window, MyDisplay *xd, const QPlatformWindow , m_drawable((Drawable)window) , m_context(0) { - if (!QPlatformGLContext::defaultSharedContext()) { - if (m_defaultSharedContextMutex.tryLock()){ - createDefaultSharedContex(xd); - m_defaultSharedContextMutex.unlock(); - } else { - m_defaultSharedContextMutex.lock(); //wait to the the shared context is created - m_defaultSharedContextMutex.unlock(); - } - } QPlatformGLContext *sharePlatformContext; if (format.useDefaultSharedContext()) { + if (!QPlatformGLContext::defaultSharedContext()) { + if (m_defaultSharedContextMutex.tryLock()){ + createDefaultSharedContex(xd); + m_defaultSharedContextMutex.unlock(); + } else { + m_defaultSharedContextMutex.lock(); //wait to the the shared context is created + m_defaultSharedContextMutex.unlock(); + } + } sharePlatformContext = QPlatformGLContext::defaultSharedContext(); } else { sharePlatformContext = format.sharedGLContext(); @@ -309,9 +309,6 @@ void QGLXGLContext::createDefaultSharedContex(MyDisplay *xd) } else { qWarning("Warning no shared context created"); } - - - } void QGLXGLContext::makeCurrent() -- cgit v0.12 From c8ae543a3b649778d8f6e1b2d45faf3a4b1d4012 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Fri, 3 Sep 2010 10:03:23 +0200 Subject: Compile fix Note: the #ifdef matches the one around eglReleaseBuffer, but it may be that that should have checked for EGL instead of GL_ES --- src/opengl/qgl.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/opengl/qgl.cpp b/src/opengl/qgl.cpp index 2145001..cd3121e 100644 --- a/src/opengl/qgl.cpp +++ b/src/opengl/qgl.cpp @@ -93,6 +93,9 @@ #include "qlibrary.h" #include +#ifdef QT_OPENGL_ES +#include +#endif // #define QT_GL_CONTEXT_RESOURCE_DEBUG -- cgit v0.12 From 975490d721ca98251aefa7e7f50e6e54e63b79c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 3 Sep 2010 09:27:44 +0200 Subject: Lighthouse: Fix eventhandling for when widgets are in destructor This is a problem when you send events from a seperate thread --- src/gui/kernel/qwindowsysteminterface_qpa.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp index c49bd36..f10c038 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.cpp +++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp @@ -61,6 +61,10 @@ extern QPointer qt_last_mouse_receiver; void QWindowSystemInterface::handleEnterEvent(QWidget *tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + return; + if (tlw) { QWindowSystemInterfacePrivate::EnterEvent *e = new QWindowSystemInterfacePrivate::EnterEvent(tlw); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); @@ -69,12 +73,20 @@ void QWindowSystemInterface::handleEnterEvent(QWidget *tlw) void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + return; + QWindowSystemInterfacePrivate::LeaveEvent *e = new QWindowSystemInterfacePrivate::LeaveEvent(tlw); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); } void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + return; + QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw,newRect); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); } @@ -102,6 +114,9 @@ void QWindowSystemInterface::handleMouseEvent(QWidget *w, const QPoint & local, void QWindowSystemInterface::handleMouseEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + tlw = 0; QWindowSystemInterfacePrivate::MouseEvent * e = new QWindowSystemInterfacePrivate::MouseEvent(tlw, timestamp, local, global, b); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); @@ -114,6 +129,10 @@ void QWindowSystemInterface::handleKeyEvent(QWidget *w, QEvent::Type t, int k, Q void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + tlw = 0; + QWindowSystemInterfacePrivate::KeyEvent * e = new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); @@ -126,6 +145,10 @@ void QWindowSystemInterface::handleWheelEvent(QWidget *w, const QPoint & local, void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + tlw = 0; + QWindowSystemInterfacePrivate::WheelEvent *e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, d, o); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); -- cgit v0.12 From 136c32ddb97a12eefcbbfebf63075237c07d4cd4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 3 Sep 2010 12:53:14 +0200 Subject: Lighthouse: Added QDirectFbGlContext This is untested since I have no HW to test on, but its in the public api, so that we have something to build on. --- src/plugins/platforms/directfb/directfb.pro | 6 ++- .../platforms/directfb/qdirectfbglcontext.cpp | 58 ++++++++++++++++++++++ .../platforms/directfb/qdirectfbglcontext.h | 28 +++++++++++ src/plugins/platforms/directfb/qdirectfbwindow.cpp | 23 ++++++++- src/plugins/platforms/directfb/qdirectfbwindow.h | 3 ++ 5 files changed, 115 insertions(+), 3 deletions(-) create mode 100644 src/plugins/platforms/directfb/qdirectfbglcontext.cpp create mode 100644 src/plugins/platforms/directfb/qdirectfbglcontext.h diff --git a/src/plugins/platforms/directfb/directfb.pro b/src/plugins/platforms/directfb/directfb.pro index 48128fb..65c49e3 100644 --- a/src/plugins/platforms/directfb/directfb.pro +++ b/src/plugins/platforms/directfb/directfb.pro @@ -19,14 +19,16 @@ SOURCES = main.cpp \ qdirectfbconvenience.cpp \ qdirectfbinput.cpp \ qdirectfbcursor.cpp \ - qdirectfbwindow.cpp + qdirectfbwindow.cpp \ + qdirectfbglcontext.cpp HEADERS = qdirectfbintegration.h \ qdirectfbwindowsurface.h \ qdirectfbblitter.h \ qdirectfbconvenience.h \ qdirectfbinput.h \ qdirectfbcursor.h \ - qdirectfbwindow.h + qdirectfbwindow.h \ + qdirectfbglcontext.h include(../fontdatabases/genericunix/genericunix.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp new file mode 100644 index 0000000..fe96efe --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp @@ -0,0 +1,58 @@ +#include "qdirectfbglcontext.h" + +#include + +#include + +QDirectFbGLContext::QDirectFbGLContext(IDirectFBGL *glContext) + : m_dfbGlContext(glContext) +{ + DFBResult result; + DFBGLAttributes glAttribs; + result = m_dfbGlContext->GetAttributes(glContext, &glAttribs); + if (result == DFB_OK) { + m_windowFormat.setDepthBufferSize(glAttribs.depth_size); + m_windowFormat.setStencilBufferSize(glAttribs.stencil_size); + + m_windowFormat.setRedBufferSize(glAttribs.red_size); + m_windowFormat.setGreenBufferSize(glAttribs.green_size); + m_windowFormat.setBlueBufferSize(glAttribs.blue_size); + m_windowFormat.setAlphaBufferSize(glAttribs.alpha_size); + + m_windowFormat.setAccumBufferSize(glAttribs.accum_red_size); + m_windowFormat.setAlpha(glAttribs.accum_alpha_size); + + m_windowFormat.setDoubleBuffer(glAttribs.double_buffer); + m_windowFormat.setStereo(glAttribs.stereo); + } +} + +void QDirectFbGLContext::makeCurrent() +{ + m_dfbGlContext->Lock(m_dfbGlContext); +} + +void QDirectFbGLContext::doneCurrent() +{ + m_dfbGlContext->Unlock(m_dfbGlContext); +} + +void *QDirectFbGLContext::getProcAddress(const QString &procName) +{ + void *proc; + DFBResult result = m_dfbGlContext->GetProcAddress(m_dfbGlContext,qPrintable(procName),&proc); + if (result == DFB_OK) + return proc; + return 0; +} + +void QDirectFbGLContext::swapBuffers() +{ +// m_dfbGlContext->Unlock(m_dfbGlContext); //maybe not in doneCurrent() + qDebug() << "Swap buffers"; +} + +QPlatformWindowFormat QDirectFbGLContext::platformWindowFormat() const +{ + return m_windowFormat; +} diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.h b/src/plugins/platforms/directfb/qdirectfbglcontext.h new file mode 100644 index 0000000..037587e --- /dev/null +++ b/src/plugins/platforms/directfb/qdirectfbglcontext.h @@ -0,0 +1,28 @@ +#ifndef QDIRECTFBGLCONTEXT_H +#define QDIRECTFBGLCONTEXT_H + +#include + +#include "qdirectfbconvenience.h" + +class QDirectFbGLContext : public QPlatformGLContext +{ +public: + explicit QDirectFbGLContext(IDirectFBGL *glContext); + + void makeCurrent(); + void doneCurrent(); + void swapBuffers(); + void *getProcAddress(const QString &procName); + + QPlatformWindowFormat platformWindowFormat() const; + + +private: + IDirectFBGL *m_dfbGlContext; + + QPlatformWindowFormat m_windowFormat; + +}; + +#endif // QDIRECTFBGLCONTEXT_H diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp index 30e6f5a..f82fbd6 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp @@ -40,13 +40,14 @@ ****************************************************************************/ #include "qdirectfbwindow.h" #include "qdirectfbinput.h" +#include "qdirectfbglcontext.h" #include #include QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler) - : QPlatformWindow(tlw), m_inputHandler(inputhandler) + : QPlatformWindow(tlw), m_inputHandler(inputhandler), m_context(0) { IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer(); DFBDisplayLayerConfig layerConfig; @@ -155,3 +156,23 @@ WId QDirectFbWindow::winId() const m_dfbWindow->GetID(m_dfbWindow, &id); return WId(id); } + +QPlatformGLContext *QDirectFbWindow::glContext() const +{ + if (!m_context) { + IDirectFBSurface *surface; + DFBResult result = m_dfbWindow->GetSurface(m_dfbWindow,&surface); + if (result != DFB_OK) { + qWarning("could not retrieve surface in QDirectFbWindow::glContext()"); + return 0; + } + IDirectFBGL *gl; + result = surface->GetGL(surface,&gl); + if (result != DFB_OK) { + qWarning("could not retrieve IDirectFBGL in QDirectFbWindow::glContext()"); + return 0; + } + const_cast(this)->m_context = new QDirectFbGLContext(gl); + } + return m_context; +} diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h index b512afd..eaf5173 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.h +++ b/src/plugins/platforms/directfb/qdirectfbwindow.h @@ -65,10 +65,13 @@ public: void lower(); WId winId() const; + QPlatformGLContext *glContext() const; + private: IDirectFBWindow *m_dfbWindow; QDirectFbInput *m_inputHandler; + QPlatformGLContext *m_context; }; QT_END_NAMESPACE -- cgit v0.12 From cbbca7d2e30e7bb5411b9c7d89feaf6eae54af7e Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 6 Sep 2010 10:27:34 +0200 Subject: Switch to 32 bits per pixel --- src/plugins/platforms/eglfs/qeglfsscreen.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp index 0d72862..1b64e7e 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -50,6 +50,8 @@ QT_BEGIN_NAMESPACE +//#define QEGL_EXTRA_DEBUG + #ifdef QEGL_EXTRA_DEBUG struct AttrInfo { EGLint attr; const char *name; }; static struct AttrInfo attrs[] = { @@ -84,7 +86,7 @@ static struct AttrInfo attrs[] = { #endif //QEGL_EXTRA_DEBUG QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display) - : m_depth(16), m_format(QImage::Format_RGB16), m_platformContext(0) + : m_depth(32), m_format(QImage::Format_ARGB32_Premultiplied), m_platformContext(0) { #ifdef QEGL_EXTRA_DEBUG qWarning("QEglScreen %p\n", this); @@ -114,11 +116,11 @@ QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display) qWarning("Initialized display %d %d\n", major, minor); QPlatformWindowFormat platformFormat; - platformFormat.setDepth(16); + platformFormat.setDepth(32); platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); - platformFormat.setRedBufferSize(5); - platformFormat.setGreenBufferSize(6); - platformFormat.setBlueBufferSize(5); + platformFormat.setRedBufferSize(8); + platformFormat.setGreenBufferSize(8); + platformFormat.setBlueBufferSize(8); EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); EGLNativeWindowType eglWindow = 0; -- cgit v0.12 From c5fe294667d9d8dfcec5c9529185a13ba5a47e91 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 6 Sep 2010 14:53:51 +0200 Subject: Send mouse release events for touch screens --- src/plugins/generic/linuxinput/qlinuxinput.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 32137ee..955aed9 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -155,6 +155,9 @@ void QLinuxInputMouseHandler::readMouseData() } } else if (data->type == EV_KEY && data->code == BTN_TOUCH) { m_buttons = data->value ? Qt::LeftButton : Qt::NoButton; + + QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), + QPoint(m_x, m_y), m_buttons); } else if (data->type == EV_KEY) { Qt::MouseButton button = Qt::NoButton; switch (data->code) { -- cgit v0.12 From 04f0d0064eb5bb42123e1519df6073c3b09442ec Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 6 Sep 2010 14:53:51 +0200 Subject: Send mouse release events for touch screens --- src/plugins/generic/linuxinput/qlinuxinput.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 32137ee..955aed9 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -155,6 +155,9 @@ void QLinuxInputMouseHandler::readMouseData() } } else if (data->type == EV_KEY && data->code == BTN_TOUCH) { m_buttons = data->value ? Qt::LeftButton : Qt::NoButton; + + QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), + QPoint(m_x, m_y), m_buttons); } else if (data->type == EV_KEY) { Qt::MouseButton button = Qt::NoButton; switch (data->code) { -- cgit v0.12 From 8a92433b5deb14a27457715241b14764c28ffb39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 3 Sep 2010 14:45:43 +0200 Subject: Make phonon gst backend build properly Only software rendering for now... also fix regression I made in QWindowSystemInterface. Its allowed to send in NULL pointers for tlw in some of the functions. So dont ask for the widget data of a NULL pointer. --- src/3rdparty/phonon/gstreamer/devicemanager.cpp | 4 +- src/3rdparty/phonon/gstreamer/videowidget.cpp | 4 ++ src/3rdparty/phonon/gstreamer/x11renderer.h | 4 -- src/gui/kernel/qwindowsysteminterface_qpa.cpp | 50 +++++++++++++--------- src/plugins/phonon/gstreamer/gstreamer.pro | 2 +- .../platforms/testlite/qtestlitewindowsurface.cpp | 2 +- 6 files changed, 38 insertions(+), 28 deletions(-) diff --git a/src/3rdparty/phonon/gstreamer/devicemanager.cpp b/src/3rdparty/phonon/gstreamer/devicemanager.cpp index c3826eb..518aa85 100644 --- a/src/3rdparty/phonon/gstreamer/devicemanager.cpp +++ b/src/3rdparty/phonon/gstreamer/devicemanager.cpp @@ -22,7 +22,9 @@ #include "videowidget.h" #include "glrenderer.h" #include "widgetrenderer.h" +#ifdef Q_WS_X11 #include "x11renderer.h" +#endif #include "artssink.h" #include "pulsesupport.h" @@ -264,7 +266,7 @@ AbstractRenderer *DeviceManager::createVideoRenderer(VideoWidget *parent) if (m_videoSinkWidget == "software") { return new WidgetRenderer(parent); } -#ifndef Q_WS_QWS +#ifdef Q_WS_X11 else if (m_videoSinkWidget == "xwindow") { return new X11Renderer(parent); } else { diff --git a/src/3rdparty/phonon/gstreamer/videowidget.cpp b/src/3rdparty/phonon/gstreamer/videowidget.cpp index e1f0ec9..a4c6f79 100644 --- a/src/3rdparty/phonon/gstreamer/videowidget.cpp +++ b/src/3rdparty/phonon/gstreamer/videowidget.cpp @@ -31,7 +31,9 @@ #include "glrenderer.h" #include "widgetrenderer.h" +#ifdef Q_WS_X11 #include "x11renderer.h" +#endif #ifndef QT_NO_PHONON_VIDEO QT_BEGIN_NAMESPACE @@ -116,10 +118,12 @@ void VideoWidget::setupVideoBin() GstPad *videopad = gst_element_get_pad (queue, "sink"); gst_element_add_pad (m_videoBin, gst_ghost_pad_new ("sink", videopad)); gst_object_unref (videopad); +#ifndef Q_WS_QPA QWidget *parentWidget = qobject_cast(parent()); if (parentWidget) parentWidget->winId(); // Due to some existing issues with alien in 4.4, // we must currently force the creation of a parent widget. +#endif m_isValid = true; //initialization ok, accept input } } diff --git a/src/3rdparty/phonon/gstreamer/x11renderer.h b/src/3rdparty/phonon/gstreamer/x11renderer.h index f7140da..8e2ea19 100644 --- a/src/3rdparty/phonon/gstreamer/x11renderer.h +++ b/src/3rdparty/phonon/gstreamer/x11renderer.h @@ -27,8 +27,6 @@ QT_BEGIN_NAMESPACE -#ifndef Q_WS_QWS - class QString; namespace Phonon @@ -61,8 +59,6 @@ private: } } //namespace Phonon::Gstreamer -#endif // Q_WS_QWS - QT_END_NAMESPACE #endif // Phonon_GSTREAMER_X11RENDERER_H diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp index f10c038..7b83fd3 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.cpp +++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp @@ -61,11 +61,11 @@ extern QPointer qt_last_mouse_receiver; void QWindowSystemInterface::handleEnterEvent(QWidget *tlw) { - QWidgetData *data = qt_qwidget_data(tlw); - if (data->in_destructor) - return; - if (tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + return; + QWindowSystemInterfacePrivate::EnterEvent *e = new QWindowSystemInterfacePrivate::EnterEvent(tlw); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); } @@ -73,20 +73,22 @@ void QWindowSystemInterface::handleEnterEvent(QWidget *tlw) void QWindowSystemInterface::handleLeaveEvent(QWidget *tlw) { - QWidgetData *data = qt_qwidget_data(tlw); - if (data->in_destructor) - return; - + if (tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + return; + } QWindowSystemInterfacePrivate::LeaveEvent *e = new QWindowSystemInterfacePrivate::LeaveEvent(tlw); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); } void QWindowSystemInterface::handleGeometryChange(QWidget *tlw, const QRect &newRect) { - QWidgetData *data = qt_qwidget_data(tlw); - if (data->in_destructor) - return; - + if (tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + return; + } QWindowSystemInterfacePrivate::GeometryChangeEvent *e = new QWindowSystemInterfacePrivate::GeometryChangeEvent(tlw,newRect); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); } @@ -114,9 +116,11 @@ void QWindowSystemInterface::handleMouseEvent(QWidget *w, const QPoint & local, void QWindowSystemInterface::handleMouseEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, Qt::MouseButtons b) { - QWidgetData *data = qt_qwidget_data(tlw); - if (data->in_destructor) - tlw = 0; + if (tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + tlw = 0; + } QWindowSystemInterfacePrivate::MouseEvent * e = new QWindowSystemInterfacePrivate::MouseEvent(tlw, timestamp, local, global, b); QWindowSystemInterfacePrivate::queueWindowSystemEvent(e); @@ -129,9 +133,11 @@ void QWindowSystemInterface::handleKeyEvent(QWidget *w, QEvent::Type t, int k, Q void QWindowSystemInterface::handleKeyEvent(QWidget *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count) { - QWidgetData *data = qt_qwidget_data(tlw); - if (data->in_destructor) - tlw = 0; + if (tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + tlw = 0; + } QWindowSystemInterfacePrivate::KeyEvent * e = new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count); @@ -145,9 +151,11 @@ void QWindowSystemInterface::handleWheelEvent(QWidget *w, const QPoint & local, void QWindowSystemInterface::handleWheelEvent(QWidget *tlw, ulong timestamp, const QPoint & local, const QPoint & global, int d, Qt::Orientation o) { - QWidgetData *data = qt_qwidget_data(tlw); - if (data->in_destructor) - tlw = 0; + if (tlw) { + QWidgetData *data = qt_qwidget_data(tlw); + if (data->in_destructor) + tlw = 0; + } QWindowSystemInterfacePrivate::WheelEvent *e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, d, o); diff --git a/src/plugins/phonon/gstreamer/gstreamer.pro b/src/plugins/phonon/gstreamer/gstreamer.pro index 1013205..02e0848 100644 --- a/src/plugins/phonon/gstreamer/gstreamer.pro +++ b/src/plugins/phonon/gstreamer/gstreamer.pro @@ -58,7 +58,7 @@ SOURCES += $$PHONON_GSTREAMER_DIR/abstractrenderer.cpp \ $$PHONON_GSTREAMER_DIR/volumefadereffect.cpp \ $$PHONON_GSTREAMER_DIR/widgetrenderer.cpp -!embedded { +x11 { HEADERS += $$PHONON_GSTREAMER_DIR/x11renderer.h SOURCES += $$PHONON_GSTREAMER_DIR/x11renderer.cpp } diff --git a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp index 53f4791..b3232c8 100644 --- a/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp +++ b/src/plugins/platforms/testlite/qtestlitewindowsurface.cpp @@ -180,7 +180,7 @@ void QTestLiteWindowSurface::flush(QWidget *widget, const QRegion ®ion, const } #else // Use MIT_SHM - if (image_info->image) { + if (image_info && image_info->image) { //qDebug() << "Here we go" << image_info->image->width << image_info->image->height; int x = 0; int y = 0; -- cgit v0.12 From 8fbcf5d1a93f50fa59f650468d203115f7a6965b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 7 Sep 2010 16:33:09 +0200 Subject: Lighthouse: fix reparenting from topLevel to child widget also fix Directfb with a hack so that moving windows works --- src/gui/kernel/qwidget_qpa.cpp | 18 ++++++++++-------- src/plugins/platforms/directfb/qdirectfbwindow.cpp | 8 ++++++++ .../platforms/directfb/qdirectfbwindowsurface.cpp | 2 +- 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/src/gui/kernel/qwidget_qpa.cpp b/src/gui/kernel/qwidget_qpa.cpp index b3599bd..ac8b37d 100644 --- a/src/gui/kernel/qwidget_qpa.cpp +++ b/src/gui/kernel/qwidget_qpa.cpp @@ -145,12 +145,7 @@ void QWidget::destroy(bool destroyWindow, bool destroySubWindows) } } if (destroyWindow) { - QTLWExtra *topData = d->maybeTopData(); - if (topData) { - delete topData->platformWindow; - topData->platformWindow = 0; - d->data.winid = 0; - } + d->deleteTLSysExtra(); } else { if (parentWidget() && parentWidget()->testAttribute(Qt::WA_WState_Created)) { d->hide_sys(); @@ -403,9 +398,10 @@ void QWidgetPrivate::show_sys() window->setGeometry(geomRect); } if (q->isWindow()) { - if (QWindowSurface *surface = q->windowSurface()) + if (QWindowSurface *surface = q->windowSurface()) { if (windowRect.size() != geomRect.size()) { - surface->resize(geomRect.size()); + surface->resize(geomRect.size()); + } } if (window) @@ -781,6 +777,7 @@ void QWidgetPrivate::createSysExtra() void QWidgetPrivate::deleteSysExtra() { + } void QWidgetPrivate::createTLSysExtra() @@ -789,6 +786,11 @@ void QWidgetPrivate::createTLSysExtra() void QWidgetPrivate::deleteTLSysExtra() { + if (extra && extra->topextra) { + delete extra->topextra->platformWindow; + extra->topextra->platformWindow = 0; + extra->topextra->backingStore.destroy(); + } } void QWidgetPrivate::registerDropSite(bool on) diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp index f82fbd6..21eefc4 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp @@ -44,6 +44,8 @@ #include +#include "qdirectfbwindowsurface.h" + #include QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler) @@ -95,10 +97,16 @@ QDirectFbWindow::~QDirectFbWindow() void QDirectFbWindow::setGeometry(const QRect &rect) { + bool isMoveOnly = (rect.topLeft() != geometry().topLeft()) && (rect.size() == geometry().size()); QPlatformWindow::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), rect.width(), rect.height()); + //Hack. When moving since the WindowSurface of a window becomes invalid when moved + if (isMoveOnly) { //if resize then windowsurface is updated. + widget()->windowSurface()->resize(rect.size()); + widget()->update(); + } } void QDirectFbWindow::setOpacity(qreal level) diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp index 271d061..2aef70d 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp @@ -70,7 +70,7 @@ QDirectFbWindowSurface::QDirectFbWindowSurface(QWidget *window, WId wId) QDirectFbWindowSurface::~QDirectFbWindowSurface() { - + delete m_pixmap; } QPaintDevice *QDirectFbWindowSurface::paintDevice() -- cgit v0.12 From 184a4c66165ab49940e1eae7140a6474531c5f9d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 8 Sep 2010 07:40:59 +0200 Subject: Lighthouse, DFb don't show windows that Qt::WA_DontShowOnScreen --- src/plugins/platforms/directfb/qdirectfbwindow.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp index 21eefc4..74e7a72 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp @@ -84,6 +84,8 @@ QDirectFbWindow::QDirectFbWindow(QWidget *tlw, QDirectFbInput *inputhandler) m_dfbWindow->SetOpacity(m_dfbWindow,0xff); + setVisible(widget()->isVisible()); + DFBWindowID id; m_dfbWindow->GetID(m_dfbWindow, &id); m_inputHandler->addWindow(id,tlw); @@ -99,13 +101,15 @@ void QDirectFbWindow::setGeometry(const QRect &rect) { bool isMoveOnly = (rect.topLeft() != geometry().topLeft()) && (rect.size() == geometry().size()); QPlatformWindow::setGeometry(rect); - m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), - rect.width(), rect.height()); - - //Hack. When moving since the WindowSurface of a window becomes invalid when moved - if (isMoveOnly) { //if resize then windowsurface is updated. - widget()->windowSurface()->resize(rect.size()); - widget()->update(); + if (widget()->isVisible() && !(widget()->testAttribute(Qt::WA_DontShowOnScreen))) { + m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), + rect.width(), rect.height()); + + //Hack. When moving since the WindowSurface of a window becomes invalid when moved + if (isMoveOnly) { //if resize then windowsurface is updated. + widget()->windowSurface()->resize(rect.size()); + widget()->update(); + } } } -- cgit v0.12 From 1aa1346645c30690c46c0bec7aaeee09c8b68690 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 8 Sep 2010 11:47:50 +0200 Subject: Compile --- src/plugins/platforms/vnc/vnc.pro | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/vnc/vnc.pro b/src/plugins/platforms/vnc/vnc.pro index 65824a2..affeea0 100644 --- a/src/plugins/platforms/vnc/vnc.pro +++ b/src/plugins/platforms/vnc/vnc.pro @@ -1,6 +1,8 @@ TARGET = qvncgraphicssystem include(../../qpluginbase.pri) +QT += network + QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms SOURCES = main.cpp qvncintegration.cpp -- cgit v0.12 From 59a2ff150795e1281e6b4fea435e74d3434a5ad2 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 8 Sep 2010 12:40:36 +0200 Subject: Experimental multi-touch implementation --- src/gui/kernel/qwindowsysteminterface_qpa.h | 2 +- src/plugins/generic/linuxinput/qlinuxinput.cpp | 152 ++++++++++++++++++++++--- src/plugins/generic/linuxinput/qlinuxinput.h | 3 + 3 files changed, 143 insertions(+), 14 deletions(-) diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.h b/src/gui/kernel/qwindowsysteminterface_qpa.h index 5ff4275..1c79f2a 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.h +++ b/src/gui/kernel/qwindowsysteminterface_qpa.h @@ -73,7 +73,7 @@ public: QPointF normalPosition; // touch device coordinates, (0 to 1, 0 to 1) QRectF area; // the touched area, centered at position in screen coordinates qreal pressure; // 0 to 1 - Qt::TouchPointStates state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released} + Qt::TouchPointState state; //Qt::TouchPoint{Pressed|Moved|Stationary|Released} }; static void handleTouchEvent(QWidget *w, QEvent::Type type, QTouchEvent::DeviceType devType, const QList &points); diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 955aed9..2b01973 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -64,9 +64,74 @@ QT_BEGIN_NAMESPACE + +#define QT_QPA_EXPERIMENTAL_MULTITOUCH + +#ifdef QT_QPA_EXPERIMENTAL_MULTITOUCH +class QLinuxInputMouseHandlerData +{ +public: + QLinuxInputMouseHandlerData() :seenMT(false), state(QEvent::TouchBegin), currentIdx(0) {} + + void ensureCurrentPoint() { + if (currentIdx >= touchPoints.size()) { + Q_ASSERT(currentIdx == touchPoints.size()); + QWindowSystemInterface::TouchPoint tp; + tp.id = currentIdx; + tp.isPrimary = (currentIdx == 0); + tp.pressure = 1; + tp.area = QRectF(0,0,1,1); + tp.state = Qt::TouchPointReleased; // init in neutral state + touchPoints.append(tp); + } + } + void setCurrentPoint(int i) { + currentIdx = i; + if (currentIdx < touchPoints.size()) { + currentX = int(touchPoints[currentIdx].area.left()); + currentY = int(touchPoints[currentIdx].area.top()); + } else { + currentY = currentX = -999; + } + } + void advanceCurrentPoint() { + setCurrentPoint(currentIdx + 1); + } + int currentPoint() { return currentIdx; } + void setCurrentX(int value) { + ensureCurrentPoint(); + touchPoints[currentIdx].area.moveLeft(value); + } + bool currentMoved() { + return currentX != touchPoints[currentIdx].area.left() || currentY != touchPoints[currentIdx].area.top(); + } + void updateCurrentPos() { + ensureCurrentPoint(); + touchPoints[currentIdx].area.moveTopLeft(QPointF(currentX, currentY)); + } + void setCurrentState(Qt::TouchPointState state) { + ensureCurrentPoint(); + touchPoints[currentIdx].state = state; + } + Qt::TouchPointState currentState() const { + if (currentIdx < touchPoints.size()) + return touchPoints[currentIdx].state; + return Qt::TouchPointReleased; + } + QList touchPoints; + int currentX; + int currentY; + bool seenMT; + QEvent::Type state; +private: + int currentIdx; +}; +#endif + + QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, const QString &specification) - : m_notify(0), m_x(0), m_y(0), m_buttons(0) + : m_notify(0), m_x(0), m_y(0), m_buttons(0), d(0) { qDebug() << "QLinuxInputMouseHandler" << key << specification; @@ -85,7 +150,9 @@ QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, qWarning("Cannot open mouse input device '%s': %s", qPrintable(dev), strerror(errno)); return; } - +#ifdef QT_QPA_EXPERIMENTAL_MULTITOUCH + d = new QLinuxInputMouseHandlerData; +#endif } @@ -93,6 +160,7 @@ QLinuxInputMouseHandler::~QLinuxInputMouseHandler() { if (m_fd >= 0) QT_CLOSE(m_fd); + delete d; } void QLinuxInputMouseHandler::readMouseData() @@ -119,7 +187,7 @@ void QLinuxInputMouseHandler::readMouseData() for (int i = 0; i < n; ++i) { struct ::input_event *data = &buffer[i]; - + //qDebug() << ">>" << hex << data->type << data->code << dec << data->value; bool unknown = false; if (data->type == EV_ABS) { if (data->code == ABS_X && m_x != data->value) { @@ -128,6 +196,28 @@ void QLinuxInputMouseHandler::readMouseData() } else if (data->code == ABS_Y && m_y != data->value) { m_y = data->value; posChanged = true; + } else if (data->code == ABS_PRESSURE) { + //ignore for now... + } else if (data->code == ABS_TOOL_WIDTH) { + //ignore for now... + } else if (data->code == ABS_HAT0X) { + //ignore for now... + } else if (data->code == ABS_HAT0Y) { + //ignore for now... +#ifdef QT_QPA_EXPERIMENTAL_MULTITOUCH + } else if (data->code == ABS_MT_POSITION_X) { + d->currentX = data->value; + d->seenMT = true; + } else if (data->code == ABS_MT_POSITION_Y) { + d->currentY = data->value; + d->seenMT = true; + } else if (data->code == ABS_MT_TOUCH_MAJOR) { + if (data->value == 0) + d->setCurrentState(Qt::TouchPointReleased); + //otherwise, ignore for now... + } else if (data->code == ABS_MT_TOUCH_MINOR) { + //ignore for now... +#endif } else { unknown = true; } @@ -158,7 +248,7 @@ void QLinuxInputMouseHandler::readMouseData() QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), QPoint(m_x, m_y), m_buttons); - } else if (data->type == EV_KEY) { + } else if (data->type == EV_KEY && data->code >= BTN_LEFT && data->code <= BTN_MIDDLE) { Qt::MouseButton button = Qt::NoButton; switch (data->code) { case BTN_LEFT: button = Qt::LeftButton; break; @@ -173,17 +263,53 @@ void QLinuxInputMouseHandler::readMouseData() QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), QPoint(m_x, m_y), m_buttons); } else if (data->type == EV_SYN && data->code == SYN_REPORT) { - if (!posChanged) - continue; - posChanged = false; - QPoint pos(m_x, m_y); - - QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); + if (posChanged) { + posChanged = false; + QPoint pos(m_x, m_y); - // pos = m_handler->transform(pos); - //m_handler->limitToScreen(pos); - //m_handler->mouseChanged(pos, m_buttons); + QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); + } +#ifdef QT_QPA_EXPERIMENTAL_MULTITOUCH + if (d->state == QEvent::TouchBegin && !d->seenMT) { + //no multi-touch events to send + } else { + if (!d->seenMT) + d->state = QEvent::TouchEnd; + + for (int i = d->currentPoint(); i < d->touchPoints.size(); ++i) { + d->touchPoints[i].pressure = 0; + d->touchPoints[i].state = Qt::TouchPointReleased; + } + //qDebug() << "handleTouchEvent" << d->state << d->touchPoints.size() << d->touchPoints[0].state; + QWindowSystemInterface::handleTouchEvent(0, d->state, QTouchEvent::TouchScreen, d->touchPoints); + if (d->seenMT) { + d->state = QEvent::TouchUpdate; + } else { + d->state = QEvent::TouchBegin; + d->touchPoints.clear(); + } + d->setCurrentPoint(0); + d->seenMT = false; + } + } else if (data->type == EV_SYN && data->code == SYN_MT_REPORT) { + //store data for this touch point + + if (!d->seenMT) { + d->setCurrentState(Qt::TouchPointReleased); + } else if (d->currentState() == Qt::TouchPointReleased) { + d->updateCurrentPos(); + d->setCurrentState(Qt::TouchPointPressed); + } else if (d->currentMoved()) { + d->updateCurrentPos(); + d->setCurrentState(Qt::TouchPointMoved); + } else { + d->setCurrentState(Qt::TouchPointStationary); + } + //qDebug() << "end of point" << d->currentPoint() << d->currentX << d->currentY << d->currentState(); + //advance to next tp: + d->advanceCurrentPoint(); +#endif } else if (data->type == EV_MSC && data->code == MSC_SCAN) { // kernel encountered an unmapped key - just ignore it continue; diff --git a/src/plugins/generic/linuxinput/qlinuxinput.h b/src/plugins/generic/linuxinput/qlinuxinput.h index 26ba6a7..535816d 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.h +++ b/src/plugins/generic/linuxinput/qlinuxinput.h @@ -52,6 +52,8 @@ QT_BEGIN_NAMESPACE class QSocketNotifier; +class QLinuxInputMouseHandlerData; + class QLinuxInputMouseHandler : public QObject { Q_OBJECT @@ -67,6 +69,7 @@ private: int m_fd; int m_x, m_y; Qt::MouseButtons m_buttons; + QLinuxInputMouseHandlerData *d; }; -- cgit v0.12 From 34625a376b7d08856c6de1f52179d86aaaa30f14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 8 Sep 2010 12:55:44 +0200 Subject: Lighthouse, compile fix eglfs --- src/plugins/platforms/eglfs/qeglfsintegration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp index 07605ec..a48fde8 100644 --- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp +++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp @@ -55,7 +55,7 @@ QT_BEGIN_NAMESPACE QEglFSIntegration::QEglFSIntegration() - mFontDb(new QGenericUnixFontDatabase()) + : mFontDb(new QGenericUnixFontDatabase()) { m_primaryScreen = new QEglFSScreen(EGL_DEFAULT_DISPLAY); -- cgit v0.12 From bb5c934d3e2e07ddf3a1c299b2111d7119a01eb5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 9 Sep 2010 09:26:25 +0200 Subject: Lighthouse: Various compiler warning/error fixes compliments from Vapula --- src/gui/kernel/qapplication_qpa.cpp | 1 - src/gui/kernel/qplatformcursor_qpa.cpp | 8 ++------ src/gui/kernel/qplatformcursor_qpa.h | 2 +- src/gui/kernel/qwindowsysteminterface_qpa.cpp | 2 -- src/gui/kernel/qwindowsysteminterface_qpa_p.h | 2 -- src/plugins/platforms/fb_base/fb_base.cpp | 4 ++-- src/plugins/platforms/fb_base/fb_base.h | 2 +- src/plugins/platforms/linuxfb/qlinuxfbintegration.h | 1 + 8 files changed, 7 insertions(+), 15 deletions(-) diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index e5b5396..d432829 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -68,7 +68,6 @@ QT_BEGIN_NAMESPACE static QString appName; -static const char *appFont = 0; // application font QWidget *qt_button_down = 0; // widget got last button-down diff --git a/src/gui/kernel/qplatformcursor_qpa.cpp b/src/gui/kernel/qplatformcursor_qpa.cpp index 6665396..ac557b9 100644 --- a/src/gui/kernel/qplatformcursor_qpa.cpp +++ b/src/gui/kernel/qplatformcursor_qpa.cpp @@ -187,10 +187,6 @@ static const uchar mcur_fdiag_bits[] = { 0x00, 0x00, 0x00, 0x00, 0xfc, 0x07, 0xfc, 0x03, 0xfc, 0x01, 0xfc, 0x00, 0xfc, 0x41, 0xfc, 0x63, 0xdc, 0x77, 0x8c, 0x7f, 0x04, 0x7f, 0x00, 0x7e, 0x00, 0x7f, 0x80, 0x7f, 0xc0, 0x7f, 0x00, 0x00 }; -static const uchar cur_blank_bits[] = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; // 20 x 20 static const uchar forbidden_bits[] = { @@ -546,11 +542,11 @@ void QPlatformCursorImage::set(Qt::CursorShape id) \a hy the y coordinate of the cursor's hotspot */ -void QPlatformCursorImage::set(const QImage * image, int hx, int hy) +void QPlatformCursorImage::set(const QImage &image, int hx, int hy) { hot.setX(hx); hot.setY(hy); - cursorImage = *image; + cursorImage = image; } /*! diff --git a/src/gui/kernel/qplatformcursor_qpa.h b/src/gui/kernel/qplatformcursor_qpa.h index abdbfee..71d0e87 100644 --- a/src/gui/kernel/qplatformcursor_qpa.h +++ b/src/gui/kernel/qplatformcursor_qpa.h @@ -63,7 +63,7 @@ public: QImage * image() { return &cursorImage; } QPoint hotspot() { return hot; } void set(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); - void set(const QImage * image, int hx, int hy); + void set(const QImage &image, int hx, int hy); void set(Qt::CursorShape); private: static void createSystemCursor(int id); diff --git a/src/gui/kernel/qwindowsysteminterface_qpa.cpp b/src/gui/kernel/qwindowsysteminterface_qpa.cpp index 7b83fd3..bb29cbf 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa.cpp +++ b/src/gui/kernel/qwindowsysteminterface_qpa.cpp @@ -207,7 +207,6 @@ void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEv Qt::TouchPointStates states; QTouchEvent::TouchPoint p; - int primaryPoint = -1; QList::const_iterator point = points.constBegin(); QList::const_iterator end = points.constEnd(); while (point != end) { @@ -217,7 +216,6 @@ void QWindowSystemInterface::handleTouchEvent(QWidget *tlw, ulong timestamp, QEv Qt::TouchPointStates state = point->state; if (point->isPrimary) { state |= Qt::TouchPointPrimary; - primaryPoint = point->id; } p.setState(state); p.setRect(point->area); diff --git a/src/gui/kernel/qwindowsysteminterface_qpa_p.h b/src/gui/kernel/qwindowsysteminterface_qpa_p.h index 5f3ac5d..78e1f33 100644 --- a/src/gui/kernel/qwindowsysteminterface_qpa_p.h +++ b/src/gui/kernel/qwindowsysteminterface_qpa_p.h @@ -49,8 +49,6 @@ QT_BEGIN_NAMESPACE class QWindowSystemInterfacePrivate { public: - Q_ENUMS(EventType); - enum EventType { Close, GeometryChange, diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index ef7ab02..48488d4 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -67,7 +67,7 @@ void QPlatformSoftwareCursor::setCursor(Qt::CursorShape shape) graphic->set(shape); } -void QPlatformSoftwareCursor::setCursor(const QImage * image, int hotx, int hoty) +void QPlatformSoftwareCursor::setCursor(const QImage &image, int hotx, int hoty) { graphic->set(image, hotx, hoty); } @@ -85,7 +85,7 @@ void QPlatformSoftwareCursor::changeCursor(QCursor * widgetCursor, QWidget * wid if (shape == Qt::BitmapCursor) { // application supplied cursor QPoint spot = widgetCursor->hotSpot(); - setCursor(&widgetCursor->pixmap().toImage(), spot.x(), spot.y()); + setCursor(widgetCursor->pixmap().toImage(), spot.x(), spot.y()); } else { // system cursor setCursor(shape); diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index 10f292e..e52455a 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -40,7 +40,7 @@ protected: private: void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY); void setCursor(Qt::CursorShape shape); - void setCursor(const QImage * image, int hotx, int hoty); + void setCursor(const QImage &image, int hotx, int hoty); QRect currentRect; // next place to draw the cursor QRect prevRect; // last place the cursor was drawn QRect getCurrentRect(); diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h index a5d7abd..e93495c 100644 --- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h +++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h @@ -49,6 +49,7 @@ QT_BEGIN_NAMESPACE class QLinuxFbScreen : public QFbScreen { + Q_OBJECT public: QLinuxFbScreen(uchar * d, int w, int h, int lstep, QImage::Format screenFormat); void setGeometry(QRect rect); -- cgit v0.12 From ee7afe2536c7078c0a29dd409b4317869670c170 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 9 Sep 2010 13:27:24 +0200 Subject: Lighthouse Compilefix --- src/gui/kernel/qapplication_qpa.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/kernel/qapplication_qpa.cpp b/src/gui/kernel/qapplication_qpa.cpp index d432829..ece035c 100644 --- a/src/gui/kernel/qapplication_qpa.cpp +++ b/src/gui/kernel/qapplication_qpa.cpp @@ -68,6 +68,7 @@ QT_BEGIN_NAMESPACE static QString appName; +static QString appFont; QWidget *qt_button_down = 0; // widget got last button-down @@ -522,7 +523,7 @@ void qt_init(QApplicationPrivate *priv, int type) QByteArray arg = argv[i]; if (arg == "-fn" || arg == "-font") { if (++i < argc) - appFont = argv[i]; + appFont = QString::fromLocal8Bit(argv[i]); } else if (arg == "-platform") { if (++i < argc) platformName = QLatin1String(argv[i]); -- cgit v0.12 From 41243160f7a9fb5e2eea365ec9757f5496d0387f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 10 Sep 2010 10:22:12 +0200 Subject: Lighthouse: Fixing the openkode implementation --- .../platforms/openkode/qopenkodeintegration.cpp | 136 ++++++++------------- .../platforms/openkode/qopenkodeintegration.h | 3 +- src/plugins/platforms/openkode/qopenkodewindow.cpp | 5 +- 3 files changed, 55 insertions(+), 89 deletions(-) diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index 8fc3862..f8b715f 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -60,33 +60,13 @@ #include "GLES2/gl2ext.h" -#include - - QT_BEGIN_NAMESPACE -QOpenKODEScreen::QOpenKODEScreen() +QOpenKODEScreen::QOpenKODEScreen(KDDisplayNV *kdDisplay, KDDesktopNV *kdDesktop) : mIsFullScreen(false) { - KDDesktopNV *kdDesktop = KD_NULL; - KDDisplayNV *kdDisplay = KD_NULL; - qDebug() << "QOpenKODEScreen::QOpenKODEIntegrationScreen()"; - // Get the default desktop and display - kdDesktop = kdGetDesktopNV(KD_DEFAULT_DESKTOP_NV, KD_NULL); - if (!kdDesktop || kdDesktop == (void*)-1) { - qErrnoWarning(kdGetError(), "Could not obtain KDDesktopNV pointer"); - return; - } - - kdDisplay = kdGetDisplayNV(KD_DEFAULT_DISPLAY_NV, KD_NULL); - if (!kdDisplay || kdDisplay == (void*)-1) { - qErrnoWarning(kdGetError(), "Could not obtain KDDisplayNV pointer"); - kdReleaseDesktopNV(kdDesktop); - return; - } - KDboolean enabled = KD_TRUE; kdSetDisplayPropertybvNV(kdDisplay, KD_DISPLAYPROPERTY_ENABLED_NV, @@ -139,64 +119,64 @@ QOpenKODEScreen::QOpenKODEScreen() } -static GLuint loadShaders(const QString &vertexShader, const QString &fragmentShader) -{ - GLuint prog = 0; - GLuint vertShader; - GLuint fragShader; - - // Create the program - prog = glCreateProgram(); - - // Create the GL shader objects - vertShader = glCreateShader(GL_VERTEX_SHADER); - fragShader = glCreateShader(GL_FRAGMENT_SHADER); - - // Load shader sources into GL and compile - QFile vertexFile(vertexShader); - vertexFile.open(QFile::ReadOnly); - QByteArray vertSource = vertexFile.readAll(); - const char *vertChar = vertSource.constData(); - int vertSize = vertSource.size(); - - QFile fragFile(fragmentShader); - fragFile.open(QFile::ReadOnly); - QByteArray fragSource = fragFile.readAll(); - const char *fragChar = fragSource.constData(); - int fragSize = fragSource.size(); - - glShaderSource(vertShader, 1, (const char**)&vertChar, &vertSize); - glCompileShader(vertShader); - - glShaderSource(fragShader, 1, (const char**)&fragChar, &fragSize); - glCompileShader(fragShader); - - // Attach the shaders to the program - glAttachShader(prog, vertShader); - glAttachShader(prog, fragShader); - - // Delete the shaders - glDeleteShader(vertShader); - glDeleteShader(fragShader); - - // Link and validate the shader program - glLinkProgram(prog); - glValidateProgram(prog); - - return prog; -} - QOpenKODEIntegration::QOpenKODEIntegration() : mEventLoopIntegration(0) { if (kdInitializeNV() == KD_ENOTINITIALIZED) { qFatal("Did not manage to initialize openkode"); } - QOpenKODEScreen *mPrimaryScreen = new QOpenKODEScreen(); - - mScreens.append(mPrimaryScreen); + KDDisplaySystemNV *kdDisplaySystem = kdCreateDisplaySystemSnapshotNV(this); + KDint32 displayCount = 0; + kdGetDisplaySystemPropertyivNV(kdDisplaySystem, KD_DISPLAYPROPERTY_COUNT_NV, 0, &displayCount); + + for (int i = 0; i < displayCount; i++) { + KDchar *displayName = 0; + KDsize displayNameLength = 0; + kdGetDisplaySystemPropertycvNV(kdDisplaySystem,KD_DISPLAYPROPERTY_NAME_NV,i,0,&displayNameLength); + if (!displayNameLength) + continue; + displayName = new KDchar[displayNameLength]; + kdGetDisplaySystemPropertycvNV(kdDisplaySystem,KD_DISPLAYPROPERTY_NAME_NV,i,displayName,&displayNameLength); + + KDDisplayNV *display = kdGetDisplayNV(displayName,this); + if (!display || display == (void*)-1) { + qErrnoWarning(kdGetError(), "Could not obtain KDDisplayNV pointer"); + return; + } + if (displayNameLength) + delete displayName; + + KDchar *desktopName = 0; + KDsize desktopNameLength = 0; + bool openkodeImpDoesNotFail = false; + if (openkodeImpDoesNotFail) { + qDebug() << "printing desktopname"; + kdGetDisplayPropertycvNV(display,KD_DISPLAYPROPERTY_DESKTOP_NAME_NV,desktopName,&desktopNameLength); + if (desktopNameLength) { + desktopName = new KDchar[desktopNameLength]; + kdGetDisplayPropertycvNV(display,KD_DISPLAYPROPERTY_DESKTOP_NAME_NV,desktopName,&desktopNameLength); + } else { + desktopName = KD_DEFAULT_DESKTOP_NV; + } + } else { + desktopName = KD_DEFAULT_DESKTOP_NV; + } + + KDDesktopNV *desktop = kdGetDesktopNV(desktopName,this); + if (!desktop || desktop == (void*)-1) { + qErrnoWarning(kdGetError(), "Could not obtain KDDesktopNV pointer"); + kdReleaseDisplayNV(display); + return; + } + if (desktopNameLength) + delete desktopName; + + QOpenKODEScreen *screen = new QOpenKODEScreen(display,desktop); + mScreens.append(screen); + } } + QOpenKODEIntegration::~QOpenKODEIntegration() { delete mEventLoopIntegration; @@ -212,7 +192,7 @@ QPlatformWindow *QOpenKODEIntegration::createPlatformWindow(QWidget *tlw, WId ) return new QOpenKODEWindow(tlw); } -QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId wid) const +QWindowSurface *QOpenKODEIntegration::createWindowSurface(QWidget *widget, WId) const { QWindowSurface *returnSurface = 0; switch (widget->platformWindowFormat().windowApi()) { @@ -248,17 +228,5 @@ QPlatformEventLoopIntegration *QOpenKODEIntegration::createEventLoopIntegration( return mEventLoopIntegration; } -GLuint QOpenKODEIntegration::blitterProgram() -{ - static GLuint shaderProgram = 0; - if (!shaderProgram) { - - shaderProgram = loadShaders(":/shaders/vert.glslv",":/shaders/frag.glslf"); - if (!shaderProgram) - qFatal("QOpenKodeGraphicsSystem(): Cannot load shaders!"); - } - return shaderProgram; -} - QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index 454aa90..939cae3 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -57,13 +57,14 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE struct KDDesktopNV; +struct KDDisplayNV; class QOpenKODECursor; class QOpenKODEScreen : public QPlatformScreen { Q_OBJECT public: - QOpenKODEScreen(); + QOpenKODEScreen(KDDisplayNV *kdDisplay, KDDesktopNV *kdDesktop); ~QOpenKODEScreen() {} QRect geometry() const { return mGeometry; } diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index 454a50f..fadf564 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -104,9 +104,8 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) format.setRedBufferSize(5); format.setGreenBufferSize(6); format.setBlueBufferSize(5); - tlw->setPlatformWindowFormat(format); - m_eglConfig = q_configFromQPlatformWindowFormat(screen->eglDisplay(),tlw->platformWindowFormat()); + m_eglConfig = q_configFromQPlatformWindowFormat(screen->eglDisplay(),format); m_kdWindow = kdCreateWindow(screen->eglDisplay(), m_eglConfig, @@ -169,7 +168,6 @@ QOpenKODEWindow::QOpenKODEWindow(QWidget *tlw) QOpenKODEWindow::~QOpenKODEWindow() { - qDebug() << "destroying window" << m_kdWindow; if (m_platformGlContext != QPlatformGLContext::defaultSharedContext()) { delete m_platformGlContext; } @@ -274,7 +272,6 @@ void QOpenKODEWindow::processMouseEvents(const KDEvent *event) default: buttons = Qt::NoButton; } - qDebug() << x << y; QPoint pos(x,y); QWindowSystemInterface::handleMouseEvent(0,event->timestamp,pos,pos,buttons); } -- cgit v0.12 From 0bf1b83cd7d972a69388cdbd759dbba8b1baffd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 10 Sep 2010 15:27:31 +0200 Subject: Lighthouse: Adding QGenericUnixFontDatabase to OpenKODE --- src/plugins/platforms/openkode/openkode.pro | 2 ++ src/plugins/platforms/openkode/qopenkodeintegration.cpp | 10 +++++++++- src/plugins/platforms/openkode/qopenkodeintegration.h | 4 ++++ 3 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/plugins/platforms/openkode/openkode.pro b/src/plugins/platforms/openkode/openkode.pro index 5f2c1cc..c8ae415 100644 --- a/src/plugins/platforms/openkode/openkode.pro +++ b/src/plugins/platforms/openkode/openkode.pro @@ -19,6 +19,8 @@ HEADERS = qopenkodeintegration.h \ qopenkodeeventloopintegration.h \ openkodekeytranslator.h +include (../fontdatabases/genericunix/genericunix.pri) + RESOURCES = resources.qrc target.path += $$[QT_INSTALL_PLUGINS]/platforms diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index f8b715f..0c29a33 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -52,6 +52,8 @@ #include #include +#include "qgenericunixfontdatabase.h" + #include #include #include @@ -120,7 +122,7 @@ QOpenKODEScreen::QOpenKODEScreen(KDDisplayNV *kdDisplay, KDDesktopNV *kdDesktop } QOpenKODEIntegration::QOpenKODEIntegration() - : mEventLoopIntegration(0) + : mEventLoopIntegration(0), mFontDb(new QGenericUnixFontDatabase()) { if (kdInitializeNV() == KD_ENOTINITIALIZED) { qFatal("Did not manage to initialize openkode"); @@ -180,6 +182,7 @@ QOpenKODEIntegration::QOpenKODEIntegration() QOpenKODEIntegration::~QOpenKODEIntegration() { delete mEventLoopIntegration; + delete mFontDb; } QPixmapData *QOpenKODEIntegration::createPixmapData(QPixmapData::PixelType type) const @@ -228,5 +231,10 @@ QPlatformEventLoopIntegration *QOpenKODEIntegration::createEventLoopIntegration( return mEventLoopIntegration; } +QPlatformFontDatabase *QOpenKODEIntegration::fontDatabase() const +{ + return mFontDb; +} + QT_END_NAMESPACE diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index 939cae3..907b7e2 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -49,6 +49,7 @@ #include #include #include +#include #include #include @@ -97,6 +98,8 @@ public: QPlatformEventLoopIntegration *createEventLoopIntegration() const; + QPlatformFontDatabase *fontDatabase() const; + virtual QList screens() const { return mScreens; } static GLuint blitterProgram(); @@ -104,6 +107,7 @@ public: private: QList mScreens; QOpenKODEEventLoopIntegration *mEventLoopIntegration; + QPlatformFontDatabase *mFontDb; }; QT_END_NAMESPACE -- cgit v0.12 From 18e35b4764766ef8171ec30b00d0d6bc19edb0ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 16 Sep 2010 10:15:08 +0200 Subject: Lighthouse: Remove auto building platform plugins Reviewed-by: paul --- configure | 6 ------ src/plugins/platforms/platforms.pro | 17 +---------------- 2 files changed, 1 insertion(+), 22 deletions(-) diff --git a/configure b/configure index d252f51..0723af1 100755 --- a/configure +++ b/configure @@ -6116,12 +6116,6 @@ if [ "$PLATFORM_QPA" = "yes" ]; then fi fi - # MIT_SHM is required for testlite - if [ "$CFG_MITSHM" != "no" ]; then - if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/x11/mitshm "mitshm" $L_FLAGS $I_FLAGS $l_FLAGS $X11TESTS_FLAGS; then - QT_CONFIG="$QT_CONFIG mitshm" - fi - fi fi diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro index 3446e81..26ccd44 100644 --- a/src/plugins/platforms/platforms.pro +++ b/src/plugins/platforms/platforms.pro @@ -1,19 +1,4 @@ TEMPLATE = subdirs -contains(QT_CONFIG, openvg):contains(QT_CONFIG, egl) { - SUBDIRS += openvglite -} - SUBDIRS += minimal +SUBDIRS += minimal -contains(QT_CONFIG, mitshm) { - SUBDIRS += testlite -} - -linux { - SUBDIRS += linuxfb -} - -unix { - SUBDIRS += vnc \ - qvfb -} -- cgit v0.12 From e28b1810ba5979dcf2146f9389007b4cfd67a31c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 16 Sep 2010 12:45:26 +0200 Subject: Lighthouse: fix QDirectFbScreen::depth to not be fixed to 32 --- src/plugins/platforms/directfb/qdirectfbintegration.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index 64b98db..1b3e035 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -71,7 +71,7 @@ QDirectFbScreen::QDirectFbScreen(int display) m_geometry = QRect(0,0,config.width,config.height); const int dpi = 72; const qreal inch = 25.4; - m_depth = 32; + m_depth = QDirectFbConvenience::colorDepthForSurface(config.pixelformat); m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); cursor = new QDirectFBCursor(this); -- cgit v0.12 From dc8d0961a50e28224dc36febb3530c47444f8638 Mon Sep 17 00:00:00 2001 From: "Bradley T. Hughes" Date: Mon, 27 Sep 2010 14:00:23 +0200 Subject: Compile when detecting ARMv5 The macro is called QT_END_INCLUDE_HEADER, not QT_END_INCLUDE_HEADERS (no trailing S). --- src/corelib/arch/qatomic_arm.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/corelib/arch/qatomic_arm.h b/src/corelib/arch/qatomic_arm.h index f9d71e9..1c1c8a5 100644 --- a/src/corelib/arch/qatomic_arm.h +++ b/src/corelib/arch/qatomic_arm.h @@ -68,7 +68,7 @@ QT_END_INCLUDE_HEADER # define QT_ARCH_ARMV5 QT_BEGIN_INCLUDE_HEADER # include "QtCore/qatomic_armv5.h" -QT_END_INCLUDE_HEADERS +QT_END_INCLUDE_HEADER #endif QT_END_HEADER -- cgit v0.12 From 534d22fd647f79b9fde08329a6b9e355c6611132 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 30 Sep 2010 13:29:28 +0200 Subject: Lighthouse: Make application fonts work Reviewed-by:paul --- src/gui/text/qfontdatabase_qpa.cpp | 3 ++- src/gui/text/qplatformfontdatabase_qpa.cpp | 7 ++++++- src/gui/text/qplatformfontdatabase_qpa.h | 2 +- .../fontdatabases/basicunix/qbasicunixfontdatabase.cpp | 10 +++++++--- .../platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h | 4 ++-- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/gui/text/qfontdatabase_qpa.cpp b/src/gui/text/qfontdatabase_qpa.cpp index 53594aa..19ce1be 100644 --- a/src/gui/text/qfontdatabase_qpa.cpp +++ b/src/gui/text/qfontdatabase_qpa.cpp @@ -199,7 +199,8 @@ static void registerFont(QFontDatabasePrivate::ApplicationFont *fnt) { QFontDatabasePrivate *db = privateDb(); - QApplicationPrivate::platformIntegration()->fontDatabase()->addApplicationFont(fnt->data,fnt->fileName); + fnt->families = QApplicationPrivate::platformIntegration()->fontDatabase()->addApplicationFont(fnt->data,fnt->fileName); + db->reregisterAppFonts = true; } diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp index 7bb1f9a..26f4faa 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.cpp +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -165,12 +165,17 @@ QStringList QPlatformFontDatabase::fallbacksForFamily(const QString family, cons return QStringList(); } -void QPlatformFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName) +/*! + Adds an application font. Returns a list of family names, or an empty list if the font could + not be added +*/ +QStringList QPlatformFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName) { Q_UNUSED(fontData); Q_UNUSED(fileName); qWarning("This plugin does not support application fonts"); + return QStringList(); } void QPlatformFontDatabase::releaseHandle(void *handle) diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h index a34033f..adaa4cb 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.h +++ b/src/gui/text/qplatformfontdatabase_qpa.h @@ -46,7 +46,7 @@ public: virtual void populateFontDatabase(); virtual QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle); virtual QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const; - virtual void addApplicationFont(const QByteArray &fontData, const QString &fileName); + virtual QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName); virtual void releaseHandle(void *handle); virtual QString fontDir() const; diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp index 5b8ca63..5b6f69a 100644 --- a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp +++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp @@ -204,9 +204,9 @@ QStringList QBasicUnixFontDatabase::fallbacksForFamily(const QString family, con return QStringList(); } -void QBasicUnixFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName) +QStringList QBasicUnixFontDatabase::addApplicationFont(const QByteArray &fontData, const QString &fileName) { - addTTFile(fontData,fileName.toLocal8Bit()); + return addTTFile(fontData,fileName.toLocal8Bit()); } void QBasicUnixFontDatabase::releaseHandle(void *handle) @@ -215,13 +215,14 @@ void QBasicUnixFontDatabase::releaseHandle(void *handle) delete file; } -void QBasicUnixFontDatabase::addTTFile(const QByteArray &fontData, const QByteArray &file) +QStringList QBasicUnixFontDatabase::addTTFile(const QByteArray &fontData, const QByteArray &file) { extern FT_Library qt_getFreetype(); FT_Library library = qt_getFreetype(); int index = 0; int numFaces = 0; + QStringList families; do { FT_Face face; FT_Error error; @@ -275,7 +276,10 @@ void QBasicUnixFontDatabase::addTTFile(const QByteArray &fontData, const QByteAr registerFont(family,"",weight,style,100,true,true,0,writingSystems,fontFile); + families.append(family); + FT_Done_Face(face); ++index; } while (index < numFaces); + return families; } diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h index 401a4aa..95015df 100644 --- a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h +++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h @@ -17,10 +17,10 @@ public: void populateFontDatabase(); QFontEngine *fontEngine(const QFontDef &fontDef, QUnicodeTables::Script script, void *handle); QStringList fallbacksForFamily(const QString family, const QFont::Style &style, const QUnicodeTables::Script &script) const; - void addApplicationFont(const QByteArray &fontData, const QString &fileName); + QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName); void releaseHandle(void *handle); - static void addTTFile(const QByteArray &fontData, const QByteArray &file); + static QStringList addTTFile(const QByteArray &fontData, const QByteArray &file); }; #endif // QBASICUNIXFONTDATABASE_H -- cgit v0.12 From d9f42e554c1da7aafad59881e1d143ff8672b833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 30 Sep 2010 14:19:46 +0200 Subject: Lighthouse: make QFontconfigDatabase not override application font --- .../fontdatabases/fontconfig/qfontconfigdatabase.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp index 562cb2d..85515ed 100644 --- a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -392,10 +392,13 @@ void QFontconfigDatabase::populateFontDatabase() ++f; } - const FcDefaultFont *s = defaults; - QFont font("Sans Serif"); - font.setPointSize(9); - QApplication::setFont(font); + //Lighthouse has very lazy population of the font db. We want it to be initialized when + //QApplication is constructed, so that the population procedure can do something like this to + //set the default font +// const FcDefaultFont *s = defaults; +// QFont font("Sans Serif"); +// font.setPointSize(9); +// QApplication::setFont(font); } QFontEngine *QFontconfigDatabase::fontEngine(const QFontDef &f, QUnicodeTables::Script script, void *usrPtr) -- cgit v0.12 From 33cdcafb24f21278d2ab34fa04cbf82ba57fa2aa Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Thu, 7 Oct 2010 08:28:46 +0200 Subject: use swapInterval=1 by default in EglFS to potentially avoid tearing --- src/plugins/platforms/eglfs/qeglfsscreen.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp index 1b64e7e..b31b204 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -121,6 +121,8 @@ QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display) platformFormat.setRedBufferSize(8); platformFormat.setGreenBufferSize(8); platformFormat.setBlueBufferSize(8); + platformFormat.setSwapInterval(1); + EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); EGLNativeWindowType eglWindow = 0; -- cgit v0.12 From c235ecf5bae30fbd88845ec60e2ba2eaf2e8079e Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Thu, 7 Oct 2010 14:42:13 +0200 Subject: Make it possible to choose some EGLFS configuration options via envvars --- src/plugins/platforms/eglfs/qeglfsscreen.cpp | 36 +++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 6 deletions(-) diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp index b31b204..682f2f4 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -50,7 +50,7 @@ QT_BEGIN_NAMESPACE -//#define QEGL_EXTRA_DEBUG +// #define QEGL_EXTRA_DEBUG #ifdef QEGL_EXTRA_DEBUG struct AttrInfo { EGLint attr; const char *name; }; @@ -116,12 +116,36 @@ QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display) qWarning("Initialized display %d %d\n", major, minor); QPlatformWindowFormat platformFormat; - platformFormat.setDepth(32); platformFormat.setWindowApi(QPlatformWindowFormat::OpenGL); - platformFormat.setRedBufferSize(8); - platformFormat.setGreenBufferSize(8); - platformFormat.setBlueBufferSize(8); - platformFormat.setSwapInterval(1); + + QByteArray depthString = qgetenv("QT_QPA_EGLFS_DEPTH"); + if (depthString.toInt() == 16) { + platformFormat.setDepth(16); + platformFormat.setRedBufferSize(5); + platformFormat.setGreenBufferSize(6); + platformFormat.setBlueBufferSize(5); + m_depth = 16; + m_format = QImage::Format_RGB16; + } else { + platformFormat.setDepth(32); + platformFormat.setRedBufferSize(8); + platformFormat.setGreenBufferSize(8); + platformFormat.setBlueBufferSize(8); + } + + if (!qgetenv("QT_QPA_EGLFS_MULTISAMPLE").isEmpty()) { + platformFormat.setSampleBuffers(true); + } + + int swapInterval = 1; + QByteArray swapIntervalString = qgetenv("QT_QPA_EGLFS_SWAPINTERVAL"); + if (!swapIntervalString.isEmpty()) { + bool ok; + swapInterval = swapIntervalString.toInt(&ok); + if (!ok) + swapInterval = 1; + } + platformFormat.setSwapInterval(swapInterval); EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); -- cgit v0.12 From e2ba67cd1d2887cec84058e260dd0f76cbab8771 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Mon, 11 Oct 2010 16:58:18 +0200 Subject: Add keycodes for some additional multimedia keys --- src/gui/embedded/qkbd_defaultmap_qws_p.h | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/gui/embedded/qkbd_defaultmap_qws_p.h b/src/gui/embedded/qkbd_defaultmap_qws_p.h index 16c3459..703dfcd 100644 --- a/src/gui/embedded/qkbd_defaultmap_qws_p.h +++ b/src/gui/embedded/qkbd_defaultmap_qws_p.h @@ -642,7 +642,14 @@ const QWSKeyboard::Mapping QWSKbPrivate::s_keymap_default[] = { { 111, 0xffff, 0x01000007, 0x00, 0x00, 0x0000 }, { 111, 0xffff, 0x01000000, 0x06, 0x08, 0x0200 }, { 111, 0xffff, 0x01000000, 0x0c, 0x08, 0x0200 }, + { 113, 0xffff, 0x01000071, 0x00, 0x00, 0x0000 }, + { 114, 0xffff, 0x01000070, 0x00, 0x00, 0x0000 }, + { 115, 0xffff, 0x01000072, 0x00, 0x00, 0x0000 }, + { 116, 0xffff, 0x0100010b, 0x00, 0x00, 0x0000 }, { 119, 0xffff, 0x01000008, 0x00, 0x00, 0x0000 }, + { 138, 0xffff, 0x01000058, 0x00, 0x00, 0x0000 }, + { 139, 0xffff, 0x01000055, 0x00, 0x00, 0x0000 }, + }; const QWSKeyboard::Composing QWSKbPrivate::s_keycompose_default[] = { -- cgit v0.12 From 8b2ec1a88db8b2b932e2218080adf6202fd9f559 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Tue, 12 Oct 2010 17:43:54 +0200 Subject: Mouse event compression Compression turned on by default, can be turned off by adding "nocompress" to the specification. Also turn off experimental touch event support by default. --- src/plugins/generic/linuxinput/qlinuxinput.cpp | 41 +++++++++++++++++++------- src/plugins/generic/linuxinput/qlinuxinput.h | 1 + 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 2b01973..782194d 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -65,9 +65,9 @@ QT_BEGIN_NAMESPACE -#define QT_QPA_EXPERIMENTAL_MULTITOUCH +//#define QT_QPA_EXPERIMENTAL_TOUCHEVENT -#ifdef QT_QPA_EXPERIMENTAL_MULTITOUCH +#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT class QLinuxInputMouseHandlerData { public: @@ -139,8 +139,15 @@ QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, setObjectName(QLatin1String("LinuxInputSubsystem Mouse Handler")); QString dev = QLatin1String("/dev/input/event0"); - if (specification.startsWith(QLatin1String("/dev/"))) - dev = specification; + m_compression = true; + + QStringList args = specification.split(QLatin1Char(':')); + foreach (const QString &arg, args) { + if (arg == "nocompress") + m_compression = false; + else if (arg.startsWith(QLatin1String("/dev/"))) + dev = arg; + } m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0); if (m_fd >= 0) { @@ -150,7 +157,7 @@ QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, qWarning("Cannot open mouse input device '%s': %s", qPrintable(dev), strerror(errno)); return; } -#ifdef QT_QPA_EXPERIMENTAL_MULTITOUCH +#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT d = new QLinuxInputMouseHandlerData; #endif } @@ -160,7 +167,9 @@ QLinuxInputMouseHandler::~QLinuxInputMouseHandler() { if (m_fd >= 0) QT_CLOSE(m_fd); +#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT delete d; +#endif } void QLinuxInputMouseHandler::readMouseData() @@ -168,7 +177,7 @@ void QLinuxInputMouseHandler::readMouseData() struct ::input_event buffer[32]; int n = 0; bool posChanged = false; - + bool pendingMouseEvent = false; forever { n = QT_READ(m_fd, reinterpret_cast(buffer) + n, sizeof(buffer) - n); @@ -204,7 +213,7 @@ void QLinuxInputMouseHandler::readMouseData() //ignore for now... } else if (data->code == ABS_HAT0Y) { //ignore for now... -#ifdef QT_QPA_EXPERIMENTAL_MULTITOUCH +#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT } else if (data->code == ABS_MT_POSITION_X) { d->currentX = data->value; d->seenMT = true; @@ -248,6 +257,7 @@ void QLinuxInputMouseHandler::readMouseData() QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), QPoint(m_x, m_y), m_buttons); + pendingMouseEvent = false; } else if (data->type == EV_KEY && data->code >= BTN_LEFT && data->code <= BTN_MIDDLE) { Qt::MouseButton button = Qt::NoButton; switch (data->code) { @@ -262,16 +272,19 @@ void QLinuxInputMouseHandler::readMouseData() QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), QPoint(m_x, m_y), m_buttons); + pendingMouseEvent = false; } else if (data->type == EV_SYN && data->code == SYN_REPORT) { if (posChanged) { posChanged = false; QPoint pos(m_x, m_y); - - QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); + if (m_compression) + pendingMouseEvent = true; + else + QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); } -#ifdef QT_QPA_EXPERIMENTAL_MULTITOUCH +#ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT if (d->state == QEvent::TouchBegin && !d->seenMT) { - //no multi-touch events to send + //no multipoint-touch events to send } else { if (!d->seenMT) d->state = QEvent::TouchEnd; @@ -316,9 +329,15 @@ void QLinuxInputMouseHandler::readMouseData() } else { unknown = true; } +#ifdef QLINUXINPUT_EXTRA_DEBUG if (unknown) { qWarning("unknown mouse event type=%x, code=%x, value=%x", data->type, data->code, data->value); } +#endif + } + if (m_compression && pendingMouseEvent) { + QPoint pos(m_x, m_y); + QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); } } diff --git a/src/plugins/generic/linuxinput/qlinuxinput.h b/src/plugins/generic/linuxinput/qlinuxinput.h index 535816d..4b7d7de 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.h +++ b/src/plugins/generic/linuxinput/qlinuxinput.h @@ -69,6 +69,7 @@ private: int m_fd; int m_x, m_y; Qt::MouseButtons m_buttons; + bool m_compression; QLinuxInputMouseHandlerData *d; }; -- cgit v0.12 From 0cb3705195b54f199280ab0b8554c793f67425e2 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 13 Oct 2010 11:09:58 +0200 Subject: Jitter removal --- src/plugins/generic/linuxinput/qlinuxinput.cpp | 40 +++++++++++++++++--------- src/plugins/generic/linuxinput/qlinuxinput.h | 5 ++++ 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 782194d..07f7a43 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -131,7 +131,7 @@ private: QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, const QString &specification) - : m_notify(0), m_x(0), m_y(0), m_buttons(0), d(0) + : m_notify(0), m_x(0), m_y(0), m_prevx(0), m_prevy(0), m_buttons(0), d(0) { qDebug() << "QLinuxInputMouseHandler" << key << specification; @@ -140,15 +140,20 @@ QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, QString dev = QLatin1String("/dev/input/event0"); m_compression = true; + m_smooth = false; + int jitterLimit = 0; QStringList args = specification.split(QLatin1Char(':')); foreach (const QString &arg, args) { if (arg == "nocompress") m_compression = false; + else if (arg.startsWith("dejitter=")) + jitterLimit = arg.mid(9).toInt(); else if (arg.startsWith(QLatin1String("/dev/"))) dev = arg; } - + m_jitterLimitSquared = jitterLimit*jitterLimit; + m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0); if (m_fd >= 0) { m_notify = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); @@ -172,12 +177,21 @@ QLinuxInputMouseHandler::~QLinuxInputMouseHandler() #endif } +void QLinuxInputMouseHandler::sendMouseEvent(int x, int y, Qt::MouseButtons buttons) +{ + QPoint pos(x, y); + QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); + m_prevx = x; + m_prevy = y; +} + void QLinuxInputMouseHandler::readMouseData() { struct ::input_event buffer[32]; int n = 0; bool posChanged = false; bool pendingMouseEvent = false; + int eventCompressCount = 0; forever { n = QT_READ(m_fd, reinterpret_cast(buffer) + n, sizeof(buffer) - n); @@ -255,8 +269,7 @@ void QLinuxInputMouseHandler::readMouseData() } else if (data->type == EV_KEY && data->code == BTN_TOUCH) { m_buttons = data->value ? Qt::LeftButton : Qt::NoButton; - QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), - QPoint(m_x, m_y), m_buttons); + sendMouseEvent(m_x, m_y, m_buttons); pendingMouseEvent = false; } else if (data->type == EV_KEY && data->code >= BTN_LEFT && data->code <= BTN_MIDDLE) { Qt::MouseButton button = Qt::NoButton; @@ -269,18 +282,17 @@ void QLinuxInputMouseHandler::readMouseData() m_buttons |= button; else m_buttons &= ~button; - - QWindowSystemInterface::handleMouseEvent(0, QPoint(m_x, m_y), - QPoint(m_x, m_y), m_buttons); + sendMouseEvent(m_x, m_y, m_buttons); pendingMouseEvent = false; } else if (data->type == EV_SYN && data->code == SYN_REPORT) { if (posChanged) { posChanged = false; - QPoint pos(m_x, m_y); - if (m_compression) + if (m_compression) { pendingMouseEvent = true; - else - QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); + eventCompressCount++; + } else { + sendMouseEvent(m_x, m_y, m_buttons); + } } #ifdef QT_QPA_EXPERIMENTAL_TOUCHEVENT if (d->state == QEvent::TouchBegin && !d->seenMT) { @@ -336,8 +348,9 @@ void QLinuxInputMouseHandler::readMouseData() #endif } if (m_compression && pendingMouseEvent) { - QPoint pos(m_x, m_y); - QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); + int distanceSquared = (m_x - m_prevx)*(m_x - m_prevx) + (m_y - m_prevy)*(m_y - m_prevy); + if (distanceSquared > m_jitterLimitSquared) + sendMouseEvent(m_x, m_y, m_buttons); } } @@ -531,3 +544,4 @@ void QLinuxInputKeyboardHandler::readKeycode() QT_END_NAMESPACE + diff --git a/src/plugins/generic/linuxinput/qlinuxinput.h b/src/plugins/generic/linuxinput/qlinuxinput.h index 4b7d7de..37123f1 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.h +++ b/src/plugins/generic/linuxinput/qlinuxinput.h @@ -65,11 +65,16 @@ private slots: void readMouseData(); private: + void sendMouseEvent(int x, int y, Qt::MouseButtons buttons); QSocketNotifier * m_notify; int m_fd; int m_x, m_y; + int m_prevx, m_prevy; + int m_smoothx, m_smoothy; Qt::MouseButtons m_buttons; bool m_compression; + bool m_smooth; + int m_jitterLimitSquared; QLinuxInputMouseHandlerData *d; }; -- cgit v0.12 From 5a8078cb2cf1c95e8d853b9b0bd8c8303f52aceb Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 13 Oct 2010 13:37:37 +0200 Subject: Add touch offset --- src/plugins/generic/linuxinput/qlinuxinput.cpp | 8 ++++++-- src/plugins/generic/linuxinput/qlinuxinput.h | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index 07f7a43..b3ef6bd 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -131,7 +131,7 @@ private: QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, const QString &specification) - : m_notify(0), m_x(0), m_y(0), m_prevx(0), m_prevy(0), m_buttons(0), d(0) + : m_notify(0), m_x(0), m_y(0), m_prevx(0), m_prevy(0), m_xoffset(0), m_yoffset(0), m_buttons(0), d(0) { qDebug() << "QLinuxInputMouseHandler" << key << specification; @@ -149,6 +149,10 @@ QLinuxInputMouseHandler::QLinuxInputMouseHandler(const QString &key, m_compression = false; else if (arg.startsWith("dejitter=")) jitterLimit = arg.mid(9).toInt(); + else if (arg.startsWith("xoffset=")) + m_xoffset = arg.mid(8).toInt(); + else if (arg.startsWith("yoffset=")) + m_yoffset = arg.mid(8).toInt(); else if (arg.startsWith(QLatin1String("/dev/"))) dev = arg; } @@ -179,7 +183,7 @@ QLinuxInputMouseHandler::~QLinuxInputMouseHandler() void QLinuxInputMouseHandler::sendMouseEvent(int x, int y, Qt::MouseButtons buttons) { - QPoint pos(x, y); + QPoint pos(x+m_xoffset, y+m_yoffset); QWindowSystemInterface::handleMouseEvent(0, pos, pos, m_buttons); m_prevx = x; m_prevy = y; diff --git a/src/plugins/generic/linuxinput/qlinuxinput.h b/src/plugins/generic/linuxinput/qlinuxinput.h index 37123f1..c94c0f4 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.h +++ b/src/plugins/generic/linuxinput/qlinuxinput.h @@ -70,6 +70,7 @@ private: int m_fd; int m_x, m_y; int m_prevx, m_prevy; + int m_xoffset, m_yoffset; int m_smoothx, m_smoothy; Qt::MouseButtons m_buttons; bool m_compression; -- cgit v0.12 From c118708a9886643db887a89b02f31a1879604116 Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Wed, 13 Oct 2010 15:34:38 +0200 Subject: Don't clobber the tty by default Add a ttymode option to LinuxInputKeyboard which turns on setting the keyboard mode and turns off Ctrl-C --- src/plugins/generic/linuxinput/qlinuxinput.cpp | 62 ++++++++++++++------------ 1 file changed, 34 insertions(+), 28 deletions(-) diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index b3ef6bd..bd57fa3 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -404,12 +404,16 @@ QLinuxInputKeyboardHandler::QLinuxInputKeyboardHandler(const QString &key, const int repeat_delay = -1; int repeat_rate = -1; + bool ttymode = false; + QStringList args = specification.split(QLatin1Char(':')); foreach (const QString &arg, args) { if (arg.startsWith(QLatin1String("repeat-delay="))) repeat_delay = arg.mid(13).toInt(); else if (arg.startsWith(QLatin1String("repeat-rate="))) repeat_rate = arg.mid(12).toInt(); + else if (arg.startsWith(QLatin1String("ttymode"))) + ttymode = true; else if (arg.startsWith(QLatin1String("/dev/"))) dev = arg; } @@ -427,34 +431,36 @@ QLinuxInputKeyboardHandler::QLinuxInputKeyboardHandler(const QString &key, const notifier = new QSocketNotifier(m_fd, QSocketNotifier::Read, this); connect(notifier, SIGNAL(activated(int)), this, SLOT(readKeycode())); - // play nice in case we are started from a shell (e.g. for debugging) - m_tty_fd = isatty(0) ? 0 : -1; - - if (m_tty_fd >= 0) { - // save tty config for restore. - tcgetattr(m_tty_fd, &m_tty_attr); - - struct ::termios termdata; - tcgetattr(m_tty_fd, &termdata); - - // record the original mode so we can restore it again in the destructor. - ::ioctl(m_tty_fd, KDGKBMODE, &m_orig_kbmode); - - // setting this tranlation mode is even needed in INPUT mode to prevent - // the shell from also interpreting codes, if the process has a tty - // attached: e.g. Ctrl+C wouldn't copy, but kill the application. - ::ioctl(m_tty_fd, KDSKBMODE, K_MEDIUMRAW); - - // set the tty layer to pass-through - termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP); - termdata.c_oflag = 0; - termdata.c_cflag = CREAD | CS8; - termdata.c_lflag = 0; - termdata.c_cc[VTIME]=0; - termdata.c_cc[VMIN]=1; - cfsetispeed(&termdata, 9600); - cfsetospeed(&termdata, 9600); - tcsetattr(m_tty_fd, TCSANOW, &termdata); + if (ttymode) { + // play nice in case we are started from a shell (e.g. for debugging) + m_tty_fd = isatty(0) ? 0 : -1; + + if (m_tty_fd >= 0) { + // save tty config for restore. + tcgetattr(m_tty_fd, &m_tty_attr); + + struct ::termios termdata; + tcgetattr(m_tty_fd, &termdata); + + // record the original mode so we can restore it again in the destructor. + ::ioctl(m_tty_fd, KDGKBMODE, &m_orig_kbmode); + + // setting this tranlation mode is even needed in INPUT mode to prevent + // the shell from also interpreting codes, if the process has a tty + // attached: e.g. Ctrl+C wouldn't copy, but kill the application. + ::ioctl(m_tty_fd, KDSKBMODE, K_MEDIUMRAW); + + // set the tty layer to pass-through + termdata.c_iflag = (IGNPAR | IGNBRK) & (~PARMRK) & (~ISTRIP); + termdata.c_oflag = 0; + termdata.c_cflag = CREAD | CS8; + termdata.c_lflag = 0; + termdata.c_cc[VTIME]=0; + termdata.c_cc[VMIN]=1; + cfsetispeed(&termdata, 9600); + cfsetospeed(&termdata, 9600); + tcsetattr(m_tty_fd, TCSANOW, &termdata); + } } } else { qWarning("Cannot open keyboard input device '%s': %s", qPrintable(dev), strerror(errno)); -- cgit v0.12 From 78f3600423e6e48cd7d99c631f634c7949eb4227 Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Thu, 14 Oct 2010 17:08:13 +0200 Subject: Update sections if model content changes. We didn't handle the section property changing, e.g. due to asynchronous model. Task-number: QT-4093 Reviewed-by: Aaron Kennedy Conflicts: src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h --- .../graphicsitems/qdeclarativelistview.cpp | 40 ++++++++++++++++++++-- .../graphicsitems/qdeclarativelistview_p.h | 2 ++ .../graphicsitems/qdeclarativevisualitemmodel.cpp | 21 ++++++++++++ .../graphicsitems/qdeclarativevisualitemmodel_p.h | 6 +++- .../tst_qdeclarativelistview.cpp | 11 ++++++ 5 files changed, 76 insertions(+), 4 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativelistview.cpp b/src/declarative/graphicsitems/qdeclarativelistview.cpp index c1e6aaa..3261dd7 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview.cpp +++ b/src/declarative/graphicsitems/qdeclarativelistview.cpp @@ -775,7 +775,6 @@ void QDeclarativeListViewPrivate::layout() setPosition(0); return; } - updateSections(); if (!visibleItems.isEmpty()) { qreal oldEnd = visibleItems.last()->endPosition(); qreal pos = visibleItems.first()->endPosition() + spacing + 1; @@ -934,6 +933,7 @@ void QDeclarativeListViewPrivate::createSection(FxListItem *listItem) return; if (listItem->attached->m_prevSection != listItem->attached->m_section) { if (!listItem->section) { + qreal pos = listItem->position(); int i = sectionCacheSize-1; while (i >= 0 && !sectionCache[i]) --i; @@ -961,8 +961,10 @@ void QDeclarativeListViewPrivate::createSection(FxListItem *listItem) delete context; } } + listItem->setPosition(pos); } } else if (listItem->section) { + qreal pos = listItem->position(); int i = 0; do { if (!sectionCache[i]) { @@ -975,12 +977,13 @@ void QDeclarativeListViewPrivate::createSection(FxListItem *listItem) } while (i < sectionCacheSize); delete listItem->section; listItem->section = 0; + listItem->setPosition(pos); } } void QDeclarativeListViewPrivate::updateSections() { - if (sectionCriteria) { + if (sectionCriteria && !visibleItems.isEmpty()) { QString prevSection; if (visibleIndex > 0) prevSection = sectionAt(visibleIndex-1); @@ -990,6 +993,8 @@ void QDeclarativeListViewPrivate::updateSections() if (visibleItems.at(i)->index != -1) { QDeclarativeListViewAttached *attached = visibleItems.at(i)->attached; attached->setPrevSection(prevSection); + QString propValue = model->stringValue(visibleItems.at(i)->index, sectionCriteria->property()); + attached->setSection(sectionCriteria->sectionString(propValue)); if (prevAtt) prevAtt->setNextSection(attached->section()); createSection(visibleItems.at(i)); @@ -1551,6 +1556,7 @@ void QDeclarativeListView::setModel(const QVariant &model) disconnect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int))); disconnect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int))); disconnect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int))); + disconnect(d->model, SIGNAL(itemsChanged(int,int)), this, SLOT(itemsChanged(int,int))); disconnect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset())); disconnect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*))); disconnect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*))); @@ -1581,6 +1587,7 @@ void QDeclarativeListView::setModel(const QVariant &model) if (d->model) { d->bufferMode = QDeclarativeListViewPrivate::BufferBefore | QDeclarativeListViewPrivate::BufferAfter; if (isComponentComplete()) { + updateSections(); refill(); if (d->currentIndex >= d->model->count() || d->currentIndex < 0) { setCurrentIndex(0); @@ -1596,6 +1603,7 @@ void QDeclarativeListView::setModel(const QVariant &model) connect(d->model, SIGNAL(itemsInserted(int,int)), this, SLOT(itemsInserted(int,int))); connect(d->model, SIGNAL(itemsRemoved(int,int)), this, SLOT(itemsRemoved(int,int))); connect(d->model, SIGNAL(itemsMoved(int,int,int)), this, SLOT(itemsMoved(int,int,int))); + connect(d->model, SIGNAL(itemsChanged(int,int)), this, SLOT(itemsChanged(int,int))); connect(d->model, SIGNAL(modelReset()), this, SLOT(modelReset())); connect(d->model, SIGNAL(createdItem(int, QDeclarativeItem*)), this, SLOT(createdItem(int,QDeclarativeItem*))); connect(d->model, SIGNAL(destroyingItem(QDeclarativeItem*)), this, SLOT(destroyingItem(QDeclarativeItem*))); @@ -1653,6 +1661,7 @@ void QDeclarativeListView::setDelegate(QDeclarativeComponent *delegate) d->visibleItems.clear(); d->releaseItem(d->currentItem); d->currentItem = 0; + updateSections(); refill(); d->moveReason = QDeclarativeListViewPrivate::SetIndex; d->updateCurrent(d->currentIndex); @@ -2066,8 +2075,10 @@ void QDeclarativeListView::setCacheBuffer(int b) QDeclarativeViewSection *QDeclarativeListView::sectionCriteria() { Q_D(QDeclarativeListView); - if (!d->sectionCriteria) + if (!d->sectionCriteria) { d->sectionCriteria = new QDeclarativeViewSection(this); + connect(d->sectionCriteria, SIGNAL(propertyChanged()), this, SLOT(updateSections())); + } return d->sectionCriteria; } @@ -2660,6 +2671,7 @@ void QDeclarativeListView::componentComplete() { Q_D(QDeclarativeListView); QDeclarativeFlickable::componentComplete(); + updateSections(); if (d->isValid()) { refill(); d->moveReason = QDeclarativeListViewPrivate::SetIndex; @@ -2676,6 +2688,18 @@ void QDeclarativeListView::componentComplete() } } +void QDeclarativeListView::updateSections() +{ + Q_D(QDeclarativeListView); + if (isComponentComplete() && d->model) { + QList roles; + if (d->sectionCriteria && !d->sectionCriteria->property().isEmpty()) + roles << d->sectionCriteria->property().toUtf8(); + d->model->setWatchedRoles(roles); + d->updateSections(); + } +} + void QDeclarativeListView::refill() { Q_D(QDeclarativeListView); @@ -2885,6 +2909,7 @@ void QDeclarativeListView::itemsInserted(int modelIndex, int count) for (int j = 0; j < added.count(); ++j) added.at(j)->attached->emitAdd(); + d->updateSections(); d->itemCount += count; emit countChanged(); } @@ -2977,6 +3002,7 @@ void QDeclarativeListView::itemsRemoved(int modelIndex, int count) } } + d->updateSections(); emit countChanged(); } @@ -3098,6 +3124,14 @@ void QDeclarativeListView::itemsMoved(int from, int to, int count) // Ensure we don't cause an ugly list scroll. d->visibleItems.first()->setPosition(d->visibleItems.first()->position() + moveBy); + d->updateSections(); + d->layout(); +} + +void QDeclarativeListView::itemsChanged(int, int) +{ + Q_D(QDeclarativeListView); + d->updateSections(); d->layout(); } diff --git a/src/declarative/graphicsitems/qdeclarativelistview_p.h b/src/declarative/graphicsitems/qdeclarativelistview_p.h index 735b248..2678b90 100644 --- a/src/declarative/graphicsitems/qdeclarativelistview_p.h +++ b/src/declarative/graphicsitems/qdeclarativelistview_p.h @@ -250,11 +250,13 @@ protected: virtual void componentComplete(); private Q_SLOTS: + void updateSections(); void refill(); void trackedPositionChanged(); void itemsInserted(int index, int count); void itemsRemoved(int index, int count); void itemsMoved(int from, int to, int count); + void itemsChanged(int index, int count); void modelReset(); void destroyRemoved(); void createdItem(int index, QDeclarativeItem *item); diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp index 439f500..e569dd2 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel.cpp @@ -403,6 +403,8 @@ public: QDeclarativeListAccessor *m_listAccessor; QModelIndex m_root; + QList watchedRoles; + QList watchedRoleIds; }; class QDeclarativeVisualDataModelDataMetaObject : public QDeclarativeOpenMetaObject @@ -1170,10 +1172,25 @@ int QDeclarativeVisualDataModel::indexOf(QDeclarativeItem *item, QObject *) cons return -1; } +void QDeclarativeVisualDataModel::setWatchedRoles(QList roles) +{ + Q_D(QDeclarativeVisualDataModel); + d->watchedRoles = roles; + d->watchedRoleIds.clear(); +} + void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count, const QList &roles) { Q_D(QDeclarativeVisualDataModel); + bool changed = false; + if (!d->watchedRoles.isEmpty() && d->watchedRoleIds.isEmpty()) { + foreach (QByteArray r, d->watchedRoles) { + if (d->m_roleNames.contains(r)) + d->watchedRoleIds << d->m_roleNames.value(r); + } + } + for (QHash::ConstIterator iter = d->m_cache.begin(); iter != d->m_cache.end(); ++iter) { const int idx = iter.key(); @@ -1183,6 +1200,8 @@ void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count, QDeclarativeVisualDataModelData *data = d->data(objRef.obj); for (int roleIdx = 0; roleIdx < roles.count(); ++roleIdx) { int role = roles.at(roleIdx); + if (!changed && !d->watchedRoleIds.isEmpty() && d->watchedRoleIds.contains(role)) + changed = true; int propId = data->propForRole(role); if (propId != -1) { if (data->hasValue(propId)) { @@ -1217,6 +1236,8 @@ void QDeclarativeVisualDataModel::_q_itemsChanged(int index, int count, } } } + if (changed) + emit itemsChanged(index, count); } void QDeclarativeVisualDataModel::_q_itemsInserted(int index, int count) diff --git a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h index e159786..1d15dba 100644 --- a/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h +++ b/src/declarative/graphicsitems/qdeclarativevisualitemmodel_p.h @@ -79,7 +79,8 @@ public: virtual ReleaseFlags release(QDeclarativeItem *item) = 0; virtual bool completePending() const = 0; virtual void completeItem() = 0; - virtual QString stringValue(int, const QString &) { return QString(); } + virtual QString stringValue(int, const QString &) = 0; + virtual void setWatchedRoles(QList roles) = 0; virtual int indexOf(QDeclarativeItem *item, QObject *objectContext) const = 0; @@ -88,6 +89,7 @@ Q_SIGNALS: void itemsInserted(int index, int count); void itemsRemoved(int index, int count); void itemsMoved(int from, int to, int count); + void itemsChanged(int index, int count); void modelReset(); void createdItem(int index, QDeclarativeItem *item); void destroyingItem(QDeclarativeItem *item); @@ -121,6 +123,7 @@ public: virtual bool completePending() const; virtual void completeItem(); virtual QString stringValue(int index, const QString &role); + virtual void setWatchedRoles(QList) {} virtual int indexOf(QDeclarativeItem *item, QObject *objectContext) const; @@ -175,6 +178,7 @@ public: bool completePending() const; void completeItem(); virtual QString stringValue(int index, const QString &role); + virtual void setWatchedRoles(QList roles); int indexOf(QDeclarativeItem *item, QObject *objectContext) const; diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 6452bae..3b2ab6d 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -979,6 +979,17 @@ void tst_QDeclarativeListView::sections() QTRY_VERIFY(item); QTRY_COMPARE(item->height(), 20.0); + // check that headers change when item changes + listview->setContentY(0); + model.modifyItem(0, "changed", "2"); + + canvas->show(); + qApp->exec(); + + item = findItem(contentItem, "wrapper", 1); + QTRY_VERIFY(item); + QTRY_COMPARE(item->height(), 40.0); + delete canvas; } -- cgit v0.12 From 74768276a7b69ad54b93188abcf2ca4bf50dff8a Mon Sep 17 00:00:00 2001 From: Martin Jones Date: Wed, 13 Oct 2010 14:55:07 +1000 Subject: Remove debug code added by 650a0078e2cef43eff107fe8d2505f64a0bfedf0 Task-number: QT-4093 --- .../auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp index 3b2ab6d..ec8ee82 100644 --- a/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp +++ b/tests/auto/declarative/qdeclarativelistview/tst_qdeclarativelistview.cpp @@ -983,9 +983,6 @@ void tst_QDeclarativeListView::sections() listview->setContentY(0); model.modifyItem(0, "changed", "2"); - canvas->show(); - qApp->exec(); - item = findItem(contentItem, "wrapper", 1); QTRY_VERIFY(item); QTRY_COMPARE(item->height(), 40.0); -- cgit v0.12 From d22741b4bee0e526aefbbd7b851c2aa1b0b1c5b6 Mon Sep 17 00:00:00 2001 From: Gunnar Sletta Date: Fri, 15 Oct 2010 07:19:08 +0200 Subject: actually set egl swap interval --- src/plugins/platforms/eglfs/qeglfsscreen.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp index 682f2f4..2d23cca 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -145,9 +145,9 @@ QEglFSScreen::QEglFSScreen(EGLNativeDisplayType display) if (!ok) swapInterval = 1; } - platformFormat.setSwapInterval(swapInterval); EGLConfig config = q_configFromQPlatformWindowFormat(m_dpy, platformFormat); + eglSwapInterval(display, swapInterval); EGLNativeWindowType eglWindow = 0; #ifdef Q_OPENKODE -- cgit v0.12 From 4346b33024c76760752fc1dc4b46847883cd0453 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Tue, 19 Oct 2010 08:49:06 +0200 Subject: Fix QWS generic mac mkspec --- mkspecs/qws/macx-generic-g++/qmake.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mkspecs/qws/macx-generic-g++/qmake.conf b/mkspecs/qws/macx-generic-g++/qmake.conf index 63bfc57..8dcbb39 100644 --- a/mkspecs/qws/macx-generic-g++/qmake.conf +++ b/mkspecs/qws/macx-generic-g++/qmake.conf @@ -27,7 +27,7 @@ QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses QMAKE_CFLAGS_THREAD = -D_REENTRANT QMAKE_CFLAGS_HIDESYMS = -fvisibility=hidden -QMAKE_CXX = $(TB)c++ +QMAKE_CXX = c++ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS -DQT_NO_QWS_TRANSFORMED QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON QMAKE_CXXFLAGS_WARN_OFF = $$QMAKE_CFLAGS_WARN_OFF -- cgit v0.12 From b895d7af3a75cbbc2b14a993679538ed02190b40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Morten=20Johan=20S=C3=B8rvig?= Date: Mon, 18 Oct 2010 09:51:15 +0200 Subject: Lighthouse on OS X. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Jørgen --- config.tests/mac/coreservices/coreservices.mm | 48 ++++++++++++++++++++++++++ config.tests/mac/coreservices/coreservices.pro | 3 ++ configure | 6 ++++ src/corelib/corelib.pro | 9 ++++- src/corelib/global/qfeatures.h | 10 +++--- src/corelib/global/qfeatures.txt | 2 +- src/corelib/global/qglobal.cpp | 9 +++-- src/corelib/io/qfilesystemwatcher_fsevents.cpp | 3 ++ src/corelib/io/qfilesystemwatcher_fsevents_p.h | 4 +++ src/corelib/io/qfilesystemwatcher_kqueue.cpp | 4 +++ src/corelib/io/qfilesystemwatcher_kqueue_p.h | 2 ++ src/corelib/io/qfsfileengine.cpp | 2 +- src/corelib/io/qfsfileengine_unix.cpp | 8 ++--- src/corelib/kernel/qcore_mac_p.h | 8 +++++ src/corelib/thread/qthread_unix.cpp | 4 ++- src/gui/kernel/mac.pri | 2 +- src/script/script.pro | 10 +++++- src/testlib/testlib.pro | 10 +++++- 18 files changed, 125 insertions(+), 19 deletions(-) create mode 100644 config.tests/mac/coreservices/coreservices.mm create mode 100644 config.tests/mac/coreservices/coreservices.pro diff --git a/config.tests/mac/coreservices/coreservices.mm b/config.tests/mac/coreservices/coreservices.mm new file mode 100644 index 0000000..0091e49 --- /dev/null +++ b/config.tests/mac/coreservices/coreservices.mm @@ -0,0 +1,48 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the config.tests of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +int main() +{ + FSRef ref; + return 0; +} diff --git a/config.tests/mac/coreservices/coreservices.pro b/config.tests/mac/coreservices/coreservices.pro new file mode 100644 index 0000000..c9bf8ec --- /dev/null +++ b/config.tests/mac/coreservices/coreservices.pro @@ -0,0 +1,3 @@ +SOURCES = coreservices.mm +LIBS += -framework CoreServices +CONFIG -= app_bundle qt diff --git a/configure b/configure index b771562..a79efef 100755 --- a/configure +++ b/configure @@ -6139,6 +6139,12 @@ if [ "$PLATFORM_QPA" = "yes" ]; then fi fi + if "$unixtests/compile.test" "$XQMAKESPEC" "$QMAKE_CONFIG" $OPT_VERBOSE "$relpath" "$outpath" config.tests/mac/coreservices "CoreServices" $L_FLAGS $I_FLAGS $l_FLAGS $MAC_CONFIG_TEST_COMMANDLINE; then + QT_CONFIG="$QT_CONFIG coreservices" + else + QMakeVar add DEFINES QT_NO_CORESERVICES + fi + fi diff --git a/src/corelib/corelib.pro b/src/corelib/corelib.pro index 88b9252..349b3d4 100644 --- a/src/corelib/corelib.pro +++ b/src/corelib/corelib.pro @@ -19,7 +19,14 @@ include(codecs/codecs.pri) include(statemachine/statemachine.pri) include(xml/xml.pri) -!nacl:mac|darwin:LIBS_PRIVATE += -framework ApplicationServices +!qpa:mac|darwin:LIBS_PRIVATE += -framework ApplicationServices +qpa:mac|darwin { + contains(QT_CONFIG, coreservices) { + LIBS_PRIVATE += -framework CoreServices + } else { + LIBS_PRIVATE += -framework CoreFoundation + } +} mac:lib_bundle:DEFINES += QT_NO_DEBUG_PLUGIN_CHECK win32:DEFINES-=QT_NO_CAST_TO_ASCII diff --git a/src/corelib/global/qfeatures.h b/src/corelib/global/qfeatures.h index b606843..9710079 100644 --- a/src/corelib/global/qfeatures.h +++ b/src/corelib/global/qfeatures.h @@ -523,11 +523,6 @@ #define QT_NO_FTP #endif -// Hyper Text Transfer Protocol -#if !defined(QT_NO_HTTP) && (defined(QT_NO_HOSTINFO)) -#define QT_NO_HTTP -#endif - // QInputContext #if !defined(QT_NO_IM) && (defined(QT_NO_LIBRARY)) #define QT_NO_IM @@ -583,6 +578,11 @@ #define QT_NO_GRAPHICSVIEW #endif +// Hyper Text Transfer Protocol +#if !defined(QT_NO_HTTP) && (defined(QT_NO_HOSTINFO) || defined(QT_NO_NETWORKPROXY)) +#define QT_NO_HTTP +#endif + // QMdiArea #if !defined(QT_NO_MDIAREA) && (defined(QT_NO_SCROLLAREA)) #define QT_NO_MDIAREA diff --git a/src/corelib/global/qfeatures.txt b/src/corelib/global/qfeatures.txt index 4d938a9..f07fbd5 100644 --- a/src/corelib/global/qfeatures.txt +++ b/src/corelib/global/qfeatures.txt @@ -1050,7 +1050,7 @@ SeeAlso: ??? Feature: HTTP Description: Supports HTTP file access. Section: Networking -Requires: HOSTINFO +Requires: HOSTINFO NETWORKPROXY Name: Hyper Text Transfer Protocol SeeAlso: ??? diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp index a160010..eeeccd3 100644 --- a/src/corelib/global/qglobal.cpp +++ b/src/corelib/global/qglobal.cpp @@ -74,7 +74,7 @@ # include #endif -#if defined(Q_CC_MWERKS) && defined(Q_OS_MACX) +#if defined(Q_OS_MACX) && !defined(QT_NO_CORESERVICES) #include #endif @@ -1643,7 +1643,7 @@ static const unsigned int qt_one = 1; const int QSysInfo::ByteOrder = ((*((unsigned char *) &qt_one) == 0) ? BigEndian : LittleEndian); #endif -#if !defined(QWS) && defined(Q_OS_MAC) +#if !defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC) QT_BEGIN_INCLUDE_NAMESPACE #include "private/qcore_mac_p.h" @@ -1697,15 +1697,18 @@ Q_CORE_EXPORT void qt_mac_to_pascal_string(QString s, Str255 str, TextEncoding e Q_CORE_EXPORT QString qt_mac_from_pascal_string(const Str255 pstr) { return QCFString(CFStringCreateWithPascalString(0, pstr, CFStringGetSystemEncoding())); } +#endif //!defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC) - +#if !defined(QWS) && defined(Q_OS_MAC) static QSysInfo::MacVersion macVersion() { +#ifndef QT_NO_CORESERVICES SInt32 gestalt_version; if (Gestalt(gestaltSystemVersion, &gestalt_version) == noErr) { return QSysInfo::MacVersion(((gestalt_version & 0x00F0) >> 4) + 2); } +#endif return QSysInfo::MV_Unknown; } const QSysInfo::MacVersion QSysInfo::MacintoshVersion = macVersion(); diff --git a/src/corelib/io/qfilesystemwatcher_fsevents.cpp b/src/corelib/io/qfilesystemwatcher_fsevents.cpp index d3276bd..0f96792 100644 --- a/src/corelib/io/qfilesystemwatcher_fsevents.cpp +++ b/src/corelib/io/qfilesystemwatcher_fsevents.cpp @@ -45,6 +45,8 @@ #include "qfilesystemwatcher.h" #include "qfilesystemwatcher_fsevents_p.h" +#ifndef QT_NO_FILESYSTEMWATCHER + #include #include #include @@ -487,3 +489,4 @@ void QFSEventsFileSystemWatcherEngine::run() } QT_END_NAMESPACE +#endif //QT_NO_FILESYSTEMWATCHER diff --git a/src/corelib/io/qfilesystemwatcher_fsevents_p.h b/src/corelib/io/qfilesystemwatcher_fsevents_p.h index b0462b6..c888c61 100644 --- a/src/corelib/io/qfilesystemwatcher_fsevents_p.h +++ b/src/corelib/io/qfilesystemwatcher_fsevents_p.h @@ -56,6 +56,8 @@ #include "qfilesystemwatcher_p.h" +#ifndef QT_NO_FILESYSTEMWATCHER + #include #include #include @@ -123,6 +125,8 @@ private: #endif }; +#endif //QT_NO_FILESYSTEMWATCHER + #endif QT_END_NAMESPACE diff --git a/src/corelib/io/qfilesystemwatcher_kqueue.cpp b/src/corelib/io/qfilesystemwatcher_kqueue.cpp index 378ad20..7960792 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue.cpp +++ b/src/corelib/io/qfilesystemwatcher_kqueue.cpp @@ -45,6 +45,8 @@ #include "qfilesystemwatcher_kqueue_p.h" #include "private/qcore_unix_p.h" +#ifndef QT_NO_FILESYSTEMWATCHER + #include #include #include @@ -343,4 +345,6 @@ process_next_event: } } +#endif //QT_NO_FILESYSTEMWATCHER + QT_END_NAMESPACE diff --git a/src/corelib/io/qfilesystemwatcher_kqueue_p.h b/src/corelib/io/qfilesystemwatcher_kqueue_p.h index eda646b..edc20ae 100644 --- a/src/corelib/io/qfilesystemwatcher_kqueue_p.h +++ b/src/corelib/io/qfilesystemwatcher_kqueue_p.h @@ -60,6 +60,7 @@ #include #include +#ifndef QT_NO_FILESYSTEMWATCHER struct kevent; QT_BEGIN_NAMESPACE @@ -92,4 +93,5 @@ private: QT_END_NAMESPACE +#endif //QT_NO_FILESYSTEMWATCHER #endif // FILEWATCHER_KQUEUE_P_H diff --git a/src/corelib/io/qfsfileengine.cpp b/src/corelib/io/qfsfileengine.cpp index a1ffb81..90c6ea8 100644 --- a/src/corelib/io/qfsfileengine.cpp +++ b/src/corelib/io/qfsfileengine.cpp @@ -152,7 +152,7 @@ QString QFSFileEnginePrivate::canonicalized(const QString &path) // ... but Linux with uClibc does not have it #if !defined(__UCLIBC__) char *ret = 0; -#if defined(Q_OS_MAC) +#if defined(Q_OS_MAC) && !defined(QT_NO_CORESERVICES) // Mac OS X 10.5.x doesn't support the realpath(X,0) extension we use here. if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_6) { ret = realpath(path.toLocal8Bit().constData(), (char*)0); diff --git a/src/corelib/io/qfsfileengine_unix.cpp b/src/corelib/io/qfsfileengine_unix.cpp index d83f7ee..67bcf45 100644 --- a/src/corelib/io/qfsfileengine_unix.cpp +++ b/src/corelib/io/qfsfileengine_unix.cpp @@ -739,7 +739,7 @@ static bool _q_isSymbianHidden(const QString &path, bool isDir) } #endif -#if !defined(QWS) && defined(Q_OS_MAC) +#if !defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC) static bool _q_isMacHidden(const QString &path) { OSErr err = noErr; @@ -824,7 +824,7 @@ QAbstractFileEngine::FileFlags QFSFileEngine::fileFlags(FileFlags type) const if (exists && (type & PermsMask)) ret |= d->getPermissions(type); if (type & TypesMask) { -#if !defined(QWS) && defined(Q_OS_MAC) +#if !defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC) bool foundAlias = false; { FSRef fref; @@ -878,7 +878,7 @@ QAbstractFileEngine::FileFlags QFSFileEngine::fileFlags(FileFlags type) const } else { QString baseName = fileName(BaseName); if ((baseName.size() > 0 && baseName.at(0) == QLatin1Char('.')) -# if !defined(QWS) && defined(Q_OS_MAC) +# if !defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC) || _q_isMacHidden(d->filePath) # endif ) { @@ -1133,7 +1133,7 @@ QString QFSFileEngine::fileName(FileName file) const return ret; } } -#if !defined(QWS) && defined(Q_OS_MAC) +#if !defined(QWS) && !defined(Q_WS_QPA) && defined(Q_OS_MAC) { FSRef fref; if (FSPathMakeRef((const UInt8 *)QFile::encodeName(QDir::cleanPath(d->filePath)).data(), &fref, 0) == noErr) { diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h index 9591f08..22b6a36 100644 --- a/src/corelib/kernel/qcore_mac_p.h +++ b/src/corelib/kernel/qcore_mac_p.h @@ -68,7 +68,15 @@ # undef qDebug #endif +#if defined(QT_BUILD_QMAKE) || defined(QT_BOOTSTRAPPED) #include +#else +#include +#endif + +#ifndef QT_NO_CORESERVICES +#include +#endif #undef DEBUG #ifdef OLD_DEBUG diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp index 20c6fb7..5eba09c 100644 --- a/src/corelib/thread/qthread_unix.cpp +++ b/src/corelib/thread/qthread_unix.cpp @@ -83,7 +83,9 @@ # define old_qDebug qDebug # undef qDebug # endif +#ifndef QT_NO_CORESERVICES # include +#endif //QT_NO_CORESERVICES # ifdef old_qDebug # undef qDebug @@ -358,7 +360,7 @@ int QThread::idealThreadCount() { int cores = -1; -#if defined(Q_OS_MAC) +#if defined(Q_OS_MAC) && !defined(Q_WS_QPA) // Mac OS X cores = MPProcessorsScheduled(); #elif defined(Q_OS_HPUX) diff --git a/src/gui/kernel/mac.pri b/src/gui/kernel/mac.pri index eb47ce9..21acd06 100644 --- a/src/gui/kernel/mac.pri +++ b/src/gui/kernel/mac.pri @@ -1,4 +1,4 @@ -!x11:!embedded:!nacl:mac { +!x11:!embedded:!qpa:mac { LIBS_PRIVATE += -framework Carbon -lz *-mwerks:INCLUDEPATH += compat } diff --git a/src/script/script.pro b/src/script/script.pro index 4ee86d7..56d3f7a 100644 --- a/src/script/script.pro +++ b/src/script/script.pro @@ -39,10 +39,18 @@ wince* { LIBS += -lmmtimer } -mac { +!qpa:mac { DEFINES += ENABLE_JSC_MULTIPLE_THREADS=0 LIBS_PRIVATE += -framework AppKit } +qpa:mac { + DEFINES += ENABLE_JSC_MULTIPLE_THREADS=0 + contains(QT_CONFIG, coreservices) { + LIBS_PRIVATE += -framework CoreServices + } else { + LIBS_PRIVATE += -framework CoreFoundation + } +} include($$WEBKITDIR/JavaScriptCore/JavaScriptCore.pri) diff --git a/src/testlib/testlib.pro b/src/testlib/testlib.pro index a8186d8..c25d23d 100644 --- a/src/testlib/testlib.pro +++ b/src/testlib/testlib.pro @@ -70,8 +70,16 @@ wince*::LIBS += libcmt.lib \ coredll.lib \ winsock.lib mac:LIBS += -framework IOKit \ - -framework ApplicationServices \ -framework Security +!qpa:mac: LIBS += -framework ApplicationServices +qpa:mac: { + contains(QT_CONFIG, coreservices) { + LIBS_PRIVATE += -framework CoreServices + } else { + LIBS_PRIVATE += -framework CoreFoundation + } +} + include(../qbase.pri) QMAKE_TARGET_PRODUCT = QTestLib QMAKE_TARGET_DESCRIPTION = Qt \ -- cgit v0.12 From 4e6790c8dc21c5287bff6799fb0984a72e2f2766 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Mon, 18 Oct 2010 14:40:16 +0200 Subject: Lighthouse: initial COCOA plugin --- demos/demos.pro | 2 +- src/plugins/platforms/cocoa/cocoa.pro | 29 +++ src/plugins/platforms/cocoa/main.mm | 74 ++++++++ .../platforms/cocoa/qcocoaautoreleasepool.h | 57 ++++++ .../platforms/cocoa/qcocoaautoreleasepool.mm | 52 +++++ .../platforms/cocoa/qcocoaeventloopintegration.h | 74 ++++++++ .../platforms/cocoa/qcocoaeventloopintegration.mm | 128 +++++++++++++ src/plugins/platforms/cocoa/qcocoaintegration.h | 98 ++++++++++ src/plugins/platforms/cocoa/qcocoaintegration.mm | 122 ++++++++++++ src/plugins/platforms/cocoa/qcocoawindow.h | 75 ++++++++ src/plugins/platforms/cocoa/qcocoawindow.mm | 116 +++++++++++ src/plugins/platforms/cocoa/qcocoawindowsurface.h | 73 +++++++ src/plugins/platforms/cocoa/qcocoawindowsurface.mm | 103 ++++++++++ src/plugins/platforms/cocoa/qnsview.h | 79 ++++++++ src/plugins/platforms/cocoa/qnsview.mm | 211 +++++++++++++++++++++ src/plugins/platforms/cocoa/qnswindowdelegate.h | 61 ++++++ src/plugins/platforms/cocoa/qnswindowdelegate.mm | 73 +++++++ 17 files changed, 1426 insertions(+), 1 deletion(-) create mode 100644 src/plugins/platforms/cocoa/cocoa.pro create mode 100644 src/plugins/platforms/cocoa/main.mm create mode 100644 src/plugins/platforms/cocoa/qcocoaautoreleasepool.h create mode 100644 src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm create mode 100644 src/plugins/platforms/cocoa/qcocoaeventloopintegration.h create mode 100644 src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm create mode 100644 src/plugins/platforms/cocoa/qcocoaintegration.h create mode 100644 src/plugins/platforms/cocoa/qcocoaintegration.mm create mode 100644 src/plugins/platforms/cocoa/qcocoawindow.h create mode 100644 src/plugins/platforms/cocoa/qcocoawindow.mm create mode 100644 src/plugins/platforms/cocoa/qcocoawindowsurface.h create mode 100644 src/plugins/platforms/cocoa/qcocoawindowsurface.mm create mode 100644 src/plugins/platforms/cocoa/qnsview.h create mode 100644 src/plugins/platforms/cocoa/qnsview.mm create mode 100644 src/plugins/platforms/cocoa/qnswindowdelegate.h create mode 100644 src/plugins/platforms/cocoa/qnswindowdelegate.mm diff --git a/demos/demos.pro b/demos/demos.pro index fdc1e4c..362a3bc 100644 --- a/demos/demos.pro +++ b/demos/demos.pro @@ -44,7 +44,7 @@ contains(QT_CONFIG, opengl):!contains(QT_CONFIG, opengles1):!contains(QT_CONFIG, SUBDIRS += demos_boxes } -mac*: SUBDIRS += demos_macmainwindow +mac* && !qpa: SUBDIRS += demos_macmainwindow wince*|symbian|embedded|x11: SUBDIRS += demos_embedded !contains(QT_EDITION, Console):!cross_compile:!embedded:!wince*:SUBDIRS += demos_arthurplugin diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro new file mode 100644 index 0000000..7701b9c --- /dev/null +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -0,0 +1,29 @@ +TARGET = qcocoa +include(../../qpluginbase.pri) +QTDIR_build:DESTDIR = $$QT_BUILD_TREE/plugins/platforms + +OBJECTIVE_SOURCES = main.mm \ + qcocoaintegration.mm \ + qcocoawindowsurface.mm \ + qcocoawindow.mm \ + qnsview.mm \ + qcocoaeventloopintegration.mm \ + qcocoaautoreleasepool.mm \ + qnswindowdelegate.mm + +OBJECTIVE_HEADERS = qcocoaintegration.h \ + qcocoawindowsurface.h \ + qcocoawindow.h \ + qnsview.h \ + qcocoaeventloopintegration.h \ + qcocoaautoreleasepool.h \ + qnswindowdelegate.h + +#add libz for freetype. +LIBS += -lz +LIBS += -framework cocoa + +include(../fontdatabases/genericunix/genericunix.pri) +target.path += $$[QT_INSTALL_PLUGINS]/platforms +INSTALLS += target + diff --git a/src/plugins/platforms/cocoa/main.mm b/src/plugins/platforms/cocoa/main.mm new file mode 100644 index 0000000..8be8883 --- /dev/null +++ b/src/plugins/platforms/cocoa/main.mm @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +#include +#include "qcocoaintegration.h" + +QT_BEGIN_NAMESPACE + +class QCocoaIntegrationPlugin : public QPlatformIntegrationPlugin +{ +public: + QStringList keys() const; + QPlatformIntegration *create(const QString&, const QStringList&); +}; + +QStringList QCocoaIntegrationPlugin::keys() const +{ + QStringList list; + list << "Cocoa"; + return list; +} + +QPlatformIntegration * QCocoaIntegrationPlugin::create(const QString& system, const QStringList& paramList) +{ + Q_UNUSED(paramList); + if (system.toLower() == "cocoa") + return new QCocoaIntegration; + + return 0; +} + +Q_EXPORT_PLUGIN2(Cocoa, QCocoaIntegrationPlugin) + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h new file mode 100644 index 0000000..47b94d1 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.h @@ -0,0 +1,57 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QCOCOAAUTORELEASEPOOL_H +#define QCOCOAAUTORELEASEPOOL_H + +#include + +class QCocoaAutoReleasePool +{ +public: + QCocoaAutoReleasePool(); + ~QCocoaAutoReleasePool(); + +private: + NSAutoreleasePool *pool; +}; + +#endif // QCOCOAAUTORELEASEPOOL_H diff --git a/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm new file mode 100644 index 0000000..9a18fe2 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoaautoreleasepool.mm @@ -0,0 +1,52 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcocoaautoreleasepool.h" + +QCocoaAutoReleasePool::QCocoaAutoReleasePool() +{ + pool = [[NSAutoreleasePool alloc] init]; +} + +QCocoaAutoReleasePool::~QCocoaAutoReleasePool() +{ + [pool release]; +} diff --git a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h new file mode 100644 index 0000000..8c21944 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.h @@ -0,0 +1,74 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QCOCAEVENTLOOPINTEGRATION_H +#define QCOCAEVENTLOOPINTEGRATION_H + +#include + +#include + +@interface OurApplication: NSApplication +{ + bool shouldKeepRunning; +} + +- (void) run; +- (void) processEvents: (int) msec; + +@end + +class QCocoaEventLoopIntegration : public QPlatformEventLoopIntegration +{ +public: + QCocoaEventLoopIntegration(); + void processEvents( qint64 msec ); + void wakeup(); + + static int wakeupEventId; +private: + OurApplication *app; +}; + + + +#endif // QCOCAEVENTLOOPINTEGRATION_H + diff --git a/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm new file mode 100644 index 0000000..b184f90 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoaeventloopintegration.mm @@ -0,0 +1,128 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcocoaeventloopintegration.h" + +#import + +#include "qcocoaautoreleasepool.h" + +#include + +#include + +@implementation OurApplication + +- (void) run +{ + QCocoaAutoReleasePool pool; + [self finishLaunching]; + + shouldKeepRunning = YES; +} + +- (void) processEvents : (int) msec +{ + QCocoaAutoReleasePool pool; + Q_UNUSED(pool); + + QElapsedTimer timer; + timer.start(); + + NSTimeInterval seconds = NSTimeInterval(msec)/1000; + id untilDate = [NSDate dateWithTimeIntervalSinceNow:seconds]; + bool continueLooping = true; + while ((timer.elapsed() < (msec-1)) && continueLooping) { + NSEvent *event = + [self nextEventMatchingMask:NSAnyEventMask + untilDate:untilDate + inMode:NSDefaultRunLoopMode + dequeue:YES]; + if ([event type] == NSApplicationDefined + && [event subtype] == QCocoaEventLoopIntegration::wakeupEventId) { + continueLooping = false; + } else { + [self sendEvent:event]; + } + + } + [self updateWindows]; +} + +@end + +int QCocoaEventLoopIntegration::wakeupEventId = SHRT_MAX; + +QCocoaEventLoopIntegration::QCocoaEventLoopIntegration() : + QPlatformEventLoopIntegration() +{ + app = (OurApplication *)[OurApplication sharedApplication]; + [app run]; +} + +void QCocoaEventLoopIntegration::processEvents(qint64 msec) +{ + [app processEvents:msec]; +} + +void QCocoaEventLoopIntegration::wakeup() +{ + QCocoaAutoReleasePool pool; + Q_UNUSED(pool); + + NSPoint p = NSMakePoint(0,0); + NSWindow *nswin = [app keyWindow]; + double timestamp = (double)(AbsoluteToDuration(UpTime())) / 1000.0; + NSEvent *event = [NSEvent + otherEventWithType:NSApplicationDefined + location:NSZeroPoint + modifierFlags:0 + timestamp: timestamp + windowNumber:[nswin windowNumber] + context:0 + subtype:QCocoaEventLoopIntegration::wakeupEventId + data1:0 + data2:0 + ]; + [app postEvent:event atStart:NO]; + +} + diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.h b/src/plugins/platforms/cocoa/qcocoaintegration.h new file mode 100644 index 0000000..e7ecf2a --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoaintegration.h @@ -0,0 +1,98 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QPLATFORMINTEGRATION_COCOA_H +#define QPLATFORMINTEGRATION_COCOA_H + +#include + +#include "qcocoaautoreleasepool.h" + +#include + +QT_BEGIN_NAMESPACE + +class QCocoaScreen : public QPlatformScreen +{ +public: + QCocoaScreen(int screenIndex); + ~QCocoaScreen(); + + QRect geometry() const { return m_geometry; } + int depth() const { return m_depth; } + QImage::Format format() const { return m_format; } + QSize physicalSize() const { return m_physicalSize; } + +public: + NSScreen *m_screen; + QRect m_geometry; + int m_depth; + QImage::Format m_format; + QSize m_physicalSize; +}; + +class QCocoaIntegration : public QPlatformIntegration +{ +public: + QCocoaIntegration(); + ~QCocoaIntegration(); + + QPixmapData *createPixmapData(QPixmapData::PixelType type) const; + QPlatformWindow *createPlatformWindow(QWidget *widget, WId winId = 0) const; + QWindowSurface *createWindowSurface(QWidget *widget, WId winId) const; + + QList screens() const { return mScreens; } + + QPlatformFontDatabase *fontDatabase() const; + + QPlatformEventLoopIntegration *createEventLoopIntegration() const; + +private: + QList mScreens; + QPlatformFontDatabase *mFontDb; + + QCocoaAutoReleasePool *mPool; +}; + +QT_END_NAMESPACE + +#endif + diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm new file mode 100644 index 0000000..baf5a73 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcocoaintegration.h" + +#include "qcocoawindow.h" +#include "qcocoawindowsurface.h" +#include "qcocoaeventloopintegration.h" + +#include "qgenericunixfontdatabase.h" + +#include + +#include + +QT_BEGIN_NAMESPACE + +QCocoaScreen::QCocoaScreen(int screenIndex) + :QPlatformScreen() +{ + m_screen = [[NSScreen screens] objectAtIndex:screenIndex]; + NSRect rect = [m_screen frame]; + m_geometry = QRect(rect.origin.x,rect.origin.y,rect.size.width,rect.size.height); + + m_format = QImage::Format_ARGB32; + + m_depth = NSBitsPerPixelFromDepth([m_screen depth]); + + const int dpi = 72; + const qreal inch = 25.4; + m_physicalSize = QSize(qRound(m_geometry.width() * inch / dpi), qRound(m_geometry.height() *inch / dpi)); +} + +QCocoaScreen::~QCocoaScreen() +{ +} + +QCocoaIntegration::QCocoaIntegration() + : mFontDb(new QGenericUnixFontDatabase()) +{ + mPool = new QCocoaAutoReleasePool; + + //Make sure we have a nsapplication :) + [OurApplication sharedApplication]; +// [[OurApplication alloc] init]; + + NSArray *screens = [NSScreen screens]; + for (uint i = 0; i < [screens count]; i++) { + QCocoaScreen *screen = new QCocoaScreen(i); + mScreens.append(screen); + } +} + +QCocoaIntegration::~QCocoaIntegration() +{ + delete mPool; +} + +QPixmapData *QCocoaIntegration::createPixmapData(QPixmapData::PixelType type) const +{ + return new QRasterPixmapData(type); +} + +QPlatformWindow *QCocoaIntegration::createPlatformWindow(QWidget *widget, WId winId) const +{ + Q_UNUSED(winId); + return new QCocoaWindow(widget); +} + +QWindowSurface *QCocoaIntegration::createWindowSurface(QWidget *widget, WId winId) const +{ + return new QCocoaWindowSurface(widget,winId); +} + +QPlatformFontDatabase *QCocoaIntegration::fontDatabase() const +{ + return mFontDb; +} + +QPlatformEventLoopIntegration *QCocoaIntegration::createEventLoopIntegration() const +{ + return new QCocoaEventLoopIntegration(); +} +QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qcocoawindow.h b/src/plugins/platforms/cocoa/qcocoawindow.h new file mode 100644 index 0000000..660e9f8 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoawindow.h @@ -0,0 +1,75 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QCOCOAWINDOW_H +#define QCOCOAWINDOW_H + +#include + +#include + +QT_BEGIN_NAMESPACE + +class QCocoaWindow : public QPlatformWindow +{ +public: + QCocoaWindow(QWidget *tlw); + ~QCocoaWindow(); + + void setGeometry(const QRect &rect); + + void setVisible(bool visible); + + WId winId() const; + + NSView *contentView() const; + void setContentView(NSView *contentView); + + void windowDidResize(); + +private: + NSWindow *m_nsWindow; +}; + +QT_END_NAMESPACE + +#endif // QCOCOAWINDOW_H + diff --git a/src/plugins/platforms/cocoa/qcocoawindow.mm b/src/plugins/platforms/cocoa/qcocoawindow.mm new file mode 100644 index 0000000..f004cb8 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoawindow.mm @@ -0,0 +1,116 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "qcocoawindow.h" +#include "qnswindowdelegate.h" +#include "qcocoaautoreleasepool.h" + +#include + +#include + +#include + +#include + +QCocoaWindow::QCocoaWindow(QWidget *tlw) + : QPlatformWindow(tlw) +{ + QCocoaAutoReleasePool pool; + const QRect geo = tlw->geometry(); + NSRect frame = NSMakeRect(geo.x(), geo.y(), geo.width(), geo.height()); + + m_nsWindow = [[NSWindow alloc] initWithContentRect:frame + styleMask:NSTitledWindowMask|NSClosableWindowMask|NSMiniaturizableWindowMask|NSResizableWindowMask + backing:NSBackingStoreBuffered + defer:YES]; + + QNSWindowDelegate *delegate = [[QNSWindowDelegate alloc] initWithQCocoaWindow:this]; + [m_nsWindow setDelegate:delegate]; + + [m_nsWindow makeKeyAndOrderFront:nil]; + [m_nsWindow setAcceptsMouseMovedEvents:YES]; +} + +QCocoaWindow::~QCocoaWindow() +{ +} + +void QCocoaWindow::setGeometry(const QRect &rect) +{ + QPlatformWindow::setGeometry(rect); + + NSRect bounds = NSMakeRect(rect.x(), rect.y(), rect.width(), rect.height()); + [[m_nsWindow contentView]setFrameSize:bounds.size]; +} + +void QCocoaWindow::setVisible(bool visible) +{ + Q_UNUSED(visible); +} + +WId QCocoaWindow::winId() const +{ + return WId([m_nsWindow windowNumber]); +} + +NSView *QCocoaWindow::contentView() const +{ + return [m_nsWindow contentView]; +} + +void QCocoaWindow::setContentView(NSView *contentView) +{ + [m_nsWindow setContentView:contentView]; +} + +void QCocoaWindow::windowDidResize() +{ + //jlind: XXX This isn't ideal. Eventdispatcher does not run when resizing... + NSRect rect = [[m_nsWindow contentView]frame]; + QRect geo(rect.origin.x,rect.origin.y,rect.size.width,rect.size.height); + if (geometry() != geo) { + widget()->setGeometry(geo); + QResizeEvent e(geo.size(), geometry().size()); + setGeometry(geo); + QApplication::sendEvent(widget(), &e); + widget()->repaint(); + } +} diff --git a/src/plugins/platforms/cocoa/qcocoawindowsurface.h b/src/plugins/platforms/cocoa/qcocoawindowsurface.h new file mode 100644 index 0000000..35f4064 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoawindowsurface.h @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QWINDOWSURFACE_COCOA_H +#define QWINDOWSURFACE_COCOA_H + +#include + +#include "qcocoawindow.h" +#include "qnsview.h" + +#include + +QT_BEGIN_NAMESPACE + +class QCocoaWindowSurface : public QWindowSurface +{ +public: + QCocoaWindowSurface(QWidget *window, WId wid); + ~QCocoaWindowSurface(); + + QPaintDevice *paintDevice(); + void flush(QWidget *widget, const QRegion ®ion, const QPoint &offset); + void resize (const QSize &size); + +private: + + QCocoaWindow *m_cocoaWindow; + QImage *m_image; + QNSView *m_contentView; +}; + +QT_END_NAMESPACE + +#endif diff --git a/src/plugins/platforms/cocoa/qcocoawindowsurface.mm b/src/plugins/platforms/cocoa/qcocoawindowsurface.mm new file mode 100644 index 0000000..443a486 --- /dev/null +++ b/src/plugins/platforms/cocoa/qcocoawindowsurface.mm @@ -0,0 +1,103 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtOpenVG module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qcocoawindowsurface.h" + +#include + +#include + +QT_BEGIN_NAMESPACE + +QRect flipedRect(const QRect &sourceRect,int height) +{ + if (!sourceRect.isValid()) + return QRect(); + QRect flippedRect = sourceRect; + flippedRect.moveTop(height - sourceRect.y()); + return flippedRect; +} + +QCocoaWindowSurface::QCocoaWindowSurface(QWidget *window, WId wId) + : QWindowSurface(window) +{ + m_cocoaWindow = static_cast(window->platformWindow()); + + const QRect geo = window->geometry(); + NSRect rect = NSMakeRect(geo.x(),geo.y(),geo.width(),geo.height()); + m_contentView = [[QNSView alloc] initWithWidget:window]; + m_cocoaWindow->setContentView(m_contentView); + + m_image = new QImage(window->size(),QImage::Format_ARGB32); +} + +QCocoaWindowSurface::~QCocoaWindowSurface() +{ + delete m_image; +} + +QPaintDevice *QCocoaWindowSurface::paintDevice() +{ + return m_image; +} + +void QCocoaWindowSurface::flush(QWidget *widget, const QRegion ®ion, const QPoint &offset) +{ + Q_UNUSED(widget); + Q_UNUSED(offset); + + QRect geo = region.boundingRect(); + + NSRect rect = NSMakeRect(geo.x(), geo.y(), geo.width(), geo.height()); + [m_contentView displayRect:rect]; +} + +void QCocoaWindowSurface::resize(const QSize &size) +{ + QWindowSurface::resize(size); + delete m_image; + m_image = new QImage(size,QImage::Format_ARGB32_Premultiplied); + NSSize newSize = NSMakeSize(size.width(),size.height()); + [m_contentView setImage:m_image]; + +} + +QT_END_NAMESPACE diff --git a/src/plugins/platforms/cocoa/qnsview.h b/src/plugins/platforms/cocoa/qnsview.h new file mode 100644 index 0000000..0523725 --- /dev/null +++ b/src/plugins/platforms/cocoa/qnsview.h @@ -0,0 +1,79 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QNSVIEW_H +#define QNSVIEW_H + +#include + +#include + +@interface QNSView : NSView { + CGImageRef m_cgImage; + QWidget *m_widget; + Qt::MouseButtons m_buttons; +} + +- (id)init; +- (id)initWithWidget:(QWidget *)widget; + +- (void)setImage:(QImage *)image; +- (void)drawRect:(NSRect)dirtyRect; + +- (BOOL)isFlipped; + +- (void)handleMouseEvent:(NSEvent *)theEvent; +- (void)mouseDown:(NSEvent *)theEvent; +- (void)mouseDragged:(NSEvent *)theEvent; +- (void)mouseUp:(NSEvent *)theEvent; +- (void)mouseMoved:(NSEvent *)theEvent; +- (void)mouseEntered:(NSEvent *)theEvent; +- (void)mouseExited:(NSEvent *)theEvent; +- (void)rightMouseDown:(NSEvent *)theEvent; +- (void)rightMouseDragged:(NSEvent *)theEvent; +- (void)rightMouseUp:(NSEvent *)theEvent; +- (void)otherMouseDown:(NSEvent *)theEvent; +- (void)otherMouseDragged:(NSEvent *)theEvent; +- (void)otherMouseUp:(NSEvent *)theEvent; + +@end + +#endif //QNSVIEW_H diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm new file mode 100644 index 0000000..60de6ba --- /dev/null +++ b/src/plugins/platforms/cocoa/qnsview.mm @@ -0,0 +1,211 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qnsview.h" + +#include + +#include + +@implementation QNSView + +- (id) init +{ + self = [super init]; + if (self) { + m_cgImage = 0; + m_widget = 0; + m_buttons = Qt::NoButton; + } + return self; +} + +- (id)initWithWidget:(QWidget *)widget { + self = [self init]; + if (self) { + m_widget = widget; + } + return self; +} + +- (void) setImage:(QImage *)image +{ + CGImageRelease(m_cgImage); + + const uchar *imageData = image->bits(); + int bitDepth = image->depth(); + int colorBufferSize = 8; + int bytesPrLine = image->bytesPerLine(); + int width = image->width(); + int height = image->height(); + + CGColorSpaceRef cgColourSpaceRef = CGColorSpaceCreateDeviceRGB(); + + CGDataProviderRef cgDataProviderRef = CGDataProviderCreateWithData( + NULL, + imageData, + image->byteCount(), + NULL); + + m_cgImage = CGImageCreate(width, + height, + colorBufferSize, + bitDepth, + bytesPrLine, + cgColourSpaceRef, + kCGImageAlphaNone, + cgDataProviderRef, + NULL, + false, + kCGRenderingIntentDefault); + + CGColorSpaceRelease(cgColourSpaceRef); + +} + +- (void) drawRect:(NSRect)dirtyRect +{ + if (!m_cgImage) + return; + + CGRect dirtyCGRect = NSRectToCGRect(dirtyRect); + + NSGraphicsContext *nsGraphicsContext = [NSGraphicsContext currentContext]; + CGContextRef cgContext = (CGContextRef) [nsGraphicsContext graphicsPort]; + + CGContextSaveGState( cgContext ); + int dy = dirtyCGRect.origin.y + CGRectGetMaxY(dirtyCGRect); + CGContextTranslateCTM(cgContext, 0, dy); + CGContextScaleCTM(cgContext, 1, -1); + + CGImageRef subImage = CGImageCreateWithImageInRect(m_cgImage, dirtyCGRect); + CGContextDrawImage(cgContext,dirtyCGRect,subImage); + + CGContextRestoreGState(cgContext); + + CGImageRelease(subImage); + +} + +- (BOOL) isFlipped +{ + return YES; +} + +- (void)handleMouseEvent:(NSEvent *)theEvent; +{ + NSPoint point = [self convertPoint: [theEvent locationInWindow] fromView: nil]; + QPoint qt_localPoint(point.x,point.y); + + NSTimeInterval timestamp = [theEvent timestamp]; + ulong qt_timestamp = timestamp * 1000; + + QWindowSystemInterface::handleMouseEvent(m_widget,qt_timestamp,qt_localPoint,QPoint(),m_buttons); + +} + - (void)mouseDown:(NSEvent *)theEvent + { + m_buttons |= Qt::LeftButton; + [self handleMouseEvent:theEvent]; + } + - (void)mouseDragged:(NSEvent *)theEvent + { + if (!(m_buttons & Qt::LeftButton)) + qWarning("Internal Mousebutton tracking invalid(missing Qt::LeftButton"); + [self handleMouseEvent:theEvent]; + } + - (void)mouseUp:(NSEvent *)theEvent + { + m_buttons &= QFlag(~int(Qt::LeftButton)); + [self handleMouseEvent:theEvent]; + } + +- (void)mouseMoved:(NSEvent *)theEvent +{ + qDebug() << "mouseMove"; + [self handleMouseEvent:theEvent]; +} +- (void)mouseEntered:(NSEvent *)theEvent +{ + Q_UNUSED(theEvent); + QWindowSystemInterface::handleEnterEvent(m_widget); +} +- (void)mouseExited:(NSEvent *)theEvent +{ + Q_UNUSED(theEvent); + QWindowSystemInterface::handleLeaveEvent(m_widget); +} +- (void)rightMouseDown:(NSEvent *)theEvent +{ + m_buttons |= Qt::RightButton; + [self handleMouseEvent:theEvent]; +} +- (void)rightMouseDragged:(NSEvent *)theEvent +{ + if (!(m_buttons & Qt::LeftButton)) + qWarning("Internal Mousebutton tracking invalid(missing Qt::LeftButton"); + [self handleMouseEvent:theEvent]; +} +- (void)rightMouseUp:(NSEvent *)theEvent +{ + m_buttons &= QFlag(~int(Qt::RightButton)); + [self handleMouseEvent:theEvent]; +} +- (void)otherMouseDown:(NSEvent *)theEvent +{ + m_buttons |= Qt::RightButton; + [self handleMouseEvent:theEvent]; +} +- (void)otherMouseDragged:(NSEvent *)theEvent +{ + if (!(m_buttons & Qt::LeftButton)) + qWarning("Internal Mousebutton tracking invalid(missing Qt::LeftButton"); + [self handleMouseEvent:theEvent]; +} +- (void)otherMouseUp:(NSEvent *)theEvent +{ + m_buttons &= QFlag(~int(Qt::MiddleButton)); + [self handleMouseEvent:theEvent]; +} + + + +@end diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.h b/src/plugins/platforms/cocoa/qnswindowdelegate.h new file mode 100644 index 0000000..9fc1d63 --- /dev/null +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.h @@ -0,0 +1,61 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QNSWINDOWDELEGATE_H +#define QNSWINDOWDELEGATE_H + +#include + +#include "qcocoawindow.h" + +@interface QNSWindowDelegate : NSObject +{ + QCocoaWindow *m_cocoaWindow; +} + +- (id)initWithQCocoaWindow: (QCocoaWindow *) cocoaWindow; + +- (void)windowDidResize:(NSNotification *)notification; +- (void)windowWillClose:(NSNotification *)notification; + +@end + +#endif // QNSWINDOWDELEGATE_H diff --git a/src/plugins/platforms/cocoa/qnswindowdelegate.mm b/src/plugins/platforms/cocoa/qnswindowdelegate.mm new file mode 100644 index 0000000..c04602b --- /dev/null +++ b/src/plugins/platforms/cocoa/qnswindowdelegate.mm @@ -0,0 +1,73 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include "qnswindowdelegate.h" + +#include +#include + +@implementation QNSWindowDelegate + +- (id) initWithQCocoaWindow: (QCocoaWindow *) cocoaWindow +{ + self = [super init]; + + if (self) { + m_cocoaWindow = cocoaWindow; + } + return self; +} + +- (void)windowDidResize:(NSNotification *)notification +{ + Q_UNUSED(notification); + if (m_cocoaWindow) { + m_cocoaWindow->windowDidResize(); + } +} + +- (void)windowWillClose:(NSNotification *)notification +{ + Q_UNUSED(notification); + QWindowSystemInterface::handleCloseEvent(m_cocoaWindow->widget()); +} + +@end -- cgit v0.12 From 5e537fe88283c273482acc4824cb8123427a6692 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Wed, 27 Oct 2010 11:36:06 +0200 Subject: Fix QT_BLITTER_RASTEROVERLAY and namespace error Reviewed-by: paul --- src/gui/image/qpixmap_blitter.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 9a7ebe2..01a86f9 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -263,7 +263,8 @@ QRectF QBlittablePixmapData::clipAndTransformRect(const QRectF &rect) const return transformationRect; } -QT_END_NAMESPACE #endif //QT_BLITTER_RASTEROVERLAY +QT_END_NAMESPACE + #endif //QT_NO_BLITTABLE -- cgit v0.12 From a87dbf0d08d58b829ca2fa036d589ad4fd48949f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Tue, 26 Oct 2010 15:46:11 +0200 Subject: Fixed race condition in raster paint engine. We need to protect the gradient cache accesses with a mutex. Task-number: QTBUG-14614 Reviewed-by: Bradley T. Hughes --- src/gui/painting/qpaintengine_raster.cpp | 2 ++ tests/auto/qpainter/tst_qpainter.cpp | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 975ebb0..c03f82b 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -4811,6 +4811,7 @@ public: for (int i = 0; i < stops.size() && i <= 2; i++) hash_val += stops[i].second.rgba(); + QMutexLocker lock(&mutex); QGradientColorTableHash::const_iterator it = cache.constFind(hash_val); if (it == cache.constEnd()) @@ -4844,6 +4845,7 @@ protected: } QGradientColorTableHash cache; + QMutex mutex; }; void QGradientCache::generateGradientColorTable(const QGradient& gradient, uint *colorTable, int size, int opacity) const diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp index beb83a1..4146c5e 100644 --- a/tests/auto/qpainter/tst_qpainter.cpp +++ b/tests/auto/qpainter/tst_qpainter.cpp @@ -251,6 +251,8 @@ private slots: void QTBUG5939_attachPainterPrivate(); + void QTBUG14614_gradientCacheRaceCondition(); + private: void fillData(); void setPenColor(QPainter& p); @@ -4458,6 +4460,36 @@ void tst_QPainter::QTBUG5939_attachPainterPrivate() QCOMPARE(widget->deviceTransform, proxy->deviceTransform); } +class GradientProducer : public QThread +{ +protected: + void run(); +}; + +void GradientProducer::run() +{ + QImage image(1, 1, QImage::Format_RGB32); + QPainter p(&image); + + for (int i = 0; i < 1000; ++i) { + QLinearGradient g; + g.setColorAt(0, QColor(i % 256, 0, 0)); + g.setColorAt(1, Qt::white); + + p.fillRect(image.rect(), g); + } +} + +void tst_QPainter::QTBUG14614_gradientCacheRaceCondition() +{ + const int threadCount = 16; + GradientProducer producers[threadCount]; + for (int i = 0; i < threadCount; ++i) + producers[i].start(); + for (int i = 0; i < threadCount; ++i) + producers[i].wait(); +} + QTEST_MAIN(tst_QPainter) #include "tst_qpainter.moc" -- cgit v0.12 From 4d0571667463997f5f1145408a2ba73ba293637a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Wed, 27 Oct 2010 12:57:42 +0200 Subject: Fix Windows compilation. Don't take for granted that these are included... Task-number: QTBUG-14614 Reviewed-by: Bradley T. Hughes --- src/gui/painting/qpaintengine_raster.cpp | 1 + tests/auto/qpainter/tst_qpainter.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index c03f82b..d1c4cab 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -40,6 +40,7 @@ ****************************************************************************/ #include +#include #define QT_FT_BEGIN_HEADER #define QT_FT_END_HEADER diff --git a/tests/auto/qpainter/tst_qpainter.cpp b/tests/auto/qpainter/tst_qpainter.cpp index 4146c5e..0a4de99 100644 --- a/tests/auto/qpainter/tst_qpainter.cpp +++ b/tests/auto/qpainter/tst_qpainter.cpp @@ -49,6 +49,7 @@ #include #include #include +#include #include #if !defined(Q_OS_WINCE) && !defined(Q_OS_SYMBIAN) #include -- cgit v0.12 From b6b276495b0d02e3bcfa62b793c83f5adcf178c7 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Mon, 18 Oct 2010 16:10:15 +0200 Subject: Sockets: Private function for pausing/resuming notifiers This will be used by QNAM to prevent event loop recursion while emitting signals that often spin an event loop, e.g. authenticationRequired() displaying a dialog for the user. Reviewed-by: Peter Hartmann Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/socket/qabstractsocket.cpp | 30 ++++++++++++++++++++++++++++++ src/network/socket/qabstractsocket_p.h | 7 +++++++ src/network/ssl/qsslsocket.cpp | 14 ++++++++++++++ src/network/ssl/qsslsocket_p.h | 2 ++ 4 files changed, 53 insertions(+) diff --git a/src/network/socket/qabstractsocket.cpp b/src/network/socket/qabstractsocket.cpp index 505db71..f03d102 100644 --- a/src/network/socket/qabstractsocket.cpp +++ b/src/network/socket/qabstractsocket.cpp @@ -1212,6 +1212,36 @@ void QAbstractSocketPrivate::fetchConnectionParameters() #endif } + +void QAbstractSocketPrivate::pauseSocketNotifiers(QAbstractSocket *socket) +{ + QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine; + if (!socketEngine) + return; + socket->d_func()->prePauseReadSocketNotifierState = socketEngine->isReadNotificationEnabled(); + socket->d_func()->prePauseWriteSocketNotifierState = socketEngine->isWriteNotificationEnabled(); + socket->d_func()->prePauseExceptionSocketNotifierState = socketEngine->isExceptionNotificationEnabled(); + socketEngine->setReadNotificationEnabled(false); + socketEngine->setWriteNotificationEnabled(false); + socketEngine->setExceptionNotificationEnabled(false); +} + +void QAbstractSocketPrivate::resumeSocketNotifiers(QAbstractSocket *socket) +{ + QAbstractSocketEngine *socketEngine = socket->d_func()->socketEngine; + if (!socketEngine) + return; + socketEngine->setReadNotificationEnabled(socket->d_func()->prePauseReadSocketNotifierState); + socketEngine->setWriteNotificationEnabled(socket->d_func()->prePauseWriteSocketNotifierState); + socketEngine->setExceptionNotificationEnabled(socket->d_func()->prePauseExceptionSocketNotifierState); +} + +QAbstractSocketEngine* QAbstractSocketPrivate::getSocketEngine(QAbstractSocket *socket) +{ + return socket->d_func()->socketEngine; +} + + /*! \internal Constructs a new abstract socket of type \a socketType. The \a diff --git a/src/network/socket/qabstractsocket_p.h b/src/network/socket/qabstractsocket_p.h index b51c301..7fba0fe 100644 --- a/src/network/socket/qabstractsocket_p.h +++ b/src/network/socket/qabstractsocket_p.h @@ -158,6 +158,13 @@ public: QAbstractSocket::SocketState state; QAbstractSocket::SocketError socketError; + + bool prePauseReadSocketNotifierState; + bool prePauseWriteSocketNotifierState; + bool prePauseExceptionSocketNotifierState; + static void pauseSocketNotifiers(QAbstractSocket*); + static void resumeSocketNotifiers(QAbstractSocket*); + static QAbstractSocketEngine* getSocketEngine(QAbstractSocket*); }; QT_END_NAMESPACE diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index c9f421f..a752720 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -2035,6 +2035,20 @@ void QSslSocketPrivate::createPlainSocket(QIODevice::OpenMode openMode) q->setReadBufferSize(readBufferMaxSize); } +void QSslSocketPrivate::pauseSocketNotifiers(QSslSocket *socket) +{ + if (!socket->d_func()->plainSocket) + return; + QAbstractSocketPrivate::pauseSocketNotifiers(socket->d_func()->plainSocket); +} + +void QSslSocketPrivate::resumeSocketNotifiers(QSslSocket *socket) +{ + if (!socket->d_func()->plainSocket) + return; + QAbstractSocketPrivate::resumeSocketNotifiers(socket->d_func()->plainSocket); +} + /*! \internal */ diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index 72b3ef7..94f5f39 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -142,6 +142,8 @@ public: // The socket itself, including private slots. QTcpSocket *plainSocket; void createPlainSocket(QIODevice::OpenMode openMode); + static void pauseSocketNotifiers(QSslSocket*); + static void resumeSocketNotifiers(QSslSocket*); void _q_connectedSlot(); void _q_hostFoundSlot(); void _q_disconnectedSlot(); -- cgit v0.12 From 4c29a590cbdd68006906cb8ce3250f8d19caa3d6 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Mon, 18 Oct 2010 16:21:47 +0200 Subject: QAuthenticator: Fix NTLMv2 credential caching of QNAM QNetworkAccessManager used the user() function for caching the credentials when doing HTTP authentication with NTLMv2. For that to work it needs to return the same value as was put in with setUser(). Reviewed-by: Peter Hartmann Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/kernel/qauthenticator.cpp | 14 ++++++++------ src/network/kernel/qauthenticator_p.h | 1 + 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp index f97d833..220f7da 100644 --- a/src/network/kernel/qauthenticator.cpp +++ b/src/network/kernel/qauthenticator.cpp @@ -232,19 +232,21 @@ void QAuthenticator::setUser(const QString &user) //domain name is present d->realm.clear(); d->userDomain = user.left(separatorPosn); - d->user = user.mid(separatorPosn + 1); + d->extractedUser = user.mid(separatorPosn + 1); + d->user = user; } else if((separatorPosn = user.indexOf(QLatin1String("@"))) != -1) { //domain name is present d->realm.clear(); d->userDomain = user.left(separatorPosn); - d->user = user.left(separatorPosn); + d->extractedUser = user.left(separatorPosn); + d->user = user; } else { + d->extractedUser = user; d->user = user; d->realm.clear(); d->userDomain.clear(); } break; - // For other auth mechanisms, domain name will be part of username default: d->user = user; break; @@ -1196,7 +1198,7 @@ static QByteArray qCreatev2Hash(const QAuthenticatorPrivate *ctx, Q_ASSERT(hashKey.size() == 16); // Assuming the user and domain is always unicode in challenge QByteArray message = - qStringAsUcs2Le(ctx->user.toUpper()) + + qStringAsUcs2Le(ctx->extractedUser.toUpper()) + qStringAsUcs2Le(phase3->domainStr); phase3->v2Hash = qEncodeHmacMd5(hashKey, message); @@ -1401,8 +1403,8 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas pb.domainStr = ctx->userDomain; } - offset = qEncodeNtlmString(pb.user, offset, ctx->user, unicode); - pb.userStr = ctx->user; + offset = qEncodeNtlmString(pb.user, offset, ctx->extractedUser, unicode); + pb.userStr = ctx->extractedUser; offset = qEncodeNtlmString(pb.workstation, offset, ctx->workstation, unicode); pb.workstationStr = ctx->workstation; diff --git a/src/network/kernel/qauthenticator_p.h b/src/network/kernel/qauthenticator_p.h index 4e09360..9f2e607 100644 --- a/src/network/kernel/qauthenticator_p.h +++ b/src/network/kernel/qauthenticator_p.h @@ -71,6 +71,7 @@ public: QAtomicInt ref; QString user; + QString extractedUser; QString password; QVariantHash options; Method method; -- cgit v0.12 From d18292563cc6bfee3876b830420b1f29c0a6c260 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 16:01:01 +0200 Subject: QNAM: Do not load credentials from cache prematurely The credentials shall only be loaded on demand, e.g. after the HTTP code emits authenticationRequired() Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qnetworkaccessmanager.cpp | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 12fe094..0d33a46 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1025,16 +1025,8 @@ QNetworkReply *QNetworkAccessManager::createRequest(QNetworkAccessManager::Opera priv->manager = this; // second step: fetch cached credentials - if (static_cast - (request.attribute(QNetworkRequest::AuthenticationReuseAttribute, - QNetworkRequest::Automatic).toInt()) == QNetworkRequest::Automatic) { - QNetworkAuthenticationCredential *cred = d->fetchCachedCredentials(url); - if (cred) { - url.setUserName(cred->user); - url.setPassword(cred->password); - priv->urlForLastAuthentication = url; - } - } + // This is not done for the time being, we should use signal emissions to request + // the credentials from cache. // third step: find a backend priv->backend = d->findBackend(op, request); @@ -1116,7 +1108,9 @@ void QNetworkAccessManagerPrivate::authenticationRequired(QNetworkAccessBackend // don't try the cache for the same URL twice in a row // being called twice for the same URL means the authentication failed - if (url != backend->reply->urlForLastAuthentication) { + // also called when last URL is empty, e.g. on first call + if (backend->reply->urlForLastAuthentication.isEmpty() + || url != backend->reply->urlForLastAuthentication) { QNetworkAuthenticationCredential *cred = fetchCachedCredentials(url, authenticator); if (cred) { authenticator->setUser(cred->user); -- cgit v0.12 From 9bc5a32b875b812c3a706034c8c27614f86bd138 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 16:05:21 +0200 Subject: QNAM HTTP: Move caching of credentials from URL The credentials are now cached when the request gets sent. Reviewed-by: Peter Hartmann Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 11 +++++------ src/network/access/qhttpnetworkconnectionchannel.cpp | 1 + 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index ccdbb20..54a7548 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -338,13 +338,9 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket copyCredentials(i, auth, isProxy); QMetaObject::invokeMethod(q, "_q_restartAuthPendingRequests", Qt::QueuedConnection); } - } else if (priv->phase == QAuthenticatorPrivate::Start) { - // If the url's authenticator has a 'user' set we will end up here (phase is only set to 'Done' by - // parseHttpResponse above if 'user' is empty). So if credentials were supplied with the request, - // such as in the case of an XMLHttpRequest, this is our only opportunity to cache them. - emit q->cacheCredentials(reply->request(), auth, q); } - // - Changing values in QAuthenticator will reset the 'phase'. + // - Changing values in QAuthenticator will reset the 'phase'. Therefore if it is still "Done" + // then nothing was filled in by the user or the cache // - If withCredentials has been set to false (e.g. by QtWebKit for a cross-origin XMLHttpRequest) then // we need to bail out if authentication is required. if (priv->phase == QAuthenticatorPrivate::Done || !reply->request().withCredentials()) { @@ -380,6 +376,7 @@ void QHttpNetworkConnectionPrivate::createAuthorization(QAbstractSocket *socket, int i = indexOf(socket); + // Send "Authorization" header, but not if it's NTLM and the socket is already authenticated. if (channels[i].authMehtod != QAuthenticatorPrivate::None) { if (!(channels[i].authMehtod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 401)) { QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(channels[i].authenticator); @@ -389,6 +386,8 @@ void QHttpNetworkConnectionPrivate::createAuthorization(QAbstractSocket *socket, } } } + + // Send "Proxy-Authorization" header, but not if it's NTLM and the socket is already authenticated. if (channels[i].proxyAuthMehtod != QAuthenticatorPrivate::None) { if (!(channels[i].proxyAuthMehtod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 407)) { QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(channels[i].proxyAuthenticator); diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index d10f951..f83e7c1 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -190,6 +190,7 @@ bool QHttpNetworkConnectionChannel::sendRequest() || (!url.password().isEmpty() && url.password() != auth.password())) { auth.setUser(url.userName()); auth.setPassword(url.password()); + emit connection->cacheCredentials(request, &auth, connection); connection->d_func()->copyCredentials(connection->d_func()->indexOf(socket), &auth, false); } // clear the userinfo, since we use the same request for resending -- cgit v0.12 From f706263856085df62507414ff0bcbadeca6dcfe5 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 16:07:21 +0200 Subject: QNAM HTTP: Do not copy around credentials when using NTLM Copying the username and password messes up the state inside the QAuthenticator. Do not do it. Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 54a7548..32881b2 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -257,6 +257,13 @@ void QHttpNetworkConnectionPrivate::copyCredentials(int fromChannel, QAuthentica { Q_ASSERT(auth); + // NTLM is a multi phase authentication. Copying credentials between authenticators would mess things up. + if (!isProxy && channels[fromChannel].authMehtod == QAuthenticatorPrivate::Ntlm) + return; + if (isProxy && channels[fromChannel].proxyAuthMehtod == QAuthenticatorPrivate::Ntlm) + return; + + // select another channel QAuthenticator* otherAuth = 0; for (int i = 0; i < channelCount; ++i) { -- cgit v0.12 From 07fd031d29198cc5a0d6f1da6bb8fea29274fa06 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 16:16:38 +0200 Subject: QNAM HTTP: Pause sockets while emitting to user code. This is needed because user code might display a dialog which spins an event loop and could make the sockets readyRead() fire. This event loop recursion is not desired as it can lead to nasty bugs when the state is messed up. Reviewed-by: Peter Hartmann Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 82 +++++++++++++++------------ src/network/access/qhttpnetworkconnection_p.h | 15 +++-- 2 files changed, 56 insertions(+), 41 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 32881b2..f8f7620 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -45,6 +45,7 @@ #include #include #include +#include #include #include @@ -56,6 +57,7 @@ #ifndef QT_NO_HTTP #ifndef QT_NO_OPENSSL +# include # include # include # include @@ -79,9 +81,9 @@ const int QHttpNetworkConnectionPrivate::defaultRePipelineLength = 2; QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &hostName, quint16 port, bool encrypt) -: hostName(hostName), port(port), encrypt(encrypt), - channelCount(defaultChannelCount), - pendingAuthSignal(false), pendingProxyAuthSignal(false) +: state(RunningState), + hostName(hostName), port(port), encrypt(encrypt), + channelCount(defaultChannelCount) #ifndef QT_NO_NETWORKPROXY , networkProxy(QNetworkProxy::NoProxy) #endif @@ -90,9 +92,9 @@ QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(const QString &host } QHttpNetworkConnectionPrivate::QHttpNetworkConnectionPrivate(quint16 channelCount, const QString &hostName, quint16 port, bool encrypt) -: hostName(hostName), port(port), encrypt(encrypt), - channelCount(channelCount), - pendingAuthSignal(false), pendingProxyAuthSignal(false) +: state(RunningState), + hostName(hostName), port(port), encrypt(encrypt), + channelCount(channelCount) #ifndef QT_NO_NETWORKPROXY , networkProxy(QNetworkProxy::NoProxy) #endif @@ -121,6 +123,37 @@ void QHttpNetworkConnectionPrivate::init() } } +void QHttpNetworkConnectionPrivate::pauseConnection() +{ + state = PausedState; + + // Disable all socket notifiers + for (int i = 0; i < channelCount; i++) { + if (encrypt) + QSslSocketPrivate::pauseSocketNotifiers(static_cast(channels[i].socket)); + else + QAbstractSocketPrivate::pauseSocketNotifiers(channels[i].socket); + } +} + +void QHttpNetworkConnectionPrivate::resumeConnection() +{ + state = RunningState; + // Enable all socket notifiers + for (int i = 0; i < channelCount; i++) { + if (encrypt) + QSslSocketPrivate::resumeSocketNotifiers(static_cast(channels[i].socket)); + else + QAbstractSocketPrivate::resumeSocketNotifiers(channels[i].socket); + } + + // Resume uploads + // FIXME + + // queue _q_startNextRequest + QMetaObject::invokeMethod(this->q_func(), "_q_startNextRequest", Qt::QueuedConnection); +} + int QHttpNetworkConnectionPrivate::indexOf(QAbstractSocket *socket) const { for (int i = 0; i < channelCount; ++i) @@ -315,35 +348,19 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket priv->parseHttpResponse(fields, isProxy); if (priv->phase == QAuthenticatorPrivate::Done) { - if ((isProxy && pendingProxyAuthSignal) ||(!isProxy && pendingAuthSignal)) { - // drop the request - reply->d_func()->eraseData(); - channels[i].close(); - channels[i].lastStatus = 0; - channels[i].state = QHttpNetworkConnectionChannel::Wait4AuthState; - return false; - } - // cannot use this socket until the slot returns - channels[i].state = QHttpNetworkConnectionChannel::WaitingState; - socket->blockSignals(true); + pauseConnection(); if (!isProxy) { - pendingAuthSignal = true; emit q->authenticationRequired(reply->request(), auth, q); - pendingAuthSignal = false; #ifndef QT_NO_NETWORKPROXY } else { - pendingProxyAuthSignal = true; emit q->proxyAuthenticationRequired(networkProxy, auth, q); - pendingProxyAuthSignal = false; #endif } - socket->blockSignals(false); - // socket free to use - channels[i].state = QHttpNetworkConnectionChannel::IdleState; + resumeConnection(); + if (priv->phase != QAuthenticatorPrivate::Done) { // send any pending requests copyCredentials(i, auth, isProxy); - QMetaObject::invokeMethod(q, "_q_restartAuthPendingRequests", Qt::QueuedConnection); } } // - Changing values in QAuthenticator will reset the 'phase'. Therefore if it is still "Done" @@ -729,6 +746,10 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply) // although it is called _q_startNextRequest, it will actually start multiple requests when possible void QHttpNetworkConnectionPrivate::_q_startNextRequest() { + // If the QHttpNetworkConnection is currently paused then bail out immediatly + if (state == PausedState) + return; + //resend the necessary ones. for (int i = 0; i < channelCount; ++i) { if (channels[i].resendCurrent) { @@ -779,17 +800,6 @@ void QHttpNetworkConnectionPrivate::_q_startNextRequest() fillPipeline(channels[i].socket); } -void QHttpNetworkConnectionPrivate::_q_restartAuthPendingRequests() -{ - // send the request using the idle socket - for (int i = 0 ; i < channelCount; ++i) { - if (channels[i].state == QHttpNetworkConnectionChannel::Wait4AuthState) { - channels[i].state = QHttpNetworkConnectionChannel::IdleState; - if (channels[i].reply) - channels[i].sendRequest(); - } - } -} void QHttpNetworkConnectionPrivate::readMoreLater(QHttpNetworkReply *reply) { diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 51666d6..f2e0b1c 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -141,10 +141,10 @@ private: Q_DECLARE_PRIVATE(QHttpNetworkConnection) Q_DISABLE_COPY(QHttpNetworkConnection) friend class QHttpNetworkReply; + friend class QHttpNetworkReplyPrivate; friend class QHttpNetworkConnectionChannel; Q_PRIVATE_SLOT(d_func(), void _q_startNextRequest()) - Q_PRIVATE_SLOT(d_func(), void _q_restartAuthPendingRequests()) }; @@ -160,11 +160,20 @@ public: static const int defaultPipelineLength; static const int defaultRePipelineLength; + enum ConnectionState { + RunningState = 0, + PausedState = 1, + }; + QHttpNetworkConnectionPrivate(const QString &hostName, quint16 port, bool encrypt); QHttpNetworkConnectionPrivate(quint16 channelCount, const QString &hostName, quint16 port, bool encrypt); ~QHttpNetworkConnectionPrivate(); void init(); + void pauseConnection(); + void resumeConnection(); + ConnectionState state; + enum { ChunkSize = 4096 }; int indexOf(QAbstractSocket *socket) const; @@ -184,7 +193,6 @@ public: // private slots void _q_startNextRequest(); // send the next request from the queue - void _q_restartAuthPendingRequests(); // send the currently blocked request void createAuthorization(QAbstractSocket *socket, QHttpNetworkRequest &request); @@ -203,9 +211,6 @@ public: const int channelCount; QHttpNetworkConnectionChannel *channels; // parallel connections to the server - bool pendingAuthSignal; // there is an incomplete authentication signal - bool pendingProxyAuthSignal; // there is an incomplete proxy authentication signal - qint64 uncompressedBytesAvailable(const QHttpNetworkReply &reply) const; qint64 uncompressedBytesAvailableNextBlock(const QHttpNetworkReply &reply) const; -- cgit v0.12 From 04cc5144a8d1d1eb51fb627327e155649ba2ce45 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 16:19:29 +0200 Subject: QNAM HTTP: Process authenticationRequired() from HTTP properly Fixes a bug where a different QNetworkReply(Impl) handles an authentication request. Reviewed-by: Peter Hartmann Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 2 +- src/network/access/qhttpnetworkconnection_p.h | 2 +- src/network/access/qnetworkaccesshttpbackend.cpp | 11 +++++++---- src/network/access/qnetworkaccesshttpbackend_p.h | 2 +- .../qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp | 8 ++++---- 5 files changed, 14 insertions(+), 11 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index f8f7620..f6cb530 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -350,7 +350,7 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket if (priv->phase == QAuthenticatorPrivate::Done) { pauseConnection(); if (!isProxy) { - emit q->authenticationRequired(reply->request(), auth, q); + emit q->authenticationRequired(reply, reply->request(), auth, q); #ifndef QT_NO_NETWORKPROXY } else { emit q->proxyAuthenticationRequired(networkProxy, auth, q); diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index f2e0b1c..875c978 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -131,7 +131,7 @@ Q_SIGNALS: void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator, const QHttpNetworkConnection *connection = 0); #endif - void authenticationRequired(const QHttpNetworkRequest &request, QAuthenticator *authenticator, + void authenticationRequired(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *authenticator, const QHttpNetworkConnection *connection = 0); void cacheCredentials(const QHttpNetworkRequest &request, QAuthenticator *authenticator, const QHttpNetworkConnection *connection = 0); diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index f617244..2af4987 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -344,8 +344,8 @@ void QNetworkAccessHttpBackend::setupConnection() connect(http, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); #endif - connect(http, SIGNAL(authenticationRequired(QHttpNetworkRequest,QAuthenticator*)), - SLOT(httpAuthenticationRequired(QHttpNetworkRequest,QAuthenticator*))); + connect(http, SIGNAL(authenticationRequired(const QHttpNetworkReply*, QHttpNetworkRequest,QAuthenticator*,const QHttpNetworkConnection*)), + SLOT(httpAuthenticationRequired(const QHttpNetworkReply*, QHttpNetworkRequest,QAuthenticator*))); connect(http, SIGNAL(cacheCredentials(QHttpNetworkRequest,QAuthenticator*)), SLOT(httpCacheCredentials(QHttpNetworkRequest,QAuthenticator*))); connect(http, SIGNAL(error(QNetworkReply::NetworkError,QString)), @@ -862,10 +862,13 @@ void QNetworkAccessHttpBackend::replyHeaderChanged() metaDataChanged(); } -void QNetworkAccessHttpBackend::httpAuthenticationRequired(const QHttpNetworkRequest &, +void QNetworkAccessHttpBackend::httpAuthenticationRequired(const QHttpNetworkReply *reply, + const QHttpNetworkRequest &, QAuthenticator *auth) { - authenticationRequired(auth); + // Only process this signal when it is for the QHttpNetworkReply that we actually have + if (reply == this->httpReply) + authenticationRequired(auth); } void QNetworkAccessHttpBackend::httpCacheCredentials(const QHttpNetworkRequest &, diff --git a/src/network/access/qnetworkaccesshttpbackend_p.h b/src/network/access/qnetworkaccesshttpbackend_p.h index c4c88ae..f06f364 100644 --- a/src/network/access/qnetworkaccesshttpbackend_p.h +++ b/src/network/access/qnetworkaccesshttpbackend_p.h @@ -104,7 +104,7 @@ private slots: void replyReadyRead(); void replyFinished(); void replyHeaderChanged(); - void httpAuthenticationRequired(const QHttpNetworkRequest &request, QAuthenticator *auth); + void httpAuthenticationRequired(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *auth); void httpCacheCredentials(const QHttpNetworkRequest &request, QAuthenticator *auth); void httpError(QNetworkReply::NetworkError error, const QString &errorString); bool sendCacheContents(const QNetworkCacheMetaData &metaData); diff --git a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp index 89f608e..c0f503b 100644 --- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp +++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp @@ -57,7 +57,7 @@ public: public Q_SLOTS: void finishedReply(); void finishedWithError(QNetworkReply::NetworkError errorCode, const QString &detail); - void challenge401(const QHttpNetworkRequest &request, QAuthenticator *authenticator, const QHttpNetworkConnection *connection); + void challenge401(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *authenticator, const QHttpNetworkConnection *connection); #ifndef QT_NO_OPENSSL void sslErrors(const QList &errors); #endif @@ -495,7 +495,7 @@ void tst_QHttpNetworkConnection::_connect() QVERIFY(false); } -void tst_QHttpNetworkConnection::challenge401(const QHttpNetworkRequest &request, +void tst_QHttpNetworkConnection::challenge401(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *authenticator, const QHttpNetworkConnection *connection) { @@ -552,8 +552,8 @@ void tst_QHttpNetworkConnection::get401() if (encrypt) connection.enableEncryption(); QCOMPARE(connection.isEncrypted(), encrypt); - connect(&connection, SIGNAL(authenticationRequired(const QHttpNetworkRequest&, QAuthenticator *, const QHttpNetworkConnection*)), - SLOT(challenge401(const QHttpNetworkRequest&, QAuthenticator *, const QHttpNetworkConnection*))); + connect(&connection, SIGNAL(authenticationRequired(const QHttpNetworkReply*, const QHttpNetworkRequest&, QAuthenticator *, const QHttpNetworkConnection*)), + SLOT(challenge401(const QHttpNetworkReply*, const QHttpNetworkRequest&, QAuthenticator *, const QHttpNetworkConnection*))); connection.setProperty("setCredentials", setCredentials); connection.setProperty("username", username); connection.setProperty("password", password); -- cgit v0.12 From a8818493d4c782527dec7c30e9688d0e45a21351 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 16:38:48 +0200 Subject: QNAM HTTP: Also resume uploads after connection pause Reviewed-by: Peter Hartmann Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index f6cb530..8e8c34d 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -145,10 +145,11 @@ void QHttpNetworkConnectionPrivate::resumeConnection() QSslSocketPrivate::resumeSocketNotifiers(static_cast(channels[i].socket)); else QAbstractSocketPrivate::resumeSocketNotifiers(channels[i].socket); - } - // Resume uploads - // FIXME + // Resume pending upload if needed + if (channels[i].state == QHttpNetworkConnectionChannel::WritingState) + QMetaObject::invokeMethod(&channels[i], "_q_uploadDataReadyRead", Qt::QueuedConnection); + } // queue _q_startNextRequest QMetaObject::invokeMethod(this->q_func(), "_q_startNextRequest", Qt::QueuedConnection); -- cgit v0.12 From 0284bd11c8062108f8cff85175341bc9823b8ab4 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 17:20:31 +0200 Subject: QNAM HTTP: Also pause connection when emitting sslErrors() Pause the socket notifiers because the user could be displaying a dialog which makes the event loop run and could make our socket notifiers fire. Reviewed-by: Peter Hartmann Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnectionchannel.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index f83e7c1..d6b3f94 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -1035,7 +1035,11 @@ void QHttpNetworkConnectionChannel::_q_sslErrors(const QList &errors) if (!socket) return; //QNetworkReply::NetworkError errorCode = QNetworkReply::ProtocolFailure; + // Also pause the connection because socket notifiers may fire while an user + // dialog is displaying + connection->d_func()->pauseConnection(); emit connection->sslErrors(errors); + connection->d_func()->resumeConnection(); } void QHttpNetworkConnectionChannel::_q_encryptedBytesWritten(qint64 bytes) -- cgit v0.12 From 32da94f1e58cf8591610bd3676ba448b5d7e55c0 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 17:25:38 +0200 Subject: QNAM HTTP: Pause connection when emitting proxy auth signal Pause the socket notifiers because the user could be displaying a dialog which makes the event loop run and could make our socket notifiers fire. Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 8e8c34d..d861cc1 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -969,7 +969,11 @@ void QHttpNetworkConnection::ignoreSslErrors(const QList &errors, int void QHttpNetworkConnectionPrivate::emitProxyAuthenticationRequired(const QHttpNetworkConnectionChannel *chan, const QNetworkProxy &proxy, QAuthenticator* auth) { Q_Q(QHttpNetworkConnection); + // Also pause the connection because socket notifiers may fire while an user + // dialog is displaying + pauseConnection(); emit q->proxyAuthenticationRequired(proxy, auth, q); + resumeConnection(); int i = indexOf(chan->socket); copyCredentials(i, auth, true); } -- cgit v0.12 From cbe5481271ff5470db047d7f133073ec37cf487c Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 19 Oct 2010 17:32:47 +0200 Subject: QNAM HTTP: Internal variable spelling mistakes Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 16 ++++++++-------- src/network/access/qhttpnetworkconnectionchannel.cpp | 4 ++-- src/network/access/qhttpnetworkconnectionchannel_p.h | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index d861cc1..b7380b5 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -292,9 +292,9 @@ void QHttpNetworkConnectionPrivate::copyCredentials(int fromChannel, QAuthentica Q_ASSERT(auth); // NTLM is a multi phase authentication. Copying credentials between authenticators would mess things up. - if (!isProxy && channels[fromChannel].authMehtod == QAuthenticatorPrivate::Ntlm) + if (!isProxy && channels[fromChannel].authMethod == QAuthenticatorPrivate::Ntlm) return; - if (isProxy && channels[fromChannel].proxyAuthMehtod == QAuthenticatorPrivate::Ntlm) + if (isProxy && channels[fromChannel].proxyAuthMethod == QAuthenticatorPrivate::Ntlm) return; @@ -337,10 +337,10 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket QAuthenticator* auth = 0; if (isProxy) { auth = &channels[i].proxyAuthenticator; - channels[i].proxyAuthMehtod = authMethod; + channels[i].proxyAuthMethod = authMethod; } else { auth = &channels[i].authenticator; - channels[i].authMehtod = authMethod; + channels[i].authMethod = authMethod; } //proceed with the authentication. if (auth->isNull()) @@ -402,8 +402,8 @@ void QHttpNetworkConnectionPrivate::createAuthorization(QAbstractSocket *socket, int i = indexOf(socket); // Send "Authorization" header, but not if it's NTLM and the socket is already authenticated. - if (channels[i].authMehtod != QAuthenticatorPrivate::None) { - if (!(channels[i].authMehtod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 401)) { + if (channels[i].authMethod != QAuthenticatorPrivate::None) { + if (!(channels[i].authMethod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 401)) { QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(channels[i].authenticator); if (priv && priv->method != QAuthenticatorPrivate::None) { QByteArray response = priv->calculateResponse(request.d->methodName(), request.d->uri(false)); @@ -413,8 +413,8 @@ void QHttpNetworkConnectionPrivate::createAuthorization(QAbstractSocket *socket, } // Send "Proxy-Authorization" header, but not if it's NTLM and the socket is already authenticated. - if (channels[i].proxyAuthMehtod != QAuthenticatorPrivate::None) { - if (!(channels[i].proxyAuthMehtod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 407)) { + if (channels[i].proxyAuthMethod != QAuthenticatorPrivate::None) { + if (!(channels[i].proxyAuthMethod == QAuthenticatorPrivate::Ntlm && channels[i].lastStatus != 407)) { QAuthenticatorPrivate *priv = QAuthenticatorPrivate::getPrivate(channels[i].proxyAuthenticator); if (priv && priv->method != QAuthenticatorPrivate::None) { QByteArray response = priv->calculateResponse(request.d->methodName(), request.d->uri(false)); diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index d6b3f94..58e2b2f 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -68,8 +68,8 @@ QHttpNetworkConnectionChannel::QHttpNetworkConnectionChannel() , lastStatus(0) , pendingEncrypt(false) , reconnectAttempts(2) - , authMehtod(QAuthenticatorPrivate::None) - , proxyAuthMehtod(QAuthenticatorPrivate::None) + , authMethod(QAuthenticatorPrivate::None) + , proxyAuthMethod(QAuthenticatorPrivate::None) #ifndef QT_NO_OPENSSL , ignoreAllSslErrors(false) #endif diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index 41a896d..2b1be2c 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -108,8 +108,8 @@ public: int lastStatus; // last status received on this channel bool pendingEncrypt; // for https (send after encrypted) int reconnectAttempts; // maximum 2 reconnection attempts - QAuthenticatorPrivate::Method authMehtod; - QAuthenticatorPrivate::Method proxyAuthMehtod; + QAuthenticatorPrivate::Method authMethod; + QAuthenticatorPrivate::Method proxyAuthMethod; QAuthenticator authenticator; QAuthenticator proxyAuthenticator; #ifndef QT_NO_OPENSSL -- cgit v0.12 From 7647fdaf9a4b526581e02fbd0e87c41a96cbfebb Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Mon, 25 Oct 2010 12:00:58 +0200 Subject: QNAM: Internal function renaming Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qnetworkaccessbackend.cpp | 2 +- src/network/access/qnetworkaccessmanager.cpp | 12 ++++++------ src/network/access/qnetworkaccessmanager_p.h | 6 +++--- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp index 60f7dc6..0a0987a 100644 --- a/src/network/access/qnetworkaccessbackend.cpp +++ b/src/network/access/qnetworkaccessbackend.cpp @@ -329,7 +329,7 @@ void QNetworkAccessBackend::authenticationRequired(QAuthenticator *authenticator void QNetworkAccessBackend::cacheCredentials(QAuthenticator *authenticator) { - manager->addCredentials(this->reply->url, authenticator); + manager->cacheCredentials(this->reply->url, authenticator); } void QNetworkAccessBackend::metaDataChanged() diff --git a/src/network/access/qnetworkaccessmanager.cpp b/src/network/access/qnetworkaccessmanager.cpp index 0d33a46..e5f4d5a 100644 --- a/src/network/access/qnetworkaccessmanager.cpp +++ b/src/network/access/qnetworkaccessmanager.cpp @@ -1122,7 +1122,7 @@ void QNetworkAccessManagerPrivate::authenticationRequired(QNetworkAccessBackend backend->reply->urlForLastAuthentication = url; emit q->authenticationRequired(backend->reply->q_func(), authenticator); - addCredentials(url, authenticator); + cacheCredentials(url, authenticator); } #ifndef QT_NO_NETWORKPROXY @@ -1139,7 +1139,7 @@ void QNetworkAccessManagerPrivate::proxyAuthenticationRequired(QNetworkAccessBac // possible solution: some tracking inside the authenticator // or a new function proxyAuthenticationSucceeded(true|false) if (proxy != backend->reply->lastProxyAuthentication) { - QNetworkAuthenticationCredential *cred = fetchCachedCredentials(proxy); + QNetworkAuthenticationCredential *cred = fetchCachedProxyCredentials(proxy); if (cred) { authenticator->setUser(cred->user); authenticator->setPassword(cred->password); @@ -1149,10 +1149,10 @@ void QNetworkAccessManagerPrivate::proxyAuthenticationRequired(QNetworkAccessBac backend->reply->lastProxyAuthentication = proxy; emit q->proxyAuthenticationRequired(proxy, authenticator); - addCredentials(proxy, authenticator); + cacheProxyCredentials(proxy, authenticator); } -void QNetworkAccessManagerPrivate::addCredentials(const QNetworkProxy &p, +void QNetworkAccessManagerPrivate::cacheProxyCredentials(const QNetworkProxy &p, const QAuthenticator *authenticator) { Q_ASSERT(authenticator); @@ -1189,7 +1189,7 @@ void QNetworkAccessManagerPrivate::addCredentials(const QNetworkProxy &p, } QNetworkAuthenticationCredential * -QNetworkAccessManagerPrivate::fetchCachedCredentials(const QNetworkProxy &p, +QNetworkAccessManagerPrivate::fetchCachedProxyCredentials(const QNetworkProxy &p, const QAuthenticator *authenticator) { QNetworkProxy proxy = p; @@ -1241,7 +1241,7 @@ QList QNetworkAccessManagerPrivate::queryProxy(const QNetworkProx } #endif -void QNetworkAccessManagerPrivate::addCredentials(const QUrl &url, +void QNetworkAccessManagerPrivate::cacheCredentials(const QUrl &url, const QAuthenticator *authenticator) { Q_ASSERT(authenticator); diff --git a/src/network/access/qnetworkaccessmanager_p.h b/src/network/access/qnetworkaccessmanager_p.h index 695842c..2c6ee10 100644 --- a/src/network/access/qnetworkaccessmanager_p.h +++ b/src/network/access/qnetworkaccessmanager_p.h @@ -91,15 +91,15 @@ public: void createCookieJar() const; void authenticationRequired(QNetworkAccessBackend *backend, QAuthenticator *authenticator); - void addCredentials(const QUrl &url, const QAuthenticator *auth); + void cacheCredentials(const QUrl &url, const QAuthenticator *auth); QNetworkAuthenticationCredential *fetchCachedCredentials(const QUrl &url, const QAuthenticator *auth = 0); #ifndef QT_NO_NETWORKPROXY void proxyAuthenticationRequired(QNetworkAccessBackend *backend, const QNetworkProxy &proxy, QAuthenticator *authenticator); - void addCredentials(const QNetworkProxy &proxy, const QAuthenticator *auth); - QNetworkAuthenticationCredential *fetchCachedCredentials(const QNetworkProxy &proxy, + void cacheProxyCredentials(const QNetworkProxy &proxy, const QAuthenticator *auth); + QNetworkAuthenticationCredential *fetchCachedProxyCredentials(const QNetworkProxy &proxy, const QAuthenticator *auth = 0); QList queryProxy(const QNetworkProxyQuery &query); #endif -- cgit v0.12 From 6765569901a12fc70be2c1921d79b377898df9ae Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 26 Oct 2010 14:19:18 +0200 Subject: QNAM HTTP: Remove Wait4AuthState Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 5 ----- src/network/access/qhttpnetworkconnectionchannel.cpp | 1 - src/network/access/qhttpnetworkconnectionchannel_p.h | 3 +-- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index b7380b5..1166a9a 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -381,11 +381,6 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket emit channels[i].reply->finished(); // ### at this point the reply could be deleted socket->close(); - // remove pending request on the other channels - for (int j = 0; j < channelCount; ++j) { - if (j != i && channels[j].state == QHttpNetworkConnectionChannel::Wait4AuthState) - channels[j].state = QHttpNetworkConnectionChannel::IdleState; - } return true; } //resend the request diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 58e2b2f..329b0b2 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -310,7 +310,6 @@ bool QHttpNetworkConnectionChannel::sendRequest() break; } case QHttpNetworkConnectionChannel::ReadingState: - case QHttpNetworkConnectionChannel::Wait4AuthState: // ignore _q_bytesWritten in these states // fall through default: diff --git a/src/network/access/qhttpnetworkconnectionchannel_p.h b/src/network/access/qhttpnetworkconnectionchannel_p.h index 2b1be2c..442086a 100644 --- a/src/network/access/qhttpnetworkconnectionchannel_p.h +++ b/src/network/access/qhttpnetworkconnectionchannel_p.h @@ -95,8 +95,7 @@ public: WritingState = 2, // writing the data WaitingState = 4, // waiting for reply ReadingState = 8, // reading the reply - Wait4AuthState = 0x10, // blocked for send till the current authentication slot is done - BusyState = (ConnectingState|WritingState|WaitingState|ReadingState|Wait4AuthState) + BusyState = (ConnectingState|WritingState|WaitingState|ReadingState) }; QAbstractSocket *socket; ChannelState state; -- cgit v0.12 From 300523dfba881e5464da24cf6106890f3c803cd0 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 26 Oct 2010 15:29:44 +0200 Subject: QNAM HTTP: Use sslErrors() from QHttpNetworkReply Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection_p.h | 3 --- src/network/access/qhttpnetworkconnectionchannel.cpp | 2 +- src/network/access/qhttpnetworkreply.cpp | 5 +++++ src/network/access/qhttpnetworkreply_p.h | 2 ++ src/network/access/qnetworkaccesshttpbackend.cpp | 6 ++---- .../auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp | 10 ++++++---- 6 files changed, 16 insertions(+), 12 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 875c978..e20c795 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -120,9 +120,6 @@ public: void setSslConfiguration(const QSslConfiguration &config); void ignoreSslErrors(int channel = -1); void ignoreSslErrors(const QList &errors, int channel = -1); - -Q_SIGNALS: - void sslErrors(const QList &errors); #endif Q_SIGNALS: diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 329b0b2..9c504ba 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -1037,7 +1037,7 @@ void QHttpNetworkConnectionChannel::_q_sslErrors(const QList &errors) // Also pause the connection because socket notifiers may fire while an user // dialog is displaying connection->d_func()->pauseConnection(); - emit connection->sslErrors(errors); + emit reply->sslErrors(errors); connection->d_func()->resumeConnection(); } diff --git a/src/network/access/qhttpnetworkreply.cpp b/src/network/access/qhttpnetworkreply.cpp index 108ba8a..e4eb7c4 100644 --- a/src/network/access/qhttpnetworkreply.cpp +++ b/src/network/access/qhttpnetworkreply.cpp @@ -205,6 +205,11 @@ bool QHttpNetworkReply::isPipeliningUsed() const return d_func()->pipeliningUsed; } +QHttpNetworkConnection* QHttpNetworkReply::connection() +{ + return d_func()->connection; +} + QHttpNetworkReplyPrivate::QHttpNetworkReplyPrivate(const QUrl &newUrl) : QHttpNetworkHeaderPrivate(newUrl), state(NothingDoneState), statusCode(100), diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 4011c78..7cfd8b2 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -132,6 +132,8 @@ public: bool isPipeliningUsed() const; + QHttpNetworkConnection* connection(); + #ifndef QT_NO_OPENSSL QSslConfiguration sslConfiguration() const; void setSslConfiguration(const QSslConfiguration &config); diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index 2af4987..c425600 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -350,10 +350,6 @@ void QNetworkAccessHttpBackend::setupConnection() SLOT(httpCacheCredentials(QHttpNetworkRequest,QAuthenticator*))); connect(http, SIGNAL(error(QNetworkReply::NetworkError,QString)), SLOT(httpError(QNetworkReply::NetworkError,QString))); -#ifndef QT_NO_OPENSSL - connect(http, SIGNAL(sslErrors(QList)), - SLOT(sslErrors(QList))); -#endif } /* @@ -593,6 +589,8 @@ void QNetworkAccessHttpBackend::postRequest() if (pendingIgnoreAllSslErrors) httpReply->ignoreSslErrors(); httpReply->ignoreSslErrors(pendingIgnoreSslErrorsList); + connect(httpReply, SIGNAL(sslErrors(QList)), + SLOT(sslErrors(QList))); #endif connect(httpReply, SIGNAL(readyRead()), SLOT(replyReadyRead())); diff --git a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp index c0f503b..ecfd462 100644 --- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp +++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp @@ -668,8 +668,10 @@ void tst_QHttpNetworkConnection::sslErrors(const QList &errors) { Q_UNUSED(errors) - QHttpNetworkConnection *connection = qobject_cast(sender()); - if (connection) { + QHttpNetworkReply *reply = qobject_cast(sender()); + if (reply) { + QHttpNetworkConnection *connection = reply->connection(); + QVariant val = connection->property("ignoreFromSignal"); if (val.toBool()) connection->ignoreSslErrors(); @@ -716,12 +718,12 @@ void tst_QHttpNetworkConnection::ignoresslerror() if (ignoreInit) connection.ignoreSslErrors(); QCOMPARE(connection.isEncrypted(), encrypt); - connect(&connection, SIGNAL(sslErrors(const QList&)), - SLOT(sslErrors(const QList&))); connection.setProperty("ignoreFromSignal", ignoreFromSignal); QHttpNetworkRequest request(protocol + host + path); QHttpNetworkReply *reply = connection.sendRequest(request); + connect(reply, SIGNAL(sslErrors(const QList&)), + SLOT(sslErrors(const QList&))); finishedWithErrorCalled = false; -- cgit v0.12 From 3b87e4639edb2c7050c5ae74fa8280fd120b8de1 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 26 Oct 2010 15:35:10 +0200 Subject: QNAM HTTP: Move cacheCredentials() to QHttpNetworkReply Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection_p.h | 2 -- src/network/access/qhttpnetworkconnectionchannel.cpp | 2 +- src/network/access/qhttpnetworkreply_p.h | 1 + src/network/access/qnetworkaccesshttpbackend.cpp | 4 ++-- 4 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index e20c795..f8c4bb4 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -130,8 +130,6 @@ Q_SIGNALS: #endif void authenticationRequired(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *authenticator, const QHttpNetworkConnection *connection = 0); - void cacheCredentials(const QHttpNetworkRequest &request, QAuthenticator *authenticator, - const QHttpNetworkConnection *connection = 0); void error(QNetworkReply::NetworkError errorCode, const QString &detail = QString()); private: diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 9c504ba..52a8e72 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -190,7 +190,7 @@ bool QHttpNetworkConnectionChannel::sendRequest() || (!url.password().isEmpty() && url.password() != auth.password())) { auth.setUser(url.userName()); auth.setPassword(url.password()); - emit connection->cacheCredentials(request, &auth, connection); + emit reply->cacheCredentials(request, &auth); connection->d_func()->copyCredentials(connection->d_func()->indexOf(socket), &auth, false); } // clear the userinfo, since we use the same request for resending diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 7cfd8b2..79966fd 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -151,6 +151,7 @@ Q_SIGNALS: void headerChanged(); void dataReadProgress(int done, int total); void dataSendProgress(qint64 done, qint64 total); + void cacheCredentials(const QHttpNetworkRequest &request, QAuthenticator *authenticator); private: Q_DECLARE_PRIVATE(QHttpNetworkReply) diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index c425600..3bad2fe 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -346,8 +346,6 @@ void QNetworkAccessHttpBackend::setupConnection() #endif connect(http, SIGNAL(authenticationRequired(const QHttpNetworkReply*, QHttpNetworkRequest,QAuthenticator*,const QHttpNetworkConnection*)), SLOT(httpAuthenticationRequired(const QHttpNetworkReply*, QHttpNetworkRequest,QAuthenticator*))); - connect(http, SIGNAL(cacheCredentials(QHttpNetworkRequest,QAuthenticator*)), - SLOT(httpCacheCredentials(QHttpNetworkRequest,QAuthenticator*))); connect(http, SIGNAL(error(QNetworkReply::NetworkError,QString)), SLOT(httpError(QNetworkReply::NetworkError,QString))); } @@ -598,6 +596,8 @@ void QNetworkAccessHttpBackend::postRequest() connect(httpReply, SIGNAL(finishedWithError(QNetworkReply::NetworkError,QString)), SLOT(httpError(QNetworkReply::NetworkError,QString))); connect(httpReply, SIGNAL(headerChanged()), SLOT(replyHeaderChanged())); + connect(httpReply, SIGNAL(cacheCredentials(QHttpNetworkRequest,QAuthenticator*)), + SLOT(httpCacheCredentials(QHttpNetworkRequest,QAuthenticator*))); } void QNetworkAccessHttpBackend::invalidateCache() -- cgit v0.12 From fb404765a5af559598dc5b3906e45d8c5e48884b Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 26 Oct 2010 15:48:42 +0200 Subject: QNAM HTTP: Move proxyAuthenticationRequired() to QHttpNetworkReply Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 5 ++--- src/network/access/qhttpnetworkconnection_p.h | 5 ----- src/network/access/qhttpnetworkreply_p.h | 4 +++- src/network/access/qnetworkaccesshttpbackend.cpp | 8 ++++---- 4 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 1166a9a..f266322 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -354,7 +354,7 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket emit q->authenticationRequired(reply, reply->request(), auth, q); #ifndef QT_NO_NETWORKPROXY } else { - emit q->proxyAuthenticationRequired(networkProxy, auth, q); + emit reply->proxyAuthenticationRequired(networkProxy, auth); #endif } resumeConnection(); @@ -963,11 +963,10 @@ void QHttpNetworkConnection::ignoreSslErrors(const QList &errors, int // e.g. it is for SOCKS proxies which require authentication. void QHttpNetworkConnectionPrivate::emitProxyAuthenticationRequired(const QHttpNetworkConnectionChannel *chan, const QNetworkProxy &proxy, QAuthenticator* auth) { - Q_Q(QHttpNetworkConnection); // Also pause the connection because socket notifiers may fire while an user // dialog is displaying pauseConnection(); - emit q->proxyAuthenticationRequired(proxy, auth, q); + emit chan->reply->proxyAuthenticationRequired(proxy, auth); resumeConnection(); int i = indexOf(chan->socket); copyCredentials(i, auth, true); diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index f8c4bb4..af33bf9 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -123,11 +123,6 @@ public: #endif Q_SIGNALS: -#ifndef QT_NO_NETWORKPROXY - //cannot be used with queued connection. - void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator, - const QHttpNetworkConnection *connection = 0); -#endif void authenticationRequired(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *authenticator, const QHttpNetworkConnection *connection = 0); void error(QNetworkReply::NetworkError errorCode, const QString &detail = QString()); diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index 79966fd..b4a14f9 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -152,7 +152,9 @@ Q_SIGNALS: void dataReadProgress(int done, int total); void dataSendProgress(qint64 done, qint64 total); void cacheCredentials(const QHttpNetworkRequest &request, QAuthenticator *authenticator); - +#ifndef QT_NO_NETWORKPROXY + void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); +#endif private: Q_DECLARE_PRIVATE(QHttpNetworkReply) friend class QHttpNetworkConnection; diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index 3bad2fe..3611e77 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -340,10 +340,6 @@ void QNetworkAccessHttpBackend::finished() void QNetworkAccessHttpBackend::setupConnection() { -#ifndef QT_NO_NETWORKPROXY - connect(http, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), - SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); -#endif connect(http, SIGNAL(authenticationRequired(const QHttpNetworkReply*, QHttpNetworkRequest,QAuthenticator*,const QHttpNetworkConnection*)), SLOT(httpAuthenticationRequired(const QHttpNetworkReply*, QHttpNetworkRequest,QAuthenticator*))); connect(http, SIGNAL(error(QNetworkReply::NetworkError,QString)), @@ -598,6 +594,10 @@ void QNetworkAccessHttpBackend::postRequest() connect(httpReply, SIGNAL(headerChanged()), SLOT(replyHeaderChanged())); connect(httpReply, SIGNAL(cacheCredentials(QHttpNetworkRequest,QAuthenticator*)), SLOT(httpCacheCredentials(QHttpNetworkRequest,QAuthenticator*))); +#ifndef QT_NO_NETWORKPROXY + connect(httpReply, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), + SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); +#endif } void QNetworkAccessHttpBackend::invalidateCache() -- cgit v0.12 From 3d7e7b4595059c69428022e52b63b10edbe81b0f Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 26 Oct 2010 17:47:43 +0200 Subject: QNAM HTTP: Move authenticationRequired() to QHttpNetworkReply Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 2 +- src/network/access/qhttpnetworkconnection_p.h | 2 -- src/network/access/qhttpnetworkreply_p.h | 1 + src/network/access/qnetworkaccesshttpbackend.cpp | 11 ++++------- src/network/access/qnetworkaccesshttpbackend_p.h | 2 +- .../tst_qhttpnetworkconnection.cpp | 18 +++++++++--------- 6 files changed, 16 insertions(+), 20 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index f266322..1afca0b 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -351,7 +351,7 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket if (priv->phase == QAuthenticatorPrivate::Done) { pauseConnection(); if (!isProxy) { - emit q->authenticationRequired(reply, reply->request(), auth, q); + emit reply->authenticationRequired(reply->request(), auth); #ifndef QT_NO_NETWORKPROXY } else { emit reply->proxyAuthenticationRequired(networkProxy, auth); diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index af33bf9..8d18a7c 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -123,8 +123,6 @@ public: #endif Q_SIGNALS: - void authenticationRequired(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *authenticator, - const QHttpNetworkConnection *connection = 0); void error(QNetworkReply::NetworkError errorCode, const QString &detail = QString()); private: diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h index b4a14f9..3f79d81 100644 --- a/src/network/access/qhttpnetworkreply_p.h +++ b/src/network/access/qhttpnetworkreply_p.h @@ -155,6 +155,7 @@ Q_SIGNALS: #ifndef QT_NO_NETWORKPROXY void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator); #endif + void authenticationRequired(const QHttpNetworkRequest &request, QAuthenticator *authenticator); private: Q_DECLARE_PRIVATE(QHttpNetworkReply) friend class QHttpNetworkConnection; diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index 3611e77..3a854fe 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -340,8 +340,6 @@ void QNetworkAccessHttpBackend::finished() void QNetworkAccessHttpBackend::setupConnection() { - connect(http, SIGNAL(authenticationRequired(const QHttpNetworkReply*, QHttpNetworkRequest,QAuthenticator*,const QHttpNetworkConnection*)), - SLOT(httpAuthenticationRequired(const QHttpNetworkReply*, QHttpNetworkRequest,QAuthenticator*))); connect(http, SIGNAL(error(QNetworkReply::NetworkError,QString)), SLOT(httpError(QNetworkReply::NetworkError,QString))); } @@ -598,6 +596,8 @@ void QNetworkAccessHttpBackend::postRequest() connect(httpReply, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)), SLOT(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*))); #endif + connect(httpReply, SIGNAL(authenticationRequired(const QHttpNetworkRequest,QAuthenticator*)), + SLOT(httpAuthenticationRequired(const QHttpNetworkRequest,QAuthenticator*))); } void QNetworkAccessHttpBackend::invalidateCache() @@ -860,13 +860,10 @@ void QNetworkAccessHttpBackend::replyHeaderChanged() metaDataChanged(); } -void QNetworkAccessHttpBackend::httpAuthenticationRequired(const QHttpNetworkReply *reply, - const QHttpNetworkRequest &, +void QNetworkAccessHttpBackend::httpAuthenticationRequired(const QHttpNetworkRequest &, QAuthenticator *auth) { - // Only process this signal when it is for the QHttpNetworkReply that we actually have - if (reply == this->httpReply) - authenticationRequired(auth); + authenticationRequired(auth); } void QNetworkAccessHttpBackend::httpCacheCredentials(const QHttpNetworkRequest &, diff --git a/src/network/access/qnetworkaccesshttpbackend_p.h b/src/network/access/qnetworkaccesshttpbackend_p.h index f06f364..c4c88ae 100644 --- a/src/network/access/qnetworkaccesshttpbackend_p.h +++ b/src/network/access/qnetworkaccesshttpbackend_p.h @@ -104,7 +104,7 @@ private slots: void replyReadyRead(); void replyFinished(); void replyHeaderChanged(); - void httpAuthenticationRequired(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *auth); + void httpAuthenticationRequired(const QHttpNetworkRequest &request, QAuthenticator *auth); void httpCacheCredentials(const QHttpNetworkRequest &request, QAuthenticator *auth); void httpError(QNetworkReply::NetworkError error, const QString &errorString); bool sendCacheContents(const QNetworkCacheMetaData &metaData); diff --git a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp index ecfd462..0956b57 100644 --- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp +++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp @@ -57,7 +57,7 @@ public: public Q_SLOTS: void finishedReply(); void finishedWithError(QNetworkReply::NetworkError errorCode, const QString &detail); - void challenge401(const QHttpNetworkReply*, const QHttpNetworkRequest &request, QAuthenticator *authenticator, const QHttpNetworkConnection *connection); + void challenge401(const QHttpNetworkRequest &request, QAuthenticator *authenticator); #ifndef QT_NO_OPENSSL void sslErrors(const QList &errors); #endif @@ -495,15 +495,15 @@ void tst_QHttpNetworkConnection::_connect() QVERIFY(false); } -void tst_QHttpNetworkConnection::challenge401(const QHttpNetworkReply*, const QHttpNetworkRequest &request, - QAuthenticator *authenticator, - const QHttpNetworkConnection *connection) +void tst_QHttpNetworkConnection::challenge401(const QHttpNetworkRequest &request, + QAuthenticator *authenticator) { Q_UNUSED(request) - Q_UNUSED(connection) - QHttpNetworkConnection *c = qobject_cast(sender()); - if (connection) { + QHttpNetworkReply *reply = qobject_cast(sender()); + if (reply) { + QHttpNetworkConnection *c = reply->connection(); + QVariant val = c->property("setCredentials"); if (val.toBool()) { QVariant user = c->property("username"); @@ -552,14 +552,14 @@ void tst_QHttpNetworkConnection::get401() if (encrypt) connection.enableEncryption(); QCOMPARE(connection.isEncrypted(), encrypt); - connect(&connection, SIGNAL(authenticationRequired(const QHttpNetworkReply*, const QHttpNetworkRequest&, QAuthenticator *, const QHttpNetworkConnection*)), - SLOT(challenge401(const QHttpNetworkReply*, const QHttpNetworkRequest&, QAuthenticator *, const QHttpNetworkConnection*))); connection.setProperty("setCredentials", setCredentials); connection.setProperty("username", username); connection.setProperty("password", password); QHttpNetworkRequest request(protocol + host + path); QHttpNetworkReply *reply = connection.sendRequest(request); + connect(reply, SIGNAL(authenticationRequired(const QHttpNetworkRequest&, QAuthenticator *)), + SLOT(challenge401(const QHttpNetworkRequest&, QAuthenticator *))); finishedCalled = false; finishedWithErrorCalled = false; -- cgit v0.12 From a754c657db2d812911f278299c64001f37c2aae8 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 26 Oct 2010 17:53:43 +0200 Subject: QNAM HTTP: Remove unused code Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 15 --------------- src/network/access/qhttpnetworkconnection_p.h | 4 ---- src/network/access/qnetworkaccesshttpbackend.cpp | 23 ----------------------- 3 files changed, 42 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 1afca0b..bf02543 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -856,21 +856,6 @@ bool QHttpNetworkConnection::isEncrypted() const return d->encrypt; } -void QHttpNetworkConnection::setProxyAuthentication(QAuthenticator *authenticator) -{ - Q_D(QHttpNetworkConnection); - for (int i = 0; i < d->channelCount; ++i) - d->channels[i].proxyAuthenticator = *authenticator; -} - -void QHttpNetworkConnection::setAuthentication(const QString &domain, QAuthenticator *authenticator) -{ - Q_UNUSED(domain); // ### domain ? - Q_D(QHttpNetworkConnection); - for (int i = 0; i < d->channelCount; ++i) - d->channels[i].authenticator = *authenticator; -} - #ifndef QT_NO_NETWORKPROXY void QHttpNetworkConnection::setCacheProxy(const QNetworkProxy &networkProxy) { diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 8d18a7c..f55937d 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -112,10 +112,6 @@ public: void enableEncryption(); bool isEncrypted() const; - //authentication parameters - void setProxyAuthentication(QAuthenticator *authenticator); - void setAuthentication(const QString &domain, QAuthenticator *authenticator); - #ifndef QT_NO_OPENSSL void setSslConfiguration(const QSslConfiguration &config); void ignoreSslErrors(int channel = -1); diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index 3a854fe..ec10d34 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -878,29 +878,6 @@ void QNetworkAccessHttpBackend::httpError(QNetworkReply::NetworkError errorCode, #if defined(QNETWORKACCESSHTTPBACKEND_DEBUG) qDebug() << "http error!" << errorCode << errorString; #endif -#if 0 - static const QNetworkReply::NetworkError conversionTable[] = { - QNetworkReply::ConnectionRefusedError, - QNetworkReply::RemoteHostClosedError, - QNetworkReply::HostNotFoundError, - QNetworkReply::UnknownNetworkError, // SocketAccessError - QNetworkReply::UnknownNetworkError, // SocketResourceError - QNetworkReply::TimeoutError, // SocketTimeoutError - QNetworkReply::UnknownNetworkError, // DatagramTooLargeError - QNetworkReply::UnknownNetworkError, // NetworkError - QNetworkReply::UnknownNetworkError, // AddressInUseError - QNetworkReply::UnknownNetworkError, // SocketAddressNotAvailableError - QNetworkReply::UnknownNetworkError, // UnsupportedSocketOperationError - QNetworkReply::UnknownNetworkError, // UnfinishedSocketOperationError - QNetworkReply::ProxyAuthenticationRequiredError - }; - QNetworkReply::NetworkError code; - if (int(errorCode) >= 0 && - uint(errorCode) < (sizeof conversionTable / sizeof conversionTable[0])) - code = conversionTable[errorCode]; - else - code = QNetworkReply::UnknownNetworkError; -#endif error(errorCode, errorString); finished(); } -- cgit v0.12 From be18016694c57fef508aa4715f5b8f9bbf21e5ac Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Tue, 26 Oct 2010 18:02:10 +0200 Subject: QNAM HTTP: Remove enableEncryption() Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 6 ----- src/network/access/qhttpnetworkconnection_p.h | 2 -- .../tst_qhttpnetworkconnection.cpp | 26 +++++----------------- 3 files changed, 5 insertions(+), 29 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index bf02543..3acaaff 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -844,12 +844,6 @@ QHttpNetworkReply* QHttpNetworkConnection::sendRequest(const QHttpNetworkRequest return d->queueRequest(request); } -void QHttpNetworkConnection::enableEncryption() -{ - Q_D(QHttpNetworkConnection); - d->encrypt = true; -} - bool QHttpNetworkConnection::isEncrypted() const { Q_D(const QHttpNetworkConnection); diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index f55937d..5d5caa6 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -108,8 +108,6 @@ public: QNetworkProxy transparentProxy() const; #endif - //enable encryption - void enableEncryption(); bool isEncrypted() const; #ifndef QT_NO_OPENSSL diff --git a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp index 0956b57..29fe2fb 100644 --- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp +++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp @@ -175,11 +175,9 @@ void tst_QHttpNetworkConnection::head() QFETCH(QString, statusString); QFETCH(int, contentLength); - QHttpNetworkConnection connection(host); + QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - if (encrypt) - connection.enableEncryption(); QCOMPARE(connection.isEncrypted(), encrypt); QHttpNetworkRequest request(protocol + host + path, QHttpNetworkRequest::Head); @@ -235,11 +233,9 @@ void tst_QHttpNetworkConnection::get() QFETCH(int, contentLength); QFETCH(int, downloadSize); - QHttpNetworkConnection connection(host); + QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - if (encrypt) - connection.enableEncryption(); QCOMPARE(connection.isEncrypted(), encrypt); QHttpNetworkRequest request(protocol + host + path); @@ -315,11 +311,9 @@ void tst_QHttpNetworkConnection::put() QFETCH(QString, data); QFETCH(bool, succeed); - QHttpNetworkConnection connection(host); + QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - if (encrypt) - connection.enableEncryption(); QCOMPARE(connection.isEncrypted(), encrypt); QHttpNetworkRequest request(protocol + host + path, QHttpNetworkRequest::Put); @@ -407,11 +401,9 @@ void tst_QHttpNetworkConnection::post() QFETCH(int, contentLength); QFETCH(int, downloadSize); - QHttpNetworkConnection connection(host); + QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - if (encrypt) - connection.enableEncryption(); QCOMPARE(connection.isEncrypted(), encrypt); QHttpNetworkRequest request(protocol + host + path, QHttpNetworkRequest::Post); @@ -549,8 +541,6 @@ void tst_QHttpNetworkConnection::get401() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - if (encrypt) - connection.enableEncryption(); QCOMPARE(connection.isEncrypted(), encrypt); connection.setProperty("setCredentials", setCredentials); connection.setProperty("username", username); @@ -618,11 +608,9 @@ void tst_QHttpNetworkConnection::compression() QFETCH(bool, autoCompress); QFETCH(QString, contentCoding); - QHttpNetworkConnection connection(host); + QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - if (encrypt) - connection.enableEncryption(); QCOMPARE(connection.isEncrypted(), encrypt); QHttpNetworkRequest request(protocol + host + path); @@ -713,8 +701,6 @@ void tst_QHttpNetworkConnection::ignoresslerror() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - if (encrypt) - connection.enableEncryption(); if (ignoreInit) connection.ignoreSslErrors(); QCOMPARE(connection.isEncrypted(), encrypt); @@ -771,8 +757,6 @@ void tst_QHttpNetworkConnection::nossl() QHttpNetworkConnection connection(host, port, encrypt); QCOMPARE(connection.port(), port); QCOMPARE(connection.hostName(), host); - if (encrypt) - connection.enableEncryption(); QHttpNetworkRequest request(protocol + host + path); QHttpNetworkReply *reply = connection.sendRequest(request); -- cgit v0.12 From b5d9dbf28b78aa17bfb70aa2e5fd3da99fe53ff0 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Wed, 27 Oct 2010 14:06:28 +0200 Subject: QNAM HTTP: Remove the error() of QHttpNetworkConnection Removed the distinction between reply error and connection error. The QNetworkAccessManager was treating them the same way anyway. Reviewed-by: Prasanth Task-Number: QTBUG-13234 --- src/network/access/qhttpnetworkconnection.cpp | 3 +-- src/network/access/qhttpnetworkconnection_p.h | 3 --- .../access/qhttpnetworkconnectionchannel.cpp | 24 ++++++++-------------- src/network/access/qnetworkaccesshttpbackend.cpp | 7 ------- src/network/access/qnetworkaccesshttpbackend_p.h | 1 - .../tst_qhttpnetworkconnection.cpp | 2 -- 6 files changed, 9 insertions(+), 31 deletions(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 3acaaff..92f8af7 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -377,8 +377,7 @@ bool QHttpNetworkConnectionPrivate::handleAuthenticateChallenge(QAbstractSocket ? QNetworkReply::ProxyAuthenticationRequiredError : QNetworkReply::AuthenticationRequiredError; reply->d_func()->errorString = errorDetail(errorCode, socket); - emit q->error(errorCode, reply->d_func()->errorString); - emit channels[i].reply->finished(); + emit reply->finishedWithError(errorCode, reply->d_func()->errorString); // ### at this point the reply could be deleted socket->close(); return true; diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h index 5d5caa6..8461426c 100644 --- a/src/network/access/qhttpnetworkconnection_p.h +++ b/src/network/access/qhttpnetworkconnection_p.h @@ -116,9 +116,6 @@ public: void ignoreSslErrors(const QList &errors, int channel = -1); #endif -Q_SIGNALS: - void error(QNetworkReply::NetworkError errorCode, const QString &detail = QString()); - private: Q_DECLARE_PRIVATE(QHttpNetworkConnection) Q_DISABLE_COPY(QHttpNetworkConnection) diff --git a/src/network/access/qhttpnetworkconnectionchannel.cpp b/src/network/access/qhttpnetworkconnectionchannel.cpp index 52a8e72..4e5de53 100644 --- a/src/network/access/qhttpnetworkconnectionchannel.cpp +++ b/src/network/access/qhttpnetworkconnectionchannel.cpp @@ -797,8 +797,7 @@ void QHttpNetworkConnectionChannel::handleStatus() ? QNetworkReply::ProxyAuthenticationRequiredError : QNetworkReply::AuthenticationRequiredError; reply->d_func()->errorString = connection->d_func()->errorDetail(errorCode, socket); - emit connection->error(errorCode, reply->d_func()->errorString); - emit reply->finished(); + emit reply->finishedWithError(errorCode, reply->d_func()->errorString); } break; default: @@ -945,7 +944,6 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket { if (!socket) return; - bool send2Reply = false; QNetworkReply::NetworkError errorCode = QNetworkReply::UnknownNetworkError; switch (socketError) { @@ -963,7 +961,6 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket closeAndResendCurrentRequest(); return; } else { - send2Reply = true; errorCode = QNetworkReply::RemoteHostClosedError; } } else { @@ -976,7 +973,6 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket closeAndResendCurrentRequest(); return; } - send2Reply = true; errorCode = QNetworkReply::TimeoutError; break; case QAbstractSocket::ProxyAuthenticationRequiredError: @@ -992,18 +988,14 @@ void QHttpNetworkConnectionChannel::_q_error(QAbstractSocket::SocketError socket } QPointer that = connection; QString errorString = connection->d_func()->errorDetail(errorCode, socket, socket->errorString()); - if (send2Reply) { - if (reply) { - reply->d_func()->errorString = errorString; - // this error matters only to this reply - emit reply->finishedWithError(errorCode, errorString); - } - // send the next request - QMetaObject::invokeMethod(that, "_q_startNextRequest", Qt::QueuedConnection); - } else { - // the failure affects all requests. - emit connection->error(errorCode, errorString); + + if (reply) { + reply->d_func()->errorString = errorString; + emit reply->finishedWithError(errorCode, errorString); } + // send the next request + QMetaObject::invokeMethod(that, "_q_startNextRequest", Qt::QueuedConnection); + if (that) //signal emission triggered event loop close(); } diff --git a/src/network/access/qnetworkaccesshttpbackend.cpp b/src/network/access/qnetworkaccesshttpbackend.cpp index ec10d34..2a0daf8 100644 --- a/src/network/access/qnetworkaccesshttpbackend.cpp +++ b/src/network/access/qnetworkaccesshttpbackend.cpp @@ -338,12 +338,6 @@ void QNetworkAccessHttpBackend::finished() QNetworkAccessBackend::finished(); } -void QNetworkAccessHttpBackend::setupConnection() -{ - connect(http, SIGNAL(error(QNetworkReply::NetworkError,QString)), - SLOT(httpError(QNetworkReply::NetworkError,QString))); -} - /* For a given httpRequest 1) If AlwaysNetwork, return @@ -672,7 +666,6 @@ void QNetworkAccessHttpBackend::open() cache->addEntry(cacheKey, http); } - setupConnection(); postRequest(); } diff --git a/src/network/access/qnetworkaccesshttpbackend_p.h b/src/network/access/qnetworkaccesshttpbackend_p.h index c4c88ae..568b2ee 100644 --- a/src/network/access/qnetworkaccesshttpbackend_p.h +++ b/src/network/access/qnetworkaccesshttpbackend_p.h @@ -125,7 +125,6 @@ private: quint64 resumeOffset; void disconnectFromHttp(); - void setupConnection(); void validateCache(QHttpNetworkRequest &httpRequest, bool &loadedFromCache); void invalidateCache(); void postRequest(); diff --git a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp index 29fe2fb..4a32a5a 100644 --- a/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp +++ b/tests/auto/qhttpnetworkconnection/tst_qhttpnetworkconnection.cpp @@ -330,8 +330,6 @@ void tst_QHttpNetworkConnection::put() connect(reply, SIGNAL(finished()), SLOT(finishedReply())); connect(reply, SIGNAL(finishedWithError(QNetworkReply::NetworkError, const QString &)), SLOT(finishedWithError(QNetworkReply::NetworkError, const QString &))); - connect(&connection, SIGNAL(error(QNetworkReply::NetworkError, const QString &)), - SLOT(finishedWithError(QNetworkReply::NetworkError, const QString &))); QTime stopWatch; stopWatch.start(); -- cgit v0.12 From f964de82d506a379b9d80b18025491aa3521a2c9 Mon Sep 17 00:00:00 2001 From: Peter Hartmann Date: Wed, 27 Oct 2010 17:14:03 +0200 Subject: QNAM: fix build * winsock2.h conflicts with qplatformdefs.h * ifndef QT_NO_OPENSSL was missing Reviewed-by: Prasanth Reviewed-by: Markus Goetz --- src/network/access/qhttpnetworkconnection.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index 92f8af7..c335cd4 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -39,13 +39,13 @@ ** ****************************************************************************/ +#include #include "qhttpnetworkconnection_p.h" #include "qhttpnetworkconnectionchannel_p.h" #include "private/qnoncontiguousbytedevice_p.h" #include #include #include -#include #include #include @@ -129,9 +129,11 @@ void QHttpNetworkConnectionPrivate::pauseConnection() // Disable all socket notifiers for (int i = 0; i < channelCount; i++) { +#ifndef QT_NO_OPENSSL if (encrypt) QSslSocketPrivate::pauseSocketNotifiers(static_cast(channels[i].socket)); else +#endif QAbstractSocketPrivate::pauseSocketNotifiers(channels[i].socket); } } @@ -141,9 +143,11 @@ void QHttpNetworkConnectionPrivate::resumeConnection() state = RunningState; // Enable all socket notifiers for (int i = 0; i < channelCount; i++) { +#ifndef QT_NO_OPENSSL if (encrypt) QSslSocketPrivate::resumeSocketNotifiers(static_cast(channels[i].socket)); else +#endif QAbstractSocketPrivate::resumeSocketNotifiers(channels[i].socket); // Resume pending upload if needed -- cgit v0.12 From c0330e4fdad175fa66c7bc2cf9afe0ca901857a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 28 Oct 2010 07:32:21 +0200 Subject: Compile fix for RVCT 4 --- src/gui/image/qpixmap_blitter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 01a86f9..f47b601 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -63,8 +63,8 @@ void QBlittablePixmapData::resize(int width, int height) h = height; is_null = (w <= 0 || h <= 0); } -extern int qt_defaultDpiX(); -extern int qt_defaultDpiY(); +Q_DECL_IMPORT extern int qt_defaultDpiX(); +Q_DECL_IMPORT extern int qt_defaultDpiY(); int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const { -- cgit v0.12 From 915c4d27a35d008d57a729d41543b1cfa033fcd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 28 Oct 2010 07:49:12 +0200 Subject: Fix qt_defaultDpi, but not use Q_DECL_IMPORT but Q_GUI_EXPORT --- src/gui/image/qpixmap_blitter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index f47b601..12455b1 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -63,8 +63,8 @@ void QBlittablePixmapData::resize(int width, int height) h = height; is_null = (w <= 0 || h <= 0); } -Q_DECL_IMPORT extern int qt_defaultDpiX(); -Q_DECL_IMPORT extern int qt_defaultDpiY(); +Q_GUI_EXPORT extern int qt_defaultDpiX(); +Q_GUI_EXPORT extern int qt_defaultDpiY(); int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const { -- cgit v0.12 From a4fa6efc81d65039c556c1c0147f8c9300b43c4e Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Wed, 27 Oct 2010 14:40:37 +1000 Subject: Export private QtDeclarative classes needed by Qt3d on Symbian Task-number: QTBUG-14789 Reviewed-by: Rhys Weatherley * QDeclarativeState * QDeclarativeStateGroup * QDeclarativeStateOperation * QDeclarativeTransition --- src/declarative/util/qdeclarativestate_p.h | 4 +- src/declarative/util/qdeclarativestategroup_p.h | 2 +- src/declarative/util/qdeclarativetransition_p.h | 2 +- src/s60installs/bwins/QtDeclarativeu.def | 222 ++++++++++++------------ src/s60installs/eabi/QtDeclarativeu.def | 206 +++++++++++----------- 5 files changed, 218 insertions(+), 218 deletions(-) diff --git a/src/declarative/util/qdeclarativestate_p.h b/src/declarative/util/qdeclarativestate_p.h index d01af4e..fc7c940 100644 --- a/src/declarative/util/qdeclarativestate_p.h +++ b/src/declarative/util/qdeclarativestate_p.h @@ -114,7 +114,7 @@ public: class QDeclarativeStateGroup; class QDeclarativeState; class QDeclarativeStateOperationPrivate; -class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeStateOperation : public QObject +class Q_DECLARATIVE_EXPORT QDeclarativeStateOperation : public QObject { Q_OBJECT public: @@ -139,7 +139,7 @@ typedef QDeclarativeStateOperation::ActionList QDeclarativeStateActions; class QDeclarativeTransition; class QDeclarativeStatePrivate; -class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeState : public QObject +class Q_DECLARATIVE_EXPORT QDeclarativeState : public QObject { Q_OBJECT diff --git a/src/declarative/util/qdeclarativestategroup_p.h b/src/declarative/util/qdeclarativestategroup_p.h index 0222cf2..cac23f4 100644 --- a/src/declarative/util/qdeclarativestategroup_p.h +++ b/src/declarative/util/qdeclarativestategroup_p.h @@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE QT_MODULE(Declarative) class QDeclarativeStateGroupPrivate; -class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeStateGroup : public QObject, public QDeclarativeParserStatus +class Q_DECLARATIVE_EXPORT QDeclarativeStateGroup : public QObject, public QDeclarativeParserStatus { Q_OBJECT Q_INTERFACES(QDeclarativeParserStatus) diff --git a/src/declarative/util/qdeclarativetransition_p.h b/src/declarative/util/qdeclarativetransition_p.h index 5b20cb2..fc7a577 100644 --- a/src/declarative/util/qdeclarativetransition_p.h +++ b/src/declarative/util/qdeclarativetransition_p.h @@ -57,7 +57,7 @@ QT_MODULE(Declarative) class QDeclarativeAbstractAnimation; class QDeclarativeTransitionPrivate; class QDeclarativeTransitionManager; -class Q_DECLARATIVE_PRIVATE_EXPORT QDeclarativeTransition : public QObject +class Q_DECLARATIVE_EXPORT QDeclarativeTransition : public QObject { Q_OBJECT Q_DECLARE_PRIVATE(QDeclarativeTransition) diff --git a/src/s60installs/bwins/QtDeclarativeu.def b/src/s60installs/bwins/QtDeclarativeu.def index 6e27577..db4012c 100644 --- a/src/s60installs/bwins/QtDeclarativeu.def +++ b/src/s60installs/bwins/QtDeclarativeu.def @@ -26,7 +26,7 @@ EXPORTS ?setReadable@QMetaPropertyBuilder@@QAEX_N@Z @ 25 NONAME ABSENT ; void QMetaPropertyBuilder::setReadable(bool) ?d_func@QDeclarativeExpression@@AAEPAVQDeclarativeExpressionPrivate@@XZ @ 26 NONAME ; class QDeclarativeExpressionPrivate * QDeclarativeExpression::d_func(void) ??1QDeclarativeDomValueValueSource@@QAE@XZ @ 27 NONAME ABSENT ; QDeclarativeDomValueValueSource::~QDeclarativeDomValueValueSource(void) - ??_EQDeclarativeStateGroup@@UAE@I@Z @ 28 NONAME ABSENT ; QDeclarativeStateGroup::~QDeclarativeStateGroup(unsigned int) + ??_EQDeclarativeStateGroup@@UAE@I@Z @ 28 NONAME ; QDeclarativeStateGroup::~QDeclarativeStateGroup(unsigned int) ?property@QDeclarativeDomObject@@QBE?AVQDeclarativeDomProperty@@ABVQByteArray@@@Z @ 29 NONAME ABSENT ; class QDeclarativeDomProperty QDeclarativeDomObject::property(class QByteArray const &) const ?tr@QDeclarativeAnchors@@SA?AVQString@@PBD0H@Z @ 30 NONAME ABSENT ; class QString QDeclarativeAnchors::tr(char const *, char const *, int) ?location@QDeclarativeCustomParserNode@@QBE?AULocation@QDeclarativeParser@@XZ @ 31 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserNode::location(void) const @@ -39,7 +39,7 @@ EXPORTS ??0QDeclarativeEngine@@QAE@PAVQObject@@@Z @ 38 NONAME ; QDeclarativeEngine::QDeclarativeEngine(class QObject *) ??0QDeclarativeDebugObjectReference@@QAE@ABV0@@Z @ 39 NONAME ABSENT ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(class QDeclarativeDebugObjectReference const &) ?set@QDeclarativeListModel@@QAEXHABVQScriptValue@@@Z @ 40 NONAME ABSENT ; void QDeclarativeListModel::set(int, class QScriptValue const &) - ?tr@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 41 NONAME ABSENT ; class QString QDeclarativeState::tr(char const *, char const *, int) + ?tr@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 41 NONAME ; class QString QDeclarativeState::tr(char const *, char const *, int) ?metaObject@QDeclarativeBinding@@UBEPBUQMetaObject@@XZ @ 42 NONAME ABSENT ; struct QMetaObject const * QDeclarativeBinding::metaObject(void) const ?setUser@QMetaPropertyBuilder@@QAEX_N@Z @ 43 NONAME ABSENT ; void QMetaPropertyBuilder::setUser(bool) ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0@Z @ 44 NONAME ABSENT ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *) @@ -50,7 +50,7 @@ EXPORTS ??1QDeclarativeText@@UAE@XZ @ 49 NONAME ABSENT ; QDeclarativeText::~QDeclarativeText(void) ?getStaticMetaObject@QDeclarativeText@@SAABUQMetaObject@@XZ @ 50 NONAME ABSENT ; struct QMetaObject const & QDeclarativeText::getStaticMetaObject(void) ?isDesignable@QMetaPropertyBuilder@@QBE_NXZ @ 51 NONAME ABSENT ; bool QMetaPropertyBuilder::isDesignable(void) const - ?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 52 NONAME ABSENT ; class QString QDeclarativeStateGroup::tr(char const *, char const *, int) + ?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 52 NONAME ; class QString QDeclarativeStateGroup::tr(char const *, char const *, int) ?errors@QDeclarativeView@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 53 NONAME ; class QList QDeclarativeView::errors(void) const ??0QPacket@@QAE@ABV0@@Z @ 54 NONAME ABSENT ; QPacket::QPacket(class QPacket const &) ??1QDeclarativeDebugObjectExpressionWatch@@UAE@XZ @ 55 NONAME ABSENT ; QDeclarativeDebugObjectExpressionWatch::~QDeclarativeDebugObjectExpressionWatch(void) @@ -59,7 +59,7 @@ EXPORTS ??_EQDeclarativeDebugObjectQuery@@UAE@I@Z @ 58 NONAME ABSENT ; QDeclarativeDebugObjectQuery::~QDeclarativeDebugObjectQuery(unsigned int) ??0QDeclarativeDomObject@@QAE@XZ @ 59 NONAME ABSENT ; QDeclarativeDomObject::QDeclarativeDomObject(void) ?errors@QDeclarativeDomDocument@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 60 NONAME ABSENT ; class QList QDeclarativeDomDocument::errors(void) const - ?toChanged@QDeclarativeTransition@@IAEXXZ @ 61 NONAME ABSENT ; void QDeclarativeTransition::toChanged(void) + ?toChanged@QDeclarativeTransition@@IAEXXZ @ 61 NONAME ; void QDeclarativeTransition::toChanged(void) ?objectOwnership@QDeclarativeEngine@@SA?AW4ObjectOwnership@1@PAVQObject@@@Z @ 62 NONAME ; enum QDeclarativeEngine::ObjectOwnership QDeclarativeEngine::objectOwnership(class QObject *) ??0QDeclarativeDebugWatch@@QAE@PAVQObject@@@Z @ 63 NONAME ABSENT ; QDeclarativeDebugWatch::QDeclarativeDebugWatch(class QObject *) ?value@QDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 64 NONAME ; class QVariant QDeclarativePropertyMap::value(class QString const &) const @@ -71,9 +71,9 @@ EXPORTS ??1QDeclarativeDebugClient@@UAE@XZ @ 70 NONAME ABSENT ; QDeclarativeDebugClient::~QDeclarativeDebugClient(void) ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 71 NONAME ABSENT ; class QString QPacketProtocol::trUtf8(char const *, char const *) ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0@Z @ 72 NONAME ABSENT ; class QString QDeclarativeListModel::trUtf8(char const *, char const *) - ?qt_metacast@QDeclarativeState@@UAEPAXPBD@Z @ 73 NONAME ABSENT ; void * QDeclarativeState::qt_metacast(char const *) + ?qt_metacast@QDeclarativeState@@UAEPAXPBD@Z @ 73 NONAME ; void * QDeclarativeState::qt_metacast(char const *) ??1QDeclarativeDebugContextReference@@QAE@XZ @ 74 NONAME ABSENT ; QDeclarativeDebugContextReference::~QDeclarativeDebugContextReference(void) - ?getStaticMetaObject@QDeclarativeStateOperation@@SAABUQMetaObject@@XZ @ 75 NONAME ABSENT ; struct QMetaObject const & QDeclarativeStateOperation::getStaticMetaObject(void) + ?getStaticMetaObject@QDeclarativeStateOperation@@SAABUQMetaObject@@XZ @ 75 NONAME ; struct QMetaObject const & QDeclarativeStateOperation::getStaticMetaObject(void) ?isInvalid@QDeclarativeDomValue@@QBE_NXZ @ 76 NONAME ABSENT ; bool QDeclarativeDomValue::isInvalid(void) const ?trUtf8@QDeclarativeText@@SA?AVQString@@PBD0H@Z @ 77 NONAME ABSENT ; class QString QDeclarativeText::trUtf8(char const *, char const *, int) ??0QDeclarativeListReference@@QAE@ABV0@@Z @ 78 NONAME ; QDeclarativeListReference::QDeclarativeListReference(class QDeclarativeListReference const &) @@ -84,7 +84,7 @@ EXPORTS ?imageType@QDeclarativeImageProvider@@QBE?AW4ImageType@1@XZ @ 83 NONAME ; enum QDeclarativeImageProvider::ImageType QDeclarativeImageProvider::imageType(void) const ??_EQDeclarativeDebugObjectReference@@QAE@I@Z @ 84 NONAME ABSENT ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(unsigned int) ?qt_metacall@QDeclarativeDebugQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 85 NONAME ABSENT ; int QDeclarativeDebugQuery::qt_metacall(enum QMetaObject::Call, int, void * *) - ?findState@QDeclarativeStateGroup@@QBEPAVQDeclarativeState@@ABVQString@@@Z @ 86 NONAME ABSENT ; class QDeclarativeState * QDeclarativeStateGroup::findState(class QString const &) const + ?findState@QDeclarativeStateGroup@@QBEPAVQDeclarativeState@@ABVQString@@@Z @ 86 NONAME ; class QDeclarativeState * QDeclarativeStateGroup::findState(class QString const &) const ?asScript@Variant@QDeclarativeParser@@QBE?AVQString@@XZ @ 87 NONAME ; class QString QDeclarativeParser::Variant::asScript(void) const ?qt_metacast@QDeclarativeExtensionPlugin@@UAEPAXPBD@Z @ 88 NONAME ; void * QDeclarativeExtensionPlugin::qt_metacast(char const *) ?objectId@QDeclarativeDomObject@@QBE?AVQString@@XZ @ 89 NONAME ABSENT ; class QString QDeclarativeDomObject::objectId(void) const @@ -130,7 +130,7 @@ EXPORTS ?top@QDeclarativeScaleGrid@@QBEHXZ @ 129 NONAME ABSENT ; int QDeclarativeScaleGrid::top(void) const ?setExpression@QDeclarativeExpression@@QAEXABVQString@@@Z @ 130 NONAME ; void QDeclarativeExpression::setExpression(class QString const &) ??1QDeclarativeDebugEngineReference@@QAE@XZ @ 131 NONAME ABSENT ; QDeclarativeDebugEngineReference::~QDeclarativeDebugEngineReference(void) - ??0QDeclarativeStateOperation@@QAE@PAVQObject@@@Z @ 132 NONAME ABSENT ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObject *) + ??0QDeclarativeStateOperation@@QAE@PAVQObject@@@Z @ 132 NONAME ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObject *) ?transform_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQGraphicsTransform@@@@@Z @ 133 NONAME ; void QDeclarativeItemPrivate::transform_clear(class QDeclarativeListProperty *) ?staticMetaObject@QDeclarativeValueType@@2UQMetaObject@@B @ 134 NONAME ABSENT ; struct QMetaObject const QDeclarativeValueType::staticMetaObject ?propertyName@QDeclarativeDomDynamicProperty@@QBE?AVQByteArray@@XZ @ 135 NONAME ABSENT ; class QByteArray QDeclarativeDomDynamicProperty::propertyName(void) const @@ -165,7 +165,7 @@ EXPORTS ?subFocusItemChange@QDeclarativeItemPrivate@@UAEXXZ @ 164 NONAME ; void QDeclarativeItemPrivate::subFocusItemChange(void) ?hasNotifySignal@QDeclarativeDebugPropertyReference@@QBE_NXZ @ 165 NONAME ABSENT ; bool QDeclarativeDebugPropertyReference::hasNotifySignal(void) const ?addSlot@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 166 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addSlot(class QByteArray const &) - ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 167 NONAME ABSENT ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *) + ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 167 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *) ?propertyCreated@QDeclarativeOpenMetaObjectType@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 168 NONAME ABSENT ; void QDeclarativeOpenMetaObjectType::propertyCreated(int, class QMetaPropertyBuilder &) ??1QDeclarativeItemPrivate@@UAE@XZ @ 169 NONAME ; QDeclarativeItemPrivate::~QDeclarativeItemPrivate(void) ?clear@QDeclarativePropertyMap@@QAEXABVQString@@@Z @ 170 NONAME ; void QDeclarativePropertyMap::clear(class QString const &) @@ -173,7 +173,7 @@ EXPORTS ?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@PAVQDeclarativeEngine@@@Z @ 172 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &, class QDeclarativeEngine *) ?insert@QDeclarativePropertyMap@@QAEXABVQString@@ABVQVariant@@@Z @ 173 NONAME ; void QDeclarativePropertyMap::insert(class QString const &, class QVariant const &) ??1QDeclarativeContext@@UAE@XZ @ 174 NONAME ; QDeclarativeContext::~QDeclarativeContext(void) - ?operationCount@QDeclarativeState@@QBEHXZ @ 175 NONAME ABSENT ; int QDeclarativeState::operationCount(void) const + ?operationCount@QDeclarativeState@@QBEHXZ @ 175 NONAME ; int QDeclarativeState::operationCount(void) const ?getStaticMetaObject@QDeclarativeItem@@SAABUQMetaObject@@XZ @ 176 NONAME ; struct QMetaObject const & QDeclarativeItem::getStaticMetaObject(void) ?qtAnimationStateChanged@QDeclarativeBehavior@@AAEXW4State@QAbstractAnimation@@0@Z @ 177 NONAME ABSENT ; void QDeclarativeBehavior::qtAnimationStateChanged(enum QAbstractAnimation::State, enum QAbstractAnimation::State) ?trUtf8@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 178 NONAME ABSENT ; class QString QDeclarativeBehavior::trUtf8(char const *, char const *, int) @@ -188,7 +188,7 @@ EXPORTS ?metaObject@QDeclarativeDebugObjectExpressionWatch@@UBEPBUQMetaObject@@XZ @ 187 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugObjectExpressionWatch::metaObject(void) const ??0QDeclarativeComponent@@QAE@PAVQObject@@@Z @ 188 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QObject *) ?qt_metacast@QDeclarativeItem@@UAEPAXPBD@Z @ 189 NONAME ; void * QDeclarativeItem::qt_metacast(char const *) - ?changes@QDeclarativeState@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeStateOperation@@@@XZ @ 190 NONAME ABSENT ; class QDeclarativeListProperty QDeclarativeState::changes(void) + ?changes@QDeclarativeState@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeStateOperation@@@@XZ @ 190 NONAME ; class QDeclarativeListProperty QDeclarativeState::changes(void) ?resizeEvent@QDeclarativeView@@MAEXPAVQResizeEvent@@@Z @ 191 NONAME ; void QDeclarativeView::resizeEvent(class QResizeEvent *) ?d_func@QDeclarativeBinding@@ABEPBVQDeclarativeBindingPrivate@@XZ @ 192 NONAME ABSENT ; class QDeclarativeBindingPrivate const * QDeclarativeBinding::d_func(void) const ?wrapMode@QDeclarativeText@@QBE?AW4WrapMode@1@XZ @ 193 NONAME ABSENT ; enum QDeclarativeText::WrapMode QDeclarativeText::wrapMode(void) const @@ -216,7 +216,7 @@ EXPORTS ?parentChanged@QDeclarativeItem@@IAEXPAV1@@Z @ 215 NONAME ; void QDeclarativeItem::parentChanged(class QDeclarativeItem *) ?columnNumber@QDeclarativeDebugFileReference@@QBEHXZ @ 216 NONAME ABSENT ; int QDeclarativeDebugFileReference::columnNumber(void) const ??0QDeclarativeListModel@@AAE@_NPAVQObject@@@Z @ 217 NONAME ABSENT ; QDeclarativeListModel::QDeclarativeListModel(bool, class QObject *) - ?apply@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@PAVQDeclarativeTransition@@PAV1@@Z @ 218 NONAME ABSENT ; void QDeclarativeState::apply(class QDeclarativeStateGroup *, class QDeclarativeTransition *, class QDeclarativeState *) + ?apply@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@PAVQDeclarativeTransition@@PAV1@@Z @ 218 NONAME ; void QDeclarativeState::apply(class QDeclarativeStateGroup *, class QDeclarativeTransition *, class QDeclarativeState *) ?isValid@QDeclarativeDomProperty@@QBE_NXZ @ 219 NONAME ABSENT ; bool QDeclarativeDomProperty::isValid(void) const ?trUtf8@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 220 NONAME ABSENT ; class QString QDeclarativeDebugExpressionQuery::trUtf8(char const *, char const *) ?statusChanged@QDeclarativeView@@IAEXW4Status@1@@Z @ 221 NONAME ; void QDeclarativeView::statusChanged(enum QDeclarativeView::Status) @@ -241,7 +241,7 @@ EXPORTS ??1QDeclarativeScaleGrid@@UAE@XZ @ 240 NONAME ABSENT ; QDeclarativeScaleGrid::~QDeclarativeScaleGrid(void) ?idString@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 241 NONAME ABSENT ; class QString QDeclarativeDebugObjectReference::idString(void) const ?customTypeData@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 242 NONAME ABSENT ; class QByteArray QDeclarativeDomObject::customTypeData(void) const - ?stop@QDeclarativeTransition@@QAEXXZ @ 243 NONAME ABSENT ; void QDeclarativeTransition::stop(void) + ?stop@QDeclarativeTransition@@QAEXXZ @ 243 NONAME ; void QDeclarativeTransition::stop(void) ?data@QDeclarativeListModel@@UBE?AV?$QHash@HVQVariant@@@@HABV?$QList@H@@@Z @ 244 NONAME ABSENT ; class QHash QDeclarativeListModel::data(int, class QList const &) const ?verticalCenterOffset@QDeclarativeAnchors@@QBEMXZ @ 245 NONAME ABSENT ; float QDeclarativeAnchors::verticalCenterOffset(void) const ?metaObject@QDeclarativeText@@UBEPBUQMetaObject@@XZ @ 246 NONAME ABSENT ; struct QMetaObject const * QDeclarativeText::metaObject(void) const @@ -288,19 +288,19 @@ EXPORTS ?queryId@QDeclarativeDebugWatch@@QBEHXZ @ 287 NONAME ABSENT ; int QDeclarativeDebugWatch::queryId(void) const ?trUtf8@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 288 NONAME ; class QString QDeclarativeExtensionPlugin::trUtf8(char const *, char const *, int) ?staticMetaObject@QDeclarativeComponent@@2UQMetaObject@@B @ 289 NONAME ; struct QMetaObject const QDeclarativeComponent::staticMetaObject - ?setStateGroup@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@@Z @ 290 NONAME ABSENT ; void QDeclarativeState::setStateGroup(class QDeclarativeStateGroup *) + ?setStateGroup@QDeclarativeState@@QAEXPAVQDeclarativeStateGroup@@@Z @ 290 NONAME ; void QDeclarativeState::setStateGroup(class QDeclarativeStateGroup *) ?access@QMetaMethodBuilder@@QBE?AW4Access@QMetaMethod@@XZ @ 291 NONAME ABSENT ; enum QMetaMethod::Access QMetaMethodBuilder::access(void) const ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 292 NONAME ABSENT ; class QString QDeclarativeDebugQuery::tr(char const *, char const *) ?attachedPropertiesType@QDeclarativeType@@QBEPBUQMetaObject@@XZ @ 293 NONAME ABSENT ; struct QMetaObject const * QDeclarativeType::attachedPropertiesType(void) const - ?setName@QDeclarativeState@@QAEXABVQString@@@Z @ 294 NONAME ABSENT ; void QDeclarativeState::setName(class QString const &) - ?setReversed@QDeclarativeTransition@@QAEX_N@Z @ 295 NONAME ABSENT ; void QDeclarativeTransition::setReversed(bool) + ?setName@QDeclarativeState@@QAEXABVQString@@@Z @ 294 NONAME ; void QDeclarativeState::setName(class QString const &) + ?setReversed@QDeclarativeTransition@@QAEX_N@Z @ 295 NONAME ; void QDeclarativeTransition::setReversed(bool) ?idForObject@QDeclarativeDebugService@@SAHPAVQObject@@@Z @ 296 NONAME ABSENT ; int QDeclarativeDebugService::idForObject(class QObject *) ?qt_metacall@QDeclarativeDebugWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 297 NONAME ABSENT ; int QDeclarativeDebugWatch::qt_metacall(enum QMetaObject::Call, int, void * *) - ?fromState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 298 NONAME ABSENT ; class QString QDeclarativeTransition::fromState(void) const + ?fromState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 298 NONAME ; class QString QDeclarativeTransition::fromState(void) const ??1QDeclarativeExpression@@UAE@XZ @ 299 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(void) ?binding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@@Z @ 300 NONAME ABSENT ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::binding(class QDeclarativeProperty const &) ?removeMethod@QMetaObjectBuilder@@QAEXH@Z @ 301 NONAME ABSENT ; void QMetaObjectBuilder::removeMethod(int) - ?operationAt@QDeclarativeState@@QBEPAVQDeclarativeStateOperation@@H@Z @ 302 NONAME ABSENT ; class QDeclarativeStateOperation * QDeclarativeState::operationAt(int) const + ?operationAt@QDeclarativeState@@QBEPAVQDeclarativeStateOperation@@H@Z @ 302 NONAME ; class QDeclarativeStateOperation * QDeclarativeState::operationAt(int) const ?methodCount@QMetaObjectBuilder@@QBEHXZ @ 303 NONAME ABSENT ; int QMetaObjectBuilder::methodCount(void) const ?font@QDeclarativeText@@QBE?AVQFont@@XZ @ 304 NONAME ABSENT ; class QFont QDeclarativeText::font(void) const ?completeCreate@QDeclarativeComponent@@UAEXXZ @ 305 NONAME ; void QDeclarativeComponent::completeCreate(void) @@ -320,7 +320,7 @@ EXPORTS ?tr@QDeclarativeValueType@@SA?AVQString@@PBD0H@Z @ 319 NONAME ABSENT ; class QString QDeclarativeValueType::tr(char const *, char const *, int) ?parent@QDeclarativeOpenMetaObject@@IBEPAUQAbstractDynamicMetaObject@@XZ @ 320 NONAME ABSENT ; struct QAbstractDynamicMetaObject * QDeclarativeOpenMetaObject::parent(void) const ??0QDeclarativeDebugClient@@QAE@ABVQString@@PAVQDeclarativeDebugConnection@@@Z @ 321 NONAME ABSENT ; QDeclarativeDebugClient::QDeclarativeDebugClient(class QString const &, class QDeclarativeDebugConnection *) - ?qt_metacall@QDeclarativeStateOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 322 NONAME ABSENT ; int QDeclarativeStateOperation::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@QDeclarativeStateOperation@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 322 NONAME ; int QDeclarativeStateOperation::qt_metacall(enum QMetaObject::Call, int, void * *) ?type@Variant@QDeclarativeParser@@QBE?AW4Type@12@XZ @ 323 NONAME ; enum QDeclarativeParser::Variant::Type QDeclarativeParser::Variant::type(void) const ??6QDeclarativeInfo@@QAEAAV0@_N@Z @ 324 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(bool) ?value@QDeclarativeDomProperty@@QBE?AVQDeclarativeDomValue@@XZ @ 325 NONAME ABSENT ; class QDeclarativeDomValue QDeclarativeDomProperty::value(void) const @@ -357,8 +357,8 @@ EXPORTS ??1QDeclarativePropertyPrivate@@QAE@XZ @ 356 NONAME ABSENT ; QDeclarativePropertyPrivate::~QDeclarativePropertyPrivate(void) ?setBaselineOffset@QDeclarativeItem@@QAEXM@Z @ 357 NONAME ; void QDeclarativeItem::setBaselineOffset(float) ??0QDeclarativeDebugPropertyReference@@QAE@XZ @ 358 NONAME ABSENT ; QDeclarativeDebugPropertyReference::QDeclarativeDebugPropertyReference(void) - ?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 359 NONAME ABSENT ; class QString QDeclarativeStateOperation::tr(char const *, char const *, int) - ?setState@QDeclarativeStateGroup@@QAEXABVQString@@@Z @ 360 NONAME ABSENT ; void QDeclarativeStateGroup::setState(class QString const &) + ?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 359 NONAME ; class QString QDeclarativeStateOperation::tr(char const *, char const *, int) + ?setState@QDeclarativeStateGroup@@QAEXABVQString@@@Z @ 360 NONAME ; void QDeclarativeStateGroup::setState(class QString const &) ??_EQDeclarativeImageProvider@@UAE@I@Z @ 361 NONAME ; QDeclarativeImageProvider::~QDeclarativeImageProvider(unsigned int) ?trUtf8@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 362 NONAME ; class QString QDeclarativeComponent::trUtf8(char const *, char const *) ?isLoading@QDeclarativeComponent@@QBE_NXZ @ 363 NONAME ; bool QDeclarativeComponent::isLoading(void) const @@ -413,11 +413,11 @@ EXPORTS ??0QDeclarativeComponent@@AAE@PAVQDeclarativeEngine@@PAVQDeclarativeCompiledData@@HHPAVQObject@@@Z @ 412 NONAME ; QDeclarativeComponent::QDeclarativeComponent(class QDeclarativeEngine *, class QDeclarativeCompiledData *, int, int, class QObject *) ?resources_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 413 NONAME ; int QDeclarativeItemPrivate::resources_count(class QDeclarativeListProperty *) ?timerEvent@QDeclarativeView@@MAEXPAVQTimerEvent@@@Z @ 414 NONAME ; void QDeclarativeView::timerEvent(class QTimerEvent *) - ?setToState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 415 NONAME ABSENT ; void QDeclarativeTransition::setToState(class QString const &) + ?setToState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 415 NONAME ; void QDeclarativeTransition::setToState(class QString const &) ?requestPixmap@QDeclarativeImageProvider@@UAE?AVQPixmap@@ABVQString@@PAVQSize@@ABV4@@Z @ 416 NONAME ; class QPixmap QDeclarativeImageProvider::requestPixmap(class QString const &, class QSize *, class QSize const &) ?methodType@QMetaMethodBuilder@@QBE?AW4MethodType@QMetaMethod@@XZ @ 417 NONAME ABSENT ; enum QMetaMethod::MethodType QMetaMethodBuilder::methodType(void) const ?getStaticMetaObject@QDeclarativeView@@SAABUQMetaObject@@XZ @ 418 NONAME ; struct QMetaObject const & QDeclarativeView::getStaticMetaObject(void) - ?metaObject@QDeclarativeStateOperation@@UBEPBUQMetaObject@@XZ @ 419 NONAME ABSENT ; struct QMetaObject const * QDeclarativeStateOperation::metaObject(void) const + ?metaObject@QDeclarativeStateOperation@@UBEPBUQMetaObject@@XZ @ 419 NONAME ; struct QMetaObject const * QDeclarativeStateOperation::metaObject(void) const ?keyReleasePreHandler@QDeclarativeItem@@IAEXPAVQKeyEvent@@@Z @ 420 NONAME ; void QDeclarativeItem::keyReleasePreHandler(class QKeyEvent *) ?append@QDeclarativeListModel@@QAEXABVQScriptValue@@@Z @ 421 NONAME ABSENT ; void QDeclarativeListModel::append(class QScriptValue const &) ??1QDeclarativeDebugObjectReference@@QAE@XZ @ 422 NONAME ABSENT ; QDeclarativeDebugObjectReference::~QDeclarativeDebugObjectReference(void) @@ -437,10 +437,10 @@ EXPORTS ?tr@QDeclarativeDebugExpressionQuery@@SA?AVQString@@PBD0@Z @ 436 NONAME ABSENT ; class QString QDeclarativeDebugExpressionQuery::tr(char const *, char const *) ?styleColorChanged@QDeclarativeText@@IAEXABVQColor@@@Z @ 437 NONAME ABSENT ; void QDeclarativeText::styleColorChanged(class QColor const &) ?getStaticMetaObject@QDeclarativeDebugExpressionQuery@@SAABUQMetaObject@@XZ @ 438 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugExpressionQuery::getStaticMetaObject(void) - ?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 439 NONAME ABSENT ; class QString QDeclarativeTransition::trUtf8(char const *, char const *, int) + ?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 439 NONAME ; class QString QDeclarativeTransition::trUtf8(char const *, char const *, int) ?writeValueProperty@QDeclarativePropertyPrivate@@QAE_NABVQVariant@@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 440 NONAME ABSENT ; bool QDeclarativePropertyPrivate::writeValueProperty(class QVariant const &, class QFlags) ?errors@QDeclarativeCustomParser@@QBE?AV?$QList@VQDeclarativeError@@@@XZ @ 441 NONAME ; class QList QDeclarativeCustomParser::errors(void) const - ?statesProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeState@@@@XZ @ 442 NONAME ABSENT ; class QDeclarativeListProperty QDeclarativeStateGroup::statesProperty(void) + ?statesProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeState@@@@XZ @ 442 NONAME ; class QDeclarativeListProperty QDeclarativeStateGroup::statesProperty(void) ?roles@QDeclarativeListModel@@UBE?AV?$QList@H@@XZ @ 443 NONAME ABSENT ; class QList QDeclarativeListModel::roles(void) const ?name@QMetaEnumBuilder@@QBE?AVQByteArray@@XZ @ 444 NONAME ABSENT ; class QByteArray QMetaEnumBuilder::name(void) const ??_EQDeclarativeDebugRootContextQuery@@UAE@I@Z @ 445 NONAME ABSENT ; QDeclarativeDebugRootContextQuery::~QDeclarativeDebugRootContextQuery(unsigned int) @@ -456,11 +456,11 @@ EXPORTS ?interfaceIId@QDeclarativeMetaType@@SAPBDH@Z @ 455 NONAME ABSENT ; char const * QDeclarativeMetaType::interfaceIId(int) ?isValid@QDeclarativeDomDynamicProperty@@QBE_NXZ @ 456 NONAME ABSENT ; bool QDeclarativeDomDynamicProperty::isValid(void) const ?baselineChanged@QDeclarativeAnchors@@IAEXXZ @ 457 NONAME ABSENT ; void QDeclarativeAnchors::baselineChanged(void) - ?name@QDeclarativeState@@QBE?AVQString@@XZ @ 458 NONAME ABSENT ; class QString QDeclarativeState::name(void) const + ?name@QDeclarativeState@@QBE?AVQString@@XZ @ 458 NONAME ; class QString QDeclarativeState::name(void) const ??4QDeclarativeDomObject@@QAEAAV0@ABV0@@Z @ 459 NONAME ABSENT ; class QDeclarativeDomObject & QDeclarativeDomObject::operator=(class QDeclarativeDomObject const &) ?qt_metacall@QDeclarativeContext@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 460 NONAME ; int QDeclarativeContext::qt_metacall(enum QMetaObject::Call, int, void * *) ??_EQDeclarativeValueType@@UAE@I@Z @ 461 NONAME ABSENT ; QDeclarativeValueType::~QDeclarativeValueType(unsigned int) - ?qt_metacall@QDeclarativeState@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 462 NONAME ABSENT ; int QDeclarativeState::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@QDeclarativeState@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 462 NONAME ; int QDeclarativeState::qt_metacall(enum QMetaObject::Call, int, void * *) ?isEnabled@QDeclarativeDebugService@@QBE_NXZ @ 463 NONAME ABSENT ; bool QDeclarativeDebugService::isEnabled(void) const ?stateChanged@QDeclarativeDebugWatch@@IAEXW4State@1@@Z @ 464 NONAME ABSENT ; void QDeclarativeDebugWatch::stateChanged(enum QDeclarativeDebugWatch::State) ??0QMetaMethodBuilder@@AAE@PBVQMetaObjectBuilder@@H@Z @ 465 NONAME ABSENT ; QMetaMethodBuilder::QMetaMethodBuilder(class QMetaObjectBuilder const *, int) @@ -504,7 +504,7 @@ EXPORTS ??4QDeclarativeDomComponent@@QAEAAV0@ABV0@@Z @ 503 NONAME ABSENT ; class QDeclarativeDomComponent & QDeclarativeDomComponent::operator=(class QDeclarativeDomComponent const &) ?tr@QPacketProtocol@@SA?AVQString@@PBD0@Z @ 504 NONAME ABSENT ; class QString QPacketProtocol::tr(char const *, char const *) ?setFont@QDeclarativeText@@QAEXABVQFont@@@Z @ 505 NONAME ABSENT ; void QDeclarativeText::setFont(class QFont const &) - ?fromChanged@QDeclarativeTransition@@IAEXXZ @ 506 NONAME ABSENT ; void QDeclarativeTransition::fromChanged(void) + ?fromChanged@QDeclarativeTransition@@IAEXXZ @ 506 NONAME ; void QDeclarativeTransition::fromChanged(void) ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQMetaMethod@@@Z @ 507 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QMetaMethod const &) ?setHeight@QDeclarativeItemPrivate@@UAEXM@Z @ 508 NONAME ; void QDeclarativeItemPrivate::setHeight(float) ??0Variant@QDeclarativeParser@@QAE@ABV01@@Z @ 509 NONAME ; QDeclarativeParser::Variant::Variant(class QDeclarativeParser::Variant const &) @@ -527,7 +527,7 @@ EXPORTS ??0QDeclarativeDomValue@@QAE@XZ @ 526 NONAME ABSENT ; QDeclarativeDomValue::QDeclarativeDomValue(void) ?init@QDeclarativeItemPrivate@@QAEXPAVQDeclarativeItem@@@Z @ 527 NONAME ; void QDeclarativeItemPrivate::init(class QDeclarativeItem *) ?addProperty@QMetaObjectBuilder@@QAE?AVQMetaPropertyBuilder@@ABVQByteArray@@0H@Z @ 528 NONAME ABSENT ; class QMetaPropertyBuilder QMetaObjectBuilder::addProperty(class QByteArray const &, class QByteArray const &, int) - ?getStaticMetaObject@QDeclarativeState@@SAABUQMetaObject@@XZ @ 529 NONAME ABSENT ; struct QMetaObject const & QDeclarativeState::getStaticMetaObject(void) + ?getStaticMetaObject@QDeclarativeState@@SAABUQMetaObject@@XZ @ 529 NONAME ; struct QMetaObject const & QDeclarativeState::getStaticMetaObject(void) ?isResettable@QMetaPropertyBuilder@@QBE_NXZ @ 530 NONAME ABSENT ; bool QMetaPropertyBuilder::isResettable(void) const ?focusScopeItemChange@QDeclarativeItemPrivate@@UAEX_N@Z @ 531 NONAME ; void QDeclarativeItemPrivate::focusScopeItemChange(bool) ?bottomMarginChanged@QDeclarativeAnchors@@IAEXXZ @ 532 NONAME ABSENT ; void QDeclarativeAnchors::bottomMarginChanged(void) @@ -551,7 +551,7 @@ EXPORTS ??0QDeclarativeListModel@@QAE@PAVQObject@@@Z @ 550 NONAME ABSENT ; QDeclarativeListModel::QDeclarativeListModel(class QObject *) ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugContextReference@@ABVQString@@PAVQObject@@@Z @ 551 NONAME ABSENT ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugContextReference const &, class QString const &, class QObject *) ?setColumn@QDeclarativeError@@QAEXH@Z @ 552 NONAME ; void QDeclarativeError::setColumn(int) - ??1QDeclarativeTransition@@UAE@XZ @ 553 NONAME ABSENT ; QDeclarativeTransition::~QDeclarativeTransition(void) + ??1QDeclarativeTransition@@UAE@XZ @ 553 NONAME ; QDeclarativeTransition::~QDeclarativeTransition(void) ??AQDeclarativePropertyMap@@QBE?AVQVariant@@ABVQString@@@Z @ 554 NONAME ; class QVariant QDeclarativePropertyMap::operator[](class QString const &) const ?qt_metacall@QDeclarativeListModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 555 NONAME ABSENT ; int QDeclarativeListModel::qt_metacall(enum QMetaObject::Call, int, void * *) ?qdeclarativeelement_destructor@QDeclarativePrivate@@YAXPAVQObject@@@Z @ 556 NONAME ; void QDeclarativePrivate::qdeclarativeelement_destructor(class QObject *) @@ -589,8 +589,8 @@ EXPORTS ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@@Z @ 588 NONAME ABSENT ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &) ?qt_metacall@QDeclarativeScaleGrid@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 589 NONAME ABSENT ; int QDeclarativeScaleGrid::qt_metacall(enum QMetaObject::Call, int, void * *) ?size@QDeclarativePropertyMap@@QBEHXZ @ 590 NONAME ; int QDeclarativePropertyMap::size(void) const - ?cancel@QDeclarativeState@@QAEXXZ @ 591 NONAME ABSENT ; void QDeclarativeState::cancel(void) - ?qt_metacall@QDeclarativeStateGroup@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 592 NONAME ABSENT ; int QDeclarativeStateGroup::qt_metacall(enum QMetaObject::Call, int, void * *) + ?cancel@QDeclarativeState@@QAEXXZ @ 591 NONAME ; void QDeclarativeState::cancel(void) + ?qt_metacall@QDeclarativeStateGroup@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 592 NONAME ; int QDeclarativeStateGroup::qt_metacall(enum QMetaObject::Call, int, void * *) ??0QDeclarativePropertyPrivate@@QAE@XZ @ 593 NONAME ABSENT ; QDeclarativePropertyPrivate::QDeclarativePropertyPrivate(void) ?getStaticMetaObject@QDeclarativeDebugPropertyWatch@@SAABUQMetaObject@@XZ @ 594 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugPropertyWatch::getStaticMetaObject(void) ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0H@Z @ 595 NONAME ABSENT ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *, int) @@ -599,7 +599,7 @@ EXPORTS ?evaluateEnum@QDeclarativeCustomParser@@IBEHABVQByteArray@@@Z @ 598 NONAME ; int QDeclarativeCustomParser::evaluateEnum(class QByteArray const &) const ?setState@QDeclarativeDebugQuery@@AAEXW4State@1@@Z @ 599 NONAME ABSENT ; void QDeclarativeDebugQuery::setState(enum QDeclarativeDebugQuery::State) ?d_func@QDeclarativeText@@ABEPBVQDeclarativeTextPrivate@@XZ @ 600 NONAME ABSENT ; class QDeclarativeTextPrivate const * QDeclarativeText::d_func(void) const - ?transitionsProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeTransition@@@@XZ @ 601 NONAME ABSENT ; class QDeclarativeListProperty QDeclarativeStateGroup::transitionsProperty(void) + ?transitionsProperty@QDeclarativeStateGroup@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeTransition@@@@XZ @ 601 NONAME ; class QDeclarativeListProperty QDeclarativeStateGroup::transitionsProperty(void) ?typeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 602 NONAME ABSENT ; class QByteArray QDeclarativeType::typeName(void) const ?asStringList@Variant@QDeclarativeParser@@QBE?AVQStringList@@XZ @ 603 NONAME ; class QStringList QDeclarativeParser::Variant::asStringList(void) const ?removeKey@QMetaEnumBuilder@@QAEXH@Z @ 604 NONAME ABSENT ; void QMetaEnumBuilder::removeKey(int) @@ -612,7 +612,7 @@ EXPORTS ??0QDeclarativePen@@QAE@PAVQObject@@@Z @ 611 NONAME ABSENT ; QDeclarativePen::QDeclarativePen(class QObject *) ?trUtf8@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 612 NONAME ABSENT ; class QString QPacketProtocol::trUtf8(char const *, char const *, int) ?setContextObject@QDeclarativeContext@@QAEXPAVQObject@@@Z @ 613 NONAME ; void QDeclarativeContext::setContextObject(class QObject *) - ??_EQDeclarativeState@@UAE@I@Z @ 614 NONAME ABSENT ; QDeclarativeState::~QDeclarativeState(unsigned int) + ??_EQDeclarativeState@@UAE@I@Z @ 614 NONAME ; QDeclarativeState::~QDeclarativeState(unsigned int) ?expression@QDeclarativeExpression@@QBE?AVQString@@XZ @ 615 NONAME ; class QString QDeclarativeExpression::expression(void) const ??1QDeclarativeDomDocument@@QAE@XZ @ 616 NONAME ABSENT ; QDeclarativeDomDocument::~QDeclarativeDomDocument(void) ?trUtf8@QDeclarativeListModel@@SA?AVQString@@PBD0H@Z @ 617 NONAME ABSENT ; class QString QDeclarativeListModel::trUtf8(char const *, char const *, int) @@ -621,15 +621,15 @@ EXPORTS ?sceneEvent@QDeclarativeItem@@MAE_NPAVQEvent@@@Z @ 620 NONAME ; bool QDeclarativeItem::sceneEvent(class QEvent *) ??0QDeclarativeDebugRootContextQuery@@AAE@PAVQObject@@@Z @ 621 NONAME ABSENT ; QDeclarativeDebugRootContextQuery::QDeclarativeDebugRootContextQuery(class QObject *) ?name@QDeclarativeDebugEngineReference@@QBE?AVQString@@XZ @ 622 NONAME ABSENT ; class QString QDeclarativeDebugEngineReference::name(void) const - ??_EQDeclarativeTransition@@UAE@I@Z @ 623 NONAME ABSENT ; QDeclarativeTransition::~QDeclarativeTransition(unsigned int) + ??_EQDeclarativeTransition@@UAE@I@Z @ 623 NONAME ; QDeclarativeTransition::~QDeclarativeTransition(unsigned int) ??0QDeclarativeAction@@QAE@ABV0@@Z @ 624 NONAME ABSENT ; QDeclarativeAction::QDeclarativeAction(class QDeclarativeAction const &) - ?extends@QDeclarativeState@@QBE?AVQString@@XZ @ 625 NONAME ABSENT ; class QString QDeclarativeState::extends(void) const + ?extends@QDeclarativeState@@QBE?AVQString@@XZ @ 625 NONAME ; class QString QDeclarativeState::extends(void) const ?error@QDeclarativeCustomParser@@IAEXABVQDeclarativeCustomParserProperty@@ABVQString@@@Z @ 626 NONAME ; void QDeclarativeCustomParser::error(class QDeclarativeCustomParserProperty const &, class QString const &) ??0QDeclarativeCustomParserNode@@QAE@XZ @ 627 NONAME ; QDeclarativeCustomParserNode::QDeclarativeCustomParserNode(void) ?version@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 628 NONAME ABSENT ; class QString QDeclarativeDomImport::version(void) const ?smooth@QDeclarativeItem@@QBE_NXZ @ 629 NONAME ; bool QDeclarativeItem::smooth(void) const ??1QDeclarativeInfo@@QAE@XZ @ 630 NONAME ; QDeclarativeInfo::~QDeclarativeInfo(void) - ?qt_metacast@QDeclarativeStateOperation@@UAEPAXPBD@Z @ 631 NONAME ABSENT ; void * QDeclarativeStateOperation::qt_metacast(char const *) + ?qt_metacast@QDeclarativeStateOperation@@UAEPAXPBD@Z @ 631 NONAME ; void * QDeclarativeStateOperation::qt_metacast(char const *) ??4QDeclarativeDebugEngineReference@@QAEAAV0@ABV0@@Z @ 632 NONAME ABSENT ; class QDeclarativeDebugEngineReference & QDeclarativeDebugEngineReference::operator=(class QDeclarativeDebugEngineReference const &) ?isValueType@QDeclarativePropertyPrivate@@QBE_NXZ @ 633 NONAME ABSENT ; bool QDeclarativePropertyPrivate::isValueType(void) const ??0QDeclarativeDomValueValueSource@@QAE@ABV0@@Z @ 634 NONAME ABSENT ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(class QDeclarativeDomValueValueSource const &) @@ -640,7 +640,7 @@ EXPORTS ?qt_metacall@QDeclarativeDebugObjectExpressionWatch@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 639 NONAME ABSENT ; int QDeclarativeDebugObjectExpressionWatch::qt_metacall(enum QMetaObject::Call, int, void * *) ?d_func@QDeclarativeItem@@AAEPAVQDeclarativeItemPrivate@@XZ @ 640 NONAME ; class QDeclarativeItemPrivate * QDeclarativeItem::d_func(void) ?binding@QDeclarativeDomValueBinding@@QBE?AVQString@@XZ @ 641 NONAME ABSENT ; class QString QDeclarativeDomValueBinding::binding(void) const - ?updateAutoState@QDeclarativeStateGroup@@AAE_NXZ @ 642 NONAME ABSENT ; bool QDeclarativeStateGroup::updateAutoState(void) + ?updateAutoState@QDeclarativeStateGroup@@AAE_NXZ @ 642 NONAME ; bool QDeclarativeStateGroup::updateAutoState(void) ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0@Z @ 643 NONAME ABSENT ; class QString QDeclarativeDebugService::tr(char const *, char const *) ?tr@QDeclarativeComponent@@SA?AVQString@@PBD0H@Z @ 644 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *, int) ??1QDeclarativeProperty@@QAE@XZ @ 645 NONAME ; QDeclarativeProperty::~QDeclarativeProperty(void) @@ -678,11 +678,11 @@ EXPORTS ?elideMode@QDeclarativeText@@QBE?AW4TextElideMode@1@XZ @ 677 NONAME ABSENT ; enum QDeclarativeText::TextElideMode QDeclarativeText::elideMode(void) const ?baseUrl@QDeclarativeContext@@QBE?AVQUrl@@XZ @ 678 NONAME ; class QUrl QDeclarativeContext::baseUrl(void) const ?qt_metacall@QDeclarativeDebugRootContextQuery@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 679 NONAME ABSENT ; int QDeclarativeDebugRootContextQuery::qt_metacall(enum QMetaObject::Call, int, void * *) - ?isNamed@QDeclarativeState@@QBE_NXZ @ 680 NONAME ABSENT ; bool QDeclarativeState::isNamed(void) const + ?isNamed@QDeclarativeState@@QBE_NXZ @ 680 NONAME ; bool QDeclarativeState::isNamed(void) const ?isString@Variant@QDeclarativeParser@@QBE_NXZ @ 681 NONAME ; bool QDeclarativeParser::Variant::isString(void) const ?restart@QDeclarativeItemPrivate@@SA_JAAVQElapsedTimer@@@Z @ 682 NONAME ; long long QDeclarativeItemPrivate::restart(class QElapsedTimer &) ?trUtf8@QDeclarativeDebugClient@@SA?AVQString@@PBD0H@Z @ 683 NONAME ABSENT ; class QString QDeclarativeDebugClient::trUtf8(char const *, char const *, int) - ?qt_metacast@QDeclarativeTransition@@UAEPAXPBD@Z @ 684 NONAME ABSENT ; void * QDeclarativeTransition::qt_metacast(char const *) + ?qt_metacast@QDeclarativeTransition@@UAEPAXPBD@Z @ 684 NONAME ; void * QDeclarativeTransition::qt_metacast(char const *) ??1QDeclarativePixmap@@QAE@XZ @ 685 NONAME ; QDeclarativePixmap::~QDeclarativePixmap(void) ?timeFromString@QDeclarativeStringConverters@@YA?AVQTime@@ABVQString@@PA_N@Z @ 686 NONAME ABSENT ; class QTime QDeclarativeStringConverters::timeFromString(class QString const &, bool *) ?d_func@QDeclarativeDebugClient@@AAEPAVQDeclarativeDebugClientPrivate@@XZ @ 687 NONAME ABSENT ; class QDeclarativeDebugClientPrivate * QDeclarativeDebugClient::d_func(void) @@ -694,7 +694,7 @@ EXPORTS ??0QDeclarativeDebugObjectReference@@QAE@XZ @ 693 NONAME ABSENT ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(void) ?staticMetaObject@QDeclarativeExtensionPlugin@@2UQMetaObject@@B @ 694 NONAME ; struct QMetaObject const QDeclarativeExtensionPlugin::staticMetaObject ?isNull@QDeclarativeScaleGrid@@QBE_NXZ @ 695 NONAME ABSENT ; bool QDeclarativeScaleGrid::isNull(void) const - ??_EQDeclarativeStateOperation@@UAE@I@Z @ 696 NONAME ABSENT ; QDeclarativeStateOperation::~QDeclarativeStateOperation(unsigned int) + ??_EQDeclarativeStateOperation@@UAE@I@Z @ 696 NONAME ; QDeclarativeStateOperation::~QDeclarativeStateOperation(unsigned int) ??6QDeclarativeInfo@@QAEAAV0@H@Z @ 697 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(int) ??0QDeclarativeDomDynamicProperty@@QAE@XZ @ 698 NONAME ABSENT ; QDeclarativeDomDynamicProperty::QDeclarativeDomDynamicProperty(void) ?tr@QDeclarativeRectangle@@SA?AVQString@@PBD0H@Z @ 699 NONAME ABSENT ; class QString QDeclarativeRectangle::tr(char const *, char const *, int) @@ -718,7 +718,7 @@ EXPORTS ?qt_metacast@QDeclarativeView@@UAEPAXPBD@Z @ 717 NONAME ; void * QDeclarativeView::qt_metacast(char const *) ?mapToItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 718 NONAME ; class QScriptValue QDeclarativeItem::mapToItem(class QScriptValue const &, float, float) const ?setPluginPathList@QDeclarativeEngine@@QAEXABVQStringList@@@Z @ 719 NONAME ; void QDeclarativeEngine::setPluginPathList(class QStringList const &) - ?metaObject@QDeclarativeState@@UBEPBUQMetaObject@@XZ @ 720 NONAME ABSENT ; struct QMetaObject const * QDeclarativeState::metaObject(void) const + ?metaObject@QDeclarativeState@@UBEPBUQMetaObject@@XZ @ 720 NONAME ; struct QMetaObject const * QDeclarativeState::metaObject(void) const ?boundingRect@QDeclarativeRectangle@@UBE?AVQRectF@@XZ @ 721 NONAME ABSENT ; class QRectF QDeclarativeRectangle::boundingRect(void) const ?uri@QDeclarativeDomImport@@QBE?AVQString@@XZ @ 722 NONAME ABSENT ; class QString QDeclarativeDomImport::uri(void) const ?setContextProperty@QDeclarativeContext@@QAEXABVQString@@PAVQObject@@@Z @ 723 NONAME ; void QDeclarativeContext::setContextProperty(class QString const &, class QObject *) @@ -769,13 +769,13 @@ EXPORTS ?setSuperClass@QMetaObjectBuilder@@QAEXPBUQMetaObject@@@Z @ 768 NONAME ABSENT ; void QMetaObjectBuilder::setSuperClass(struct QMetaObject const *) ?contains@QDeclarativePropertyMap@@QBE_NABVQString@@@Z @ 769 NONAME ; bool QDeclarativePropertyMap::contains(class QString const &) const ?setGradient@QDeclarativeRectangle@@QAEXPAVQDeclarativeGradient@@@Z @ 770 NONAME ABSENT ; void QDeclarativeRectangle::setGradient(class QDeclarativeGradient *) - ?metaObject@QDeclarativeTransition@@UBEPBUQMetaObject@@XZ @ 771 NONAME ABSENT ; struct QMetaObject const * QDeclarativeTransition::metaObject(void) const + ?metaObject@QDeclarativeTransition@@UBEPBUQMetaObject@@XZ @ 771 NONAME ; struct QMetaObject const * QDeclarativeTransition::metaObject(void) const ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PBUQMetaObject@@@Z @ 772 NONAME ABSENT ; class QMetaMethod QDeclarativeMetaType::defaultMethod(struct QMetaObject const *) ?tr@QDeclarativeExtensionPlugin@@SA?AVQString@@PBD0H@Z @ 773 NONAME ; class QString QDeclarativeExtensionPlugin::tr(char const *, char const *, int) ?metaObject@QDeclarativeValueType@@UBEPBUQMetaObject@@XZ @ 774 NONAME ABSENT ; struct QMetaObject const * QDeclarativeValueType::metaObject(void) const ?hasNotifySignal@QDeclarativeProperty@@QBE_NXZ @ 775 NONAME ; bool QDeclarativeProperty::hasNotifySignal(void) const ?create@QDeclarativeType@@QBEXPAPAVQObject@@PAPAXI@Z @ 776 NONAME ABSENT ; void QDeclarativeType::create(class QObject * *, void * *, unsigned int) const - ?reversible@QDeclarativeTransition@@QBE_NXZ @ 777 NONAME ABSENT ; bool QDeclarativeTransition::reversible(void) const + ?reversible@QDeclarativeTransition@@QBE_NXZ @ 777 NONAME ; bool QDeclarativeTransition::reversible(void) const ?invalidPacket@QPacketProtocol@@IAEXXZ @ 778 NONAME ABSENT ; void QPacketProtocol::invalidPacket(void) ??0QDeclarativeDebugObjectReference@@QAE@H@Z @ 779 NONAME ABSENT ; QDeclarativeDebugObjectReference::QDeclarativeDebugObjectReference(int) ?superClass@QMetaObjectBuilder@@QBEPBUQMetaObject@@XZ @ 780 NONAME ABSENT ; struct QMetaObject const * QMetaObjectBuilder::superClass(void) const @@ -809,7 +809,7 @@ EXPORTS ?defaultProperty@QDeclarativeMetaType@@SA?AVQMetaProperty@@PAVQObject@@@Z @ 808 NONAME ABSENT ; class QMetaProperty QDeclarativeMetaType::defaultProperty(class QObject *) ?resetHeight@QDeclarativeItemPrivate@@UAEXXZ @ 809 NONAME ; void QDeclarativeItemPrivate::resetHeight(void) ?qt_metacast@QDeclarativeDebugPropertyWatch@@UAEPAXPBD@Z @ 810 NONAME ABSENT ; void * QDeclarativeDebugPropertyWatch::qt_metacast(char const *) - ??1QDeclarativeStateOperation@@UAE@XZ @ 811 NONAME ABSENT ; QDeclarativeStateOperation::~QDeclarativeStateOperation(void) + ??1QDeclarativeStateOperation@@UAE@XZ @ 811 NONAME ; QDeclarativeStateOperation::~QDeclarativeStateOperation(void) ??_EQDeclarativeDebugQuery@@UAE@I@Z @ 812 NONAME ABSENT ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(unsigned int) ?update@QDeclarativeAbstractBinding@@QAEXXZ @ 813 NONAME ABSENT ; void QDeclarativeAbstractBinding::update(void) ?tr@QDeclarativeBehavior@@SA?AVQString@@PBD0H@Z @ 814 NONAME ABSENT ; class QString QDeclarativeBehavior::tr(char const *, char const *, int) @@ -819,12 +819,12 @@ EXPORTS ??0QDeclarativeView@@QAE@ABVQUrl@@PAVQWidget@@@Z @ 818 NONAME ; QDeclarativeView::QDeclarativeView(class QUrl const &, class QWidget *) ?valueChanged@QDeclarativeExpression@@IAEXXZ @ 819 NONAME ; void QDeclarativeExpression::valueChanged(void) ??_EQDeclarativeView@@UAE@I@Z @ 820 NONAME ; QDeclarativeView::~QDeclarativeView(unsigned int) - ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 821 NONAME ABSENT ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *, int) + ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0H@Z @ 821 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *, int) ?tag@QMetaMethodBuilder@@QBE?AVQByteArray@@XZ @ 822 NONAME ABSENT ; class QByteArray QMetaMethodBuilder::tag(void) const ?getStaticMetaObject@QPacketProtocol@@SAABUQMetaObject@@XZ @ 823 NONAME ABSENT ; struct QMetaObject const & QPacketProtocol::getStaticMetaObject(void) ?setContext@QDeclarativeScriptString@@QAEXPAVQDeclarativeContext@@@Z @ 824 NONAME ; void QDeclarativeScriptString::setContext(class QDeclarativeContext *) ?addImageProvider@QDeclarativeEngine@@QAEXABVQString@@PAVQDeclarativeImageProvider@@@Z @ 825 NONAME ; void QDeclarativeEngine::addImageProvider(class QString const &, class QDeclarativeImageProvider *) - ?d_func@QDeclarativeStateGroup@@ABEPBVQDeclarativeStateGroupPrivate@@XZ @ 826 NONAME ABSENT ; class QDeclarativeStateGroupPrivate const * QDeclarativeStateGroup::d_func(void) const + ?d_func@QDeclarativeStateGroup@@ABEPBVQDeclarativeStateGroupPrivate@@XZ @ 826 NONAME ; class QDeclarativeStateGroupPrivate const * QDeclarativeStateGroup::d_func(void) const ?stateChanged@QDeclarativeItem@@IAEXABVQString@@@Z @ 827 NONAME ; void QDeclarativeItem::stateChanged(class QString const &) ?horizontalAlignmentChanged@QDeclarativeText@@IAEXW4HAlignment@1@@Z @ 828 NONAME ABSENT ; void QDeclarativeText::horizontalAlignmentChanged(enum QDeclarativeText::HAlignment) ??5@YAAAVQDataStream@@AAV0@AAUQDeclarativeObjectData@QDeclarativeEngineDebugServer@@@Z @ 829 NONAME ABSENT ; class QDataStream & operator>>(class QDataStream &, struct QDeclarativeEngineDebugServer::QDeclarativeObjectData &) @@ -852,7 +852,7 @@ EXPORTS ?d_func@QDeclarativeDebugService@@ABEPBVQDeclarativeDebugServicePrivate@@XZ @ 851 NONAME ABSENT ; class QDeclarativeDebugServicePrivate const * QDeclarativeDebugService::d_func(void) const ??1QDeclarativeDebugQuery@@UAE@XZ @ 852 NONAME ABSENT ; QDeclarativeDebugQuery::~QDeclarativeDebugQuery(void) ?data_append@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@PAVQObject@@@Z @ 853 NONAME ; void QDeclarativeItemPrivate::data_append(class QDeclarativeListProperty *, class QObject *) - ?tr@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 854 NONAME ABSENT ; class QString QDeclarativeState::tr(char const *, char const *) + ?tr@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 854 NONAME ; class QString QDeclarativeState::tr(char const *, char const *) ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0H@Z @ 855 NONAME ABSENT ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *, int) ?createProperty@QDeclarativeOpenMetaObject@@MAEHPBD0@Z @ 856 NONAME ABSENT ; int QDeclarativeOpenMetaObject::createProperty(char const *, char const *) ?bottomMargin@QDeclarativeAnchors@@QBEMXZ @ 857 NONAME ABSENT ; float QDeclarativeAnchors::bottomMargin(void) const @@ -887,7 +887,7 @@ EXPORTS ?setHeight@QDeclarativeItem@@QAEXM@Z @ 886 NONAME ; void QDeclarativeItem::setHeight(float) ??0QDeclarativeDomDocument@@QAE@ABV0@@Z @ 887 NONAME ABSENT ; QDeclarativeDomDocument::QDeclarativeDomDocument(class QDeclarativeDomDocument const &) ?position@QDeclarativeDomDynamicProperty@@QBEHXZ @ 888 NONAME ABSENT ; int QDeclarativeDomDynamicProperty::position(void) const - ?animations@QDeclarativeTransition@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeAbstractAnimation@@@@XZ @ 889 NONAME ABSENT ; class QDeclarativeListProperty QDeclarativeTransition::animations(void) + ?animations@QDeclarativeTransition@@QAE?AV?$QDeclarativeListProperty@VQDeclarativeAbstractAnimation@@@@XZ @ 889 NONAME ; class QDeclarativeListProperty QDeclarativeTransition::animations(void) ?tr@QDeclarativeExpression@@SA?AVQString@@PBD0H@Z @ 890 NONAME ; class QString QDeclarativeExpression::tr(char const *, char const *, int) ??_EQMetaObjectBuilder@@UAE@I@Z @ 891 NONAME ABSENT ; QMetaObjectBuilder::~QMetaObjectBuilder(unsigned int) ?propertyName@QDeclarativeDomProperty@@QBE?AVQByteArray@@XZ @ 892 NONAME ABSENT ; class QByteArray QDeclarativeDomProperty::propertyName(void) const @@ -906,7 +906,7 @@ EXPORTS ?d_func@QDeclarativeRectangle@@ABEPBVQDeclarativeRectanglePrivate@@XZ @ 905 NONAME ABSENT ; class QDeclarativeRectanglePrivate const * QDeclarativeRectangle::d_func(void) const ?setRightMargin@QDeclarativeAnchors@@QAEXM@Z @ 906 NONAME ABSENT ; void QDeclarativeAnchors::setRightMargin(float) ?className@QMetaObjectBuilder@@QBE?AVQByteArray@@XZ @ 907 NONAME ABSENT ; class QByteArray QMetaObjectBuilder::className(void) const - ??0QDeclarativeState@@QAE@PAVQObject@@@Z @ 908 NONAME ABSENT ; QDeclarativeState::QDeclarativeState(class QObject *) + ??0QDeclarativeState@@QAE@PAVQObject@@@Z @ 908 NONAME ; QDeclarativeState::QDeclarativeState(class QObject *) ?contexts@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugContextReference@@@@XZ @ 909 NONAME ABSENT ; class QList QDeclarativeDebugContextReference::contexts(void) const ?keyReleaseEvent@QDeclarativeItem@@MAEXPAVQKeyEvent@@@Z @ 910 NONAME ; void QDeclarativeItem::keyReleaseEvent(class QKeyEvent *) ?qt_metacall@QDeclarativeAnchors@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 911 NONAME ABSENT ; int QDeclarativeAnchors::qt_metacall(enum QMetaObject::Call, int, void * *) @@ -950,7 +950,7 @@ EXPORTS ?value@QMetaEnumBuilder@@QBEHH@Z @ 949 NONAME ABSENT ; int QMetaEnumBuilder::value(int) const ??_EQDeclarativeExpression@@UAE@I@Z @ 950 NONAME ; QDeclarativeExpression::~QDeclarativeExpression(unsigned int) ?load@QDeclarativeDomDocument@@QAE_NPAVQDeclarativeEngine@@ABVQByteArray@@ABVQUrl@@@Z @ 951 NONAME ABSENT ; bool QDeclarativeDomDocument::load(class QDeclarativeEngine *, class QByteArray const &, class QUrl const &) - ?staticMetaObject@QDeclarativeStateGroup@@2UQMetaObject@@B @ 952 NONAME ABSENT ; struct QMetaObject const QDeclarativeStateGroup::staticMetaObject + ?staticMetaObject@QDeclarativeStateGroup@@2UQMetaObject@@B @ 952 NONAME ; struct QMetaObject const QDeclarativeStateGroup::staticMetaObject ?tr@QDeclarativePropertyMap@@SA?AVQString@@PBD0@Z @ 953 NONAME ; class QString QDeclarativePropertyMap::tr(char const *, char const *) ?verticalCenterChanged@QDeclarativeAnchors@@IAEXXZ @ 954 NONAME ABSENT ; void QDeclarativeAnchors::verticalCenterChanged(void) ?isScriptable@QMetaPropertyBuilder@@QBE_NXZ @ 955 NONAME ABSENT ; bool QMetaPropertyBuilder::isScriptable(void) const @@ -967,11 +967,11 @@ EXPORTS ?d_func@QDeclarativeEngineDebug@@AAEPAVQDeclarativeEngineDebugPrivate@@XZ @ 966 NONAME ABSENT ; class QDeclarativeEngineDebugPrivate * QDeclarativeEngineDebug::d_func(void) ??1QDeclarativeNetworkAccessManagerFactory@@UAE@XZ @ 967 NONAME ; QDeclarativeNetworkAccessManagerFactory::~QDeclarativeNetworkAccessManagerFactory(void) ?textFormatChanged@QDeclarativeText@@IAEXW4TextFormat@1@@Z @ 968 NONAME ABSENT ; void QDeclarativeText::textFormatChanged(enum QDeclarativeText::TextFormat) - ?removeState@QDeclarativeStateGroup@@AAEXPAVQDeclarativeState@@@Z @ 969 NONAME ABSENT ; void QDeclarativeStateGroup::removeState(class QDeclarativeState *) + ?removeState@QDeclarativeStateGroup@@AAEXPAVQDeclarativeState@@@Z @ 969 NONAME ; void QDeclarativeStateGroup::removeState(class QDeclarativeState *) ?qmlTypeName@QDeclarativeType@@QBE?AVQByteArray@@XZ @ 970 NONAME ABSENT ; class QByteArray QDeclarativeType::qmlTypeName(void) const ?tr@QDeclarativeComponent@@SA?AVQString@@PBD0@Z @ 971 NONAME ; class QString QDeclarativeComponent::tr(char const *, char const *) ?isProperty@QDeclarativeProperty@@QBE_NXZ @ 972 NONAME ; bool QDeclarativeProperty::isProperty(void) const - ?states@QDeclarativeStateGroup@@QBE?AV?$QList@PAVQDeclarativeState@@@@XZ @ 973 NONAME ABSENT ; class QList QDeclarativeStateGroup::states(void) const + ?states@QDeclarativeStateGroup@@QBE?AV?$QList@PAVQDeclarativeState@@@@XZ @ 973 NONAME ; class QList QDeclarativeStateGroup::states(void) const ??1QDeclarativeDebugExpressionQuery@@UAE@XZ @ 974 NONAME ABSENT ; QDeclarativeDebugExpressionQuery::~QDeclarativeDebugExpressionQuery(void) ?isValid@QDeclarativeDomObject@@QBE_NXZ @ 975 NONAME ABSENT ; bool QDeclarativeDomObject::isValid(void) const ?staticMetaObject@QDeclarativeAnchors@@2UQMetaObject@@B @ 976 NONAME ABSENT ; struct QMetaObject const QDeclarativeAnchors::staticMetaObject @@ -1001,15 +1001,15 @@ EXPORTS ?setDescription@QDeclarativeError@@QAEXABVQString@@@Z @ 1000 NONAME ; void QDeclarativeError::setDescription(class QString const &) ??0QDeclarativeExpression@@AAE@PAVQDeclarativeContextData@@PAVQObject@@ABVQString@@@Z @ 1001 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContextData *, class QObject *, class QString const &) ??1QDeclarativeOpenMetaObjectType@@UAE@XZ @ 1002 NONAME ABSENT ; QDeclarativeOpenMetaObjectType::~QDeclarativeOpenMetaObjectType(void) - ?setReversible@QDeclarativeTransition@@QAEX_N@Z @ 1003 NONAME ABSENT ; void QDeclarativeTransition::setReversible(bool) + ?setReversible@QDeclarativeTransition@@QAEX_N@Z @ 1003 NONAME ; void QDeclarativeTransition::setReversible(bool) ?notifySignal@QMetaPropertyBuilder@@QBE?AVQMetaMethodBuilder@@XZ @ 1004 NONAME ABSENT ; class QMetaMethodBuilder QMetaPropertyBuilder::notifySignal(void) const ??0QDeclarativeDomList@@QAE@XZ @ 1005 NONAME ABSENT ; QDeclarativeDomList::QDeclarativeDomList(void) ?hasActiveFocus@QDeclarativeItem@@QBE_NXZ @ 1006 NONAME ; bool QDeclarativeItem::hasActiveFocus(void) const ?indexOfSignal@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1007 NONAME ABSENT ; int QMetaObjectBuilder::indexOfSignal(class QByteArray const &) - ?toState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 1008 NONAME ABSENT ; class QString QDeclarativeTransition::toState(void) const + ?toState@QDeclarativeTransition@@QBE?AVQString@@XZ @ 1008 NONAME ; class QString QDeclarativeTransition::toState(void) const ??0QDeclarativeDomDocument@@QAE@XZ @ 1009 NONAME ABSENT ; QDeclarativeDomDocument::QDeclarativeDomDocument(void) - ?setWhen@QDeclarativeState@@QAEXPAVQDeclarativeBinding@@@Z @ 1010 NONAME ABSENT ; void QDeclarativeState::setWhen(class QDeclarativeBinding *) - ?isWhenKnown@QDeclarativeState@@QBE_NXZ @ 1011 NONAME ABSENT ; bool QDeclarativeState::isWhenKnown(void) const + ?setWhen@QDeclarativeState@@QAEXPAVQDeclarativeBinding@@@Z @ 1010 NONAME ; void QDeclarativeState::setWhen(class QDeclarativeBinding *) + ?isWhenKnown@QDeclarativeState@@QBE_NXZ @ 1011 NONAME ; bool QDeclarativeState::isWhenKnown(void) const ?agent@QDeclarativeListModel@@QAEPAVQDeclarativeListModelWorkerAgent@@XZ @ 1012 NONAME ABSENT ; class QDeclarativeListModelWorkerAgent * QDeclarativeListModel::agent(void) ?engine@QDeclarativeExpression@@QBEPAVQDeclarativeEngine@@XZ @ 1013 NONAME ; class QDeclarativeEngine * QDeclarativeExpression::engine(void) const ??_EQDeclarativeDebugWatch@@UAE@I@Z @ 1014 NONAME ABSENT ; QDeclarativeDebugWatch::~QDeclarativeDebugWatch(unsigned int) @@ -1018,10 +1018,10 @@ EXPORTS ?setFill@QDeclarativeAnchors@@QAEXPAVQGraphicsObject@@@Z @ 1017 NONAME ABSENT ; void QDeclarativeAnchors::setFill(class QGraphicsObject *) ?setHAlign@QDeclarativeText@@QAEXW4HAlignment@1@@Z @ 1018 NONAME ABSENT ; void QDeclarativeText::setHAlign(enum QDeclarativeText::HAlignment) ??0QDeclarativeScriptString@@QAE@ABV0@@Z @ 1019 NONAME ; QDeclarativeScriptString::QDeclarativeScriptString(class QDeclarativeScriptString const &) - ?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1020 NONAME ABSENT ; class QString QDeclarativeTransition::trUtf8(char const *, char const *) + ?trUtf8@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1020 NONAME ; class QString QDeclarativeTransition::trUtf8(char const *, char const *) ?metaObject@QDeclarativeDebugRootContextQuery@@UBEPBUQMetaObject@@XZ @ 1021 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugRootContextQuery::metaObject(void) const ?setSignalExpression@QDeclarativePropertyPrivate@@SAPAVQDeclarativeExpression@@ABVQDeclarativeProperty@@PAV2@@Z @ 1022 NONAME ABSENT ; class QDeclarativeExpression * QDeclarativePropertyPrivate::setSignalExpression(class QDeclarativeProperty const &, class QDeclarativeExpression *) - ?reversibleChanged@QDeclarativeTransition@@IAEXXZ @ 1023 NONAME ABSENT ; void QDeclarativeTransition::reversibleChanged(void) + ?reversibleChanged@QDeclarativeTransition@@IAEXXZ @ 1023 NONAME ; void QDeclarativeTransition::reversibleChanged(void) ??4QDeclarativeDomValueValueSource@@QAEAAV0@ABV0@@Z @ 1024 NONAME ABSENT ; class QDeclarativeDomValueValueSource & QDeclarativeDomValueValueSource::operator=(class QDeclarativeDomValueValueSource const &) ?name@QDeclarativeDebugObjectReference@@QBE?AVQString@@XZ @ 1025 NONAME ABSENT ; class QString QDeclarativeDebugObjectReference::name(void) const ?anchorLines@QDeclarativeItemPrivate@@QBEPAUAnchorLines@1@XZ @ 1026 NONAME ; struct QDeclarativeItemPrivate::AnchorLines * QDeclarativeItemPrivate::anchorLines(void) const @@ -1089,7 +1089,7 @@ EXPORTS ??AQDeclarativeOpenMetaObject@@QAEAAVQVariant@@ABVQByteArray@@@Z @ 1088 NONAME ABSENT ; class QVariant & QDeclarativeOpenMetaObject::operator[](class QByteArray const &) ?bottom@QDeclarativeItemPrivate@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1089 NONAME ; class QDeclarativeAnchorLine QDeclarativeItemPrivate::bottom(void) const ?device@QPacketProtocol@@QAEPAVQIODevice@@XZ @ 1090 NONAME ABSENT ; class QIODevice * QPacketProtocol::device(void) - ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1091 NONAME ABSENT ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *) + ?trUtf8@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1091 NONAME ; class QString QDeclarativeStateGroup::trUtf8(char const *, char const *) ?variantFromString@QDeclarativeStringConverters@@YA?AVQVariant@@ABVQString@@HPA_N@Z @ 1092 NONAME ABSENT ; class QVariant QDeclarativeStringConverters::variantFromString(class QString const &, int, bool *) ?metaObject@QDeclarativeComponent@@UBEPBUQMetaObject@@XZ @ 1093 NONAME ; struct QMetaObject const * QDeclarativeComponent::metaObject(void) const ?qmlInfo@@YA?AVQDeclarativeInfo@@PBVQObject@@ABV?$QList@VQDeclarativeError@@@@@Z @ 1094 NONAME ; class QDeclarativeInfo qmlInfo(class QObject const *, class QList const &) @@ -1109,7 +1109,7 @@ EXPORTS ?addMethod@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1108 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addMethod(class QByteArray const &) ??0QDeclarativeDebugFileReference@@QAE@XZ @ 1109 NONAME ABSENT ; QDeclarativeDebugFileReference::QDeclarativeDebugFileReference(void) ?mapFromItem@QDeclarativeItem@@QBE?AVQScriptValue@@ABV2@MM@Z @ 1110 NONAME ; class QScriptValue QDeclarativeItem::mapFromItem(class QScriptValue const &, float, float) const - ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 1111 NONAME ABSENT ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *, int) + ?trUtf8@QDeclarativeStateOperation@@SA?AVQString@@PBD0H@Z @ 1111 NONAME ; class QString QDeclarativeStateOperation::trUtf8(char const *, char const *, int) ?tr@QPacketProtocol@@SA?AVQString@@PBD0H@Z @ 1112 NONAME ABSENT ; class QString QPacketProtocol::tr(char const *, char const *, int) ?d_func@QDeclarativeAnchors@@ABEPBVQDeclarativeAnchorsPrivate@@XZ @ 1113 NONAME ABSENT ; class QDeclarativeAnchorsPrivate const * QDeclarativeAnchors::d_func(void) const ?setNotifySignal@QMetaPropertyBuilder@@QAEXABVQMetaMethodBuilder@@@Z @ 1114 NONAME ABSENT ; void QMetaPropertyBuilder::setNotifySignal(class QMetaMethodBuilder const &) @@ -1122,8 +1122,8 @@ EXPORTS ?qt_metacall@QDeclarativeComponent@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1121 NONAME ; int QDeclarativeComponent::qt_metacall(enum QMetaObject::Call, int, void * *) ?tr@QDeclarativeDebugService@@SA?AVQString@@PBD0H@Z @ 1122 NONAME ABSENT ; class QString QDeclarativeDebugService::tr(char const *, char const *, int) ?staticMetaObject@QDeclarativeEngine@@2UQMetaObject@@B @ 1123 NONAME ; struct QMetaObject const QDeclarativeEngine::staticMetaObject - ?staticMetaObject@QDeclarativeStateOperation@@2UQMetaObject@@B @ 1124 NONAME ABSENT ; struct QMetaObject const QDeclarativeStateOperation::staticMetaObject - ?actions@QDeclarativeStateOperation@@UAE?AV?$QList@VQDeclarativeAction@@@@XZ @ 1125 NONAME ABSENT ; class QList QDeclarativeStateOperation::actions(void) + ?staticMetaObject@QDeclarativeStateOperation@@2UQMetaObject@@B @ 1124 NONAME ; struct QMetaObject const QDeclarativeStateOperation::staticMetaObject + ?actions@QDeclarativeStateOperation@@UAE?AV?$QList@VQDeclarativeAction@@@@XZ @ 1125 NONAME ; class QList QDeclarativeStateOperation::actions(void) ?objectClassName@QDeclarativeDomObject@@QBE?AVQByteArray@@XZ @ 1126 NONAME ABSENT ; class QByteArray QDeclarativeDomObject::objectClassName(void) const ??8QDeclarativeProperty@@QBE_NABV0@@Z @ 1127 NONAME ; bool QDeclarativeProperty::operator==(class QDeclarativeProperty const &) const ??1QDeclarativeDomValue@@QAE@XZ @ 1128 NONAME ABSENT ; QDeclarativeDomValue::~QDeclarativeDomValue(void) @@ -1141,7 +1141,7 @@ EXPORTS ??1QDeclarativeItem@@UAE@XZ @ 1140 NONAME ; QDeclarativeItem::~QDeclarativeItem(void) ?setEnabled@QDeclarativeAbstractBinding@@UAEX_NV?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1141 NONAME ABSENT ; void QDeclarativeAbstractBinding::setEnabled(bool, class QFlags) ?staticMetaObject@QListModelInterface@@2UQMetaObject@@B @ 1142 NONAME ABSENT ; struct QMetaObject const QListModelInterface::staticMetaObject - ?d_func@QDeclarativeTransition@@ABEPBVQDeclarativeTransitionPrivate@@XZ @ 1143 NONAME ABSENT ; class QDeclarativeTransitionPrivate const * QDeclarativeTransition::d_func(void) const + ?d_func@QDeclarativeTransition@@ABEPBVQDeclarativeTransitionPrivate@@XZ @ 1143 NONAME ; class QDeclarativeTransitionPrivate const * QDeclarativeTransition::d_func(void) const ?sourceFile@QDeclarativeExpression@@QBE?AVQString@@XZ @ 1144 NONAME ; class QString QDeclarativeExpression::sourceFile(void) const ??_EQDeclarativeAnchors@@UAE@I@Z @ 1145 NONAME ABSENT ; QDeclarativeAnchors::~QDeclarativeAnchors(unsigned int) ?removeNotifySignal@QMetaPropertyBuilder@@QAEXXZ @ 1146 NONAME ABSENT ; void QMetaPropertyBuilder::removeNotifySignal(void) @@ -1153,7 +1153,7 @@ EXPORTS ?indexOfClassInfo@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1152 NONAME ABSENT ; int QMetaObjectBuilder::indexOfClassInfo(class QByteArray const &) ??0QDeclarativeDomImport@@QAE@ABV0@@Z @ 1153 NONAME ABSENT ; QDeclarativeDomImport::QDeclarativeDomImport(class QDeclarativeDomImport const &) ?width@QDeclarativePen@@QBEHXZ @ 1154 NONAME ABSENT ; int QDeclarativePen::width(void) const - ?d_func@QDeclarativeStateGroup@@AAEPAVQDeclarativeStateGroupPrivate@@XZ @ 1155 NONAME ABSENT ; class QDeclarativeStateGroupPrivate * QDeclarativeStateGroup::d_func(void) + ?d_func@QDeclarativeStateGroup@@AAEPAVQDeclarativeStateGroupPrivate@@XZ @ 1155 NONAME ; class QDeclarativeStateGroupPrivate * QDeclarativeStateGroup::d_func(void) ??6QDeclarativeInfo@@QAEAAV0@P6AAAVQTextStream@@AAV1@@Z@Z @ 1156 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QTextStream & (*)(class QTextStream &)) ?trUtf8@QDeclarativeEngineDebug@@SA?AVQString@@PBD0@Z @ 1157 NONAME ABSENT ; class QString QDeclarativeEngineDebug::trUtf8(char const *, char const *) ?type@QDeclarativeOpenMetaObject@@QBEPAVQDeclarativeOpenMetaObjectType@@XZ @ 1158 NONAME ABSENT ; class QDeclarativeOpenMetaObjectType * QDeclarativeOpenMetaObject::type(void) const @@ -1168,13 +1168,13 @@ EXPORTS ??0QDeclarativeError@@QAE@XZ @ 1167 NONAME ; QDeclarativeError::QDeclarativeError(void) ?hasValue@QDeclarativeOpenMetaObject@@QBE_NH@Z @ 1168 NONAME ABSENT ; bool QDeclarativeOpenMetaObject::hasValue(int) const ?object@QDeclarativeProperty@@QBEPAVQObject@@XZ @ 1169 NONAME ; class QObject * QDeclarativeProperty::object(void) const - ?stateGroup@QDeclarativeState@@QBEPAVQDeclarativeStateGroup@@XZ @ 1170 NONAME ABSENT ; class QDeclarativeStateGroup * QDeclarativeState::stateGroup(void) const + ?stateGroup@QDeclarativeState@@QBEPAVQDeclarativeStateGroup@@XZ @ 1170 NONAME ; class QDeclarativeStateGroup * QDeclarativeState::stateGroup(void) const ?connectNotifySignal@QDeclarativeProperty@@QBE_NPAVQObject@@H@Z @ 1171 NONAME ; bool QDeclarativeProperty::connectNotifySignal(class QObject *, int) const ?focusChanged@QDeclarativeItemPrivate@@UAEX_N@Z @ 1172 NONAME ; void QDeclarativeItemPrivate::focusChanged(bool) ?contextDebugId@QDeclarativeDebugObjectReference@@QBEHXZ @ 1173 NONAME ABSENT ; int QDeclarativeDebugObjectReference::contextDebugId(void) const ?url@QDeclarativeDebugFileReference@@QBE?AVQUrl@@XZ @ 1174 NONAME ABSENT ; class QUrl QDeclarativeDebugFileReference::url(void) const ?paint@QDeclarativeRectangle@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1175 NONAME ABSENT ; void QDeclarativeRectangle::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) - ??6QDeclarativeState@@QAEAAV0@PAVQDeclarativeStateOperation@@@Z @ 1176 NONAME ABSENT ; class QDeclarativeState & QDeclarativeState::operator<<(class QDeclarativeStateOperation *) + ??6QDeclarativeState@@QAEAAV0@PAVQDeclarativeStateOperation@@@Z @ 1176 NONAME ; class QDeclarativeState & QDeclarativeState::operator<<(class QDeclarativeStateOperation *) ?destroy@QDeclarativeAbstractBinding@@UAEXXZ @ 1177 NONAME ABSENT ; void QDeclarativeAbstractBinding::destroy(void) ?qt_metacast@QDeclarativeDebugService@@UAEPAXPBD@Z @ 1178 NONAME ABSENT ; void * QDeclarativeDebugService::qt_metacast(char const *) ?qt_metacast@QDeclarativeValueType@@UAEPAXPBD@Z @ 1179 NONAME ABSENT ; void * QDeclarativeValueType::qt_metacast(char const *) @@ -1190,14 +1190,14 @@ EXPORTS ?d_func@QDeclarativePropertyMap@@AAEPAVQDeclarativePropertyMapPrivate@@XZ @ 1189 NONAME ; class QDeclarativePropertyMapPrivate * QDeclarativePropertyMap::d_func(void) ?trUtf8@QDeclarativeView@@SA?AVQString@@PBD0@Z @ 1190 NONAME ; class QString QDeclarativeView::trUtf8(char const *, char const *) ?rect@QDeclarativePixmap@@QBE?AVQRect@@XZ @ 1191 NONAME ; class QRect QDeclarativePixmap::rect(void) const - ??0QDeclarativeTransition@@QAE@PAVQObject@@@Z @ 1192 NONAME ABSENT ; QDeclarativeTransition::QDeclarativeTransition(class QObject *) + ??0QDeclarativeTransition@@QAE@PAVQObject@@@Z @ 1192 NONAME ; QDeclarativeTransition::QDeclarativeTransition(class QObject *) ?horizontalCenter@QDeclarativeAnchors@@QBE?AVQDeclarativeAnchorLine@@XZ @ 1193 NONAME ABSENT ; class QDeclarativeAnchorLine QDeclarativeAnchors::horizontalCenter(void) const ?setObjectOwnership@QDeclarativeEngine@@SAXPAVQObject@@W4ObjectOwnership@1@@Z @ 1194 NONAME ; void QDeclarativeEngine::setObjectOwnership(class QObject *, enum QDeclarativeEngine::ObjectOwnership) ?tr@QDeclarativeContext@@SA?AVQString@@PBD0H@Z @ 1195 NONAME ; class QString QDeclarativeContext::tr(char const *, char const *, int) ?metaCall@QDeclarativeOpenMetaObject@@MAEHW4Call@QMetaObject@@HPAPAX@Z @ 1196 NONAME ABSENT ; int QDeclarativeOpenMetaObject::metaCall(enum QMetaObject::Call, int, void * *) ??_EQDeclarativeText@@UAE@I@Z @ 1197 NONAME ABSENT ; QDeclarativeText::~QDeclarativeText(unsigned int) ?setLeftMargin@QDeclarativeAnchors@@QAEXM@Z @ 1198 NONAME ABSENT ; void QDeclarativeAnchors::setLeftMargin(float) - ?metaObject@QDeclarativeStateGroup@@UBEPBUQMetaObject@@XZ @ 1199 NONAME ABSENT ; struct QMetaObject const * QDeclarativeStateGroup::metaObject(void) const + ?metaObject@QDeclarativeStateGroup@@UBEPBUQMetaObject@@XZ @ 1199 NONAME ; struct QMetaObject const * QDeclarativeStateGroup::metaObject(void) const ?expression@QDeclarativeAbstractBinding@@UBE?AVQString@@XZ @ 1200 NONAME ABSENT ; class QString QDeclarativeAbstractBinding::expression(void) const ??6QDeclarativeInfo@@QAEAAV0@N@Z @ 1201 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(double) ?setAnimation@QDeclarativeBehavior@@QAEXPAVQDeclarativeAbstractAnimation@@@Z @ 1202 NONAME ABSENT ; void QDeclarativeBehavior::setAnimation(class QDeclarativeAbstractAnimation *) @@ -1210,12 +1210,12 @@ EXPORTS ??0QDeclarativePropertyValueInterceptor@@QAE@XZ @ 1209 NONAME ; QDeclarativePropertyValueInterceptor::QDeclarativePropertyValueInterceptor(void) ?isValid@QDeclarativeError@@QBE_NXZ @ 1210 NONAME ; bool QDeclarativeError::isValid(void) const ??0QMetaMethodBuilder@@QAE@XZ @ 1211 NONAME ABSENT ; QMetaMethodBuilder::QMetaMethodBuilder(void) - ?completed@QDeclarativeState@@IAEXXZ @ 1212 NONAME ABSENT ; void QDeclarativeState::completed(void) + ?completed@QDeclarativeState@@IAEXXZ @ 1212 NONAME ; void QDeclarativeState::completed(void) ?radiusChanged@QDeclarativeRectangle@@IAEXXZ @ 1213 NONAME ABSENT ; void QDeclarativeRectangle::radiusChanged(void) ?getStaticMetaObject@QDeclarativeExpression@@SAABUQMetaObject@@XZ @ 1214 NONAME ; struct QMetaObject const & QDeclarativeExpression::getStaticMetaObject(void) ?gridLeft@QDeclarativeGridScaledImage@@QBEHXZ @ 1215 NONAME ABSENT ; int QDeclarativeGridScaledImage::gridLeft(void) const ?setWritable@QMetaPropertyBuilder@@QAEX_N@Z @ 1216 NONAME ABSENT ; void QMetaPropertyBuilder::setWritable(bool) - ?qt_metacast@QDeclarativeStateGroup@@UAEPAXPBD@Z @ 1217 NONAME ABSENT ; void * QDeclarativeStateGroup::qt_metacast(char const *) + ?qt_metacast@QDeclarativeStateGroup@@UAEPAXPBD@Z @ 1217 NONAME ; void * QDeclarativeStateGroup::qt_metacast(char const *) ?defaultMethod@QDeclarativeMetaType@@SA?AVQMetaMethod@@PAVQObject@@@Z @ 1218 NONAME ABSENT ; class QMetaMethod QDeclarativeMetaType::defaultMethod(class QObject *) ?qt_metacast@QDeclarativeEngineDebug@@UAEPAXPBD@Z @ 1219 NONAME ABSENT ; void * QDeclarativeEngineDebug::qt_metacast(char const *) ?staticMetaObject@QDeclarativeExpression@@2UQMetaObject@@B @ 1220 NONAME ; struct QMetaObject const QDeclarativeExpression::staticMetaObject @@ -1260,10 +1260,10 @@ EXPORTS ?toLiteral@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueLiteral@@XZ @ 1259 NONAME ABSENT ; class QDeclarativeDomValueLiteral QDeclarativeDomValue::toLiteral(void) const ??0QDeclarativeOpenMetaObject@@QAE@PAVQObject@@_N@Z @ 1260 NONAME ABSENT ; QDeclarativeOpenMetaObject::QDeclarativeOpenMetaObject(class QObject *, bool) ?url@QDeclarativeComponent@@QBE?AVQUrl@@XZ @ 1261 NONAME ; class QUrl QDeclarativeComponent::url(void) const - ?componentComplete@QDeclarativeStateGroup@@UAEXXZ @ 1262 NONAME ABSENT ; void QDeclarativeStateGroup::componentComplete(void) + ?componentComplete@QDeclarativeStateGroup@@UAEXXZ @ 1262 NONAME ; void QDeclarativeStateGroup::componentComplete(void) ?setMargins@QDeclarativeAnchors@@QAEXM@Z @ 1263 NONAME ABSENT ; void QDeclarativeAnchors::setMargins(float) ?qt_metacall@QDeclarativeView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1264 NONAME ; int QDeclarativeView::qt_metacall(enum QMetaObject::Call, int, void * *) - ?state@QDeclarativeStateGroup@@QBE?AVQString@@XZ @ 1265 NONAME ABSENT ; class QString QDeclarativeStateGroup::state(void) const + ?state@QDeclarativeStateGroup@@QBE?AVQString@@XZ @ 1265 NONAME ; class QString QDeclarativeStateGroup::state(void) const ??0QDeclarativeDomComponent@@QAE@ABV0@@Z @ 1266 NONAME ABSENT ; QDeclarativeDomComponent::QDeclarativeDomComponent(class QDeclarativeDomComponent const &) ?queryAvailableEngines@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugEnginesQuery@@PAVQObject@@@Z @ 1267 NONAME ABSENT ; class QDeclarativeDebugEnginesQuery * QDeclarativeEngineDebug::queryAvailableEngines(class QObject *) ??_EQDeclarativeItemPrivate@@UAE@I@Z @ 1268 NONAME ; QDeclarativeItemPrivate::~QDeclarativeItemPrivate(unsigned int) @@ -1291,12 +1291,12 @@ EXPORTS ?staticMetaObject@QDeclarativeDebugEnginesQuery@@2UQMetaObject@@B @ 1290 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugEnginesQuery::staticMetaObject ?tr@QDeclarativePixmap@@SA?AVQString@@PBD0@Z @ 1291 NONAME ; class QString QDeclarativePixmap::tr(char const *, char const *) ?isError@QDeclarativeComponent@@QBE_NXZ @ 1292 NONAME ; bool QDeclarativeComponent::isError(void) const - ?qt_metacall@QDeclarativeTransition@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1293 NONAME ABSENT ; int QDeclarativeTransition::qt_metacall(enum QMetaObject::Call, int, void * *) + ?qt_metacall@QDeclarativeTransition@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1293 NONAME ; int QDeclarativeTransition::qt_metacall(enum QMetaObject::Call, int, void * *) ?type@QDeclarativeDomImport@@QBE?AW4Type@1@XZ @ 1294 NONAME ABSENT ; enum QDeclarativeDomImport::Type QDeclarativeDomImport::type(void) const ??1QDeclarativeDebugConnection@@UAE@XZ @ 1295 NONAME ABSENT ; QDeclarativeDebugConnection::~QDeclarativeDebugConnection(void) ?value@QDeclarativeOpenMetaObject@@QBE?AVQVariant@@H@Z @ 1296 NONAME ABSENT ; class QVariant QDeclarativeOpenMetaObject::value(int) const ?tr@QDeclarativeDebugRootContextQuery@@SA?AVQString@@PBD0H@Z @ 1297 NONAME ABSENT ; class QString QDeclarativeDebugRootContextQuery::tr(char const *, char const *, int) - ?setFromState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 1298 NONAME ABSENT ; void QDeclarativeTransition::setFromState(class QString const &) + ?setFromState@QDeclarativeTransition@@QAEXABVQString@@@Z @ 1298 NONAME ; void QDeclarativeTransition::setFromState(class QString const &) ?metaObject@QDeclarativeDebugService@@UBEPBUQMetaObject@@XZ @ 1299 NONAME ABSENT ; struct QMetaObject const * QDeclarativeDebugService::metaObject(void) const ?state@QDeclarativeDebugQuery@@QBE?AW4State@1@XZ @ 1300 NONAME ABSENT ; enum QDeclarativeDebugQuery::State QDeclarativeDebugQuery::state(void) const ?setBottom@QDeclarativeScaleGrid@@QAEXH@Z @ 1301 NONAME ABSENT ; void QDeclarativeScaleGrid::setBottom(int) @@ -1312,7 +1312,7 @@ EXPORTS ?width@QDeclarativeItemPrivate@@UBEMXZ @ 1311 NONAME ; float QDeclarativeItemPrivate::width(void) const ?d_func@QMetaMethodBuilder@@ABEPAVQMetaMethodBuilderPrivate@@XZ @ 1312 NONAME ABSENT ; class QMetaMethodBuilderPrivate * QMetaMethodBuilder::d_func(void) const ?isScript@Variant@QDeclarativeParser@@QBE_NXZ @ 1313 NONAME ; bool QDeclarativeParser::Variant::isScript(void) const - ?classBegin@QDeclarativeStateGroup@@UAEXXZ @ 1314 NONAME ABSENT ; void QDeclarativeStateGroup::classBegin(void) + ?classBegin@QDeclarativeStateGroup@@UAEXXZ @ 1314 NONAME ; void QDeclarativeStateGroup::classBegin(void) ?qt_metacast@QDeclarativeRectangle@@UAEPAXPBD@Z @ 1315 NONAME ABSENT ; void * QDeclarativeRectangle::qt_metacast(char const *) ?qt_metacast@QDeclarativeExpression@@UAEPAXPBD@Z @ 1316 NONAME ; void * QDeclarativeExpression::qt_metacast(char const *) ?indexOfProperty@QMetaObjectBuilder@@QAEHABVQByteArray@@@Z @ 1317 NONAME ABSENT ; int QMetaObjectBuilder::indexOfProperty(class QByteArray const &) @@ -1332,11 +1332,11 @@ EXPORTS ?qt_metacall@QDeclarativeEngine@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1331 NONAME ; int QDeclarativeEngine::qt_metacall(enum QMetaObject::Call, int, void * *) ?getStaticMetaObject@QDeclarativeAnchors@@SAABUQMetaObject@@XZ @ 1332 NONAME ABSENT ; struct QMetaObject const & QDeclarativeAnchors::getStaticMetaObject(void) ??0QDeclarativeProperty@@QAE@PAVQObject@@ABVQString@@@Z @ 1333 NONAME ; QDeclarativeProperty::QDeclarativeProperty(class QObject *, class QString const &) - ?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 1334 NONAME ABSENT ; class QString QDeclarativeState::trUtf8(char const *, char const *) + ?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0@Z @ 1334 NONAME ; class QString QDeclarativeState::trUtf8(char const *, char const *) ?setStaticMetacallFunction@QMetaObjectBuilder@@QAEXP6AHW4Call@QMetaObject@@HPAPAX@Z@Z @ 1335 NONAME ABSENT ; void QMetaObjectBuilder::setStaticMetacallFunction(int (*)(enum QMetaObject::Call, int, void * *)) ?properties@QDeclarativeDomObject@@QBE?AV?$QList@VQDeclarativeDomProperty@@@@XZ @ 1336 NONAME ABSENT ; class QList QDeclarativeDomObject::properties(void) const ??0QDeclarativeExpression@@QAE@PAVQDeclarativeContext@@PAVQObject@@ABVQString@@1@Z @ 1337 NONAME ; QDeclarativeExpression::QDeclarativeExpression(class QDeclarativeContext *, class QObject *, class QString const &, class QObject *) - ?tr@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 1338 NONAME ABSENT ; class QString QDeclarativeTransition::tr(char const *, char const *, int) + ?tr@QDeclarativeTransition@@SA?AVQString@@PBD0H@Z @ 1338 NONAME ; class QString QDeclarativeTransition::tr(char const *, char const *, int) ?dateTimeFromString@QDeclarativeStringConverters@@YA?AVQDateTime@@ABVQString@@PA_N@Z @ 1339 NONAME ABSENT ; class QDateTime QDeclarativeStringConverters::dateTimeFromString(class QString const &, bool *) ?implicitWidth@QDeclarativeItem@@QBEMXZ @ 1340 NONAME ; float QDeclarativeItem::implicitWidth(void) const ?metaObject@QDeclarativeContext@@UBEPBUQMetaObject@@XZ @ 1341 NONAME ; struct QMetaObject const * QDeclarativeContext::metaObject(void) const @@ -1365,7 +1365,7 @@ EXPORTS ?qt_metacast@QDeclarativeDebugEnginesQuery@@UAEPAXPBD@Z @ 1364 NONAME ABSENT ; void * QDeclarativeDebugEnginesQuery::qt_metacast(char const *) ?d_func@QDeclarativeView@@AAEPAVQDeclarativeViewPrivate@@XZ @ 1365 NONAME ; class QDeclarativeViewPrivate * QDeclarativeView::d_func(void) ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugPropertyWatch@@ABVQDeclarativeDebugPropertyReference@@PAVQObject@@@Z @ 1366 NONAME ABSENT ; class QDeclarativeDebugPropertyWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugPropertyReference const &, class QObject *) - ?stateChanged@QDeclarativeStateGroup@@IAEXABVQString@@@Z @ 1367 NONAME ABSENT ; void QDeclarativeStateGroup::stateChanged(class QString const &) + ?stateChanged@QDeclarativeStateGroup@@IAEXABVQString@@@Z @ 1367 NONAME ; void QDeclarativeStateGroup::stateChanged(class QString const &) ??0QDeclarativeDomValueValueSource@@QAE@XZ @ 1368 NONAME ABSENT ; QDeclarativeDomValueValueSource::QDeclarativeDomValueValueSource(void) ?customStringConverter@QDeclarativeMetaType@@SAP6A?AVQVariant@@ABVQString@@@ZH@Z @ 1369 NONAME ABSENT ; class QVariant (*)(class QString const &) QDeclarativeMetaType::customStringConverter(int) ?baselineOffsetChanged@QDeclarativeAnchors@@IAEXXZ @ 1370 NONAME ABSENT ; void QDeclarativeAnchors::baselineOffsetChanged(void) @@ -1388,7 +1388,7 @@ EXPORTS ?writeEnumProperty@QDeclarativePropertyPrivate@@SA_NABVQMetaProperty@@HPAVQObject@@ABVQVariant@@H@Z @ 1387 NONAME ABSENT ; bool QDeclarativePropertyPrivate::writeEnumProperty(class QMetaProperty const &, int, class QObject *, class QVariant const &, int) ?setEnabled@QDeclarativeDebugClient@@QAEX_N@Z @ 1388 NONAME ABSENT ; void QDeclarativeDebugClient::setEnabled(bool) ??1QMetaObjectBuilder@@UAE@XZ @ 1389 NONAME ABSENT ; QMetaObjectBuilder::~QMetaObjectBuilder(void) - ?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 1390 NONAME ABSENT ; class QString QDeclarativeStateOperation::tr(char const *, char const *) + ?tr@QDeclarativeStateOperation@@SA?AVQString@@PBD0@Z @ 1390 NONAME ; class QString QDeclarativeStateOperation::tr(char const *, char const *) ?clear@QPacket@@QAEXXZ @ 1391 NONAME ABSENT ; void QPacket::clear(void) ?getStaticMetaObject@QDeclarativeDebugClient@@SAABUQMetaObject@@XZ @ 1392 NONAME ABSENT ; struct QMetaObject const & QDeclarativeDebugClient::getStaticMetaObject(void) ??0QDeclarativeDomList@@QAE@ABV0@@Z @ 1393 NONAME ABSENT ; QDeclarativeDomList::QDeclarativeDomList(class QDeclarativeDomList const &) @@ -1399,7 +1399,7 @@ EXPORTS ?trUtf8@QDeclarativeDebugWatch@@SA?AVQString@@PBD0@Z @ 1398 NONAME ABSENT ; class QString QDeclarativeDebugWatch::trUtf8(char const *, char const *) ?read@QDeclarativeProperty@@SA?AVQVariant@@PAVQObject@@ABVQString@@@Z @ 1399 NONAME ; class QVariant QDeclarativeProperty::read(class QObject *, class QString const &) ?widthValid@QDeclarativeItem@@IBE_NXZ @ 1400 NONAME ; bool QDeclarativeItem::widthValid(void) const - ?staticMetaObject@QDeclarativeState@@2UQMetaObject@@B @ 1401 NONAME ABSENT ; struct QMetaObject const QDeclarativeState::staticMetaObject + ?staticMetaObject@QDeclarativeState@@2UQMetaObject@@B @ 1401 NONAME ; struct QMetaObject const QDeclarativeState::staticMetaObject ?setAccess@QMetaMethodBuilder@@QAEXW4Access@QMetaMethod@@@Z @ 1402 NONAME ABSENT ; void QMetaMethodBuilder::setAccess(enum QMetaMethod::Access) ??0QDeclarativeAction@@QAE@PAVQObject@@ABVQString@@PAVQDeclarativeContext@@ABVQVariant@@@Z @ 1403 NONAME ABSENT ; QDeclarativeAction::QDeclarativeAction(class QObject *, class QString const &, class QDeclarativeContext *, class QVariant const &) ?staticMetaObject@QDeclarativeDebugClient@@2UQMetaObject@@B @ 1404 NONAME ABSENT ; struct QMetaObject const QDeclarativeDebugClient::staticMetaObject @@ -1433,16 +1433,16 @@ EXPORTS ?key@QMetaEnumBuilder@@QBE?AVQByteArray@@H@Z @ 1432 NONAME ABSENT ; class QByteArray QMetaEnumBuilder::key(int) const ?d_func@QMetaEnumBuilder@@ABEPAVQMetaEnumBuilderPrivate@@XZ @ 1433 NONAME ABSENT ; class QMetaEnumBuilderPrivate * QMetaEnumBuilder::d_func(void) const ??6QDeclarativeInfo@@QAEAAV0@PBD@Z @ 1434 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(char const *) - ?d_func@QDeclarativeState@@AAEPAVQDeclarativeStatePrivate@@XZ @ 1435 NONAME ABSENT ; class QDeclarativeStatePrivate * QDeclarativeState::d_func(void) + ?d_func@QDeclarativeState@@AAEPAVQDeclarativeStatePrivate@@XZ @ 1435 NONAME ; class QDeclarativeStatePrivate * QDeclarativeState::d_func(void) ??0QDeclarativeDebugEnginesQuery@@AAE@PAVQObject@@@Z @ 1436 NONAME ABSENT ; QDeclarativeDebugEnginesQuery::QDeclarativeDebugEnginesQuery(class QObject *) ?bottomChanged@QDeclarativeAnchors@@IAEXXZ @ 1437 NONAME ABSENT ; void QDeclarativeAnchors::bottomChanged(void) ?qListTypeId@QDeclarativeType@@QBEHXZ @ 1438 NONAME ABSENT ; int QDeclarativeType::qListTypeId(void) const ?setSelectedState@QDeclarativeDebuggerStatus@@UAEX_N@Z @ 1439 NONAME ABSENT ; void QDeclarativeDebuggerStatus::setSelectedState(bool) ?staticMetaObject@QDeclarativeEngineDebug@@2UQMetaObject@@B @ 1440 NONAME ABSENT ; struct QMetaObject const QDeclarativeEngineDebug::staticMetaObject - ?setExtends@QDeclarativeState@@QAEXABVQString@@@Z @ 1441 NONAME ABSENT ; void QDeclarativeState::setExtends(class QString const &) + ?setExtends@QDeclarativeState@@QAEXABVQString@@@Z @ 1441 NONAME ; void QDeclarativeState::setExtends(class QString const &) ??4QDeclarativeError@@QAEAAV0@ABV0@@Z @ 1442 NONAME ; class QDeclarativeError & QDeclarativeError::operator=(class QDeclarativeError const &) ?tr@QDeclarativeDebugEnginesQuery@@SA?AVQString@@PBD0H@Z @ 1443 NONAME ABSENT ; class QString QDeclarativeDebugEnginesQuery::tr(char const *, char const *, int) - ?d_func@QDeclarativeTransition@@AAEPAVQDeclarativeTransitionPrivate@@XZ @ 1444 NONAME ABSENT ; class QDeclarativeTransitionPrivate * QDeclarativeTransition::d_func(void) + ?d_func@QDeclarativeTransition@@AAEPAVQDeclarativeTransitionPrivate@@XZ @ 1444 NONAME ; class QDeclarativeTransitionPrivate * QDeclarativeTransition::d_func(void) ?propertyWritten@QDeclarativeOpenMetaObject@@MAEXH@Z @ 1445 NONAME ABSENT ; void QDeclarativeOpenMetaObject::propertyWritten(int) ?trUtf8@QListModelInterface@@SA?AVQString@@PBD0@Z @ 1446 NONAME ABSENT ; class QString QListModelInterface::trUtf8(char const *, char const *) ?setColumnNumber@QDeclarativeDebugFileReference@@QAEXH@Z @ 1447 NONAME ABSENT ; void QDeclarativeDebugFileReference::setColumnNumber(int) @@ -1454,13 +1454,13 @@ EXPORTS ??0QDeclarativeBinding@@QAE@ABVQString@@PAVQObject@@PAVQDeclarativeContext@@1@Z @ 1453 NONAME ABSENT ; QDeclarativeBinding::QDeclarativeBinding(class QString const &, class QObject *, class QDeclarativeContext *, class QObject *) ?tr@QDeclarativeItem@@SA?AVQString@@PBD0@Z @ 1454 NONAME ; class QString QDeclarativeItem::tr(char const *, char const *) ??6QDeclarativeInfo@@QAEAAV0@G@Z @ 1455 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(unsigned short) - ??0QDeclarativeStateOperation@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 1456 NONAME ABSENT ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObjectPrivate &, class QObject *) + ??0QDeclarativeStateOperation@@IAE@AAVQObjectPrivate@@PAVQObject@@@Z @ 1456 NONAME ; QDeclarativeStateOperation::QDeclarativeStateOperation(class QObjectPrivate &, class QObject *) ?notifyOnValueChanged@QDeclarativeExpression@@QBE_NXZ @ 1457 NONAME ; bool QDeclarativeExpression::notifyOnValueChanged(void) const ?keyPressPreHandler@QDeclarativeItem@@IAEXPAVQKeyEvent@@@Z @ 1458 NONAME ; void QDeclarativeItem::keyPressPreHandler(class QKeyEvent *) ?trUtf8@QDeclarativeItem@@SA?AVQString@@PBD0H@Z @ 1459 NONAME ; class QString QDeclarativeItem::trUtf8(char const *, char const *, int) ?addWatch@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugWatch@@ABVQDeclarativeDebugFileReference@@PAVQObject@@@Z @ 1460 NONAME ABSENT ; class QDeclarativeDebugWatch * QDeclarativeEngineDebug::addWatch(class QDeclarativeDebugFileReference const &, class QObject *) ?paintedHeight@QDeclarativeText@@QBEMXZ @ 1461 NONAME ABSENT ; float QDeclarativeText::paintedHeight(void) const - ?tr@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1462 NONAME ABSENT ; class QString QDeclarativeTransition::tr(char const *, char const *) + ?tr@QDeclarativeTransition@@SA?AVQString@@PBD0@Z @ 1462 NONAME ; class QString QDeclarativeTransition::tr(char const *, char const *) ?transform@QDeclarativeItem@@QAE?AV?$QDeclarativeListProperty@VQGraphicsTransform@@@@XZ @ 1463 NONAME ; class QDeclarativeListProperty QDeclarativeItem::transform(void) ?leftChanged@QDeclarativeAnchors@@IAEXXZ @ 1464 NONAME ABSENT ; void QDeclarativeAnchors::leftChanged(void) ?topChanged@QDeclarativeAnchors@@IAEXXZ @ 1465 NONAME ABSENT ; void QDeclarativeAnchors::topChanged(void) @@ -1480,7 +1480,7 @@ EXPORTS ?componentComplete@QDeclarativeItem@@MAEXXZ @ 1479 NONAME ; void QDeclarativeItem::componentComplete(void) ?creationContext@QDeclarativeComponent@@QBEPAVQDeclarativeContext@@XZ @ 1480 NONAME ; class QDeclarativeContext * QDeclarativeComponent::creationContext(void) const ?enabledChanged@QDeclarativeBehavior@@IAEXXZ @ 1481 NONAME ABSENT ; void QDeclarativeBehavior::enabledChanged(void) - ?staticMetaObject@QDeclarativeTransition@@2UQMetaObject@@B @ 1482 NONAME ABSENT ; struct QMetaObject const QDeclarativeTransition::staticMetaObject + ?staticMetaObject@QDeclarativeTransition@@2UQMetaObject@@B @ 1482 NONAME ; struct QMetaObject const QDeclarativeTransition::staticMetaObject ??0QDeclarativeInfo@@AAE@PAVQDeclarativeInfoPrivate@@@Z @ 1483 NONAME ; QDeclarativeInfo::QDeclarativeInfo(class QDeclarativeInfoPrivate *) ?name@QDeclarativeDebugContextReference@@QBE?AVQString@@XZ @ 1484 NONAME ABSENT ; class QString QDeclarativeDebugContextReference::name(void) const ?propertyIndex@QDeclarativeBinding@@UAEHXZ @ 1485 NONAME ABSENT ; int QDeclarativeBinding::propertyIndex(void) @@ -1507,7 +1507,7 @@ EXPORTS ??0QDeclarativeContext@@QAE@PAV0@PAVQObject@@@Z @ 1506 NONAME ; QDeclarativeContext::QDeclarativeContext(class QDeclarativeContext *, class QObject *) ?trUtf8@QDeclarativeDebugConnection@@SA?AVQString@@PBD0@Z @ 1507 NONAME ABSENT ; class QString QDeclarativeDebugConnection::trUtf8(char const *, char const *) ??1QDeclarativeDebugEnginesQuery@@UAE@XZ @ 1508 NONAME ABSENT ; QDeclarativeDebugEnginesQuery::~QDeclarativeDebugEnginesQuery(void) - ?getStaticMetaObject@QDeclarativeTransition@@SAABUQMetaObject@@XZ @ 1509 NONAME ABSENT ; struct QMetaObject const & QDeclarativeTransition::getStaticMetaObject(void) + ?getStaticMetaObject@QDeclarativeTransition@@SAABUQMetaObject@@XZ @ 1509 NONAME ; struct QMetaObject const & QDeclarativeTransition::getStaticMetaObject(void) ?trUtf8@QDeclarativeDebugObjectExpressionWatch@@SA?AVQString@@PBD0H@Z @ 1510 NONAME ABSENT ; class QString QDeclarativeDebugObjectExpressionWatch::trUtf8(char const *, char const *, int) ?metaObject@QDeclarativePropertyMap@@UBEPBUQMetaObject@@XZ @ 1511 NONAME ; struct QMetaObject const * QDeclarativePropertyMap::metaObject(void) const ?componentRoot@QDeclarativeDomComponent@@QBE?AVQDeclarativeDomObject@@XZ @ 1512 NONAME ABSENT ; class QDeclarativeDomObject QDeclarativeDomComponent::componentRoot(void) const @@ -1515,7 +1515,7 @@ EXPORTS ?setTag@QMetaMethodBuilder@@QAEXABVQByteArray@@@Z @ 1514 NONAME ABSENT ; void QMetaMethodBuilder::setTag(class QByteArray const &) ?objects@QDeclarativeDebugContextReference@@QBE?AV?$QList@VQDeclarativeDebugObjectReference@@@@XZ @ 1515 NONAME ABSENT ; class QList QDeclarativeDebugContextReference::objects(void) const ??4Variant@QDeclarativeParser@@QAEAAV01@ABV01@@Z @ 1516 NONAME ; class QDeclarativeParser::Variant & QDeclarativeParser::Variant::operator=(class QDeclarativeParser::Variant const &) - ?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1517 NONAME ABSENT ; class QString QDeclarativeStateGroup::tr(char const *, char const *) + ?tr@QDeclarativeStateGroup@@SA?AVQString@@PBD0@Z @ 1517 NONAME ; class QString QDeclarativeStateGroup::tr(char const *, char const *) ?setScopeObject@QDeclarativeScriptString@@QAEXPAVQObject@@@Z @ 1518 NONAME ; void QDeclarativeScriptString::setScopeObject(class QObject *) ??1QDeclarativeBinding@@MAE@XZ @ 1519 NONAME ABSENT ; QDeclarativeBinding::~QDeclarativeBinding(void) ?importPlugin@QDeclarativeEngine@@QAE_NABVQString@@0PAV2@@Z @ 1520 NONAME ; bool QDeclarativeEngine::importPlugin(class QString const &, class QString const &, class QString *) @@ -1523,7 +1523,7 @@ EXPORTS ?geometryChanged@QDeclarativeItem@@MAEXABVQRectF@@0@Z @ 1522 NONAME ; void QDeclarativeItem::geometryChanged(class QRectF const &, class QRectF const &) ?toValueSource@QDeclarativeDomValue@@QBE?AVQDeclarativeDomValueValueSource@@XZ @ 1523 NONAME ABSENT ; class QDeclarativeDomValueValueSource QDeclarativeDomValue::toValueSource(void) const ?hAlign@QDeclarativeText@@QBE?AW4HAlignment@1@XZ @ 1524 NONAME ABSENT ; enum QDeclarativeText::HAlignment QDeclarativeText::hAlign(void) const - ?when@QDeclarativeState@@QBEPAVQDeclarativeBinding@@XZ @ 1525 NONAME ABSENT ; class QDeclarativeBinding * QDeclarativeState::when(void) const + ?when@QDeclarativeState@@QBEPAVQDeclarativeBinding@@XZ @ 1525 NONAME ; class QDeclarativeBinding * QDeclarativeState::when(void) const ?setRootObject@QDeclarativeView@@MAEXPAVQObject@@@Z @ 1526 NONAME ; void QDeclarativeView::setRootObject(class QObject *) ?resetBottom@QDeclarativeAnchors@@QAEXXZ @ 1527 NONAME ABSENT ; void QDeclarativeAnchors::resetBottom(void) ?qt_metacall@QDeclarativePropertyMap@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1528 NONAME ; int QDeclarativePropertyMap::qt_metacall(enum QMetaObject::Call, int, void * *) @@ -1532,15 +1532,15 @@ EXPORTS ?trUtf8@QDeclarativeDebugQuery@@SA?AVQString@@PBD0@Z @ 1531 NONAME ABSENT ; class QString QDeclarativeDebugQuery::trUtf8(char const *, char const *) ??AQDeclarativeValueTypeFactory@@QBEPAVQDeclarativeValueType@@H@Z @ 1532 NONAME ABSENT ; class QDeclarativeValueType * QDeclarativeValueTypeFactory::operator[](int) const ?siblingOrderChange@QDeclarativeItemPrivate@@UAEXXZ @ 1533 NONAME ; void QDeclarativeItemPrivate::siblingOrderChange(void) - ??1QDeclarativeState@@UAE@XZ @ 1534 NONAME ABSENT ; QDeclarativeState::~QDeclarativeState(void) + ??1QDeclarativeState@@UAE@XZ @ 1534 NONAME ; QDeclarativeState::~QDeclarativeState(void) ?paint@QDeclarativeText@@UAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 1535 NONAME ABSENT ; void QDeclarativeText::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *) - ??1QDeclarativeStateGroup@@UAE@XZ @ 1536 NONAME ABSENT ; QDeclarativeStateGroup::~QDeclarativeStateGroup(void) + ??1QDeclarativeStateGroup@@UAE@XZ @ 1536 NONAME ; QDeclarativeStateGroup::~QDeclarativeStateGroup(void) ?setEditable@QMetaPropertyBuilder@@QAEX_N@Z @ 1537 NONAME ABSENT ; void QMetaPropertyBuilder::setEditable(bool) ?setBinding@QDeclarativePropertyPrivate@@SAPAVQDeclarativeAbstractBinding@@ABVQDeclarativeProperty@@PAV2@V?$QFlags@W4WriteFlag@QDeclarativePropertyPrivate@@@@@Z @ 1538 NONAME ABSENT ; class QDeclarativeAbstractBinding * QDeclarativePropertyPrivate::setBinding(class QDeclarativeProperty const &, class QDeclarativeAbstractBinding *, class QFlags) ?trUtf8@QDeclarativeBinding@@SA?AVQString@@PBD0@Z @ 1539 NONAME ABSENT ; class QString QDeclarativeBinding::trUtf8(char const *, char const *) ?requestSize@QDeclarativePixmap@@QBEABVQSize@@XZ @ 1540 NONAME ; class QSize const & QDeclarativePixmap::requestSize(void) const ?progress@QDeclarativeComponent@@QBEMXZ @ 1541 NONAME ; float QDeclarativeComponent::progress(void) const - ?d_func@QDeclarativeState@@ABEPBVQDeclarativeStatePrivate@@XZ @ 1542 NONAME ABSENT ; class QDeclarativeStatePrivate const * QDeclarativeState::d_func(void) const + ?d_func@QDeclarativeState@@ABEPBVQDeclarativeStatePrivate@@XZ @ 1542 NONAME ; class QDeclarativeStatePrivate const * QDeclarativeState::d_func(void) const ??0QListModelInterface@@QAE@PAVQObject@@@Z @ 1543 NONAME ABSENT ; QListModelInterface::QListModelInterface(class QObject *) ?pointFFromString@QDeclarativeStringConverters@@YA?AVQPointF@@ABVQString@@PA_N@Z @ 1544 NONAME ABSENT ; class QPointF QDeclarativeStringConverters::pointFFromString(class QString const &, bool *) ?propertyCreated@QDeclarativeOpenMetaObject@@MAEXHAAVQMetaPropertyBuilder@@@Z @ 1545 NONAME ABSENT ; void QDeclarativeOpenMetaObject::propertyCreated(int, class QMetaPropertyBuilder &) @@ -1548,7 +1548,7 @@ EXPORTS ?rootObject@QDeclarativeView@@QBEPAVQGraphicsObject@@XZ @ 1547 NONAME ; class QGraphicsObject * QDeclarativeView::rootObject(void) const ?tr@QDeclarativeBinding@@SA?AVQString@@PBD0H@Z @ 1548 NONAME ABSENT ; class QString QDeclarativeBinding::tr(char const *, char const *, int) ?queryObjectRecursive@QDeclarativeEngineDebug@@QAEPAVQDeclarativeDebugObjectQuery@@ABVQDeclarativeDebugObjectReference@@PAVQObject@@@Z @ 1549 NONAME ABSENT ; class QDeclarativeDebugObjectQuery * QDeclarativeEngineDebug::queryObjectRecursive(class QDeclarativeDebugObjectReference const &, class QObject *) - ?prepare@QDeclarativeTransition@@QAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@PAVQDeclarativeTransitionManager@@@Z @ 1550 NONAME ABSENT ; void QDeclarativeTransition::prepare(class QList &, class QList &, class QDeclarativeTransitionManager *) + ?prepare@QDeclarativeTransition@@QAEXAAV?$QList@VQDeclarativeAction@@@@AAV?$QList@VQDeclarativeProperty@@@@PAVQDeclarativeTransitionManager@@@Z @ 1550 NONAME ; void QDeclarativeTransition::prepare(class QList &, class QList &, class QDeclarativeTransitionManager *) ??6QDeclarativeInfo@@QAEAAV0@ABVQUrl@@@Z @ 1551 NONAME ; class QDeclarativeInfo & QDeclarativeInfo::operator<<(class QUrl const &) ?scopeObject@QDeclarativeExpression@@QBEPAVQObject@@XZ @ 1552 NONAME ; class QObject * QDeclarativeExpression::scopeObject(void) const ?isValid@QDeclarativeContext@@QBE_NXZ @ 1553 NONAME ; bool QDeclarativeContext::isValid(void) const @@ -1562,7 +1562,7 @@ EXPORTS ?d_func@QDeclarativeEngine@@AAEPAVQDeclarativeEnginePrivate@@XZ @ 1561 NONAME ; class QDeclarativeEnginePrivate * QDeclarativeEngine::d_func(void) ?staticMetaObject@QDeclarativeRectangle@@2UQMetaObject@@B @ 1562 NONAME ABSENT ; struct QMetaObject const QDeclarativeRectangle::staticMetaObject ?addSignal@QMetaObjectBuilder@@QAE?AVQMetaMethodBuilder@@ABVQByteArray@@@Z @ 1563 NONAME ABSENT ; class QMetaMethodBuilder QMetaObjectBuilder::addSignal(class QByteArray const &) - ?getStaticMetaObject@QDeclarativeStateGroup@@SAABUQMetaObject@@XZ @ 1564 NONAME ABSENT ; struct QMetaObject const & QDeclarativeStateGroup::getStaticMetaObject(void) + ?getStaticMetaObject@QDeclarativeStateGroup@@SAABUQMetaObject@@XZ @ 1564 NONAME ; struct QMetaObject const & QDeclarativeStateGroup::getStaticMetaObject(void) ?childrenRectChanged@QDeclarativeItem@@IAEXABVQRectF@@@Z @ 1565 NONAME ; void QDeclarativeItem::childrenRectChanged(class QRectF const &) ?isDesignable@QDeclarativeProperty@@QBE_NXZ @ 1566 NONAME ; bool QDeclarativeProperty::isDesignable(void) const ?propertyTypeCategory@QDeclarativePropertyPrivate@@QBE?AW4PropertyTypeCategory@QDeclarativeProperty@@XZ @ 1567 NONAME ABSENT ; enum QDeclarativeProperty::PropertyTypeCategory QDeclarativePropertyPrivate::propertyTypeCategory(void) const @@ -1593,8 +1593,8 @@ EXPORTS ?tr@QDeclarativeDebugQuery@@SA?AVQString@@PBD0H@Z @ 1592 NONAME ABSENT ; class QString QDeclarativeDebugQuery::tr(char const *, char const *, int) ??AQDeclarativePropertyMap@@QAEAAVQVariant@@ABVQString@@@Z @ 1593 NONAME ; class QVariant & QDeclarativePropertyMap::operator[](class QString const &) ??0Variant@QDeclarativeParser@@QAE@_N@Z @ 1594 NONAME ; QDeclarativeParser::Variant::Variant(bool) - ?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 1595 NONAME ABSENT ; class QString QDeclarativeState::trUtf8(char const *, char const *, int) - ??0QDeclarativeStateGroup@@QAE@PAVQObject@@@Z @ 1596 NONAME ABSENT ; QDeclarativeStateGroup::QDeclarativeStateGroup(class QObject *) + ?trUtf8@QDeclarativeState@@SA?AVQString@@PBD0H@Z @ 1595 NONAME ; class QString QDeclarativeState::trUtf8(char const *, char const *, int) + ??0QDeclarativeStateGroup@@QAE@PAVQObject@@@Z @ 1596 NONAME ; QDeclarativeStateGroup::QDeclarativeStateGroup(class QObject *) ?count@QDeclarativeListReference@@QBEHXZ @ 1597 NONAME ; int QDeclarativeListReference::count(void) const ?location@QDeclarativeCustomParserProperty@@QBE?AULocation@QDeclarativeParser@@XZ @ 1598 NONAME ; struct QDeclarativeParser::Location QDeclarativeCustomParserProperty::location(void) const ?metaObject@QDeclarativePen@@UBEPBUQMetaObject@@XZ @ 1599 NONAME ABSENT ; struct QMetaObject const * QDeclarativePen::metaObject(void) const @@ -1645,49 +1645,49 @@ EXPORTS ??_EQDeclarativePropertyChanges@@UAE@I@Z @ 1644 NONAME ABSENT ; QDeclarativePropertyChanges::~QDeclarativePropertyChanges(unsigned int) ?setObject@QDeclarativePropertyChanges@@QAEXPAVQObject@@@Z @ 1645 NONAME ABSENT ; void QDeclarativePropertyChanges::setObject(class QObject *) ?staticMetaObject@QDeclarativePropertyChanges@@2UQMetaObject@@B @ 1646 NONAME ABSENT ; struct QMetaObject const QDeclarativePropertyChanges::staticMetaObject - ?removeEntryFromRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@@Z @ 1647 NONAME ABSENT ; bool QDeclarativeState::removeEntryFromRevertList(class QObject *, class QByteArray const &) + ?removeEntryFromRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@@Z @ 1647 NONAME ; bool QDeclarativeState::removeEntryFromRevertList(class QObject *, class QByteArray const &) ?restoreEntryValues@QDeclarativePropertyChanges@@QBE_NXZ @ 1648 NONAME ABSENT ; bool QDeclarativePropertyChanges::restoreEntryValues(void) const ?setRestoreEntryValues@QDeclarativePropertyChanges@@QAEX_N@Z @ 1649 NONAME ABSENT ; void QDeclarativePropertyChanges::setRestoreEntryValues(bool) ?changeValue@QDeclarativePropertyChanges@@QAEXABVQByteArray@@ABVQVariant@@@Z @ 1650 NONAME ABSENT ; void QDeclarativePropertyChanges::changeValue(class QByteArray const &, class QVariant const &) ?metaObject@QDeclarativePropertyChanges@@UBEPBUQMetaObject@@XZ @ 1651 NONAME ABSENT ; struct QMetaObject const * QDeclarativePropertyChanges::metaObject(void) const ?data_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1652 NONAME ; void QDeclarativeItemPrivate::data_clear(class QDeclarativeListProperty *) - ?containsPropertyInRevertList@QDeclarativeState@@QBE_NPAVQObject@@ABVQByteArray@@@Z @ 1653 NONAME ABSENT ; bool QDeclarativeState::containsPropertyInRevertList(class QObject *, class QByteArray const &) const + ?containsPropertyInRevertList@QDeclarativeState@@QBE_NPAVQObject@@ABVQByteArray@@@Z @ 1653 NONAME ; bool QDeclarativeState::containsPropertyInRevertList(class QObject *, class QByteArray const &) const ?containsValue@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1654 NONAME ABSENT ; bool QDeclarativePropertyChanges::containsValue(class QByteArray const &) const - ?bindingInRevertList@QDeclarativeState@@QBEPAVQDeclarativeAbstractBinding@@PAVQObject@@ABVQByteArray@@@Z @ 1655 NONAME ABSENT ; class QDeclarativeAbstractBinding * QDeclarativeState::bindingInRevertList(class QObject *, class QByteArray const &) const + ?bindingInRevertList@QDeclarativeState@@QBEPAVQDeclarativeAbstractBinding@@PAVQObject@@ABVQByteArray@@@Z @ 1655 NONAME ; class QDeclarativeAbstractBinding * QDeclarativeState::bindingInRevertList(class QObject *, class QByteArray const &) const ?d_func@QDeclarativePropertyChanges@@ABEPBVQDeclarativePropertyChangesPrivate@@XZ @ 1656 NONAME ABSENT ; class QDeclarativePropertyChangesPrivate const * QDeclarativePropertyChanges::d_func(void) const ?containsProperty@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1657 NONAME ABSENT ; bool QDeclarativePropertyChanges::containsProperty(class QByteArray const &) const ?trUtf8@QDeclarativePropertyChanges@@SA?AVQString@@PBD0H@Z @ 1658 NONAME ABSENT ; class QString QDeclarativePropertyChanges::trUtf8(char const *, char const *, int) ?property@QDeclarativePropertyChanges@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 1659 NONAME ABSENT ; class QVariant QDeclarativePropertyChanges::property(class QByteArray const &) const ?containsExpression@QDeclarativePropertyChanges@@QBE_NABVQByteArray@@@Z @ 1660 NONAME ABSENT ; bool QDeclarativePropertyChanges::containsExpression(class QByteArray const &) const - ?d_func@QDeclarativeStateOperation@@ABEPBVQDeclarativeStateOperationPrivate@@XZ @ 1661 NONAME ABSENT ; class QDeclarativeStateOperationPrivate const * QDeclarativeStateOperation::d_func(void) const + ?d_func@QDeclarativeStateOperation@@ABEPBVQDeclarativeStateOperationPrivate@@XZ @ 1661 NONAME ; class QDeclarativeStateOperationPrivate const * QDeclarativeStateOperation::d_func(void) const ?d_func@QDeclarativePropertyChanges@@AAEPAVQDeclarativePropertyChangesPrivate@@XZ @ 1662 NONAME ABSENT ; class QDeclarativePropertyChangesPrivate * QDeclarativePropertyChanges::d_func(void) - ?state@QDeclarativeStateOperation@@QBEPAVQDeclarativeState@@XZ @ 1663 NONAME ABSENT ; class QDeclarativeState * QDeclarativeStateOperation::state(void) const + ?state@QDeclarativeStateOperation@@QBEPAVQDeclarativeState@@XZ @ 1663 NONAME ; class QDeclarativeState * QDeclarativeStateOperation::state(void) const ?value@QDeclarativePropertyChanges@@QBE?AVQVariant@@ABVQByteArray@@@Z @ 1664 NONAME ABSENT ; class QVariant QDeclarativePropertyChanges::value(class QByteArray const &) const ?qt_metacall@QDeclarativePropertyChanges@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 1665 NONAME ABSENT ; int QDeclarativePropertyChanges::qt_metacall(enum QMetaObject::Call, int, void * *) ?trUtf8@QDeclarativePropertyChanges@@SA?AVQString@@PBD0@Z @ 1666 NONAME ABSENT ; class QString QDeclarativePropertyChanges::trUtf8(char const *, char const *) ?attachToState@QDeclarativePropertyChanges@@QAEXXZ @ 1667 NONAME ABSENT ; void QDeclarativePropertyChanges::attachToState(void) ?changeExpression@QDeclarativePropertyChanges@@QAEXABVQByteArray@@ABVQString@@@Z @ 1668 NONAME ABSENT ; void QDeclarativePropertyChanges::changeExpression(class QByteArray const &, class QString const &) - ?addEntryToRevertList@QDeclarativeState@@QAEXABVQDeclarativeAction@@@Z @ 1669 NONAME ABSENT ; void QDeclarativeState::addEntryToRevertList(class QDeclarativeAction const &) + ?addEntryToRevertList@QDeclarativeState@@QAEXABVQDeclarativeAction@@@Z @ 1669 NONAME ; void QDeclarativeState::addEntryToRevertList(class QDeclarativeAction const &) ??0QDeclarativePropertyChanges@@QAE@XZ @ 1670 NONAME ABSENT ; QDeclarativePropertyChanges::QDeclarativePropertyChanges(void) ?resources_clear@QDeclarativeItemPrivate@@SAXPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1671 NONAME ; void QDeclarativeItemPrivate::resources_clear(class QDeclarativeListProperty *) ?isExplicit@QDeclarativePropertyChanges@@QBE_NXZ @ 1672 NONAME ABSENT ; bool QDeclarativePropertyChanges::isExplicit(void) const - ?setState@QDeclarativeStateOperation@@QAEXPAVQDeclarativeState@@@Z @ 1673 NONAME ABSENT ; void QDeclarativeStateOperation::setState(class QDeclarativeState *) + ?setState@QDeclarativeStateOperation@@QAEXPAVQDeclarativeState@@@Z @ 1673 NONAME ; void QDeclarativeStateOperation::setState(class QDeclarativeState *) ?detachFromState@QDeclarativePropertyChanges@@QAEXXZ @ 1674 NONAME ABSENT ; void QDeclarativePropertyChanges::detachFromState(void) ?tr@QDeclarativePropertyChanges@@SA?AVQString@@PBD0H@Z @ 1675 NONAME ABSENT ; class QString QDeclarativePropertyChanges::tr(char const *, char const *, int) - ?addEntriesToRevertList@QDeclarativeState@@QAEXABV?$QList@VQDeclarativeAction@@@@@Z @ 1676 NONAME ABSENT ; void QDeclarativeState::addEntriesToRevertList(class QList const &) + ?addEntriesToRevertList@QDeclarativeState@@QAEXABV?$QList@VQDeclarativeAction@@@@@Z @ 1676 NONAME ; void QDeclarativeState::addEntriesToRevertList(class QList const &) ?expression@QDeclarativePropertyChanges@@QBE?AVQString@@ABVQByteArray@@@Z @ 1677 NONAME ABSENT ; class QString QDeclarativePropertyChanges::expression(class QByteArray const &) const ?object@QDeclarativePropertyChanges@@QBEPAVQObject@@XZ @ 1678 NONAME ABSENT ; class QObject * QDeclarativePropertyChanges::object(void) const - ?valueInRevertList@QDeclarativeState@@QBE?AVQVariant@@PAVQObject@@ABVQByteArray@@@Z @ 1679 NONAME ABSENT ; class QVariant QDeclarativeState::valueInRevertList(class QObject *, class QByteArray const &) const - ?removeAllEntriesFromRevertList@QDeclarativeState@@QAEXPAVQObject@@@Z @ 1680 NONAME ABSENT ; void QDeclarativeState::removeAllEntriesFromRevertList(class QObject *) - ?d_func@QDeclarativeStateOperation@@AAEPAVQDeclarativeStateOperationPrivate@@XZ @ 1681 NONAME ABSENT ; class QDeclarativeStateOperationPrivate * QDeclarativeStateOperation::d_func(void) - ?changeValueInRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@ABVQVariant@@@Z @ 1682 NONAME ABSENT ; bool QDeclarativeState::changeValueInRevertList(class QObject *, class QByteArray const &, class QVariant const &) + ?valueInRevertList@QDeclarativeState@@QBE?AVQVariant@@PAVQObject@@ABVQByteArray@@@Z @ 1679 NONAME ; class QVariant QDeclarativeState::valueInRevertList(class QObject *, class QByteArray const &) const + ?removeAllEntriesFromRevertList@QDeclarativeState@@QAEXPAVQObject@@@Z @ 1680 NONAME ; void QDeclarativeState::removeAllEntriesFromRevertList(class QObject *) + ?d_func@QDeclarativeStateOperation@@AAEPAVQDeclarativeStateOperationPrivate@@XZ @ 1681 NONAME ; class QDeclarativeStateOperationPrivate * QDeclarativeStateOperation::d_func(void) + ?changeValueInRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@ABVQVariant@@@Z @ 1682 NONAME ; bool QDeclarativeState::changeValueInRevertList(class QObject *, class QByteArray const &, class QVariant const &) ?setIsExplicit@QDeclarativePropertyChanges@@QAEX_N@Z @ 1683 NONAME ABSENT ; void QDeclarativePropertyChanges::setIsExplicit(bool) - ?isStateActive@QDeclarativeState@@QBE_NXZ @ 1684 NONAME ABSENT ; bool QDeclarativeState::isStateActive(void) const + ?isStateActive@QDeclarativeState@@QBE_NXZ @ 1684 NONAME ; bool QDeclarativeState::isStateActive(void) const ?data_count@QDeclarativeItemPrivate@@SAHPAV?$QDeclarativeListProperty@VQObject@@@@@Z @ 1685 NONAME ; int QDeclarativeItemPrivate::data_count(class QDeclarativeListProperty *) ?removeProperty@QDeclarativePropertyChanges@@QAEXABVQByteArray@@@Z @ 1686 NONAME ABSENT ; void QDeclarativePropertyChanges::removeProperty(class QByteArray const &) ?data_at@QDeclarativeItemPrivate@@SAPAVQObject@@PAV?$QDeclarativeListProperty@VQObject@@@@H@Z @ 1687 NONAME ; class QObject * QDeclarativeItemPrivate::data_at(class QDeclarativeListProperty *, int) ?tr@QDeclarativePropertyChanges@@SA?AVQString@@PBD0@Z @ 1688 NONAME ABSENT ; class QString QDeclarativePropertyChanges::tr(char const *, char const *) - ?changeBindingInRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@PAVQDeclarativeAbstractBinding@@@Z @ 1689 NONAME ABSENT ; bool QDeclarativeState::changeBindingInRevertList(class QObject *, class QByteArray const &, class QDeclarativeAbstractBinding *) + ?changeBindingInRevertList@QDeclarativeState@@QAE_NPAVQObject@@ABVQByteArray@@PAVQDeclarativeAbstractBinding@@@Z @ 1689 NONAME ; bool QDeclarativeState::changeBindingInRevertList(class QObject *, class QByteArray const &, class QDeclarativeAbstractBinding *) ?getStaticMetaObject@QDeclarativePropertyChanges@@SAABUQMetaObject@@XZ @ 1690 NONAME ABSENT ; struct QMetaObject const & QDeclarativePropertyChanges::getStaticMetaObject(void) ?weakPointer@QDeclarativeAbstractBinding@@QAE?AV?$QWeakPointer@VQDeclarativeAbstractBinding@@@@XZ @ 1691 NONAME ABSENT ; class QWeakPointer QDeclarativeAbstractBinding::weakPointer(void) ?getStaticMetaObject@QDeclarativeScriptAction@@SAABUQMetaObject@@XZ @ 1692 NONAME ABSENT ; struct QMetaObject const & QDeclarativeScriptAction::getStaticMetaObject(void) diff --git a/src/s60installs/eabi/QtDeclarativeu.def b/src/s60installs/eabi/QtDeclarativeu.def index 33c3d53..849ca6a 100644 --- a/src/s60installs/eabi/QtDeclarativeu.def +++ b/src/s60installs/eabi/QtDeclarativeu.def @@ -170,24 +170,24 @@ EXPORTS _ZN17QDeclarativeErrorD1Ev @ 169 NONAME _ZN17QDeclarativeErrorD2Ev @ 170 NONAME _ZN17QDeclarativeErroraSERKS_ @ 171 NONAME - _ZN17QDeclarativeState10setExtendsERK7QString @ 172 NONAME ABSENT - _ZN17QDeclarativeState11qt_metacallEN11QMetaObject4CallEiPPv @ 173 NONAME ABSENT - _ZN17QDeclarativeState11qt_metacastEPKc @ 174 NONAME ABSENT - _ZN17QDeclarativeState13setStateGroupEP22QDeclarativeStateGroup @ 175 NONAME ABSENT - _ZN17QDeclarativeState16staticMetaObjectE @ 176 NONAME DATA 16 ABSENT - _ZN17QDeclarativeState19getStaticMetaObjectEv @ 177 NONAME ABSENT - _ZN17QDeclarativeState5applyEP22QDeclarativeStateGroupP22QDeclarativeTransitionPS_ @ 178 NONAME ABSENT - _ZN17QDeclarativeState6cancelEv @ 179 NONAME ABSENT - _ZN17QDeclarativeState7changesEv @ 180 NONAME ABSENT - _ZN17QDeclarativeState7setNameERK7QString @ 181 NONAME ABSENT - _ZN17QDeclarativeState7setWhenEP19QDeclarativeBinding @ 182 NONAME ABSENT - _ZN17QDeclarativeState9completedEv @ 183 NONAME ABSENT - _ZN17QDeclarativeStateC1EP7QObject @ 184 NONAME ABSENT - _ZN17QDeclarativeStateC2EP7QObject @ 185 NONAME ABSENT - _ZN17QDeclarativeStateD0Ev @ 186 NONAME ABSENT - _ZN17QDeclarativeStateD1Ev @ 187 NONAME ABSENT - _ZN17QDeclarativeStateD2Ev @ 188 NONAME ABSENT - _ZN17QDeclarativeStatelsEP26QDeclarativeStateOperation @ 189 NONAME ABSENT + _ZN17QDeclarativeState10setExtendsERK7QString @ 172 NONAME + _ZN17QDeclarativeState11qt_metacallEN11QMetaObject4CallEiPPv @ 173 NONAME + _ZN17QDeclarativeState11qt_metacastEPKc @ 174 NONAME + _ZN17QDeclarativeState13setStateGroupEP22QDeclarativeStateGroup @ 175 NONAME + _ZN17QDeclarativeState16staticMetaObjectE @ 176 NONAME DATA 16 + _ZN17QDeclarativeState19getStaticMetaObjectEv @ 177 NONAME + _ZN17QDeclarativeState5applyEP22QDeclarativeStateGroupP22QDeclarativeTransitionPS_ @ 178 NONAME + _ZN17QDeclarativeState6cancelEv @ 179 NONAME + _ZN17QDeclarativeState7changesEv @ 180 NONAME + _ZN17QDeclarativeState7setNameERK7QString @ 181 NONAME + _ZN17QDeclarativeState7setWhenEP19QDeclarativeBinding @ 182 NONAME + _ZN17QDeclarativeState9completedEv @ 183 NONAME + _ZN17QDeclarativeStateC1EP7QObject @ 184 NONAME + _ZN17QDeclarativeStateC2EP7QObject @ 185 NONAME + _ZN17QDeclarativeStateD0Ev @ 186 NONAME + _ZN17QDeclarativeStateD1Ev @ 187 NONAME + _ZN17QDeclarativeStateD2Ev @ 188 NONAME + _ZN17QDeclarativeStatelsEP26QDeclarativeStateOperation @ 189 NONAME _ZN18QDeclarativeAction17deleteFromBindingEv @ 190 NONAME ABSENT _ZN18QDeclarativeActionC1EP7QObjectRK7QStringP19QDeclarativeContextRK8QVariant @ 191 NONAME ABSENT _ZN18QDeclarativeActionC1EP7QObjectRK7QStringRK8QVariant @ 192 NONAME ABSENT @@ -637,42 +637,42 @@ EXPORTS _ZN22QDeclarativeExpressionD0Ev @ 636 NONAME _ZN22QDeclarativeExpressionD1Ev @ 637 NONAME _ZN22QDeclarativeExpressionD2Ev @ 638 NONAME - _ZN22QDeclarativeStateGroup10classBeginEv @ 639 NONAME ABSENT - _ZN22QDeclarativeStateGroup11qt_metacallEN11QMetaObject4CallEiPPv @ 640 NONAME ABSENT - _ZN22QDeclarativeStateGroup11qt_metacastEPKc @ 641 NONAME ABSENT - _ZN22QDeclarativeStateGroup11removeStateEP17QDeclarativeState @ 642 NONAME ABSENT - _ZN22QDeclarativeStateGroup12stateChangedERK7QString @ 643 NONAME ABSENT - _ZN22QDeclarativeStateGroup14statesPropertyEv @ 644 NONAME ABSENT - _ZN22QDeclarativeStateGroup15updateAutoStateEv @ 645 NONAME ABSENT - _ZN22QDeclarativeStateGroup16staticMetaObjectE @ 646 NONAME DATA 16 ABSENT - _ZN22QDeclarativeStateGroup17componentCompleteEv @ 647 NONAME ABSENT - _ZN22QDeclarativeStateGroup19getStaticMetaObjectEv @ 648 NONAME ABSENT - _ZN22QDeclarativeStateGroup19transitionsPropertyEv @ 649 NONAME ABSENT - _ZN22QDeclarativeStateGroup8setStateERK7QString @ 650 NONAME ABSENT - _ZN22QDeclarativeStateGroupC1EP7QObject @ 651 NONAME ABSENT - _ZN22QDeclarativeStateGroupC2EP7QObject @ 652 NONAME ABSENT - _ZN22QDeclarativeStateGroupD0Ev @ 653 NONAME ABSENT - _ZN22QDeclarativeStateGroupD1Ev @ 654 NONAME ABSENT - _ZN22QDeclarativeStateGroupD2Ev @ 655 NONAME ABSENT - _ZN22QDeclarativeTransition10animationsEv @ 656 NONAME ABSENT - _ZN22QDeclarativeTransition10setToStateERK7QString @ 657 NONAME ABSENT - _ZN22QDeclarativeTransition11fromChangedEv @ 658 NONAME ABSENT - _ZN22QDeclarativeTransition11qt_metacallEN11QMetaObject4CallEiPPv @ 659 NONAME ABSENT - _ZN22QDeclarativeTransition11qt_metacastEPKc @ 660 NONAME ABSENT - _ZN22QDeclarativeTransition11setReversedEb @ 661 NONAME ABSENT - _ZN22QDeclarativeTransition12setFromStateERK7QString @ 662 NONAME ABSENT - _ZN22QDeclarativeTransition13setReversibleEb @ 663 NONAME ABSENT - _ZN22QDeclarativeTransition16staticMetaObjectE @ 664 NONAME DATA 16 ABSENT - _ZN22QDeclarativeTransition17reversibleChangedEv @ 665 NONAME ABSENT - _ZN22QDeclarativeTransition19getStaticMetaObjectEv @ 666 NONAME ABSENT - _ZN22QDeclarativeTransition4stopEv @ 667 NONAME ABSENT - _ZN22QDeclarativeTransition7prepareER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyEP29QDeclarativeTransitionManager @ 668 NONAME ABSENT - _ZN22QDeclarativeTransition9toChangedEv @ 669 NONAME ABSENT - _ZN22QDeclarativeTransitionC1EP7QObject @ 670 NONAME ABSENT - _ZN22QDeclarativeTransitionC2EP7QObject @ 671 NONAME ABSENT - _ZN22QDeclarativeTransitionD0Ev @ 672 NONAME ABSENT - _ZN22QDeclarativeTransitionD1Ev @ 673 NONAME ABSENT - _ZN22QDeclarativeTransitionD2Ev @ 674 NONAME ABSENT + _ZN22QDeclarativeStateGroup10classBeginEv @ 639 NONAME + _ZN22QDeclarativeStateGroup11qt_metacallEN11QMetaObject4CallEiPPv @ 640 NONAME + _ZN22QDeclarativeStateGroup11qt_metacastEPKc @ 641 NONAME + _ZN22QDeclarativeStateGroup11removeStateEP17QDeclarativeState @ 642 NONAME + _ZN22QDeclarativeStateGroup12stateChangedERK7QString @ 643 NONAME + _ZN22QDeclarativeStateGroup14statesPropertyEv @ 644 NONAME + _ZN22QDeclarativeStateGroup15updateAutoStateEv @ 645 NONAME + _ZN22QDeclarativeStateGroup16staticMetaObjectE @ 646 NONAME DATA 16 + _ZN22QDeclarativeStateGroup17componentCompleteEv @ 647 NONAME + _ZN22QDeclarativeStateGroup19getStaticMetaObjectEv @ 648 NONAME + _ZN22QDeclarativeStateGroup19transitionsPropertyEv @ 649 NONAME + _ZN22QDeclarativeStateGroup8setStateERK7QString @ 650 NONAME + _ZN22QDeclarativeStateGroupC1EP7QObject @ 651 NONAME + _ZN22QDeclarativeStateGroupC2EP7QObject @ 652 NONAME + _ZN22QDeclarativeStateGroupD0Ev @ 653 NONAME + _ZN22QDeclarativeStateGroupD1Ev @ 654 NONAME + _ZN22QDeclarativeStateGroupD2Ev @ 655 NONAME + _ZN22QDeclarativeTransition10animationsEv @ 656 NONAME + _ZN22QDeclarativeTransition10setToStateERK7QString @ 657 NONAME + _ZN22QDeclarativeTransition11fromChangedEv @ 658 NONAME + _ZN22QDeclarativeTransition11qt_metacallEN11QMetaObject4CallEiPPv @ 659 NONAME + _ZN22QDeclarativeTransition11qt_metacastEPKc @ 660 NONAME + _ZN22QDeclarativeTransition11setReversedEb @ 661 NONAME + _ZN22QDeclarativeTransition12setFromStateERK7QString @ 662 NONAME + _ZN22QDeclarativeTransition13setReversibleEb @ 663 NONAME + _ZN22QDeclarativeTransition16staticMetaObjectE @ 664 NONAME DATA 16 + _ZN22QDeclarativeTransition17reversibleChangedEv @ 665 NONAME + _ZN22QDeclarativeTransition19getStaticMetaObjectEv @ 666 NONAME + _ZN22QDeclarativeTransition4stopEv @ 667 NONAME + _ZN22QDeclarativeTransition7prepareER5QListI18QDeclarativeActionERS0_I20QDeclarativePropertyEP29QDeclarativeTransitionManager @ 668 NONAME + _ZN22QDeclarativeTransition9toChangedEv @ 669 NONAME + _ZN22QDeclarativeTransitionC1EP7QObject @ 670 NONAME + _ZN22QDeclarativeTransitionC2EP7QObject @ 671 NONAME + _ZN22QDeclarativeTransitionD0Ev @ 672 NONAME + _ZN22QDeclarativeTransitionD1Ev @ 673 NONAME + _ZN22QDeclarativeTransitionD2Ev @ 674 NONAME _ZN23QDeclarativeDebugClient10setEnabledEb @ 675 NONAME ABSENT _ZN23QDeclarativeDebugClient11qt_metacallEN11QMetaObject4CallEiPPv @ 676 NONAME ABSENT _ZN23QDeclarativeDebugClient11qt_metacastEPKc @ 677 NONAME ABSENT @@ -835,13 +835,13 @@ EXPORTS _ZN26QDeclarativeOpenMetaObjectD2Ev @ 834 NONAME ABSENT _ZN26QDeclarativeOpenMetaObjectixERK10QByteArray @ 835 NONAME ABSENT _ZN26QDeclarativeOpenMetaObjectixEi @ 836 NONAME ABSENT - _ZN26QDeclarativeStateOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 837 NONAME ABSENT - _ZN26QDeclarativeStateOperation11qt_metacastEPKc @ 838 NONAME ABSENT - _ZN26QDeclarativeStateOperation16staticMetaObjectE @ 839 NONAME DATA 16 ABSENT - _ZN26QDeclarativeStateOperation19getStaticMetaObjectEv @ 840 NONAME ABSENT - _ZN26QDeclarativeStateOperation7actionsEv @ 841 NONAME ABSENT - _ZN26QDeclarativeStateOperationC1ER14QObjectPrivateP7QObject @ 842 NONAME ABSENT - _ZN26QDeclarativeStateOperationC2ER14QObjectPrivateP7QObject @ 843 NONAME ABSENT + _ZN26QDeclarativeStateOperation11qt_metacallEN11QMetaObject4CallEiPPv @ 837 NONAME + _ZN26QDeclarativeStateOperation11qt_metacastEPKc @ 838 NONAME + _ZN26QDeclarativeStateOperation16staticMetaObjectE @ 839 NONAME DATA 16 + _ZN26QDeclarativeStateOperation19getStaticMetaObjectEv @ 840 NONAME + _ZN26QDeclarativeStateOperation7actionsEv @ 841 NONAME + _ZN26QDeclarativeStateOperationC1ER14QObjectPrivateP7QObject @ 842 NONAME + _ZN26QDeclarativeStateOperationC2ER14QObjectPrivateP7QObject @ 843 NONAME _ZN27QDeclarativeAbstractBinding10setEnabledEb6QFlagsIN27QDeclarativePropertyPrivate9WriteFlagEE @ 844 NONAME ABSENT _ZN27QDeclarativeAbstractBinding11addToObjectEP7QObject @ 845 NONAME ABSENT _ZN27QDeclarativeAbstractBinding16removeFromObjectEv @ 846 NONAME ABSENT @@ -1156,15 +1156,15 @@ EXPORTS _ZNK17QDeclarativeError6columnEv @ 1155 NONAME _ZNK17QDeclarativeError7isValidEv @ 1156 NONAME _ZNK17QDeclarativeError8toStringEv @ 1157 NONAME - _ZNK17QDeclarativeState10metaObjectEv @ 1158 NONAME ABSENT - _ZNK17QDeclarativeState10stateGroupEv @ 1159 NONAME ABSENT - _ZNK17QDeclarativeState11isWhenKnownEv @ 1160 NONAME ABSENT - _ZNK17QDeclarativeState11operationAtEi @ 1161 NONAME ABSENT - _ZNK17QDeclarativeState14operationCountEv @ 1162 NONAME ABSENT - _ZNK17QDeclarativeState4nameEv @ 1163 NONAME ABSENT - _ZNK17QDeclarativeState4whenEv @ 1164 NONAME ABSENT - _ZNK17QDeclarativeState7extendsEv @ 1165 NONAME ABSENT - _ZNK17QDeclarativeState7isNamedEv @ 1166 NONAME ABSENT + _ZNK17QDeclarativeState10metaObjectEv @ 1158 NONAME + _ZNK17QDeclarativeState10stateGroupEv @ 1159 NONAME + _ZNK17QDeclarativeState11isWhenKnownEv @ 1160 NONAME + _ZNK17QDeclarativeState11operationAtEi @ 1161 NONAME + _ZNK17QDeclarativeState14operationCountEv @ 1162 NONAME + _ZNK17QDeclarativeState4nameEv @ 1163 NONAME + _ZNK17QDeclarativeState4whenEv @ 1164 NONAME + _ZNK17QDeclarativeState7extendsEv @ 1165 NONAME + _ZNK17QDeclarativeState7isNamedEv @ 1166 NONAME _ZNK18QDeclarativeEngine10metaObjectEv @ 1167 NONAME _ZNK18QDeclarativeEngine11rootContextEv @ 1168 NONAME _ZNK18QDeclarativeEngine13imageProviderERK7QString @ 1169 NONAME @@ -1381,14 +1381,14 @@ EXPORTS _ZNK22QDeclarativeExpression6engineEv @ 1380 NONAME _ZNK22QDeclarativeExpression7contextEv @ 1381 NONAME _ZNK22QDeclarativeExpression8hasErrorEv @ 1382 NONAME - _ZNK22QDeclarativeStateGroup10metaObjectEv @ 1383 NONAME ABSENT - _ZNK22QDeclarativeStateGroup5stateEv @ 1384 NONAME ABSENT - _ZNK22QDeclarativeStateGroup6statesEv @ 1385 NONAME ABSENT - _ZNK22QDeclarativeStateGroup9findStateERK7QString @ 1386 NONAME ABSENT - _ZNK22QDeclarativeTransition10metaObjectEv @ 1387 NONAME ABSENT - _ZNK22QDeclarativeTransition10reversibleEv @ 1388 NONAME ABSENT - _ZNK22QDeclarativeTransition7toStateEv @ 1389 NONAME ABSENT - _ZNK22QDeclarativeTransition9fromStateEv @ 1390 NONAME ABSENT + _ZNK22QDeclarativeStateGroup10metaObjectEv @ 1383 NONAME + _ZNK22QDeclarativeStateGroup5stateEv @ 1384 NONAME + _ZNK22QDeclarativeStateGroup6statesEv @ 1385 NONAME + _ZNK22QDeclarativeStateGroup9findStateERK7QString @ 1386 NONAME + _ZNK22QDeclarativeTransition10metaObjectEv @ 1387 NONAME + _ZNK22QDeclarativeTransition10reversibleEv @ 1388 NONAME + _ZNK22QDeclarativeTransition7toStateEv @ 1389 NONAME + _ZNK22QDeclarativeTransition9fromStateEv @ 1390 NONAME _ZNK23QDeclarativeDebugClient10metaObjectEv @ 1391 NONAME ABSENT _ZNK23QDeclarativeDebugClient11isConnectedEv @ 1392 NONAME ABSENT _ZNK23QDeclarativeDebugClient4nameEv @ 1393 NONAME ABSENT @@ -1452,7 +1452,7 @@ EXPORTS _ZNK26QDeclarativeOpenMetaObject6objectEv @ 1451 NONAME ABSENT _ZNK26QDeclarativeOpenMetaObject6parentEv @ 1452 NONAME ABSENT _ZNK26QDeclarativeOpenMetaObject8hasValueEi @ 1453 NONAME ABSENT - _ZNK26QDeclarativeStateOperation10metaObjectEv @ 1454 NONAME ABSENT + _ZNK26QDeclarativeStateOperation10metaObjectEv @ 1454 NONAME _ZNK27QDeclarativeAbstractBinding10expressionEv @ 1455 NONAME ABSENT _ZNK27QDeclarativeDebugConnection10metaObjectEv @ 1456 NONAME ABSENT _ZNK27QDeclarativeDebugConnection11isConnectedEv @ 1457 NONAME ABSENT @@ -1531,7 +1531,7 @@ EXPORTS _ZTI16QDeclarativeItem @ 1530 NONAME _ZTI16QDeclarativeText @ 1531 NONAME ABSENT _ZTI16QDeclarativeView @ 1532 NONAME - _ZTI17QDeclarativeState @ 1533 NONAME ABSENT + _ZTI17QDeclarativeState @ 1533 NONAME _ZTI18QDeclarativeEngine @ 1534 NONAME _ZTI18QMetaObjectBuilder @ 1535 NONAME ABSENT _ZTI19QDeclarativeAnchors @ 1536 NONAME ABSENT @@ -1547,8 +1547,8 @@ EXPORTS _ZTI22QDeclarativeDebugQuery @ 1546 NONAME ABSENT _ZTI22QDeclarativeDebugWatch @ 1547 NONAME ABSENT _ZTI22QDeclarativeExpression @ 1548 NONAME - _ZTI22QDeclarativeStateGroup @ 1549 NONAME ABSENT - _ZTI22QDeclarativeTransition @ 1550 NONAME ABSENT + _ZTI22QDeclarativeStateGroup @ 1549 NONAME + _ZTI22QDeclarativeTransition @ 1550 NONAME _ZTI23QDeclarativeDebugClient @ 1551 NONAME ABSENT _ZTI23QDeclarativeEngineDebug @ 1552 NONAME ABSENT _ZTI23QDeclarativeItemPrivate @ 1553 NONAME @@ -1559,7 +1559,7 @@ EXPORTS _ZTI25QDeclarativeImageProvider @ 1558 NONAME _ZTI26QDeclarativeDebuggerStatus @ 1559 NONAME ABSENT _ZTI26QDeclarativeOpenMetaObject @ 1560 NONAME ABSENT - _ZTI26QDeclarativeStateOperation @ 1561 NONAME ABSENT + _ZTI26QDeclarativeStateOperation @ 1561 NONAME _ZTI27QDeclarativeAbstractBinding @ 1562 NONAME ABSENT _ZTI27QDeclarativeDebugConnection @ 1563 NONAME ABSENT _ZTI27QDeclarativeExtensionPlugin @ 1564 NONAME @@ -1581,7 +1581,7 @@ EXPORTS _ZTV16QDeclarativeItem @ 1580 NONAME _ZTV16QDeclarativeText @ 1581 NONAME ABSENT _ZTV16QDeclarativeView @ 1582 NONAME - _ZTV17QDeclarativeState @ 1583 NONAME ABSENT + _ZTV17QDeclarativeState @ 1583 NONAME _ZTV18QDeclarativeEngine @ 1584 NONAME _ZTV18QMetaObjectBuilder @ 1585 NONAME ABSENT _ZTV19QDeclarativeAnchors @ 1586 NONAME ABSENT @@ -1597,8 +1597,8 @@ EXPORTS _ZTV22QDeclarativeDebugQuery @ 1596 NONAME ABSENT _ZTV22QDeclarativeDebugWatch @ 1597 NONAME ABSENT _ZTV22QDeclarativeExpression @ 1598 NONAME - _ZTV22QDeclarativeStateGroup @ 1599 NONAME ABSENT - _ZTV22QDeclarativeTransition @ 1600 NONAME ABSENT + _ZTV22QDeclarativeStateGroup @ 1599 NONAME + _ZTV22QDeclarativeTransition @ 1600 NONAME _ZTV23QDeclarativeDebugClient @ 1601 NONAME ABSENT _ZTV23QDeclarativeEngineDebug @ 1602 NONAME ABSENT _ZTV23QDeclarativeItemPrivate @ 1603 NONAME @@ -1609,7 +1609,7 @@ EXPORTS _ZTV25QDeclarativeImageProvider @ 1608 NONAME _ZTV26QDeclarativeDebuggerStatus @ 1609 NONAME ABSENT _ZTV26QDeclarativeOpenMetaObject @ 1610 NONAME ABSENT - _ZTV26QDeclarativeStateOperation @ 1611 NONAME ABSENT + _ZTV26QDeclarativeStateOperation @ 1611 NONAME _ZTV27QDeclarativeAbstractBinding @ 1612 NONAME ABSENT _ZTV27QDeclarativeDebugConnection @ 1613 NONAME ABSENT _ZTV27QDeclarativeExtensionPlugin @ 1614 NONAME @@ -1656,10 +1656,10 @@ EXPORTS _ZThn8_N20QDeclarativeBehaviorD0Ev @ 1655 NONAME ABSENT _ZThn8_N20QDeclarativeBehaviorD1Ev @ 1656 NONAME ABSENT _ZThn8_N21QDeclarativeRectangle5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 1657 NONAME ABSENT - _ZThn8_N22QDeclarativeStateGroup10classBeginEv @ 1658 NONAME ABSENT - _ZThn8_N22QDeclarativeStateGroup17componentCompleteEv @ 1659 NONAME ABSENT - _ZThn8_N22QDeclarativeStateGroupD0Ev @ 1660 NONAME ABSENT - _ZThn8_N22QDeclarativeStateGroupD1Ev @ 1661 NONAME ABSENT + _ZThn8_N22QDeclarativeStateGroup10classBeginEv @ 1658 NONAME + _ZThn8_N22QDeclarativeStateGroup17componentCompleteEv @ 1659 NONAME + _ZThn8_N22QDeclarativeStateGroupD0Ev @ 1660 NONAME + _ZThn8_N22QDeclarativeStateGroupD1Ev @ 1661 NONAME _ZThn8_N27QDeclarativeExtensionPlugin16initializeEngineEP18QDeclarativeEnginePKc @ 1662 NONAME _ZThn8_N27QDeclarativeExtensionPluginD0Ev @ 1663 NONAME _ZThn8_N27QDeclarativeExtensionPluginD1Ev @ 1664 NONAME @@ -1675,17 +1675,17 @@ EXPORTS _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer22QDeclarativeObjectDataE @ 1674 NONAME ABSENT _ZrsR11QDataStreamRN29QDeclarativeEngineDebugServer26QDeclarativeObjectPropertyE @ 1675 NONAME ABSENT _ZN23QDeclarativeEngineDebug10newObjectsEv @ 1676 NONAME ABSENT - _ZN17QDeclarativeState20addEntryToRevertListERK18QDeclarativeAction @ 1677 NONAME ABSENT - _ZN17QDeclarativeState22addEntriesToRevertListERK5QListI18QDeclarativeActionE @ 1678 NONAME ABSENT - _ZN17QDeclarativeState23changeValueInRevertListEP7QObjectRK10QByteArrayRK8QVariant @ 1679 NONAME ABSENT - _ZN17QDeclarativeState25changeBindingInRevertListEP7QObjectRK10QByteArrayP27QDeclarativeAbstractBinding @ 1680 NONAME ABSENT - _ZN17QDeclarativeState25removeEntryFromRevertListEP7QObjectRK10QByteArray @ 1681 NONAME ABSENT - _ZN17QDeclarativeState30removeAllEntriesFromRevertListEP7QObject @ 1682 NONAME ABSENT + _ZN17QDeclarativeState20addEntryToRevertListERK18QDeclarativeAction @ 1677 NONAME + _ZN17QDeclarativeState22addEntriesToRevertListERK5QListI18QDeclarativeActionE @ 1678 NONAME + _ZN17QDeclarativeState23changeValueInRevertListEP7QObjectRK10QByteArrayRK8QVariant @ 1679 NONAME + _ZN17QDeclarativeState25changeBindingInRevertListEP7QObjectRK10QByteArrayP27QDeclarativeAbstractBinding @ 1680 NONAME + _ZN17QDeclarativeState25removeEntryFromRevertListEP7QObjectRK10QByteArray @ 1681 NONAME + _ZN17QDeclarativeState30removeAllEntriesFromRevertListEP7QObject @ 1682 NONAME _ZN23QDeclarativeItemPrivate10data_clearEP24QDeclarativeListPropertyI7QObjectE @ 1683 NONAME _ZN23QDeclarativeItemPrivate10data_countEP24QDeclarativeListPropertyI7QObjectE @ 1684 NONAME _ZN23QDeclarativeItemPrivate15resources_clearEP24QDeclarativeListPropertyI7QObjectE @ 1685 NONAME _ZN23QDeclarativeItemPrivate7data_atEP24QDeclarativeListPropertyI7QObjectEi @ 1686 NONAME - _ZN26QDeclarativeStateOperation8setStateEP17QDeclarativeState @ 1687 NONAME ABSENT + _ZN26QDeclarativeStateOperation8setStateEP17QDeclarativeState @ 1687 NONAME _ZN27QDeclarativeAbstractBinding11weakPointerEv @ 1688 NONAME ABSENT _ZN27QDeclarativePropertyChanges11changeValueERK10QByteArrayRK8QVariant @ 1689 NONAME ABSENT _ZN27QDeclarativePropertyChanges11qt_metacallEN11QMetaObject4CallEiPPv @ 1690 NONAME ABSENT @@ -1705,11 +1705,11 @@ EXPORTS _ZN27QDeclarativePropertyChangesD0Ev @ 1704 NONAME ABSENT _ZN27QDeclarativePropertyChangesD1Ev @ 1705 NONAME ABSENT _ZN27QDeclarativePropertyChangesD2Ev @ 1706 NONAME ABSENT - _ZNK17QDeclarativeState13isStateActiveEv @ 1707 NONAME ABSENT - _ZNK17QDeclarativeState17valueInRevertListEP7QObjectRK10QByteArray @ 1708 NONAME ABSENT - _ZNK17QDeclarativeState19bindingInRevertListEP7QObjectRK10QByteArray @ 1709 NONAME ABSENT - _ZNK17QDeclarativeState28containsPropertyInRevertListEP7QObjectRK10QByteArray @ 1710 NONAME ABSENT - _ZNK26QDeclarativeStateOperation5stateEv @ 1711 NONAME ABSENT + _ZNK17QDeclarativeState13isStateActiveEv @ 1707 NONAME + _ZNK17QDeclarativeState17valueInRevertListEP7QObjectRK10QByteArray @ 1708 NONAME + _ZNK17QDeclarativeState19bindingInRevertListEP7QObjectRK10QByteArray @ 1709 NONAME + _ZNK17QDeclarativeState28containsPropertyInRevertListEP7QObjectRK10QByteArray @ 1710 NONAME + _ZNK26QDeclarativeStateOperation5stateEv @ 1711 NONAME _ZNK27QDeclarativePropertyChanges10expressionERK10QByteArray @ 1712 NONAME ABSENT _ZNK27QDeclarativePropertyChanges10isExplicitEv @ 1713 NONAME ABSENT _ZNK27QDeclarativePropertyChanges10metaObjectEv @ 1714 NONAME ABSENT -- cgit v0.12 From cd55d5da5a5a1f676b85f4976b1b5e99e8a5f9c7 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Oct 2010 17:24:07 +1000 Subject: Missing part of 64a05cfa97b1192ac247558c0601ba0e4ec464c9 Task-number: QT-4200 --- demos/declarative/snake/snake.qml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/demos/declarative/snake/snake.qml b/demos/declarative/snake/snake.qml index 6eaa976..af86aac 100644 --- a/demos/declarative/snake/snake.qml +++ b/demos/declarative/snake/snake.qml @@ -105,7 +105,7 @@ Rectangle { source: "content/pics/pause.png" anchors.centerIn: parent; //opacity is deliberately not animated - opacity: gameActive && !runtime.isActiveWindow + opacity: activeGame && !runtime.isActiveWindow } Image { -- cgit v0.12 From ff40d424d2914b84bef4a7bb41e8ef04229db6c7 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Oct 2010 18:09:46 +1000 Subject: Clean up ListView visual tests listview.qml is still expected to fail, filing a bug about that soon Task-number: QTBUG-14792 --- .../auto/declarative/qmlvisual/ListView/basic1.qml | 11 +- .../auto/declarative/qmlvisual/ListView/basic2.qml | 11 +- .../auto/declarative/qmlvisual/ListView/basic3.qml | 11 +- .../auto/declarative/qmlvisual/ListView/basic4.qml | 11 +- .../qmlvisual/ListView/data-MAC/basic1.qml | 159 - .../qmlvisual/ListView/data-MAC/basic2.qml | 187 -- .../qmlvisual/ListView/data-MAC/basic3.qml | 147 - .../qmlvisual/ListView/data-MAC/basic4.qml | 171 -- .../qmlvisual/ListView/data-MAC/itemlist.0.png | Bin 961 -> 0 bytes .../qmlvisual/ListView/data-MAC/itemlist.1.png | Bin 972 -> 0 bytes .../qmlvisual/ListView/data-MAC/itemlist.2.png | Bin 962 -> 0 bytes .../qmlvisual/ListView/data-MAC/itemlist.3.png | Bin 962 -> 0 bytes .../qmlvisual/ListView/data-MAC/itemlist.4.png | Bin 962 -> 0 bytes .../qmlvisual/ListView/data-MAC/itemlist.5.png | Bin 970 -> 0 bytes .../qmlvisual/ListView/data-MAC/itemlist.6.png | Bin 961 -> 0 bytes .../qmlvisual/ListView/data-MAC/itemlist.qml | 2203 -------------- .../qmlvisual/ListView/data-MAC/listview.0.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.1.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.10.png | Bin 1588 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.11.png | Bin 1575 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.12.png | Bin 1502 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.13.png | Bin 1583 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.14.png | Bin 1681 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.15.png | Bin 1524 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.16.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.17.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.18.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.19.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.2.png | Bin 1627 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.3.png | Bin 1524 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.4.png | Bin 1678 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.5.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.6.png | Bin 1573 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.7.png | Bin 1670 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.8.png | Bin 1658 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.9.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data-MAC/listview.qml | 3079 -------------------- .../qmlvisual/ListView/data-X11/basic1.qml | 159 - .../qmlvisual/ListView/data-X11/basic2.qml | 187 -- .../qmlvisual/ListView/data-X11/basic3.qml | 147 - .../qmlvisual/ListView/data-X11/basic4.qml | 171 -- .../declarative/qmlvisual/ListView/data/basic1.qml | 114 +- .../declarative/qmlvisual/ListView/data/basic2.qml | 100 +- .../declarative/qmlvisual/ListView/data/basic3.qml | 84 +- .../declarative/qmlvisual/ListView/data/basic4.qml | 110 +- .../qmlvisual/ListView/data/itemlist.0.png | Bin 961 -> 976 bytes .../qmlvisual/ListView/data/itemlist.1.png | Bin 972 -> 986 bytes .../qmlvisual/ListView/data/itemlist.2.png | Bin 962 -> 977 bytes .../qmlvisual/ListView/data/itemlist.3.png | Bin 962 -> 977 bytes .../qmlvisual/ListView/data/itemlist.4.png | Bin 962 -> 977 bytes .../qmlvisual/ListView/data/itemlist.5.png | Bin 970 -> 990 bytes .../qmlvisual/ListView/data/itemlist.6.png | Bin 961 -> 976 bytes .../qmlvisual/ListView/data/itemlist.qml | 350 +-- .../declarative/qmlvisual/ListView/listview.qml | 2 +- 54 files changed, 318 insertions(+), 7096 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml diff --git a/tests/auto/declarative/qmlvisual/ListView/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/basic1.qml index d55c997..8c1b56e 100644 --- a/tests/auto/declarative/qmlvisual/ListView/basic1.qml +++ b/tests/auto/declarative/qmlvisual/ListView/basic1.qml @@ -11,16 +11,19 @@ Rectangle { color: "red" width: 100 height: 100 - Text { - text: name + Rectangle { + anchors.centerIn: parent + width: 60 + height: 60 + color: name } } model: ListModel { ListElement { - name: "January" + name: "palegoldenrod" } ListElement { - name: "February" + name: "lightsteelblue" } } } diff --git a/tests/auto/declarative/qmlvisual/ListView/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/basic2.qml index 31c802d..9d26c73 100644 --- a/tests/auto/declarative/qmlvisual/ListView/basic2.qml +++ b/tests/auto/declarative/qmlvisual/ListView/basic2.qml @@ -11,8 +11,11 @@ Rectangle { color: "red" width: 100 height: 100 - Text { - text: name + Rectangle { + anchors.centerIn: parent + width: 60 + height: 60 + color: name } } } @@ -21,10 +24,10 @@ Rectangle { delegate: delegate model: ListModel { ListElement { - name: "January" + name: "palegoldenrod" } ListElement { - name: "February" + name: "lightsteelblue" } } } diff --git a/tests/auto/declarative/qmlvisual/ListView/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/basic3.qml index be39ca1..982df9a 100644 --- a/tests/auto/declarative/qmlvisual/ListView/basic3.qml +++ b/tests/auto/declarative/qmlvisual/ListView/basic3.qml @@ -8,10 +8,10 @@ Rectangle { ListModel { id: model ListElement { - name: "January" + name: "palegoldenrod" } ListElement { - name: "February" + name: "lightsteelblue" } } ListView { @@ -21,8 +21,11 @@ Rectangle { color: "red" width: 100 height: 100 - Text { - text: name + Rectangle { + anchors.centerIn: parent + width: 60 + height: 60 + color: name } } } diff --git a/tests/auto/declarative/qmlvisual/ListView/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/basic4.qml index 906af63..2c5d1e3 100644 --- a/tests/auto/declarative/qmlvisual/ListView/basic4.qml +++ b/tests/auto/declarative/qmlvisual/ListView/basic4.qml @@ -8,10 +8,10 @@ Rectangle { ListModel { id: model ListElement { - name: "January" + name: "palegoldenrod" } ListElement { - name: "February" + name: "lightsteelblue" } } Component { @@ -20,8 +20,11 @@ Rectangle { color: "red" width: 100 height: 100 - Text { - text: name + Rectangle { + anchors.centerIn: parent + width: 60 + height: 60 + color: name } } } diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml deleted file mode 100644 index 3373247..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic1.qml +++ /dev/null @@ -1,159 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 32 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 48 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 64 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 80 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 96 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 112 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 128 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 144 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 160 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 176 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 192 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 208 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 224 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 240 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 256 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 272 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 288 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 304 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 320 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 336 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 352 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 368 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 384 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 400 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 416 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 432 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 448 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 464 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 480 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 496 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 512 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 528 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 544 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 560 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 576 - hash: "895c70434a24da42144e60e6d8dcf323" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml deleted file mode 100644 index 20b889d..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic2.qml +++ /dev/null @@ -1,187 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 32 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 48 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 64 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 80 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 96 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 112 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 128 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 144 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 160 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 176 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 192 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 208 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 224 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 240 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 256 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 272 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 288 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 304 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 320 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 336 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 352 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 368 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 384 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 400 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 416 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 432 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 448 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 464 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 480 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 496 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 512 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 528 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 544 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 560 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 576 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 592 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 608 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 624 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 640 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 656 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 672 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 688 - hash: "895c70434a24da42144e60e6d8dcf323" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml deleted file mode 100644 index f49de2f..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic3.qml +++ /dev/null @@ -1,147 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 32 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 48 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 64 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 80 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 96 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 112 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 128 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 144 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 160 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 176 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 192 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 208 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 224 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 240 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 256 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 272 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 288 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 304 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 320 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 336 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 352 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 368 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 384 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 400 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 416 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 432 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 448 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 464 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 480 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 496 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 512 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 528 - hash: "895c70434a24da42144e60e6d8dcf323" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml deleted file mode 100644 index 1ea5547..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/basic4.qml +++ /dev/null @@ -1,171 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 32 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 48 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 64 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 80 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 96 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 112 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 128 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 144 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 160 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 176 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 192 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 208 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 224 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 240 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 256 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 272 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 288 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 304 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 320 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 336 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 352 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 368 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 384 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 400 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 416 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 432 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 448 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 464 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 480 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 496 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 512 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 528 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 544 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 560 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 576 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 592 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 608 - hash: "895c70434a24da42144e60e6d8dcf323" - } - Frame { - msec: 624 - hash: "895c70434a24da42144e60e6d8dcf323" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png deleted file mode 100644 index 13b280c..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png deleted file mode 100644 index 402872b..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png deleted file mode 100644 index afd0830..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png deleted file mode 100644 index 7c15f61..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png deleted file mode 100644 index afd0830..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png deleted file mode 100644 index fddf1cb..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png deleted file mode 100644 index 13b280c..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml deleted file mode 100644 index 829fbb3..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/itemlist.qml +++ /dev/null @@ -1,2203 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 32 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 48 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 64 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 80 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 96 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 112 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 128 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 144 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 160 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 176 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 192 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 208 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 224 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 240 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 256 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 272 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 288 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 304 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 320 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 336 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 352 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 368 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 384 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 400 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 416 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 432 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 448 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 464 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 480 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 496 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 512 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 528 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 544 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 560 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 576 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 592 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 608 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 624 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 640 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 656 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 672 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 688 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 704 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 720 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 736 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 752 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 768 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 784 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 800 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 816 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 832 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 848 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 864 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 880 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 896 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 912 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 928 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 944 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 960 - image: "itemlist.0.png" - } - Frame { - msec: 976 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 992 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1008 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1024 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1040 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1056 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1072 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1088 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1104 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1120 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1136 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1152 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1168 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1184 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1200 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1216 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1232 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1248 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1264 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1280 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1296 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1312 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1328 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1344 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1360 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1376 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1392 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1408 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1424 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1440 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1456 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1472 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1488 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1504 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1520 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1536 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1552 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1568 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1584 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1600 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1616 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1632 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 1648 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 192; y: 111 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1664 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 191; y: 111 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1680 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 190; y: 112 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 187; y: 113 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1696 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 184; y: 113 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 180; y: 113 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1712 - hash: "a68b1bc6c2963ee92c3a45f500667b3b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 174; y: 114 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 167; y: 115 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1728 - hash: "7cda93e59466b3348e7ffe3895f89e86" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1744 - hash: "06e0008c78e919f7270402938d9d764b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 140; y: 121 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 132; y: 122 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1760 - hash: "9d8da9199efebb95f56e5d4ebc9a585e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 114; y: 126 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 98; y: 132 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1776 - hash: "54a60a4279911ba4a8a5741bcadfa783" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 91; y: 132 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 91; y: 132 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1792 - hash: "a1a19370a1a8ed78e475f0d0eb12311c" - } - Frame { - msec: 1808 - hash: "196a3b127cf7065614c34856bf8d8bca" - } - Frame { - msec: 1824 - hash: "5fbefbd7c7be4374382cc4c8b86ac78a" - } - Frame { - msec: 1840 - hash: "d6a544c622e504c1b931e1a8a1310a6e" - } - Frame { - msec: 1856 - hash: "20e76f0eb4ec5f691999faf8ad313370" - } - Frame { - msec: 1872 - hash: "7f84a3545907c754ae8a6a30ef61c98d" - } - Frame { - msec: 1888 - hash: "b544901eae32903ad054e8cdfed715eb" - } - Frame { - msec: 1904 - hash: "a010ed1e3312f4ca9f429b7e32cdcef9" - } - Frame { - msec: 1920 - image: "itemlist.1.png" - } - Frame { - msec: 1936 - hash: "93a731dc6f71b6ff5400bf74c87e6c46" - } - Frame { - msec: 1952 - hash: "c73f63d1a024ba956e693487b3ccc761" - } - Frame { - msec: 1968 - hash: "539d3d00fce2d0128cd697d86d237fe7" - } - Frame { - msec: 1984 - hash: "52752d7d6f2d0e085f7132313907b72b" - } - Frame { - msec: 2000 - hash: "f46dd5803a6075e979e0fc733d503bfb" - } - Frame { - msec: 2016 - hash: "b8734698a6bad00ecf019f85328c2c21" - } - Frame { - msec: 2032 - hash: "1cfc499ca756023430cc5b2fa95a599d" - } - Frame { - msec: 2048 - hash: "63a816548837c19f8f0494c137fc0174" - } - Frame { - msec: 2064 - hash: "1bce9b85235e9a1a472c079dfec70ec5" - } - Frame { - msec: 2080 - hash: "6677863e7f74c12648409883f73adbe2" - } - Frame { - msec: 2096 - hash: "98e707a3e39a5f7bd4a101c2ed83535c" - } - Frame { - msec: 2112 - hash: "c1f6d8842d14a9394d4b7797314f50e8" - } - Frame { - msec: 2128 - hash: "579758b477bcd2112b305a5aac7df338" - } - Frame { - msec: 2144 - hash: "4a7bb81090db246db53e2dbc56f710ea" - } - Frame { - msec: 2160 - hash: "074995cdd8a70817d1c8a7bb0ad4c542" - } - Frame { - msec: 2176 - hash: "bd8d7bda4d2e9ad1fba2895d568f36cc" - } - Frame { - msec: 2192 - hash: "40cce3d2d80ac470af44fc334cec1d5b" - } - Frame { - msec: 2208 - hash: "15cbc226b032d5a97199735ea7a1408b" - } - Frame { - msec: 2224 - hash: "12b296aea9b058a5402d0d0a620f8edc" - } - Frame { - msec: 2240 - hash: "6ffd2b79cf0e941a59e74bc6f9025bcb" - } - Frame { - msec: 2256 - hash: "589a58ef76ea709dc8d80390c9044f99" - } - Frame { - msec: 2272 - hash: "c009924bfa30153f22ab168b539494e9" - } - Frame { - msec: 2288 - hash: "4b83674a7c2daa68d735901ad40be2bd" - } - Frame { - msec: 2304 - hash: "0525908c0302ada989e28990bac3f2ca" - } - Frame { - msec: 2320 - hash: "89eb13976ba3ba4413cafeb0cc91c01b" - } - Frame { - msec: 2336 - hash: "75c1295ef99680784b2e11fb88fa1423" - } - Frame { - msec: 2352 - hash: "93d89165cf6a97c76ae6e7f75678a3cd" - } - Frame { - msec: 2368 - hash: "53064c1938f08a55603a99b0db225174" - } - Frame { - msec: 2384 - hash: "31db5684466c0c32128a9a8c7b1835e1" - } - Frame { - msec: 2400 - hash: "99d9e58697736198e0a00443d237e85b" - } - Frame { - msec: 2416 - hash: "6c1e860aef983367365d53f5849ad441" - } - Frame { - msec: 2432 - hash: "6c1e860aef983367365d53f5849ad441" - } - Frame { - msec: 2448 - hash: "6c1e860aef983367365d53f5849ad441" - } - Frame { - msec: 2464 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2480 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2496 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2512 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2528 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2544 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2560 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2576 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2592 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2608 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2624 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2640 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2656 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2672 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2688 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2704 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2720 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2736 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2752 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2768 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2784 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2800 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2816 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2832 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2848 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 2864 - hash: "99f9988040a389576cb6420b5391f768" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 181; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2880 - image: "itemlist.2.png" - } - Frame { - msec: 2896 - hash: "99f9988040a389576cb6420b5391f768" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 179; y: 105 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 177; y: 106 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2912 - hash: "99f9988040a389576cb6420b5391f768" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 174; y: 108 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 170; y: 110 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2928 - hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 166; y: 112 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 115 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2944 - hash: "b10a6206830a876017799ef2fcf61b1a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 117 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 140; y: 123 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2960 - hash: "b2e24759ba10afd6cff90f4b1e04b496" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 124; y: 127 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 124; y: 127 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2976 - hash: "ccbcd6f45cb529c2db71504c0f69d73e" - } - Frame { - msec: 2992 - hash: "7b31c6d5931677f1aa1e8c7d48a4ff22" - } - Frame { - msec: 3008 - hash: "c52f691a0a6cf155118bdfea2dfea623" - } - Frame { - msec: 3024 - hash: "dd639d1df3d4a9b8f06718def63d588f" - } - Frame { - msec: 3040 - hash: "39d767b09a648ef6295cec2848f9226f" - } - Frame { - msec: 3056 - hash: "5dd46d5f386431e7b13348ac9a9630ed" - } - Frame { - msec: 3072 - hash: "0354e5183b0e66e7ba146d292c559df4" - } - Frame { - msec: 3088 - hash: "984aa6d7075e24de429e05b1b0eda94a" - } - Frame { - msec: 3104 - hash: "1af58a2f44f1f613712d4df85e38356d" - } - Frame { - msec: 3120 - hash: "6e4085e7f1fee724d78808753f04b471" - } - Frame { - msec: 3136 - hash: "73a019ef9057639d631cd99a431b3f3b" - } - Frame { - msec: 3152 - hash: "c9414a2e655a90dfdcb6fb288b4ba0ca" - } - Frame { - msec: 3168 - hash: "3f4c24f7ac89da982af22032309637fb" - } - Frame { - msec: 3184 - hash: "a50e6ada8f73a257657f4348ceaffcfd" - } - Frame { - msec: 3200 - hash: "a67bf40d09259bbd079c12ae4f49150f" - } - Frame { - msec: 3216 - hash: "a2fc512b7c234a9d0b2c1a83387a8a46" - } - Frame { - msec: 3232 - hash: "85090683ce9a3c9833b1cb0b3df076ee" - } - Frame { - msec: 3248 - hash: "275f3594a0e2cc4b6717f9f336e7e1b6" - } - Frame { - msec: 3264 - hash: "2473eb11f7b65a784a2b166114026488" - } - Frame { - msec: 3280 - hash: "4865c30dc45fbf5ca82047b77eca0912" - } - Frame { - msec: 3296 - hash: "54de88bca395449fbaea2c090c7a5d91" - } - Frame { - msec: 3312 - hash: "833f9295cf9a34934f001eac48551b59" - } - Frame { - msec: 3328 - hash: "5bf565f57ababa7380faeee94add91ca" - } - Frame { - msec: 3344 - hash: "6325578867f1eb3b2d47ed40b017b571" - } - Frame { - msec: 3360 - hash: "046a6114176b3a3206b7a2acd6e30b41" - } - Frame { - msec: 3376 - hash: "f8d4120a17f28c2d1d9c4be959098058" - } - Frame { - msec: 3392 - hash: "71356d2e48aad2900784ea6bc1a3d908" - } - Frame { - msec: 3408 - hash: "b84ad460fb81fdc4049abe8f3ff180bb" - } - Frame { - msec: 3424 - hash: "0354239f5eaea23474d9f81385392a8a" - } - Frame { - msec: 3440 - hash: "8ef0eef3393e07ae7605c865a95edc30" - } - Frame { - msec: 3456 - hash: "5b8b384cc8e3faf4310015e19b3eb487" - } - Frame { - msec: 3472 - hash: "77c18ac7dfff2a4e516915e3e3df0717" - } - Frame { - msec: 3488 - hash: "c1d3264384c26345eb8100de829309ca" - } - Frame { - msec: 3504 - hash: "6b21f71d0bedef4bbcb445a13f61e7a3" - } - Frame { - msec: 3520 - hash: "f619097356671f6eb54d3b1c481e709d" - } - Frame { - msec: 3536 - hash: "e56e3a90da446e0c482cb93717f6aacc" - } - Frame { - msec: 3552 - hash: "aa94ebdbb4b8423aff28c95daff0baf5" - } - Frame { - msec: 3568 - hash: "e1744d9cacd1a2c96af4cfdd5c486995" - } - Frame { - msec: 3584 - hash: "7f19ea52e9e41a3b1bd90bb2a144d305" - } - Frame { - msec: 3600 - hash: "7f19ea52e9e41a3b1bd90bb2a144d305" - } - Frame { - msec: 3616 - hash: "7f19ea52e9e41a3b1bd90bb2a144d305" - } - Frame { - msec: 3632 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3648 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3664 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3680 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3696 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3712 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3728 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3744 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3760 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3776 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3792 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3808 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3824 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3840 - image: "itemlist.3.png" - } - Frame { - msec: 3856 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3872 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3888 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3904 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3920 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3936 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3952 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3968 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 3984 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 4000 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 4016 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 4032 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 4048 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 4064 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 4080 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Frame { - msec: 4096 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 31; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4112 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 32; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4128 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 33; y: 136 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 36; y: 135 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4144 - hash: "88143ff6c278a5433b314b551b7b8b1d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 40; y: 134 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 46; y: 132 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4160 - hash: "c2c9c284b185a89faf4ddb5a7867f449" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 64; y: 130 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4176 - hash: "de1c18aeda5d2fbd6dad4554c78617bd" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 86; y: 126 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 110; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 110; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4192 - hash: "a67bf40d09259bbd079c12ae4f49150f" - } - Frame { - msec: 4208 - hash: "94514668dafbe41c5890a578efd6dea4" - } - Frame { - msec: 4224 - hash: "2e97a74eb9ddb1c9613c89e2d78db018" - } - Frame { - msec: 4240 - hash: "4b5368f0d86bffeb6bd31b58aec88650" - } - Frame { - msec: 4256 - hash: "b459bde7bb4ce51e6ecdab58f64fcbb9" - } - Frame { - msec: 4272 - hash: "7bac8cc3ec64c9ad1c0da282e38c953e" - } - Frame { - msec: 4288 - hash: "a73a58c3d7a757547740a2a161f4c756" - } - Frame { - msec: 4304 - hash: "b35edcb1fa3568a3e770ab2364b82e75" - } - Frame { - msec: 4320 - hash: "d6c863ef57c5e5cb04cdac72f920db0b" - } - Frame { - msec: 4336 - hash: "0db5e4588ff851918b07796f0cf07382" - } - Frame { - msec: 4352 - hash: "71ec8c363ca6a6f7556afb70faccffe6" - } - Frame { - msec: 4368 - hash: "18d026e9c965ada1db67c643576d2a80" - } - Frame { - msec: 4384 - hash: "69f71c22dff981a4da8ec1edcf90e79f" - } - Frame { - msec: 4400 - hash: "680460f5e4d9e649931601041af046b2" - } - Frame { - msec: 4416 - hash: "3028763fd15de2607b20b1331b904a4a" - } - Frame { - msec: 4432 - hash: "333eb60e217fe1ea7469eab52ac461f1" - } - Frame { - msec: 4448 - hash: "ccbcd6f45cb529c2db71504c0f69d73e" - } - Frame { - msec: 4464 - hash: "3445df9b41a0a3e74738cbf328ab7d5c" - } - Frame { - msec: 4480 - hash: "bd2c072558479e9de7a97207e58cc57f" - } - Frame { - msec: 4496 - hash: "3d34b0b24a30eda93377dcb4585afed8" - } - Frame { - msec: 4512 - hash: "d3045703863b0c5a327b9355c23d69f2" - } - Frame { - msec: 4528 - hash: "2f2eb55f693415b840a317211b250e9f" - } - Frame { - msec: 4544 - hash: "791b9ca7d47a3343474c30a35e336d4b" - } - Frame { - msec: 4560 - hash: "73a0c02ebad6d3d5f939d9a00dd898bf" - } - Frame { - msec: 4576 - hash: "d5c11135d586711b12f236430a2c2795" - } - Frame { - msec: 4592 - hash: "34f9ea214fe714ff4e994f715ea6ea39" - } - Frame { - msec: 4608 - hash: "8e49afa00983b156b818533923fb6edd" - } - Frame { - msec: 4624 - hash: "e7e7bef17cee92eca9191fd734d7a577" - } - Frame { - msec: 4640 - hash: "e407f6ed7cb3c130365ab5515d6308c0" - } - Frame { - msec: 4656 - hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f" - } - Frame { - msec: 4672 - hash: "0ad7411316031e22034c14e81ca3a806" - } - Frame { - msec: 4688 - hash: "dd81d7a9b48c922b4c42cba1b5f2b9d7" - } - Frame { - msec: 4704 - hash: "32bef6f5005ad94e29ff59165958fbdc" - } - Frame { - msec: 4720 - hash: "87758dd311f91193bf1e3536c2f58525" - } - Frame { - msec: 4736 - hash: "015be92a4ff4e735fcc3cbc7a8b9d763" - } - Frame { - msec: 4752 - hash: "d4c34ed49317c6692d71681fcd9842b6" - } - Frame { - msec: 4768 - hash: "abaa235bb946a8abaddd52981d632c2d" - } - Frame { - msec: 4784 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4800 - image: "itemlist.4.png" - } - Frame { - msec: 4816 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4832 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4848 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4864 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4880 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4896 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4912 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4928 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4944 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4960 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4976 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 4992 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5008 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5024 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5040 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5056 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5072 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5088 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5104 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5120 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5136 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5152 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5168 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5184 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5200 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5216 - hash: "99f9988040a389576cb6420b5391f768" - } - Frame { - msec: 5232 - hash: "99f9988040a389576cb6420b5391f768" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 17; y: 120 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5248 - hash: "99f9988040a389576cb6420b5391f768" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 19; y: 120 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 21; y: 120 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5264 - hash: "99f9988040a389576cb6420b5391f768" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 24; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 28; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5280 - hash: "95b380c9ab6f8db7b822faf023d94546" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 35; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 44; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5296 - hash: "bb79e53556698c62ec30c75be9f6b7d7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 70; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 96; y: 117 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 96; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5312 - hash: "285cc2f0df1f59f25a0135560ab6edf2" - } - Frame { - msec: 5328 - hash: "93a731dc6f71b6ff5400bf74c87e6c46" - } - Frame { - msec: 5344 - hash: "eb555741ab128a50de5a18a454f2e639" - } - Frame { - msec: 5360 - hash: "5dbe6cf898c1e37fcaacecfcf57b2194" - } - Frame { - msec: 5376 - hash: "e7795610115593e78bb32f7bcc0ae2eb" - } - Frame { - msec: 5392 - hash: "20e76f0eb4ec5f691999faf8ad313370" - } - Frame { - msec: 5408 - hash: "d6a544c622e504c1b931e1a8a1310a6e" - } - Frame { - msec: 5424 - hash: "e7a3a21feed244c5b1c710a9254c15f0" - } - Frame { - msec: 5440 - hash: "5a4b1aca24f121d1373646e9d80b86fd" - } - Frame { - msec: 5456 - hash: "331d2ec7021655c86aa64e47718a1088" - } - Frame { - msec: 5472 - hash: "92096bc872e7395aa5b75c44646a0b60" - } - Frame { - msec: 5488 - hash: "0d9aa6cee4d21488cbb5153f8f3ed593" - } - Frame { - msec: 5504 - hash: "c1b943d43701605563fffffcb75f9fa7" - } - Frame { - msec: 5520 - hash: "1b680025d5ad1ddd8f8d5f570ba73e71" - } - Frame { - msec: 5536 - hash: "5539a3b9f60ea747c10ed8328b467cbf" - } - Frame { - msec: 5552 - hash: "0a1317bcb606cd3488c5b14ee5d96585" - } - Frame { - msec: 5568 - hash: "8844af68b11db7d92c69804c7371a746" - } - Frame { - msec: 5584 - hash: "28d7fd127739c6e3b8488651b725c802" - } - Frame { - msec: 5600 - hash: "0cf1a7d958a96aa2768995dddc5ccc09" - } - Frame { - msec: 5616 - hash: "64b902fe7ab4d89ef0c7b760974e3488" - } - Frame { - msec: 5632 - hash: "aba11c597eba550fc1eaddbf554057f6" - } - Frame { - msec: 5648 - hash: "1bacaa3bb9dc3cac9ffc7491cb4dc1a5" - } - Frame { - msec: 5664 - hash: "0ba8b582234d9f0c198c0c9e18e1cb02" - } - Frame { - msec: 5680 - hash: "f66eaf2b5c3529987c0d9d005351ed73" - } - Frame { - msec: 5696 - hash: "75b0bb720fa4c77da3783b3ff31c2fae" - } - Frame { - msec: 5712 - hash: "345b235bb7f13409378e5c0c370f2a41" - } - Frame { - msec: 5728 - hash: "83b7e902dce4e0fdc4ef5d629188c23c" - } - Frame { - msec: 5744 - hash: "04b9041c6f10969889d92e94785c7e88" - } - Frame { - msec: 5760 - image: "itemlist.5.png" - } - Frame { - msec: 5776 - hash: "4f3a902addc34ecdaf390e2427cc52e7" - } - Frame { - msec: 5792 - hash: "68d443f16c16821ffc9ca68b17c76034" - } - Frame { - msec: 5808 - hash: "9d25adc77befa761ee376a9b43595b5e" - } - Frame { - msec: 5824 - hash: "a68b1bc6c2963ee92c3a45f500667b3b" - } - Frame { - msec: 5840 - hash: "d5268cd58c222451d48038e715e83802" - } - Frame { - msec: 5856 - hash: "f37d461541a8ec7a4161b18748de6aea" - } - Frame { - msec: 5872 - hash: "805319ac7ca842feb3649e92f8b5b72f" - } - Frame { - msec: 5888 - hash: "73124472a05080891d4948d8ca273f8c" - } - Frame { - msec: 5904 - hash: "b6e433a23282a50db2e165a2447ba3f6" - } - Frame { - msec: 5920 - hash: "fd8d3f5688b1806998c6087e18c6c730" - } - Frame { - msec: 5936 - hash: "f132dd459950ef2d18aa93ca950d0692" - } - Frame { - msec: 5952 - hash: "ade5beb259b5277c333ca806fc9bdbec" - } - Frame { - msec: 5968 - hash: "ade5beb259b5277c333ca806fc9bdbec" - } - Frame { - msec: 5984 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6000 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6016 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6032 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6048 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6064 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6080 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6096 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6112 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6128 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6144 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6160 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6176 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6192 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6208 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6224 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6240 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6256 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6272 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6288 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6304 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6320 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6336 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6352 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6368 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6384 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6400 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6416 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6432 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6448 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6464 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6480 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6496 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6512 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6528 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6544 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6560 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6576 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6592 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6608 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6624 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6640 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6656 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6672 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6688 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6704 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6720 - image: "itemlist.6.png" - } - Frame { - msec: 6736 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6752 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6768 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6784 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6800 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6816 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6832 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6848 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6864 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6880 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6896 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6912 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6928 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6944 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6960 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6976 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 6992 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7008 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7024 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7040 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7056 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7072 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7088 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7104 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7120 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7136 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7152 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7168 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7184 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7200 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7216 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7232 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7248 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7264 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7280 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7296 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } - Frame { - msec: 7312 - hash: "bf47cc398a702dd17c8efebb3d2f8073" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png deleted file mode 100644 index a1ab987..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png deleted file mode 100644 index a1ab987..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png deleted file mode 100644 index dcfca3f..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.10.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png deleted file mode 100644 index 7cc4047..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.11.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png deleted file mode 100644 index a97f4ad..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.12.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png deleted file mode 100644 index 7a8c6bd..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.13.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png deleted file mode 100644 index ae47356..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.14.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png deleted file mode 100644 index b3a7260..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.15.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.16.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.17.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.18.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.19.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png deleted file mode 100644 index 9877b92..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png deleted file mode 100644 index 603bd24..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png deleted file mode 100644 index 5fdfbb8..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png deleted file mode 100644 index a1ab987..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png deleted file mode 100644 index 9ccf9b0..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png deleted file mode 100644 index 6b40e1b..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png deleted file mode 100644 index 2fda36d..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml deleted file mode 100644 index f47179d..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-MAC/listview.qml +++ /dev/null @@ -1,3079 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 32 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 48 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 64 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 80 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 96 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 112 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 128 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 144 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 160 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 176 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 192 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 208 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 224 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 240 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 256 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 272 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 288 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 304 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 320 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 336 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 352 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 368 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 384 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 400 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 416 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 432 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 448 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 464 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 480 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 496 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 512 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 528 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 544 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 560 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 576 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 592 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 608 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 624 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 640 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 656 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 672 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 688 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 704 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 720 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 736 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 752 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 768 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 784 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 800 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 816 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 832 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 848 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 864 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 880 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 896 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 912 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 928 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 944 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 960 - image: "listview.0.png" - } - Frame { - msec: 976 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 992 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1008 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1024 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1040 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1056 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1072 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1088 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1104 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1120 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1136 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1152 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1168 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1184 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1200 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1216 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1232 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1248 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1264 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1280 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1296 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1312 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1328 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1344 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1360 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1376 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1392 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1408 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1424 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1440 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1456 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1472 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1488 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1504 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1520 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1536 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1552 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1568 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1584 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1600 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1616 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1632 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1648 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1664 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1680 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1696 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1712 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1728 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1744 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1760 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1776 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1792 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1808 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1824 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1840 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1856 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1872 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1888 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1904 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1920 - image: "listview.1.png" - } - Frame { - msec: 1936 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1952 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1968 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1984 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2000 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2016 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2032 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2048 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2064 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2080 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2096 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2112 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2128 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2144 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2160 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2176 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2192 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2208 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2224 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2240 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2256 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2272 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2288 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2304 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2320 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2336 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2352 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2368 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2384 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2400 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2416 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2432 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2448 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2464 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2480 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2496 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2512 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2528 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2544 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2560 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2576 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2592 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 553; y: 267 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2608 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2624 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 554; y: 267 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 555; y: 266 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2640 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 556; y: 265 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 558; y: 260 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2656 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 560; y: 256 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2672 - hash: "c315e184c4dcb11d7e9fd4509a8b6a1f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 562; y: 250 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 566; y: 234 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2688 - hash: "aeef1cacca9518408519b670443e396f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 568; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2704 - hash: "621626927f83bf7b36b78f5ca7ed4ed0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 572; y: 192 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 572; y: 192 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2720 - hash: "b2aca965b745e98365195c52b9dd9a2c" - } - Frame { - msec: 2736 - hash: "4cc8c162afcc45c79afd8230893d4ddd" - } - Frame { - msec: 2752 - hash: "b9c0815086393878ad00566db7a3c577" - } - Frame { - msec: 2768 - hash: "23cbc15fce97f966c24e3ec626e01960" - } - Frame { - msec: 2784 - hash: "3a7ce897b47ba39e63be31a020de6f3d" - } - Frame { - msec: 2800 - hash: "2a8a32cd27fad2c57c9eb518c7b3b3ca" - } - Frame { - msec: 2816 - hash: "96d676ad58119430b440a5f0a2215f26" - } - Frame { - msec: 2832 - hash: "5f9cd251615ee6a98470a7b6098f7890" - } - Frame { - msec: 2848 - hash: "c9b1c073cbfbf1c353685b3f38baa675" - } - Frame { - msec: 2864 - hash: "cf5bfbfe8904ea40b796d2b33d5cc363" - } - Frame { - msec: 2880 - image: "listview.2.png" - } - Frame { - msec: 2896 - hash: "c75c3342b476f75fc0c5f56a374da13e" - } - Frame { - msec: 2912 - hash: "0dfcd15d21b7e949b56bc69d881c52f5" - } - Frame { - msec: 2928 - hash: "73b7352bb11d29cbf64b6b594e761e42" - } - Frame { - msec: 2944 - hash: "876361c2fc18c2236c1dffd36f517f44" - } - Frame { - msec: 2960 - hash: "0dfaf61e3a86ee056a5d76cf6f7994b2" - } - Frame { - msec: 2976 - hash: "391995cfc5d8d3808b30d74ba5ea3188" - } - Frame { - msec: 2992 - hash: "6fd4f14c16a8870355fa190c94e4be2d" - } - Frame { - msec: 3008 - hash: "0aac04c8092505d934220e61c7959512" - } - Frame { - msec: 3024 - hash: "6cb0fbe22fcd60b5ed6385e49522b32e" - } - Frame { - msec: 3040 - hash: "2eb7fd1a773e32ae94284cf57efaaff2" - } - Frame { - msec: 3056 - hash: "e143ed5eeb94b35ef97e965f34d45e4d" - } - Frame { - msec: 3072 - hash: "529e85f2cd48c1f0d056682b8350445b" - } - Frame { - msec: 3088 - hash: "d74bded985c00ecd192ff8fdce708450" - } - Frame { - msec: 3104 - hash: "f71568b2173f72c4433a019775923c02" - } - Frame { - msec: 3120 - hash: "1185a1c936ac08633c14d39ca9c4f5e9" - } - Frame { - msec: 3136 - hash: "e641720bf75f1e4f0a8471f3a8b35094" - } - Frame { - msec: 3152 - hash: "cecc41fb42abb95505c094829fd415bf" - } - Frame { - msec: 3168 - hash: "7ad89090beb9de3cd7c5a5a03fca900d" - } - Frame { - msec: 3184 - hash: "2a98fe4406367d4e286d8932d6a21318" - } - Frame { - msec: 3200 - hash: "9aad024b2fc25ce886ccaa4ac106b1d8" - } - Frame { - msec: 3216 - hash: "3c4a787a4d590efd2e72706e40df7b6d" - } - Frame { - msec: 3232 - hash: "1135e06c2981bdaed13c13400e178dc3" - } - Frame { - msec: 3248 - hash: "1fbceedf1c20f2aa3f05be36126280e2" - } - Frame { - msec: 3264 - hash: "5d1ec83f43b649c732cc3f7815100428" - } - Frame { - msec: 3280 - hash: "27501f6b6adccfdb77a5228611e2a95a" - } - Frame { - msec: 3296 - hash: "218dc244352c14467f2b2a39d78a1bc7" - } - Frame { - msec: 3312 - hash: "33a998563d2c053e375f619b7a75a224" - } - Frame { - msec: 3328 - hash: "02d34b79e25367e6d0dc1765cab12353" - } - Frame { - msec: 3344 - hash: "2698cf68138aa7d292167bcc85f60b74" - } - Frame { - msec: 3360 - hash: "0b33e929b420596ff1dce2eeef8480db" - } - Frame { - msec: 3376 - hash: "d8ec307a85cecaacaa908ceb34d5db5b" - } - Frame { - msec: 3392 - hash: "4afe1df3e802b41d1b89b5fab4e35190" - } - Frame { - msec: 3408 - hash: "e8f484ed8d2a6745ee87ac9544281d55" - } - Frame { - msec: 3424 - hash: "6df053920e87d7e6e3ec0368b4b14c25" - } - Frame { - msec: 3440 - hash: "6e94791acce321417a37132821c0260d" - } - Frame { - msec: 3456 - hash: "fea3e31cbf3078615f57c934197dac35" - } - Frame { - msec: 3472 - hash: "e8d15890a8bd95db39889d19f046901b" - } - Frame { - msec: 3488 - hash: "038b422b154dfef2d955b833892c581e" - } - Frame { - msec: 3504 - hash: "01180b3d9b504ca2814382eadaf3a4e0" - } - Frame { - msec: 3520 - hash: "869a0aa0d67043822c65383e0f3264d4" - } - Frame { - msec: 3536 - hash: "43785b1214510c10b65018a9d68a93b1" - } - Frame { - msec: 3552 - hash: "95e6ebc35c2fb128b6e6ac0743268523" - } - Frame { - msec: 3568 - hash: "f8c22a6ca3169de4d29b3b0e2908f581" - } - Frame { - msec: 3584 - hash: "6baf16c321847d269718bcb3468aeeb2" - } - Frame { - msec: 3600 - hash: "30804b5eb2a6d99116475cbdc1a9c043" - } - Frame { - msec: 3616 - hash: "c892c17ec947a910b74f5b8704405e9f" - } - Frame { - msec: 3632 - hash: "696029b77512943001c9eba64191e633" - } - Frame { - msec: 3648 - hash: "4c26bb0ca28d74a2bb79d0bfc8127361" - } - Frame { - msec: 3664 - hash: "6e8c50cc14c9afe73b4baf09a6a8f1a4" - } - Frame { - msec: 3680 - hash: "fd20e4259b44357c93f22f35c698fe1b" - } - Frame { - msec: 3696 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3712 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3728 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3744 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3760 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3776 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3792 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3808 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3824 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3840 - image: "listview.3.png" - } - Frame { - msec: 3856 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3872 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3888 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3904 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3920 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3936 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3952 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3968 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3984 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4000 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4016 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4032 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4048 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4064 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4080 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4096 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4112 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4128 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4144 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 521; y: 24 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4160 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 25 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4176 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 32 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 37 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4192 - hash: "a5df688148c264de1d376c9b87ddfa6b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 46 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4208 - hash: "a4e2c1878b0afce0ee1eebd63e9c951a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 66 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4224 - hash: "2f9a79278d492790ef86a09c77e95ff4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 531; y: 136 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 531; y: 136 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4240 - hash: "5b5ce7206b26528157c426f4e1e3e0a8" - } - Frame { - msec: 4256 - hash: "65a1e5f81ab89b163aed46b984cca45e" - } - Frame { - msec: 4272 - hash: "e28253ad5a2415251b68bcda1d7d4bd0" - } - Frame { - msec: 4288 - hash: "71aae5abb4a9e9077053ea21dd3ec315" - } - Frame { - msec: 4304 - hash: "33fcea38fc3b328b3294f9ac2a26aa1a" - } - Frame { - msec: 4320 - hash: "6299eb1d87f371966307668b92de6a0b" - } - Frame { - msec: 4336 - hash: "4f66d8c7cb6971d0fc24089d123c547b" - } - Frame { - msec: 4352 - hash: "d9906d61b31fabf968290ebcd6688f34" - } - Frame { - msec: 4368 - hash: "5a1945993ff8096ba6b933d45586044a" - } - Frame { - msec: 4384 - hash: "331535e54da9bbdbc2fbf2b244ad0199" - } - Frame { - msec: 4400 - hash: "4dc39de0c54f6e0b77f94f6ae6c345ec" - } - Frame { - msec: 4416 - hash: "ec309a298ce246c13eb666488eb75016" - } - Frame { - msec: 4432 - hash: "a133819f8adc6265eb0e438261c869e3" - } - Frame { - msec: 4448 - hash: "da4d64fd6b3ae7d49ee5c5c8d0117a37" - } - Frame { - msec: 4464 - hash: "620dd1c3fc41ce657eac9d1a5b765fd4" - } - Frame { - msec: 4480 - hash: "ff1c370bd1bf75a98ae7125e7dd5a9db" - } - Frame { - msec: 4496 - hash: "59c6e4297109b5cc7c197749867dddae" - } - Frame { - msec: 4512 - hash: "91b1719e86529d0c35a53a2d0a095dd6" - } - Frame { - msec: 4528 - hash: "2994663d35c9eb453a27c1a1fa9aeeb8" - } - Frame { - msec: 4544 - hash: "ae4ec37b9f6a00b3c9139e5cfe13d32e" - } - Frame { - msec: 4560 - hash: "a98340236d1b65f47e88684168c1429d" - } - Frame { - msec: 4576 - hash: "34848b483ea6a2bd412e29d26beb3ab0" - } - Frame { - msec: 4592 - hash: "dd9bae0e2fca84b265d8cb59686ff88d" - } - Frame { - msec: 4608 - hash: "18b6ef6f5913b0612b76e7b2e25073dd" - } - Frame { - msec: 4624 - hash: "9398aab9478279aed1bc40c9378f8da4" - } - Frame { - msec: 4640 - hash: "a297a304c12102f23bd1e0f0207e0df9" - } - Frame { - msec: 4656 - hash: "091db9138cd6ae801ad857105a83c8f9" - } - Frame { - msec: 4672 - hash: "253938ca4a4f13433ddd502eb94cb7cd" - } - Frame { - msec: 4688 - hash: "6002df1793d290e4e31ee0c91c37bbe6" - } - Frame { - msec: 4704 - hash: "212476fa1c3a52fb8eba03ec3aecdcd8" - } - Frame { - msec: 4720 - hash: "80d4d8434d4e96a2bc23f5ed060d6ddc" - } - Frame { - msec: 4736 - hash: "2d4add725f31a04558635ce4b73a758a" - } - Frame { - msec: 4752 - hash: "57c06022ec1e502c4f49f43063c433e7" - } - Frame { - msec: 4768 - hash: "8393e97990993f9d5f68ea65f8e4a2db" - } - Frame { - msec: 4784 - hash: "9a1fcd96dffaf5c79ecc7f9427e02499" - } - Frame { - msec: 4800 - image: "listview.4.png" - } - Frame { - msec: 4816 - hash: "5ae722cf541e3453e73bbee57dc379e9" - } - Frame { - msec: 4832 - hash: "fc7326c2e2e56d9c3036e8dfc2ea77a8" - } - Frame { - msec: 4848 - hash: "f22a2a68cea158f333b0457025d75490" - } - Frame { - msec: 4864 - hash: "d684c8aa9b835779080f170cafead40f" - } - Frame { - msec: 4880 - hash: "dd451e5e421f929d015981bc7aeb8c66" - } - Frame { - msec: 4896 - hash: "d066f228295db7f46520495167d3e946" - } - Frame { - msec: 4912 - hash: "ebf640a457e3498bade3220aafa70331" - } - Frame { - msec: 4928 - hash: "190f5b1f3ce9d200790c34c50bcc62c5" - } - Frame { - msec: 4944 - hash: "9d4ad865246eb008afa40740b5c9a208" - } - Frame { - msec: 4960 - hash: "81c8b2c0b4f9e74f24d328a1d9b40a9f" - } - Frame { - msec: 4976 - hash: "24acc300307e71bee79bce8de76f56cb" - } - Frame { - msec: 4992 - hash: "1f9d31f94cfce6f868bfcc8a104d2465" - } - Frame { - msec: 5008 - hash: "7a3cab008dcb7a893ae30797b33df6f2" - } - Frame { - msec: 5024 - hash: "38d561a2950434e59513439c7f1120ea" - } - Frame { - msec: 5040 - hash: "8d34131faa15bc126bd4d9ef3be39ef5" - } - Frame { - msec: 5056 - hash: "85d57ef15791b56deb537795dd87911e" - } - Frame { - msec: 5072 - hash: "71e932169915a6c8c2cef0b22febf316" - } - Frame { - msec: 5088 - hash: "8b3452981963aeebadc9ac2013150263" - } - Frame { - msec: 5104 - hash: "a3fb8abecfeb48ba1cd1fd8f40896fa0" - } - Frame { - msec: 5120 - hash: "f53ab533f6a58ae45139f3da4bf8ab4e" - } - Frame { - msec: 5136 - hash: "9ec7012404f3c1c7795810dcee5acc3b" - } - Frame { - msec: 5152 - hash: "99ca43bab532dd5d7566e596c65053ce" - } - Frame { - msec: 5168 - hash: "0af83ad2416821cc230cd2856d1a3e39" - } - Frame { - msec: 5184 - hash: "86fa23ddf2005bbf35238ae04ae554ac" - } - Frame { - msec: 5200 - hash: "bb52a748f1d85dde410cfa4f24e3ed20" - } - Frame { - msec: 5216 - hash: "898b96bc5ee9a3ac61764e5cd9af8cfb" - } - Frame { - msec: 5232 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5248 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5264 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5280 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5296 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5312 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5328 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5344 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5360 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5376 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5392 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5408 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5424 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5440 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5456 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5472 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5488 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5504 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5520 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5536 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5552 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5568 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5584 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5600 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5616 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5632 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5648 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5664 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5680 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5696 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5712 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5728 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5744 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5760 - image: "listview.5.png" - } - Frame { - msec: 5776 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5792 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5808 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5824 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5840 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5856 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5872 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5888 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5904 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5920 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5936 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5952 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5968 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 111; y: 230 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 227 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5984 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 223 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6000 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 216 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 210 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6016 - hash: "0076b55d3da4ca365688b6a2c984103f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 112; y: 205 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6032 - hash: "db846ad8e3200ca1fce36a38dc7beab8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 112; y: 192 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6048 - hash: "3cb6b25725b4285f9c096d595224c5ca" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 180 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6064 - hash: "1832e12fdf3b464b02b296e727b33694" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 110; y: 173 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6080 - hash: "6d18d2b5f65cbba4915d0725d24b40f3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 109; y: 158 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 107; y: 140 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6096 - hash: "79bc7afc6b1aa5f8904b3e6d5d4a9389" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 124 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6112 - hash: "4436f2d15304c839aacec486c1fd6d96" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 111 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6128 - hash: "c3bffc7c95893cf9bbd8596208b7f657" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 105 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6144 - hash: "04231c2fdc02729aa34ed4e403dd373b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6160 - hash: "392d75c4b372825e78366eb63a618170" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 87 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 83 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6176 - hash: "7f91f7bdb0cb62d600ac4aa573681fe3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 79 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6192 - hash: "69207181a382650c5e33145555f0d9ba" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 76 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 72 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6208 - hash: "65a184b5c49b02e08114e437483f928d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 104; y: 68 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 105; y: 64 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6224 - hash: "c22da9ce54d04f51fb55da755753a509" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 105; y: 61 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6240 - hash: "59dbd5216847a62f60a1d0701a15bb62" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 57 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 53 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6256 - hash: "bbfc902db6e6ca253afb1c90306b2a63" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 47 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 106; y: 47 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6272 - hash: "5c41f194afec5f7e3db9d98673d03d5c" - } - Frame { - msec: 6288 - hash: "deb06d0f915d5f6ec39b1820d57b6af6" - } - Frame { - msec: 6304 - hash: "deb06d0f915d5f6ec39b1820d57b6af6" - } - Frame { - msec: 6320 - hash: "2a1a1f9239a6ccb308e51796f9b0bb89" - } - Frame { - msec: 6336 - hash: "3c1b44201616b8271023bf05a3f3f0f7" - } - Frame { - msec: 6352 - hash: "87afcef49db8b2b547e85e834f8ec304" - } - Frame { - msec: 6368 - hash: "290081b4b1272ef09ec9964c128e61b5" - } - Frame { - msec: 6384 - hash: "19bb3b23ee4b14a5f0a313106ef7c8c1" - } - Frame { - msec: 6400 - hash: "65a184b5c49b02e08114e437483f928d" - } - Frame { - msec: 6416 - hash: "832d2aefbcaf776f35039be527d367c5" - } - Frame { - msec: 6432 - hash: "69207181a382650c5e33145555f0d9ba" - } - Frame { - msec: 6448 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6464 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6480 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6496 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6512 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6528 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6544 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6560 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6576 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6592 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6608 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6624 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6640 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6656 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6672 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6688 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6704 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6720 - image: "listview.6.png" - } - Frame { - msec: 6736 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6752 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6768 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6784 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6800 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6816 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6832 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6848 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6864 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6880 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6896 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6912 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6928 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6944 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6960 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6976 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6992 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7008 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7024 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7040 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7056 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7072 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7088 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7104 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7120 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7136 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7152 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7168 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7184 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7200 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7216 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7232 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7248 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7264 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7280 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7296 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 519; y: 276 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7312 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 519; y: 275 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7328 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 519; y: 274 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7344 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 273 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 272 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7360 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 271 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7376 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 268 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7392 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 266 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 265 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7408 - hash: "9047f597b9e59ca652c172338bed6ef9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 262 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7424 - hash: "87476f78daecd6bb49e8d6e673d28100" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 260 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7440 - hash: "6bfd895c6b7d97e4102eb26608cdfeca" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 254 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7456 - hash: "e4c2b75beaee54a5781a5acbeb37ea64" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 249 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7472 - hash: "d5e816768e9c3db0631416bd86b1b461" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 243 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7488 - hash: "df6c7252ebb51e7447396b640e1c6ead" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 237 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7504 - hash: "5f4db5386dc76b9f2dac47618c733dee" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 231 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7520 - hash: "534d1d16d8321996969b54875ec5f1e0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 225 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7536 - hash: "5263016e53327df1972498b55a60c0ed" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 219 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7552 - hash: "6787a5a16d2a61643bb1435f6488ada6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 215 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7568 - hash: "1feabcd683590c3d28d899167e6278b3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 519; y: 208 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7584 - hash: "c0495d6083b2e4ddd2b1dca2f231529c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 520; y: 202 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7600 - hash: "cb302493a17c1806dfcdf002c44e7acd" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 196 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7616 - hash: "f3822b79b678532ce7f826952636be90" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 189 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7632 - hash: "6e30eed182c38be110ba9c7e95b223be" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 185 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7648 - hash: "9e3ad0331c0c041b9a5747a1d44a43fe" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 177 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7664 - hash: "791e6abf9dae670770c2429ee9f1ad71" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 169 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7680 - image: "listview.7.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 160 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7696 - hash: "d3ae366fb8212cb987e23150802c88e3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 156 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7712 - hash: "b87708e19d7e8b64fe1ab50ec1723975" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 147 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7728 - hash: "512678e45cdd8d48e10b08ee020afe8e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 144 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7744 - hash: "211aa70e813819d476996b3396e9e5a0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7760 - hash: "f16eaa360604be84ce61364ad9733b52" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 130 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7776 - hash: "d3af36dfb187d08abe1458f186a935a2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 124 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7792 - hash: "9d0a0ba1deb7c4a4a8838e5e6a27f2f6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 122 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7808 - hash: "69aac14f4c137e66724ca33f00a86676" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7824 - hash: "893d56e2a2ca257fae9f0c6c0629903d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 111 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7840 - hash: "b9f734e57a72e33973740a59776948d9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 106 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7856 - hash: "e4b0f3f6a6785d7a183e4a36c5803301" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7872 - hash: "99ee1e8803c05e546a721b0c9ee39499" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 101 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7888 - hash: "96e7da2f895500a786ed36cb295e9003" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7904 - hash: "cd369fc5dc31814208e56cf7cd0decea" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7920 - hash: "5fee72994b65a45b4900a3073f86a3e1" - } - Frame { - msec: 7936 - hash: "9a2f8a65d842b8f92998e6411f7cd53c" - } - Frame { - msec: 7952 - hash: "2848d69017ce71ae101ccdfa7c67f933" - } - Frame { - msec: 7968 - hash: "6568aa88e81f988f65da435df7166167" - } - Frame { - msec: 7984 - hash: "d5f15ee08a2d7667786757a378a7a7f4" - } - Frame { - msec: 8000 - hash: "9b566bd02a561b32d1a4c1ec99c2e2c3" - } - Frame { - msec: 8016 - hash: "580419e1c9e91046547d913f6b8790a4" - } - Frame { - msec: 8032 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Frame { - msec: 8048 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Frame { - msec: 8064 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 521; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8080 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Frame { - msec: 8096 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Frame { - msec: 8112 - hash: "83b91a371d682a501bc3a3fceabe4f8c" - } - Frame { - msec: 8128 - hash: "798b1dbfa0cce362213f426e2c60ac0e" - } - Frame { - msec: 8144 - hash: "d71b6a693c430a618c23413cb65bb320" - } - Frame { - msec: 8160 - hash: "2baae394390da39447a67151bc503d65" - } - Frame { - msec: 8176 - hash: "06688b05c61a7b862d39534207a8adab" - } - Frame { - msec: 8192 - hash: "a1d3042e16709817906dcdc673ee52c7" - } - Frame { - msec: 8208 - hash: "236dd41feac1b1a8a4bd7911bb184da2" - } - Frame { - msec: 8224 - hash: "f3ec821bba1d32e90bdab0e85c07d7d8" - } - Frame { - msec: 8240 - hash: "e328c35adf7ffc3d7e3af97e798ec8a5" - } - Frame { - msec: 8256 - hash: "651101db68fd3ed1dc5f441c126dc31b" - } - Frame { - msec: 8272 - hash: "651101db68fd3ed1dc5f441c126dc31b" - } - Frame { - msec: 8288 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8304 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8320 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8336 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8352 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8368 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8384 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8400 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8416 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8432 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8448 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8464 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8480 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8496 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8512 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8528 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8544 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8560 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8576 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8592 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8608 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8624 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8640 - image: "listview.8.png" - } - Frame { - msec: 8656 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8672 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8688 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8704 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8720 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8736 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8752 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8768 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8784 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8800 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8816 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8832 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8848 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8864 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8880 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8896 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8912 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8928 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8944 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8960 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8976 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8992 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9008 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9024 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9040 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9056 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9072 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9088 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9104 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9120 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9136 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9152 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9168 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9184 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9200 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9216 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9232 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9248 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9264 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9280 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9296 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9312 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9328 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9344 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9360 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9376 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9392 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9408 - hash: "1171be123a361d72859c25434573482c" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml deleted file mode 100644 index b291ea4..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic1.qml +++ /dev/null @@ -1,159 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 32 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 48 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 64 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 80 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 96 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 112 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 128 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 144 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 160 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 176 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 192 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 208 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 224 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 240 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 256 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 272 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 288 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 304 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 320 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 336 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 352 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 368 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 384 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 400 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 416 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 432 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 448 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 464 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 480 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 496 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 512 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 528 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 544 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 560 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 576 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml deleted file mode 100644 index e32e9e6..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic2.qml +++ /dev/null @@ -1,187 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 32 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 48 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 64 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 80 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 96 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 112 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 128 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 144 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 160 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 176 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 192 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 208 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 224 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 240 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 256 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 272 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 288 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 304 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 320 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 336 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 352 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 368 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 384 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 400 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 416 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 432 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 448 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 464 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 480 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 496 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 512 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 528 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 544 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 560 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 576 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 592 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 608 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 624 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 640 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 656 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 672 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 688 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml deleted file mode 100644 index ed0c53b..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic3.qml +++ /dev/null @@ -1,147 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 32 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 48 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 64 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 80 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 96 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 112 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 128 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 144 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 160 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 176 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 192 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 208 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 224 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 240 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 256 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 272 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 288 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 304 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 320 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 336 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 352 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 368 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 384 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 400 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 416 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 432 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 448 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 464 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 480 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 496 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 512 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 528 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml deleted file mode 100644 index a70b741..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data-X11/basic4.qml +++ /dev/null @@ -1,171 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 32 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 48 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 64 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 80 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 96 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 112 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 128 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 144 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 160 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 176 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 192 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 208 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 224 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 240 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 256 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 272 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 288 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 304 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 320 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 336 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 352 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 368 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 384 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 400 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 416 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 432 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 448 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 464 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 480 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 496 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 512 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 528 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 544 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 560 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 576 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 592 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 608 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } - Frame { - msec: 624 - hash: "c0dc2737283d8dfa62631e0cbb948b99" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml index 7aadf36..6670ae5 100644 --- a/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml +++ b/tests/auto/declarative/qmlvisual/ListView/data/basic1.qml @@ -6,154 +6,78 @@ VisualTest { } Frame { msec: 16 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 32 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 48 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 64 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 80 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 96 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 112 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 128 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 144 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 160 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 176 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 192 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 208 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 224 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 240 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 256 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 272 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 288 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 304 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 320 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 336 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 352 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 368 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 384 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 400 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 416 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 432 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 448 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 464 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 480 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 496 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 512 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 528 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 544 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 560 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 576 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } } diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml index 5624d6b..283b443 100644 --- a/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml +++ b/tests/auto/declarative/qmlvisual/ListView/data/basic2.qml @@ -6,182 +6,162 @@ VisualTest { } Frame { msec: 16 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 32 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 48 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 64 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 80 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 96 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 112 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 128 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 144 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 160 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 176 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 192 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 208 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 224 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 240 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 256 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 272 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 288 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 304 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 320 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 336 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 352 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 368 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 384 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 400 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 416 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 432 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 448 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 464 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 480 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 496 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 512 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 528 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 544 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 560 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 576 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 592 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 608 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 624 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 640 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 656 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 672 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 688 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } } diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml index 16a8329..2ee835a 100644 --- a/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml +++ b/tests/auto/declarative/qmlvisual/ListView/data/basic3.qml @@ -6,142 +6,114 @@ VisualTest { } Frame { msec: 16 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 32 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 48 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 64 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 80 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 96 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 112 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 128 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 144 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 160 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 176 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 192 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 208 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 224 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 240 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 256 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 272 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 288 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 304 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 320 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 336 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 352 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 368 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 384 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 400 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 416 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 432 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 448 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 464 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 480 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 496 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 512 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 528 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } } diff --git a/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml b/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml index 23cc255..3bbf836 100644 --- a/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml +++ b/tests/auto/declarative/qmlvisual/ListView/data/basic4.qml @@ -6,166 +6,110 @@ VisualTest { } Frame { msec: 16 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 32 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 48 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 64 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 80 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 96 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 112 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 128 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 144 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 160 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 176 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 192 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 208 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 224 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 240 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 256 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 272 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 288 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 304 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 320 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 336 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 352 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 368 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 384 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 400 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 416 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } Frame { msec: 432 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 448 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 464 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 480 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 496 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 512 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 528 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 544 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 560 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 576 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 592 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 608 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" - } - Frame { - msec: 624 - hash: "c0ec1bac5550efaa1f8ce7b46c2fed94" + hash: "7b874555d744b10ed666dcb6fad79a19" } } diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png index a1947ca..75d2089 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.0.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png index d27b7fa..578b7d1 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.1.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png index fdab8c6..def378f 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.2.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png index dc321a8..e23b903 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.3.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png index fdab8c6..def378f 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.4.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png index 15b51cb..b81e713 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.5.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png index a1947ca..75d2089 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png and b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.6.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml index 829fbb3..b23594b 100644 --- a/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml +++ b/tests/auto/declarative/qmlvisual/ListView/data/itemlist.qml @@ -478,7 +478,7 @@ VisualTest { } Frame { msec: 1712 - hash: "a68b1bc6c2963ee92c3a45f500667b3b" + hash: "b6e433a23282a50db2e165a2447ba3f6" } Mouse { type: 5 @@ -498,7 +498,7 @@ VisualTest { } Frame { msec: 1728 - hash: "7cda93e59466b3348e7ffe3895f89e86" + hash: "68d443f16c16821ffc9ca68b17c76034" } Mouse { type: 5 @@ -510,7 +510,7 @@ VisualTest { } Frame { msec: 1744 - hash: "06e0008c78e919f7270402938d9d764b" + hash: "04b9041c6f10969889d92e94785c7e88" } Mouse { type: 5 @@ -530,7 +530,7 @@ VisualTest { } Frame { msec: 1760 - hash: "9d8da9199efebb95f56e5d4ebc9a585e" + hash: "64b902fe7ab4d89ef0c7b760974e3488" } Mouse { type: 5 @@ -550,7 +550,7 @@ VisualTest { } Frame { msec: 1776 - hash: "54a60a4279911ba4a8a5741bcadfa783" + hash: "c2125b59e00f1a1c189c778c44fe39b0" } Mouse { type: 5 @@ -570,35 +570,35 @@ VisualTest { } Frame { msec: 1792 - hash: "a1a19370a1a8ed78e475f0d0eb12311c" + hash: "c78175071f2e95649d529b9e1cf045b2" } Frame { msec: 1808 - hash: "196a3b127cf7065614c34856bf8d8bca" + hash: "ca8ef2c2a7b06e55899b1b63208e257d" } Frame { msec: 1824 - hash: "5fbefbd7c7be4374382cc4c8b86ac78a" + hash: "b54957726e6257956b63e1d7ebbc96e4" } Frame { msec: 1840 - hash: "d6a544c622e504c1b931e1a8a1310a6e" + hash: "48847db78ddde75bb96edf01c52c3400" } Frame { msec: 1856 - hash: "20e76f0eb4ec5f691999faf8ad313370" + hash: "48dab5cd1feedf1b5dd67390d6f40fda" } Frame { msec: 1872 - hash: "7f84a3545907c754ae8a6a30ef61c98d" + hash: "fe32013c245091b577d0e38eea05705d" } Frame { msec: 1888 - hash: "b544901eae32903ad054e8cdfed715eb" + hash: "e4b6e31029c1ea26405537c6d2304b72" } Frame { msec: 1904 - hash: "a010ed1e3312f4ca9f429b7e32cdcef9" + hash: "b5fc9ab0a96ef526e6eb1c022f26c6a7" } Frame { msec: 1920 @@ -606,135 +606,135 @@ VisualTest { } Frame { msec: 1936 - hash: "93a731dc6f71b6ff5400bf74c87e6c46" + hash: "c23846634417c3e8dbbef5175036c071" } Frame { msec: 1952 - hash: "c73f63d1a024ba956e693487b3ccc761" + hash: "1bce9b85235e9a1a472c079dfec70ec5" } Frame { msec: 1968 - hash: "539d3d00fce2d0128cd697d86d237fe7" + hash: "98e707a3e39a5f7bd4a101c2ed83535c" } Frame { msec: 1984 - hash: "52752d7d6f2d0e085f7132313907b72b" + hash: "f73470027601a0c1a2382d5ded9e5fa6" } Frame { msec: 2000 - hash: "f46dd5803a6075e979e0fc733d503bfb" + hash: "d917b18a47b4e90821cba8987492cd1f" } Frame { msec: 2016 - hash: "b8734698a6bad00ecf019f85328c2c21" + hash: "fa526c5ef57eaa210fb4d03b72c35b69" } Frame { msec: 2032 - hash: "1cfc499ca756023430cc5b2fa95a599d" + hash: "15cbc226b032d5a97199735ea7a1408b" } Frame { msec: 2048 - hash: "63a816548837c19f8f0494c137fc0174" + hash: "6ffd2b79cf0e941a59e74bc6f9025bcb" } Frame { msec: 2064 - hash: "1bce9b85235e9a1a472c079dfec70ec5" + hash: "c009924bfa30153f22ab168b539494e9" } Frame { msec: 2080 - hash: "6677863e7f74c12648409883f73adbe2" + hash: "0525908c0302ada989e28990bac3f2ca" } Frame { msec: 2096 - hash: "98e707a3e39a5f7bd4a101c2ed83535c" + hash: "75c1295ef99680784b2e11fb88fa1423" } Frame { msec: 2112 - hash: "c1f6d8842d14a9394d4b7797314f50e8" + hash: "53064c1938f08a55603a99b0db225174" } Frame { msec: 2128 - hash: "579758b477bcd2112b305a5aac7df338" + hash: "99d9e58697736198e0a00443d237e85b" } Frame { msec: 2144 - hash: "4a7bb81090db246db53e2dbc56f710ea" + hash: "6c1e860aef983367365d53f5849ad441" } Frame { msec: 2160 - hash: "074995cdd8a70817d1c8a7bb0ad4c542" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2176 - hash: "bd8d7bda4d2e9ad1fba2895d568f36cc" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2192 - hash: "40cce3d2d80ac470af44fc334cec1d5b" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2208 - hash: "15cbc226b032d5a97199735ea7a1408b" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2224 - hash: "12b296aea9b058a5402d0d0a620f8edc" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2240 - hash: "6ffd2b79cf0e941a59e74bc6f9025bcb" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2256 - hash: "589a58ef76ea709dc8d80390c9044f99" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2272 - hash: "c009924bfa30153f22ab168b539494e9" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2288 - hash: "4b83674a7c2daa68d735901ad40be2bd" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2304 - hash: "0525908c0302ada989e28990bac3f2ca" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2320 - hash: "89eb13976ba3ba4413cafeb0cc91c01b" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2336 - hash: "75c1295ef99680784b2e11fb88fa1423" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2352 - hash: "93d89165cf6a97c76ae6e7f75678a3cd" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2368 - hash: "53064c1938f08a55603a99b0db225174" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2384 - hash: "31db5684466c0c32128a9a8c7b1835e1" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2400 - hash: "99d9e58697736198e0a00443d237e85b" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2416 - hash: "6c1e860aef983367365d53f5849ad441" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2432 - hash: "6c1e860aef983367365d53f5849ad441" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2448 - hash: "6c1e860aef983367365d53f5849ad441" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 2464 @@ -894,7 +894,7 @@ VisualTest { } Frame { msec: 2928 - hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f" + hash: "99f9988040a389576cb6420b5391f768" } Mouse { type: 5 @@ -914,7 +914,7 @@ VisualTest { } Frame { msec: 2944 - hash: "b10a6206830a876017799ef2fcf61b1a" + hash: "52af1b81022e8572b9123461d123197f" } Mouse { type: 5 @@ -934,7 +934,7 @@ VisualTest { } Frame { msec: 2960 - hash: "b2e24759ba10afd6cff90f4b1e04b496" + hash: "e1390ad02ae7a6e757df4a7af9032167" } Mouse { type: 5 @@ -954,11 +954,11 @@ VisualTest { } Frame { msec: 2976 - hash: "ccbcd6f45cb529c2db71504c0f69d73e" + hash: "bf57f309378c956dfd70aa79a7dd97c5" } Frame { msec: 2992 - hash: "7b31c6d5931677f1aa1e8c7d48a4ff22" + hash: "408b59b96ecad0541ecbb97262c2567b" } Frame { msec: 3008 @@ -966,171 +966,171 @@ VisualTest { } Frame { msec: 3024 - hash: "dd639d1df3d4a9b8f06718def63d588f" + hash: "9aabf0500b1272375f5f6db1bd1d7b04" } Frame { msec: 3040 - hash: "39d767b09a648ef6295cec2848f9226f" + hash: "2e92065ca9425d1645d69c1734804518" } Frame { msec: 3056 - hash: "5dd46d5f386431e7b13348ac9a9630ed" + hash: "c73b2e430a0e96a660aa4447697e5adf" } Frame { msec: 3072 - hash: "0354e5183b0e66e7ba146d292c559df4" + hash: "875560b509215a869d1cad8a05f38850" } Frame { msec: 3088 - hash: "984aa6d7075e24de429e05b1b0eda94a" + hash: "4b5368f0d86bffeb6bd31b58aec88650" } Frame { msec: 3104 - hash: "1af58a2f44f1f613712d4df85e38356d" + hash: "3f4c24f7ac89da982af22032309637fb" } Frame { msec: 3120 - hash: "6e4085e7f1fee724d78808753f04b471" + hash: "8cacde33b70fc62b9b0c753091168b97" } Frame { msec: 3136 - hash: "73a019ef9057639d631cd99a431b3f3b" + hash: "7b8c1bb2a3ab9ba23ac17dc5422adac8" } Frame { msec: 3152 - hash: "c9414a2e655a90dfdcb6fb288b4ba0ca" + hash: "5aa34dccdd406b7e93dfdf756bbca5f0" } Frame { msec: 3168 - hash: "3f4c24f7ac89da982af22032309637fb" + hash: "4865c30dc45fbf5ca82047b77eca0912" } Frame { msec: 3184 - hash: "a50e6ada8f73a257657f4348ceaffcfd" + hash: "1dcecc3a899b060a1469ef91e0d21765" } Frame { msec: 3200 - hash: "a67bf40d09259bbd079c12ae4f49150f" + hash: "31422699bdbbbf827f7bb1f1ef78823e" } Frame { msec: 3216 - hash: "a2fc512b7c234a9d0b2c1a83387a8a46" + hash: "5859920a625ef94a644fda85d14e92fb" } Frame { msec: 3232 - hash: "85090683ce9a3c9833b1cb0b3df076ee" + hash: "37f1f7aaeaed28807f51fd9ad8c414ac" } Frame { msec: 3248 - hash: "275f3594a0e2cc4b6717f9f336e7e1b6" + hash: "14592a6c86f211c20abab5cf34a406b4" } Frame { msec: 3264 - hash: "2473eb11f7b65a784a2b166114026488" + hash: "77c18ac7dfff2a4e516915e3e3df0717" } Frame { msec: 3280 - hash: "4865c30dc45fbf5ca82047b77eca0912" + hash: "f619097356671f6eb54d3b1c481e709d" } Frame { msec: 3296 - hash: "54de88bca395449fbaea2c090c7a5d91" + hash: "7f19ea52e9e41a3b1bd90bb2a144d305" } Frame { msec: 3312 - hash: "833f9295cf9a34934f001eac48551b59" + hash: "17deb6b26fc9d27d5194995c102da4ac" } Frame { msec: 3328 - hash: "5bf565f57ababa7380faeee94add91ca" + hash: "29c52328b54f02cc9042f676d710b9b2" } Frame { msec: 3344 - hash: "6325578867f1eb3b2d47ed40b017b571" + hash: "c3b219bdd7710427d134402a8d3e6429" } Frame { msec: 3360 - hash: "046a6114176b3a3206b7a2acd6e30b41" + hash: "40204fdb7a84b86f1380224908092354" } Frame { msec: 3376 - hash: "f8d4120a17f28c2d1d9c4be959098058" + hash: "de7f3c83f37cc89c87009626c72e7642" } Frame { msec: 3392 - hash: "71356d2e48aad2900784ea6bc1a3d908" + hash: "e4dacafba5ab5f8db53f08cef458cf42" } Frame { msec: 3408 - hash: "b84ad460fb81fdc4049abe8f3ff180bb" + hash: "b554512bac0766063870c5b3acb1d24f" } Frame { msec: 3424 - hash: "0354239f5eaea23474d9f81385392a8a" + hash: "bb5ea2a238920a8486263bc7450edfb4" } Frame { msec: 3440 - hash: "8ef0eef3393e07ae7605c865a95edc30" + hash: "bb5ea2a238920a8486263bc7450edfb4" } Frame { msec: 3456 - hash: "5b8b384cc8e3faf4310015e19b3eb487" + hash: "b554512bac0766063870c5b3acb1d24f" } Frame { msec: 3472 - hash: "77c18ac7dfff2a4e516915e3e3df0717" + hash: "b554512bac0766063870c5b3acb1d24f" } Frame { msec: 3488 - hash: "c1d3264384c26345eb8100de829309ca" + hash: "e4dacafba5ab5f8db53f08cef458cf42" } Frame { msec: 3504 - hash: "6b21f71d0bedef4bbcb445a13f61e7a3" + hash: "e4dacafba5ab5f8db53f08cef458cf42" } Frame { msec: 3520 - hash: "f619097356671f6eb54d3b1c481e709d" + hash: "de7f3c83f37cc89c87009626c72e7642" } Frame { msec: 3536 - hash: "e56e3a90da446e0c482cb93717f6aacc" + hash: "40204fdb7a84b86f1380224908092354" } Frame { msec: 3552 - hash: "aa94ebdbb4b8423aff28c95daff0baf5" + hash: "3b2e2d957585fb44a7165186a146892c" } Frame { msec: 3568 - hash: "e1744d9cacd1a2c96af4cfdd5c486995" + hash: "c3b219bdd7710427d134402a8d3e6429" } Frame { msec: 3584 - hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + hash: "8d424f37bb6af879129e57661d30a162" } Frame { msec: 3600 - hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + hash: "29c52328b54f02cc9042f676d710b9b2" } Frame { msec: 3616 - hash: "7f19ea52e9e41a3b1bd90bb2a144d305" + hash: "8ef246d322446e7f0848b99495f89e2b" } Frame { msec: 3632 - hash: "88143ff6c278a5433b314b551b7b8b1d" + hash: "17deb6b26fc9d27d5194995c102da4ac" } Frame { msec: 3648 - hash: "88143ff6c278a5433b314b551b7b8b1d" + hash: "5f6708f615654c459f5749676fc09016" } Frame { msec: 3664 - hash: "88143ff6c278a5433b314b551b7b8b1d" + hash: "1734205ea5e7539b47d80c5a93ec74aa" } Frame { msec: 3680 - hash: "88143ff6c278a5433b314b551b7b8b1d" + hash: "1734205ea5e7539b47d80c5a93ec74aa" } Frame { msec: 3696 @@ -1298,7 +1298,7 @@ VisualTest { } Frame { msec: 4160 - hash: "c2c9c284b185a89faf4ddb5a7867f449" + hash: "f619097356671f6eb54d3b1c481e709d" } Mouse { type: 5 @@ -1310,7 +1310,7 @@ VisualTest { } Frame { msec: 4176 - hash: "de1c18aeda5d2fbd6dad4554c78617bd" + hash: "240081760f0cf2f02be4d6d2600d2bbc" } Mouse { type: 5 @@ -1338,11 +1338,11 @@ VisualTest { } Frame { msec: 4192 - hash: "a67bf40d09259bbd079c12ae4f49150f" + hash: "3b85c1739fdf3933d8cb0b2eaf22e6e3" } Frame { msec: 4208 - hash: "94514668dafbe41c5890a578efd6dea4" + hash: "f811f3c6b022730dd68ebd7b1659ea40" } Frame { msec: 4224 @@ -1350,139 +1350,139 @@ VisualTest { } Frame { msec: 4240 - hash: "4b5368f0d86bffeb6bd31b58aec88650" + hash: "7b7f5daf5eaf047e69d04b5bcb73240c" } Frame { msec: 4256 - hash: "b459bde7bb4ce51e6ecdab58f64fcbb9" + hash: "1af58a2f44f1f613712d4df85e38356d" } Frame { msec: 4272 - hash: "7bac8cc3ec64c9ad1c0da282e38c953e" + hash: "1bbdda445cec7f95a189c15d7e3c77b8" } Frame { msec: 4288 - hash: "a73a58c3d7a757547740a2a161f4c756" + hash: "91d8bcfebff29d2caf526b4012daaf46" } Frame { msec: 4304 - hash: "b35edcb1fa3568a3e770ab2364b82e75" + hash: "71ec8c363ca6a6f7556afb70faccffe6" } Frame { msec: 4320 - hash: "d6c863ef57c5e5cb04cdac72f920db0b" + hash: "303ebc28d09a49de52cb1adaa03872dd" } Frame { msec: 4336 - hash: "0db5e4588ff851918b07796f0cf07382" + hash: "9402e86bf4ffa62c60b02531a3735275" } Frame { msec: 4352 - hash: "71ec8c363ca6a6f7556afb70faccffe6" + hash: "5652de6fb2e107d41c0c5aeacf5a3055" } Frame { msec: 4368 - hash: "18d026e9c965ada1db67c643576d2a80" + hash: "b6a2ade6565a86b1f8e369b02e0b93f9" } Frame { msec: 4384 - hash: "69f71c22dff981a4da8ec1edcf90e79f" + hash: "30dd35e0b9ffa846f3cfc39edcbae511" } Frame { msec: 4400 - hash: "680460f5e4d9e649931601041af046b2" + hash: "401975fb4c9a48953aec25adb593eec4" } Frame { msec: 4416 - hash: "3028763fd15de2607b20b1331b904a4a" + hash: "71f9039c7aa9c8dc6d1de4561b1d5537" } Frame { msec: 4432 - hash: "333eb60e217fe1ea7469eab52ac461f1" + hash: "e1390ad02ae7a6e757df4a7af9032167" } Frame { msec: 4448 - hash: "ccbcd6f45cb529c2db71504c0f69d73e" + hash: "53a26f00bd49b8a9c065be99f9402d9c" } Frame { msec: 4464 - hash: "3445df9b41a0a3e74738cbf328ab7d5c" + hash: "b6e515e9a27af23b895f5024a41ce7b3" } Frame { msec: 4480 - hash: "bd2c072558479e9de7a97207e58cc57f" + hash: "85d143505d56f53c629358b37ad11581" } Frame { msec: 4496 - hash: "3d34b0b24a30eda93377dcb4585afed8" + hash: "de5cbdd848a07b78f9c5eb510cca2d3e" } Frame { msec: 4512 - hash: "d3045703863b0c5a327b9355c23d69f2" + hash: "0ad7411316031e22034c14e81ca3a806" } Frame { msec: 4528 - hash: "2f2eb55f693415b840a317211b250e9f" + hash: "32bef6f5005ad94e29ff59165958fbdc" } Frame { msec: 4544 - hash: "791b9ca7d47a3343474c30a35e336d4b" + hash: "87758dd311f91193bf1e3536c2f58525" } Frame { msec: 4560 - hash: "73a0c02ebad6d3d5f939d9a00dd898bf" + hash: "d4c34ed49317c6692d71681fcd9842b6" } Frame { msec: 4576 - hash: "d5c11135d586711b12f236430a2c2795" + hash: "abaa235bb946a8abaddd52981d632c2d" } Frame { msec: 4592 - hash: "34f9ea214fe714ff4e994f715ea6ea39" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4608 - hash: "8e49afa00983b156b818533923fb6edd" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4624 - hash: "e7e7bef17cee92eca9191fd734d7a577" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4640 - hash: "e407f6ed7cb3c130365ab5515d6308c0" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4656 - hash: "5bb06b4e74532ba5bc8c7bc38bf77d7f" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4672 - hash: "0ad7411316031e22034c14e81ca3a806" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4688 - hash: "dd81d7a9b48c922b4c42cba1b5f2b9d7" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4704 - hash: "32bef6f5005ad94e29ff59165958fbdc" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4720 - hash: "87758dd311f91193bf1e3536c2f58525" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4736 - hash: "015be92a4ff4e735fcc3cbc7a8b9d763" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4752 - hash: "d4c34ed49317c6692d71681fcd9842b6" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4768 - hash: "abaa235bb946a8abaddd52981d632c2d" + hash: "99f9988040a389576cb6420b5391f768" } Frame { msec: 4784 @@ -1650,7 +1650,7 @@ VisualTest { } Frame { msec: 5280 - hash: "95b380c9ab6f8db7b822faf023d94546" + hash: "99f9988040a389576cb6420b5391f768" } Mouse { type: 5 @@ -1670,7 +1670,7 @@ VisualTest { } Frame { msec: 5296 - hash: "bb79e53556698c62ec30c75be9f6b7d7" + hash: "6ffd2b79cf0e941a59e74bc6f9025bcb" } Mouse { type: 5 @@ -1698,115 +1698,115 @@ VisualTest { } Frame { msec: 5312 - hash: "285cc2f0df1f59f25a0135560ab6edf2" + hash: "4aa05d978267325ae00cb45e310a2f01" } Frame { msec: 5328 - hash: "93a731dc6f71b6ff5400bf74c87e6c46" + hash: "b5717b311259c77a0210e26ab99dd401" } Frame { msec: 5344 - hash: "eb555741ab128a50de5a18a454f2e639" + hash: "9b3fde82278fa2f0caaf64cf23bb6530" } Frame { msec: 5360 - hash: "5dbe6cf898c1e37fcaacecfcf57b2194" + hash: "e7795610115593e78bb32f7bcc0ae2eb" } Frame { msec: 5376 - hash: "e7795610115593e78bb32f7bcc0ae2eb" + hash: "0dc7c4c161e0b3c3d176e5e6bc08a805" } Frame { msec: 5392 - hash: "20e76f0eb4ec5f691999faf8ad313370" + hash: "7c2b0307c4040d8d9e88425b3bf3fb70" } Frame { msec: 5408 - hash: "d6a544c622e504c1b931e1a8a1310a6e" + hash: "cf2acc805e9707327b01eb979f2b67a3" } Frame { msec: 5424 - hash: "e7a3a21feed244c5b1c710a9254c15f0" + hash: "7aeec517e845c1c5012ed63be6bbd006" } Frame { msec: 5440 - hash: "5a4b1aca24f121d1373646e9d80b86fd" + hash: "a978890b419f9503e53d4d3f4f9b8c9b" } Frame { msec: 5456 - hash: "331d2ec7021655c86aa64e47718a1088" + hash: "73339b67e49210b4760b8e06fa4067b7" } Frame { msec: 5472 - hash: "92096bc872e7395aa5b75c44646a0b60" + hash: "d09a245890e813c248050132a76465f3" } Frame { msec: 5488 - hash: "0d9aa6cee4d21488cbb5153f8f3ed593" + hash: "35b874b3b4d7d1e59852233fce192b0b" } Frame { msec: 5504 - hash: "c1b943d43701605563fffffcb75f9fa7" + hash: "4f80a0da1941e9c208036f22df93bed8" } Frame { msec: 5520 - hash: "1b680025d5ad1ddd8f8d5f570ba73e71" + hash: "7bbdc4ce95bc12e505f24cb8b137a0f1" } Frame { msec: 5536 - hash: "5539a3b9f60ea747c10ed8328b467cbf" + hash: "e68b5fb604a45d4e7ee21f6e06460b47" } Frame { msec: 5552 - hash: "0a1317bcb606cd3488c5b14ee5d96585" + hash: "903059d468bed1ac8395e38a19c9dd38" } Frame { msec: 5568 - hash: "8844af68b11db7d92c69804c7371a746" + hash: "d7430ebf26f2de6f648471c19455cf0f" } Frame { msec: 5584 - hash: "28d7fd127739c6e3b8488651b725c802" + hash: "d5268cd58c222451d48038e715e83802" } Frame { msec: 5600 - hash: "0cf1a7d958a96aa2768995dddc5ccc09" + hash: "99b4534b0bf58dc8e28c1118a5baec33" } Frame { msec: 5616 - hash: "64b902fe7ab4d89ef0c7b760974e3488" + hash: "ade5beb259b5277c333ca806fc9bdbec" } Frame { msec: 5632 - hash: "aba11c597eba550fc1eaddbf554057f6" + hash: "f34d2248999f5f51210064315d631f60" } Frame { msec: 5648 - hash: "1bacaa3bb9dc3cac9ffc7491cb4dc1a5" + hash: "40382f644935dc4e99353fa29c3e0b21" } Frame { msec: 5664 - hash: "0ba8b582234d9f0c198c0c9e18e1cb02" + hash: "65af7a4a4aea5a983ea3fb9324e74256" } Frame { msec: 5680 - hash: "f66eaf2b5c3529987c0d9d005351ed73" + hash: "b8db9180b4ad15fdbd25a4e974512f92" } Frame { msec: 5696 - hash: "75b0bb720fa4c77da3783b3ff31c2fae" + hash: "2311ce1a83a43619ab7ce537a2b948e1" } Frame { msec: 5712 - hash: "345b235bb7f13409378e5c0c370f2a41" + hash: "35fe67a91e50f8ebc896451b39cb8f1c" } Frame { msec: 5728 - hash: "83b7e902dce4e0fdc4ef5d629188c23c" + hash: "35fe67a91e50f8ebc896451b39cb8f1c" } Frame { msec: 5744 - hash: "04b9041c6f10969889d92e94785c7e88" + hash: "0b7fc796f818bddcada99e9981f1cce0" } Frame { msec: 5760 @@ -1814,59 +1814,59 @@ VisualTest { } Frame { msec: 5776 - hash: "4f3a902addc34ecdaf390e2427cc52e7" + hash: "35fe67a91e50f8ebc896451b39cb8f1c" } Frame { msec: 5792 - hash: "68d443f16c16821ffc9ca68b17c76034" + hash: "35fe67a91e50f8ebc896451b39cb8f1c" } Frame { msec: 5808 - hash: "9d25adc77befa761ee376a9b43595b5e" + hash: "2311ce1a83a43619ab7ce537a2b948e1" } Frame { msec: 5824 - hash: "a68b1bc6c2963ee92c3a45f500667b3b" + hash: "127871a98123b7bd44f4c38f27cbc836" } Frame { msec: 5840 - hash: "d5268cd58c222451d48038e715e83802" + hash: "b8db9180b4ad15fdbd25a4e974512f92" } Frame { msec: 5856 - hash: "f37d461541a8ec7a4161b18748de6aea" + hash: "0974df6a7277bba11a3d3f400c68f4f1" } Frame { msec: 5872 - hash: "805319ac7ca842feb3649e92f8b5b72f" + hash: "65af7a4a4aea5a983ea3fb9324e74256" } Frame { msec: 5888 - hash: "73124472a05080891d4948d8ca273f8c" + hash: "b3e92eb4cfe548b92ac526066dfc7d23" } Frame { msec: 5904 - hash: "b6e433a23282a50db2e165a2447ba3f6" + hash: "40382f644935dc4e99353fa29c3e0b21" } Frame { msec: 5920 - hash: "fd8d3f5688b1806998c6087e18c6c730" + hash: "39fcad34db24d591e24c8ae1c7094d5b" } Frame { msec: 5936 - hash: "f132dd459950ef2d18aa93ca950d0692" + hash: "165b91b850bcb8dd1d9b1eaa6f81be57" } Frame { msec: 5952 - hash: "ade5beb259b5277c333ca806fc9bdbec" + hash: "f34d2248999f5f51210064315d631f60" } Frame { msec: 5968 - hash: "ade5beb259b5277c333ca806fc9bdbec" + hash: "b135c8c9975f4d45d2054cf31d0b1fe1" } Frame { msec: 5984 - hash: "bf47cc398a702dd17c8efebb3d2f8073" + hash: "b135c8c9975f4d45d2054cf31d0b1fe1" } Frame { msec: 6000 diff --git a/tests/auto/declarative/qmlvisual/ListView/listview.qml b/tests/auto/declarative/qmlvisual/ListView/listview.qml index 341311d..7e7af59 100644 --- a/tests/auto/declarative/qmlvisual/ListView/listview.qml +++ b/tests/auto/declarative/qmlvisual/ListView/listview.qml @@ -49,7 +49,7 @@ Rectangle { Component { id: myHighlight - Rectangle { color: "black" } + Rectangle { width: 200; height: 50; color: "black" } } ListView { -- cgit v0.12 From 82159dbbfe7e36bc8f67ad1637a2285fb002eb11 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Thu, 28 Oct 2010 18:18:41 +1000 Subject: Remove unnecessary layouting code from QDeclarativeText Task-number: QTBUG-14795 Reviewed-by: Michael Brasser --- src/declarative/graphicsitems/qdeclarativetext.cpp | 51 ++++------------------ 1 file changed, 8 insertions(+), 43 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 0717b78..c8e3615 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -287,8 +287,7 @@ QSize QDeclarativeTextPrivate::setupTextLayout() Q_Q(QDeclarativeText); layout.setCacheEnabled(true); - int height = 0; - qreal widthUsed = 0; + qreal height = 0; qreal lineWidth = 0; //set manual width @@ -297,6 +296,7 @@ QSize QDeclarativeTextPrivate::setupTextLayout() QTextOption textOption = layout.textOption(); textOption.setWrapMode(QTextOption::WrapMode(wrapMode)); + textOption.setAlignment((Qt::Alignment)hAlign); layout.setTextOption(textOption); layout.beginLayout(); @@ -305,37 +305,15 @@ QSize QDeclarativeTextPrivate::setupTextLayout() if (!line.isValid()) break; - if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid()) + if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid()) { line.setLineWidth(lineWidth); - } - layout.endLayout(); - - for (int i = 0; i < layout.lineCount(); ++i) { - QTextLine line = layout.lineAt(i); - widthUsed = qMax(widthUsed, line.naturalTextWidth()); - } - - qreal layoutWidth = q->widthValid()?q->width():widthUsed; - - int x = 0; - for (int i = 0; i < layout.lineCount(); ++i) { - QTextLine line = layout.lineAt(i); - line.setPosition(QPointF(0, height)); - height += int(line.height()); - - if (!cacheAllTextAsImage) { - if (hAlign == QDeclarativeText::AlignLeft) { - x = 0; - } else if (hAlign == QDeclarativeText::AlignRight) { - x = layoutWidth - (int)line.naturalTextWidth(); - } else if (hAlign == QDeclarativeText::AlignHCenter) { - x = (layoutWidth - (int)line.naturalTextWidth()) / 2; - } - line.setPosition(QPoint(x, (int)line.y())); + line.setPosition(QPointF(0, height)); + height += line.height(); } } + layout.endLayout(); - return QSize(qCeil(widthUsed), height); + return QSize(qCeil(layout.boundingRect().width()), layout.boundingRect().height()); } /*! @@ -347,19 +325,6 @@ QPixmap QDeclarativeTextPrivate::textLayoutImage(bool drawStyle) //do layout QSize size = layedOutTextSize; - int x = 0; - for (int i = 0; i < layout.lineCount(); ++i) { - QTextLine line = layout.lineAt(i); - if (hAlign == QDeclarativeText::AlignLeft) { - x = 0; - } else if (hAlign == QDeclarativeText::AlignRight) { - x = size.width() - (int)line.naturalTextWidth(); - } else if (hAlign == QDeclarativeText::AlignHCenter) { - x = (size.width() - (int)line.naturalTextWidth()) / 2; - } - line.setPosition(QPoint(x, (int)line.y())); - } - //paint text QPixmap img(size); if (!size.isEmpty()) { @@ -1147,7 +1112,7 @@ void QDeclarativeText::geometryChanged(const QRectF &newGeometry, const QRectF & if ((!d->internalWidthUpdate && newGeometry.width() != oldGeometry.width()) && (d->wrapMode != QDeclarativeText::NoWrap || d->elideMode != QDeclarativeText::ElideNone - || d->hAlign != Qt::AlignLeft)) { + || d->hAlign != QDeclarativeText::AlignLeft)) { if (d->singleline && d->elideMode != QDeclarativeText::ElideNone && widthValid()) { // We need to re-elide d->updateLayout(); -- cgit v0.12 From 7537554040827dbaae327d27c77319e6b7e7c618 Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Thu, 28 Oct 2010 10:24:48 +0200 Subject: Network code: Fix code comment spellchecking errors. Me no speak americano. Reviewed-by: Peter Hartmann --- src/network/access/qhttp.cpp | 2 +- src/network/access/qhttpnetworkconnection.cpp | 2 +- src/network/socket/qlocalserver_unix.cpp | 2 +- src/network/socket/qnativesocketengine_win.cpp | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/network/access/qhttp.cpp b/src/network/access/qhttp.cpp index 13375f8..9c2f79a 100644 --- a/src/network/access/qhttp.cpp +++ b/src/network/access/qhttp.cpp @@ -2442,7 +2442,7 @@ void QHttpPrivate::_q_slotSendRequest() if (proxy.hostName().isEmpty()) { proxy.setType(QNetworkProxy::NoProxy); } else if (sslInUse) { - // Disallow use of cacheing proxy with HTTPS; instead fall back to + // Disallow use of caching proxy with HTTPS; instead fall back to // transparent HTTP CONNECT proxying. transparentProxyInUse = true; } else { diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp index c335cd4..89f9b03 100644 --- a/src/network/access/qhttpnetworkconnection.cpp +++ b/src/network/access/qhttpnetworkconnection.cpp @@ -745,7 +745,7 @@ void QHttpNetworkConnectionPrivate::removeReply(QHttpNetworkReply *reply) // although it is called _q_startNextRequest, it will actually start multiple requests when possible void QHttpNetworkConnectionPrivate::_q_startNextRequest() { - // If the QHttpNetworkConnection is currently paused then bail out immediatly + // If the QHttpNetworkConnection is currently paused then bail out immediately if (state == PausedState) return; diff --git a/src/network/socket/qlocalserver_unix.cpp b/src/network/socket/qlocalserver_unix.cpp index 560f5f6..c218d89 100644 --- a/src/network/socket/qlocalserver_unix.cpp +++ b/src/network/socket/qlocalserver_unix.cpp @@ -119,7 +119,7 @@ bool QLocalServerPrivate::listen(const QString &requestedServerName) // subsequent call to accept will not block in any case // // This change can be removed once more generic fix to select thread - // syncronization problem is implemented. + // synchronization problem is implemented. int flags = fcntl(listenSocket, F_GETFL, 0); if (-1 == flags || -1 == (fcntl(listenSocket, F_SETFL, flags | O_NONBLOCK))) { diff --git a/src/network/socket/qnativesocketengine_win.cpp b/src/network/socket/qnativesocketengine_win.cpp index 477ef45..c1a4cfc 100644 --- a/src/network/socket/qnativesocketengine_win.cpp +++ b/src/network/socket/qnativesocketengine_win.cpp @@ -733,7 +733,7 @@ int QNativeSocketEnginePrivate::nativeAccept() { int acceptedDescriptor = WSAAccept(socketDescriptor, 0,0,0,0); if (acceptedDescriptor != -1 && QAbstractEventDispatcher::instance()) { - // Becuase of WSAAsyncSelect() WSAAccept returns a non blocking socket + // Because of WSAAsyncSelect() WSAAccept returns a non blocking socket // with the same attributes as the listening socket including the current // WSAAsyncSelect(). To be able to change the socket to blocking mode the // WSAAsyncSelect() call must be cancled. -- cgit v0.12 From 5a2a17ab60f8393f5e0bf47ff281eeb3e3fc3dc6 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Oct 2010 18:32:52 +1000 Subject: Clean up qmlvisual/animation visual tests Add platform specific colorAnimation Visuals remove color animation from propertyAction remove gradient from qtbug10586 shrink scriptAction-visual.qml Task-number: QTUBG-14792 --- .../data-X11/colorAnimation-visual.0.png | Bin 0 -> 627 bytes .../data-X11/colorAnimation-visual.1.png | Bin 0 -> 626 bytes .../data-X11/colorAnimation-visual.2.png | Bin 0 -> 625 bytes .../data-X11/colorAnimation-visual.qml | 951 +++++++++++++++++++++ .../data/propertyAction-visual.0.png | Bin 1418 -> 335 bytes .../data/propertyAction-visual.1.png | Bin 1430 -> 345 bytes .../data/propertyAction-visual.2.png | Bin 1431 -> 336 bytes .../propertyAction/data/propertyAction-visual.qml | 546 +++++------- .../propertyAction/propertyAction-visual.qml | 13 +- .../animation/qtbug10586/data/qtbug10586.0.png | Bin 1149 -> 1135 bytes .../animation/qtbug10586/data/qtbug10586.1.png | Bin 1177 -> 1141 bytes .../animation/qtbug10586/data/qtbug10586.2.png | Bin 1173 -> 1150 bytes .../animation/qtbug10586/data/qtbug10586.3.png | Bin 1149 -> 1141 bytes .../animation/qtbug10586/data/qtbug10586.4.png | Bin 0 -> 1132 bytes .../animation/qtbug10586/data/qtbug10586.qml | 864 +++++++++---------- .../qmlvisual/animation/qtbug10586/qtbug10586.qml | 6 +- .../scriptAction/data/scriptAction-visual.0.png | Bin 0 -> 335 bytes .../scriptAction/data/scriptAction-visual.1.png | Bin 0 -> 335 bytes .../scriptAction/data/scriptAction-visual.qml | 298 +++---- .../animation/scriptAction/data/scriptAction.0.png | Bin 1418 -> 0 bytes .../animation/scriptAction/data/scriptAction.1.png | Bin 1431 -> 0 bytes .../animation/scriptAction/scriptAction-visual.qml | 4 +- 22 files changed, 1720 insertions(+), 962 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png create mode 100644 tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml create mode 100644 tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.4.png create mode 100644 tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.0.png create mode 100644 tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.1.png delete mode 100644 tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.png delete mode 100644 tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.png diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png new file mode 100644 index 0000000..c5e8029 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.0.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png new file mode 100644 index 0000000..b0f69c2 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.1.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png new file mode 100644 index 0000000..1317eef Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.2.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml new file mode 100644 index 0000000..eb4564c --- /dev/null +++ b/tests/auto/declarative/qmlvisual/animation/colorAnimation/data-X11/colorAnimation-visual.qml @@ -0,0 +1,951 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 32 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 48 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 64 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 80 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 96 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 112 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 128 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 144 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 160 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 176 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 192 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 208 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 224 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 240 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 256 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 272 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 288 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 304 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 320 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 336 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 352 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 368 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 384 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 400 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 416 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 432 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 448 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 464 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 480 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 496 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 512 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 93; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 528 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 544 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 560 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 576 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 592 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 93; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 608 + hash: "acc736435c9f84aa82941ba561bc5dbc" + } + Frame { + msec: 624 + hash: "e5bda0daf98288ce18db6ce06eda3ba0" + } + Frame { + msec: 640 + hash: "d35008f75b8c992f80fb16ba7203649d" + } + Frame { + msec: 656 + hash: "14f43e0784ddf42ea8550db88c501bf1" + } + Frame { + msec: 672 + hash: "02276e158b5391480b1bdeaadf1fb903" + } + Frame { + msec: 688 + hash: "35d9513eb97a2c482b7cd197de910934" + } + Frame { + msec: 704 + hash: "faf0fd681e60bb2489099f5df772b6cd" + } + Frame { + msec: 720 + hash: "a863d3e346f94785a3a392fdc91526eb" + } + Frame { + msec: 736 + hash: "fdf328d3f6eb8410da59a91345e41a44" + } + Frame { + msec: 752 + hash: "83514a3b10d5be8f6c3b128d0f3e0b1c" + } + Frame { + msec: 768 + hash: "ead0eae76cd00189075964671effbaea" + } + Frame { + msec: 784 + hash: "24d2457fcd51490fda23071bf9929d12" + } + Frame { + msec: 800 + hash: "1478683446cf543dacbe31d0b76a98a6" + } + Frame { + msec: 816 + hash: "99f7da1f31fe920f6c02add4042ae925" + } + Frame { + msec: 832 + hash: "22def892006cf66667770b0f17baf6c0" + } + Frame { + msec: 848 + hash: "6a36d5a77099bfd58baf285478ff04e4" + } + Frame { + msec: 864 + hash: "6258150666b59b20ab476724c07fc20c" + } + Frame { + msec: 880 + hash: "f1636315bc950a6dd400d9c7ed263b88" + } + Frame { + msec: 896 + hash: "18447ea8dc2e8da956788e5b3cf3790a" + } + Frame { + msec: 912 + hash: "1d2a6e65997a73e9e670356c8e8b63b2" + } + Frame { + msec: 928 + hash: "bed0242c0f9ef229d1392835286d5782" + } + Frame { + msec: 944 + hash: "88923c190e9e5beadef8a409c06df9d6" + } + Frame { + msec: 960 + image: "colorAnimation-visual.0.png" + } + Frame { + msec: 976 + hash: "85b1821cc50f2a9f3ed6944f792b7a2f" + } + Frame { + msec: 992 + hash: "395195716d76bc0be7b2033ed37a7a1c" + } + Frame { + msec: 1008 + hash: "243dbffcf416926242bbcb7348974c4c" + } + Frame { + msec: 1024 + hash: "a755068679616d8ac65c2aa7431f2a19" + } + Frame { + msec: 1040 + hash: "e8249b35a47eb492cbdf2d91cc8426f0" + } + Frame { + msec: 1056 + hash: "15f3da1c0e6f0779b96859d51171dd27" + } + Frame { + msec: 1072 + hash: "258c0c756aac3de743b43051f2aace6b" + } + Frame { + msec: 1088 + hash: "a58b9fdf301d72b2cc5c93934cc8927b" + } + Frame { + msec: 1104 + hash: "a9181d30870d472521f8904818ce520f" + } + Frame { + msec: 1120 + hash: "7f9e94069ccf3897c26a71bd7becd903" + } + Frame { + msec: 1136 + hash: "bdf305c2f46cdb86dbf57b1e0cc5a65b" + } + Frame { + msec: 1152 + hash: "fe5b6865d7e4fc7d1d42c1e74f8666f7" + } + Frame { + msec: 1168 + hash: "734f0de45a6e34c9eab7ef606196f96a" + } + Frame { + msec: 1184 + hash: "02a361c4534fdf7f286dc3e6dc23275c" + } + Frame { + msec: 1200 + hash: "e649155ad69999c14b92f6561e4d1185" + } + Frame { + msec: 1216 + hash: "01af177084fab755d622973f64b92018" + } + Frame { + msec: 1232 + hash: "097cc4a082dfab995d213a3a73883c97" + } + Frame { + msec: 1248 + hash: "d7b4239a3280b1eb8e885e3f422df8e9" + } + Frame { + msec: 1264 + hash: "59893977994e34e83f91e7ce3ad65d6d" + } + Frame { + msec: 1280 + hash: "b68e3fbb5cdcd6bd96df7dec558db42b" + } + Frame { + msec: 1296 + hash: "94ad0580648f36a1e18a9ea7e249b04d" + } + Frame { + msec: 1312 + hash: "750a4c01d2f5806a89a1c6cc6a9b9a68" + } + Frame { + msec: 1328 + hash: "4f109f50f388f1bfa4bc6b03b3e6e514" + } + Frame { + msec: 1344 + hash: "c6168d5cf27a533e8ee636637667be47" + } + Frame { + msec: 1360 + hash: "f8120547bed987aa34c00da5a01a4d1e" + } + Frame { + msec: 1376 + hash: "cbff526136fa2c128c8b898fbbef9e5c" + } + Frame { + msec: 1392 + hash: "f29e52398fab1a239a63df4c32f2fc69" + } + Frame { + msec: 1408 + hash: "7178bfe86fd2fd513218b33760460f8d" + } + Frame { + msec: 1424 + hash: "ca83285bc8ac633403896fe976896eb0" + } + Frame { + msec: 1440 + hash: "96ba486c09cc69d5aa38c46c00df1181" + } + Frame { + msec: 1456 + hash: "b88eab335842787869f4a14824c19dd8" + } + Frame { + msec: 1472 + hash: "065aa59012729e1e1a246a2083142690" + } + Frame { + msec: 1488 + hash: "dd0e98c8398861002c5f178c5f9f612d" + } + Frame { + msec: 1504 + hash: "04192c2b545948048eccf4d81bbde198" + } + Frame { + msec: 1520 + hash: "bb7502c7208281ef9fd41714ab88a1a8" + } + Frame { + msec: 1536 + hash: "5397195471890d08b703dca101e5bc7c" + } + Frame { + msec: 1552 + hash: "4c678cdbebb2ffd2cbf012ca77800cde" + } + Frame { + msec: 1568 + hash: "0d7a34ecd0c7f52b2c015037bf1902c6" + } + Frame { + msec: 1584 + hash: "fd9d5048be749ac4369fda2d018b43ae" + } + Frame { + msec: 1600 + hash: "93ee03795cd57ae6f7fe3a020b039ad4" + } + Frame { + msec: 1616 + hash: "5e1118963f219c39761ca7fbf564a9ca" + } + Frame { + msec: 1632 + hash: "8f40038741903150136170503649d941" + } + Frame { + msec: 1648 + hash: "b087b7d0aa6224821f8e18718ff5e77d" + } + Frame { + msec: 1664 + hash: "aa46b04a3c67dc772265ed2901955565" + } + Frame { + msec: 1680 + hash: "ac024bf2aeb4becdf31a09fe0a6db8f3" + } + Frame { + msec: 1696 + hash: "13745a174e4d06e2108a5bf125ba50cc" + } + Frame { + msec: 1712 + hash: "bd972f0d8e230eca0b3fea1b8c960c08" + } + Frame { + msec: 1728 + hash: "cbdbec802a58e7ced0cf45b3ab0bc0ba" + } + Frame { + msec: 1744 + hash: "5128584c50305c7d218b81b8367fa3d5" + } + Frame { + msec: 1760 + hash: "a71461d3593f3685620668916de870bd" + } + Frame { + msec: 1776 + hash: "74ebac8f32cf044b58d9883dbcd9a722" + } + Frame { + msec: 1792 + hash: "fedc5b638f339b90fe59b478721e65b7" + } + Frame { + msec: 1808 + hash: "8593a81be812edf54ec94da8ae9c1314" + } + Frame { + msec: 1824 + hash: "4e9b083075bc5e9287a8abc982778b56" + } + Frame { + msec: 1840 + hash: "1d6f02aa99afa47d77fc49ab894b365a" + } + Frame { + msec: 1856 + hash: "a204feec783b3b05de4c209c21745826" + } + Frame { + msec: 1872 + hash: "665a2a8ff00b9663157802767f504754" + } + Frame { + msec: 1888 + hash: "624fb09ebe60cb87d767faf8d2420b1e" + } + Frame { + msec: 1904 + hash: "e5af0cdc33f3275a25abb09e9165f310" + } + Frame { + msec: 1920 + image: "colorAnimation-visual.1.png" + } + Frame { + msec: 1936 + hash: "e7aa6374c73832e57ceb2427a1e258aa" + } + Frame { + msec: 1952 + hash: "b5abd0dff1ab076faac7cc226e83f5d0" + } + Frame { + msec: 1968 + hash: "b759acc35bccff8efc2e6fe276ddc0f7" + } + Frame { + msec: 1984 + hash: "ce52e18c1f7732768779863b45314ff5" + } + Frame { + msec: 2000 + hash: "99d30652559dd6931e0c95543eeaa149" + } + Frame { + msec: 2016 + hash: "ffbd9a00e05e085b89296d19d5caec57" + } + Frame { + msec: 2032 + hash: "9c9d658b9c25602816b8066bf19105db" + } + Frame { + msec: 2048 + hash: "2b7fd058e6601e22a30bb7106b1c683b" + } + Frame { + msec: 2064 + hash: "f4c7e26b19ee0a3e7c9688685eb7bd05" + } + Frame { + msec: 2080 + hash: "0dc6d593bceff56b7f81f2a49d37fefb" + } + Frame { + msec: 2096 + hash: "9bfd7ad5091ccbdde43c593e133a7b10" + } + Frame { + msec: 2112 + hash: "2703b617937914a90ea42ebf249d79ee" + } + Frame { + msec: 2128 + hash: "b77e2983138254016c4cca53100f46fa" + } + Frame { + msec: 2144 + hash: "60c4dd24187d1281081479e586f02b37" + } + Frame { + msec: 2160 + hash: "62f2511abd99ef1231c9fa4b91d4abfe" + } + Frame { + msec: 2176 + hash: "e309b3353fd174e883d309571caddc98" + } + Frame { + msec: 2192 + hash: "1e2d6a134c7b12dde551b148ef4f088c" + } + Frame { + msec: 2208 + hash: "e5dc5450604a491cc24a0dcf5c278b58" + } + Frame { + msec: 2224 + hash: "c8dae97c10e1962c1e6a51ab3ab8579e" + } + Frame { + msec: 2240 + hash: "4e1b7e06f55fb084080689b474f1fe1d" + } + Frame { + msec: 2256 + hash: "b4639c907fa937bf15fac62421170cd8" + } + Frame { + msec: 2272 + hash: "c250208a0caeb5f6cb4d3aac3d7d350b" + } + Frame { + msec: 2288 + hash: "a73351eabecf0d71149efe31f197413e" + } + Frame { + msec: 2304 + hash: "479425f1b7aff79e4dfb7fca534af018" + } + Frame { + msec: 2320 + hash: "046d0f0040a52d1f26ba9f7c5de06ef4" + } + Frame { + msec: 2336 + hash: "655778bf13c6080903150b0eb43a7edc" + } + Frame { + msec: 2352 + hash: "72da0bbe81514870655fdd3354adac60" + } + Frame { + msec: 2368 + hash: "defe0bdf675c65fff55aaaced1e4dae7" + } + Frame { + msec: 2384 + hash: "c988628b6c3d3780e9a865c7694926cd" + } + Frame { + msec: 2400 + hash: "5ab17563655231089edd986ff13d6012" + } + Frame { + msec: 2416 + hash: "c1adff1d2e5800ed466d1691d3b17382" + } + Frame { + msec: 2432 + hash: "70129ba01fbb19592b9dc0d0a3b3e7df" + } + Frame { + msec: 2448 + hash: "0000829ef7ed908bf430d42904d59cc2" + } + Frame { + msec: 2464 + hash: "843d2927f50ab87b4a86b7a6aaeed91f" + } + Frame { + msec: 2480 + hash: "da86d21756025e7de8050586d5e2a1f8" + } + Frame { + msec: 2496 + hash: "48dd1bd6580133b0793fee327ea4f1e6" + } + Frame { + msec: 2512 + hash: "f0618193dcd0ba2837249515a1898b1c" + } + Frame { + msec: 2528 + hash: "a530184e57251065286c0cbba7301e9c" + } + Frame { + msec: 2544 + hash: "64a1d7203973d65dd342793007a61c58" + } + Frame { + msec: 2560 + hash: "5b830dfc6ba442772de87d75d5a578de" + } + Frame { + msec: 2576 + hash: "5563b056b0409b65f60dd16dd0dd890e" + } + Frame { + msec: 2592 + hash: "b8bcf9ad2ca8720c11563a23d8280804" + } + Frame { + msec: 2608 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2624 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2640 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2656 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2672 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2688 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2704 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2720 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2736 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2752 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2768 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2784 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2800 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2816 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2832 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2848 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2864 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2880 + image: "colorAnimation-visual.2.png" + } + Frame { + msec: 2896 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2912 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2928 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2944 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2960 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2976 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 2992 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3008 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3024 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3040 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3056 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3072 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3088 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3104 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3120 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3136 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3152 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3168 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3184 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3200 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3216 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3232 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3248 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3264 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3280 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3296 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3312 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3328 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3344 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3360 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3376 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3392 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3408 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3424 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3440 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3456 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3472 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3488 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3504 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3520 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3536 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3552 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3568 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3584 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3600 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3616 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3632 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3648 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3664 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } + Frame { + msec: 3680 + hash: "8c0fcda4f8956394c53fc4ba18caa850" + } +} diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png index 64d6b06..a02c063 100644 Binary files a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png and b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.0.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png index f7fce15..0714b4a 100644 Binary files a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png and b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.1.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png index 3080df5..7d2b66e 100644 Binary files a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png and b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.2.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml index 36b39fa..09febd7 100644 --- a/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml +++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/data/propertyAction-visual.qml @@ -6,239 +6,247 @@ VisualTest { } Frame { msec: 16 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 32 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 48 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 64 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 80 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 96 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 112 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 128 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 144 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 160 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 176 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 192 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 208 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 224 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 240 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 256 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 272 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 288 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 304 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 320 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 336 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 352 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 368 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 384 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 400 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 416 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 432 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 448 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 464 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 480 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 496 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 512 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 528 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 544 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 560 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 576 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 592 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 608 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 624 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 640 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 656 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 672 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 688 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 704 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 720 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 736 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 27; y: 19 + modifiers: 0 + sendToViewport: true } Frame { msec: 752 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 768 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "a858eee4b2753915ec84d2ffa098260c" } Frame { msec: 784 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "a858eee4b2753915ec84d2ffa098260c" } Frame { msec: 800 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "a858eee4b2753915ec84d2ffa098260c" } Frame { msec: 816 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "e8e6b7d7f81895ae556936ba5e0848a5" } Frame { msec: 832 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "b6ee5f74a5e91bcf6b9aad3cbb5d683f" } Frame { msec: 848 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "b6ee5f74a5e91bcf6b9aad3cbb5d683f" } Frame { msec: 864 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "02e3d071d5fc0832041688950d3610b8" } Frame { msec: 880 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "aad38d9678bdeeed750f381a40e22a61" } Frame { msec: 896 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "a8753ac7d026d94224c488fa16d5774a" } Frame { msec: 912 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "9de26e2d70bd285116df820ca87c2e4d" } Frame { msec: 928 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "985c6ee9cb5f259135a4eeb3c2f1d271" } Frame { msec: 944 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "985c6ee9cb5f259135a4eeb3c2f1d271" } Frame { msec: 960 @@ -246,247 +254,247 @@ VisualTest { } Frame { msec: 976 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "4ba1bf769de9bc45630485d06642dc30" } Frame { msec: 992 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "4ba1bf769de9bc45630485d06642dc30" } Frame { msec: 1008 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "9dbe8b62ec467f5b95b4bb8ab9fbab68" } Frame { msec: 1024 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "9dbe8b62ec467f5b95b4bb8ab9fbab68" } Frame { msec: 1040 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "81c157daf3086b21ea2ba39277a31f3d" } Frame { msec: 1056 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "a19d2e389a71472929fed6691dbe40ec" } Frame { msec: 1072 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "0fc67582f36db63dc3df1027bf7ad90b" } Frame { msec: 1088 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c53f1a42113fdc2e525c43460ed40f81" } Frame { msec: 1104 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c8968753e599419bc2d70adb95b643f2" } Frame { msec: 1120 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "449fbda0dc3e45d022832f9d15203466" } Frame { msec: 1136 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "7778e32071419dd53920536bac1eb21a" } Frame { msec: 1152 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "279510c6ca5429a22855a08e88a1b4b5" } Frame { msec: 1168 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "ac86ca53dc52c7c54bd993faa2daf0b9" } Frame { msec: 1184 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "7e20361da8a49f9699e290673bdd60ee" } Frame { msec: 1200 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "aa5f6e188212cee2dbf8d1e52692ac88" } Frame { msec: 1216 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "14018d9d2370c46b5f0c280cb169225e" } Frame { msec: 1232 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1248 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1264 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1280 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1296 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1312 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1328 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1344 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1360 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1376 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1392 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1408 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1424 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1440 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1456 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1472 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1488 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1504 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1520 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1536 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1552 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1568 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1584 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1600 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 109; y: 247 - modifiers: 0 - sendToViewport: true + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1616 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1632 - hash: "c91921dba899d7a86de3cd013773889f" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1648 - hash: "888c0fc86155e10b5fc577ef6ec5755a" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1664 - hash: "7fd61a8910bf7b0d2bf57653a268c5d8" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1680 - hash: "f42f5073f90a423adf011d0e168c8a9b" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1696 - hash: "a3d89deb6cfa2bbbaa1d7d5b5e5b48d5" + hash: "29ad10997d8045ccfd69fe78475dd2f3" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 27; y: 19 + modifiers: 0 + sendToViewport: true } Frame { msec: 1712 - hash: "f10e997d7a17c18251a32d58b018105a" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1728 - hash: "09ffb57d5f67edfa34d6aad36a002554" + hash: "29ad10997d8045ccfd69fe78475dd2f3" } Frame { msec: 1744 - hash: "01f3a2f5b9815f1397a907b099339360" + hash: "7b99c5dd3750291043f62479314ccb2f" } Frame { msec: 1760 - hash: "58c0910c49748edd2ef8472960179472" + hash: "d3409cf579db724440f3f59cfc902974" } Frame { msec: 1776 - hash: "cc82c5f7f93c5bc1af1c6c509268566a" + hash: "2ad2a4b3f933e3a27acb232adf06eb7f" } Frame { msec: 1792 - hash: "3ef272c6439b85fbc166375d1b98403c" + hash: "35074cf4f2753c77e112092e92630c71" } Frame { msec: 1808 - hash: "98c576f0900e4b8752d1f951bb6bf391" + hash: "f7038f7e6d7b6498ff1a4098c79f9d2a" } Frame { msec: 1824 - hash: "4d66dd64d8736ef50163e08723873478" + hash: "fec23135661d2368cf3cf64f7d62af73" } Frame { msec: 1840 - hash: "9a5d8455b6763456185625811253e0b1" + hash: "4143603bf203319f423d21f204fac3b0" } Frame { msec: 1856 - hash: "77e85731efa786a2492aae19a87523c6" + hash: "f3d41bdc8ae60f6fbf109206ac9023de" } Frame { msec: 1872 - hash: "f3199d0c860f1236e0b9472bef8785bc" + hash: "41064ea276aabfba45966130d2ec4b06" } Frame { msec: 1888 - hash: "f3199d0c860f1236e0b9472bef8785bc" + hash: "dfbe242fc8bc3c70207be901ac2db139" } Frame { msec: 1904 - hash: "32ccdab249268b01d9f1658a736052f1" + hash: "a8a9f435774def4255ae433646cc5263" } Frame { msec: 1920 @@ -494,247 +502,239 @@ VisualTest { } Frame { msec: 1936 - hash: "db3010ef552146df938c237f6c92bff5" + hash: "895ad99b422c5c6637f6569f391b4011" } Frame { msec: 1952 - hash: "101e8595d0301e88376ec52ba9361f84" + hash: "9dbe8b62ec467f5b95b4bb8ab9fbab68" } Frame { msec: 1968 - hash: "119d548c59baa7e47266d2ceca663288" + hash: "4ba1bf769de9bc45630485d06642dc30" } Frame { msec: 1984 - hash: "f141fafe102a0b9a2bf33e8c3fc800ff" + hash: "4ba1bf769de9bc45630485d06642dc30" } Frame { msec: 2000 - hash: "b01f9ca8d4fbff17b3d48c70898a044d" + hash: "4ba1bf769de9bc45630485d06642dc30" } Frame { msec: 2016 - hash: "cf67954a2d1b22e8d2cfdc26419bafb8" + hash: "4ba1bf769de9bc45630485d06642dc30" } Frame { msec: 2032 - hash: "7680b2b5a63dea13d733947297e01355" + hash: "985c6ee9cb5f259135a4eeb3c2f1d271" } Frame { msec: 2048 - hash: "af1c017acf6b3c8cff86c9ceb60db3cb" + hash: "9de26e2d70bd285116df820ca87c2e4d" } Frame { msec: 2064 - hash: "0b23ec51f71fddae5e2238ab5754f1db" + hash: "a8753ac7d026d94224c488fa16d5774a" } Frame { msec: 2080 - hash: "976643961ecbdc86335180ba812b874e" + hash: "aad38d9678bdeeed750f381a40e22a61" } Frame { msec: 2096 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "abddb88af9b07e782f6c2103479abe3d" } Frame { msec: 2112 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "02e3d071d5fc0832041688950d3610b8" } Frame { msec: 2128 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "b6ee5f74a5e91bcf6b9aad3cbb5d683f" } Frame { msec: 2144 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "e8e6b7d7f81895ae556936ba5e0848a5" } Frame { msec: 2160 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "a858eee4b2753915ec84d2ffa098260c" } Frame { msec: 2176 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "a858eee4b2753915ec84d2ffa098260c" } Frame { msec: 2192 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "a858eee4b2753915ec84d2ffa098260c" } Frame { msec: 2208 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2224 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2240 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2256 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2272 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2288 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2304 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2320 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2336 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2352 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2368 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2384 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2400 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2416 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2432 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2448 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2464 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2480 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2496 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2512 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2528 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2544 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2560 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2576 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2592 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2608 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2624 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2640 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2656 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2672 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2688 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2704 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2720 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2736 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2752 - hash: "aeed60899abb6c486a5b1df81f9a0224" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 109; y: 247 - modifiers: 0 - sendToViewport: true + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2768 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2784 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2800 - hash: "ab924ae435262e76381c2e4af5d64342" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2816 - hash: "d60758fc12471a19d31c85f058f2ded7" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2832 - hash: "c62e2956f8eb5d2c8cd76ba05c5929d5" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2848 - hash: "f2967ee7e035a9ff258116a2706529f8" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2864 - hash: "885c4705c6c29f69c56c44abc1251d75" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2880 @@ -742,198 +742,74 @@ VisualTest { } Frame { msec: 2896 - hash: "f4af6871e522511f95bc4c5abfc2a562" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2912 - hash: "b27e1e7e0d90468525309528ccfe2823" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2928 - hash: "78e7d84a4466258b40315fe61b7ca15c" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2944 - hash: "471013d921d8d6e7468fd6aba0b75c71" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2960 - hash: "856048da893c9136ac5740bc89b64128" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2976 - hash: "32ccdab249268b01d9f1658a736052f1" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 2992 - hash: "2264fa3acd979f104633c1301a0efd8f" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3008 - hash: "f3199d0c860f1236e0b9472bef8785bc" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3024 - hash: "ad899d1ecaa43a5541be7b70413caee5" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3040 - hash: "4e652524c992f5ee1b987275ca509728" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3056 - hash: "a44b3dec2a016694bc8553a51b29d46c" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3072 - hash: "7fbe20346bc3c28c345e0797b55599f3" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3088 - hash: "bcff18ad433bb4f08126ee66efb037d1" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3104 - hash: "836666c64f73c38e87de95944ff2fe72" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3120 - hash: "4379982d23db239b1741b5d72c53e160" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3136 - hash: "0ed9476337214e1493c1510b8a4c90f8" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3152 - hash: "dab637406577a1924c7dbb30680e1af3" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } Frame { msec: 3168 - hash: "38b7e5894cf49a19ac055264d6447b9f" - } - Frame { - msec: 3184 - hash: "5f207d1dfad4907f200d76104881bf56" - } - Frame { - msec: 3200 - hash: "3434fc7f81e859722585dae97c557864" - } - Frame { - msec: 3216 - hash: "7c775b9be8c5293d4962324574267c22" - } - Frame { - msec: 3232 - hash: "da0ff6955c2e4cd86421bdb9053f56e6" - } - Frame { - msec: 3248 - hash: "a1297d525a3ad41abbbb7c2f15efd4fb" - } - Frame { - msec: 3264 - hash: "5326b220995b2a1eaa308ad10fd353fa" - } - Frame { - msec: 3280 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3296 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3312 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3328 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3344 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 3360 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3376 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3392 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3408 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3424 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3440 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3456 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3472 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3488 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3504 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3520 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3536 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3552 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3568 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3584 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3600 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3616 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Frame { - msec: 3632 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e5ac43e0f553886bcb2b4016f7e3414" } } diff --git a/tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml b/tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml index 6c3e52d..3ff4214 100644 --- a/tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml +++ b/tests/auto/declarative/qmlvisual/animation/propertyAction/propertyAction-visual.qml @@ -1,17 +1,17 @@ import QtQuick 1.0 /* -This test starts with a red rectangle at 0,0. It should animate a color change to blue, +This test starts with a 30x40 rectangle at 0,0. It should animate a width change to 40, then jump 50 pixels right, and then animate moving 50 pixels down. Afer this it should do an exact visual reversal (animate up 50 pixels, jump left 50 pixels, and then animate -a change back to red). +a change back to 30px wide). */ Rectangle { - width: 400; height: 400 + width: 100; height: 100 Rectangle { id: myRect - width: 100; height: 100 + width: 30; height: 40 color: "red" } MouseArea { @@ -24,8 +24,7 @@ Rectangle { when: clickable.pressed PropertyChanges { target: myRect - x: 50; y: 50 - color: "blue" + x: 50; y: 50; width: 40 } } @@ -33,7 +32,7 @@ Rectangle { to: "state1" reversible: true SequentialAnimation { - ColorAnimation {} + NumberAnimation { properties: "width"; easing.type: "InOutQuad" } PropertyAction { properties: "x" } NumberAnimation { properties: "y"; easing.type: "InOutQuad" } } diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.png index d8be67b..3545e5a 100644 Binary files a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.png and b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.0.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.png index e5494aa..c7da359 100644 Binary files a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.png and b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.1.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.png index fbb03de..d51e8e4 100644 Binary files a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.png and b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.2.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.png index d8be67b..c7da359 100644 Binary files a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.png and b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.3.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.4.png b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.4.png new file mode 100644 index 0000000..8552406 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.4.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml index 13ba289..774cc13 100644 --- a/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml +++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/data/qtbug10586.qml @@ -6,239 +6,335 @@ VisualTest { } Frame { msec: 16 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 32 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 48 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 64 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 80 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 96 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 112 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 128 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 144 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 160 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 176 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 192 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 208 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 224 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 240 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 256 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 272 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 288 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 304 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 320 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 336 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 352 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 368 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 384 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 400 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 416 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 432 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 448 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 464 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 480 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 496 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 512 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 528 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 544 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 560 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 576 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 592 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 608 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 624 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 640 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 656 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 672 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 688 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 704 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 155; y: 261 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 154; y: 260 + modifiers: 0 + sendToViewport: true } Frame { msec: 720 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 153; y: 260 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 144; y: 258 + modifiers: 0 + sendToViewport: true } Frame { msec: 736 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 126; y: 254 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 105; y: 249 + modifiers: 0 + sendToViewport: true } Frame { msec: 752 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "3e70a9fcacf40284c4bbf6a8376edfec" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 76; y: 247 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 245 + modifiers: 0 + sendToViewport: true } Frame { msec: 768 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "3b65fbe0980fabd4bcba5757323c8fcf" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 20; y: 243 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: -25; y: 241 + modifiers: 0 + sendToViewport: true } Frame { msec: 784 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0a79d810c2ff479fcc42d40125f6ccda" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: -68; y: 238 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: -68; y: 238 + modifiers: 0 + sendToViewport: true } Frame { msec: 800 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "9e5b85c715a2a573f0dd3bc7e342625f" } Frame { msec: 816 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "371faa0d3bb3815470ef48713f0363b6" } Frame { msec: 832 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "2f948f765ec2d861841439f03e402bcf" } Frame { msec: 848 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "74dbda8d6d005fb8fb307fc4cf146e1e" } Frame { msec: 864 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "bdf1f0db0411a3456ddc0efff0584e9c" } Frame { msec: 880 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "cb5c7c9fc7e4707f1d8b7bbb9f19065d" } Frame { msec: 896 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "f60df4e47f5b9d16b576ab4107a0c11c" } Frame { msec: 912 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "6fcc1b9d2d1829c48cdfefba632c6a91" } Frame { msec: 928 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "e53272919fa23f7023ce66d3b15c2f05" } Frame { msec: 944 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "dc043143bf35a808fcdf2b692753dc86" } Frame { msec: 960 @@ -246,279 +342,327 @@ VisualTest { } Frame { msec: 976 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "8a5247a3847809f56a2fdce0f4ac9c99" } Frame { msec: 992 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d4122caf5fc8cfd59e6048b830acc3fb" } Frame { msec: 1008 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1024 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1040 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1056 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1072 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1088 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1104 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1120 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1136 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1152 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1168 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1184 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1200 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1216 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1232 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1248 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1264 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1280 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1296 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1312 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 174; y: 204 - modifiers: 0 - sendToViewport: true + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1328 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1344 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1360 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1376 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "be218d7ebfb01cf288b284cf40337913" } Frame { msec: 1392 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 170; y: 204 - modifiers: 0 - sendToViewport: true + hash: "bd1af1e9187a58841b33862047ad4ae3" } Frame { msec: 1408 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 156; y: 204 - modifiers: 0 - sendToViewport: true + hash: "6154c00e9290393daaf1e7a0618874c7" } Frame { msec: 1424 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "6ed42be04df8a4cc15d9d885e4b157f5" } Frame { msec: 1440 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 130; y: 204 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 130; y: 204 - modifiers: 0 - sendToViewport: true + hash: "2187c8e798b2b60567284af6923a9418" } Frame { msec: 1456 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "39ef8ac3108be3c5b8c85aaa06539952" } Frame { msec: 1472 - hash: "09d6255a3fc628c52a386a878bdecb4e" + hash: "a30c2d3bbebdf3ae84c8148dfff53abf" } Frame { msec: 1488 - hash: "6d5e292fecfc2ec45a5695fa9e5173f3" + hash: "f9b5ef6675c326a3c6462f8ad173c875" } Frame { msec: 1504 - hash: "848051f677a2172d8cbe75a451026459" + hash: "eab82ad570e59a68c41450df5146aea6" } Frame { msec: 1520 - hash: "95b1a914c1d33866cd728ad1ad612884" + hash: "2caf2dae27a5603de6665c1cafbe6576" } Frame { msec: 1536 - hash: "780a03cd9aec2f0f7f61a51629261385" + hash: "601b397404250d01ec9e483683c32776" } Frame { msec: 1552 - hash: "c7ea3a54cfb618bb02d93f6e17e2a74d" + hash: "06dd6ec2e0f016fc0cb6bbce27e3dcd3" } Frame { msec: 1568 - hash: "85ea65c275c6217c44038c1bc87f2356" + hash: "9ebba3740bb33db00ebb62706e1d27a5" } Frame { msec: 1584 - hash: "af77f08c99d41295ef6c99089c322f61" + hash: "9ebba3740bb33db00ebb62706e1d27a5" } Frame { msec: 1600 - hash: "1427c98bee08b57e94cea220b7c017e4" + hash: "06dd6ec2e0f016fc0cb6bbce27e3dcd3" } Frame { msec: 1616 - hash: "fa1062676e7f2e429e3f5f3babbccc5f" + hash: "601b397404250d01ec9e483683c32776" } Frame { msec: 1632 - hash: "016c51ef6ad6729db5328b199c18c830" + hash: "a80dcdc8ce2c4e2653e01423ea053eba" } Frame { msec: 1648 - hash: "94a3647a5c98770d60a2b5f17281e87e" + hash: "8fe7230266084f07f8fd9c6991461163" } Frame { msec: 1664 - hash: "fc075081b0b7d8bc2556250962e52327" + hash: "5d9ed702af5c520f4b268077b957586a" } Frame { msec: 1680 - hash: "0ef1d28912378939e0f82387164ace07" + hash: "6cccabc3a6ac3eef95794e6712404234" } Frame { msec: 1696 - hash: "d55312d705b8ed5d188caf4f41820e0f" + hash: "8bfc492064d6c93727b59fd3ca2a8dc8" } Frame { msec: 1712 - hash: "41c9c187b208ec1cef4e9ffe976c38ce" + hash: "e506cf18d730f4ab1e8e803b7663238a" } Frame { msec: 1728 - hash: "6166be5f86adfc6b4c9438358529e5ce" + hash: "2187c8e798b2b60567284af6923a9418" } Frame { msec: 1744 - hash: "aaa81e964b5c5ef2ebf2c200e7a47c26" + hash: "6ed42be04df8a4cc15d9d885e4b157f5" } Frame { msec: 1760 - hash: "65dbdd2495e12b7dd7bbc31e1b2fa5b1" + hash: "b887f64a8e44a243f11e37692d54d2d1" } Frame { msec: 1776 - hash: "b2d10e7cbccb0fdf3286fef81999d37e" + hash: "d5f157d073cd8de8cc58124455a38675" } Frame { msec: 1792 - hash: "e239d20ee23a6ff680ded67182066430" + hash: "d39f213d4b91229bd76d48589a067623" } Frame { msec: 1808 - hash: "d4f2df7f9c7a7a9e98975e44393a2e37" + hash: "7b2413f4fd12fd4d38fc40ebbbd893f3" } Frame { msec: 1824 - hash: "9c1ce93161e16704feb7d37cd01acbe9" + hash: "bd1af1e9187a58841b33862047ad4ae3" } Frame { msec: 1840 - hash: "94e148b49b53cab2491a974eb85ab489" + hash: "1e54f1b5ef6bb7085a36d433af94a9b3" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 145; y: 286 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 286 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 195; y: 288 + modifiers: 0 + sendToViewport: true } Frame { msec: 1856 - hash: "9a1dfb6b09218c83c89f9a2d32f92ef6" + hash: "d84bf962449716cc64cb34b285926c48" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 224; y: 290 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 253; y: 290 + modifiers: 0 + sendToViewport: true } Frame { msec: 1872 - hash: "7cb78e2e5f6d35d456c95f2bd8652eb5" + hash: "d84bf962449716cc64cb34b285926c48" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 286; y: 292 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 315; y: 292 + modifiers: 0 + sendToViewport: true } Frame { msec: 1888 - hash: "e3a3be52fda460050db6d2d9947d3cf8" + hash: "d84bf962449716cc64cb34b285926c48" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 346; y: 294 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 385; y: 294 + modifiers: 0 + sendToViewport: true } Frame { msec: 1904 - hash: "6651ca6a31f281676a5ba312c306ee91" + hash: "d84bf962449716cc64cb34b285926c48" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 420; y: 294 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 420; y: 294 + modifiers: 0 + sendToViewport: true } Frame { msec: 1920 @@ -526,287 +670,239 @@ VisualTest { } Frame { msec: 1936 - hash: "feddbf269adfc8bb1b1a3656b5b5736d" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1952 - hash: "4710e2abb2d907686a5ef58c3d22b391" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1968 - hash: "2a479b302b425df282502e71b4ad7fbf" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 1984 - hash: "a912a2993c3a2a280e83caee932ff707" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2000 - hash: "022504443e57ee5593e5054961265a15" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2016 - hash: "a47ccf22b66f7d62c017aa1da19904d2" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2032 - hash: "133c29b49f3a98fb5eca71fff217252d" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2048 - hash: "058c2a759a415d548fec309bfb255a70" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2064 - hash: "662be553c32b0145b3f4fee9bb0d659d" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2080 - hash: "7c7460ff21e7c27af2326b399b5b9791" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2096 - hash: "e6b9049949a0ee4ff8a0fcaf5464f479" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2112 - hash: "39db5e52253948ca5059d9c102bedea0" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2128 - hash: "eb1939458851780b7bb51ee50f0a3bd7" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2144 - hash: "feaaa4fab78c73321dd9ab820ec2b746" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2160 - hash: "221c8afbedcfb8ca7e87e279e5406103" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2176 - hash: "41c8d2686ddb882981a7d3a5c8c69005" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2192 - hash: "abb2d6a76af5114b191a4373f95cdb6f" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2208 - hash: "7d3b1fc34082a160cbea4409af85fc9c" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2224 - hash: "55e07e33b231e3c7925c7b3cfada4839" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2240 - hash: "55e07e33b231e3c7925c7b3cfada4839" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2256 - hash: "3a616453adf2b16e23654f515d797e99" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2272 - hash: "b3461a3c55b9603905ad208c7396e1a9" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2288 - hash: "b3461a3c55b9603905ad208c7396e1a9" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2304 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2320 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2336 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2352 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2368 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2384 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2400 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2416 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2432 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2448 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2464 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2480 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2496 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d84bf962449716cc64cb34b285926c48" } Frame { msec: 2512 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "4c6ff9097308cb3840ef39a081bdc94f" } Frame { msec: 2528 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "93a2b229f21b76354a8cf94f150c69e2" } Frame { msec: 2544 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "e65350b411affe4274499fd577ccf842" } Frame { msec: 2560 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "499968d33068c7e08898a19cce691766" } Frame { msec: 2576 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "fe884e410a8c7b2167f814ebdf7700af" } Frame { msec: 2592 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "c0225009d42b670f5f1ce0871be90db6" } Frame { msec: 2608 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "320d205e147fa6470d71538d686ff458" } Frame { msec: 2624 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "ec0a1fa273e6568d041ee2497a715704" } Frame { msec: 2640 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "159c558e0d1b59db8e9459c4203d56f3" } Frame { msec: 2656 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "00d237cd7ad6df807b4f9281bbc72992" } Frame { msec: 2672 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "c472991635460a93f744538328cd89f4" } Frame { msec: 2688 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "318ba06f590d4e3a1dea6affcc60243b" } Frame { msec: 2704 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "d344b62df42e88e14d45def62565791a" } Frame { msec: 2720 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "5c2658568080a663440e09acbcf2fa8d" } Frame { msec: 2736 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 29; y: 239 - modifiers: 0 - sendToViewport: true + hash: "8e64867dabeaeae51149362c5f42545b" } Frame { msec: 2752 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "abd81e11370469803bad5de9a9c77f63" } Frame { msec: 2768 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "1cce356ebd61d7c88edb84c58a564def" } Frame { msec: 2784 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "0ab027423651612ceba2b35e57d75d91" } Frame { msec: 2800 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" + hash: "515b6375cf0fefc8580d62cd5b2680f7" } Frame { msec: 2816 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 35; y: 241 - modifiers: 0 - sendToViewport: true + hash: "f44c12b701e73a7e4d35fd10ea0f5003" } Frame { msec: 2832 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 63; y: 243 - modifiers: 0 - sendToViewport: true + hash: "76bee658c9915fda03967fcb2e595683" } Frame { msec: 2848 - hash: "fbd9a45fc6b5a96b4e521dc5c68dbf7e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 244 - modifiers: 0 - sendToViewport: true + hash: "064d5525e1fa7c8ec5f571a56e666754" } Frame { msec: 2864 - hash: "6f1a516cde59f142f5ac8b4e824a2bab" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 243 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 158; y: 243 - modifiers: 0 - sendToViewport: true + hash: "ffd23fa2b1281cd120d6b11912bb8641" } Frame { msec: 2880 @@ -814,338 +910,198 @@ VisualTest { } Frame { msec: 2896 - hash: "3f6d74079d8ec38eb1f12ddde18f864a" + hash: "c6d306961e1e574d8c57fd849029121c" } Frame { msec: 2912 - hash: "b58ac3c0ab5e556be249bfdc3fb85c56" + hash: "1fcf6b150607c0ea807026f8f9e28f61" } Frame { msec: 2928 - hash: "291dd50b6dd4ee71265631ce338f16d2" + hash: "e16a333231b3c65c85ff498e941f8c05" } Frame { msec: 2944 - hash: "6af30d160a3c1126718c62fcd5e85a89" + hash: "3e49589f1b4a6b8212f5c10d234f8ffa" } Frame { msec: 2960 - hash: "3f09b75f49f53e83d53fdc8cb2a1a2a7" + hash: "02ce2b719ddbd977bb933882a40024f5" } Frame { msec: 2976 - hash: "7c9e03c8bc2691253eb5be656bbcfaa5" + hash: "a161119d1f022885db1af71ededa2b8c" } Frame { msec: 2992 - hash: "95c1ca6b2550f5575c2297acad5bfd0f" + hash: "62a006aab9629dc1e8359c52664ee34b" } Frame { msec: 3008 - hash: "be05537c0b9246b0c4d48ae344275bb9" + hash: "62a006aab9629dc1e8359c52664ee34b" } Frame { msec: 3024 - hash: "59de97652e25f49b1bf016a9b124d324" + hash: "b98a2c58933bd4f49ed7a1d72bff7e66" } Frame { msec: 3040 - hash: "7194bacd56906f83948844224ce6a3e7" + hash: "b98a2c58933bd4f49ed7a1d72bff7e66" } Frame { msec: 3056 - hash: "09fe50cbbcc7432d6fa6bbe875eae5e3" + hash: "b98a2c58933bd4f49ed7a1d72bff7e66" } Frame { msec: 3072 - hash: "a95c1f6ca5a638c4d9229321a84e51a4" + hash: "b98a2c58933bd4f49ed7a1d72bff7e66" } Frame { msec: 3088 - hash: "c439b31b64510ce025ad326364e8f690" + hash: "b98a2c58933bd4f49ed7a1d72bff7e66" } Frame { msec: 3104 - hash: "c28c637ff5f0ae6d4532fba13cfb8ea4" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3120 - hash: "2e095e9433e1f504163aebc8450be923" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3136 - hash: "5fb49164c1bad4bb96a13cfbb336312b" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3152 - hash: "34b7976b3dbf0c5462ddf77153d9d2c9" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3168 - hash: "d4007272d676a896c99adb66afa0c10b" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3184 - hash: "07638f1f5eb5786a12cbc74414fe29b5" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3200 - hash: "1fe90791c573865f425ef0e43faf7a1c" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3216 - hash: "b149986c7b395106a808b1fcd1d8bcb2" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3232 - hash: "ecb2b6d44eafb8a0b5493520b64e5e5b" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3248 - hash: "fc66b2e38d477c16584eee4f541df511" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3264 - hash: "023152c61ad6cd0b8726e6c8fa6043a4" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3280 - hash: "b788f8a7e1e42f768fd1fe1198ca0344" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3296 - hash: "4f7f8b7f5bb78bb9327b6fa8142ce3a2" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3312 - hash: "30f041278c08174671568a0dfb7cbdf7" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3328 - hash: "30f041278c08174671568a0dfb7cbdf7" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3344 - hash: "6ecd90fc89ab9b6c4813fa6a6e9dffdb" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3360 - hash: "6ecd90fc89ab9b6c4813fa6a6e9dffdb" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3376 - hash: "6d79d9d0ba8da0b5654b39768b25591f" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3392 - hash: "6d79d9d0ba8da0b5654b39768b25591f" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3408 - hash: "6d79d9d0ba8da0b5654b39768b25591f" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3424 - hash: "6d79d9d0ba8da0b5654b39768b25591f" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3440 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3456 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3472 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3488 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3504 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3520 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3536 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3552 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3568 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3584 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3600 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3616 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3632 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3648 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } Frame { msec: 3664 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3680 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3696 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3712 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3728 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3744 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3760 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3776 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3792 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3808 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3824 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3840 - image: "qtbug10586.3.png" - } - Frame { - msec: 3856 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3872 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3888 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3904 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3920 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3936 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3952 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3968 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 3984 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4000 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4016 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4032 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4048 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4064 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 4080 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4096 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4112 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4128 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4144 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4160 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4176 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" - } - Frame { - msec: 4192 - hash: "cba9afe3f351e6cd6dc72d7f263401b0" + hash: "0755ae54acb6af587bbf7ca509146e0f" } } diff --git a/tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml b/tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml index 9ccebfa..65caedd 100644 --- a/tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml +++ b/tests/auto/declarative/qmlvisual/animation/qtbug10586/qtbug10586.qml @@ -1,5 +1,6 @@ import QtQuick 1.0 +/* This test checks that animations do occur while the flickable is flicking */ Rectangle { width: 200 height: 400 @@ -11,11 +12,6 @@ Rectangle { border.color: "black" border.width: 10 width: 1000; height: 1000 - rotation: 90 - gradient: Gradient { - GradientStop { position: 0; color: "black" } - GradientStop { position: 1; color: "white" } - } } } Rectangle { diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.0.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.0.png new file mode 100644 index 0000000..e7571f2 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.0.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.1.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.1.png new file mode 100644 index 0000000..60d09e9 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.1.png differ diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml index d1de5d0..82303ef 100644 --- a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml +++ b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction-visual.qml @@ -6,530 +6,510 @@ VisualTest { } Frame { msec: 16 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 32 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 48 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 64 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 80 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 96 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 112 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 128 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 144 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 160 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 176 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 192 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 208 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 224 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 240 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 256 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 272 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 288 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 304 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 320 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 336 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 352 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 368 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 384 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 400 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 416 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 432 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 448 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 54; y: 52 + modifiers: 0 + sendToViewport: true } Frame { msec: 464 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c5d2b291578c11c11452c29dc02bcad9" } Frame { msec: 480 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "650770d62a63031754b3c68f666a5805" } Frame { msec: 496 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "eb28945becabee0dffe618632d4db061" } Frame { msec: 512 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "6c7b66dff531723362418dacd23ea59e" } Frame { msec: 528 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "093bd3dd02a6d9f4dbd75a329bbf63f5" } Frame { msec: 544 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "5328b1f3932c8bf817a5031102e21c25" } Frame { msec: 560 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "ee2b8dc4ebdaaed41ae820385f56db83" } Frame { msec: 576 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "adf71c703dff4514d6ae247fd6b89030" } Frame { msec: 592 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c93d78e604406a3c61c2b34e5e0893a4" } Frame { msec: 608 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "c91dbb897289d2949d08c6381583ad5e" } Frame { msec: 624 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1e3a370e3d390e8d73731d659fae5908" } Frame { msec: 640 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "e6d3505120260677f5f1355abf0f2b1d" } Frame { msec: 656 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "251d68b91b37ef95ff61055f7b2ba0b5" } Frame { msec: 672 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "333a25691bafa88fbc92a153886c3b47" } Frame { msec: 688 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "e63367e5001732975bc4c002c079dbd8" } Frame { msec: 704 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "04e25f2fd913c38ee24558b52fb3ed37" } Frame { msec: 720 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "739f155ad3d703fa0255afed51baf51c" } Frame { msec: 736 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "739f155ad3d703fa0255afed51baf51c" } Frame { msec: 752 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "16de427e26afa1a1d91541fca1537033" } Frame { msec: 768 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "11a874ab1c429e1bcf5498808f3c42f7" } Frame { msec: 784 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "e97f33a71bf889815782c17067bcd736" } Frame { msec: 800 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "9f2f0728689a5ff76f87b13c92e9fd40" } Frame { msec: 816 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "9186cd14c3d9f2ad560be047cc483b50" } Frame { msec: 832 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "af2eb37824ad3567ce9db0329f647d50" } Frame { msec: 848 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "f09d264ed5f44313c19f2f985a26b9cd" } Frame { msec: 864 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "3ed8b3051d0d603bd514783fe04124a7" } Frame { msec: 880 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "38c7f8d39fd9a77400138da4e3ebb963" } Frame { msec: 896 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "6682f53fdda2d8662a31b725d23b08f6" } Frame { msec: 912 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "0f16d2640b51c9ada08c7aa0e8853d86" } Frame { msec: 928 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "22b9025d523dd1adb87f9b4c89295b29" } Frame { msec: 944 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 960 - image: "scriptAction.0.png" + image: "scriptAction-visual.0.png" } Frame { msec: 976 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 992 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1008 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1024 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1040 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1056 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1072 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1088 - hash: "55b713dcb7c810bf126e06cc97d26d24" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 146; y: 259 - modifiers: 0 - sendToViewport: true + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1104 - hash: "55b713dcb7c810bf126e06cc97d26d24" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1120 - hash: "9850cd8ed4643900409d1a87ef0bc4cf" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1136 - hash: "1cf03396b01e931e4e7e8e7e57e19c5f" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1152 - hash: "25fe648b85ec2d82621853dcbdbf695a" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1168 - hash: "1ca701e56fe387d5849f6933eb53aee9" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1184 - hash: "b39ecb792659a053a8985e2a849d6d51" + hash: "1761f6606bbdf5772594cf96412337ca" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 54; y: 52 + modifiers: 0 + sendToViewport: true } Frame { msec: 1200 - hash: "9a783432a054beec81cc5687f75a36dc" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1216 - hash: "edbd222d7ba6c6f819ded45fe316d461" + hash: "1761f6606bbdf5772594cf96412337ca" } Frame { msec: 1232 - hash: "eaf20159c4b90f90872bbd514d3a0cec" + hash: "77ab7b0bad67c80c5f685b02e264d333" } Frame { msec: 1248 - hash: "964807dd9b91e765577a773ef1ce2593" + hash: "27c3099b0e9f0607e9ebc983b2613eb9" } Frame { msec: 1264 - hash: "16e12026ab14657b0f36b8315684455d" + hash: "81bd467b2314fb877825323a6120de4a" } Frame { msec: 1280 - hash: "d001a6b2fec3c66baaa45d9ff93b3f63" + hash: "5cd632ac5399826249137ff2f27ef734" } Frame { msec: 1296 - hash: "fef11eb5f635bc11cd9679b7213b3b92" + hash: "3b6732d7539d7b9b6ac13b6f8291b993" } Frame { msec: 1312 - hash: "0a0cd5f5004048d88712cfe6943470c0" + hash: "6bde822175f1ee22a8bb0528d6170a5a" } Frame { msec: 1328 - hash: "0d83178afdae5feaa9915d56c24373ad" + hash: "a8401f0c19db5c395cf122f3fe6f3be2" } Frame { msec: 1344 - hash: "0a9e6e0b7b23ce93dc4e1f886cf9c7d1" + hash: "10e5126a9f97caf19df3d0ec4485222f" } Frame { msec: 1360 - hash: "f3199d0c860f1236e0b9472bef8785bc" + hash: "f7b0bde6f4c9e9c9aecdbf11f0ec525c" } Frame { msec: 1376 - hash: "f3199d0c860f1236e0b9472bef8785bc" + hash: "7501da757e6b0ba3923635765ef63f5b" } Frame { msec: 1392 - hash: "32ccdab249268b01d9f1658a736052f1" + hash: "c66f5f30f7a545fcf0b52debd68d96c1" } Frame { msec: 1408 - hash: "dc98f32a1a2d6e74998123b5232107b0" + hash: "ea679c31fd51733076716a325d2d4dc1" } Frame { msec: 1424 - hash: "db3010ef552146df938c237f6c92bff5" + hash: "01ffc159e0d0796e4de7cffd46685481" } Frame { msec: 1440 - hash: "101e8595d0301e88376ec52ba9361f84" + hash: "c53b75720a772a43a6c7d046ffb4d39b" } Frame { msec: 1456 - hash: "119d548c59baa7e47266d2ceca663288" + hash: "1338c0458f32869e35163a2dcb950b8e" } Frame { msec: 1472 - hash: "f141fafe102a0b9a2bf33e8c3fc800ff" + hash: "1338c0458f32869e35163a2dcb950b8e" } Frame { msec: 1488 - hash: "b01f9ca8d4fbff17b3d48c70898a044d" + hash: "d894739536bb7033d321f8862264b5e6" } Frame { msec: 1504 - hash: "cf67954a2d1b22e8d2cfdc26419bafb8" + hash: "52d5556f4b2404ae896ae36e0bc866ed" } Frame { msec: 1520 - hash: "7680b2b5a63dea13d733947297e01355" + hash: "5ff9d9ab8099b2b9469df9efe672f46d" } Frame { msec: 1536 - hash: "af1c017acf6b3c8cff86c9ceb60db3cb" + hash: "acadb950bd78c6fade9161f8e53628e7" } Frame { msec: 1552 - hash: "0b23ec51f71fddae5e2238ab5754f1db" + hash: "7583b99a5f3aede70fc10728d77f57cc" } Frame { msec: 1568 - hash: "976643961ecbdc86335180ba812b874e" + hash: "f72881eb92792727985482996bf689f9" } Frame { msec: 1584 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "26e0d64d5afeecdc4d93492f1eaaa54f" } Frame { msec: 1600 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "93206a830cf787d00a6bb2d3c91d40bc" } Frame { msec: 1616 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "af0a99b072a754cd0ecb75a7198849c1" } Frame { msec: 1632 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "84adc92e299feeb494b108a009d1b662" } Frame { msec: 1648 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "4fac6d471517625d4f5ce6ed6aaebe0b" } Frame { msec: 1664 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6952c27025740aca006a13da87379f9f" } Frame { msec: 1680 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "3297ed7bffb48a4f2ca90dd81eaf7c7a" } Frame { msec: 1696 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "3297ed7bffb48a4f2ca90dd81eaf7c7a" } Frame { msec: 1712 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1728 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1744 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1760 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1776 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1792 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1808 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1824 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1840 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1856 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1872 - hash: "aeed60899abb6c486a5b1df81f9a0224" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1888 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1904 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1920 - image: "scriptAction.1.png" + image: "scriptAction-visual.1.png" } Frame { msec: 1936 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1952 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } Frame { msec: 1968 - hash: "aeed60899abb6c486a5b1df81f9a0224" - } - Frame { - msec: 1984 - hash: "aeed60899abb6c486a5b1df81f9a0224" - } - Frame { - msec: 2000 - hash: "aeed60899abb6c486a5b1df81f9a0224" - } - Frame { - msec: 2016 - hash: "aeed60899abb6c486a5b1df81f9a0224" - } - Frame { - msec: 2032 - hash: "aeed60899abb6c486a5b1df81f9a0224" - } - Frame { - msec: 2048 - hash: "aeed60899abb6c486a5b1df81f9a0224" + hash: "6741d853f099a5a98fcdf87053b69ec8" } } diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.png deleted file mode 100644 index 64d6b06..0000000 Binary files a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.png b/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.png deleted file mode 100644 index 1a25c63..0000000 Binary files a/tests/auto/declarative/qmlvisual/animation/scriptAction/data/scriptAction.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml b/tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml index 1427c9d..0a14542 100644 --- a/tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml +++ b/tests/auto/declarative/qmlvisual/animation/scriptAction/scriptAction-visual.qml @@ -6,10 +6,10 @@ then immediately change blue, and then animate moving 50 pixels down. */ Rectangle { - width: 400; height: 400 + width: 100; height: 100 Rectangle { id: myRect - width: 100; height: 100 + width: 50; height: 50 color: "red" } MouseArea { -- cgit v0.12 From eb286d008cf651bd0496c35fb3139cc37036882f Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Oct 2010 18:39:35 +1000 Subject: Clean up qmlvisual/focusscope tests Remove text, to make them less platform specific Task-number: QTBUG-14792 --- .../qmlvisual/focusscope/data-MAC/test.0.png | Bin 14875 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test.1.png | Bin 14875 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test.2.png | Bin 14863 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test.3.png | Bin 14877 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test.4.png | Bin 14877 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test.5.png | Bin 14877 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test.qml | 1599 ----------- .../qmlvisual/focusscope/data-MAC/test2.0.png | Bin 5375 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test2.1.png | Bin 5375 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test2.qml | 607 ----- .../qmlvisual/focusscope/data-MAC/test3.0.png | Bin 12749 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.1.png | Bin 12667 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.2.png | Bin 12373 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.3.png | Bin 12150 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.4.png | Bin 11944 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.5.png | Bin 12150 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.6.png | Bin 12373 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.7.png | Bin 12667 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.8.png | Bin 12749 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.9.png | Bin 12710 -> 0 bytes .../qmlvisual/focusscope/data-MAC/test3.qml | 2879 -------------------- .../qmlvisual/focusscope/data-X11/test.0.png | Bin 11501 -> 0 bytes .../qmlvisual/focusscope/data-X11/test.1.png | Bin 11501 -> 0 bytes .../qmlvisual/focusscope/data-X11/test.2.png | Bin 11486 -> 0 bytes .../qmlvisual/focusscope/data-X11/test.3.png | Bin 11500 -> 0 bytes .../qmlvisual/focusscope/data-X11/test.4.png | Bin 11500 -> 0 bytes .../qmlvisual/focusscope/data-X11/test.5.png | Bin 11500 -> 0 bytes .../qmlvisual/focusscope/data-X11/test.qml | 1599 ----------- .../qmlvisual/focusscope/data-X11/test2.0.png | Bin 4656 -> 0 bytes .../qmlvisual/focusscope/data-X11/test2.1.png | Bin 4656 -> 0 bytes .../qmlvisual/focusscope/data-X11/test2.qml | 607 ----- .../qmlvisual/focusscope/data-X11/test3.0.png | Bin 10093 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.1.png | Bin 10051 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.2.png | Bin 9812 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.3.png | Bin 9625 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.4.png | Bin 9458 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.5.png | Bin 9645 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.6.png | Bin 9812 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.7.png | Bin 10051 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.8.png | Bin 10087 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.9.png | Bin 10072 -> 0 bytes .../qmlvisual/focusscope/data-X11/test3.qml | 2879 -------------------- .../qmlvisual/focusscope/data/test.0.png | Bin 14836 -> 1968 bytes .../qmlvisual/focusscope/data/test.1.png | Bin 14836 -> 1968 bytes .../qmlvisual/focusscope/data/test.2.png | Bin 14821 -> 1974 bytes .../qmlvisual/focusscope/data/test.3.png | Bin 14833 -> 0 bytes .../qmlvisual/focusscope/data/test.4.png | Bin 14833 -> 0 bytes .../qmlvisual/focusscope/data/test.5.png | Bin 14833 -> 0 bytes .../declarative/qmlvisual/focusscope/data/test.qml | 1324 +++------ .../qmlvisual/focusscope/data/test2.0.png | Bin 5359 -> 305 bytes .../qmlvisual/focusscope/data/test2.1.png | Bin 5359 -> 0 bytes .../qmlvisual/focusscope/data/test2.qml | 440 +-- .../qmlvisual/focusscope/data/test3.0.png | Bin 12616 -> 1333 bytes .../qmlvisual/focusscope/data/test3.1.png | Bin 12538 -> 994 bytes .../qmlvisual/focusscope/data/test3.2.png | Bin 12257 -> 1156 bytes .../qmlvisual/focusscope/data/test3.3.png | Bin 12035 -> 1057 bytes .../qmlvisual/focusscope/data/test3.4.png | Bin 11877 -> 0 bytes .../qmlvisual/focusscope/data/test3.5.png | Bin 12046 -> 0 bytes .../qmlvisual/focusscope/data/test3.6.png | Bin 12257 -> 0 bytes .../qmlvisual/focusscope/data/test3.7.png | Bin 12538 -> 0 bytes .../qmlvisual/focusscope/data/test3.8.png | Bin 12616 -> 0 bytes .../qmlvisual/focusscope/data/test3.9.png | Bin 12581 -> 0 bytes .../qmlvisual/focusscope/data/test3.qml | 2558 ++++------------- .../auto/declarative/qmlvisual/focusscope/test.qml | 13 +- .../declarative/qmlvisual/focusscope/test2.qml | 26 +- .../declarative/qmlvisual/focusscope/test3.qml | 13 +- 66 files changed, 933 insertions(+), 13611 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.0.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.0.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.0.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.3.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.4.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test.5.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.5.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.6.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.7.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.8.png delete mode 100644 tests/auto/declarative/qmlvisual/focusscope/data/test3.9.png diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.png deleted file mode 100644 index 0f33d99..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.png deleted file mode 100644 index 0f33d99..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.png deleted file mode 100644 index 06a3dbd..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.png deleted file mode 100644 index e0d02d6..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.png deleted file mode 100644 index e0d02d6..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.png deleted file mode 100644 index e0d02d6..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml deleted file mode 100644 index ee9a550..0000000 --- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test.qml +++ /dev/null @@ -1,1599 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 32 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 48 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 64 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 80 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 96 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 112 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 128 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 144 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 160 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 176 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 192 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 208 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 224 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 240 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 256 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 272 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 288 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 304 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 320 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 336 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 352 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 368 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 384 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 400 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 416 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 432 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 448 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 464 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 480 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 496 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 512 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 528 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 544 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 560 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 576 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 592 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 608 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 624 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 640 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 656 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 672 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 688 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 704 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 720 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 736 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 752 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 768 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 784 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 800 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 816 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 832 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 848 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 864 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 880 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 896 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 912 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 928 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 944 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 960 - image: "test.0.png" - } - Frame { - msec: 976 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 992 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1008 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1024 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1040 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1056 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1072 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1088 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1104 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1120 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1136 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1152 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1168 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1184 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1200 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1216 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1232 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1248 - hash: "70f4ce2881f2340167f314b49716707a" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1264 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1280 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1296 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1312 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1328 - hash: "715a587be7a5803af2827e882236d187" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1344 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1360 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1376 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1392 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1408 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1424 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1440 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1456 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1472 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1488 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1504 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1520 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1536 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1552 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1568 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1584 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1600 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1616 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1632 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1648 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1664 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1680 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1696 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1712 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1728 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1744 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1760 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1776 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1792 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 1808 - hash: "715a587be7a5803af2827e882236d187" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 1824 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1840 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1856 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1872 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1888 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1904 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1920 - image: "test.1.png" - } - Frame { - msec: 1936 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1952 - hash: "70f4ce2881f2340167f314b49716707a" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 1968 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 1984 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2000 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2016 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2032 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2048 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2064 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2080 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2096 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2112 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2128 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2144 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2160 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2176 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2192 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2208 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2224 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2240 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2256 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2272 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2288 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2304 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2320 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2336 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 2352 - hash: "70f4ce2881f2340167f314b49716707a" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 2368 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2384 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2400 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2416 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2432 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2448 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2464 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 2480 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2496 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2512 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2528 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2544 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2560 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2576 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2592 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2608 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2624 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2640 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2656 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2672 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2688 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2704 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2720 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2736 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2752 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2768 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2784 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2800 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2816 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2832 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2848 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2864 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2880 - image: "test.2.png" - } - Frame { - msec: 2896 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2912 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2928 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2944 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2960 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 2976 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 2992 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3008 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3024 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3040 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3056 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3072 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3088 - hash: "70f4ce2881f2340167f314b49716707a" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 3104 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3120 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3136 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3152 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3168 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3184 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3200 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3216 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3232 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3248 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3264 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3280 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3296 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3312 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3328 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3344 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3360 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3376 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3392 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3408 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3424 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3440 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3456 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3472 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3488 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3504 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3520 - hash: "70f4ce2881f2340167f314b49716707a" - } - Frame { - msec: 3536 - hash: "70f4ce2881f2340167f314b49716707a" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3552 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3568 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3584 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3600 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3616 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3632 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3648 - hash: "715a587be7a5803af2827e882236d187" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3664 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3680 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3696 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3712 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3728 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3744 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3760 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3776 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3792 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3808 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3824 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3840 - image: "test.3.png" - } - Frame { - msec: 3856 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3872 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3888 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3904 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3920 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3936 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3952 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3968 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 3984 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4000 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4016 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4032 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4048 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4064 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4080 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4096 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4112 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4128 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4144 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4160 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4176 - hash: "715a587be7a5803af2827e882236d187" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 4192 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4208 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4224 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4240 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4256 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4272 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 4288 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4304 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4320 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4336 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4352 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4368 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4384 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4400 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4416 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4432 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4448 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4464 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4480 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4496 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4512 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4528 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4544 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4560 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4576 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4592 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4608 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4624 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4640 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4656 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4672 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4688 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4704 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4720 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4736 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4752 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4768 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Frame { - msec: 4784 - hash: "773f573d4b37181f7a784597a30cd73d" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 4800 - image: "test.4.png" - } - Frame { - msec: 4816 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4832 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4848 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4864 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4880 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4896 - hash: "715a587be7a5803af2827e882236d187" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 4912 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4928 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4944 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4960 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4976 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 4992 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5008 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5024 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5040 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5056 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5072 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5088 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5104 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5120 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5136 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5152 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5168 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5184 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5200 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5216 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5232 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5248 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5264 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5280 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5296 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5312 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5328 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5344 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5360 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5376 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5392 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5408 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5424 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5440 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5456 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5472 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5488 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5504 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5520 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5536 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5552 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5568 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5584 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5600 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5616 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5632 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5648 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5664 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5680 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5696 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5712 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5728 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5744 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5760 - image: "test.5.png" - } - Frame { - msec: 5776 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5792 - hash: "715a587be7a5803af2827e882236d187" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 5808 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5824 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5840 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5856 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5872 - hash: "715a587be7a5803af2827e882236d187" - } - Frame { - msec: 5888 - hash: "715a587be7a5803af2827e882236d187" - } -} diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.0.png deleted file mode 100644 index fa711c1..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.png deleted file mode 100644 index fa711c1..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml deleted file mode 100644 index 5d84bfe..0000000 --- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test2.qml +++ /dev/null @@ -1,607 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 32 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 48 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 64 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 80 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 96 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 112 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 128 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 144 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 160 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 176 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 192 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 208 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 224 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 240 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 256 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 272 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 288 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 304 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 320 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 336 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 352 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 368 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 384 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 400 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 416 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 432 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 448 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 464 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 480 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 496 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 512 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 528 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 544 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 560 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 576 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 592 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 608 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 624 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 640 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 656 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 672 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 688 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 704 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 720 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 736 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 752 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 768 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 784 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 800 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 816 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 832 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 848 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 864 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 880 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 896 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 912 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 928 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 944 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 960 - image: "test2.0.png" - } - Frame { - msec: 976 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 992 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1008 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1024 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1040 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1056 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1072 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1088 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1104 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1120 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1136 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1152 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1168 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1184 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1200 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1216 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1232 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1248 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1264 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1280 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1296 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1312 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1328 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1344 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1360 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1376 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1392 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1408 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1424 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1440 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1456 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1472 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1488 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1504 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1520 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1536 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1552 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1568 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1584 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1600 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1616 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1632 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1648 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1664 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1680 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1696 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1712 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1728 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1744 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1760 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1776 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1792 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1808 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1824 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1840 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1856 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1872 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1888 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1904 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1920 - image: "test2.1.png" - } - Frame { - msec: 1936 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1952 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1968 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 1984 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2000 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2016 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2032 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2048 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2064 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2080 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2096 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2112 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2128 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2144 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2160 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2176 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2192 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2208 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2224 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2240 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2256 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 2272 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2288 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2304 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2320 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2336 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2352 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } - Frame { - msec: 2368 - hash: "9ecdd4addcaea53cdca16f3496ceb15c" - } -} diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png deleted file mode 100644 index 9309e37..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png deleted file mode 100644 index 20e6c8e..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png deleted file mode 100644 index c7559ac..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png deleted file mode 100644 index bf2844b..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.png deleted file mode 100644 index beef0bf..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.png deleted file mode 100644 index 1847dc7..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.png deleted file mode 100644 index c7559ac..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.png deleted file mode 100644 index 20e6c8e..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.png deleted file mode 100644 index 9309e37..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.png deleted file mode 100644 index 7ac879b..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml deleted file mode 100644 index cd73a3c..0000000 --- a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml +++ /dev/null @@ -1,2879 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 32 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 48 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 64 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 80 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 96 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 112 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 128 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 144 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 160 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 176 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 192 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 208 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 224 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 240 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 256 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 272 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 288 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 304 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 320 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 336 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 352 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 368 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 384 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 400 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 416 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 432 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 448 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 464 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 480 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 496 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 512 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 528 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 544 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 560 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 576 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 592 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 608 - hash: "ce962a38caeb7bf7eef05112fbb52f91" - } - Frame { - msec: 624 - hash: "779f0660ce5bc2c2fc9f05d8b86158a8" - } - Frame { - msec: 640 - hash: "615e07a3c83539321befb44aa8fac811" - } - Frame { - msec: 656 - hash: "8a00b9f66ca7fdb0e4975f547025f873" - } - Frame { - msec: 672 - hash: "43bbe82799b1d8453f89a7ef928b1e54" - } - Frame { - msec: 688 - hash: "2cc468d6e14c27ff1c0bd6064ae47509" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 704 - hash: "1dc9d1b95016ccbeaca5b7a867a5cc3a" - } - Frame { - msec: 720 - hash: "f36734c91fe41a7947965dac97393ad4" - } - Frame { - msec: 736 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 752 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 768 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 784 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 800 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 816 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 832 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 848 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 864 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 880 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 896 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 912 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 928 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 944 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 960 - image: "test3.0.png" - } - Frame { - msec: 976 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 992 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 1008 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 1024 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 1040 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 1056 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 1072 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 1088 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1104 - hash: "1c29b3d1086b261c2a9e94d49567484f" - } - Frame { - msec: 1120 - hash: "6ab17a210b45dae1ed99fd1689bb3e46" - } - Frame { - msec: 1136 - hash: "feb504605f7f27ca3a2bf080c1fb1e19" - } - Frame { - msec: 1152 - hash: "bec2d2e2222587a379af12a30e078886" - } - Frame { - msec: 1168 - hash: "39cb2bdc44273023b557a0f56df61d85" - } - Frame { - msec: 1184 - hash: "2cda045b452c4645be1cdb4efd238532" - } - Frame { - msec: 1200 - hash: "1f3efbfadd22734b5fd656596c11885b" - } - Frame { - msec: 1216 - hash: "7277c05a06e481a5af13e4fe39e322f8" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1232 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1248 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1264 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1280 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1296 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1312 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1328 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1344 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1360 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1376 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1392 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1408 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1424 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1440 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1456 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1472 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1488 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1504 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 1520 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1536 - hash: "c5f88e95ead1f4542b766577d80e70fd" - } - Frame { - msec: 1552 - hash: "d38118f26b9c2b68dc8fdb8d2a959134" - } - Frame { - msec: 1568 - hash: "44c483c899220f040aa7808f15fac429" - } - Frame { - msec: 1584 - hash: "02a63967944c8c53a9741318e99a326e" - } - Frame { - msec: 1600 - hash: "7fc10e91212af979e09c8d3b98625c1b" - } - Frame { - msec: 1616 - hash: "d14b69d18adc548dfb68dae1559effdb" - } - Frame { - msec: 1632 - hash: "cb9bce7fa14a367197fa34ad3acc4cdd" - } - Frame { - msec: 1648 - hash: "105a0e3d36296eba16077c4cf93547ae" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1664 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1680 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1696 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1712 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1728 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1744 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1760 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1776 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1792 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1808 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1824 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1840 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1856 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1872 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1888 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1904 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1920 - image: "test3.1.png" - } - Frame { - msec: 1936 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1952 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1968 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 1984 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 2000 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2016 - hash: "6e4e4321cda32abab394419a9e6494dc" - } - Frame { - msec: 2032 - hash: "45b79c56379afa7243547fedfa3260db" - } - Frame { - msec: 2048 - hash: "4635555c632f325a151d340a3eb742b9" - } - Frame { - msec: 2064 - hash: "0255da44fa95548427139073c994234c" - } - Frame { - msec: 2080 - hash: "eac0c428ea7b7aa55a469562d2cb3fd6" - } - Frame { - msec: 2096 - hash: "06ab23a83a5900cfdde98d4563414511" - } - Frame { - msec: 2112 - hash: "808e4a745c58872d52ec6a3e669aea5c" - } - Frame { - msec: 2128 - hash: "e6231b43f93fd6ae3e0990def1168c39" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2144 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2160 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2176 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2192 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2208 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2224 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2240 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2256 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2272 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2288 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2304 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2320 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2336 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2352 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2368 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2384 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2400 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2416 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2432 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2448 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2464 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2480 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2496 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 2512 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2528 - hash: "e1c32968e36cb95be250121187ddf13e" - } - Frame { - msec: 2544 - hash: "70498453babe3ab5e0fec62bcd0ff332" - } - Frame { - msec: 2560 - hash: "76fc1b1e6b22771bf08dfdd16b3f24e9" - } - Frame { - msec: 2576 - hash: "c6be4f26750b8bc1a5b71ff381e462c6" - } - Frame { - msec: 2592 - hash: "986f738d0f0f70b88f951d9f028ef61b" - } - Frame { - msec: 2608 - hash: "2201ad4f92bcf24ab62d0ddb8b2a64c1" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2624 - hash: "27e9a18cb70c8f2ab9e4dd7af321e8e4" - } - Frame { - msec: 2640 - hash: "3a352127f49f8c589b7b7da1232caf6b" - } - Frame { - msec: 2656 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2672 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2688 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2704 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2720 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2736 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2752 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2768 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2784 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2800 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2816 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2832 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2848 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2864 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2880 - image: "test3.2.png" - } - Frame { - msec: 2896 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2912 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2928 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2944 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2960 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 2976 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2992 - hash: "20f96d3fbef9d51d8b8a28a6d58fabb2" - } - Frame { - msec: 3008 - hash: "1e5d888fd4685960b8ae0a79e2287e89" - } - Frame { - msec: 3024 - hash: "2115c2e6689ce6669abf9f3741eb5df1" - } - Frame { - msec: 3040 - hash: "c67949eb5f2210c6b2dad4ff352831ed" - } - Frame { - msec: 3056 - hash: "d982500bee0a6f6fb0861fb3c32319eb" - } - Frame { - msec: 3072 - hash: "ffb111084712d5ecf072ade52103b985" - } - Frame { - msec: 3088 - hash: "e5d594c8f08b9d283a3998648a383332" - } - Frame { - msec: 3104 - hash: "20632ba6a4c14386eb01167059f7b617" - } - Frame { - msec: 3120 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3136 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3152 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3168 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3184 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3200 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3216 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3232 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3248 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3264 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3280 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3296 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3312 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3328 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3344 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3360 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3376 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3392 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3408 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3424 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3440 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3456 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3472 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 3488 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3504 - hash: "f60a72dd52f6f319706dc97f873a484f" - } - Frame { - msec: 3520 - hash: "a21fbcbb3c0ede708f2862959b84654f" - } - Frame { - msec: 3536 - hash: "40e5f7530391e7641498c7870ce986c9" - } - Frame { - msec: 3552 - hash: "809daf15ad3e9f981f1306da18dd6872" - } - Frame { - msec: 3568 - hash: "4b053d234c8c9a5afb7800abe28ea96f" - } - Frame { - msec: 3584 - hash: "e011e3aaf143befc8e207945fdfc9f47" - } - Frame { - msec: 3600 - hash: "55539d51f833b8a98fc14031a4a70c4c" - } - Frame { - msec: 3616 - hash: "07c2b526c022d0deae61acba26d7ea24" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3632 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3648 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3664 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3680 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3696 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3712 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3728 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3744 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3760 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3776 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3792 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3808 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3824 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3840 - image: "test3.3.png" - } - Frame { - msec: 3856 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3872 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3888 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3904 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3920 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3936 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3952 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3968 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 3984 - hash: "cc0ab553f98262662e52191e0b370486" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4000 - hash: "7d2f24d5a68397bedc2f9e3652715126" - } - Frame { - msec: 4016 - hash: "55ff9205bb36d8f8965fb122a8686203" - } - Frame { - msec: 4032 - hash: "8968377cbbdf7a46b6f13690826ac711" - } - Frame { - msec: 4048 - hash: "8ce9afffac571f1a2cc6986d79dd2c8f" - } - Frame { - msec: 4064 - hash: "f75c375cdf8e1b83398e9b18e7c39852" - } - Frame { - msec: 4080 - hash: "20c8db7fb344c056465175ed0fa9518a" - } - Frame { - msec: 4096 - hash: "8135c2cae0dcf8ee6eccbfdd7b711bc0" - } - Frame { - msec: 4112 - hash: "659fc24d328058eb118be5613ea25257" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4128 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4144 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4160 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4176 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4192 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4208 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4224 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4240 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4256 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4272 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4288 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4304 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4320 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4336 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4352 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4368 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4384 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4400 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4416 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4432 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4448 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4464 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4480 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4496 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4512 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4528 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4544 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4560 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4576 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4592 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4608 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4624 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4640 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4656 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4672 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4688 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4704 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4720 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4736 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4752 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4768 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4784 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4800 - image: "test3.4.png" - } - Frame { - msec: 4816 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4832 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4848 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4864 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4880 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4896 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4912 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4928 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4944 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4960 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4976 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 4992 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 5008 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 5024 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 5040 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 5056 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 5072 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 5088 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Frame { - msec: 5104 - hash: "ef9a34bf49c632be0f88f6658196dfe6" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5120 - hash: "f01088d95d8409f98ae19b7970ecf3ad" - } - Frame { - msec: 5136 - hash: "393987a9e22db77233465e3d08cfb244" - } - Frame { - msec: 5152 - hash: "40e58eac132aa3b5f66f244ab7b189be" - } - Frame { - msec: 5168 - hash: "d60c98c5fafe6bfa73a3d0c55f8f6716" - } - Frame { - msec: 5184 - hash: "775733a71bb1d39f51b9fbc7e28d9ffe" - } - Frame { - msec: 5200 - hash: "a343457f584c6e63aaec36b5db4fb7d0" - } - Frame { - msec: 5216 - hash: "7c416bd1be54135056b037642026251f" - } - Frame { - msec: 5232 - hash: "42813b6c3ef437a7b3ea8f03bb8b1894" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5248 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5264 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5280 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5296 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5312 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5328 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5344 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5360 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5376 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5392 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5408 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5424 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5440 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5456 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5472 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5488 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5504 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5520 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5536 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5552 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5568 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5584 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5600 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5616 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5632 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5648 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5664 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5680 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5696 - hash: "cc0ab553f98262662e52191e0b370486" - } - Frame { - msec: 5712 - hash: "cc0ab553f98262662e52191e0b370486" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5728 - hash: "b3af171ca40a5f081e2bfc984b8da551" - } - Frame { - msec: 5744 - hash: "aadbc8c960fbe2e8aac184a99ba818bd" - } - Frame { - msec: 5760 - image: "test3.5.png" - } - Frame { - msec: 5776 - hash: "99fc06589f09cd10cfdf748f032eacbd" - } - Frame { - msec: 5792 - hash: "f7915b1a8b9f7188263180a97c8b355f" - } - Frame { - msec: 5808 - hash: "7fb30728fb764b659bad5bb6c4e71e2c" - } - Frame { - msec: 5824 - hash: "4882459350feffaed89c2296c74b839d" - } - Frame { - msec: 5840 - hash: "917a368858e431bebcd8f2fda67401f8" - } - Frame { - msec: 5856 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5872 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 5888 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 5904 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 5920 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 5936 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 5952 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 5968 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 5984 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6000 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6016 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6032 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6048 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6064 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6080 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6096 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6112 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6128 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6144 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6160 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6176 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6192 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6208 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6224 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6240 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6256 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Frame { - msec: 6272 - hash: "bfd0497c6505d42aefe6341adb850d89" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6288 - hash: "ada3c3558261701c705ecf79716df56a" - } - Frame { - msec: 6304 - hash: "81c73fd3dd69eb767d8899a54c3088bb" - } - Frame { - msec: 6320 - hash: "d54e7dd1e876666f64b5904240bf8764" - } - Frame { - msec: 6336 - hash: "32bdeac66a43a967d549ca2ad8c59bbd" - } - Frame { - msec: 6352 - hash: "04eec62cc40c8b31d989bead64909f9e" - } - Frame { - msec: 6368 - hash: "cfffdd4edc35303ee260ed32956238b7" - } - Frame { - msec: 6384 - hash: "fb562c38b9d2360517160f8a8ab29ced" - } - Frame { - msec: 6400 - hash: "ba8ec8f0663bf1e62ff426b0c7d0d3b2" - } - Frame { - msec: 6416 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6432 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6448 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6464 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6480 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6496 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6512 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6528 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6544 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6560 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6576 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6592 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6608 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6624 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6640 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6656 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6672 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6688 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6704 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6720 - image: "test3.6.png" - } - Frame { - msec: 6736 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6752 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6768 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6784 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6800 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6816 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6832 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Frame { - msec: 6848 - hash: "e3b2de8a4e3229880971d2144e55de1b" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6864 - hash: "e6292a001405924f6d5f1a4051c3f6cb" - } - Frame { - msec: 6880 - hash: "0d8a6b740cc7b33659aa0a1cc2bd2aa9" - } - Frame { - msec: 6896 - hash: "07c4267ff499c46977420d4be7529e04" - } - Frame { - msec: 6912 - hash: "f69cd14d97de3ca8d21ace1df1d5a523" - } - Frame { - msec: 6928 - hash: "1572b31fd3ae917d5701d0b8f1d2a2bc" - } - Frame { - msec: 6944 - hash: "e3953027fe269a5d4c6581717d516c65" - } - Frame { - msec: 6960 - hash: "e35e8a5dfa7309696fa20c6f5480ac50" - } - Frame { - msec: 6976 - hash: "77e75e66118f911c8fff084e1a825d77" - } - Frame { - msec: 6992 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7008 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7024 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7040 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7056 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7072 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7088 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7104 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7120 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7136 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7152 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7168 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7184 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7200 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7216 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7232 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7248 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7264 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7280 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7296 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7312 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7328 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7344 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7360 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7376 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7392 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7408 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7424 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Frame { - msec: 7440 - hash: "e97f921f1c34246fc229c48a4b66466c" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7456 - hash: "8588c30394737cebc5580fe024589b08" - } - Frame { - msec: 7472 - hash: "ca150a32b22cad95696ecfbad0ed3e67" - } - Frame { - msec: 7488 - hash: "7f980e0cf67927918b1244456c38c7c0" - } - Frame { - msec: 7504 - hash: "2bc38fb34a6875aabddce0f460914612" - } - Frame { - msec: 7520 - hash: "328257a4691f341db39ee5ca677693eb" - } - Frame { - msec: 7536 - hash: "05e0d8c986ff81e23f253d56ebdef46e" - } - Frame { - msec: 7552 - hash: "be95d74a42318c52ab73ce694436a58b" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7568 - hash: "eba8512746494f3602d24dab86fb2559" - } - Frame { - msec: 7584 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7600 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7616 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7632 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7648 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7664 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7680 - image: "test3.7.png" - } - Frame { - msec: 7696 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7712 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7728 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7744 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7760 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7776 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7792 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7808 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7824 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7840 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7856 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7872 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7888 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7904 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7920 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7936 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7952 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Frame { - msec: 7968 - hash: "8f443766efd0f74e96e79ed3c267892c" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7984 - hash: "7b2b3a84e9649370ce282383a820c39b" - } - Frame { - msec: 8000 - hash: "08547adce7e02eec593fa636af004257" - } - Frame { - msec: 8016 - hash: "29789cfbd1b648ce705cf17d03298ffe" - } - Frame { - msec: 8032 - hash: "9e89ef84c86b1fc0531f0bd5ee530ba5" - } - Frame { - msec: 8048 - hash: "21b437a318c5ef87c38f9199772eafa6" - } - Frame { - msec: 8064 - hash: "70c8c8fbcf2d0331ca7ede8641a6068b" - } - Frame { - msec: 8080 - hash: "c277e9d4f89e99d974d03dcfe41a1755" - } - Frame { - msec: 8096 - hash: "54c7a72a3f814e707777c16ddd4532b8" - } - Frame { - msec: 8112 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8128 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8144 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8160 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8176 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8192 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8208 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8224 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8240 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8256 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8272 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8288 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8304 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8320 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8336 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8352 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8368 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8384 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8400 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8416 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8432 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8448 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8464 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8480 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Frame { - msec: 8496 - hash: "bdf37518633a43d8dc47245f5b68550b" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8512 - hash: "7992512c72fe530fdd92866c96de29a0" - } - Frame { - msec: 8528 - hash: "ad29d3653790efb998ac137538b4ce09" - } - Frame { - msec: 8544 - hash: "f6daf0ad7f7c970ece3dc1898ab9f092" - } - Frame { - msec: 8560 - hash: "417143caa8ed86082ea4e40aca7ca26e" - } - Frame { - msec: 8576 - hash: "5215943d1fbffd5ef7c16d4ca6587628" - } - Frame { - msec: 8592 - hash: "d143c87d3cf7560f911e98869983efef" - } - Frame { - msec: 8608 - hash: "1fcb9b3d3b4c888c65334b88e240d79c" - } - Frame { - msec: 8624 - hash: "61cec1c227eafafe6c03a33591b1825e" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8640 - image: "test3.8.png" - } - Frame { - msec: 8656 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8672 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8688 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8704 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8720 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8736 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8752 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8768 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8784 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8800 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8816 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8832 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8848 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8864 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8880 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8896 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8912 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8928 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8944 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8960 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8976 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 8992 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 9008 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 9024 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 9040 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Frame { - msec: 9056 - hash: "57e009de047c348d3ae14a6271b2e6f2" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 9072 - hash: "fcbb907bcf41602a5c30e2843a4b1fff" - } - Frame { - msec: 9088 - hash: "5fee95daaa629bbf0cec3e41cd693502" - } - Frame { - msec: 9104 - hash: "b9d721d2a8b0867bab29817b99b8ec2d" - } - Frame { - msec: 9120 - hash: "e518e9872a502d3b2ff74d209626c9ee" - } - Frame { - msec: 9136 - hash: "9c535d7da59ed2f2ce116e70c3e165cf" - } - Frame { - msec: 9152 - hash: "e54fbcb23e01d5842885b92d4493535b" - } - Frame { - msec: 9168 - hash: "7ac2467f24cef06c8842460ffe813ee0" - } - Frame { - msec: 9184 - hash: "276293e289db5c9c7cd9612c73ef7792" - } - Frame { - msec: 9200 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 9216 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9232 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9248 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9264 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9280 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9296 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9312 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9328 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9344 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9360 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9376 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9392 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9408 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9424 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9440 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9456 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9472 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9488 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9504 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9520 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9536 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9552 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9568 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9584 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9600 - image: "test3.9.png" - } - Frame { - msec: 9616 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9632 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9648 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9664 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9680 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9696 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9712 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9728 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9744 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9760 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9776 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9792 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9808 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9824 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9840 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9856 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9872 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9888 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9904 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9920 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9936 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9952 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9968 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 9984 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10000 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10016 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10032 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10048 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10064 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10080 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10096 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10112 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10128 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10144 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10160 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10176 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10192 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10208 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10224 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10240 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10256 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10272 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10288 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10304 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10320 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10336 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10352 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10368 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 10384 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10400 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10416 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } - Frame { - msec: 10432 - hash: "d38da3f61cd2944eec8bdfbef70c928f" - } -} diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.png deleted file mode 100644 index f68f7dc..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.png deleted file mode 100644 index f68f7dc..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.png deleted file mode 100644 index e26c028..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.png deleted file mode 100644 index 9c4b2f2..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.png deleted file mode 100644 index 9c4b2f2..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.png deleted file mode 100644 index 9c4b2f2..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml deleted file mode 100644 index 8d36200..0000000 --- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test.qml +++ /dev/null @@ -1,1599 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 32 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 48 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 64 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 80 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 96 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 112 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 128 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 144 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 160 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 176 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 192 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 208 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 224 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 240 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 256 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 272 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 288 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 304 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 320 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 336 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 352 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 368 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 384 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 400 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 416 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 432 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 448 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 464 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 480 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 496 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 512 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 528 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 544 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 560 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 576 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 592 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 608 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 624 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 640 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 656 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 672 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 688 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 704 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 720 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 736 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 752 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 768 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 784 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 800 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 816 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 832 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 848 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 864 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 880 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 896 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 912 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 928 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 944 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 960 - image: "test.0.png" - } - Frame { - msec: 976 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 992 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1008 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1024 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1040 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1056 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1072 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1088 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1104 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1120 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1136 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1152 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1168 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1184 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1200 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1216 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1232 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1248 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1264 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1280 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1296 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1312 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1328 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1344 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1360 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1376 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1392 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1408 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1424 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1440 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1456 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1472 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1488 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1504 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1520 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1536 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1552 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1568 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1584 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1600 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1616 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1632 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1648 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1664 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1680 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1696 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1712 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1728 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1744 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1760 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1776 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1792 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 1808 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 1824 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1840 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1856 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1872 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1888 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1904 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1920 - image: "test.1.png" - } - Frame { - msec: 1936 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1952 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 1968 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 1984 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2000 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2016 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2032 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2048 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2064 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2080 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2096 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2112 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2128 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2144 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2160 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2176 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2192 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2208 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2224 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2240 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2256 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2272 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2288 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2304 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2320 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2336 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 2352 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 2368 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2384 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2400 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2416 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2432 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2448 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2464 - hash: "9157e592069482e801a091aa69758d26" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 2480 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2496 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2512 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2528 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2544 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2560 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2576 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2592 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2608 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2624 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2640 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2656 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2672 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2688 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2704 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2720 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2736 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2752 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2768 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2784 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2800 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2816 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2832 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2848 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2864 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2880 - image: "test.2.png" - } - Frame { - msec: 2896 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2912 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2928 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2944 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2960 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 2976 - hash: "9157e592069482e801a091aa69758d26" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 2992 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3008 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3024 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3040 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3056 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3072 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3088 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 3104 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3120 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3136 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3152 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3168 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3184 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3200 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3216 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3232 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3248 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3264 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3280 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3296 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3312 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3328 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3344 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3360 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3376 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3392 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3408 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3424 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3440 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3456 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3472 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3488 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3504 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3520 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Frame { - msec: 3536 - hash: "cd2aced96da9032ddd5e2cacf27d045d" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3552 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3568 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3584 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3600 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3616 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3632 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3648 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3664 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3680 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3696 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3712 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3728 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3744 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3760 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3776 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3792 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3808 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3824 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3840 - image: "test.3.png" - } - Frame { - msec: 3856 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3872 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3888 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3904 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3920 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3936 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3952 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3968 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 3984 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4000 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4016 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4032 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4048 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4064 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4080 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4096 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4112 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4128 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4144 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4160 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4176 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 4192 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4208 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4224 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4240 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4256 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4272 - hash: "9157e592069482e801a091aa69758d26" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 4288 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4304 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4320 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4336 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4352 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4368 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4384 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4400 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4416 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4432 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4448 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4464 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4480 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4496 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4512 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4528 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4544 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4560 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4576 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4592 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4608 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4624 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4640 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4656 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4672 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4688 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4704 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4720 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4736 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4752 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4768 - hash: "9157e592069482e801a091aa69758d26" - } - Frame { - msec: 4784 - hash: "9157e592069482e801a091aa69758d26" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 4800 - image: "test.4.png" - } - Frame { - msec: 4816 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4832 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4848 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4864 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4880 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4896 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 4912 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4928 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4944 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4960 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4976 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 4992 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5008 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5024 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5040 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5056 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5072 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5088 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5104 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5120 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5136 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5152 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5168 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5184 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5200 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5216 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5232 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5248 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5264 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5280 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5296 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5312 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5328 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5344 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5360 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5376 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5392 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5408 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5424 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5440 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5456 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5472 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5488 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5504 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5520 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5536 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5552 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5568 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5584 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5600 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5616 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5632 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5648 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5664 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5680 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5696 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5712 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5728 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5744 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5760 - image: "test.5.png" - } - Frame { - msec: 5776 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5792 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 5808 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5824 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5840 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5856 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5872 - hash: "0de58b2460574baf17912e90ba8a89b2" - } - Frame { - msec: 5888 - hash: "0de58b2460574baf17912e90ba8a89b2" - } -} diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.0.png deleted file mode 100644 index 6be7aef..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.png deleted file mode 100644 index 6be7aef..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml deleted file mode 100644 index 813665d..0000000 --- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test2.qml +++ /dev/null @@ -1,607 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 32 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 48 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 64 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 80 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 96 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 112 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 128 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 144 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 160 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 176 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 192 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 208 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 224 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 240 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 256 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 272 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 288 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 304 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 320 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 336 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 352 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 368 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 384 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 400 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 416 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 432 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 448 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 464 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 480 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 496 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 512 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 528 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 544 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 560 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 576 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 592 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 608 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 624 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 640 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 656 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 672 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 688 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 704 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 720 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 736 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 752 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 768 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 784 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 800 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 816 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 832 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 848 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 864 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 880 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 896 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 912 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 928 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 944 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 960 - image: "test2.0.png" - } - Frame { - msec: 976 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 992 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1008 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1024 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1040 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1056 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1072 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1088 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1104 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1120 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1136 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1152 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1168 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1184 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1200 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1216 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1232 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1248 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1264 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1280 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1296 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1312 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1328 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1344 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1360 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1376 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1392 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1408 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1424 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1440 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1456 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1472 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1488 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1504 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1520 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1536 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1552 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1568 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1584 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1600 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1616 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1632 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1648 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1664 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1680 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1696 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1712 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1728 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1744 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1760 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1776 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1792 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1808 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1824 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1840 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1856 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1872 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1888 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1904 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1920 - image: "test2.1.png" - } - Frame { - msec: 1936 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1952 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1968 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 1984 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2000 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2016 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2032 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2048 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2064 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2080 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2096 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2112 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2128 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2144 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2160 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2176 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2192 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2208 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2224 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2240 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2256 - hash: "529409797f67656145ea88544bb8cc9f" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 2272 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2288 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2304 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2320 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2336 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2352 - hash: "529409797f67656145ea88544bb8cc9f" - } - Frame { - msec: 2368 - hash: "529409797f67656145ea88544bb8cc9f" - } -} diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.0.png deleted file mode 100644 index 5f93c67..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.png deleted file mode 100644 index 3b4e0e6..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.png deleted file mode 100644 index 54a3934..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.png deleted file mode 100644 index 4f08fd2..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.png deleted file mode 100644 index 9aee1f8..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.png deleted file mode 100644 index 04eb05c..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.png deleted file mode 100644 index 54a3934..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.png deleted file mode 100644 index 3b4e0e6..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.png deleted file mode 100644 index 2df55df..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.png b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.png deleted file mode 100644 index 91816fd..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml deleted file mode 100644 index 0fba451..0000000 --- a/tests/auto/declarative/qmlvisual/focusscope/data-X11/test3.qml +++ /dev/null @@ -1,2879 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 32 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 48 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 64 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 80 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 96 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 112 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 128 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 144 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 160 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 176 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 192 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 208 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 224 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 240 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 256 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 272 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 288 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 304 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 320 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 336 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 352 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 368 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 384 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 400 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 416 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 432 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 448 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 464 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 480 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 496 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 512 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 528 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 544 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 560 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 576 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 592 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 608 - hash: "ed71dfbe146870d1a0869d60c35ff9d7" - } - Frame { - msec: 624 - hash: "ed71dfbe146870d1a0869d60c35ff9d7" - } - Frame { - msec: 640 - hash: "34796cef9feb92f7f0e2e8d837d87d34" - } - Frame { - msec: 656 - hash: "64fa8f195b57077aa03ca264fec9554a" - } - Frame { - msec: 672 - hash: "ae33318904415e937363787273ecb566" - } - Frame { - msec: 688 - hash: "67c3e1c8c728e7677a3554aadd9795c9" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 704 - hash: "1857db7aa9eefe429d50e5b2ad87064b" - } - Frame { - msec: 720 - hash: "507883a03bef0bc20755da1474731fdf" - } - Frame { - msec: 736 - hash: "dafe7464394460e04d482c1f7a1e9ad0" - } - Frame { - msec: 752 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 768 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 784 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 800 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 816 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 832 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 848 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 864 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 880 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 896 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 912 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 928 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 944 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 960 - image: "test3.0.png" - } - Frame { - msec: 976 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 992 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 1008 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 1024 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 1040 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 1056 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 1072 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 1088 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1104 - hash: "7fb8cb07b6bca30912706cec43984d92" - } - Frame { - msec: 1120 - hash: "7fb8cb07b6bca30912706cec43984d92" - } - Frame { - msec: 1136 - hash: "c1915978cda982f6062790b2a583211b" - } - Frame { - msec: 1152 - hash: "afdb50d740b3dc7be44021d826be4302" - } - Frame { - msec: 1168 - hash: "4682717b9375b4b02a70378ddca30885" - } - Frame { - msec: 1184 - hash: "aede0eebb3948a4a764e255b892b09be" - } - Frame { - msec: 1200 - hash: "b42a147daec14a3da2548fd4de3a9a44" - } - Frame { - msec: 1216 - hash: "2ff70f916f78fe3c199eb96ceb44ce4e" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1232 - hash: "707ac8e58d317b97113903b45a482f6b" - } - Frame { - msec: 1248 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1264 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1280 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1296 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1312 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1328 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1344 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1360 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1376 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1392 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1408 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1424 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1440 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1456 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1472 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1488 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1504 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 1520 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1536 - hash: "91525556fe23764f58b3a3f38a29cd76" - } - Frame { - msec: 1552 - hash: "91525556fe23764f58b3a3f38a29cd76" - } - Frame { - msec: 1568 - hash: "d1dc625bbf46fc51aaf47969ad27a8a4" - } - Frame { - msec: 1584 - hash: "7d868176c7a8363a79ef8b8f4da56867" - } - Frame { - msec: 1600 - hash: "d239e0b0e118d351680c6b4b2bc5d3b2" - } - Frame { - msec: 1616 - hash: "8f6d1640dbc655eb3b326c66fcb97d3c" - } - Frame { - msec: 1632 - hash: "d52b623b8449d71734f72c7bd661a1c4" - } - Frame { - msec: 1648 - hash: "f7c0c77f3b5ed71321edd6bc7b605512" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1664 - hash: "8b26397ff1a83baa894f82594a12a190" - } - Frame { - msec: 1680 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1696 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1712 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1728 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1744 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1760 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1776 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1792 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1808 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1824 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1840 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1856 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1872 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1888 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1904 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1920 - image: "test3.1.png" - } - Frame { - msec: 1936 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1952 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1968 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 1984 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 2000 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2016 - hash: "f63308a7cd48a8cb4d413d17120f5a26" - } - Frame { - msec: 2032 - hash: "f63308a7cd48a8cb4d413d17120f5a26" - } - Frame { - msec: 2048 - hash: "2e97db8ed93524dc197e76cc2d270999" - } - Frame { - msec: 2064 - hash: "2b135d90684c0f94b8219c4b835b6da9" - } - Frame { - msec: 2080 - hash: "c700a76932bb3bf72868b9e95d095db2" - } - Frame { - msec: 2096 - hash: "08136d3c3de44ddab23d2d136ba1f310" - } - Frame { - msec: 2112 - hash: "de701d641e004b61a3c0609556f52fe0" - } - Frame { - msec: 2128 - hash: "4f7acd87f4de119ad88a53d2c9881037" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2144 - hash: "deaf3c8a4680ef6f52cb4674a97e0767" - } - Frame { - msec: 2160 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2176 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2192 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2208 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2224 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2240 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2256 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2272 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2288 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2304 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2320 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2336 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2352 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2368 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2384 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2400 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2416 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2432 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2448 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2464 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2480 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2496 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 2512 - hash: "224ade5c942415100b5418a11d043611" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2528 - hash: "fe67b3a48a8a074377be64f619d5922a" - } - Frame { - msec: 2544 - hash: "fe67b3a48a8a074377be64f619d5922a" - } - Frame { - msec: 2560 - hash: "088691f4f46f7a8c9a3b8ea766d9a437" - } - Frame { - msec: 2576 - hash: "bd747ea04c3b36378374f8ea1031458f" - } - Frame { - msec: 2592 - hash: "2ebd0e3373eb75a3ad986e203952f78a" - } - Frame { - msec: 2608 - hash: "b4d89e4f3aef9f351facd13bd83f3022" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2624 - hash: "091de1bd1719e1fa6d914cf9708f4ac6" - } - Frame { - msec: 2640 - hash: "0097d8ed156cb0c78c48dfacc557cba8" - } - Frame { - msec: 2656 - hash: "faeb379e01283cb21ea695e96727918d" - } - Frame { - msec: 2672 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2688 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2704 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2720 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2736 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2752 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2768 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2784 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2800 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2816 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2832 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2848 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2864 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2880 - image: "test3.2.png" - } - Frame { - msec: 2896 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2912 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2928 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2944 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2960 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 2976 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2992 - hash: "b00a29d67edc26e75f5298b2836d4e47" - } - Frame { - msec: 3008 - hash: "b00a29d67edc26e75f5298b2836d4e47" - } - Frame { - msec: 3024 - hash: "6e47c87b5063877a609e8d23ddf2d314" - } - Frame { - msec: 3040 - hash: "06f147a69c3e903905376ef1229290bf" - } - Frame { - msec: 3056 - hash: "5f02ff1a1207f17efd224ccc800b0057" - } - Frame { - msec: 3072 - hash: "6c0860fdb216bb79fd2da4647792628d" - } - Frame { - msec: 3088 - hash: "eb579f67620adb762722428d44a1d841" - } - Frame { - msec: 3104 - hash: "c579017a82e34a471a95f8a116a20b9e" - } - Frame { - msec: 3120 - hash: "bb5c08ff104b230829579dfb8015bdcc" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3136 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3152 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3168 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3184 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3200 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3216 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3232 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3248 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3264 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3280 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3296 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3312 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3328 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3344 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3360 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3376 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3392 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3408 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3424 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3440 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3456 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3472 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 3488 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3504 - hash: "5aa664f268433f2724a1ab2cea1d6d25" - } - Frame { - msec: 3520 - hash: "5aa664f268433f2724a1ab2cea1d6d25" - } - Frame { - msec: 3536 - hash: "9e4854fd0c533efa75aec7d9a8bc41dd" - } - Frame { - msec: 3552 - hash: "c4eee4eca804007dca6e6d9379cbfb1b" - } - Frame { - msec: 3568 - hash: "c59774f00d54c0353b41202a39fc0dbd" - } - Frame { - msec: 3584 - hash: "910e6b5b05530c60874eee00df0d62cf" - } - Frame { - msec: 3600 - hash: "5b606a7a697c6d53fbe42e33333f96cc" - } - Frame { - msec: 3616 - hash: "e1fce42312e8a31d74add4a447dd3df9" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3632 - hash: "6250cb9ea51309922cf0a6647593bfee" - } - Frame { - msec: 3648 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3664 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3680 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3696 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3712 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3728 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3744 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3760 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3776 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3792 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3808 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3824 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3840 - image: "test3.3.png" - } - Frame { - msec: 3856 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3872 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3888 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3904 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3920 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3936 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3952 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3968 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 3984 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4000 - hash: "d6eecfb695deacae4bb2fe5adb2d5c3d" - } - Frame { - msec: 4016 - hash: "d6eecfb695deacae4bb2fe5adb2d5c3d" - } - Frame { - msec: 4032 - hash: "b48f481a8149c03139e29b619dbb3f3c" - } - Frame { - msec: 4048 - hash: "994ba7fc208bbf081d54384d82d0fc07" - } - Frame { - msec: 4064 - hash: "05d30293c12eb6a3e21cebd42bb1f383" - } - Frame { - msec: 4080 - hash: "f2b4140a5d26f241a27e2a3027785559" - } - Frame { - msec: 4096 - hash: "1189e519fd1611c5603e598fbcadca44" - } - Frame { - msec: 4112 - hash: "ee98893d95e55cb76966c0cfe29d237b" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4128 - hash: "9ff3010efeb8707c864def782405ad4c" - } - Frame { - msec: 4144 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4160 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4176 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4192 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4208 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4224 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4240 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4256 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4272 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4288 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4304 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4320 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4336 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4352 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4368 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4384 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4400 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4416 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4432 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4448 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4464 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4480 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4496 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4512 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4528 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4544 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4560 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4576 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4592 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4608 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4624 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4640 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4656 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4672 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4688 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4704 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4720 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4736 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4752 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4768 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4784 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4800 - image: "test3.4.png" - } - Frame { - msec: 4816 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4832 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4848 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4864 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4880 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4896 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4912 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4928 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4944 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4960 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4976 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 4992 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 5008 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 5024 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 5040 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 5056 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 5072 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 5088 - hash: "c842d544f87332bc133833e8966240ee" - } - Frame { - msec: 5104 - hash: "c842d544f87332bc133833e8966240ee" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5120 - hash: "a857238777462319fcedd4f359ce1a04" - } - Frame { - msec: 5136 - hash: "a857238777462319fcedd4f359ce1a04" - } - Frame { - msec: 5152 - hash: "d9248d1257bf0232dcdf29fca7536ad1" - } - Frame { - msec: 5168 - hash: "0405e029cc4b2fa80761c06fb8898b0d" - } - Frame { - msec: 5184 - hash: "a36fb7e32e6aafbb84b62ef56be3cf70" - } - Frame { - msec: 5200 - hash: "9846c73bbe57277bd36bbca1c489e644" - } - Frame { - msec: 5216 - hash: "8f4840715082c48d520ddb55501cf8eb" - } - Frame { - msec: 5232 - hash: "478fde3a6fd8cecc222b8c16743d231f" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5248 - hash: "b2bb760c93d26c6db21ce6beccd36b66" - } - Frame { - msec: 5264 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5280 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5296 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5312 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5328 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5344 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5360 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5376 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5392 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5408 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5424 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5440 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5456 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5472 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5488 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5504 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5520 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5536 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5552 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5568 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5584 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5600 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5616 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5632 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5648 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5664 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5680 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5696 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Frame { - msec: 5712 - hash: "1ef605e1a68ff993f4f971a85a6bee97" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5728 - hash: "4780d8094833831f27d1aff3e0f9689f" - } - Frame { - msec: 5744 - hash: "4780d8094833831f27d1aff3e0f9689f" - } - Frame { - msec: 5760 - image: "test3.5.png" - } - Frame { - msec: 5776 - hash: "93c8d7980de378a055b7ca824882ae4e" - } - Frame { - msec: 5792 - hash: "e0abe402f89c5d84e5a02f0e4bcbd5e3" - } - Frame { - msec: 5808 - hash: "067ca20bcfab459a28af7e8dc2830032" - } - Frame { - msec: 5824 - hash: "d27dc1a08c66cf5f4a84efe3be522ec3" - } - Frame { - msec: 5840 - hash: "639f7555adc7958e807c2e774694fe25" - } - Frame { - msec: 5856 - hash: "b55f5fcbc2284736695049b2cdc9c8ce" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5872 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 5888 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 5904 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 5920 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 5936 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 5952 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 5968 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 5984 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6000 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6016 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6032 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6048 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6064 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6080 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6096 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6112 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6128 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6144 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6160 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6176 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6192 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6208 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6224 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6240 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6256 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Frame { - msec: 6272 - hash: "f209867bbf74dbe0385655a522e322f1" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6288 - hash: "48910947dd160b33251c54ff45f6a0db" - } - Frame { - msec: 6304 - hash: "48910947dd160b33251c54ff45f6a0db" - } - Frame { - msec: 6320 - hash: "20b0f988a1517d67a0d3c78ae8af4e5a" - } - Frame { - msec: 6336 - hash: "355b5b161176c31bcbae198b1581f59b" - } - Frame { - msec: 6352 - hash: "19cbb853a93bd062a53d7908df54bfbd" - } - Frame { - msec: 6368 - hash: "13fbe723f288cffd09f0a86b71457161" - } - Frame { - msec: 6384 - hash: "0014ed3b1a868cf75bfffedb52674c5c" - } - Frame { - msec: 6400 - hash: "a1c444be02b90e69319096b8a508947d" - } - Frame { - msec: 6416 - hash: "b88a3f2f3290e4262757b1f5741cb5ce" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6432 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6448 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6464 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6480 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6496 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6512 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6528 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6544 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6560 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6576 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6592 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6608 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6624 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6640 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6656 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6672 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6688 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6704 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6720 - image: "test3.6.png" - } - Frame { - msec: 6736 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6752 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6768 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6784 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6800 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6816 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6832 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Frame { - msec: 6848 - hash: "dc708a762ba7f1120eb14105571943f8" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6864 - hash: "a44bb76233c69780c178dddd79cc1968" - } - Frame { - msec: 6880 - hash: "a44bb76233c69780c178dddd79cc1968" - } - Frame { - msec: 6896 - hash: "154b11fd0468aa18d1ef1895f2e2923c" - } - Frame { - msec: 6912 - hash: "fe7ecb02e63fbb7584405e7162f0ee21" - } - Frame { - msec: 6928 - hash: "90b6fea69d106c628a9c7ff23a97e6c2" - } - Frame { - msec: 6944 - hash: "3e233e837e24976d441b6cabc3b74098" - } - Frame { - msec: 6960 - hash: "7a490f7be5c4c0ae09421f884e9adadb" - } - Frame { - msec: 6976 - hash: "462d44603dd661ccf126c81197608056" - } - Frame { - msec: 6992 - hash: "0b7ca73497c37255bccad6787d690236" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7008 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7024 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7040 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7056 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7072 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7088 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7104 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7120 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7136 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7152 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7168 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7184 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7200 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7216 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7232 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7248 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7264 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7280 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7296 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7312 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7328 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7344 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7360 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7376 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7392 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7408 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7424 - hash: "224ade5c942415100b5418a11d043611" - } - Frame { - msec: 7440 - hash: "224ade5c942415100b5418a11d043611" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7456 - hash: "95ff2a535a13fcdded94229d53848f7c" - } - Frame { - msec: 7472 - hash: "95ff2a535a13fcdded94229d53848f7c" - } - Frame { - msec: 7488 - hash: "d2386e4137632f15aa5ba9dd1a138a67" - } - Frame { - msec: 7504 - hash: "9f2c40191c1a81f37543f5bfcb852bdf" - } - Frame { - msec: 7520 - hash: "5facdbcc9d7ab0adfcb2ca9d1812a3f5" - } - Frame { - msec: 7536 - hash: "7bbb08470e4f3eeabe710e0ea327c467" - } - Frame { - msec: 7552 - hash: "630abf60d09d3a685d79e6da627b3aa2" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7568 - hash: "d8aed706508814cdbd1ef0984f112b94" - } - Frame { - msec: 7584 - hash: "d191c2dc3e2edd05bfd649dcfa51029e" - } - Frame { - msec: 7600 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7616 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7632 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7648 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7664 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7680 - image: "test3.7.png" - } - Frame { - msec: 7696 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7712 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7728 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7744 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7760 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7776 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7792 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7808 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7824 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7840 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7856 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7872 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7888 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7904 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7920 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7936 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7952 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Frame { - msec: 7968 - hash: "7ee37281a3f5788305f779bdd33852e5" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7984 - hash: "fb386abfd73a3feb05b573d16ffa93f9" - } - Frame { - msec: 8000 - hash: "fb386abfd73a3feb05b573d16ffa93f9" - } - Frame { - msec: 8016 - hash: "fa1374155fc5427c72bd09ec5a315172" - } - Frame { - msec: 8032 - hash: "ee35a3edf91865e28b16b9fcab8b4c1c" - } - Frame { - msec: 8048 - hash: "10f2677f7c8efe9f64e401940dec3ef7" - } - Frame { - msec: 8064 - hash: "b2c53bb14a8a6643e69cad2bbb4aacf4" - } - Frame { - msec: 8080 - hash: "7b7c7d167aca55464d1874ed726ec646" - } - Frame { - msec: 8096 - hash: "19a828ca70133801f1f470f6e348857b" - } - Frame { - msec: 8112 - hash: "bc829873ea3cf8ca8484d990d4b80aa2" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8128 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8144 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8160 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8176 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8192 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8208 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8224 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8240 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8256 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8272 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8288 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8304 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8320 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8336 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8352 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8368 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8384 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8400 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8416 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8432 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8448 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8464 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8480 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Frame { - msec: 8496 - hash: "201b90bc27073e945bb00c85501f4dc8" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8512 - hash: "d0d487fd66bcf4177188d4862bd74bc0" - } - Frame { - msec: 8528 - hash: "d0d487fd66bcf4177188d4862bd74bc0" - } - Frame { - msec: 8544 - hash: "4a4c2e49e4852748916a4d68710e4ae6" - } - Frame { - msec: 8560 - hash: "0135092d8a296b7121495cc3994a0f9d" - } - Frame { - msec: 8576 - hash: "7e004aae70236568d635ba929e085b2b" - } - Frame { - msec: 8592 - hash: "3e6a4f60a57515a6bfe4d803c7c22da8" - } - Frame { - msec: 8608 - hash: "142b866861f539837b0bdabaf48028e7" - } - Frame { - msec: 8624 - hash: "32a4757602c923366566d9005c78f6cf" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8640 - image: "test3.8.png" - } - Frame { - msec: 8656 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8672 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8688 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8704 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8720 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8736 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8752 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8768 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8784 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8800 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8816 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8832 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8848 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8864 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8880 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8896 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8912 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8928 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8944 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8960 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8976 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 8992 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 9008 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 9024 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 9040 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Frame { - msec: 9056 - hash: "358a3fbfa70526a40f2179cb2fd100d4" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 9072 - hash: "b1dc330f31b064f1e3ff4e913773cde8" - } - Frame { - msec: 9088 - hash: "b1dc330f31b064f1e3ff4e913773cde8" - } - Frame { - msec: 9104 - hash: "a0419dede71451f36c93960c8ef8c00c" - } - Frame { - msec: 9120 - hash: "b8141758fc93aa1b286fd60f91e6fa7e" - } - Frame { - msec: 9136 - hash: "8b0d786f239c545be3f51622c336f1e1" - } - Frame { - msec: 9152 - hash: "25ec52efac83de4f8cade8f257b93b8e" - } - Frame { - msec: 9168 - hash: "5a1476841b9aaa0e85c397c0447be352" - } - Frame { - msec: 9184 - hash: "d648b0911e6ab78e53121fde8b66b50b" - } - Frame { - msec: 9200 - hash: "f552863ff4b76286d03240409c0a928b" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 9216 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9232 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9248 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9264 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9280 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9296 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9312 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9328 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9344 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9360 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9376 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9392 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9408 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9424 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9440 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9456 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9472 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9488 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9504 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9520 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9536 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9552 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9568 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9584 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9600 - image: "test3.9.png" - } - Frame { - msec: 9616 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9632 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9648 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9664 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9680 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9696 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9712 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9728 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9744 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9760 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9776 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9792 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9808 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9824 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9840 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9856 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9872 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9888 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9904 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9920 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9936 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9952 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9968 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 9984 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10000 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10016 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10032 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10048 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10064 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10080 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10096 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10112 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10128 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10144 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10160 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10176 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10192 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10208 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10224 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10240 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10256 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10272 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10288 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10304 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10320 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10336 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10352 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10368 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 10384 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10400 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10416 - hash: "f3b4cab7975190f756c923f16ce4c298" - } - Frame { - msec: 10432 - hash: "f3b4cab7975190f756c923f16ce4c298" - } -} diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.0.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.0.png index 67b99e0..986a164 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test.0.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test.0.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.1.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.1.png index 67b99e0..986a164 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test.1.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test.1.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.2.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.2.png index 69f0366..fd28a93 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test.2.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test.2.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.3.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.3.png deleted file mode 100644 index afe0bd9..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.4.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.4.png deleted file mode 100644 index afe0bd9..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.5.png b/tests/auto/declarative/qmlvisual/focusscope/data/test.5.png deleted file mode 100644 index afe0bd9..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test.qml b/tests/auto/declarative/qmlvisual/focusscope/data/test.qml index 460ba1a..da99cfd 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/data/test.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/data/test.qml @@ -6,239 +6,287 @@ VisualTest { } Frame { msec: 16 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 32 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 48 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 64 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 80 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 96 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 112 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 128 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 144 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 160 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 176 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 192 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 208 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 224 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 240 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 256 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 272 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 288 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 304 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 320 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 336 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 352 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 368 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 384 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 400 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 416 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 432 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 448 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 464 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 480 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 496 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 512 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 528 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 544 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 560 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 576 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" } Frame { msec: 592 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "7d929804a37a70ffd487e95a3be8ea5f" + } + Key { + type: 6 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 608 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 624 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 640 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 656 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 672 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 688 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" + } + Key { + type: 7 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 704 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 720 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 736 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 752 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 768 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 784 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 800 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 816 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 832 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 848 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 864 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 880 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 896 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 912 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 928 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 944 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 960 @@ -246,263 +294,303 @@ VisualTest { } Frame { msec: 976 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 992 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1008 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1024 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1040 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1056 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1072 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1088 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1104 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1120 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1136 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1152 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1168 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1184 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1200 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1216 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1232 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 1248 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Key { type: 6 key: 16777236 - modifiers: 536870912 - text: "1d" + modifiers: 0 + text: "" autorep: false count: 1 } Frame { msec: 1264 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1280 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1296 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1312 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1328 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" + } + Frame { + msec: 1344 + hash: "f369109744055d30eadf2832a028a104" } Key { type: 7 key: 16777236 - modifiers: 536870912 - text: "1d" + modifiers: 0 + text: "" autorep: false count: 1 } Frame { - msec: 1344 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { msec: 1360 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1376 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1392 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1408 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1424 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1440 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1456 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1472 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1488 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1504 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1520 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1536 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1552 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1568 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1584 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1600 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1616 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1632 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1648 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1664 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1680 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1696 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1712 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" } Frame { msec: 1728 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "0914d1f71cdaf1f1a37b95ea41c57d4f" + } + Key { + type: 6 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1744 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1760 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1776 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1792 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1808 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "f369109744055d30eadf2832a028a104" } Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" + type: 7 + key: 16777235 + modifiers: 0 + text: "" autorep: false count: 1 } Frame { msec: 1824 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1840 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1856 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1872 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1888 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1904 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1920 @@ -510,263 +598,287 @@ VisualTest { } Frame { msec: 1936 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 1952 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" + } + Frame { + msec: 1968 + hash: "f369109744055d30eadf2832a028a104" } Key { - type: 7 + type: 6 key: 16777234 - modifiers: 536870912 - text: "1c" + modifiers: 0 + text: "" autorep: false count: 1 } Frame { - msec: 1968 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { msec: 1984 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2000 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2016 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2032 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2048 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2064 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2080 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2096 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2112 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2128 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2144 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2160 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2176 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2192 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2208 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2224 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2240 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2256 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2272 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2288 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2304 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2320 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2336 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" } Frame { msec: 2352 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "f369109744055d30eadf2832a028a104" + } + Frame { + msec: 2368 + hash: "f369109744055d30eadf2832a028a104" } Key { type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" + key: 16777234 + modifiers: 0 + text: "" autorep: false count: 1 } Frame { - msec: 2368 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { msec: 2384 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2400 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2416 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2432 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2448 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2464 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Key { type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" + key: 16777234 + modifiers: 0 + text: "" autorep: false count: 1 } Frame { msec: 2480 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2496 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2512 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2528 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2544 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2560 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2576 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2592 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2608 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2624 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2640 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2656 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2672 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2688 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2704 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2720 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2736 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2752 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2768 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2784 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2800 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2816 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2832 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2848 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2864 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2880 @@ -774,826 +886,38 @@ VisualTest { } Frame { msec: 2896 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2912 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2928 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2944 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2960 - hash: "7e4814e27214ecbeb55992e319a88102" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2976 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 2992 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 3008 - hash: "e7722f02692fbae81b9ec78547e1e4e9" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } Frame { msec: 3024 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3040 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3056 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3072 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3088 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 3104 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3120 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3136 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3152 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3168 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3184 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3200 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3216 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3232 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3248 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3264 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3280 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3296 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3312 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3328 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3344 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3360 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3376 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3392 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3408 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3424 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3440 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3456 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3472 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3488 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3504 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3520 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Frame { - msec: 3536 - hash: "e7722f02692fbae81b9ec78547e1e4e9" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3552 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3568 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3584 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3600 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3616 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3632 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3648 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3664 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3680 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3696 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3712 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3728 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3744 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3760 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3776 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3792 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3808 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3824 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3840 - image: "test.3.png" - } - Frame { - msec: 3856 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3872 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3888 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3904 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3920 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3936 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3952 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3968 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 3984 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4000 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4016 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4032 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4048 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4064 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4080 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4096 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4112 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4128 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4144 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4160 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4176 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 4192 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4208 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4224 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4240 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4256 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4272 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 4288 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4304 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4320 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4336 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4352 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4368 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4384 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4400 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4416 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4432 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4448 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4464 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4480 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4496 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4512 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4528 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4544 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4560 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4576 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4592 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4608 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4624 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4640 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4656 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4672 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4688 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4704 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4720 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4736 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4752 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4768 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Frame { - msec: 4784 - hash: "7e4814e27214ecbeb55992e319a88102" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 4800 - image: "test.4.png" - } - Frame { - msec: 4816 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4832 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4848 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4864 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4880 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4896 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 4912 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4928 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4944 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4960 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4976 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 4992 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5008 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5024 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5040 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5056 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5072 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5088 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5104 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5120 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5136 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5152 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5168 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5184 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5200 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5216 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5232 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5248 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5264 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5280 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5296 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5312 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5328 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5344 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5360 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5376 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5392 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5408 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5424 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5440 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5456 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5472 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5488 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5504 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5520 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5536 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5552 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5568 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5584 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5600 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5616 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5632 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5648 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5664 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5680 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5696 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5712 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5728 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5744 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5760 - image: "test.5.png" - } - Frame { - msec: 5776 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5792 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 5808 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5824 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5840 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5856 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5872 - hash: "6f85c2226e6e408f4699762f687b83e1" - } - Frame { - msec: 5888 - hash: "6f85c2226e6e408f4699762f687b83e1" + hash: "94675f9c9afb6834b91a69fd0ce35a22" } } diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png b/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png index 555a968..22d7496 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png b/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png deleted file mode 100644 index 555a968..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test2.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml index 03ece10..ff977ac 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/data/test2.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 32 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 48 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 64 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 80 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 96 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 112 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 128 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 144 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 160 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 176 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 192 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 208 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 224 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 240 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 256 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 272 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 288 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 304 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 320 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 336 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 352 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 368 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 384 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 400 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 416 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 432 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 448 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 464 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 480 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 496 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 512 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 528 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 544 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 560 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 576 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 592 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 608 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 624 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 640 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 656 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 672 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 688 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 704 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 720 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 736 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 752 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 768 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 784 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 800 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 816 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 832 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 848 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 864 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 880 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 896 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 912 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 928 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 944 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 960 @@ -246,362 +246,78 @@ VisualTest { } Frame { msec: 976 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 992 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1008 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1024 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1040 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1056 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1072 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1088 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1104 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1120 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1136 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1152 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1168 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1184 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1200 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1216 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1232 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1248 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } Frame { msec: 1264 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1280 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1296 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1312 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1328 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1344 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1360 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1376 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1392 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1408 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1424 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1440 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1456 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1472 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1488 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1504 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1520 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1536 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1552 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1568 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1584 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1600 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1616 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1632 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1648 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1664 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1680 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1696 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1712 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1728 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1744 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1760 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1776 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1792 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1808 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1824 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1840 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1856 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1872 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1888 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1904 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1920 - image: "test2.1.png" - } - Frame { - msec: 1936 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1952 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1968 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 1984 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2000 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2016 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2032 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2048 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2064 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2080 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2096 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2112 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2128 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2144 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2160 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2176 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2192 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2208 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2224 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2240 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2256 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 2272 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2288 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2304 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2320 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2336 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2352 - hash: "bb4131579c66dc948f2e27e236deb4ab" - } - Frame { - msec: 2368 - hash: "bb4131579c66dc948f2e27e236deb4ab" + hash: "4823f4520db0c1f64d887f172b3efa17" } } diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png index 374acf5..baac346 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test3.0.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png index b75cb10..25d3c66 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test3.1.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png index 9b2f919..fc90552 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test3.2.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png index bf63032..2f0519e 100644 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png and b/tests/auto/declarative/qmlvisual/focusscope/data/test3.3.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png deleted file mode 100644 index 6981a06..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.5.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.5.png deleted file mode 100644 index 5856325..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.6.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.6.png deleted file mode 100644 index 9b2f919..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.7.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.7.png deleted file mode 100644 index b75cb10..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.8.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.8.png deleted file mode 100644 index 374acf5..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.9.png b/tests/auto/declarative/qmlvisual/focusscope/data/test3.9.png deleted file mode 100644 index 11a08bd..0000000 Binary files a/tests/auto/declarative/qmlvisual/focusscope/data/test3.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/data/test3.qml index dd48e39..686fc8d 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/data/test3.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/data/test3.qml @@ -6,255 +6,287 @@ VisualTest { } Frame { msec: 16 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 32 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 48 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 64 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 80 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 96 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 112 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 128 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 144 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 160 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 176 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 192 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 208 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 224 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 240 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 256 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 272 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 288 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 304 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 320 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 336 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 352 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 368 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 384 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 400 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 416 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 432 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 448 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 464 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 480 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 496 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 512 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 528 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 544 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "60101929d88be9177f4988573c35dcdb" } Frame { msec: 560 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "519bbcffcafe96253923994ce7cae971" } Frame { msec: 576 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "e46fd44935f37eadee7520f17ad7cf01" } Frame { msec: 592 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "2a0ed4cb9940ff82d4a56dc3dc94f333" + } + Frame { + msec: 608 + hash: "a97ff19bb6493b7a026c9c549aafff04" } Key { - type: 6 + type: 7 key: 16777236 - modifiers: 536870912 - text: "1d" + modifiers: 0 + text: "" autorep: false count: 1 } Frame { - msec: 608 - hash: "c114718c158f107e8a7d06bf49d30855" - } - Frame { msec: 624 - hash: "c71bf3c6ef7addc3c1f55e3f92c001ac" + hash: "52fe44fff5c72e1585e000e73086c2e9" } Frame { msec: 640 - hash: "b075c33ed606041dfb57a03f92cf5574" + hash: "76f62e0619ed15894d7fb6fe9e1a7700" } Frame { msec: 656 - hash: "1933a060fc0b889082df94054a2d3c7e" + hash: "aceb3ae38213d097bd0f50d64779fbda" } Frame { msec: 672 - hash: "cc4133e796a242493538131c789c392c" + hash: "c62f8846e1076adcd7c9a8bc1164c0a8" } Frame { msec: 688 - hash: "cbc16ad8bcb8dcf73ae101ca4899adac" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 + hash: "c62f8846e1076adcd7c9a8bc1164c0a8" } Frame { msec: 704 - hash: "1a5e008ef5640ad85a19b307244a36f7" + hash: "c62f8846e1076adcd7c9a8bc1164c0a8" } Frame { msec: 720 - hash: "6a0c9d0f3ac068d65d590c844dae4ebb" + hash: "c62f8846e1076adcd7c9a8bc1164c0a8" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 736 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "9f3ab4856c51ee635b8dbce4778053f0" } Frame { msec: 752 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "4fe79ffc2bb078c8cb8c3cdbb57d3c5e" } Frame { msec: 768 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "9caefb6edbfeadacd54a9f4e06e40ddc" } Frame { msec: 784 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "a8dc7e314b3bd2fb8d16bcf68bfbc7e8" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 800 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "342e75af68d345574c551ff65ac2f2de" } Frame { msec: 816 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "a26927b8cdfa8813c5e0661d154bb36b" } Frame { msec: 832 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "0214f5055daa4a761d2e791d06744ac5" } Frame { msec: 848 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "d2d4296a49de27da45381fa250fb1f38" } Frame { msec: 864 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "a375e3df0b00754fa4208aecbf1b218d" } Frame { msec: 880 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "a375e3df0b00754fa4208aecbf1b218d" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 896 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "0cd7a1cfb7fafdb406b5e3a612dd61b7" } Frame { msec: 912 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "0315c0011c75f254337cb5e557dc6dad" } Frame { msec: 928 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "2633ea851ec228dc1d5149ef65b1c910" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 944 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "cd8870a81860a9926f4d5580dabf3479" } Frame { msec: 960 @@ -262,271 +294,311 @@ VisualTest { } Frame { msec: 976 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "419ec77dceb052c41e072b9513124794" } Frame { msec: 992 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "68fd88f83bf707fbc3ae29840bfb2110" } Frame { msec: 1008 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "bfb514b9a9c57d6b78149b81f4adb177" } Frame { msec: 1024 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "bfb514b9a9c57d6b78149b81f4adb177" } Frame { msec: 1040 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "bfb514b9a9c57d6b78149b81f4adb177" } Frame { msec: 1056 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "bfb514b9a9c57d6b78149b81f4adb177" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1072 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "e0707db3c9da95ab02be8dec08d1eea9" } Frame { msec: 1088 - hash: "216a02433edb100e6ff3db4944f6b061" + hash: "78d405f63a5ed781ce36ed4844621a26" } Key { - type: 6 + type: 7 key: 16777236 - modifiers: 536870912 - text: "1d" + modifiers: 0 + text: "" autorep: false count: 1 } Frame { msec: 1104 - hash: "ac2f6e2f5f379ad8717aa3754f2aab80" + hash: "d7dc78c2a3cb4a059322b20622dfa0ed" } Frame { msec: 1120 - hash: "e896c5b5a4fd121e5c25aba0a17c11f3" + hash: "c7bfc322da4a3e112324bd024d271dda" } Frame { msec: 1136 - hash: "1d1228cf0b205e46a969a0016245bb9e" + hash: "a94d4a6f15404f10cad31ad5337f0f10" } Frame { msec: 1152 - hash: "d07b1d53655e549c503223fddfa62038" + hash: "49f03ed7afac886a45268aef990cb176" } Frame { msec: 1168 - hash: "d774614f13d1a19eff3c451c4abce7e5" + hash: "9fbacc43c6a796f81af102e95d05c17e" } Frame { msec: 1184 - hash: "0e8445283c961a41c22ede2f26ab0d0c" + hash: "ec3231a8ba136d2edd5265c51cd82d4f" } Frame { msec: 1200 - hash: "f85ced79a9d521b70b093d43d1335914" + hash: "070bec590f2379198933cf68db678821" } Frame { msec: 1216 - hash: "3f70531768847686f202336827ed5c51" + hash: "070bec590f2379198933cf68db678821" } Key { - type: 7 + type: 6 key: 16777236 - modifiers: 536870912 - text: "1d" + modifiers: 0 + text: "" autorep: false count: 1 } Frame { msec: 1232 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "b9bb4eee4ea2fe26178ece2be67111e3" } Frame { msec: 1248 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "06fe10dc99a8f28a64942bd76bdd401b" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1264 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "63f4e972f1b8f3273170436c673120ca" } Frame { msec: 1280 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "25a83b96f733add828557775d4aabe21" } Frame { msec: 1296 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "73de2ed5df81559c7a24d9a5b73a2ce9" } Frame { msec: 1312 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "43bdf31d652394c4d2b881ca6ad326ed" } Frame { msec: 1328 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "f5f564fcb39a7e007c30150c1a54283c" } Frame { msec: 1344 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1360 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1376 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1392 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1408 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1424 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1440 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1456 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1472 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 1488 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "270321ae5fe7a0e457d2897480e5bbbc" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1504 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "a56bcb200f3ed037bfea052df2910902" } Frame { msec: 1520 - hash: "30c5f9005238542c83b2d994cb61de16" + hash: "2b3561807f9681f6b875e7f4fcd33223" + } + Frame { + msec: 1536 + hash: "2cee5a4a22f72058a61cd9cb9d39e818" } Key { - type: 6 + type: 7 key: 16777236 - modifiers: 536870912 - text: "1d" + modifiers: 0 + text: "" autorep: false count: 1 } Frame { - msec: 1536 - hash: "c59557a62fb22756ecae00bf36589f19" - } - Frame { msec: 1552 - hash: "c2938aac121e121eb138b2cdc485a23c" + hash: "cd1f3f9a2bcd0efd4ba252454c51e261" } Frame { msec: 1568 - hash: "aa582bd07789a0ce000bb014b4924969" + hash: "b2d8e52a59d1141cfaf6b22ba9aa74cf" } Frame { msec: 1584 - hash: "59d7a7fed20a11ecb12de08c77f0f303" + hash: "f218a82081c0552d2caccaa840decfbb" } Frame { msec: 1600 - hash: "9a1d7649e44e2c2436855b92abbae030" + hash: "ae20ae49364bddbe3dcd9e09c36b7423" } Frame { msec: 1616 - hash: "e46c47a221da37bbdffcdf671e84774b" + hash: "63d8d2d948e3cab3a50ef4db61ca4c48" } Frame { msec: 1632 - hash: "85ff7ef61ef08dc97065b0536f9f8766" + hash: "f29a9aa2e469e3fb4bedfe11523212c9" } Frame { msec: 1648 - hash: "1159f274e5c2947875484d04a3ac6694" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 + hash: "f29a9aa2e469e3fb4bedfe11523212c9" } Frame { msec: 1664 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "f29a9aa2e469e3fb4bedfe11523212c9" } Frame { msec: 1680 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "f29a9aa2e469e3fb4bedfe11523212c9" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1696 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "c46539fd3ef1e01519b43855c0831213" } Frame { msec: 1712 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "40a4666320efaa62904d390add745bb3" } Frame { msec: 1728 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "a490a1904e909f3e2ade5ee8a7e9dbf3" } Frame { msec: 1744 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "2e67ac8bbc37731e590156348563bb98" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1760 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "daab7eba2dbf88b920b1cc61aa114435" } Frame { msec: 1776 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "5e6611b6024be9f48e6356bb46fe91db" } Frame { msec: 1792 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "6329448571671f77102e14f3f05d3a66" } Frame { msec: 1808 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "2a40d32c1c81fb85dab745a05cca500b" } Frame { msec: 1824 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "6579f0cfe1fd762818d69ded26e47c77" } Frame { msec: 1840 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "6579f0cfe1fd762818d69ded26e47c77" } Frame { msec: 1856 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "6579f0cfe1fd762818d69ded26e47c77" } Frame { msec: 1872 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "6579f0cfe1fd762818d69ded26e47c77" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1888 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "899d92a8106e85ff1131c07af3971879" } Frame { msec: 1904 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "8566d59024d7dcf410d4d87e234f477c" } Frame { msec: 1920 @@ -534,271 +606,295 @@ VisualTest { } Frame { msec: 1936 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "ba9b93e9762667c4a7c123933720fb06" } Frame { msec: 1952 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "cffb82799861d551cc208b7fe2922ea2" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1968 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "efe3ec54dfd82b06d6cb8d7813030894" } Frame { msec: 1984 - hash: "113dd40f9b5c9869ad04a00dda9078c6" + hash: "80934efe77a8e1d8460b55c0d5831a17" } Frame { msec: 2000 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 + hash: "5954c3e6ebe78c50776cfa48c152cf46" } Frame { msec: 2016 - hash: "26e5e7612374c7a4f7ac26a284c735b4" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2032 - hash: "03c63a8bab380ebcd02f2bf2f588df85" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2048 - hash: "1a7c4738de4f1123c7e639c935095476" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2064 - hash: "8362cb8a253dcb2e9ef7fb070579d639" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2080 - hash: "8fae548ad1f2e16738c14636b905efef" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2096 - hash: "05fca78fea63817204b2303495baaec7" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2112 - hash: "5bf7b04177db667f23f1bc4f0066bc44" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2128 - hash: "aa10d0614604f0563d4fc458b7bb9260" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2144 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2160 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2176 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2192 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2208 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2224 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2240 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2256 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2272 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2288 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2304 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2320 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2336 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2352 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2368 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2384 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2400 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2416 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2432 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2448 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" } Frame { msec: 2464 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "588140c8a668842ec06e424692b57918" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2480 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "4ba7e4ed21d496abc7ab4651afb5880b" } Frame { msec: 2496 - hash: "0461d0e31648d2c155bee0145094c153" + hash: "497188bf0ef98eb246399f025b9259bc" } Frame { msec: 2512 - hash: "0461d0e31648d2c155bee0145094c153" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 + hash: "173049c273e4ea2f63428c0838f029ef" } Frame { msec: 2528 - hash: "1823a5c00778550c6b46416e6a2b730f" + hash: "c8199565d52abb5bdf64b31c2f965038" } Frame { msec: 2544 - hash: "7ca64f71eee9d3a926335de026be5fe2" + hash: "995ca28ee06c376a8527992b1396374a" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2560 - hash: "5f9e44b8374a490793b479440ce3b701" + hash: "62b4b4b4e35cb3594b827a3f0488e016" } Frame { msec: 2576 - hash: "b0969884a9654d87da9941fb9eb4c99a" + hash: "5cd79f2fff8e35c2ce6167d3a3999bc2" } Frame { msec: 2592 - hash: "aeadf244a67b3c9e5c119b52aa0f15a0" + hash: "3c64ff196b49488d48214562849deec7" } Frame { msec: 2608 - hash: "2d990e5ae8d3660079bdea7f2b5245a7" + hash: "6579f0cfe1fd762818d69ded26e47c77" + } + Frame { + msec: 2624 + hash: "6579f0cfe1fd762818d69ded26e47c77" } Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" + type: 6 + key: 16777234 + modifiers: 0 + text: "" autorep: false count: 1 } Frame { - msec: 2624 - hash: "5998faffa17f9ffbf1cb39cdc09cdd54" - } - Frame { msec: 2640 - hash: "bf8089df5d863f627cd44294f322d796" + hash: "3ae9139845494acafc2212843271e80c" } Frame { msec: 2656 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "9bd81bd575c63bbedbcb19452e52f9aa" } Frame { msec: 2672 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "8a8fd3ec0ac02d3e8d37ade92e5b0b28" } Frame { msec: 2688 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "3da79a037c7c8fca1a133c65766cd7a4" } Frame { msec: 2704 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "31f24ec970184bf253ce0a80cca8c15d" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2720 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "8e41287dd7f3d17107336f79ea4a57b5" } Frame { msec: 2736 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "0eced41494be06a4a2d11aee076c0eab" } Frame { msec: 2752 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "f29a9aa2e469e3fb4bedfe11523212c9" } Frame { msec: 2768 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "f29a9aa2e469e3fb4bedfe11523212c9" } Frame { msec: 2784 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "f29a9aa2e469e3fb4bedfe11523212c9" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2800 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "2161ebbc0b1a8326d778657ded7993a8" } Frame { msec: 2816 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "65bdbbcea1cf5629e1c04ff09bd2b867" } Frame { msec: 2832 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "4cfe120b55285efb9484f696146fa297" } Frame { msec: 2848 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "d50ded95cf2418ef2ab3c4d7dd32babe" } Frame { msec: 2864 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "722e3342d833809e2e6c6ecb5774fb86" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2880 @@ -806,271 +902,319 @@ VisualTest { } Frame { msec: 2896 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "0193889d59dc40150eab584dd1665b5e" } Frame { msec: 2912 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "cd39f2cee2cf7507203a340ceaa961f5" } Frame { msec: 2928 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "270321ae5fe7a0e457d2897480e5bbbc" } Frame { msec: 2944 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "270321ae5fe7a0e457d2897480e5bbbc" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2960 - hash: "f75305426b87e1cdc325ae6668367be9" + hash: "d19642853fc07a54711b6afbca4453fd" } Frame { msec: 2976 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 + hash: "70db31594995fa6c05347ebc5aedd063" } Frame { msec: 2992 - hash: "d707cb6e2587eecba275d1e7ceb9d020" + hash: "8d8ab3076baae893037a1b16880db6b6" } Frame { msec: 3008 - hash: "fddd144d4d2e475330ff87f4e6febe35" + hash: "32c05a581d854a828f2049c5aa588afd" } Frame { msec: 3024 - hash: "06115e65296d1a77ab956cd3984303ee" + hash: "7f8f111aa6e8e802beca3b7fd2a28007" } Frame { msec: 3040 - hash: "6881ec448625fdc23f1241bd60362460" + hash: "c0ae8434516e2f77d78279c8e37a9f0a" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 3056 - hash: "d94fdfd178377328e3b840c32f774958" + hash: "7cc66b7432d2c73258e4c7910870d166" } Frame { msec: 3072 - hash: "d2cba0b3aac8002aa2de51f7b1442985" + hash: "070bec590f2379198933cf68db678821" } Frame { msec: 3088 - hash: "c0ea81cddf6b1f5b4b4157dade6b8ca0" + hash: "070bec590f2379198933cf68db678821" } Frame { msec: 3104 - hash: "964a80740cc7ba474d5d10b76cca1b14" + hash: "070bec590f2379198933cf68db678821" } Frame { msec: 3120 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "070bec590f2379198933cf68db678821" + } + Frame { + msec: 3136 + hash: "070bec590f2379198933cf68db678821" } Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" + type: 6 + key: 16777234 + modifiers: 0 + text: "" autorep: false count: 1 } Frame { - msec: 3136 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { msec: 3152 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "f45969e94df0c5ea7c153e6952479ec8" } Frame { msec: 3168 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "55f4733f50b90d723c88ef74d66ee8a9" } Frame { msec: 3184 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "980ea06fe8405ce29514cbc752a581c2" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 3200 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "0a5a6d62d13876c9562253645381702a" } Frame { msec: 3216 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "0ade580a20e10d9887d6bc544025770e" } Frame { msec: 3232 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "707524f7b0fad3879d41c8ff5d339b87" } Frame { msec: 3248 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "1786e49beb751b4b8cf4492f63b3db77" } Frame { msec: 3264 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "a44ca7861ccd844eb284ab310751351a" } Frame { msec: 3280 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "bfb514b9a9c57d6b78149b81f4adb177" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 3296 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "e36d2476c9954e6a4372ded19efd06a1" } Frame { msec: 3312 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "c324cc45624346f32a776a87ec5fcc7e" } Frame { msec: 3328 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "fcf1629f58a73492f1afa74672013602" } Frame { msec: 3344 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "853e27fd37b764a852a2c4fabbaae6bc" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 3360 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "a75d77b15211080e12b397c3cee93568" } Frame { msec: 3376 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "936fb8c2c0909a77a9bdc654d91d13ad" } Frame { msec: 3392 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "f11dde44c028dbd299bc6733218969f7" } Frame { msec: 3408 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "a375e3df0b00754fa4208aecbf1b218d" } Frame { msec: 3424 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "a375e3df0b00754fa4208aecbf1b218d" } Frame { msec: 3440 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "a375e3df0b00754fa4208aecbf1b218d" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 3456 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "3ce1288d66836b6224f471903454be37" } Frame { msec: 3472 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 3488 - hash: "3e44d7064e55c510401b5008a06d9b82" + hash: "9bff5f42f23b504ee013df4834ed884c" } Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" + type: 7 + key: 16777234 + modifiers: 0 + text: "" autorep: false count: 1 } Frame { + msec: 3488 + hash: "523df7cc8d991695722b521282824627" + } + Frame { msec: 3504 - hash: "56634199c96e5c4588c2954f0595fcaa" + hash: "5c16f8efbab40bcf8016bd7334eb99fa" } Frame { msec: 3520 - hash: "a51221b77045e51cba2b0913546961cb" + hash: "bee74f34ee101f0fef0967801498de75" } Frame { msec: 3536 - hash: "9910569a15164882056802e5ecfaef42" + hash: "a08ee211d870bc3f97f1e698cd887908" } Frame { msec: 3552 - hash: "17080817e0b23212828d2cee23eff98f" + hash: "89ac21176fd4ce1bbbd0b7dd6904c12c" } Frame { msec: 3568 - hash: "791fee9758645fe21fe52918e5435f7d" + hash: "95608d850a3c5cfbded1aafb33885bad" } Frame { msec: 3584 - hash: "e0fcea2889a4825075322524025a4bdf" - } - Frame { - msec: 3600 - hash: "825f58093f328182fa32b3cbc573101f" - } - Frame { - msec: 3616 - hash: "550972282584bd52108728290bd4aa5e" + hash: "c62f8846e1076adcd7c9a8bc1164c0a8" } Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" + type: 6 + key: 16777234 + modifiers: 0 + text: "" autorep: false count: 1 } Frame { + msec: 3600 + hash: "54705722d344bfbe829211019f2865ba" + } + Frame { + msec: 3616 + hash: "d63b2ce9e16583671a5e6d266393b11c" + } + Frame { msec: 3632 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "3979df5d0aa1c3610e1d3562e34385c6" } Frame { msec: 3648 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "782d14c3a1baf9a3017ec5b514492860" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 3664 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "0d219c97e1278474b74ed16f29fae1a1" } Frame { msec: 3680 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "3df0e87dd3d5f50b9c4bb3db8d73d421" } Frame { msec: 3696 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "1c5e5da874ae95548431677246c80734" } Frame { msec: 3712 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3728 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3744 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3760 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3776 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3792 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3808 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3824 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3840 @@ -1078,1802 +1222,106 @@ VisualTest { } Frame { msec: 3856 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3872 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3888 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3904 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3920 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3936 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3952 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3968 - hash: "0cf213791ef1263f9dfc867df96e8211" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 3984 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4000 - hash: "a2386a0135e8ffd9f2ac12345ede3553" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4016 - hash: "9550cdc0032bc3ea0a611f2584f43cca" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4032 - hash: "3f39909102a04f0e41a97b10dde4425a" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4048 - hash: "535d56a4d450cf0222f94573a88bbf80" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4064 - hash: "c4b782cfb9399689b0cbfc2a97305984" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4080 - hash: "23604b04198d53e0ba4a0955d8bcf124" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4096 - hash: "a440962d680f70eb47af38a91390b8c0" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4112 - hash: "da4b079f00248a073ce49f749ff0cc77" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4128 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4144 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4160 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4176 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4192 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4208 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4224 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4240 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } Frame { msec: 4256 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4272 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4288 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4304 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4320 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4336 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4352 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4368 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4384 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4400 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4416 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4432 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4448 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4464 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4480 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4496 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4512 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4528 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4544 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4560 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4576 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4592 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4608 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4624 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4640 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4656 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4672 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4688 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4704 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4720 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4736 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4752 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4768 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4784 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4800 - image: "test3.4.png" - } - Frame { - msec: 4816 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4832 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4848 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4864 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4880 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4896 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4912 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4928 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4944 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4960 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4976 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 4992 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 5008 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 5024 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 5040 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 5056 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 5072 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 5088 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Frame { - msec: 5104 - hash: "861a8438a60e8a937d96f6b11fa1e3b3" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5120 - hash: "58be5253b74ac1cecf08714e670e30af" - } - Frame { - msec: 5136 - hash: "a8e15f6e28a67941730f9cfe8ea7f0ff" - } - Frame { - msec: 5152 - hash: "f1bfd2e2cd3a3ff08ae36e785d33e626" - } - Frame { - msec: 5168 - hash: "b61fd5c58ddaf806e72d77bed92e91f3" - } - Frame { - msec: 5184 - hash: "f192f6b779fa6bdfd4bc9c8671dd3147" - } - Frame { - msec: 5200 - hash: "1cf034cfdfe3cafa832e28950c90d67b" - } - Frame { - msec: 5216 - hash: "b0d2223f7f2c302784654f03cb3a5c1c" - } - Frame { - msec: 5232 - hash: "19d089ac37fd42c1be99facd38a954e3" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5248 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5264 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5280 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5296 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5312 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5328 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5344 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5360 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5376 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5392 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5408 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5424 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5440 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5456 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5472 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5488 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5504 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5520 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5536 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5552 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5568 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5584 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5600 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5616 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5632 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5648 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5664 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5680 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5696 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Frame { - msec: 5712 - hash: "0cf213791ef1263f9dfc867df96e8211" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5728 - hash: "51db47388acad98d18a8a2aaca279dba" - } - Frame { - msec: 5744 - hash: "c83747a4356fa12593020452dbf43fe8" - } - Frame { - msec: 5760 - image: "test3.5.png" - } - Frame { - msec: 5776 - hash: "39d476722de92703d0a2259b5c62554e" - } - Frame { - msec: 5792 - hash: "3f01e465470c3d5ab58b52f3e1517374" - } - Frame { - msec: 5808 - hash: "63570753ba8c5f1525bf4cee38e8cad8" - } - Frame { - msec: 5824 - hash: "31beab91ef4cadcf0b379b32786530ac" - } - Frame { - msec: 5840 - hash: "46cd2e22eb4ef988752e2b3441bdd450" - } - Frame { - msec: 5856 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 5872 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 5888 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 5904 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 5920 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 5936 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 5952 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 5968 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 5984 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6000 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6016 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6032 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6048 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6064 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6080 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6096 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6112 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6128 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6144 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6160 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6176 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6192 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6208 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6224 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6240 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6256 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Frame { - msec: 6272 - hash: "3e44d7064e55c510401b5008a06d9b82" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6288 - hash: "78c4aaf2427e0aa9b6d11ddf95df55f7" - } - Frame { - msec: 6304 - hash: "d4859df2de6afa90c1997b1b4d6448ab" - } - Frame { - msec: 6320 - hash: "f885e6a8cc09d06985a83f60e29a0a34" - } - Frame { - msec: 6336 - hash: "41f27dbf80b0bc00498962162a5fe9db" - } - Frame { - msec: 6352 - hash: "41800797032deeed5ccc87375b4093cb" - } - Frame { - msec: 6368 - hash: "253276d23d8a0f195155361a27403496" - } - Frame { - msec: 6384 - hash: "274bf40aacababde8fde71abf065d1aa" - } - Frame { - msec: 6400 - hash: "86071a6486d35d3c10f318ab6bac7577" - } - Frame { - msec: 6416 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6432 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6448 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6464 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6480 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6496 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6512 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6528 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6544 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6560 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6576 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6592 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6608 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6624 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6640 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6656 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6672 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6688 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6704 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6720 - image: "test3.6.png" - } - Frame { - msec: 6736 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6752 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6768 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6784 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6800 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6816 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6832 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Frame { - msec: 6848 - hash: "f75305426b87e1cdc325ae6668367be9" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 6864 - hash: "eea514e956369c55f9fe9bfc5b8bbda4" - } - Frame { - msec: 6880 - hash: "b28436abb5ce17310b63ed96a7034000" - } - Frame { - msec: 6896 - hash: "40c656f467200785a951dd8f98cf28f5" - } - Frame { - msec: 6912 - hash: "38c6c6b29c9a7f0eba87a538a336c338" - } - Frame { - msec: 6928 - hash: "b3f939577616f8ded1e11ee6e6dce882" - } - Frame { - msec: 6944 - hash: "d72b00208712f039a5d7a06fbfacd4bd" - } - Frame { - msec: 6960 - hash: "c7a079a37f6bd7a8da706e6ba5d048ee" - } - Frame { - msec: 6976 - hash: "561cdf098bdc35fc852fbe8fff2471e2" - } - Frame { - msec: 6992 - hash: "0461d0e31648d2c155bee0145094c153" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7008 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7024 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7040 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7056 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7072 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7088 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7104 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7120 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7136 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7152 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7168 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7184 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7200 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7216 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7232 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7248 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7264 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7280 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7296 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7312 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7328 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7344 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7360 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7376 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7392 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7408 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7424 - hash: "0461d0e31648d2c155bee0145094c153" - } - Frame { - msec: 7440 - hash: "0461d0e31648d2c155bee0145094c153" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7456 - hash: "096530df53ed21214cf93381ac0d23ea" - } - Frame { - msec: 7472 - hash: "36e7cee0725fb16c5d7e08875a3b88f7" - } - Frame { - msec: 7488 - hash: "a2b68c7e9e4ef04c1429190d01a3288b" - } - Frame { - msec: 7504 - hash: "6ee23f5d2c0ddc21499c8685ae46df64" - } - Frame { - msec: 7520 - hash: "dc423d32154882b99b7bde596697c83a" - } - Frame { - msec: 7536 - hash: "e82852d1d2a21f67029870601b00b124" - } - Frame { - msec: 7552 - hash: "7cd2773c33d7f34feb3b1e4752f63753" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7568 - hash: "2371f0ddf1b0ddcdb36f24e72b62d3a5" - } - Frame { - msec: 7584 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7600 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7616 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7632 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7648 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7664 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7680 - image: "test3.7.png" - } - Frame { - msec: 7696 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7712 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7728 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7744 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7760 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7776 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7792 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7808 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7824 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7840 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7856 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7872 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7888 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7904 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7920 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7936 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7952 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Frame { - msec: 7968 - hash: "113dd40f9b5c9869ad04a00dda9078c6" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 7984 - hash: "93fd3abe0b99ed76d880f6f059636335" - } - Frame { - msec: 8000 - hash: "a273ec355c79968013c70aca1b2d5737" - } - Frame { - msec: 8016 - hash: "6b2df83c0645530ca007cde136838725" - } - Frame { - msec: 8032 - hash: "47d5ed89f7e9c89df33bab14ca967f77" - } - Frame { - msec: 8048 - hash: "c777e0d1a1f03e7a1bc16483f98c0622" - } - Frame { - msec: 8064 - hash: "ac7e693d7dbc8e8ff2318cb611b68b76" - } - Frame { - msec: 8080 - hash: "593e9711ae94a5b4f49544e0cf26d188" - } - Frame { - msec: 8096 - hash: "afce51158cb19dd6ae8c72ce19964251" - } - Frame { - msec: 8112 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8128 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8144 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8160 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8176 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8192 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8208 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8224 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8240 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8256 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8272 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8288 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8304 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8320 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8336 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8352 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8368 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8384 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8400 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8416 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8432 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8448 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8464 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8480 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Frame { - msec: 8496 - hash: "30c5f9005238542c83b2d994cb61de16" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8512 - hash: "136c689aca9aa0cf957035137a926653" - } - Frame { - msec: 8528 - hash: "b7418e46bca4bc8c953c15b03c23ec89" - } - Frame { - msec: 8544 - hash: "e99575fe130e741f13329704303b76ca" - } - Frame { - msec: 8560 - hash: "a2b7d528f9c145c4db0845bc76b3571f" - } - Frame { - msec: 8576 - hash: "77f8beccd0134b8991ddb2ac92d64ecb" - } - Frame { - msec: 8592 - hash: "fc359bc56852093020084af44987746a" - } - Frame { - msec: 8608 - hash: "9f3479a702bc79062fff916678e974f1" - } - Frame { - msec: 8624 - hash: "55c8c91ff26671f9f3049f1e1aaf5958" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 8640 - image: "test3.8.png" - } - Frame { - msec: 8656 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8672 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8688 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8704 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8720 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8736 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8752 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8768 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8784 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8800 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8816 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8832 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8848 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8864 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8880 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8896 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8912 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8928 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8944 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8960 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8976 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 8992 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 9008 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 9024 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 9040 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Frame { - msec: 9056 - hash: "216a02433edb100e6ff3db4944f6b061" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 9072 - hash: "367ee34ab6a6cb0197e064db85638be7" - } - Frame { - msec: 9088 - hash: "c61db7f2c0402a63efe779bec816a7db" - } - Frame { - msec: 9104 - hash: "29d4d2679a502a1cb8a21807c43153c2" - } - Frame { - msec: 9120 - hash: "3f531d4111efbbac256d4281db1fdeba" - } - Frame { - msec: 9136 - hash: "9f343d8b4dc12cc7ab5ae1ff08067baf" - } - Frame { - msec: 9152 - hash: "eb29b7d6ef2b5507425b2c30ddb58fa8" - } - Frame { - msec: 9168 - hash: "883c0d35567deb6de9125441da89a1fe" - } - Frame { - msec: 9184 - hash: "7c25e95ea2b38288b5ba5737108ef5d1" - } - Frame { - msec: 9200 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 9216 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9232 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9248 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9264 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9280 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9296 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9312 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9328 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9344 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9360 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9376 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9392 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9408 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9424 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9440 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9456 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9472 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9488 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9504 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9520 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9536 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9552 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9568 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9584 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9600 - image: "test3.9.png" - } - Frame { - msec: 9616 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9632 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9648 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9664 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9680 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9696 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9712 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9728 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9744 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9760 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9776 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9792 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9808 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9824 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9840 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9856 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9872 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9888 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9904 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9920 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9936 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9952 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9968 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 9984 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10000 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10016 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10032 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10048 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10064 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10080 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10096 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10112 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10128 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10144 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10160 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10176 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10192 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10208 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10224 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10240 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10256 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10272 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10288 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10304 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10320 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10336 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10352 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10368 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 10384 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10400 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10416 - hash: "f192b84337784a6d31c309af7e32b5f7" - } - Frame { - msec: 10432 - hash: "f192b84337784a6d31c309af7e32b5f7" + hash: "4a753a2b626eaf8336cd5e5d04d05d5b" } } diff --git a/tests/auto/declarative/qmlvisual/focusscope/test.qml b/tests/auto/declarative/qmlvisual/focusscope/test.qml index 6b2ee25..7342e35 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/test.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/test.qml @@ -1,9 +1,16 @@ import QtQuick 1.0 +/* + Blue border indicates scoped focus + Black border indicates NOT scoped focus + Red box indicates active focus + Use arrow keys to navigate + Press "9" to print currently focused item +*/ Rectangle { color: "white" - width: 800 - height: 600 + width: 480 + height: 480 Keys.onDigit9Pressed: console.log("Error - Root") @@ -55,8 +62,6 @@ Rectangle { KeyNavigation.down: item3 } - Text { x:100; y:170; text: "Blue border indicates scoped focus\nBlack border indicates NOT scoped focus\nRed box indicates active focus\nUse arrow keys to navigate\nPress \"9\" to print currently focused item" } - Rectangle { id: item3 x: 10; y: 300 diff --git a/tests/auto/declarative/qmlvisual/focusscope/test2.qml b/tests/auto/declarative/qmlvisual/focusscope/test2.qml index 4df75cf..072eddb 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/test2.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/test2.qml @@ -2,35 +2,33 @@ import QtQuick 1.0 Rectangle { color: "white" - width: 800 - height: 600 - - Text { text: "All five rectangles should be red" } + width: 400 + height: 50 + //All five rectangles should be red FocusScope { - y: 100 focus: true - Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } + Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" } FocusScope { - y: 100 + x: 80 focus: true - Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } + Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" } FocusScope { - y: 100 + x: 80 focus: true - Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } + Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" } FocusScope { - y: 100 + x: 80 focus: true - Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } + Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" } FocusScope { - y: 100 + x: 80 focus: true - Rectangle { width: 50; height: 50; color: parent.activeFocus?"red":"blue" } + Rectangle { width: 40; height: 40; color: parent.activeFocus?"red":"blue" } } } } diff --git a/tests/auto/declarative/qmlvisual/focusscope/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/test3.qml index 184763a..01fb580 100644 --- a/tests/auto/declarative/qmlvisual/focusscope/test3.qml +++ b/tests/auto/declarative/qmlvisual/focusscope/test3.qml @@ -1,9 +1,14 @@ import QtQuick 1.0 +/* + Currently selected element should be red + Pressing "9" should print the number of the currently selected item + Be sure to scroll all the way to the right, pause, and then all the way to the left +*/ Rectangle { color: "white" - width: 800 - height: 600 + width: 400 + height: 100 ListModel { id: model @@ -45,8 +50,4 @@ Rectangle { } - Text { - y: 100; x: 50 - text: "Currently selected element should be red\nPressing \"9\" should print the number of the currently selected item\nBe sure to scroll all the way to the right, pause, and then all the way to the left." - } } -- cgit v0.12 From 8c183dc88d4ba0c14e29433294a6885f29ffc36c Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Thu, 28 Oct 2010 11:35:53 +0200 Subject: Use QVarLengthArray to store accumulator data. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Merge-request: 2499 Reviewed-by: Samuel Rødal --- src/plugins/graphicssystems/meego/dithering.cpp | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/meego/dithering.cpp b/src/plugins/graphicssystems/meego/dithering.cpp index ba6b99b..b50826c 100644 --- a/src/plugins/graphicssystems/meego/dithering.cpp +++ b/src/plugins/graphicssystems/meego/dithering.cpp @@ -54,6 +54,7 @@ #include #include #include +#include // Gets a component (red = 1, green = 2...) from a RGBA data structure. // data is unsigned char. stride is the number of bytes per line. @@ -95,7 +96,11 @@ unsigned short* convertRGB32_to_RGB565(const unsigned char *in, int width, int h int x, y, c; // Pixel we're processing. c is component number (0, 1, 2 for r, b, b) short component[3]; // Stores the new components (r, g, b) for pixel produced during conversion short diff; // The difference between the converted value and the original one. To be accumulated. - short accumulator[3][width * 2]; // Three acumulators for r, g, b. Each accumulator is two lines. + QVarLengthArray accumulatorData(3 * width * 2); // Data for three acumulators for r, g, b. Each accumulator is two lines. + short *accumulator[3]; // Helper for accessing the accumulator on a per-channel basis more easily. + accumulator[0] = accumulatorData.data(); + accumulator[1] = accumulatorData.data() + width; + accumulator[2] = accumulatorData.data() + (width * 2); // Produce the conversion lookup tables. for (i = 0; i < 256; i++) { @@ -195,7 +200,12 @@ unsigned short* convertARGB32_to_RGBA4444(const unsigned char *in, int width, in int x, y, c; // Pixel we're processing. c is component number (0, 1, 2, 3 for r, b, b, a) short component[4]; // Stores the new components (r, g, b, a) for pixel produced during conversion short diff; // The difference between the converted value and the original one. To be accumulated. - short accumulator[4][width * 2]; // Four acumulators for r, g, b, a. Each accumulator is two lines. + QVarLengthArray accumulatorData(4 * width * 2); // Data for three acumulators for r, g, b. Each accumulator is two lines. + short *accumulator[4]; // Helper for accessing the accumulator on a per-channel basis more easily. + accumulator[0] = accumulatorData.data(); + accumulator[1] = accumulatorData.data() + width; + accumulator[2] = accumulatorData.data() + (width * 2); + accumulator[3] = accumulatorData.data() + (width * 3); // Produce the conversion lookup tables. for (i = 0; i < 256; i++) { -- cgit v0.12 From 28bd0c6568aefa552c5e37a4e2ef98969c68d0b4 Mon Sep 17 00:00:00 2001 From: Michael Dominic K Date: Thu, 28 Oct 2010 11:35:54 +0200 Subject: Do not support QImage::Format_ARGB32 in meego gfx for egl images. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It was a bug/mistake to support that. Merge-request: 2499 Reviewed-by: Samuel Rødal --- src/plugins/graphicssystems/meego/qmeegographicssystem.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp index 96fbd6c..a633e2f 100644 --- a/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp +++ b/src/plugins/graphicssystems/meego/qmeegographicssystem.cpp @@ -151,9 +151,8 @@ void QMeeGoGraphicsSystem::setTranslucent(bool translucent) QPixmapData *QMeeGoGraphicsSystem::pixmapDataFromEGLSharedImage(Qt::HANDLE handle, const QImage &softImage) { if (softImage.format() != QImage::Format_ARGB32_Premultiplied && - softImage.format() != QImage::Format_ARGB32 && softImage.format() != QImage::Format_RGB32) { - qFatal("For egl shared images, the soft image has to be ARGB32, ARGB32_Premultiplied or RGB32"); + qFatal("For egl shared images, the soft image has to be ARGB32_Premultiplied or RGB32"); return NULL; } -- cgit v0.12 From 47c12e2a4cf135faf5ac58d54d8fe87068b35d3d Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Thu, 28 Oct 2010 11:27:02 +0300 Subject: Fallback to vgWritePixels in drawPixmap. Use vgWritePixels, if possible, in case where VGImage for QPixmap can't be allocated due to low GPU memory situation. This patch also renames some VG paint engine internal functions to clarify their purpose. Task-number: QT-3589 Reviewed-by: Jason Barron --- src/openvg/qpaintengine_vg.cpp | 86 +++++++++++++++++++++++++++++++++++++----- src/openvg/qpaintengine_vg_p.h | 1 + src/openvg/qpixmapdata_vg.cpp | 45 ++++++++++++++-------- src/openvg/qpixmapdata_vg_p.h | 6 ++- src/openvg/qvg_symbian.cpp | 3 +- 5 files changed, 113 insertions(+), 28 deletions(-) diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index ce9d11a..9df32d9 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -55,6 +55,8 @@ #include #include #include +#include +#include #include #include #include @@ -3060,6 +3062,21 @@ void qt_vg_drawVGImageStencil vgDrawImage(vgImg); } +bool QVGPaintEngine::canVgWritePixels(const QImage &image) const +{ + Q_D(const QVGPaintEngine); + // vgWritePixels ignores masking, blending and xforms so we can only use it if + // ALL of the following conditions are true: + // - It is a simple translate, or a scale of -1 on the y-axis (inverted) + // - The opacity is totally opaque + // - The composition mode is "source" OR "source over" provided the image is opaque + return ( d->imageTransform.type() <= QTransform::TxScale + && d->imageTransform.m11() == 1.0 && qAbs(d->imageTransform.m22()) == 1.0) + && d->opacity == 1.0f + && (d->blendMode == VG_BLEND_SRC || (d->blendMode == VG_BLEND_SRC_OVER && + !image.hasAlphaChannel())); +} + void QVGPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) { QPixmapData *pd = pm.pixmapData(); @@ -3074,9 +3091,18 @@ void QVGPaintEngine::drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF drawVGImage(d, r, vgpd->toVGImage(), vgpd->size(), sr); else drawVGImage(d, r, vgpd->toVGImage(d->opacity), vgpd->size(), sr); - } else { - drawImage(r, *(pd->buffer()), sr, Qt::AutoColor); + + if(!vgpd->failedToAlloc) + return; + + // try to reallocate next time if reasonable small pixmap + QSize screenSize = QApplication::desktop()->screenGeometry().size(); + if (pm.size().width() <= screenSize.width() + && pm.size().height() <= screenSize.height()) + vgpd->failedToAlloc = false; } + + drawImage(r, *(pd->buffer()), sr, Qt::AutoColor); } void QVGPaintEngine::drawPixmap(const QPointF &pos, const QPixmap &pm) @@ -3093,9 +3119,18 @@ void QVGPaintEngine::drawPixmap(const QPointF &pos, const QPixmap &pm) drawVGImage(d, pos, vgpd->toVGImage()); else drawVGImage(d, pos, vgpd->toVGImage(d->opacity)); - } else { - drawImage(pos, *(pd->buffer())); + + if (!vgpd->failedToAlloc) + return; + + // try to reallocate next time if reasonable small pixmap + QSize screenSize = QApplication::desktop()->screenGeometry().size(); + if (pm.size().width() <= screenSize.width() + && pm.size().height() <= screenSize.height()) + vgpd->failedToAlloc = false; } + + drawImage(pos, *(pd->buffer())); } void QVGPaintEngine::drawImage @@ -3116,9 +3151,31 @@ void QVGPaintEngine::drawImage QRectF(QPointF(0, 0), sr.size())); } } else { - // Monochrome images need to use the vgChildImage() path. - vgImg = toVGImage(image, flags); - drawVGImage(d, r, vgImg, image.size(), sr); + if (canVgWritePixels(image) && (r.size() == sr.size()) && !flags) { + // Optimization for straight blits, no blending + int x = sr.x(); + int y = sr.y(); + int bpp = image.depth() >> 3; // bytes + int offset = 0; + int bpl = image.bytesPerLine(); + if (d->imageTransform.m22() < 0) { + // inverted + offset = ((y + sr.height()) * bpl) - ((image.width() - x) * bpp); + bpl = -bpl; + } else { + offset = (y * bpl) + (x * bpp); + } + const uchar *bits = image.constBits() + offset; + + QPointF mapped = d->imageTransform.map(r.topLeft()); + vgWritePixels(bits, bpl, qt_vg_image_to_vg_format(image.format()), + mapped.x(), mapped.y() - sr.height(), r.width(), r.height()); + return; + } else { + // Monochrome images need to use the vgChildImage() path. + vgImg = toVGImage(image, flags); + drawVGImage(d, r, vgImg, image.size(), sr); + } } vgDestroyImage(vgImg); } @@ -3127,10 +3184,21 @@ void QVGPaintEngine::drawImage(const QPointF &pos, const QImage &image) { Q_D(QVGPaintEngine); VGImage vgImg; - if (d->simpleTransform || d->opacity == 1.0f) + if (canVgWritePixels(image)) { + // Optimization for straight blits, no blending + bool inverted = (d->imageTransform.m22() < 0); + const uchar *bits = inverted ? image.constBits() + image.byteCount() : image.constBits(); + int bpl = inverted ? -image.bytesPerLine() : image.bytesPerLine(); + + QPointF mapped = d->imageTransform.map(pos); + vgWritePixels(bits, bpl, qt_vg_image_to_vg_format(image.format()), + mapped.x(), mapped.y() - image.height(), image.width(), image.height()); + return; + } else if (d->simpleTransform || d->opacity == 1.0f) { vgImg = toVGImage(image); - else + } else { vgImg = toVGImageWithOpacity(image, d->opacity); + } drawVGImage(d, pos, vgImg); vgDestroyImage(vgImg); } diff --git a/src/openvg/qpaintengine_vg_p.h b/src/openvg/qpaintengine_vg_p.h index 75cf053..dc98137 100644 --- a/src/openvg/qpaintengine_vg_p.h +++ b/src/openvg/qpaintengine_vg_p.h @@ -170,6 +170,7 @@ private: bool isDefaultClipRegion(const QRegion& region); bool isDefaultClipRect(const QRect& rect); bool clearRect(const QRectF &rect, const QColor &color); + bool canVgWritePixels(const QImage &image) const; }; QT_END_NAMESPACE diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp index e8ec333..724d06d 100644 --- a/src/openvg/qpixmapdata_vg.cpp +++ b/src/openvg/qpixmapdata_vg.cpp @@ -65,6 +65,7 @@ QVGPixmapData::QVGPixmapData(PixelType type) recreate = true; inImagePool = false; inLRU = false; + failedToAlloc = false; #if !defined(QT_NO_EGL) context = 0; qt_vg_register_pixmap(this); @@ -74,13 +75,13 @@ QVGPixmapData::QVGPixmapData(PixelType type) QVGPixmapData::~QVGPixmapData() { - destroyImageAndContext(); + destroyVGImageAndVGContext(); #if !defined(QT_NO_EGL) qt_vg_unregister_pixmap(this); #endif } -void QVGPixmapData::destroyImages() +void QVGPixmapData::destroyVGImages() { if (inImagePool) { QVGImagePool *pool = QVGImagePool::instance(); @@ -99,23 +100,23 @@ void QVGPixmapData::destroyImages() inImagePool = false; } -void QVGPixmapData::destroyImageAndContext() +void QVGPixmapData::destroyVGImageAndVGContext() { if (vgImage != VG_INVALID_HANDLE) { // We need to have a context current to destroy the image. #if !defined(QT_NO_EGL) if (context->isCurrent()) { - destroyImages(); + destroyVGImages(); } else { // We don't currently have a widget surface active, but we // need a surface to make the context current. So use the // shared pbuffer surface instead. context->makeCurrent(qt_vg_shared_surface()); - destroyImages(); + destroyVGImages(); context->lazyDoneCurrent(); } #else - destroyImages(); + destroyVGImages(); #endif } #if !defined(QT_NO_EGL) @@ -155,6 +156,9 @@ void QVGPixmapData::resize(int wid, int ht) void QVGPixmapData::fromImage (const QImage &image, Qt::ImageConversionFlags flags) { + if(image.isNull()) + return; + QImage img = image; createPixmapForImage(img, flags, false); } @@ -203,10 +207,19 @@ void QVGPixmapData::createPixmapForImage(QImage &image, Qt::ImageConversionFlags else resize(image.width(), image.height()); - if (inPlace && image.data_ptr()->convertInPlace(sourceFormat(), flags)) + QImage::Format format = sourceFormat(); + int d = image.depth(); + if (d == 1 || d == 16 || d == 24 || (d == 32 && !image.hasAlphaChannel())) + format = QImage::Format_RGB32; + else if (!(flags & Qt::NoOpaqueDetection) && const_cast(image).data_ptr()->checkForAlphaPixels()) + format = sourceFormat(); + else + format = QImage::Format_RGB32; + + if (inPlace && image.data_ptr()->convertInPlace(format, flags)) source = image; else - source = image.convertToFormat(sourceFormat()); + source = image.convertToFormat(format); recreate = true; } @@ -278,7 +291,7 @@ QPaintEngine* QVGPixmapData::paintEngine() const VGImage QVGPixmapData::toVGImage() { - if (!isValid()) + if (!isValid() || failedToAlloc) return VG_INVALID_HANDLE; #if !defined(QT_NO_EGL) @@ -288,17 +301,19 @@ VGImage QVGPixmapData::toVGImage() #endif if (recreate && prevSize != QSize(w, h)) - destroyImages(); + destroyVGImages(); else if (recreate) cachedOpacity = -1.0f; // Force opacity image to be refreshed later. if (vgImage == VG_INVALID_HANDLE) { vgImage = QVGImagePool::instance()->createImageForPixmap - (VG_sARGB_8888_PRE, w, h, VG_IMAGE_QUALITY_FASTER, this); + (qt_vg_image_to_vg_format(source.format()), w, h, VG_IMAGE_QUALITY_FASTER, this); // Bail out if we run out of GPU memory - try again next time. - if (vgImage == VG_INVALID_HANDLE) + if (vgImage == VG_INVALID_HANDLE) { + failedToAlloc = true; return VG_INVALID_HANDLE; + } inImagePool = true; } else if (inImagePool) { @@ -309,7 +324,7 @@ VGImage QVGPixmapData::toVGImage() vgImageSubData (vgImage, source.constBits(), source.bytesPerLine(), - VG_sARGB_8888_PRE, 0, 0, w, h); + qt_vg_image_to_vg_format(source.format()), 0, 0, w, h); } recreate = false; @@ -378,7 +393,7 @@ void QVGPixmapData::hibernate() return; forceToImage(); - destroyImageAndContext(); + destroyVGImageAndVGContext(); } void QVGPixmapData::reclaimImages() @@ -386,7 +401,7 @@ void QVGPixmapData::reclaimImages() if (!inImagePool) return; forceToImage(); - destroyImages(); + destroyVGImages(); } Q_DECL_IMPORT extern int qt_defaultDpiX(); diff --git a/src/openvg/qpixmapdata_vg_p.h b/src/openvg/qpixmapdata_vg_p.h index 114d545..b8f01eb 100644 --- a/src/openvg/qpixmapdata_vg_p.h +++ b/src/openvg/qpixmapdata_vg_p.h @@ -143,7 +143,9 @@ private: QVGPixmapData *nextLRU; QVGPixmapData *prevLRU; bool inLRU; + bool failedToAlloc; friend class QVGImagePool; + friend class QVGPaintEngine; #if !defined(QT_NO_EGL) QVGPixmapData *next; @@ -169,8 +171,8 @@ protected: void forceToImage(); QImage::Format sourceFormat() const; - void destroyImageAndContext(); - void destroyImages(); + void destroyVGImageAndVGContext(); + void destroyVGImages(); }; QT_END_NAMESPACE diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index 41b35fc..b6bf858 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -144,7 +144,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) if (type == QPixmapData::SgImage && pixmap) { #if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL) RSgImage *sgImage = reinterpret_cast(pixmap); - destroyImages(); + destroyVGImages(); prevSize = QSize(); VGImage vgImage = sgImageToVGImage(context, *sgImage); @@ -164,7 +164,6 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) CFbsBitmap *bitmap = reinterpret_cast(pixmap); bool deleteSourceBitmap = false; - #ifdef Q_SYMBIAN_HAS_EXTENDED_BITMAP_TYPE // Rasterize extended bitmaps -- cgit v0.12 From 55497edc83121317078d62083a835f2b794b37e4 Mon Sep 17 00:00:00 2001 From: Titta Heikkala Date: Thu, 28 Oct 2010 10:31:41 +0300 Subject: Fixed crash with QClipboard in Symbian^3 QClipboard now returns copied data outside TRAP to prevent TRAP levels to get crossed. Task-number: QTBUG-14790 Reviewed-by: Janne Koskinen Merge-request: 897 Reviewed-by: Janne Koskinen --- src/gui/kernel/qclipboard_s60.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/gui/kernel/qclipboard_s60.cpp b/src/gui/kernel/qclipboard_s60.cpp index c9b1d23..73280b2 100644 --- a/src/gui/kernel/qclipboard_s60.cpp +++ b/src/gui/kernel/qclipboard_s60.cpp @@ -257,18 +257,14 @@ const QMimeData* QClipboard::mimeData(Mode mode) const } } CleanupStack::PopAndDestroy(cb); - if (dataExists) { - return d->source(); - } - else { - return 0; - } - }); if (err != KErrNone){ qDebug()<< "clipboard is empty/err: " << err; } + if (dataExists) { + return d->source(); + } } return 0; } -- cgit v0.12 From 746f4b50e9c13c720162f3bcc8795b7ef772fbba Mon Sep 17 00:00:00 2001 From: Kent Hansen Date: Thu, 28 Oct 2010 12:27:49 +0200 Subject: QScriptValue::construct(): Don't crash if function throws non-Object If an exception occurs, we should ignore the result of JSC::construct() and return the exception value, even if the exception is not an object. This makes the behavior match the documentation: "Calling construct() can cause an exception to occur in the script engine; in that case, construct() returns the value that was thrown". Task-number: QTBUG-14801 Reviewed-by: Jedrzej Nowacki --- src/script/api/qscriptvalue.cpp | 13 ++++++++----- tests/auto/qscriptvalue/tst_qscriptvalue.cpp | 25 +++++++++++++++++++++++++ tests/auto/qscriptvalue/tst_qscriptvalue.h | 1 + 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/script/api/qscriptvalue.cpp b/src/script/api/qscriptvalue.cpp index f6390bb..f494106 100644 --- a/src/script/api/qscriptvalue.cpp +++ b/src/script/api/qscriptvalue.cpp @@ -1736,10 +1736,12 @@ QScriptValue QScriptValue::construct(const QScriptValueList &args) JSC::JSValue savedException; QScriptEnginePrivate::saveException(exec, &savedException); - JSC::JSObject *result = JSC::construct(exec, callee, constructType, constructData, jscArgs); + JSC::JSValue result; + JSC::JSObject *newObject = JSC::construct(exec, callee, constructType, constructData, jscArgs); if (exec->hadException()) { - result = JSC::asObject(exec->exception()); + result = exec->exception(); } else { + result = newObject; QScriptEnginePrivate::restoreException(exec, savedException); } return d->engine->scriptValueFromJSCValue(result); @@ -1796,11 +1798,12 @@ QScriptValue QScriptValue::construct(const QScriptValue &arguments) JSC::JSValue savedException; QScriptEnginePrivate::saveException(exec, &savedException); - JSC::JSObject *result = JSC::construct(exec, callee, constructType, constructData, applyArgs); + JSC::JSValue result; + JSC::JSObject *newObject = JSC::construct(exec, callee, constructType, constructData, applyArgs); if (exec->hadException()) { - if (exec->exception().isObject()) - result = JSC::asObject(exec->exception()); + result = exec->exception(); } else { + result = newObject; QScriptEnginePrivate::restoreException(exec, savedException); } return d->engine->scriptValueFromJSCValue(result); diff --git a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp index 83a3388..639df36 100644 --- a/tests/auto/qscriptvalue/tst_qscriptvalue.cpp +++ b/tests/auto/qscriptvalue/tst_qscriptvalue.cpp @@ -2739,6 +2739,31 @@ void tst_QScriptValue::construct() QVERIFY(!QScriptValue(QScriptValue::NullValue).construct().isValid()); } +void tst_QScriptValue::construct_constructorThrowsPrimitive() +{ + QScriptEngine eng; + QScriptValue fun = eng.evaluate("(function() { throw 123; })"); + QVERIFY(fun.isFunction()); + // construct(QScriptValueList) + { + QScriptValue ret = fun.construct(); + QVERIFY(ret.isNumber()); + QCOMPARE(ret.toNumber(), 123.0); + QVERIFY(eng.hasUncaughtException()); + QVERIFY(ret.strictlyEquals(eng.uncaughtException())); + eng.clearExceptions(); + } + // construct(QScriptValue) + { + QScriptValue ret = fun.construct(eng.newArray()); + QVERIFY(ret.isNumber()); + QCOMPARE(ret.toNumber(), 123.0); + QVERIFY(eng.hasUncaughtException()); + QVERIFY(ret.strictlyEquals(eng.uncaughtException())); + eng.clearExceptions(); + } +} + void tst_QScriptValue::lessThan_old() { QScriptEngine eng; diff --git a/tests/auto/qscriptvalue/tst_qscriptvalue.h b/tests/auto/qscriptvalue/tst_qscriptvalue.h index 8bfaa6a..462749a 100644 --- a/tests/auto/qscriptvalue/tst_qscriptvalue.h +++ b/tests/auto/qscriptvalue/tst_qscriptvalue.h @@ -219,6 +219,7 @@ private slots: void getSetScriptClass(); void call(); void construct(); + void construct_constructorThrowsPrimitive(); void castToPointer(); void prettyPrinter_data(); void prettyPrinter(); -- cgit v0.12 From 9a26fba1b08a031b8053236feab989333ab60bfc Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 28 Oct 2010 13:31:00 +0200 Subject: Add missing QT_MODULE macros. --- src/corelib/global/qnaclunimplemented.h | 2 ++ src/gui/text/qplatformfontdatabase_qpa.h | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/corelib/global/qnaclunimplemented.h b/src/corelib/global/qnaclunimplemented.h index ba43915..71b3465 100644 --- a/src/corelib/global/qnaclunimplemented.h +++ b/src/corelib/global/qnaclunimplemented.h @@ -54,6 +54,8 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +QT_MODULE(Core) + extern "C" { void pthread_cleanup_push(void (*handler)(void *), void *arg); diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h index adaa4cb..2b9ea63 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.h +++ b/src/gui/text/qplatformfontdatabase_qpa.h @@ -12,6 +12,8 @@ QT_BEGIN_HEADER QT_BEGIN_NAMESPACE +QT_MODULE(Gui) + class QWritingSystemsPrivate; class Q_GUI_EXPORT QSupportedWritingSystems -- cgit v0.12 From fee7ca62b6611f4a662fbb4541c83e280be08aba Mon Sep 17 00:00:00 2001 From: Paul Olav Tvete Date: Thu, 28 Oct 2010 13:47:57 +0200 Subject: Fix typos found by the spellchecking autotest --- src/corelib/global/qnaclunimplemented.cpp | 2 +- src/plugins/generic/linuxinput/qlinuxinput.cpp | 2 +- src/plugins/platforms/eglconvenience/qeglconvenience.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/corelib/global/qnaclunimplemented.cpp b/src/corelib/global/qnaclunimplemented.cpp index 618ff3e..050bac6 100644 --- a/src/corelib/global/qnaclunimplemented.cpp +++ b/src/corelib/global/qnaclunimplemented.cpp @@ -51,7 +51,7 @@ There are two main classes of functions: - - Fuctions that are called but can have no effect: + - Functions that are called but can have no effect: For these we simply give an empty implementation - Functions that are referenced in the source code, but diff --git a/src/plugins/generic/linuxinput/qlinuxinput.cpp b/src/plugins/generic/linuxinput/qlinuxinput.cpp index bd57fa3..c5bfd33 100644 --- a/src/plugins/generic/linuxinput/qlinuxinput.cpp +++ b/src/plugins/generic/linuxinput/qlinuxinput.cpp @@ -445,7 +445,7 @@ QLinuxInputKeyboardHandler::QLinuxInputKeyboardHandler(const QString &key, const // record the original mode so we can restore it again in the destructor. ::ioctl(m_tty_fd, KDGKBMODE, &m_orig_kbmode); - // setting this tranlation mode is even needed in INPUT mode to prevent + // setting this translation mode is even needed in INPUT mode to prevent // the shell from also interpreting codes, if the process has a tty // attached: e.g. Ctrl+C wouldn't copy, but kill the application. ::ioctl(m_tty_fd, KDSKBMODE, K_MEDIUMRAW); diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp index b3a4c53..106041d 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp @@ -39,7 +39,7 @@ QVector q_createConfigAttributesFromFormat(const QPlatformWindowFormat & // put in the list before 32-bit configs. So, to make sure 16-bit is preffered over 32-bit, // we must set the red/green/blue sizes to zero. This has an unfortunate consequence that // if the application sets the red/green/blue size to 5/6/5 on the QPlatformWindowFormat, - // they will probably get a 32-bit config, even when there's an RGB565 config avaliable. + // they will probably get a 32-bit config, even when there's an RGB565 config available. // Now normalize the values so -1 becomes 0 redSize = redSize > 0 ? redSize : 0; @@ -111,7 +111,7 @@ bool q_reduceConfigAttributes(QVector *configAttributes) // those with smaller (but faster) lower color depths. One // way around this is to set EGL_BUFFER_SIZE to 16, which // trumps the others. Of course, there may not be a 16-bit - // config avaliable, so it's the first restraint we remove. + // config available, so it's the first restraint we remove. i = configAttributes->indexOf(EGL_BUFFER_SIZE); if (i >= 0) { if (configAttributes->at(i+1) == 16) { -- cgit v0.12 From 8b7dad6c1290c3c5f9ce35ea9d13a4b7e6398572 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Thu, 28 Oct 2010 14:34:55 +0200 Subject: Fix the license in files for Lighthouse --- mkspecs/qws/linux-nacl-g++/qplatformdefs.h | 78 +++++++++++----------- mkspecs/qws/macx-nacl-g++/qplatformdefs.h | 78 +++++++++++----------- .../global/qconfig-minimal-system-dependencies.h | 78 +++++++++++----------- src/corelib/global/qnaclunimplemented.cpp | 78 +++++++++++----------- src/corelib/global/qnaclunimplemented.h | 78 +++++++++++----------- src/gui/image/qpixmap_blitter.cpp | 41 ++++++++++++ src/gui/image/qpixmap_blitter_p.h | 41 ++++++++++++ .../kernel/qplatformeventloopintegration_qpa.cpp | 41 ++++++++++++ src/gui/kernel/qplatformeventloopintegration_qpa.h | 41 ++++++++++++ src/gui/painting/qblittable.cpp | 41 ++++++++++++ src/gui/painting/qblittable_p.h | 41 ++++++++++++ src/gui/painting/qpaintengine_blitter.cpp | 41 ++++++++++++ src/gui/painting/qpaintengine_blitter_p.h | 41 ++++++++++++ src/gui/text/qfontengine_qpa.cpp | 41 ++++++++++++ src/gui/text/qplatformfontdatabase_qpa.cpp | 41 ++++++++++++ src/gui/text/qplatformfontdatabase_qpa.h | 41 ++++++++++++ src/plugins/platforms/cocoa/cocoa.pro | 2 +- src/plugins/platforms/cocoa/qcocoaintegration.mm | 4 +- .../platforms/directfb/qdirectfbblitter.cpp | 41 ++++++++++++ src/plugins/platforms/directfb/qdirectfbblitter.h | 41 ++++++++++++ .../platforms/directfb/qdirectfbconvenience.cpp | 41 ++++++++++++ .../platforms/directfb/qdirectfbconvenience.h | 41 ++++++++++++ src/plugins/platforms/directfb/qdirectfbcursor.cpp | 41 ++++++++++++ src/plugins/platforms/directfb/qdirectfbcursor.h | 41 ++++++++++++ .../platforms/directfb/qdirectfbglcontext.cpp | 41 ++++++++++++ .../platforms/directfb/qdirectfbglcontext.h | 41 ++++++++++++ src/plugins/platforms/directfb/qdirectfbinput.cpp | 41 ++++++++++++ src/plugins/platforms/directfb/qdirectfbinput.h | 41 ++++++++++++ .../platforms/directfb/qdirectfbintegration.cpp | 2 +- .../platforms/directfb/qdirectfbintegration.h | 2 +- src/plugins/platforms/directfb/qdirectfbwindow.cpp | 5 +- src/plugins/platforms/directfb/qdirectfbwindow.h | 4 +- .../platforms/directfb/qdirectfbwindowsurface.cpp | 4 +- .../platforms/directfb/qdirectfbwindowsurface.h | 4 +- .../platforms/eglconvenience/qeglconvenience.cpp | 41 ++++++++++++ .../platforms/eglconvenience/qeglconvenience.h | 35 +++++----- .../eglconvenience/qeglplatformcontext.cpp | 32 ++++----- .../platforms/eglconvenience/qeglplatformcontext.h | 32 ++++----- src/plugins/platforms/eglfs/qeglfsscreen.cpp | 35 +++++----- src/plugins/platforms/eglfs/qeglfsscreen.h | 35 +++++----- src/plugins/platforms/eglfs/qeglfswindow.cpp | 35 +++++----- src/plugins/platforms/eglfs/qeglfswindow.h | 35 +++++----- .../platforms/eglfs/qeglfswindowsurface.cpp | 35 +++++----- src/plugins/platforms/eglfs/qeglfswindowsurface.h | 35 +++++----- src/plugins/platforms/fb_base/fb_base.cpp | 42 +++++++++++- src/plugins/platforms/fb_base/fb_base.h | 41 ++++++++++++ .../basicunix/qbasicunixfontdatabase.cpp | 41 ++++++++++++ .../basicunix/qbasicunixfontdatabase.h | 41 ++++++++++++ .../fontconfig/qfontconfigdatabase.cpp | 41 ++++++++++++ .../fontdatabases/fontconfig/qfontconfigdatabase.h | 41 ++++++++++++ .../genericunix/qgenericunixfontdatabase.h | 41 ++++++++++++ src/plugins/platforms/minimal/main.cpp | 3 +- .../platforms/minimal/qminimalintegration.cpp | 41 ++++++++++++ .../platforms/minimal/qminimalintegration.h | 3 +- .../platforms/minimal/qminimalwindowsurface.cpp | 5 +- .../platforms/minimal/qminimalwindowsurface.h | 4 +- src/plugins/platforms/openkode/main.cpp | 32 ++++----- .../platforms/openkode/openkodekeytranslator.h | 34 +++++----- .../openkode/qopenkodeeventloopintegration.cpp | 41 ++++++++++++ .../openkode/qopenkodeeventloopintegration.h | 41 ++++++++++++ .../platforms/openkode/qopenkodeintegration.cpp | 32 ++++----- .../platforms/openkode/qopenkodeintegration.h | 32 ++++----- src/plugins/platforms/openkode/qopenkodewindow.cpp | 35 +++++----- src/plugins/platforms/openkode/qopenkodewindow.h | 34 +++++----- src/plugins/platforms/openkode/shaders/frag.glslf | 41 ++++++++++++ src/plugins/platforms/openkode/shaders/vert.glslv | 41 ++++++++++++ 66 files changed, 1869 insertions(+), 466 deletions(-) diff --git a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h index a670ee5..01b26d9 100644 --- a/mkspecs/qws/linux-nacl-g++/qplatformdefs.h +++ b/mkspecs/qws/linux-nacl-g++/qplatformdefs.h @@ -1,43 +1,43 @@ /**************************************************************************** - ** - ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - ** All rights reserved. - ** Contact: Nokia Corporation (qt-info@nokia.com) - ** - ** This file is part of the QtCore module of the Qt Toolkit. - ** - ** $QT_BEGIN_LICENSE:LGPL$ - ** No Commercial Usage - ** This file contains pre-release code and may not be distributed. - ** You may use this file in accordance with the terms and conditions - ** contained in the Technology Preview License Agreement accompanying - ** this package. - ** - ** GNU Lesser General Public License Usage - ** Alternatively, this file may be used under the terms of the GNU Lesser - ** General Public License version 2.1 as published by the Free Software - ** Foundation and appearing in the file LICENSE.LGPL included in the - ** packaging of this file. Please review the following information to - ** ensure the GNU Lesser General Public License version 2.1 requirements - ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - ** - ** In addition, as a special exception, Nokia gives you certain additional - ** rights. These rights are described in the Nokia Qt LGPL Exception - ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - ** - ** If you have questions regarding the use of this file, please contact - ** Nokia at qt-info@nokia.com. - ** - ** - ** - ** - ** - ** - ** - ** - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #ifndef QPLATFORMDEFS_H #define QPLATFORMDEFS_H diff --git a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h index a670ee5..01b26d9 100644 --- a/mkspecs/qws/macx-nacl-g++/qplatformdefs.h +++ b/mkspecs/qws/macx-nacl-g++/qplatformdefs.h @@ -1,43 +1,43 @@ /**************************************************************************** - ** - ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - ** All rights reserved. - ** Contact: Nokia Corporation (qt-info@nokia.com) - ** - ** This file is part of the QtCore module of the Qt Toolkit. - ** - ** $QT_BEGIN_LICENSE:LGPL$ - ** No Commercial Usage - ** This file contains pre-release code and may not be distributed. - ** You may use this file in accordance with the terms and conditions - ** contained in the Technology Preview License Agreement accompanying - ** this package. - ** - ** GNU Lesser General Public License Usage - ** Alternatively, this file may be used under the terms of the GNU Lesser - ** General Public License version 2.1 as published by the Free Software - ** Foundation and appearing in the file LICENSE.LGPL included in the - ** packaging of this file. Please review the following information to - ** ensure the GNU Lesser General Public License version 2.1 requirements - ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - ** - ** In addition, as a special exception, Nokia gives you certain additional - ** rights. These rights are described in the Nokia Qt LGPL Exception - ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - ** - ** If you have questions regarding the use of this file, please contact - ** Nokia at qt-info@nokia.com. - ** - ** - ** - ** - ** - ** - ** - ** - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the qmake spec of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #ifndef QPLATFORMDEFS_H #define QPLATFORMDEFS_H diff --git a/src/corelib/global/qconfig-minimal-system-dependencies.h b/src/corelib/global/qconfig-minimal-system-dependencies.h index c7e3633..63319b9 100644 --- a/src/corelib/global/qconfig-minimal-system-dependencies.h +++ b/src/corelib/global/qconfig-minimal-system-dependencies.h @@ -1,43 +1,43 @@ /**************************************************************************** - ** - ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - ** All rights reserved. - ** Contact: Nokia Corporation (qt-info@nokia.com) - ** - ** This file is part of the QtCore module of the Qt Toolkit. - ** - ** $QT_BEGIN_LICENSE:LGPL$ - ** No Commercial Usage - ** This file contains pre-release code and may not be distributed. - ** You may use this file in accordance with the terms and conditions - ** contained in the Technology Preview License Agreement accompanying - ** this package. - ** - ** GNU Lesser General Public License Usage - ** Alternatively, this file may be used under the terms of the GNU Lesser - ** General Public License version 2.1 as published by the Free Software - ** Foundation and appearing in the file LICENSE.LGPL included in the - ** packaging of this file. Please review the following information to - ** ensure the GNU Lesser General Public License version 2.1 requirements - ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - ** - ** In addition, as a special exception, Nokia gives you certain additional - ** rights. These rights are described in the Nokia Qt LGPL Exception - ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - ** - ** If you have questions regarding the use of this file, please contact - ** Nokia at qt-info@nokia.com. - ** - ** - ** - ** - ** - ** - ** - ** - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #define QT_FONTS_ARE_RESOURCES diff --git a/src/corelib/global/qnaclunimplemented.cpp b/src/corelib/global/qnaclunimplemented.cpp index 050bac6..1a89b8df 100644 --- a/src/corelib/global/qnaclunimplemented.cpp +++ b/src/corelib/global/qnaclunimplemented.cpp @@ -1,43 +1,43 @@ /**************************************************************************** - ** - ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - ** All rights reserved. - ** Contact: Nokia Corporation (qt-info@nokia.com) - ** - ** This file is part of the QtCore module of the Qt Toolkit. - ** - ** $QT_BEGIN_LICENSE:LGPL$ - ** No Commercial Usage - ** This file contains pre-release code and may not be distributed. - ** You may use this file in accordance with the terms and conditions - ** contained in the Technology Preview License Agreement accompanying - ** this package. - ** - ** GNU Lesser General Public License Usage - ** Alternatively, this file may be used under the terms of the GNU Lesser - ** General Public License version 2.1 as published by the Free Software - ** Foundation and appearing in the file LICENSE.LGPL included in the - ** packaging of this file. Please review the following information to - ** ensure the GNU Lesser General Public License version 2.1 requirements - ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - ** - ** In addition, as a special exception, Nokia gives you certain additional - ** rights. These rights are described in the Nokia Qt LGPL Exception - ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - ** - ** If you have questions regarding the use of this file, please contact - ** Nokia at qt-info@nokia.com. - ** - ** - ** - ** - ** - ** - ** - ** - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #include "qnaclunimplemented.h" #include diff --git a/src/corelib/global/qnaclunimplemented.h b/src/corelib/global/qnaclunimplemented.h index 71b3465..2d3d426 100644 --- a/src/corelib/global/qnaclunimplemented.h +++ b/src/corelib/global/qnaclunimplemented.h @@ -1,43 +1,43 @@ /**************************************************************************** - ** - ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - ** All rights reserved. - ** Contact: Nokia Corporation (qt-info@nokia.com) - ** - ** This file is part of the QtCore module of the Qt Toolkit. - ** - ** $QT_BEGIN_LICENSE:LGPL$ - ** No Commercial Usage - ** This file contains pre-release code and may not be distributed. - ** You may use this file in accordance with the terms and conditions - ** contained in the Technology Preview License Agreement accompanying - ** this package. - ** - ** GNU Lesser General Public License Usage - ** Alternatively, this file may be used under the terms of the GNU Lesser - ** General Public License version 2.1 as published by the Free Software - ** Foundation and appearing in the file LICENSE.LGPL included in the - ** packaging of this file. Please review the following information to - ** ensure the GNU Lesser General Public License version 2.1 requirements - ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. - ** - ** In addition, as a special exception, Nokia gives you certain additional - ** rights. These rights are described in the Nokia Qt LGPL Exception - ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. - ** - ** If you have questions regarding the use of this file, please contact - ** Nokia at qt-info@nokia.com. - ** - ** - ** - ** - ** - ** - ** - ** - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtCore module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ #ifndef QNACLUNIMPLEMENTED_H #define QNACLUNIMPLEMENTED_H diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp index 12455b1..e8a7b89 100644 --- a/src/gui/image/qpixmap_blitter.cpp +++ b/src/gui/image/qpixmap_blitter.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qpixmap_blitter_p.h" #include diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h index e404199..55b5618 100644 --- a/src/gui/image/qpixmap_blitter_p.h +++ b/src/gui/image/qpixmap_blitter_p.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QPIXMAP_BLITTER_P_H #define QPIXMAP_BLITTER_P_H diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.cpp b/src/gui/kernel/qplatformeventloopintegration_qpa.cpp index e69de29..8bdba5e 100644 --- a/src/gui/kernel/qplatformeventloopintegration_qpa.cpp +++ b/src/gui/kernel/qplatformeventloopintegration_qpa.cpp @@ -0,0 +1,41 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + diff --git a/src/gui/kernel/qplatformeventloopintegration_qpa.h b/src/gui/kernel/qplatformeventloopintegration_qpa.h index 7343566..a06fecf 100644 --- a/src/gui/kernel/qplatformeventloopintegration_qpa.h +++ b/src/gui/kernel/qplatformeventloopintegration_qpa.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QPLATFORMEVENTLOOPINTEGRATION_QPA_H #define QPLATFORMEVENTLOOPINTEGRATION_QPA_H diff --git a/src/gui/painting/qblittable.cpp b/src/gui/painting/qblittable.cpp index 0b2bd64..f4b84a9 100644 --- a/src/gui/painting/qblittable.cpp +++ b/src/gui/painting/qblittable.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qblittable_p.h" #ifndef QT_NO_BLITTABLE diff --git a/src/gui/painting/qblittable_p.h b/src/gui/painting/qblittable_p.h index 71e80af..cb56cb2 100644 --- a/src/gui/painting/qblittable_p.h +++ b/src/gui/painting/qblittable_p.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QBLITTABLE_P_H #define QBLITTABLE_P_H diff --git a/src/gui/painting/qpaintengine_blitter.cpp b/src/gui/painting/qpaintengine_blitter.cpp index f2e6cdd..2e8d9dd 100644 --- a/src/gui/painting/qpaintengine_blitter.cpp +++ b/src/gui/painting/qpaintengine_blitter.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "private/qpaintengine_blitter_p.h" #include "private/qblittable_p.h" diff --git a/src/gui/painting/qpaintengine_blitter_p.h b/src/gui/painting/qpaintengine_blitter_p.h index 3a2fce5..c8aa536 100644 --- a/src/gui/painting/qpaintengine_blitter_p.h +++ b/src/gui/painting/qpaintengine_blitter_p.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QPAINTENGINE_BLITTER_P_H #define QPAINTENGINE_BLITTER_P_H diff --git a/src/gui/text/qfontengine_qpa.cpp b/src/gui/text/qfontengine_qpa.cpp index 910bbfe..cccbc92 100644 --- a/src/gui/text/qfontengine_qpa.cpp +++ b/src/gui/text/qfontengine_qpa.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qfontengine_qpa_p.h" #include diff --git a/src/gui/text/qplatformfontdatabase_qpa.cpp b/src/gui/text/qplatformfontdatabase_qpa.cpp index 26f4faa..370c921 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.cpp +++ b/src/gui/text/qplatformfontdatabase_qpa.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qplatformfontdatabase_qpa.h" #include #include diff --git a/src/gui/text/qplatformfontdatabase_qpa.h b/src/gui/text/qplatformfontdatabase_qpa.h index 2b9ea63..75b0a18 100644 --- a/src/gui/text/qplatformfontdatabase_qpa.h +++ b/src/gui/text/qplatformfontdatabase_qpa.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QPLATFORMFONTDATABASE_QPA_H #define QPLATFORMFONTDATABASE_QPA_H diff --git a/src/plugins/platforms/cocoa/cocoa.pro b/src/plugins/platforms/cocoa/cocoa.pro index 7701b9c..1633ee4 100644 --- a/src/plugins/platforms/cocoa/cocoa.pro +++ b/src/plugins/platforms/cocoa/cocoa.pro @@ -23,7 +23,7 @@ OBJECTIVE_HEADERS = qcocoaintegration.h \ LIBS += -lz LIBS += -framework cocoa -include(../fontdatabases/genericunix/genericunix.pri) +include(../fontdatabases/coretext/coretext.pri) target.path += $$[QT_INSTALL_PLUGINS]/platforms INSTALLS += target diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm index baf5a73..79d5f51 100644 --- a/src/plugins/platforms/cocoa/qcocoaintegration.mm +++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm @@ -45,7 +45,7 @@ #include "qcocoawindowsurface.h" #include "qcocoaeventloopintegration.h" -#include "qgenericunixfontdatabase.h" +#include "qcoretextfontdatabase.h" #include @@ -74,7 +74,7 @@ QCocoaScreen::~QCocoaScreen() } QCocoaIntegration::QCocoaIntegration() - : mFontDb(new QGenericUnixFontDatabase()) + : mFontDb(new QCoreTextFontDatabase()) { mPool = new QCocoaAutoReleasePool; diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.cpp b/src/plugins/platforms/directfb/qdirectfbblitter.cpp index 15bb18b..d379b65 100644 --- a/src/plugins/platforms/directfb/qdirectfbblitter.cpp +++ b/src/plugins/platforms/directfb/qdirectfbblitter.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qdirectfbblitter.h" #include "qdirectfbconvenience.h" diff --git a/src/plugins/platforms/directfb/qdirectfbblitter.h b/src/plugins/platforms/directfb/qdirectfbblitter.h index 2a39912..1e874ba 100644 --- a/src/plugins/platforms/directfb/qdirectfbblitter.h +++ b/src/plugins/platforms/directfb/qdirectfbblitter.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QDIRECTFBBLITTER_H #define QDIRECTFBBLITTER_H diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp index adf9687..91a1b3a 100644 --- a/src/plugins/platforms/directfb/qdirectfbconvenience.cpp +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qdirectfbconvenience.h" #include "qdirectfbblitter.h" diff --git a/src/plugins/platforms/directfb/qdirectfbconvenience.h b/src/plugins/platforms/directfb/qdirectfbconvenience.h index ab5b3de..3669159 100644 --- a/src/plugins/platforms/directfb/qdirectfbconvenience.h +++ b/src/plugins/platforms/directfb/qdirectfbconvenience.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QDIRECTFBCONVENIENCE_H #define QDIRECTFBCONVENIENCE_H diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.cpp b/src/plugins/platforms/directfb/qdirectfbcursor.cpp index f2c9f35..51502f8 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.cpp +++ b/src/plugins/platforms/directfb/qdirectfbcursor.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qdirectfbcursor.h" #include "qdirectfbconvenience.h" diff --git a/src/plugins/platforms/directfb/qdirectfbcursor.h b/src/plugins/platforms/directfb/qdirectfbcursor.h index 6aecb16..ea8b7b0 100644 --- a/src/plugins/platforms/directfb/qdirectfbcursor.h +++ b/src/plugins/platforms/directfb/qdirectfbcursor.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QDIRECTFBCURSOR_H #define QDIRECTFBCURSOR_H diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp index fe96efe..033ff1e 100644 --- a/src/plugins/platforms/directfb/qdirectfbglcontext.cpp +++ b/src/plugins/platforms/directfb/qdirectfbglcontext.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qdirectfbglcontext.h" #include diff --git a/src/plugins/platforms/directfb/qdirectfbglcontext.h b/src/plugins/platforms/directfb/qdirectfbglcontext.h index 037587e..1785666 100644 --- a/src/plugins/platforms/directfb/qdirectfbglcontext.h +++ b/src/plugins/platforms/directfb/qdirectfbglcontext.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QDIRECTFBGLCONTEXT_H #define QDIRECTFBGLCONTEXT_H diff --git a/src/plugins/platforms/directfb/qdirectfbinput.cpp b/src/plugins/platforms/directfb/qdirectfbinput.cpp index 7101b7b..9d2a8a8 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.cpp +++ b/src/plugins/platforms/directfb/qdirectfbinput.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qdirectfbinput.h" #include "qdirectfbconvenience.h" diff --git a/src/plugins/platforms/directfb/qdirectfbinput.h b/src/plugins/platforms/directfb/qdirectfbinput.h index 0b2e7ed..bca155f 100644 --- a/src/plugins/platforms/directfb/qdirectfbinput.h +++ b/src/plugins/platforms/directfb/qdirectfbinput.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QDIRECTFBINPUT_H #define QDIRECTFBINPUT_H diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.cpp b/src/plugins/platforms/directfb/qdirectfbintegration.cpp index 1b3e035..8639bdb 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.cpp +++ b/src/plugins/platforms/directfb/qdirectfbintegration.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbintegration.h b/src/plugins/platforms/directfb/qdirectfbintegration.h index d2d8367..965bdd2 100644 --- a/src/plugins/platforms/directfb/qdirectfbintegration.h +++ b/src/plugins/platforms/directfb/qdirectfbintegration.h @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.cpp b/src/plugins/platforms/directfb/qdirectfbwindow.cpp index 74e7a72..1cd23ad 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindow.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -38,6 +38,7 @@ ** $QT_END_LICENSE$ ** ****************************************************************************/ + #include "qdirectfbwindow.h" #include "qdirectfbinput.h" #include "qdirectfbglcontext.h" diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h index eaf5173..19491c5 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.h +++ b/src/plugins/platforms/directfb/qdirectfbwindow.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp index 2aef70d..b1a8899 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/directfb/qdirectfbwindowsurface.h b/src/plugins/platforms/directfb/qdirectfbwindowsurface.h index d48f534..aaa74d4 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindowsurface.h +++ b/src/plugins/platforms/directfb/qdirectfbwindowsurface.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp index 106041d..b203fe8 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.cpp +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qeglconvenience.h" QT_BEGIN_NAMESPACE diff --git a/src/plugins/platforms/eglconvenience/qeglconvenience.h b/src/plugins/platforms/eglconvenience/qeglconvenience.h index 484894b..604262b 100644 --- a/src/plugins/platforms/eglconvenience/qeglconvenience.h +++ b/src/plugins/platforms/eglconvenience/qeglconvenience.h @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,24 +21,24 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ + #ifndef QEGLCONVENIENCE_H #define QEGLCONVENIENCE_H diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp index 04720b5..ae3b539 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -9,8 +10,8 @@ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,21 +21,20 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h index b0cbbe0..ae1a891 100644 --- a/src/plugins/platforms/eglconvenience/qeglplatformcontext.h +++ b/src/plugins/platforms/eglconvenience/qeglplatformcontext.h @@ -1,6 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -9,8 +10,8 @@ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,21 +21,20 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp index 2d23cca..9a40b86 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp +++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,24 +21,24 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ + #include "qeglfsscreen.h" #include "../eglconvenience/qeglconvenience.h" diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.h b/src/plugins/platforms/eglfs/qeglfsscreen.h index f68ab14..9ed1b04 100644 --- a/src/plugins/platforms/eglfs/qeglfsscreen.h +++ b/src/plugins/platforms/eglfs/qeglfsscreen.h @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,24 +21,24 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ + #ifndef QEGLSCREEN_H #define QEGLSCREEN_H diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp index 86cc98b..d0e15d3 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.cpp +++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,24 +21,24 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ + #include "qeglfswindow.h" #include diff --git a/src/plugins/platforms/eglfs/qeglfswindow.h b/src/plugins/platforms/eglfs/qeglfswindow.h index 0c3bc84..43f185b 100644 --- a/src/plugins/platforms/eglfs/qeglfswindow.h +++ b/src/plugins/platforms/eglfs/qeglfswindow.h @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,24 +21,24 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ + #ifndef QEGLWINDOW_H #define QEGLWINDOW_H diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp b/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp index a613dda..fcea4d3 100644 --- a/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp +++ b/src/plugins/platforms/eglfs/qeglfswindowsurface.cpp @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,24 +21,24 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ + #include "qeglfswindowsurface.h" #include diff --git a/src/plugins/platforms/eglfs/qeglfswindowsurface.h b/src/plugins/platforms/eglfs/qeglfswindowsurface.h index 571b9bd..f8aca40 100644 --- a/src/plugins/platforms/eglfs/qeglfswindowsurface.h +++ b/src/plugins/platforms/eglfs/qeglfswindowsurface.h @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,24 +21,24 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ + #ifndef QEGLWINDOWSURFACE_H #define QEGLWINDOWSURFACE_H diff --git a/src/plugins/platforms/fb_base/fb_base.cpp b/src/plugins/platforms/fb_base/fb_base.cpp index 48488d4..b000a18 100644 --- a/src/plugins/platforms/fb_base/fb_base.cpp +++ b/src/plugins/platforms/fb_base/fb_base.cpp @@ -1,5 +1,45 @@ -#include "fb_base.h" +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include "fb_base.h" #include #include #include diff --git a/src/plugins/platforms/fb_base/fb_base.h b/src/plugins/platforms/fb_base/fb_base.h index e52455a..45a5663 100644 --- a/src/plugins/platforms/fb_base/fb_base.h +++ b/src/plugins/platforms/fb_base/fb_base.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QLIGHTHOUSEGRAPHICSSCREEN_H #define QLIGHTHOUSEGRAPHICSSCREEN_H diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp index 5b6f69a..4634477 100644 --- a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp +++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qbasicunixfontdatabase.h" #include diff --git a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h index 95015df..0af118d 100644 --- a/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h +++ b/src/plugins/platforms/fontdatabases/basicunix/qbasicunixfontdatabase.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QBASICUNIXFONTDATABASE_H #define QBASICUNIXFONTDATABASE_H diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp index 85515ed..c9d1b74 100644 --- a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp +++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qfontconfigdatabase.h" #include diff --git a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h index 5945b6e..33382dc 100644 --- a/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h +++ b/src/plugins/platforms/fontdatabases/fontconfig/qfontconfigdatabase.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QFONTCONFIGDATABASE_H #define QFONTCONFIGDATABASE_H diff --git a/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h b/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h index ec083f8..327c8f5 100644 --- a/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h +++ b/src/plugins/platforms/fontdatabases/genericunix/qgenericunixfontdatabase.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QGENERICUNIXFONTDATABASE_H #define QGENERICUNIXFONTDATABASE_H diff --git a/src/plugins/platforms/minimal/main.cpp b/src/plugins/platforms/minimal/main.cpp index a4d646d..82c15c2 100644 --- a/src/plugins/platforms/minimal/main.cpp +++ b/src/plugins/platforms/minimal/main.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** @@ -39,6 +39,7 @@ ** ****************************************************************************/ + #include #include "qminimalintegration.h" diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp index e947bf1..c90e92e 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.cpp +++ b/src/plugins/platforms/minimal/qminimalintegration.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qminimalintegration.h" #include "qminimalwindowsurface.h" diff --git a/src/plugins/platforms/minimal/qminimalintegration.h b/src/plugins/platforms/minimal/qminimalintegration.h index a2f7449..95b952e 100644 --- a/src/plugins/platforms/minimal/qminimalintegration.h +++ b/src/plugins/platforms/minimal/qminimalintegration.h @@ -1,7 +1,6 @@ - /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** diff --git a/src/plugins/platforms/minimal/qminimalwindowsurface.cpp b/src/plugins/platforms/minimal/qminimalwindowsurface.cpp index ad5997e..acf0e6e 100644 --- a/src/plugins/platforms/minimal/qminimalwindowsurface.cpp +++ b/src/plugins/platforms/minimal/qminimalwindowsurface.cpp @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -39,6 +39,7 @@ ** ****************************************************************************/ + #include "qminimalwindowsurface.h" #include #include diff --git a/src/plugins/platforms/minimal/qminimalwindowsurface.h b/src/plugins/platforms/minimal/qminimalwindowsurface.h index 96f989d..98b26f6 100644 --- a/src/plugins/platforms/minimal/qminimalwindowsurface.h +++ b/src/plugins/platforms/minimal/qminimalwindowsurface.h @@ -1,10 +1,10 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage diff --git a/src/plugins/platforms/openkode/main.cpp b/src/plugins/platforms/openkode/main.cpp index b60ae1b..527747e 100644 --- a/src/plugins/platforms/openkode/main.cpp +++ b/src/plugins/platforms/openkode/main.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -9,8 +10,8 @@ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,21 +21,20 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/plugins/platforms/openkode/openkodekeytranslator.h b/src/plugins/platforms/openkode/openkodekeytranslator.h index e0ba5c1..0070edc 100644 --- a/src/plugins/platforms/openkode/openkodekeytranslator.h +++ b/src/plugins/platforms/openkode/openkodekeytranslator.h @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,21 +21,20 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp index bc92d0e..73d874c 100644 --- a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.cpp @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #include "qopenkodeeventloopintegration.h" #include diff --git a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h index 03f800c..61bd444 100644 --- a/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeeventloopintegration.h @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + #ifndef QOPENKODEEVENTLOOPINTEGRATION_H #define QOPENKODEEVENTLOOPINTEGRATION_H diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.cpp b/src/plugins/platforms/openkode/qopenkodeintegration.cpp index 0c29a33..60be897 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.cpp +++ b/src/plugins/platforms/openkode/qopenkodeintegration.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -9,8 +10,8 @@ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,21 +21,20 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/plugins/platforms/openkode/qopenkodeintegration.h b/src/plugins/platforms/openkode/qopenkodeintegration.h index 907b7e2..a067491 100644 --- a/src/plugins/platforms/openkode/qopenkodeintegration.h +++ b/src/plugins/platforms/openkode/qopenkodeintegration.h @@ -1,6 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** ** This file is part of the plugins of the Qt Toolkit. @@ -9,8 +10,8 @@ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,21 +21,20 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/plugins/platforms/openkode/qopenkodewindow.cpp b/src/plugins/platforms/openkode/qopenkodewindow.cpp index fadf564..32517c6 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.cpp +++ b/src/plugins/platforms/openkode/qopenkodewindow.cpp @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,24 +21,24 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ + #include "qopenkodewindow.h" #include "qopenkodeintegration.h" #include "../eglconvenience/qeglplatformcontext.h" diff --git a/src/plugins/platforms/openkode/qopenkodewindow.h b/src/plugins/platforms/openkode/qopenkodewindow.h index 27d33d6..4992807 100644 --- a/src/plugins/platforms/openkode/qopenkodewindow.h +++ b/src/plugins/platforms/openkode/qopenkodewindow.h @@ -1,16 +1,17 @@ /**************************************************************************** ** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtOpenVG module of the Qt Toolkit. +** This file is part of the plugins of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage ** This file contains pre-release code and may not be distributed. ** You may use this file in accordance with the terms and conditions -** contained in the either Technology Preview License Agreement or the -** Beta Release License Agreement. +** contained in the Technology Preview License Agreement accompanying +** this package. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser @@ -20,21 +21,20 @@ ** ensure the GNU Lesser General Public License version 2.1 requirements ** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. ** -** In addition, as a special exception, Nokia gives you certain -** additional rights. These rights are described in the Nokia Qt LGPL -** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this -** package. +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** ** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 3.0 as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL included in the -** packaging of this file. Please review the following information to -** ensure the GNU General Public License version 3.0 requirements will be -** met: http://www.gnu.org/copyleft/gpl.html. ** -** If you are unsure which license is appropriate for your use, please -** contact the sales department at http://www.qtsoftware.com/contact. ** $QT_END_LICENSE$ ** ****************************************************************************/ diff --git a/src/plugins/platforms/openkode/shaders/frag.glslf b/src/plugins/platforms/openkode/shaders/frag.glslf index ed360fe..c768437 100644 --- a/src/plugins/platforms/openkode/shaders/frag.glslf +++ b/src/plugins/platforms/openkode/shaders/frag.glslf @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + uniform sampler2D tex_samp; varying vec2 texcoord_var; diff --git a/src/plugins/platforms/openkode/shaders/vert.glslv b/src/plugins/platforms/openkode/shaders/vert.glslv index 57b5866..8a64f4d 100644 --- a/src/plugins/platforms/openkode/shaders/vert.glslv +++ b/src/plugins/platforms/openkode/shaders/vert.glslv @@ -1,3 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the plugins of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + uniform vec2 window; // window size // Per-vertex attributes] -- cgit v0.12 From 8d2fcb26e23d498e3e2efd600ad60a20fdba14c7 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 28 Oct 2010 19:48:22 +0200 Subject: Temporarily remove .def file entries for a little stunt --- src/s60installs/bwins/QtGuiu.def | 2 -- src/s60installs/eabi/QtGuiu.def | 2 -- 2 files changed, 4 deletions(-) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index 7cc2752..aacc03a 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12894,6 +12894,4 @@ EXPORTS ?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@PAVQGraphicsItem@@@Z @ 12893 NONAME ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(class QGraphicsItem *) const ?maxTextureHeight@QTextureGlyphCache@@UBEHXZ @ 12894 NONAME ; int QTextureGlyphCache::maxTextureHeight(void) const ?maxTextureWidth@QTextureGlyphCache@@UBEHXZ @ 12895 NONAME ; int QTextureGlyphCache::maxTextureWidth(void) const - ?convertToPostscriptFontFamilyName@QFontEngine@@SA?AVQByteArray@@ABV2@@Z @ 12896 NONAME ; class QByteArray QFontEngine::convertToPostscriptFontFamilyName(class QByteArray const &) - ?lastResortFont@QFont@@QBE?AVQString@@XZ @ 12897 NONAME ; class QString QFont::lastResortFont(void) const diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 4e867a3..4442d33 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12097,6 +12097,4 @@ EXPORTS _ZN19QApplicationPrivate19qmljsDebugArgumentsE @ 12096 NONAME DATA 4 _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFP13QGraphicsItem @ 12097 NONAME _ZNK20QGraphicsItemPrivate21effectiveBoundingRectEP13QGraphicsItem @ 12098 NONAME - _ZNK5QFont14lastResortFontEv @ 12099 NONAME - _ZN11QFontEngine33convertToPostscriptFontFamilyNameERK10QByteArray @ 12100 NONAME -- cgit v0.12 From 2362d8b1e9fa86da1d3cc5dbb7d4467ec12311e1 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 28 Oct 2010 19:49:55 +0200 Subject: Do not crash on Symbian The qml debugging enabler in QtDeclarative made any Qt app crash which used QDeclarative. Reason was that QtDeclarative.dll tried to directly access (private) writable static data from QtGui.dll. This patch adds an accessor function for the data to QtGui, and the crash is gone. Done-by: Kai Koehne Reviewed-by: Kai Koehne Conflicts: src/declarative/debugger/qdeclarativedebugservice.cpp --- src/declarative/debugger/qdeclarativedebugservice.cpp | 12 ++++++------ src/gui/kernel/qapplication.cpp | 9 +++++++-- src/gui/kernel/qapplication_p.h | 3 ++- src/s60installs/bwins/QtGuiu.def | 4 +++- src/s60installs/eabi/QtGuiu.def | 4 +++- 5 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/declarative/debugger/qdeclarativedebugservice.cpp b/src/declarative/debugger/qdeclarativedebugservice.cpp index b98cd5d..c39da3d 100644 --- a/src/declarative/debugger/qdeclarativedebugservice.cpp +++ b/src/declarative/debugger/qdeclarativedebugservice.cpp @@ -204,13 +204,13 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance() bool ok = false; // format: qmljsdebugger=port:3768[,block] - if (!appD->qmljsDebugArguments.isEmpty()) { + if (!appD->qmljsDebugArgumentsString().isEmpty()) { - if (appD->qmljsDebugArguments.indexOf(QLatin1String("port:")) == 0) { - int separatorIndex = appD->qmljsDebugArguments.indexOf(QLatin1Char(',')); - port = appD->qmljsDebugArguments.mid(5, separatorIndex - 5).toInt(&ok); + if (appD->qmljsDebugArgumentsString().indexOf(QLatin1String("port:")) == 0) { + int separatorIndex = appD->qmljsDebugArgumentsString().indexOf(QLatin1Char(',')); + port = appD->qmljsDebugArgumentsString().mid(5, separatorIndex - 5).toInt(&ok); } - block = appD->qmljsDebugArguments.contains(QLatin1String("block")); + block = appD->qmljsDebugArgumentsString().contains(QLatin1String("block")); if (ok) { server = new QDeclarativeDebugServer(port); @@ -221,7 +221,7 @@ QDeclarativeDebugServer *QDeclarativeDebugServer::instance() } else { qWarning(QString::fromAscii("QDeclarativeDebugServer: Ignoring \"-qmljsdebugger=%1\". " "Format is -qmljsdebugger=port:[,block]").arg( - appD->qmljsDebugArguments).toAscii().constData()); + appD->qmljsDebugArgumentsString()).toAscii().constData()); } } #endif diff --git a/src/gui/kernel/qapplication.cpp b/src/gui/kernel/qapplication.cpp index 3323fbc..6c4004e 100644 --- a/src/gui/kernel/qapplication.cpp +++ b/src/gui/kernel/qapplication.cpp @@ -497,7 +497,7 @@ bool QApplicationPrivate::fade_tooltip = false; bool QApplicationPrivate::animate_toolbox = false; bool QApplicationPrivate::widgetCount = false; bool QApplicationPrivate::load_testability = false; -QString QApplicationPrivate::qmljsDebugArguments; +QString QApplicationPrivate::qmljs_debug_arguments; #ifdef QT_KEYPAD_NAVIGATION # ifdef Q_OS_SYMBIAN Qt::NavigationMode QApplicationPrivate::navigationMode = Qt::NavigationModeKeypadDirectional; @@ -570,7 +570,7 @@ void QApplicationPrivate::process_cmdline() if (arg == "-qdevel" || arg == "-qdebug") { // obsolete argument } else if (arg.indexOf("-qmljsdebugger=", 0) != -1) { - qmljsDebugArguments = QString::fromLocal8Bit(arg.right(arg.length() - 15)); + qmljs_debug_arguments = QString::fromLocal8Bit(arg.right(arg.length() - 15)); } else if (arg.indexOf("-style=", 0) != -1) { s = QString::fromLocal8Bit(arg.right(arg.length() - 7).toLower()); } else if (arg == "-style" && i < argc-1) { @@ -6086,6 +6086,11 @@ QPixmap QApplicationPrivate::getPixmapCursor(Qt::CursorShape cshape) return QPixmap(); } +QString QApplicationPrivate::qmljsDebugArgumentsString() +{ + return qmljs_debug_arguments; +} + QT_END_NAMESPACE #include "moc_qapplication.cpp" diff --git a/src/gui/kernel/qapplication_p.h b/src/gui/kernel/qapplication_p.h index 9c5095d..a0e1452 100644 --- a/src/gui/kernel/qapplication_p.h +++ b/src/gui/kernel/qapplication_p.h @@ -446,7 +446,8 @@ public: static bool animate_toolbox; static bool widgetCount; // Coupled with -widgetcount switch static bool load_testability; // Coupled with -testability switch - static QString qmljsDebugArguments; // a string containing arguments for js/qml debugging. + static QString qmljs_debug_arguments; // a string containing arguments for js/qml debugging. + static QString qmljsDebugArgumentsString(); // access string from other libraries #ifdef Q_WS_MAC static bool native_modal_dialog_active; diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index aacc03a..afc89ae 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12890,8 +12890,10 @@ EXPORTS ?lastRightBearing@QFontEngine@@IAE?AUQFixed@@ABUQGlyphLayout@@_N@Z @ 12889 NONAME ; struct QFixed QFontEngine::lastRightBearing(struct QGlyphLayout const &, bool) ?childrenBoundingRectHelper@QGraphicsItemPrivate@@QAEXPAVQTransform@@PAVQRectF@@PAVQGraphicsItem@@@Z @ 12890 NONAME ; void QGraphicsItemPrivate::childrenBoundingRectHelper(class QTransform *, class QRectF *, class QGraphicsItem *) ?setTimeout@QTapAndHoldGesture@@SAXH@Z @ 12891 NONAME ; void QTapAndHoldGesture::setTimeout(int) - ?qmljsDebugArguments@QApplicationPrivate@@2VQString@@A @ 12892 NONAME ; class QString QApplicationPrivate::qmljsDebugArguments + ?qmljsDebugArguments@QApplicationPrivate@@2VQString@@A @ 12892 NONAME ABSENT ; class QString QApplicationPrivate::qmljsDebugArguments ?effectiveBoundingRect@QGraphicsItemPrivate@@QBE?AVQRectF@@PAVQGraphicsItem@@@Z @ 12893 NONAME ; class QRectF QGraphicsItemPrivate::effectiveBoundingRect(class QGraphicsItem *) const ?maxTextureHeight@QTextureGlyphCache@@UBEHXZ @ 12894 NONAME ; int QTextureGlyphCache::maxTextureHeight(void) const ?maxTextureWidth@QTextureGlyphCache@@UBEHXZ @ 12895 NONAME ; int QTextureGlyphCache::maxTextureWidth(void) const + ?qmljs_debug_arguments@QApplicationPrivate@@2VQString@@A @ 12896 NONAME ; class QString QApplicationPrivate::qmljs_debug_arguments + ?qmljsDebugArgumentsString@QApplicationPrivate@@SA?AVQString@@XZ @ 12897 NONAME ; class QString QApplicationPrivate::qmljsDebugArgumentsString(void) diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index 4442d33..aa050f9 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12094,7 +12094,9 @@ EXPORTS _ZN18QTapAndHoldGesture7timeoutEv @ 12093 NONAME _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFb @ 12094 NONAME ABSENT _ZN20QGraphicsItemPrivate14children_clearEP24QDeclarativeListPropertyI15QGraphicsObjectE @ 12095 NONAME - _ZN19QApplicationPrivate19qmljsDebugArgumentsE @ 12096 NONAME DATA 4 + _ZN19QApplicationPrivate19qmljsDebugArgumentsE @ 12096 NONAME DATA 4 ABSENT _ZN20QGraphicsItemPrivate26childrenBoundingRectHelperEP10QTransformP6QRectFP13QGraphicsItem @ 12097 NONAME _ZNK20QGraphicsItemPrivate21effectiveBoundingRectEP13QGraphicsItem @ 12098 NONAME + _ZN19QApplicationPrivate21qmljs_debug_argumentsE @ 12099 NONAME DATA 4 + _ZN19QApplicationPrivate25qmljsDebugArgumentsStringEv @ 12100 NONAME -- cgit v0.12 From 44f6ed77eb3b80b28ebc967b64a1640347a83060 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 28 Oct 2010 19:52:00 +0200 Subject: Readded .def file entries after a little stunt --- src/s60installs/bwins/QtGuiu.def | 2 ++ src/s60installs/eabi/QtGuiu.def | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/s60installs/bwins/QtGuiu.def b/src/s60installs/bwins/QtGuiu.def index afc89ae..c91b22c 100644 --- a/src/s60installs/bwins/QtGuiu.def +++ b/src/s60installs/bwins/QtGuiu.def @@ -12896,4 +12896,6 @@ EXPORTS ?maxTextureWidth@QTextureGlyphCache@@UBEHXZ @ 12895 NONAME ; int QTextureGlyphCache::maxTextureWidth(void) const ?qmljs_debug_arguments@QApplicationPrivate@@2VQString@@A @ 12896 NONAME ; class QString QApplicationPrivate::qmljs_debug_arguments ?qmljsDebugArgumentsString@QApplicationPrivate@@SA?AVQString@@XZ @ 12897 NONAME ; class QString QApplicationPrivate::qmljsDebugArgumentsString(void) + ?convertToPostscriptFontFamilyName@QFontEngine@@SA?AVQByteArray@@ABV2@@Z @ 12898 NONAME ; class QByteArray QFontEngine::convertToPostscriptFontFamilyName(class QByteArray const &) + ?lastResortFont@QFont@@QBE?AVQString@@XZ @ 12899 NONAME ; class QString QFont::lastResortFont(void) const diff --git a/src/s60installs/eabi/QtGuiu.def b/src/s60installs/eabi/QtGuiu.def index aa050f9..f772bcc 100644 --- a/src/s60installs/eabi/QtGuiu.def +++ b/src/s60installs/eabi/QtGuiu.def @@ -12099,4 +12099,6 @@ EXPORTS _ZNK20QGraphicsItemPrivate21effectiveBoundingRectEP13QGraphicsItem @ 12098 NONAME _ZN19QApplicationPrivate21qmljs_debug_argumentsE @ 12099 NONAME DATA 4 _ZN19QApplicationPrivate25qmljsDebugArgumentsStringEv @ 12100 NONAME + _ZNK5QFont14lastResortFontEv @ 12101 NONAME + _ZN11QFontEngine33convertToPostscriptFontFamilyNameERK10QByteArray @ 12102 NONAME -- cgit v0.12 From eea4ef7bcbababd1af07c75e6711f34aaa4b69e5 Mon Sep 17 00:00:00 2001 From: Alessandro Portale Date: Thu, 28 Oct 2010 22:10:13 +0200 Subject: Making the buttons less finger unfriendly I did not dare to apply the same fix to the samegame tutorials, since those are completely diverged from the demo. --- demos/declarative/samegame/SamegameCore/Button.qml | 4 ++-- demos/declarative/samegame/samegame.qml | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/demos/declarative/samegame/SamegameCore/Button.qml b/demos/declarative/samegame/SamegameCore/Button.qml index 7fb7b65..140b196 100644 --- a/demos/declarative/samegame/SamegameCore/Button.qml +++ b/demos/declarative/samegame/SamegameCore/Button.qml @@ -48,7 +48,7 @@ Rectangle { signal clicked - width: buttonLabel.width + 20; height: buttonLabel.height + 6 + width: buttonLabel.width + 20; height: buttonLabel.height + 20 smooth: true border { width: 1; color: Qt.darker(activePalette.button) } radius: 8 @@ -70,6 +70,6 @@ Rectangle { MouseArea { id: mouseArea; anchors.fill: parent; onClicked: container.clicked() } Text { - id: buttonLabel; text: container.text; anchors.centerIn: container; color: activePalette.buttonText + id: buttonLabel; text: container.text; anchors.centerIn: container; color: activePalette.buttonText; font.pixelSize: 24 } } diff --git a/demos/declarative/samegame/samegame.qml b/demos/declarative/samegame/samegame.qml index f66c40e..b66c5a6 100644 --- a/demos/declarative/samegame/samegame.qml +++ b/demos/declarative/samegame/samegame.qml @@ -133,7 +133,7 @@ Rectangle { Rectangle { id: toolBar - width: parent.width; height: 32 + width: parent.width; height: 58 color: activePalette.window anchors.bottom: screen.bottom @@ -156,6 +156,7 @@ Rectangle { anchors { right: parent.right; rightMargin: 3; verticalCenter: parent.verticalCenter } text: "Score: " + gameCanvas.score font.bold: true + font.pixelSize: 24 color: activePalette.windowText } } -- cgit v0.12 From 9129a27f733169c9a4baf46b1be1c749dabdfdd8 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Fri, 29 Oct 2010 10:13:28 +1000 Subject: remove the connecting thread, and use async call to dbus instead. This fixes the case where the connection threads are never stopped until desctuctor. Task-number: QTBUG-14836 Reviewed-by: trust me --- src/plugins/bearer/connman/qconnmanengine.cpp | 83 ++++++---------------- src/plugins/bearer/connman/qconnmanengine.h | 27 ------- .../bearer/connman/qconnmanservice_linux.cpp | 21 +++--- src/plugins/bearer/connman/qofonoservice_linux.cpp | 12 ++-- 4 files changed, 36 insertions(+), 107 deletions(-) diff --git a/src/plugins/bearer/connman/qconnmanengine.cpp b/src/plugins/bearer/connman/qconnmanengine.cpp index a8b8911..184ceb4 100644 --- a/src/plugins/bearer/connman/qconnmanengine.cpp +++ b/src/plugins/bearer/connman/qconnmanengine.cpp @@ -170,13 +170,26 @@ bool QConnmanEngine::hasIdentifier(const QString &id) void QConnmanEngine::connectToId(const QString &id) { QMutexLocker locker(&mutex); - QConnmanConnectThread *thread; - thread = new QConnmanConnectThread(this); - thread->setServicePath(serviceFromId(id)); - thread->setIdentifier(id); - connect(thread,SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError)), - this,SIGNAL(connectionError(QString,QBearerEngineImpl::ConnectionError))); - thread->start(); + QString servicePath = serviceFromId(id); + QConnmanServiceInterface serv(servicePath); + if(!serv.isValid()) { + emit connectionError(id, QBearerEngineImpl::InterfaceLookupError); + } else { + if(serv.getType() != "cellular") { + + serv.connect(); + } else { + QOfonoManagerInterface ofonoManager(0); + QString modemPath = ofonoManager.currentModem().path(); + QOfonoDataConnectionManagerInterface dc(modemPath,0); + foreach(const QDBusObjectPath dcPath,dc.getPrimaryContexts()) { + if(dcPath.path().contains(servicePath.section("_",-1))) { + QOfonoPrimaryDataContextInterface primaryContext(dcPath.path(),0); + primaryContext.setActive(true); + } + } + } + } } void QConnmanEngine::disconnectFromId(const QString &id) @@ -791,62 +804,6 @@ bool QConnmanEngine::requiresPolling() const return false; } - -QConnmanConnectThread::QConnmanConnectThread(QObject *parent) - :QThread(parent), - servicePath(), identifier() -{ -} - -QConnmanConnectThread::~QConnmanConnectThread() -{ -} - -void QConnmanConnectThread::stop() -{ - if(currentThread() != this) { - QMetaObject::invokeMethod(this, "quit", - Qt::QueuedConnection); - } else { - quit(); - } - wait(); -} - -void QConnmanConnectThread::run() -{ - QConnmanServiceInterface serv(servicePath); - if(!serv.isValid()) { - emit connectionError(identifier, QBearerEngineImpl::InterfaceLookupError); - } else { - if(serv.getType() != "cellular") { - serv.connect(); - } else { - QOfonoManagerInterface ofonoManager(0); - QString modemPath = ofonoManager.currentModem().path(); - QOfonoDataConnectionManagerInterface dc(modemPath,0); - foreach(const QDBusObjectPath dcPath,dc.getPrimaryContexts()) { - if(dcPath.path().contains(servicePath.section("_",-1))) { - QOfonoPrimaryDataContextInterface primaryContext(dcPath.path(),0); - primaryContext.setActive(true); - } - } - } - } -} - -void QConnmanConnectThread::setServicePath(const QString &path) -{ - QMutexLocker locker(&mutex); - servicePath = path; -} - -void QConnmanConnectThread::setIdentifier(const QString &id) -{ - QMutexLocker locker(&mutex); - identifier = id; -} - QT_END_NAMESPACE #endif // QT_NO_DBUS diff --git a/src/plugins/bearer/connman/qconnmanengine.h b/src/plugins/bearer/connman/qconnmanengine.h index 569bbc7..2a2308f 100644 --- a/src/plugins/bearer/connman/qconnmanengine.h +++ b/src/plugins/bearer/connman/qconnmanengine.h @@ -59,14 +59,12 @@ #include #include -#include #ifndef QT_NO_BEARERMANAGEMENT #ifndef QT_NO_DBUS QT_BEGIN_NAMESPACE -class QConnmanConnectThread; class QConnmanEngine : public QBearerEngineImpl { Q_OBJECT @@ -141,33 +139,8 @@ private: bool isRoamingAllowed(const QString &context); protected: bool requiresPolling() const; - QConnmanConnectThread *connThread; }; -class QConnmanConnectThread : public QThread -{ - Q_OBJECT - -public: - QConnmanConnectThread(QObject *parent = 0); - ~QConnmanConnectThread(); - bool keepRunning; - void stop(); - void setServicePath(const QString &path); - void setIdentifier(const QString &id); - -Q_SIGNALS: - void connectionError(const QString &id, QBearerEngineImpl::ConnectionError error); - -protected: - void run(); - QString servicePath; - QString identifier; - -private: - QMutex mutex; - -}; QT_END_NAMESPACE diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index 549a07a..46b6e80 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -79,7 +79,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QLatin1String(CONNMAN_MANAGER_PATH), QLatin1String(CONNMAN_MANAGER_INTERFACE), QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(const QString &, const QDBusVariant & )))) { + this,SIGNAL(propertyChanged(const QString &, const QDBusVariant & ))), Qt::UniqueConnection) { qWarning() << "PropertyCHanged not connected"; } } @@ -89,7 +89,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QLatin1String(CONNMAN_MANAGER_PATH), QLatin1String(CONNMAN_MANAGER_INTERFACE), QLatin1String("StateChanged"), - this,SIGNAL(stateChanged(const QString&)))) { + this,SIGNAL(stateChanged(const QString&))), Qt::UniqueConnection) { qWarning() << "StateChanged not connected"; } @@ -106,7 +106,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } @@ -338,7 +338,7 @@ void QConnmanNetworkInterface::connectNotify(const char *signal) this->path(), QLatin1String(CONNMAN_NETWORK_INTERFACE), QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant))) ) { + this,SIGNAL(propertyChanged(QString,QDBusVariant))), Qt::UniqueConnection) { qWarning() << "network properties not connected"; } } @@ -350,10 +350,10 @@ void QConnmanNetworkInterface::connectNotify(const char *signal) this->path(), QLatin1String(CONNMAN_NETWORK_INTERFACE), QLatin1String("PropertyChanged"), - helper,SLOT(propertyChanged(QString,QDBusVariant))); + helper,SLOT(propertyChanged(QString,QDBusVariant))), Qt::UniqueConnection; QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } @@ -538,7 +538,7 @@ void QConnmanServiceInterface::connectNotify(const char *signal) helper,SLOT(propertyChanged(QString,QDBusVariant))); QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } @@ -569,10 +569,9 @@ QVariant QConnmanServiceInterface::getProperty(const QString &property) return var; } -// clearProperty void QConnmanServiceInterface::connect() { - QDBusReply reply = this->call(QLatin1String("Connect")); + this->asyncCall(QLatin1String("Connect")); } void QConnmanServiceInterface::disconnect() @@ -866,7 +865,7 @@ void QConnmanTechnologyInterface::connectNotify(const char *signal) helper,SLOT(propertyChanged(QString,QDBusVariant))); QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } @@ -1031,7 +1030,7 @@ void QConnmanDeviceInterface::connectNotify(const char *signal) helper,SLOT(propertyChanged(QString,QDBusVariant))); QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } diff --git a/src/plugins/bearer/connman/qofonoservice_linux.cpp b/src/plugins/bearer/connman/qofonoservice_linux.cpp index 955f4b1..52f596b 100644 --- a/src/plugins/bearer/connman/qofonoservice_linux.cpp +++ b/src/plugins/bearer/connman/qofonoservice_linux.cpp @@ -262,7 +262,7 @@ void QOfonoModemInterface::connectNotify(const char *signal) QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); }} void QOfonoModemInterface::disconnectNotify(const char *signal) @@ -385,7 +385,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } @@ -483,7 +483,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } @@ -586,7 +586,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } @@ -675,7 +675,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } @@ -794,7 +794,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), - this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &))); + this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); } } -- cgit v0.12 From d1b0b364fc2c944ec5cf67ed9a3282881f4c324c Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Oct 2010 18:45:11 +1000 Subject: Cleanup qmlvisual/qdeclarativetext visual tests Getting them running again, and smaller. Need to fix a bug before they pass again though. Task-number: QTBUG-14792 --- .../baseline/data-X11/parentanchor.qml | 62 +- .../qdeclarativetext/baseline/parentanchor.qml | 2 +- .../qdeclarativetext/elide/data-X11/elide.0.png | Bin 1002 -> 1167 bytes .../qdeclarativetext/elide/data-X11/elide.qml | 132 +-- .../qdeclarativetext/elide/data-X11/elide2.0.png | Bin 0 -> 2795 bytes .../qdeclarativetext/elide/data-X11/elide2.1.png | Bin 0 -> 2456 bytes .../qdeclarativetext/elide/data-X11/elide2.2.png | Bin 0 -> 2038 bytes .../qdeclarativetext/elide/data-X11/elide2.3.png | Bin 0 -> 1317 bytes .../qdeclarativetext/elide/data-X11/elide2.qml | 991 +++++++++++++++++ .../elide/data-X11/multilength.0.png | Bin 596 -> 2285 bytes .../elide/data-X11/multilength.1.png | Bin 0 -> 2284 bytes .../elide/data-X11/multilength.2.png | Bin 0 -> 1197 bytes .../elide/data-X11/multilength.3.png | Bin 0 -> 1197 bytes .../elide/data-X11/multilength.4.png | Bin 0 -> 556 bytes .../elide/data-X11/multilength.qml | 1166 ++++++++++++++++++-- .../qdeclarativetext/elide/data/elide.0.png | Bin 1604 -> 0 bytes .../qdeclarativetext/elide/data/elide.qml | 279 ----- .../qdeclarativetext/elide/data/elide2.0.png | Bin 4818 -> 0 bytes .../qdeclarativetext/elide/data/elide2.1.png | Bin 4089 -> 0 bytes .../qdeclarativetext/elide/data/elide2.2.png | Bin 3128 -> 0 bytes .../qdeclarativetext/elide/data/elide2.3.png | Bin 1963 -> 0 bytes .../qdeclarativetext/elide/data/elide2.qml | 991 ----------------- .../qdeclarativetext/font/data-MAC/plaintext.0.png | Bin 103018 -> 0 bytes .../qdeclarativetext/font/data-MAC/plaintext.qml | 351 ------ .../qdeclarativetext/font/data-MAC/richtext.0.png | Bin 136492 -> 0 bytes .../qdeclarativetext/font/data-MAC/richtext.qml | 359 ------ .../qdeclarativetext/font/data/plaintext.0.png | Bin 94120 -> 0 bytes .../qdeclarativetext/font/data/plaintext.qml | 351 ------ .../qdeclarativetext/font/data/richtext.0.png | Bin 121122 -> 0 bytes .../qdeclarativetext/font/data/richtext.qml | 359 ------ 30 files changed, 2182 insertions(+), 2861 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml index 880609b..c526f47 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-X11/parentanchor.qml @@ -6,126 +6,126 @@ VisualTest { } Frame { msec: 16 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 32 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 48 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 64 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 80 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 96 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 112 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 128 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 144 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 160 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 176 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 192 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 208 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 224 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 240 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 256 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 272 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 288 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 304 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 320 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 336 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 352 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 368 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 384 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 400 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 416 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 432 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 448 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 464 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 480 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } Frame { msec: 496 - hash: "3e022a120a2dbe688d53657508de36cf" + hash: "e38b59f2c271def037213e57a966bd95" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/parentanchor.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/parentanchor.qml index ec1f8b3..c1920db 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/parentanchor.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/parentanchor.qml @@ -1,7 +1,7 @@ import QtQuick 1.0 Rectangle { - id: s; width: 600; height: 100; color: "lightsteelblue" + id: s; width: 600; height: 100; property string text: "The quick brown fox jumps over the lazy dog." Text { text: s.text diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png index 5631a46..b250b38 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml index d460514..f3bc1db 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 32 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 48 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 64 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 80 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 96 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 112 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 128 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 144 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 160 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 176 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 192 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 208 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 224 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 240 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 256 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 272 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 288 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 304 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 320 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 336 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 352 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 368 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 384 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 400 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 416 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 432 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 448 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 464 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 480 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 496 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 512 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 528 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 544 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 560 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 576 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 592 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 608 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 624 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 640 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 656 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 672 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 688 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 704 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 720 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 736 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 752 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 768 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 784 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 800 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 816 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 832 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 848 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 864 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 880 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 896 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 912 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 928 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 944 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 960 @@ -246,34 +246,34 @@ VisualTest { } Frame { msec: 976 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 } Frame { msec: 992 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 1008 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 1024 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 1040 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } Frame { msec: 1056 - hash: "48e2da07fd229d9db6afc0eda494cd11" + hash: "9992670f23580ce63cdd3ab3fed621a1" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.png new file mode 100644 index 0000000..03b6e5d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.png new file mode 100644 index 0000000..43565b6 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.2.png new file mode 100644 index 0000000..f2df9b2 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.3.png new file mode 100644 index 0000000..11cf86c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml new file mode 100644 index 0000000..1c1d5eb --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/elide2.qml @@ -0,0 +1,991 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 32 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 48 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 64 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 80 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 96 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 112 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 128 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 144 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 160 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 176 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 192 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 208 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 224 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 240 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 256 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 272 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 288 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 304 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 320 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 336 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 352 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 368 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 384 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 400 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 416 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 432 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 448 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 464 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 480 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 496 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 512 + hash: "26a468619443250a160845a894643eb9" + } + Frame { + msec: 528 + hash: "250d6cd632ad176aacbb09fa50f6c099" + } + Frame { + msec: 544 + hash: "250d6cd632ad176aacbb09fa50f6c099" + } + Frame { + msec: 560 + hash: "250d6cd632ad176aacbb09fa50f6c099" + } + Frame { + msec: 576 + hash: "92cfcc9ee96124c5a3848f68228b286b" + } + Frame { + msec: 592 + hash: "92cfcc9ee96124c5a3848f68228b286b" + } + Frame { + msec: 608 + hash: "92cfcc9ee96124c5a3848f68228b286b" + } + Frame { + msec: 624 + hash: "92cfcc9ee96124c5a3848f68228b286b" + } + Frame { + msec: 640 + hash: "92cfcc9ee96124c5a3848f68228b286b" + } + Frame { + msec: 656 + hash: "235f581c767dc4a4f6133e570126a813" + } + Frame { + msec: 672 + hash: "235f581c767dc4a4f6133e570126a813" + } + Frame { + msec: 688 + hash: "235f581c767dc4a4f6133e570126a813" + } + Frame { + msec: 704 + hash: "235f581c767dc4a4f6133e570126a813" + } + Frame { + msec: 720 + hash: "235f581c767dc4a4f6133e570126a813" + } + Frame { + msec: 736 + hash: "c7d6b690224ae554f6200a5d2520ae25" + } + Frame { + msec: 752 + hash: "c7d6b690224ae554f6200a5d2520ae25" + } + Frame { + msec: 768 + hash: "23f5fb2275945e89bf856877b82f99de" + } + Frame { + msec: 784 + hash: "23f5fb2275945e89bf856877b82f99de" + } + Frame { + msec: 800 + hash: "23f5fb2275945e89bf856877b82f99de" + } + Frame { + msec: 816 + hash: "23f5fb2275945e89bf856877b82f99de" + } + Frame { + msec: 832 + hash: "23f5fb2275945e89bf856877b82f99de" + } + Frame { + msec: 848 + hash: "99e6e3d94bb90939dacadf20f791d415" + } + Frame { + msec: 864 + hash: "99e6e3d94bb90939dacadf20f791d415" + } + Frame { + msec: 880 + hash: "99e6e3d94bb90939dacadf20f791d415" + } + Frame { + msec: 896 + hash: "186db3738dc443d66b5b0352d7753b26" + } + Frame { + msec: 912 + hash: "186db3738dc443d66b5b0352d7753b26" + } + Frame { + msec: 928 + hash: "186db3738dc443d66b5b0352d7753b26" + } + Frame { + msec: 944 + hash: "186db3738dc443d66b5b0352d7753b26" + } + Frame { + msec: 960 + image: "elide2.0.png" + } + Frame { + msec: 976 + hash: "88be0433f060832e8345a43eb681998e" + } + Frame { + msec: 992 + hash: "88be0433f060832e8345a43eb681998e" + } + Frame { + msec: 1008 + hash: "88be0433f060832e8345a43eb681998e" + } + Frame { + msec: 1024 + hash: "88be0433f060832e8345a43eb681998e" + } + Frame { + msec: 1040 + hash: "88be0433f060832e8345a43eb681998e" + } + Frame { + msec: 1056 + hash: "89e8da94c1e4e1c031d58f1dd593104a" + } + Frame { + msec: 1072 + hash: "89e8da94c1e4e1c031d58f1dd593104a" + } + Frame { + msec: 1088 + hash: "786b7ea2e267ee6d593f18caa95be45d" + } + Frame { + msec: 1104 + hash: "786b7ea2e267ee6d593f18caa95be45d" + } + Frame { + msec: 1120 + hash: "786b7ea2e267ee6d593f18caa95be45d" + } + Frame { + msec: 1136 + hash: "830afd40f8ee9d0c969fbd61eb68ae94" + } + Frame { + msec: 1152 + hash: "830afd40f8ee9d0c969fbd61eb68ae94" + } + Frame { + msec: 1168 + hash: "d00b74868c2dbddc2d5ae5ec0469f9a1" + } + Frame { + msec: 1184 + hash: "d00b74868c2dbddc2d5ae5ec0469f9a1" + } + Frame { + msec: 1200 + hash: "d00b74868c2dbddc2d5ae5ec0469f9a1" + } + Frame { + msec: 1216 + hash: "d00b74868c2dbddc2d5ae5ec0469f9a1" + } + Frame { + msec: 1232 + hash: "1508cbb70b1221ccf169ff6376df4cc9" + } + Frame { + msec: 1248 + hash: "1508cbb70b1221ccf169ff6376df4cc9" + } + Frame { + msec: 1264 + hash: "1508cbb70b1221ccf169ff6376df4cc9" + } + Frame { + msec: 1280 + hash: "490d7425d117ebe23e3e3637fd3e7b09" + } + Frame { + msec: 1296 + hash: "490d7425d117ebe23e3e3637fd3e7b09" + } + Frame { + msec: 1312 + hash: "490d7425d117ebe23e3e3637fd3e7b09" + } + Frame { + msec: 1328 + hash: "490d7425d117ebe23e3e3637fd3e7b09" + } + Frame { + msec: 1344 + hash: "490d7425d117ebe23e3e3637fd3e7b09" + } + Frame { + msec: 1360 + hash: "048b3223ca262f5f3271f4ad81fbe41f" + } + Frame { + msec: 1376 + hash: "048b3223ca262f5f3271f4ad81fbe41f" + } + Frame { + msec: 1392 + hash: "048b3223ca262f5f3271f4ad81fbe41f" + } + Frame { + msec: 1408 + hash: "048b3223ca262f5f3271f4ad81fbe41f" + } + Frame { + msec: 1424 + hash: "048b3223ca262f5f3271f4ad81fbe41f" + } + Frame { + msec: 1440 + hash: "4e91391c852167a04c6224ef5426b17c" + } + Frame { + msec: 1456 + hash: "4e91391c852167a04c6224ef5426b17c" + } + Frame { + msec: 1472 + hash: "4e91391c852167a04c6224ef5426b17c" + } + Frame { + msec: 1488 + hash: "4e91391c852167a04c6224ef5426b17c" + } + Frame { + msec: 1504 + hash: "4e91391c852167a04c6224ef5426b17c" + } + Frame { + msec: 1520 + hash: "08e969be0cd428140cd079f5f6338b4f" + } + Frame { + msec: 1536 + hash: "08e969be0cd428140cd079f5f6338b4f" + } + Frame { + msec: 1552 + hash: "08e969be0cd428140cd079f5f6338b4f" + } + Frame { + msec: 1568 + hash: "08e969be0cd428140cd079f5f6338b4f" + } + Frame { + msec: 1584 + hash: "08e969be0cd428140cd079f5f6338b4f" + } + Frame { + msec: 1600 + hash: "458e10bb1d38ef8f1248be959a3ac8bc" + } + Frame { + msec: 1616 + hash: "458e10bb1d38ef8f1248be959a3ac8bc" + } + Frame { + msec: 1632 + hash: "458e10bb1d38ef8f1248be959a3ac8bc" + } + Frame { + msec: 1648 + hash: "fde9eccf9fa722d4321bd26ead3d6c5e" + } + Frame { + msec: 1664 + hash: "fde9eccf9fa722d4321bd26ead3d6c5e" + } + Frame { + msec: 1680 + hash: "fde9eccf9fa722d4321bd26ead3d6c5e" + } + Frame { + msec: 1696 + hash: "fde9eccf9fa722d4321bd26ead3d6c5e" + } + Frame { + msec: 1712 + hash: "fde9eccf9fa722d4321bd26ead3d6c5e" + } + Frame { + msec: 1728 + hash: "68ac9747d1b36351ac6677336d4e0bfd" + } + Frame { + msec: 1744 + hash: "68ac9747d1b36351ac6677336d4e0bfd" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1760 + hash: "68ac9747d1b36351ac6677336d4e0bfd" + } + Frame { + msec: 1776 + hash: "015658eeb53ce6937d0a0b3941cea138" + } + Frame { + msec: 1792 + hash: "015658eeb53ce6937d0a0b3941cea138" + } + Frame { + msec: 1808 + hash: "015658eeb53ce6937d0a0b3941cea138" + } + Frame { + msec: 1824 + hash: "015658eeb53ce6937d0a0b3941cea138" + } + Frame { + msec: 1840 + hash: "015658eeb53ce6937d0a0b3941cea138" + } + Frame { + msec: 1856 + hash: "4720bcf54fce0c680a983113dc009104" + } + Frame { + msec: 1872 + hash: "4720bcf54fce0c680a983113dc009104" + } + Frame { + msec: 1888 + hash: "4720bcf54fce0c680a983113dc009104" + } + Frame { + msec: 1904 + hash: "4720bcf54fce0c680a983113dc009104" + } + Frame { + msec: 1920 + image: "elide2.1.png" + } + Frame { + msec: 1936 + hash: "03123bcb0f4ff032257415f713a5873c" + } + Frame { + msec: 1952 + hash: "03123bcb0f4ff032257415f713a5873c" + } + Frame { + msec: 1968 + hash: "03123bcb0f4ff032257415f713a5873c" + } + Frame { + msec: 1984 + hash: "03123bcb0f4ff032257415f713a5873c" + } + Frame { + msec: 2000 + hash: "e93d314c5a19e771282bf09ff0983917" + } + Frame { + msec: 2016 + hash: "e93d314c5a19e771282bf09ff0983917" + } + Frame { + msec: 2032 + hash: "e93d314c5a19e771282bf09ff0983917" + } + Frame { + msec: 2048 + hash: "e93d314c5a19e771282bf09ff0983917" + } + Frame { + msec: 2064 + hash: "e93d314c5a19e771282bf09ff0983917" + } + Frame { + msec: 2080 + hash: "877e76006891001e574b39f60249ec8a" + } + Frame { + msec: 2096 + hash: "877e76006891001e574b39f60249ec8a" + } + Frame { + msec: 2112 + hash: "877e76006891001e574b39f60249ec8a" + } + Frame { + msec: 2128 + hash: "04213ba6fc23600c62c49bdd63725b3d" + } + Frame { + msec: 2144 + hash: "04213ba6fc23600c62c49bdd63725b3d" + } + Frame { + msec: 2160 + hash: "04213ba6fc23600c62c49bdd63725b3d" + } + Frame { + msec: 2176 + hash: "04213ba6fc23600c62c49bdd63725b3d" + } + Frame { + msec: 2192 + hash: "605fbd44c23d135d809e987fde15caf0" + } + Frame { + msec: 2208 + hash: "605fbd44c23d135d809e987fde15caf0" + } + Frame { + msec: 2224 + hash: "138d9fe345628797df8af84b71e76717" + } + Frame { + msec: 2240 + hash: "138d9fe345628797df8af84b71e76717" + } + Frame { + msec: 2256 + hash: "138d9fe345628797df8af84b71e76717" + } + Frame { + msec: 2272 + hash: "138d9fe345628797df8af84b71e76717" + } + Frame { + msec: 2288 + hash: "138d9fe345628797df8af84b71e76717" + } + Frame { + msec: 2304 + hash: "1a160138dbed69dd2fc6cdc335c39332" + } + Frame { + msec: 2320 + hash: "1a160138dbed69dd2fc6cdc335c39332" + } + Frame { + msec: 2336 + hash: "a40edd45d19a09b7b5b6601c2e4789ba" + } + Frame { + msec: 2352 + hash: "a40edd45d19a09b7b5b6601c2e4789ba" + } + Frame { + msec: 2368 + hash: "a40edd45d19a09b7b5b6601c2e4789ba" + } + Frame { + msec: 2384 + hash: "a40edd45d19a09b7b5b6601c2e4789ba" + } + Frame { + msec: 2400 + hash: "a40edd45d19a09b7b5b6601c2e4789ba" + } + Frame { + msec: 2416 + hash: "f8c24070f98d456925ce5fb5519ef20e" + } + Frame { + msec: 2432 + hash: "f8c24070f98d456925ce5fb5519ef20e" + } + Frame { + msec: 2448 + hash: "f8c24070f98d456925ce5fb5519ef20e" + } + Frame { + msec: 2464 + hash: "f8c24070f98d456925ce5fb5519ef20e" + } + Frame { + msec: 2480 + hash: "f8c24070f98d456925ce5fb5519ef20e" + } + Frame { + msec: 2496 + hash: "f383c8fc8764f8615937fcbe18a881cb" + } + Frame { + msec: 2512 + hash: "f383c8fc8764f8615937fcbe18a881cb" + } + Frame { + msec: 2528 + hash: "f383c8fc8764f8615937fcbe18a881cb" + } + Frame { + msec: 2544 + hash: "f383c8fc8764f8615937fcbe18a881cb" + } + Frame { + msec: 2560 + hash: "f383c8fc8764f8615937fcbe18a881cb" + } + Frame { + msec: 2576 + hash: "98355e4087b07e4bf85bd9dd6b2594e2" + } + Frame { + msec: 2592 + hash: "98355e4087b07e4bf85bd9dd6b2594e2" + } + Frame { + msec: 2608 + hash: "98355e4087b07e4bf85bd9dd6b2594e2" + } + Frame { + msec: 2624 + hash: "98355e4087b07e4bf85bd9dd6b2594e2" + } + Frame { + msec: 2640 + hash: "098f7051d2bc8b159a3c358c99ade1e5" + } + Frame { + msec: 2656 + hash: "098f7051d2bc8b159a3c358c99ade1e5" + } + Frame { + msec: 2672 + hash: "098f7051d2bc8b159a3c358c99ade1e5" + } + Frame { + msec: 2688 + hash: "fa588455c73bfd3d14ee322580d95015" + } + Frame { + msec: 2704 + hash: "fa588455c73bfd3d14ee322580d95015" + } + Frame { + msec: 2720 + hash: "fa588455c73bfd3d14ee322580d95015" + } + Frame { + msec: 2736 + hash: "fa588455c73bfd3d14ee322580d95015" + } + Frame { + msec: 2752 + hash: "fa588455c73bfd3d14ee322580d95015" + } + Frame { + msec: 2768 + hash: "ed69a2ab8e66fa397190b35cb942ec2d" + } + Frame { + msec: 2784 + hash: "ed69a2ab8e66fa397190b35cb942ec2d" + } + Frame { + msec: 2800 + hash: "ed69a2ab8e66fa397190b35cb942ec2d" + } + Frame { + msec: 2816 + hash: "ed69a2ab8e66fa397190b35cb942ec2d" + } + Frame { + msec: 2832 + hash: "ed69a2ab8e66fa397190b35cb942ec2d" + } + Frame { + msec: 2848 + hash: "905d42c34198abdc68a3c6f69bfbd293" + } + Frame { + msec: 2864 + hash: "905d42c34198abdc68a3c6f69bfbd293" + } + Frame { + msec: 2880 + image: "elide2.2.png" + } + Frame { + msec: 2896 + hash: "2e796a963fee85d51be536a00baa0c45" + } + Frame { + msec: 2912 + hash: "2e796a963fee85d51be536a00baa0c45" + } + Frame { + msec: 2928 + hash: "2e796a963fee85d51be536a00baa0c45" + } + Frame { + msec: 2944 + hash: "b73b94832ede92794187b9ed452f96e0" + } + Frame { + msec: 2960 + hash: "b73b94832ede92794187b9ed452f96e0" + } + Frame { + msec: 2976 + hash: "b73b94832ede92794187b9ed452f96e0" + } + Frame { + msec: 2992 + hash: "b73b94832ede92794187b9ed452f96e0" + } + Frame { + msec: 3008 + hash: "b73b94832ede92794187b9ed452f96e0" + } + Frame { + msec: 3024 + hash: "4f000e957cd4c7ef4845855088801c2d" + } + Frame { + msec: 3040 + hash: "4f000e957cd4c7ef4845855088801c2d" + } + Frame { + msec: 3056 + hash: "4f000e957cd4c7ef4845855088801c2d" + } + Frame { + msec: 3072 + hash: "4f000e957cd4c7ef4845855088801c2d" + } + Frame { + msec: 3088 + hash: "4f000e957cd4c7ef4845855088801c2d" + } + Frame { + msec: 3104 + hash: "a432c8b664352e585f732813df2e861f" + } + Frame { + msec: 3120 + hash: "a432c8b664352e585f732813df2e861f" + } + Frame { + msec: 3136 + hash: "a432c8b664352e585f732813df2e861f" + } + Frame { + msec: 3152 + hash: "e06abd91449d3b5d18582b9da2d20c97" + } + Frame { + msec: 3168 + hash: "e06abd91449d3b5d18582b9da2d20c97" + } + Frame { + msec: 3184 + hash: "e06abd91449d3b5d18582b9da2d20c97" + } + Frame { + msec: 3200 + hash: "c4cecc3832935d59d9808ea70385632d" + } + Frame { + msec: 3216 + hash: "c4cecc3832935d59d9808ea70385632d" + } + Frame { + msec: 3232 + hash: "c4cecc3832935d59d9808ea70385632d" + } + Frame { + msec: 3248 + hash: "56942f99b8b2a6c491b8635ae5619a4f" + } + Frame { + msec: 3264 + hash: "56942f99b8b2a6c491b8635ae5619a4f" + } + Frame { + msec: 3280 + hash: "56942f99b8b2a6c491b8635ae5619a4f" + } + Frame { + msec: 3296 + hash: "56942f99b8b2a6c491b8635ae5619a4f" + } + Frame { + msec: 3312 + hash: "a3bf780a2ae09fb3fee6215a24b8bb53" + } + Frame { + msec: 3328 + hash: "a3bf780a2ae09fb3fee6215a24b8bb53" + } + Frame { + msec: 3344 + hash: "a3bf780a2ae09fb3fee6215a24b8bb53" + } + Frame { + msec: 3360 + hash: "a3bf780a2ae09fb3fee6215a24b8bb53" + } + Frame { + msec: 3376 + hash: "822cff91269181ddb5a3b24ca0227583" + } + Frame { + msec: 3392 + hash: "822cff91269181ddb5a3b24ca0227583" + } + Frame { + msec: 3408 + hash: "822cff91269181ddb5a3b24ca0227583" + } + Frame { + msec: 3424 + hash: "822cff91269181ddb5a3b24ca0227583" + } + Frame { + msec: 3440 + hash: "20f06bbb130e81d6eb2612aa79bb7968" + } + Frame { + msec: 3456 + hash: "20f06bbb130e81d6eb2612aa79bb7968" + } + Frame { + msec: 3472 + hash: "fcb03904d0e628f95c9b665c65b10266" + } + Frame { + msec: 3488 + hash: "fcb03904d0e628f95c9b665c65b10266" + } + Frame { + msec: 3504 + hash: "fcb03904d0e628f95c9b665c65b10266" + } + Frame { + msec: 3520 + hash: "fcb03904d0e628f95c9b665c65b10266" + } + Frame { + msec: 3536 + hash: "fcb03904d0e628f95c9b665c65b10266" + } + Frame { + msec: 3552 + hash: "1c17eaf20f5c16fea97a263d2aad1918" + } + Frame { + msec: 3568 + hash: "1c17eaf20f5c16fea97a263d2aad1918" + } + Frame { + msec: 3584 + hash: "1c17eaf20f5c16fea97a263d2aad1918" + } + Frame { + msec: 3600 + hash: "1c17eaf20f5c16fea97a263d2aad1918" + } + Frame { + msec: 3616 + hash: "1c17eaf20f5c16fea97a263d2aad1918" + } + Frame { + msec: 3632 + hash: "3c91d205312aefc4af746cea413c9344" + } + Frame { + msec: 3648 + hash: "3c91d205312aefc4af746cea413c9344" + } + Frame { + msec: 3664 + hash: "3c91d205312aefc4af746cea413c9344" + } + Frame { + msec: 3680 + hash: "3c91d205312aefc4af746cea413c9344" + } + Frame { + msec: 3696 + hash: "3c91d205312aefc4af746cea413c9344" + } + Frame { + msec: 3712 + hash: "6cb467aa12d6ae76edbfa324c0ad26d1" + } + Frame { + msec: 3728 + hash: "6cb467aa12d6ae76edbfa324c0ad26d1" + } + Frame { + msec: 3744 + hash: "c8ec3da9c651eadf4aa8a4051d326f91" + } + Frame { + msec: 3760 + hash: "c8ec3da9c651eadf4aa8a4051d326f91" + } + Frame { + msec: 3776 + hash: "c8ec3da9c651eadf4aa8a4051d326f91" + } + Frame { + msec: 3792 + hash: "6cea311c6007463480b71ffd66074557" + } + Frame { + msec: 3808 + hash: "6cea311c6007463480b71ffd66074557" + } + Frame { + msec: 3824 + hash: "6cea311c6007463480b71ffd66074557" + } + Frame { + msec: 3840 + image: "elide2.3.png" + } + Frame { + msec: 3856 + hash: "6e800f4aacf0096f34acdf13678cab25" + } + Frame { + msec: 3872 + hash: "6e800f4aacf0096f34acdf13678cab25" + } + Frame { + msec: 3888 + hash: "fc336a43eaf9974cd6ad82bfee128ead" + } + Frame { + msec: 3904 + hash: "fc336a43eaf9974cd6ad82bfee128ead" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png index 6e2b625..7980f23 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png new file mode 100644 index 0000000..cbfae6e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png new file mode 100644 index 0000000..5e2527e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png new file mode 100644 index 0000000..901551e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png new file mode 100644 index 0000000..32a5ba2 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml index ee06b1a..5d36d48 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-X11/multilength.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "873e914454b7a040b05649ebd1a2f8c5" + hash: "a9dc5058e29f9c129087eaa013002185" } Frame { msec: 32 - hash: "7682a4f1e361ca252da9713734a598e8" + hash: "da0d63697414c19f57235c4d133faf63" } Frame { msec: 48 - hash: "fa8884b550c8df872f96b61557163bcf" + hash: "e3992f5512959c061d53fc3899acec14" } Frame { msec: 64 - hash: "b84ecf9e38f126c3e32defee831d9462" + hash: "e225de5dc21fee719ebc43fa8838f841" } Frame { msec: 80 - hash: "21cc08f22d1f1fcb38b27a3a4259debe" + hash: "a5673b8b7ad5a9d67e785beaaa4c0307" } Frame { msec: 96 - hash: "93bdfeab813e25e85917f49c0d5f1314" + hash: "2c126bf2d794039e1380595b9c40ae2e" } Frame { msec: 112 - hash: "5f03c252602e60fe19879945fa77c203" + hash: "f974072b4863b842b520b4c11c427f5d" } Frame { msec: 128 - hash: "f0b2079f6c512bf80989ebfdbec4cfd8" + hash: "bf06ec5a2c1c46e780cdd0d859b2becb" } Frame { msec: 144 - hash: "9e7bb12d5b7605fc1d78ed9b2a549527" + hash: "3a58b1900912a5a6ace72757f3af4d1a" } Frame { msec: 160 - hash: "242bbbe6da87708c92fd47607ecb789d" + hash: "3fa86df29f53e7f6f65fb6e605f5e705" } Frame { msec: 176 - hash: "f1db5c3a230b4d3e2e1dfefe6bf032a1" + hash: "6d29c12395050b049537819cf0a65746" } Frame { msec: 192 - hash: "a416e820efd8e173cc52372218513e33" + hash: "352a390ab4e3e31b645f025e65885cfc" } Frame { msec: 208 - hash: "df711ab70c6087f8138fded16167f069" + hash: "7c3be9d325f023a356b6ed73332bc804" } Frame { msec: 224 - hash: "fb28eb2eeccfab28299640ef996c1115" + hash: "09dd10566eda09e0366b7bf0a8ce9e1b" } Frame { msec: 240 - hash: "c72c6d79a50dd7147f6b33784880eb36" + hash: "6cafcba107e48f7efe2db60a14c3749d" } Frame { msec: 256 - hash: "4421027e65e95f98499ca53c57220ede" + hash: "a4b6df2874ce48ed5a17aab43f32e665" } Frame { msec: 272 - hash: "b7fbfb90d8cc167809e8e846d9021b4b" + hash: "b6a3df4b704fa7e8284572b9c520b03d" } Frame { msec: 288 - hash: "004614b1bf18e9aa78e78509c4f289aa" + hash: "618c53edf13177d433fdcca5b0cedfaa" } Frame { msec: 304 - hash: "1792bbd8b69bae1d92fed2a6bcfe0187" + hash: "ce96d70a89f7701ce069e93c192196ed" } Frame { msec: 320 - hash: "957a8b95d6e85885d854b8eb1db10b04" + hash: "5826b56af5a4670d479c5f8e649d29d4" } Frame { msec: 336 - hash: "d00c3e4d6d8e8d04b949840c28d73a33" + hash: "5aaf7fc6295d4ab6377bd77e91f73ae8" } Frame { msec: 352 - hash: "2b79feaa62d773d92d8a684685b2004c" + hash: "26cb0b5e60de63d582b4c4d1c4120746" } Frame { msec: 368 - hash: "ef2f11b187028de0c56b23db3168fbc8" + hash: "41b6c379d7fb678abbcccde7bca7f243" } Frame { msec: 384 - hash: "3a489a96aaeca80355313198b935691d" + hash: "46668408674d3e94048375152f991427" } Frame { msec: 400 - hash: "389f1798f900795a8686c38ace755974" + hash: "c966370fbbdd8b32cafc06cdc551e020" } Frame { msec: 416 - hash: "34fc20be52fe3843420819b9adb90b22" + hash: "025aab500846dab22713ccada8f93a51" } Frame { msec: 432 - hash: "fa715c5b6640eafe204bf3b8095c74b9" + hash: "a6a68f04ea34fba46025a1415dc46bbb" } Frame { msec: 448 - hash: "8e8315edcf23167ac58228b8c28b43e6" + hash: "1afc5b8b094056695b09088d13ab1612" } Frame { msec: 464 - hash: "c18e82038f57dd869112cb1be14e4cfe" + hash: "efff72e37e0c23e0cd51169d0c06c065" } Frame { msec: 480 - hash: "3f07e95b09e39f2e5d93216850f4a4d9" + hash: "ed425b23ea5340ac5b176b4fbb377fe3" } Frame { msec: 496 - hash: "20f0e6eaeac04d6f93565adfab485218" + hash: "9df20063ec67aa06e44bf292f05469a6" } Frame { msec: 512 - hash: "e3f66d1dfe88dd868a54a8493828ef5f" + hash: "d3400c655403d00df7e202a42b75476d" } Frame { msec: 528 - hash: "d39d34f63e1b29c187249cb388552b38" + hash: "336fd54ae209ba7c28a69939a021341b" } Frame { msec: 544 - hash: "5d2e8df5003732f3b53fff4aaddea06c" + hash: "621c3b64fc6214b8a48c216d46d5615d" } Frame { msec: 560 - hash: "35c3aa2dae481a8f817d849b3f3151f2" + hash: "5f9ac0b6830dbfa4cba83adc0cce232f" } Frame { msec: 576 - hash: "966b78018879224948b4d85fe73d7985" + hash: "2b829253ed85f5ffe5e3867accadd218" } Frame { msec: 592 - hash: "0db067bf9debc3f36dd539cf83652fb8" + hash: "61325a770fb501d88f6bb2700294ca44" } Frame { msec: 608 - hash: "ea1c3249ffd2439533907ceaeaafbc56" + hash: "807dea2954afa902694b1ef98ef5f2c1" } Frame { msec: 624 - hash: "da85c0e14b95ca9a729984b67ebd52ad" + hash: "43edc754d8155c198dd1db6d55d25abf" } Frame { msec: 640 - hash: "5c26ae844ac52dbe131fed0638787aac" + hash: "4c800c2b8ab7b1500e80f50ee925b73b" } Frame { msec: 656 - hash: "4b09c23ad624db80afcb2a6c1d5ddb96" + hash: "17b60d375c02b55923b94b147015bc7d" } Frame { msec: 672 - hash: "9995deb3d22b418a19093b4b988b3fcc" + hash: "591e79b034700b514c84894e0fc27e27" } Frame { msec: 688 - hash: "77e53358f2d4392d0ba988187e7e272c" + hash: "61624e674a0994cedae75b2e56958612" } Frame { msec: 704 - hash: "3fbbb73e790cf4a0583531fe1580f761" + hash: "7f662b3978191ef5812ccad4d1d687b8" } Frame { msec: 720 - hash: "9d562e141095a258ee61463e644d9889" + hash: "d07560950476d08ce51661356ea53753" } Frame { msec: 736 - hash: "d05633ca49f96bf327bed5c9c0f6ac98" + hash: "1cbbf48c54d373bbb3fdfe42fe8396b7" } Frame { msec: 752 - hash: "34c38e40e831dbede8fa83de31ed76aa" + hash: "f95205fb90069a13ab395d7a3e1775ad" } Frame { msec: 768 - hash: "288e52c8be54f4914f687cef4ce1f24a" + hash: "f40a57afb29c1cc161f71a1b134a5d0d" } Frame { msec: 784 - hash: "0b8b744aaf67e8b17fa459bb0ffb6db5" + hash: "3311a6a6197df79e5fcf2a1729368618" } Frame { msec: 800 - hash: "273dbe3e8c21bfeafa516d07778928c8" + hash: "597ae977e27d0cac57b1fc8b0564a15b" } Frame { msec: 816 - hash: "ef94ee1885287c72fa78038547d98b96" + hash: "aca451b1a1e8f727315f8d13d4b21aec" } Frame { msec: 832 - hash: "965e6387672319ac04fdc42768e581f1" + hash: "c0437b88a05a7aa1b7b645b5151773d7" } Frame { msec: 848 - hash: "95553d8aaece94c7017e57b03cd46c9a" + hash: "be8659747f0b6e76acaf17851b599b7b" } Frame { msec: 864 - hash: "bdaf35b920e5b08b8639d452afd2d51e" + hash: "2b0033b95e853368cff2d6032ff707f6" } Frame { msec: 880 - hash: "0ed16f00e89327dc8679bec42179c4ce" + hash: "12a747305311ea86ce681a3ff56f394f" } Frame { msec: 896 - hash: "8c93e0ac399e09e98e34b90654e0e42a" + hash: "00b041e67e3ac3e1678eae72580107f7" } Frame { msec: 912 - hash: "93798fbb33adb6c813018757cfa34017" + hash: "09f69db7a724401388e4b7fefeb3df89" } Frame { msec: 928 - hash: "db4d7581e9a1f082a2c29ef7482a7893" + hash: "15e96d009e101d6869d1cc69e0a9092a" } Frame { msec: 944 - hash: "67e074c1e083334de84a3549f4ee9ca4" + hash: "b1a900f6ca81bf556ef126211afb8b0c" } Frame { msec: 960 @@ -246,58 +246,1078 @@ VisualTest { } Frame { msec: 976 - hash: "b1122c815a755c9988bcf03a3f7d7d6d" + hash: "87ea64b511b6d990f66cd4e3a141caf2" } Frame { msec: 992 - hash: "31148bae6653bdc3f1827d06de845663" + hash: "cc5281bca844570d36ab193ba074dfcb" } Frame { msec: 1008 - hash: "812428a944086ca46e102891964dac69" + hash: "cf430f604050734c455206b974587d76" } Frame { msec: 1024 - hash: "ee7bb66bd7e8623325200ac994f8b41a" + hash: "b10b053a551dda58e626062b6721009f" } Frame { msec: 1040 - hash: "6bd21a98e5c373a2c78334a0255e7750" + hash: "0ab24cb42bf4db645c779a48a060919d" } Frame { msec: 1056 - hash: "2e8e1eea14068b0e82464ed52ec1ab7a" + hash: "0cba8d41e70c3ab23c55d02328954fd3" } Frame { msec: 1072 - hash: "6dca5756e20eeb778e31d7b602ce77d7" + hash: "1f25027c81418c8f511d3d866948ea97" } Frame { msec: 1088 - hash: "3cbb6700b9e30864a2b1e3d4d71d2a78" + hash: "d4ef5c5de73e515ea3eb841d87d3916c" } Frame { msec: 1104 - hash: "c4d0230d2c4f73191a514e5df4c0b083" + hash: "bbdb93e72c966b3801cbc27a42f0e29f" } Frame { msec: 1120 - hash: "a33df967fe43151dfc503d2ac78f8ca8" + hash: "f2b12153d449e6b2476af44272b6d54f" } Frame { msec: 1136 - hash: "0c7ff101efe60b600cacaf8d04d79053" + hash: "5605809550a9c5151d3f6eb04de76587" } Frame { msec: 1152 - hash: "d246cfb75d89b9666877860aaf45ba60" + hash: "c887e88030c58144e6bb253e369b3bac" } Frame { msec: 1168 - hash: "1130998aa2618a29ec6bc4b9219eedfa" + hash: "9d9f4aaea9d55118fac9cf78e6785ef7" } Frame { msec: 1184 - hash: "741dd83003633bbf8d28c2d4ddd8a2d0" + hash: "08dcb6457d8556aec27fdd38095f9058" + } + Frame { + msec: 1200 + hash: "45052b296f95976b22d5933ced4e259c" + } + Frame { + msec: 1216 + hash: "3bae979929efc4e3e315f3b00eb8da49" + } + Frame { + msec: 1232 + hash: "af52455d0e2d8e30a4c27aaa58d61702" + } + Frame { + msec: 1248 + hash: "760a6b74a31adb04f220e4bb7457bc2b" + } + Frame { + msec: 1264 + hash: "bfb0d7dab25007c20a45f98f69fa97ff" + } + Frame { + msec: 1280 + hash: "eac34dc1254c606a7b866e25967796dd" + } + Frame { + msec: 1296 + hash: "f2577d86f3b90ff49339e9eb208b2b55" + } + Frame { + msec: 1312 + hash: "11beecfe87619f1c90ab1aa79e5cc0d9" + } + Frame { + msec: 1328 + hash: "8f721400a444750f11a9f6a5b1f9b1f1" + } + Frame { + msec: 1344 + hash: "be5082d93788b91f251a174b2889b58f" + } + Frame { + msec: 1360 + hash: "22527c1c29923577e90f506745230573" + } + Frame { + msec: 1376 + hash: "a6ab98f02be95359a939a7841123ef17" + } + Frame { + msec: 1392 + hash: "c23c3352261f3c94e5f329b6a872dda2" + } + Frame { + msec: 1408 + hash: "0b4987678b416bafd922c47d2b540fe1" + } + Frame { + msec: 1424 + hash: "8e3335e136e7ff01df146dcba4ae49c2" + } + Frame { + msec: 1440 + hash: "28d20b81feb20325613d5a5d16238eb3" + } + Frame { + msec: 1456 + hash: "04405979c68d1354f8b3fff03ad5ff5f" + } + Frame { + msec: 1472 + hash: "51929671bccb25ec5fd9d6d6df29483b" + } + Frame { + msec: 1488 + hash: "4bc938a8620242ca07e73adcd0219934" + } + Frame { + msec: 1504 + hash: "73f5ddd56c836813a2754cefcddcecaa" + } + Frame { + msec: 1520 + hash: "08ab374f2911207dddddf4cf18d26769" + } + Frame { + msec: 1536 + hash: "0a91b4c009079159340040067dfc0cc8" + } + Frame { + msec: 1552 + hash: "bdd54a222ba5bc0deb97e26071732e68" + } + Frame { + msec: 1568 + hash: "1b75d3b34f7fd74451d22d03dd7e4e65" + } + Frame { + msec: 1584 + hash: "a34ad1878b0bd1316d4ceb0c22709c6f" + } + Frame { + msec: 1600 + hash: "8a25b513f0c6371e81065f3f0594ddfe" + } + Frame { + msec: 1616 + hash: "09063acfe8bf1cbc521cd84ecd718930" + } + Frame { + msec: 1632 + hash: "6607cab8e4b4b6a1671cdf63582b625b" + } + Frame { + msec: 1648 + hash: "5662b3252b5dd640ce9055ff11c11e47" + } + Frame { + msec: 1664 + hash: "2267ff61b2af23a15d6d5263d52c3ecb" + } + Frame { + msec: 1680 + hash: "99d86069a3ea0c49a8f37f5124f2850b" + } + Frame { + msec: 1696 + hash: "acfa238bcb12c6197acb990aa4ddc03f" + } + Frame { + msec: 1712 + hash: "6c4c804f6e0e46fcfe25b04836db80f7" + } + Frame { + msec: 1728 + hash: "5c1868d36ad767cd9923fab8605220dd" + } + Frame { + msec: 1744 + hash: "a1279c79d3be6a62b5aebff4c66971e5" + } + Frame { + msec: 1760 + hash: "f1d9f03f77b224ec355d4b5ae1ef8551" + } + Frame { + msec: 1776 + hash: "3ad06495838986ef570f1c0f9d9f4a52" + } + Frame { + msec: 1792 + hash: "e4122ccbc4da03797738a949654fb555" + } + Frame { + msec: 1808 + hash: "0178b04a0c2e91b5a409c28a2b3c4cca" + } + Frame { + msec: 1824 + hash: "04b3fdd361985d1f108551dafca851f6" + } + Frame { + msec: 1840 + hash: "f7e8e73dcb009fc160122b64f2e4857e" + } + Frame { + msec: 1856 + hash: "e8575db453082b6601107b20ec15fb86" + } + Frame { + msec: 1872 + hash: "18b8bc3993275a0a1e096084ada871f0" + } + Frame { + msec: 1888 + hash: "1a1229d6c945cc1a0df7ca4ac61dfff0" + } + Frame { + msec: 1904 + hash: "bf43232fccfedfca1cac48206cacfaf2" + } + Frame { + msec: 1920 + image: "multilength.1.png" + } + Frame { + msec: 1936 + hash: "c0c2396b5e5dc36853a28d6c5a6274f3" + } + Frame { + msec: 1952 + hash: "9b49951115444bf17e96ded2837e5eff" + } + Frame { + msec: 1968 + hash: "422d01a547ce612233bfa5e85bf73c7f" + } + Frame { + msec: 1984 + hash: "fe2cb2fb4aefb5da1cf27e709a0acd5f" + } + Frame { + msec: 2000 + hash: "e106fbd81f7a057e3bf5d8a42c92e4f1" + } + Frame { + msec: 2016 + hash: "b1b60361a929ccb109a9e9e8a10065d0" + } + Frame { + msec: 2032 + hash: "35858a35e56a48804d3cedda908ca2eb" + } + Frame { + msec: 2048 + hash: "a8fb42ed2c55d3396133acf28064283c" + } + Frame { + msec: 2064 + hash: "479291530784175abc7d564ac2319d2a" + } + Frame { + msec: 2080 + hash: "75e7b2930143d610659cf42a3604374e" + } + Frame { + msec: 2096 + hash: "3d9438b11c89d76353943e5d2f656e7d" + } + Frame { + msec: 2112 + hash: "cb23d7c508c8e3169bab39aaa4de01fd" + } + Frame { + msec: 2128 + hash: "bc7805e391bc272a837c9b1df9cf8f77" + } + Frame { + msec: 2144 + hash: "020d270f6a93e05dacd70a2b41a3ea8a" + } + Frame { + msec: 2160 + hash: "8f23f9ea2fa630111f0481b6a6ec09a6" + } + Frame { + msec: 2176 + hash: "6b42c823da044ae69d9600260d7437e6" + } + Frame { + msec: 2192 + hash: "d31e1a434a9fcd12e439640776f8c8be" + } + Frame { + msec: 2208 + hash: "48bb7782d57e195d3f0f3dfb25fed571" + } + Frame { + msec: 2224 + hash: "76922f380f3c6c83edb5ff2a4208a4d0" + } + Frame { + msec: 2240 + hash: "9027d61a3b91a9f56230f4ee740b6db8" + } + Frame { + msec: 2256 + hash: "043455a71c91e3d65f1eed632b152fea" + } + Frame { + msec: 2272 + hash: "6bfc058bd9f8986d306606f8c7b06ae2" + } + Frame { + msec: 2288 + hash: "49f1e17d33f1ac690bcac7e85668cb3b" + } + Frame { + msec: 2304 + hash: "2090befb760a16d73bea960a6e835405" + } + Frame { + msec: 2320 + hash: "e99382309c4419f38642333386595211" + } + Frame { + msec: 2336 + hash: "2c7a49bcb6eca031984d7a96b607d402" + } + Frame { + msec: 2352 + hash: "b55be701b19739713d532f3d6cbd5393" + } + Frame { + msec: 2368 + hash: "fdad916849eeae7b9b276f57bb022321" + } + Frame { + msec: 2384 + hash: "e3a8dd9da5c767a60dab121fb3a2811b" + } + Frame { + msec: 2400 + hash: "73262e2250337b8f02d8e672b66ae273" + } + Frame { + msec: 2416 + hash: "84dca99c97f837ecfb9b3195db556687" + } + Frame { + msec: 2432 + hash: "4f82d7a5f3b286a2d8ccc0a07c35a1a0" + } + Frame { + msec: 2448 + hash: "63f6eec01262783a421040dd44740577" + } + Frame { + msec: 2464 + hash: "e98f39a3a9379155081014cdf761c055" + } + Frame { + msec: 2480 + hash: "c084db070c74596551190dd49dfc2ed2" + } + Frame { + msec: 2496 + hash: "f6866290d95f0d85fcf05de39bcadcc7" + } + Frame { + msec: 2512 + hash: "d919eb26a2d8874ed1e4051769b525c6" + } + Frame { + msec: 2528 + hash: "1967d42c7a23b8d11e6accf27de24ce7" + } + Frame { + msec: 2544 + hash: "2fe4f7fe66f820b2738598e85da9f0b9" + } + Frame { + msec: 2560 + hash: "4fa2b66d2d4beaa56ed8c387b62f4817" + } + Frame { + msec: 2576 + hash: "eef73ebb85223a5f99b5f5ec7dfaae94" + } + Frame { + msec: 2592 + hash: "acb7a8c1939633f16e8b7989b2d598c2" + } + Frame { + msec: 2608 + hash: "b5e67eb3ace1d1d7f9fa1f1c907bd442" + } + Frame { + msec: 2624 + hash: "552035a9d76f4dd65d86533535c00a5d" + } + Frame { + msec: 2640 + hash: "d2e25e33232ec8ddd326818fabf15a65" + } + Frame { + msec: 2656 + hash: "65c4dfbb48c1c9115c37ed5c294d7bd1" + } + Frame { + msec: 2672 + hash: "3aceb756fa460a767194f2923871e2d3" + } + Frame { + msec: 2688 + hash: "759a7bd99c6e630929216eb89f6b27fa" + } + Frame { + msec: 2704 + hash: "81aa0091d86f745bcddd279473df1f8d" + } + Frame { + msec: 2720 + hash: "cce5b12ab54251ea6df458d492bc92e9" + } + Frame { + msec: 2736 + hash: "5637b7aeb8b9d754e0a96b6f5d0dcb03" + } + Frame { + msec: 2752 + hash: "ad7644a8994888bc562590ff8942eabf" + } + Frame { + msec: 2768 + hash: "490a3da685f73c45f4be697c3f37ccd1" + } + Frame { + msec: 2784 + hash: "190cc35ecc32ed8ea6ebd135fb8d7a00" + } + Frame { + msec: 2800 + hash: "89511367c186947f9173dc30932c4454" + } + Frame { + msec: 2816 + hash: "880c05184406232db9d3830e46d47bd7" + } + Frame { + msec: 2832 + hash: "db907e2573c385bc2545cfba4fda4be1" + } + Frame { + msec: 2848 + hash: "c96ad05fd3ab4cd71d33738448029e0c" + } + Frame { + msec: 2864 + hash: "112ecf3b2fcd5919402842044d052272" + } + Frame { + msec: 2880 + image: "multilength.2.png" + } + Frame { + msec: 2896 + hash: "dc1aa5563a76f20d8200fbd9794b3249" + } + Frame { + msec: 2912 + hash: "3f72adedabe9e2896750e2738df71566" + } + Frame { + msec: 2928 + hash: "3f78a5a9312126e6a6ca699886dd05d0" + } + Frame { + msec: 2944 + hash: "75a199efbdf119abbc1598137e974e28" + } + Frame { + msec: 2960 + hash: "e4d068e2ba9c65a0e910faf431e4df7e" + } + Frame { + msec: 2976 + hash: "817e686a44b4eaced58c251facd5e89d" + } + Frame { + msec: 2992 + hash: "0c5e7217f5b68e0b2158c512f66177c2" + } + Frame { + msec: 3008 + hash: "253a765019170fe4f649825b4cd17832" + } + Frame { + msec: 3024 + hash: "cf3f774316868179f6766e5dbdab2b17" + } + Frame { + msec: 3040 + hash: "7cf30923200a9b8524909bdfbb20b33c" + } + Frame { + msec: 3056 + hash: "1dd14bc90dfab3d8864c177e56c25b63" + } + Frame { + msec: 3072 + hash: "aaa4074319d1656b58f874d6843e66c4" + } + Frame { + msec: 3088 + hash: "b2a3479eb8087138f20b0dbd539f0592" + } + Frame { + msec: 3104 + hash: "1ab4358f6008ce87a5b1c6a54d04b343" + } + Frame { + msec: 3120 + hash: "4425e58b30da6edd1730421e990dd6e7" + } + Frame { + msec: 3136 + hash: "9b4e62af65c064ca2fe4de5d03255b56" + } + Frame { + msec: 3152 + hash: "edf9b8b0cc18942b23c03ee1ed837dd6" + } + Frame { + msec: 3168 + hash: "b05a1bc33ce2e4c2383f7ecc9544020c" + } + Frame { + msec: 3184 + hash: "73304724e5b4d7c556859da310c31a0a" + } + Frame { + msec: 3200 + hash: "4cf88e365cd9651e2fb86452ff81e4be" + } + Frame { + msec: 3216 + hash: "7b42902b17781f98075bfdf50950addd" + } + Frame { + msec: 3232 + hash: "8806b9cb7e352a67b23085593b61606b" + } + Frame { + msec: 3248 + hash: "d2fdf78fa3b7261683f2ed4f2dee62c8" + } + Frame { + msec: 3264 + hash: "dafa72fd7aae2c9bfa5f6aa2694235d2" + } + Frame { + msec: 3280 + hash: "d784b9b39ab063ab68b85d6485257ce0" + } + Frame { + msec: 3296 + hash: "991ef068c26b304fb19d03fdfeb2e3f4" + } + Frame { + msec: 3312 + hash: "c6014d497f4db9121c539a53115a847f" + } + Frame { + msec: 3328 + hash: "88c778d811febd165e28ae7698f774b8" + } + Frame { + msec: 3344 + hash: "51fbf553794b8a2303d2e0dff44c80fa" + } + Frame { + msec: 3360 + hash: "ba1abdcf3a04231ce9439cb6d93e8717" + } + Frame { + msec: 3376 + hash: "56a5d2fe8af1ef1e08ce545eb65e6ba0" + } + Frame { + msec: 3392 + hash: "8337eb7d11500676921de0b13812ca02" + } + Frame { + msec: 3408 + hash: "8f50f53ed00ad9b9bbf9423b3274efa7" + } + Frame { + msec: 3424 + hash: "bf5ca931d00d3dc4fcfe5e93d08bde2f" + } + Frame { + msec: 3440 + hash: "f2619492bbb96bd3958f4d61bb23c42e" + } + Frame { + msec: 3456 + hash: "3b1afefbc7e0990059bd3990f17a7312" + } + Frame { + msec: 3472 + hash: "30041f2cb8c071e7dc8f9c8ef1e49743" + } + Frame { + msec: 3488 + hash: "f8bef9f28823fdebec0b39e1044ac03c" + } + Frame { + msec: 3504 + hash: "4c0282e6a48dbbcdbbffde55457eee12" + } + Frame { + msec: 3520 + hash: "7956ea76120b9292b2f3c6123187ac0e" + } + Frame { + msec: 3536 + hash: "dce82656442ff1a0823bac5ded7c0290" + } + Frame { + msec: 3552 + hash: "96151e49fd0f07817d27583c22afe30f" + } + Frame { + msec: 3568 + hash: "262a38546540ecb81065cbdbace4fa28" + } + Frame { + msec: 3584 + hash: "4ea3a1a93be2ef25ca6f05d144b50d3b" + } + Frame { + msec: 3600 + hash: "77d321f837b720d4e63fb028e885dce7" + } + Frame { + msec: 3616 + hash: "e0e40d426a13ef3d9caa6ba474a1a460" + } + Frame { + msec: 3632 + hash: "6bd5645b808206dd9a4e9c0e423db06b" + } + Frame { + msec: 3648 + hash: "791538cf21cfa32ab4595137a655e0a3" + } + Frame { + msec: 3664 + hash: "59266a6f73c217f0c68f7dac69d4b25d" + } + Frame { + msec: 3680 + hash: "ee730ce23e84942c5fe2587ce0ecd3f6" + } + Frame { + msec: 3696 + hash: "b1353eee7a68d1ab0057ab7a6dd0774c" + } + Frame { + msec: 3712 + hash: "0ea828127568afa52ecc31e335e69d11" + } + Frame { + msec: 3728 + hash: "d95fc327253500563d0e05a4b80a7c8a" + } + Frame { + msec: 3744 + hash: "e3aff011332ccf9cbebbff2803733038" + } + Frame { + msec: 3760 + hash: "27ee147b62bfa2d1183321bba3ccb8d3" + } + Frame { + msec: 3776 + hash: "245578d636b5486da0210a0dd7b84a80" + } + Frame { + msec: 3792 + hash: "87be77d90d9e7a2d282026e63d14ddfd" + } + Frame { + msec: 3808 + hash: "25cf672e69b7c61eab9f53437b40956e" + } + Frame { + msec: 3824 + hash: "10606e7b0ecb8ec204fe025aece90004" + } + Frame { + msec: 3840 + image: "multilength.3.png" + } + Frame { + msec: 3856 + hash: "a3c411c8c3da3975205994a7da97320f" + } + Frame { + msec: 3872 + hash: "1491ce2867ad4f116e705d259b773550" + } + Frame { + msec: 3888 + hash: "8f2fe6175fa45213d84e4c0b0b7cb4a7" + } + Frame { + msec: 3904 + hash: "bc77ad13f5015fc1b5bb85dc51b207b3" + } + Frame { + msec: 3920 + hash: "5fb9a7834a5358077952c20ca025fcf0" + } + Frame { + msec: 3936 + hash: "09ba094e2cfb1033019e85f66910a593" + } + Frame { + msec: 3952 + hash: "43db976e63a8fd71da67198942aa7943" + } + Frame { + msec: 3968 + hash: "6298a0aa4b84ee1722d83897b3553fe1" + } + Frame { + msec: 3984 + hash: "6b87ba7d3fe468229b29cd28590e17b1" + } + Frame { + msec: 4000 + hash: "1b4e219629a1f19b135544ac2e961788" + } + Frame { + msec: 4016 + hash: "087e95cbd0549be1bbe4a32520858514" + } + Frame { + msec: 4032 + hash: "2c51a434fc3633623e10bedeba4e260d" + } + Frame { + msec: 4048 + hash: "f29b87d80779a7f4d38e8058d984c386" + } + Frame { + msec: 4064 + hash: "b8055e4b3c2ee551a7becf176cd173e3" + } + Frame { + msec: 4080 + hash: "3c35391e1c1d230e0a085cb7f7f0e8ef" + } + Frame { + msec: 4096 + hash: "dd8a63cdeefc6ce5a35ceb700f7b3755" + } + Frame { + msec: 4112 + hash: "5b4a322f768d426a56a82d714cf4f705" + } + Frame { + msec: 4128 + hash: "08830f630c15419d79c459891a8fff64" + } + Frame { + msec: 4144 + hash: "84c90e454dcdbf00c441ff326760d2cd" + } + Frame { + msec: 4160 + hash: "17c7311faee569b077f85848f7155319" + } + Frame { + msec: 4176 + hash: "17b5aeff8f03828c1851a6b984d4e69e" + } + Frame { + msec: 4192 + hash: "3bcc28ab875d3b5f62df0d5cede3e850" + } + Frame { + msec: 4208 + hash: "a4c861d766af1378e21a91a6e1bca06d" + } + Frame { + msec: 4224 + hash: "fa6e17c9c35c41ac5270a55f0cc4dcd2" + } + Frame { + msec: 4240 + hash: "48d8c7ce0b6f2e9840a2f5cb40e41449" + } + Frame { + msec: 4256 + hash: "713a391414fffe3cf01248e7c0919d71" + } + Frame { + msec: 4272 + hash: "472282080ae357f5fb0dac1bf411f6f5" + } + Frame { + msec: 4288 + hash: "660d37f1b3c5dd6e2de22ad2be818675" + } + Frame { + msec: 4304 + hash: "334f12d83fdc7bd8f3d97697061a75f8" + } + Frame { + msec: 4320 + hash: "4bfe83273913bad702290db2b1c81d52" + } + Frame { + msec: 4336 + hash: "9ddc0238b0fbb42c503da8782d750d81" + } + Frame { + msec: 4352 + hash: "43081559ed8f1d62baed1ab5dde34c5c" + } + Frame { + msec: 4368 + hash: "4bf955a94901588cf37a1fe9b82feef3" + } + Frame { + msec: 4384 + hash: "3a3a987096f2a11f495af4ee20c2452b" + } + Frame { + msec: 4400 + hash: "290647a4f73c42ea33f841281bf6f3d6" + } + Frame { + msec: 4416 + hash: "1a18f4f658997710aa7be9409c75a602" + } + Frame { + msec: 4432 + hash: "1bc52bc68633464654410f59bf97142b" + } + Frame { + msec: 4448 + hash: "33e3a5e0ec745046f7a7cceffd516a71" + } + Frame { + msec: 4464 + hash: "7e61c48d2e0e6e195d527d6aeb4ffe8c" + } + Frame { + msec: 4480 + hash: "42c42f7e02f6cd72afa92cf97494a1eb" + } + Frame { + msec: 4496 + hash: "d1876d371284e41f4d553a470a9970fb" + } + Frame { + msec: 4512 + hash: "479960a289b598591a4bf3c66dc6258a" + } + Frame { + msec: 4528 + hash: "0ea8965e095c73499b5abc4ac44e07ef" + } + Frame { + msec: 4544 + hash: "cc7fe014a856896ce3871743e552d6f2" + } + Frame { + msec: 4560 + hash: "5b3cd6bec24ae4a215ec28651e9a3ed0" + } + Frame { + msec: 4576 + hash: "63d60a2c6d27e30dda001c202446d221" + } + Frame { + msec: 4592 + hash: "22f30d377fb90c433881d17211a9f9bd" + } + Frame { + msec: 4608 + hash: "acfbf010e93723185792009ed372ccb9" + } + Frame { + msec: 4624 + hash: "91f3335706d5037d9c579091e29d1219" + } + Frame { + msec: 4640 + hash: "83ad6be4ecaa6495b25f9b55bb11796a" + } + Frame { + msec: 4656 + hash: "39a68ee7f4ddb8059ef42eb9e42b7659" + } + Frame { + msec: 4672 + hash: "0ad1facc49beaa2c3510fe1612ba3b4f" + } + Frame { + msec: 4688 + hash: "d780a7f3dc1a313d462084fffda989c7" + } + Frame { + msec: 4704 + hash: "0f1ad6155d4ed2a11d2fa91c63b62678" + } + Frame { + msec: 4720 + hash: "26f4bb010704911d87b96a9f31a0a121" + } + Frame { + msec: 4736 + hash: "7772aaabb6418d71fb7566a0aac4279f" + } + Frame { + msec: 4752 + hash: "47bf1ec73915b369d653ff71ce7758da" + } + Frame { + msec: 4768 + hash: "fcc1ed23c1678bf1b11bf59dbaba5186" + } + Frame { + msec: 4784 + hash: "0d66fbc0b99c35dae53e1026c2041252" + } + Frame { + msec: 4800 + image: "multilength.4.png" + } + Frame { + msec: 4816 + hash: "d1fbba4331fd640a40fe7e07fcfce20b" + } + Frame { + msec: 4832 + hash: "f79f9ac08c779fd1646450ef4cc21f01" + } + Frame { + msec: 4848 + hash: "2095da58125d29b815c44ec9a22598d3" + } + Frame { + msec: 4864 + hash: "01d4805a90443a6c20a5ae2cb83ec151" + } + Frame { + msec: 4880 + hash: "f329ce7199c2137e8c32a25f96ee5c6b" + } + Frame { + msec: 4896 + hash: "72c0c2c7660974827acc1fcb54e7ca6c" + } + Frame { + msec: 4912 + hash: "6902d2a637733171699684baf07bb86e" + } + Frame { + msec: 4928 + hash: "615683e3bc07792ee38ca8146657a88a" + } + Frame { + msec: 4944 + hash: "9fe981f60fd1d974f063fccd2ae205ab" + } + Frame { + msec: 4960 + hash: "b403e21b14646ac0cdaee2027125c0ad" + } + Frame { + msec: 4976 + hash: "d037545cc68b7582c400c8c9da49ff2a" + } + Frame { + msec: 4992 + hash: "551435ecb008ff217eb65a5a77a28090" + } + Frame { + msec: 5008 + hash: "a1684c1c0938386bbfb309969114beee" + } + Frame { + msec: 5024 + hash: "a9dc5058e29f9c129087eaa013002185" + } + Frame { + msec: 5040 + hash: "5d06ae83ab9cc218175013042922b908" + } + Frame { + msec: 5056 + hash: "e225de5dc21fee719ebc43fa8838f841" + } + Frame { + msec: 5072 + hash: "b89bf31a945cb6c880e95bf2d2a6e944" + } + Frame { + msec: 5088 + hash: "fa54db3c383bc1da121c0d3b09e942d3" + } + Frame { + msec: 5104 + hash: "2c126bf2d794039e1380595b9c40ae2e" + } + Frame { + msec: 5120 + hash: "1e9639693e5ec1edb72e71d126c434bb" + } + Frame { + msec: 5136 + hash: "3a58b1900912a5a6ace72757f3af4d1a" + } + Frame { + msec: 5152 + hash: "11a846d93430e622a9750e4e2a7b76fe" + } + Frame { + msec: 5168 + hash: "801d7707e86b776fe2459c42b26337f5" + } + Frame { + msec: 5184 + hash: "6d29c12395050b049537819cf0a65746" + } + Frame { + msec: 5200 + hash: "5a68af870474ffb8a694710b10f52bc7" + } + Frame { + msec: 5216 + hash: "09dd10566eda09e0366b7bf0a8ce9e1b" + } + Frame { + msec: 5232 + hash: "f43b377f99f74e2cf07e419887f7ee0b" + } + Frame { + msec: 5248 + hash: "108287fc253d36a5ebf8582ef2a5fd57" + } + Frame { + msec: 5264 + hash: "a4b6df2874ce48ed5a17aab43f32e665" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.0.png deleted file mode 100644 index 1a8c89b..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.qml deleted file mode 100644 index 3b8ae0c..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide.qml +++ /dev/null @@ -1,279 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 32 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 48 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 64 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 80 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 96 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 112 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 128 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 144 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 160 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 176 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 192 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 208 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 224 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 240 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 256 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 272 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 288 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 304 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 320 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 336 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 352 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 368 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 384 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 400 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 416 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 432 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 448 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 464 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 480 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 496 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 512 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 528 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 544 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 560 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 576 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 592 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 608 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 624 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 640 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 656 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 672 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 688 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 704 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 720 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 736 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 752 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 768 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 784 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 800 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 816 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 832 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 848 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 864 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 880 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 896 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 912 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 928 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 944 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 960 - image: "elide.0.png" - } - Frame { - msec: 976 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 992 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 1008 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 1024 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 1040 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } - Frame { - msec: 1056 - hash: "c80d2bcd4be99c73e6c628870206ce8c" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.0.png deleted file mode 100644 index 3dfade5..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.1.png deleted file mode 100644 index 1ee2076..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.2.png deleted file mode 100644 index ae680be..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.3.png deleted file mode 100644 index c2859be..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.qml deleted file mode 100644 index 27fbaf4..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data/elide2.qml +++ /dev/null @@ -1,991 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 32 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 48 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 64 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 80 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 96 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 112 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 128 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 144 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 160 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 176 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 192 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 208 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 224 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 240 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 256 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 272 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 288 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 304 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 320 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 336 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 352 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 368 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 384 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 400 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 416 - hash: "086a46352aa1221b5e57f5624b0c256b" - } - Frame { - msec: 432 - hash: "fc3a7e898d6bfa2af4d774b20609f967" - } - Frame { - msec: 448 - hash: "fc3a7e898d6bfa2af4d774b20609f967" - } - Frame { - msec: 464 - hash: "fc3a7e898d6bfa2af4d774b20609f967" - } - Frame { - msec: 480 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" - } - Frame { - msec: 496 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" - } - Frame { - msec: 512 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" - } - Frame { - msec: 528 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" - } - Frame { - msec: 544 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" - } - Frame { - msec: 560 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" - } - Frame { - msec: 576 - hash: "4daa612cd7e7ee455ff1a93329202865" - } - Frame { - msec: 592 - hash: "4daa612cd7e7ee455ff1a93329202865" - } - Frame { - msec: 608 - hash: "4daa612cd7e7ee455ff1a93329202865" - } - Frame { - msec: 624 - hash: "4daa612cd7e7ee455ff1a93329202865" - } - Frame { - msec: 640 - hash: "4daa612cd7e7ee455ff1a93329202865" - } - Frame { - msec: 656 - hash: "3f362ad550db910f1d9f261557c65913" - } - Frame { - msec: 672 - hash: "3f362ad550db910f1d9f261557c65913" - } - Frame { - msec: 688 - hash: "f159011c2b85fe212a32a7b5d2a57016" - } - Frame { - msec: 704 - hash: "f159011c2b85fe212a32a7b5d2a57016" - } - Frame { - msec: 720 - hash: "f159011c2b85fe212a32a7b5d2a57016" - } - Frame { - msec: 736 - hash: "f159011c2b85fe212a32a7b5d2a57016" - } - Frame { - msec: 752 - hash: "f159011c2b85fe212a32a7b5d2a57016" - } - Frame { - msec: 768 - hash: "f159011c2b85fe212a32a7b5d2a57016" - } - Frame { - msec: 784 - hash: "a892c67199c23e5d9012a6a24cb45d16" - } - Frame { - msec: 800 - hash: "a892c67199c23e5d9012a6a24cb45d16" - } - Frame { - msec: 816 - hash: "a892c67199c23e5d9012a6a24cb45d16" - } - Frame { - msec: 832 - hash: "532e01ed6ede95eca68e641e2edb7f1c" - } - Frame { - msec: 848 - hash: "532e01ed6ede95eca68e641e2edb7f1c" - } - Frame { - msec: 864 - hash: "532e01ed6ede95eca68e641e2edb7f1c" - } - Frame { - msec: 880 - hash: "532e01ed6ede95eca68e641e2edb7f1c" - } - Frame { - msec: 896 - hash: "532e01ed6ede95eca68e641e2edb7f1c" - } - Frame { - msec: 912 - hash: "a7dc1d7dde956d62834de0968261386f" - } - Frame { - msec: 928 - hash: "a7dc1d7dde956d62834de0968261386f" - } - Frame { - msec: 944 - hash: "a7dc1d7dde956d62834de0968261386f" - } - Frame { - msec: 960 - image: "elide2.0.png" - } - Frame { - msec: 976 - hash: "a7dc1d7dde956d62834de0968261386f" - } - Frame { - msec: 992 - hash: "a590e1358fac567dda9fdfc6bfe4ab89" - } - Frame { - msec: 1008 - hash: "a590e1358fac567dda9fdfc6bfe4ab89" - } - Frame { - msec: 1024 - hash: "778d34ca89b5db88fe26619576e9d337" - } - Frame { - msec: 1040 - hash: "778d34ca89b5db88fe26619576e9d337" - } - Frame { - msec: 1056 - hash: "778d34ca89b5db88fe26619576e9d337" - } - Frame { - msec: 1072 - hash: "778d34ca89b5db88fe26619576e9d337" - } - Frame { - msec: 1088 - hash: "778d34ca89b5db88fe26619576e9d337" - } - Frame { - msec: 1104 - hash: "9424caee019aa9bccd4156b0b9ca2723" - } - Frame { - msec: 1120 - hash: "9424caee019aa9bccd4156b0b9ca2723" - } - Frame { - msec: 1136 - hash: "9424caee019aa9bccd4156b0b9ca2723" - } - Frame { - msec: 1152 - hash: "000061a140ab71a44c0480a92ad3bc70" - } - Frame { - msec: 1168 - hash: "000061a140ab71a44c0480a92ad3bc70" - } - Frame { - msec: 1184 - hash: "000061a140ab71a44c0480a92ad3bc70" - } - Frame { - msec: 1200 - hash: "5dec9638853165428cd15ae02e1d03ce" - } - Frame { - msec: 1216 - hash: "5dec9638853165428cd15ae02e1d03ce" - } - Frame { - msec: 1232 - hash: "5dec9638853165428cd15ae02e1d03ce" - } - Frame { - msec: 1248 - hash: "ecb69bdbd13114715f738b1ace3ecf51" - } - Frame { - msec: 1264 - hash: "ecb69bdbd13114715f738b1ace3ecf51" - } - Frame { - msec: 1280 - hash: "ecb69bdbd13114715f738b1ace3ecf51" - } - Frame { - msec: 1296 - hash: "ecb69bdbd13114715f738b1ace3ecf51" - } - Frame { - msec: 1312 - hash: "ecb69bdbd13114715f738b1ace3ecf51" - } - Frame { - msec: 1328 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" - } - Frame { - msec: 1344 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" - } - Frame { - msec: 1360 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" - } - Frame { - msec: 1376 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" - } - Frame { - msec: 1392 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" - } - Frame { - msec: 1408 - hash: "d4230a476237f9e13a132e775f1b960c" - } - Frame { - msec: 1424 - hash: "d4230a476237f9e13a132e775f1b960c" - } - Frame { - msec: 1440 - hash: "d4230a476237f9e13a132e775f1b960c" - } - Frame { - msec: 1456 - hash: "d4230a476237f9e13a132e775f1b960c" - } - Frame { - msec: 1472 - hash: "d4230a476237f9e13a132e775f1b960c" - } - Frame { - msec: 1488 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" - } - Frame { - msec: 1504 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" - } - Frame { - msec: 1520 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" - } - Frame { - msec: 1536 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" - } - Frame { - msec: 1552 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" - } - Frame { - msec: 1568 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" - } - Frame { - msec: 1584 - hash: "dd412c6a2e5cb8890cb43142c84a5673" - } - Frame { - msec: 1600 - hash: "dd412c6a2e5cb8890cb43142c84a5673" - } - Frame { - msec: 1616 - hash: "dd412c6a2e5cb8890cb43142c84a5673" - } - Frame { - msec: 1632 - hash: "38b1fa7bd4e2f13b05caa62903c56ab6" - } - Frame { - msec: 1648 - hash: "38b1fa7bd4e2f13b05caa62903c56ab6" - } - Frame { - msec: 1664 - hash: "38b1fa7bd4e2f13b05caa62903c56ab6" - } - Frame { - msec: 1680 - hash: "38b1fa7bd4e2f13b05caa62903c56ab6" - } - Frame { - msec: 1696 - hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8" - } - Frame { - msec: 1712 - hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8" - } - Frame { - msec: 1728 - hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8" - } - Frame { - msec: 1744 - hash: "9effd5fc19246cfe3d2f5968c5caaa4e" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1760 - hash: "9effd5fc19246cfe3d2f5968c5caaa4e" - } - Frame { - msec: 1776 - hash: "9effd5fc19246cfe3d2f5968c5caaa4e" - } - Frame { - msec: 1792 - hash: "9effd5fc19246cfe3d2f5968c5caaa4e" - } - Frame { - msec: 1808 - hash: "4fa14ae57d170b16fd90d59d5ec83561" - } - Frame { - msec: 1824 - hash: "4fa14ae57d170b16fd90d59d5ec83561" - } - Frame { - msec: 1840 - hash: "4fa14ae57d170b16fd90d59d5ec83561" - } - Frame { - msec: 1856 - hash: "4fa14ae57d170b16fd90d59d5ec83561" - } - Frame { - msec: 1872 - hash: "4fa14ae57d170b16fd90d59d5ec83561" - } - Frame { - msec: 1888 - hash: "976dd5bc154522438f92790f28639512" - } - Frame { - msec: 1904 - hash: "976dd5bc154522438f92790f28639512" - } - Frame { - msec: 1920 - image: "elide2.1.png" - } - Frame { - msec: 1936 - hash: "976dd5bc154522438f92790f28639512" - } - Frame { - msec: 1952 - hash: "976dd5bc154522438f92790f28639512" - } - Frame { - msec: 1968 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" - } - Frame { - msec: 1984 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" - } - Frame { - msec: 2000 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" - } - Frame { - msec: 2016 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" - } - Frame { - msec: 2032 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" - } - Frame { - msec: 2048 - hash: "84bdf634cfd4de588f2b0984aa3e97bd" - } - Frame { - msec: 2064 - hash: "84bdf634cfd4de588f2b0984aa3e97bd" - } - Frame { - msec: 2080 - hash: "84bdf634cfd4de588f2b0984aa3e97bd" - } - Frame { - msec: 2096 - hash: "1a978ed6951afe40912efcfb54dcce65" - } - Frame { - msec: 2112 - hash: "1a978ed6951afe40912efcfb54dcce65" - } - Frame { - msec: 2128 - hash: "1a978ed6951afe40912efcfb54dcce65" - } - Frame { - msec: 2144 - hash: "a57eea59fe6475164e24688489977869" - } - Frame { - msec: 2160 - hash: "a57eea59fe6475164e24688489977869" - } - Frame { - msec: 2176 - hash: "a57eea59fe6475164e24688489977869" - } - Frame { - msec: 2192 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" - } - Frame { - msec: 2208 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" - } - Frame { - msec: 2224 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" - } - Frame { - msec: 2240 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" - } - Frame { - msec: 2256 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" - } - Frame { - msec: 2272 - hash: "04c62a4d01e9309eaeea87902013c8b9" - } - Frame { - msec: 2288 - hash: "04c62a4d01e9309eaeea87902013c8b9" - } - Frame { - msec: 2304 - hash: "fac2f5730a600d6b69280d5e6962c1d2" - } - Frame { - msec: 2320 - hash: "fac2f5730a600d6b69280d5e6962c1d2" - } - Frame { - msec: 2336 - hash: "fac2f5730a600d6b69280d5e6962c1d2" - } - Frame { - msec: 2352 - hash: "fac2f5730a600d6b69280d5e6962c1d2" - } - Frame { - msec: 2368 - hash: "fac2f5730a600d6b69280d5e6962c1d2" - } - Frame { - msec: 2384 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" - } - Frame { - msec: 2400 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" - } - Frame { - msec: 2416 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" - } - Frame { - msec: 2432 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" - } - Frame { - msec: 2448 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" - } - Frame { - msec: 2464 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" - } - Frame { - msec: 2480 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" - } - Frame { - msec: 2496 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" - } - Frame { - msec: 2512 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" - } - Frame { - msec: 2528 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" - } - Frame { - msec: 2544 - hash: "abb220abcd579abd988b6f9f7e0bc2b7" - } - Frame { - msec: 2560 - hash: "abb220abcd579abd988b6f9f7e0bc2b7" - } - Frame { - msec: 2576 - hash: "abb220abcd579abd988b6f9f7e0bc2b7" - } - Frame { - msec: 2592 - hash: "abb220abcd579abd988b6f9f7e0bc2b7" - } - Frame { - msec: 2608 - hash: "8a8585eb9a5cd1d6c38dc7076923e7f7" - } - Frame { - msec: 2624 - hash: "8a8585eb9a5cd1d6c38dc7076923e7f7" - } - Frame { - msec: 2640 - hash: "8a8585eb9a5cd1d6c38dc7076923e7f7" - } - Frame { - msec: 2656 - hash: "c13ec1d294921e6a56f6ac4198e084eb" - } - Frame { - msec: 2672 - hash: "c13ec1d294921e6a56f6ac4198e084eb" - } - Frame { - msec: 2688 - hash: "c13ec1d294921e6a56f6ac4198e084eb" - } - Frame { - msec: 2704 - hash: "c13ec1d294921e6a56f6ac4198e084eb" - } - Frame { - msec: 2720 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" - } - Frame { - msec: 2736 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" - } - Frame { - msec: 2752 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" - } - Frame { - msec: 2768 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" - } - Frame { - msec: 2784 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" - } - Frame { - msec: 2800 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" - } - Frame { - msec: 2816 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" - } - Frame { - msec: 2832 - hash: "f44b88b80219497370b5d2ad380d03bf" - } - Frame { - msec: 2848 - hash: "f44b88b80219497370b5d2ad380d03bf" - } - Frame { - msec: 2864 - hash: "a093510751799f3466156f9775988044" - } - Frame { - msec: 2880 - image: "elide2.2.png" - } - Frame { - msec: 2896 - hash: "a093510751799f3466156f9775988044" - } - Frame { - msec: 2912 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" - } - Frame { - msec: 2928 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" - } - Frame { - msec: 2944 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" - } - Frame { - msec: 2960 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" - } - Frame { - msec: 2976 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" - } - Frame { - msec: 2992 - hash: "d7da3826914ad1d2696803b659992e73" - } - Frame { - msec: 3008 - hash: "d7da3826914ad1d2696803b659992e73" - } - Frame { - msec: 3024 - hash: "d7da3826914ad1d2696803b659992e73" - } - Frame { - msec: 3040 - hash: "d7da3826914ad1d2696803b659992e73" - } - Frame { - msec: 3056 - hash: "d7da3826914ad1d2696803b659992e73" - } - Frame { - msec: 3072 - hash: "ad40dc153a57c35ea62d9d044f08c9ac" - } - Frame { - msec: 3088 - hash: "ad40dc153a57c35ea62d9d044f08c9ac" - } - Frame { - msec: 3104 - hash: "ad40dc153a57c35ea62d9d044f08c9ac" - } - Frame { - msec: 3120 - hash: "df90afe882b18f3fd7b12e52ff36e66f" - } - Frame { - msec: 3136 - hash: "df90afe882b18f3fd7b12e52ff36e66f" - } - Frame { - msec: 3152 - hash: "5b84785ffe15c15c3b94c845db7a4a44" - } - Frame { - msec: 3168 - hash: "5b84785ffe15c15c3b94c845db7a4a44" - } - Frame { - msec: 3184 - hash: "5b84785ffe15c15c3b94c845db7a4a44" - } - Frame { - msec: 3200 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" - } - Frame { - msec: 3216 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" - } - Frame { - msec: 3232 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" - } - Frame { - msec: 3248 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" - } - Frame { - msec: 3264 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" - } - Frame { - msec: 3280 - hash: "39f1b201715413f13a60f449eef29706" - } - Frame { - msec: 3296 - hash: "39f1b201715413f13a60f449eef29706" - } - Frame { - msec: 3312 - hash: "39f1b201715413f13a60f449eef29706" - } - Frame { - msec: 3328 - hash: "39f1b201715413f13a60f449eef29706" - } - Frame { - msec: 3344 - hash: "39f1b201715413f13a60f449eef29706" - } - Frame { - msec: 3360 - hash: "4baf5c1227de45f9e620fe6eb0590014" - } - Frame { - msec: 3376 - hash: "4baf5c1227de45f9e620fe6eb0590014" - } - Frame { - msec: 3392 - hash: "4baf5c1227de45f9e620fe6eb0590014" - } - Frame { - msec: 3408 - hash: "e1ce9c06e59fb6348fff3ce650c7943e" - } - Frame { - msec: 3424 - hash: "e1ce9c06e59fb6348fff3ce650c7943e" - } - Frame { - msec: 3440 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" - } - Frame { - msec: 3456 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" - } - Frame { - msec: 3472 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" - } - Frame { - msec: 3488 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" - } - Frame { - msec: 3504 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" - } - Frame { - msec: 3520 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" - } - Frame { - msec: 3536 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" - } - Frame { - msec: 3552 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" - } - Frame { - msec: 3568 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" - } - Frame { - msec: 3584 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" - } - Frame { - msec: 3600 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" - } - Frame { - msec: 3616 - hash: "b8853dc109d063d982952780aa80419a" - } - Frame { - msec: 3632 - hash: "b8853dc109d063d982952780aa80419a" - } - Frame { - msec: 3648 - hash: "b8853dc109d063d982952780aa80419a" - } - Frame { - msec: 3664 - hash: "b8853dc109d063d982952780aa80419a" - } - Frame { - msec: 3680 - hash: "b8853dc109d063d982952780aa80419a" - } - Frame { - msec: 3696 - hash: "6bfd7cfd6369df1eb570fda103d9e009" - } - Frame { - msec: 3712 - hash: "6bfd7cfd6369df1eb570fda103d9e009" - } - Frame { - msec: 3728 - hash: "b6dba4a456cd8d1b62501039cb796625" - } - Frame { - msec: 3744 - hash: "b6dba4a456cd8d1b62501039cb796625" - } - Frame { - msec: 3760 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" - } - Frame { - msec: 3776 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" - } - Frame { - msec: 3792 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" - } - Frame { - msec: 3808 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" - } - Frame { - msec: 3824 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" - } - Frame { - msec: 3840 - image: "elide2.3.png" - } - Frame { - msec: 3856 - hash: "d2e873e69aed3e0b6e53123cd63e386c" - } - Frame { - msec: 3872 - hash: "d2e873e69aed3e0b6e53123cd63e386c" - } - Frame { - msec: 3888 - hash: "baa8edfce77628c7a1ec83adce96e2c6" - } - Frame { - msec: 3904 - hash: "baa8edfce77628c7a1ec83adce96e2c6" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png deleted file mode 100644 index 67b497f..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml deleted file mode 100644 index a39c340..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml +++ /dev/null @@ -1,351 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 32 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 48 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 64 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 80 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 96 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 112 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 128 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 144 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 160 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 176 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 192 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 208 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 224 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 240 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 256 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 272 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 288 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 304 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 320 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 336 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 352 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 368 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 384 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 400 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 416 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 432 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 448 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 464 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 480 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 496 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 512 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 528 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 544 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 560 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 576 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 592 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 608 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 624 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 640 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 656 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 672 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 688 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 704 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 720 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 736 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 752 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 768 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 784 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 800 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 816 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 832 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 848 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 864 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 880 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 896 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 912 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 928 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 944 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 960 - image: "plaintext.0.png" - } - Frame { - msec: 976 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 992 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1008 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1024 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1040 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1056 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1072 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1088 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1104 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1120 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1136 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1152 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1168 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1184 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1200 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1216 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1232 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1248 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1264 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1280 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1296 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1312 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1328 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } - Frame { - msec: 1344 - hash: "cbf65bcb64a4781b79132b87f98d5fc7" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png deleted file mode 100644 index 6379942..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml deleted file mode 100644 index 8529b92..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml +++ /dev/null @@ -1,359 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 32 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 48 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 64 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 80 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 96 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 112 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 128 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 144 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 160 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 176 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 192 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 208 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 224 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 240 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 256 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 272 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 288 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 304 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 320 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 336 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 352 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 368 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 384 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 400 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 416 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 432 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 448 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 464 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 480 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 496 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 512 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 528 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 544 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 560 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 576 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 592 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 608 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 624 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 640 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 656 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 672 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 688 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 704 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 720 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 736 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 752 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 768 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 784 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 800 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 816 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 832 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 848 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 864 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 880 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 896 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 912 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 928 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 944 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 960 - image: "richtext.0.png" - } - Frame { - msec: 976 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 992 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1008 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1024 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1040 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1056 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1072 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1088 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1104 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1120 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1136 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1152 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1168 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1184 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1200 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1216 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1232 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1248 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1264 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1280 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1296 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1312 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1328 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1344 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1360 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } - Frame { - msec: 1376 - hash: "b902ff73e7c943bb09b5d2ae6c7a760e" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png deleted file mode 100644 index 50d56dc..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml deleted file mode 100644 index bf3aea6..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml +++ /dev/null @@ -1,351 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 32 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 48 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 64 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 80 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 96 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 112 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 128 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 144 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 160 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 176 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 192 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 208 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 224 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 240 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 256 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 272 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 288 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 304 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 320 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 336 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 352 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 368 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 384 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 400 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 416 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 432 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 448 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 464 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 480 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 496 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 512 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 528 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 544 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 560 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 576 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 592 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 608 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 624 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 640 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 656 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 672 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 688 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 704 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 720 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 736 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 752 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 768 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 784 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 800 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 816 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 832 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 848 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 864 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 880 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 896 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 912 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 928 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 944 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 960 - image: "plaintext.0.png" - } - Frame { - msec: 976 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 992 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1008 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1024 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1040 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1056 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1072 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1088 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1104 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1120 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1136 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1152 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1168 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1184 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1200 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1216 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1232 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1248 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1264 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1280 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1296 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1312 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1328 - hash: "d553014bc56a46787e30459b0f44f57a" - } - Frame { - msec: 1344 - hash: "d553014bc56a46787e30459b0f44f57a" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png deleted file mode 100644 index 2910670..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml deleted file mode 100644 index 4a87240..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml +++ /dev/null @@ -1,359 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 32 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 48 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 64 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 80 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 96 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 112 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 128 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 144 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 160 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 176 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 192 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 208 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 224 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 240 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 256 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 272 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 288 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 304 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 320 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 336 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 352 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 368 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 384 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 400 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 416 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 432 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 448 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 464 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 480 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 496 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 512 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 528 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 544 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 560 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 576 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 592 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 608 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 624 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 640 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 656 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 672 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 688 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 704 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 720 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 736 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 752 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 768 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 784 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 800 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 816 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 832 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 848 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 864 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 880 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 896 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 912 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 928 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 944 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 960 - image: "richtext.0.png" - } - Frame { - msec: 976 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 992 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1008 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1024 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1040 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1056 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1072 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1088 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1104 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1120 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1136 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1152 - hash: "dfea78484b840b8cab690e277b960723" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1168 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1184 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1200 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1216 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1232 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1248 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1264 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1280 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1296 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1312 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1328 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1344 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1360 - hash: "dfea78484b840b8cab690e277b960723" - } - Frame { - msec: 1376 - hash: "dfea78484b840b8cab690e277b960723" - } -} -- cgit v0.12 From 46bcfe78c17e35c378b7788fdd8dcd0f38ade9f0 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Oct 2010 18:57:01 +1000 Subject: Cleanup qmlvisual/qdeclarativetextedit tests Platform visuals and working again after a long period of neglect Task-number: QTBUG-14792 --- .../qdeclarativetextedit/MultilineEdit.qml | 3 +- .../qdeclarativetextedit/cursorDelegate.qml | 15 +- .../data-X11/cursorDelegate.0.png | Bin 0 -> 3171 bytes .../data-X11/cursorDelegate.1.png | Bin 0 -> 3603 bytes .../data-X11/cursorDelegate.2.png | Bin 0 -> 3152 bytes .../data-X11/cursorDelegate.3.png | Bin 0 -> 3147 bytes .../data-X11/cursorDelegate.4.png | Bin 0 -> 3145 bytes .../data-X11/cursorDelegate.5.png | Bin 0 -> 3147 bytes .../data-X11/cursorDelegate.6.png | Bin 0 -> 3145 bytes .../data-X11/cursorDelegate.7.png | Bin 0 -> 3146 bytes .../data-X11/cursorDelegate.8.png | Bin 0 -> 3144 bytes .../data-X11/cursorDelegate.9.png | Bin 0 -> 3135 bytes .../data-X11/cursorDelegate.qml | 1499 +++++++ .../qdeclarativetextedit/data-X11/qt-669.0.png | Bin 0 -> 2483 bytes .../qdeclarativetextedit/data-X11/qt-669.1.png | Bin 0 -> 2474 bytes .../qdeclarativetextedit/data-X11/qt-669.2.png | Bin 0 -> 2480 bytes .../qdeclarativetextedit/data-X11/qt-669.3.png | Bin 0 -> 2443 bytes .../qdeclarativetextedit/data-X11/qt-669.qml | 1371 ++++++ .../data-X11/usingMultilineEdit.0.png | Bin 0 -> 4006 bytes .../data-X11/usingMultilineEdit.1.png | Bin 0 -> 4293 bytes .../data-X11/usingMultilineEdit.10.png | Bin 0 -> 6074 bytes .../data-X11/usingMultilineEdit.11.png | Bin 0 -> 6074 bytes .../data-X11/usingMultilineEdit.2.png | Bin 0 -> 4683 bytes .../data-X11/usingMultilineEdit.3.png | Bin 0 -> 5114 bytes .../data-X11/usingMultilineEdit.4.png | Bin 0 -> 5270 bytes .../data-X11/usingMultilineEdit.5.png | Bin 0 -> 5401 bytes .../data-X11/usingMultilineEdit.6.png | Bin 0 -> 5591 bytes .../data-X11/usingMultilineEdit.7.png | Bin 0 -> 5261 bytes .../data-X11/usingMultilineEdit.8.png | Bin 0 -> 6072 bytes .../data-X11/usingMultilineEdit.9.png | Bin 0 -> 6074 bytes .../data-X11/usingMultilineEdit.qml | 4687 ++++++++++++++++++++ .../qdeclarativetextedit/data-X11/wrap.0.png | Bin 1110 -> 8764 bytes .../qdeclarativetextedit/data-X11/wrap.1.png | Bin 1110 -> 8922 bytes .../qdeclarativetextedit/data-X11/wrap.2.png | Bin 1110 -> 9175 bytes .../qdeclarativetextedit/data-X11/wrap.3.png | Bin 1110 -> 9553 bytes .../qdeclarativetextedit/data-X11/wrap.4.png | Bin 1110 -> 9975 bytes .../qdeclarativetextedit/data-X11/wrap.5.png | Bin 1110 -> 9977 bytes .../qdeclarativetextedit/data-X11/wrap.6.png | Bin 1110 -> 9977 bytes .../qdeclarativetextedit/data-X11/wrap.qml | 844 ++-- .../qdeclarativetextedit/data/cursorDelegate.0.png | Bin 3322 -> 3171 bytes .../qdeclarativetextedit/data/cursorDelegate.1.png | Bin 3323 -> 3603 bytes .../qdeclarativetextedit/data/cursorDelegate.2.png | Bin 3325 -> 3152 bytes .../qdeclarativetextedit/data/cursorDelegate.3.png | Bin 3332 -> 3147 bytes .../qdeclarativetextedit/data/cursorDelegate.4.png | Bin 3329 -> 3145 bytes .../qdeclarativetextedit/data/cursorDelegate.5.png | Bin 3818 -> 3147 bytes .../qdeclarativetextedit/data/cursorDelegate.6.png | Bin 3333 -> 3145 bytes .../qdeclarativetextedit/data/cursorDelegate.7.png | Bin 3332 -> 3146 bytes .../qdeclarativetextedit/data/cursorDelegate.8.png | Bin 3347 -> 3144 bytes .../qdeclarativetextedit/data/cursorDelegate.9.png | Bin 0 -> 3135 bytes .../qdeclarativetextedit/data/cursorDelegate.qml | 3050 +++---------- .../data/usingMultilineEdit.0.png | Bin 0 -> 4006 bytes .../data/usingMultilineEdit.1.png | Bin 0 -> 4293 bytes .../data/usingMultilineEdit.10.png | Bin 0 -> 6074 bytes .../data/usingMultilineEdit.11.png | Bin 0 -> 6074 bytes .../data/usingMultilineEdit.2.png | Bin 0 -> 4683 bytes .../data/usingMultilineEdit.3.png | Bin 0 -> 5114 bytes .../data/usingMultilineEdit.4.png | Bin 0 -> 5270 bytes .../data/usingMultilineEdit.5.png | Bin 0 -> 5401 bytes .../data/usingMultilineEdit.6.png | Bin 0 -> 5591 bytes .../data/usingMultilineEdit.7.png | Bin 0 -> 5261 bytes .../data/usingMultilineEdit.8.png | Bin 0 -> 6072 bytes .../data/usingMultilineEdit.9.png | Bin 0 -> 6074 bytes .../data/usingMultilineEdit.qml | 4687 ++++++++++++++++++++ .../qmlvisual/qdeclarativetextedit/qt-669.qml | 5 +- .../qdeclarativetextedit/usingMultilineEdit.qml | 5 +- 65 files changed, 13177 insertions(+), 2989 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.10.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.11.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.10.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.11.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml index c987568..fd29eb6 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/MultilineEdit.qml @@ -36,9 +36,10 @@ Item { if(cursorRectangle.y < topMargin - textEdit.y){//Cursor went off the front textEdit.y = topMargin - Math.max(0, cursorRectangle.y); }else if(cursorRectangle.y > parent.height - topMargin - bottomMargin - textEdit.y){//Cursor went off the end - textEdit.y = topMargin - Math.max(0, cursorRectangle.y - (parent.height - topMargin - bottomMargin)) - cursorRectangle.height; + textEdit.y = topMargin - Math.max(0, cursorRectangle.y - (parent.height - topMargin - bottomMargin) + cursorRectangle.height); } } + onHeightChanged: y=topMargin//reset scroll text:"" horizontalAlignment: TextInput.AlignLeft diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/cursorDelegate.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/cursorDelegate.qml index c0eeb82..8798a5f 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/cursorDelegate.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/cursorDelegate.qml @@ -3,17 +3,16 @@ import QtQuick 1.0 resources: [ Component { id: cursorA Item { id: cPage; - x: Behavior { NumberAnimation { } } - y: Behavior { NumberAnimation { } } - height: Behavior { NumberAnimation { duration: 200 } } + Behavior on x { NumberAnimation { } } + Behavior on y { NumberAnimation { } } + Behavior on height { NumberAnimation { duration: 200 } } Rectangle { id: cRectangle; color: "black"; y: 1; width: 1; height: parent.height-2; Rectangle { id:top; color: "black"; width: 3; height: 1; x: -1; y:0} Rectangle { id:bottom; color: "black"; width: 3; height: 1; x: -1; anchors.bottom: parent.bottom;} - opacity: 1 - opacity: SequentialAnimation { running: cPage.parent.focus == true; loops: Animation.Infinite; - NumberAnimation { properties: "opacity"; to: 1; duration: 500; easing.type: "InQuad"} - NumberAnimation { properties: "opacity"; to: 0; duration: 500; easing.type: "OutQuad"} - } + } + SequentialAnimation on opacity { running: true; loops: Animation.Infinite; + NumberAnimation { to: 0; duration: 500; easing.type: "OutQuad"} + NumberAnimation { to: 1; duration: 500; easing.type: "InQuad"} } width: 1; } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.0.png new file mode 100644 index 0000000..b24344c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.1.png new file mode 100644 index 0000000..5e29359 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.2.png new file mode 100644 index 0000000..0ffee64 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.3.png new file mode 100644 index 0000000..6c56e9c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.4.png new file mode 100644 index 0000000..276170d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.5.png new file mode 100644 index 0000000..3d8709f Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.6.png new file mode 100644 index 0000000..80b960c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.7.png new file mode 100644 index 0000000..7247277 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.8.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.8.png new file mode 100644 index 0000000..af5a996 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.9.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.9.png new file mode 100644 index 0000000..b254164 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.qml new file mode 100644 index 0000000..0407aaf --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/cursorDelegate.qml @@ -0,0 +1,1499 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "6e8324bf913d9df21a59ab4337257c15" + } + Frame { + msec: 32 + hash: "4e068995d68e8939e6560e35b685e839" + } + Frame { + msec: 48 + hash: "761b09bce25b3b240093d16ad02268d7" + } + Frame { + msec: 64 + hash: "1ecb6d7d08d4e4e14db28e24a60eccc4" + } + Frame { + msec: 80 + hash: "642417a56b3d6b8b35f5aec1bf0a9d2c" + } + Frame { + msec: 96 + hash: "2e24870a44d3fc6c6d5c920bab29d417" + } + Frame { + msec: 112 + hash: "9a59d0672f2a752943561af89fd71d7f" + } + Frame { + msec: 128 + hash: "c359dd36910678a30f935a13c8680ee4" + } + Frame { + msec: 144 + hash: "245f1e127549e9b28c7574ffb143fcde" + } + Frame { + msec: 160 + hash: "8df3d3dbce673311d88c055e8dffaeb5" + } + Frame { + msec: 176 + hash: "590fdeaddb3df033a1908a8a95fcd17a" + } + Frame { + msec: 192 + hash: "a158891c8d2ee3899463412a3363e48c" + } + Frame { + msec: 208 + hash: "e9ec2c82f46b36fbd0285ce6795c7cf9" + } + Frame { + msec: 224 + hash: "0a02598af770dfe1d332f10c9482e770" + } + Frame { + msec: 240 + hash: "8765475468bccbd0df897a533241f3c5" + } + Frame { + msec: 256 + hash: "4cd9deed66bfdfadde8f8bf34f0e5513" + } + Frame { + msec: 272 + hash: "139bf5a1811beb2438df4ecfa3bbaac7" + } + Frame { + msec: 288 + hash: "9d51555afd71a7035e67a543846dcf7f" + } + Frame { + msec: 304 + hash: "de187b58fc8dfaad2d62e9463691b0c0" + } + Frame { + msec: 320 + hash: "9f88ac6d71246b06ca7ce9d8d983c91b" + } + Frame { + msec: 336 + hash: "a43c12a7d6597d171112dc43085a439e" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 352 + hash: "ad38f32755f669837ec2243e355ebc85" + } + Frame { + msec: 368 + hash: "d87bd14345c785cc7e78a5c5462b90ec" + } + Frame { + msec: 384 + hash: "77850031e012246dd967ac689e353eb3" + } + Frame { + msec: 400 + hash: "f1bd048cd9167a8f162d1c39aca4f7c1" + } + Frame { + msec: 416 + hash: "0fa030c5da23f23a0665a535e23b84a2" + } + Frame { + msec: 432 + hash: "af3a5f1982459164dfec26746172b0eb" + } + Key { + type: 6 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 448 + hash: "0de90659472b63dd41a5602197ff502e" + } + Frame { + msec: 464 + hash: "81e40abf91017614a52e03bb2474549f" + } + Frame { + msec: 480 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 496 + hash: "7bae45481596788afde8866a3c97edd7" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 512 + hash: "0416581d32ab84680dfc26b6f546d2c5" + } + Frame { + msec: 528 + hash: "0416581d32ab84680dfc26b6f546d2c5" + } + Frame { + msec: 544 + hash: "0416581d32ab84680dfc26b6f546d2c5" + } + Frame { + msec: 560 + hash: "0416581d32ab84680dfc26b6f546d2c5" + } + Frame { + msec: 576 + hash: "ac98b973e6d12193829139661d3e5847" + } + Frame { + msec: 592 + hash: "366907376adae4d88d42d1b9e7533ec0" + } + Frame { + msec: 608 + hash: "5f486d0a21c74f2ba50afcafa8c15453" + } + Frame { + msec: 624 + hash: "a3bf6dde525e528745272a8e43fc895c" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 640 + hash: "4ffb297d2a98a3d13b848af569b1b5b5" + } + Frame { + msec: 656 + hash: "3679a17658e417bf08fc86d4bef0d4e9" + } + Frame { + msec: 672 + hash: "5c6a25284ffd13350425e792fd143421" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 688 + hash: "09a2c1032d0206e20340ae4267525f98" + } + Frame { + msec: 704 + hash: "0036070d9a7ee854b3612858af46ab59" + } + Frame { + msec: 720 + hash: "8774509eaa5fc29385da89214ef77589" + } + Frame { + msec: 736 + hash: "6d4f8ebf046148e5079f498396c119b4" + } + Frame { + msec: 752 + hash: "4c7d5d2f77116c96357b0791348af058" + } + Frame { + msec: 768 + hash: "398c927a3525d5b90a5dd7a05ba9467b" + } + Frame { + msec: 784 + hash: "d84b45f6acb8cbd399d4ed6bf80ce132" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 800 + hash: "40c597d9e04e8e0daf62f58b9e7973b3" + } + Frame { + msec: 816 + hash: "2c7fdd47e29d924e3e008a6840e0e6be" + } + Frame { + msec: 832 + hash: "2b3229bb1aa220499114f274cf643ce9" + } + Frame { + msec: 848 + hash: "e55446874c1a343ce3607d679d69d1d4" + } + Frame { + msec: 864 + hash: "6824708eb176a9cf92f241d4054800dd" + } + Frame { + msec: 880 + hash: "d386230dd416740625eb4f677ef4531b" + } + Frame { + msec: 896 + hash: "9b2fbddab890dbe43e84e85bf320e6c1" + } + Frame { + msec: 912 + hash: "1d1065aca7eb47f0096bc2c8c4320880" + } + Frame { + msec: 928 + hash: "d97ba6e2bfc021fe993afdb5b28316ba" + } + Frame { + msec: 944 + hash: "3a3a2f340bf1ccb14eab0562d7ecfe87" + } + Frame { + msec: 960 + image: "cursorDelegate.0.png" + } + Frame { + msec: 976 + hash: "ea4f4c1de5bfb1be43ab0188afb7189c" + } + Frame { + msec: 992 + hash: "399ca2d4411d3fb226c94bd32a17d0cd" + } + Frame { + msec: 1008 + hash: "ca78503396613536c8e4076884354cb1" + } + Frame { + msec: 1024 + hash: "ca78503396613536c8e4076884354cb1" + } + Key { + type: 7 + key: 16777249 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1040 + hash: "399ca2d4411d3fb226c94bd32a17d0cd" + } + Frame { + msec: 1056 + hash: "ea4f4c1de5bfb1be43ab0188afb7189c" + } + Frame { + msec: 1072 + hash: "d23d7492b85e4f30994ecd64e8273ff6" + } + Frame { + msec: 1088 + hash: "3a3a2f340bf1ccb14eab0562d7ecfe87" + } + Frame { + msec: 1104 + hash: "d97ba6e2bfc021fe993afdb5b28316ba" + } + Frame { + msec: 1120 + hash: "1d1065aca7eb47f0096bc2c8c4320880" + } + Frame { + msec: 1136 + hash: "9b2fbddab890dbe43e84e85bf320e6c1" + } + Frame { + msec: 1152 + hash: "d386230dd416740625eb4f677ef4531b" + } + Frame { + msec: 1168 + hash: "6824708eb176a9cf92f241d4054800dd" + } + Key { + type: 6 + key: 16777234 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1184 + hash: "e8e14dbba33578a36d9c69214333c537" + } + Frame { + msec: 1200 + hash: "95c6e967f6f445748945c51943cf532f" + } + Frame { + msec: 1216 + hash: "d145d4cbd0e3a98686b3bac1c5c17093" + } + Frame { + msec: 1232 + hash: "09348a4108a585dd23c3a252a5c596f6" + } + Frame { + msec: 1248 + hash: "55126f2c879771e1aa5ced51b54c827a" + } + Frame { + msec: 1264 + hash: "ebb36a4c2fcb85107033ec2731fc5743" + } + Frame { + msec: 1280 + hash: "0581a4432d4b3d0c1555a31e772c2575" + } + Key { + type: 7 + key: 16777234 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1296 + hash: "b4030774f06935f1b43fc8f1a69e53a5" + } + Frame { + msec: 1312 + hash: "655e1739c130888ff83a3b69bb0ab7e3" + } + Frame { + msec: 1328 + hash: "99fc97c572e7c8949693b32910e6eefb" + } + Frame { + msec: 1344 + hash: "e9c8bb13c2549047c05d671daa378496" + } + Frame { + msec: 1360 + hash: "cb344e0d39b5b07ca7d094bf30ce9f53" + } + Frame { + msec: 1376 + hash: "15ba6e62c693f2bf74bdf86668139985" + } + Frame { + msec: 1392 + hash: "48133ec73eb9723059eb6e6af3139f2b" + } + Frame { + msec: 1408 + hash: "0b19e777a04f03774f2d5f5398bdb10f" + } + Frame { + msec: 1424 + hash: "fc41d9a9aedf9274a68b33603ed6ccd0" + } + Frame { + msec: 1440 + hash: "fa6e65f0c835b12dc10463711bd73350" + } + Frame { + msec: 1456 + hash: "25a02c3388e52df550a0332efde90fcd" + } + Frame { + msec: 1472 + hash: "2390443be82acf291856be59fa18fc26" + } + Frame { + msec: 1488 + hash: "2390443be82acf291856be59fa18fc26" + } + Frame { + msec: 1504 + hash: "2390443be82acf291856be59fa18fc26" + } + Frame { + msec: 1520 + hash: "2390443be82acf291856be59fa18fc26" + } + Frame { + msec: 1536 + hash: "2390443be82acf291856be59fa18fc26" + } + Frame { + msec: 1552 + hash: "2390443be82acf291856be59fa18fc26" + } + Frame { + msec: 1568 + hash: "284cd356d551a048d4a000b90217ac72" + } + Frame { + msec: 1584 + hash: "94fb20c3767e09d1b4254ee6122cf24e" + } + Frame { + msec: 1600 + hash: "bfac920384425ce9f34505b44eceb523" + } + Frame { + msec: 1616 + hash: "4a2d434efcb9a57f2013dc6b366e0e4e" + } + Frame { + msec: 1632 + hash: "d0fbe98dc34c4bb0d1ceb7e4678cc1d5" + } + Frame { + msec: 1648 + hash: "28ab147983a71e93e5610f53e14bd113" + } + Key { + type: 6 + key: 16777249 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1664 + hash: "2e6ee60fe9ff07fa4558134e6b1d6da8" + } + Frame { + msec: 1680 + hash: "f181e578e865981d7a2073080b381ec1" + } + Frame { + msec: 1696 + hash: "d7c0558ea16829b52ea6d09814c301b9" + } + Frame { + msec: 1712 + hash: "c9304cb66c04566cf4374b46ab85e6e7" + } + Frame { + msec: 1728 + hash: "024dde64822afc9eea63974851fe57e1" + } + Frame { + msec: 1744 + hash: "8e4520e95a8acc8f1d4b710c4a14898f" + } + Frame { + msec: 1760 + hash: "6b271c3f1d9d49bbd80a8ee33f3fc09c" + } + Frame { + msec: 1776 + hash: "eb76a46632856bf07b005cad2ba2f6ab" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1792 + hash: "a29bd83f6b4e877f3c7b89c82dfcab54" + } + Frame { + msec: 1808 + hash: "dca39b6b6fff5e4a6309e4c0e42811c0" + } + Frame { + msec: 1824 + hash: "88ad3f9f638a97bed98f00ec7d78dfe4" + } + Frame { + msec: 1840 + hash: "5697a705f36283213bbe4b5848baa764" + } + Frame { + msec: 1856 + hash: "8850842afae3060a91d612f7b869fd48" + } + Frame { + msec: 1872 + hash: "4f08dbd1cab0bfcc8b9f232d46cf42db" + } + Frame { + msec: 1888 + hash: "f7df5b96d0983a918e3c81aa7bee3950" + } + Frame { + msec: 1904 + hash: "b28681bcb414d428588acda377fef838" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1920 + image: "cursorDelegate.1.png" + } + Frame { + msec: 1936 + hash: "5c154b54776ed555563d3e5196a8aedd" + } + Frame { + msec: 1952 + hash: "ee64c0452b325880de3a4fea599c18cc" + } + Frame { + msec: 1968 + hash: "0776e1557b2d32db1c7c43331c532331" + } + Frame { + msec: 1984 + hash: "24b68da9a63bbf00ffffeca649f771fa" + } + Frame { + msec: 2000 + hash: "00d49d91b51f5bd428c07e9be65f551a" + } + Frame { + msec: 2016 + hash: "874d4b599cb92cd9160960e3b3af74e0" + } + Frame { + msec: 2032 + hash: "00d49d91b51f5bd428c07e9be65f551a" + } + Frame { + msec: 2048 + hash: "24b68da9a63bbf00ffffeca649f771fa" + } + Frame { + msec: 2064 + hash: "0776e1557b2d32db1c7c43331c532331" + } + Frame { + msec: 2080 + hash: "ee64c0452b325880de3a4fea599c18cc" + } + Frame { + msec: 2096 + hash: "5c154b54776ed555563d3e5196a8aedd" + } + Frame { + msec: 2112 + hash: "a5f90da82b51bc866648304a20a1dcd3" + } + Frame { + msec: 2128 + hash: "b28681bcb414d428588acda377fef838" + } + Frame { + msec: 2144 + hash: "f7df5b96d0983a918e3c81aa7bee3950" + } + Frame { + msec: 2160 + hash: "4f08dbd1cab0bfcc8b9f232d46cf42db" + } + Frame { + msec: 2176 + hash: "8850842afae3060a91d612f7b869fd48" + } + Frame { + msec: 2192 + hash: "5697a705f36283213bbe4b5848baa764" + } + Frame { + msec: 2208 + hash: "88ad3f9f638a97bed98f00ec7d78dfe4" + } + Frame { + msec: 2224 + hash: "dca39b6b6fff5e4a6309e4c0e42811c0" + } + Key { + type: 7 + key: 16777248 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2240 + hash: "a29bd83f6b4e877f3c7b89c82dfcab54" + } + Frame { + msec: 2256 + hash: "7defd2ecefeb86b457a2ee76d97424ee" + } + Frame { + msec: 2272 + hash: "ccf6d45e8822d72482d9b585909b612b" + } + Frame { + msec: 2288 + hash: "996dddf091394513adda1b1f00bf0c68" + } + Frame { + msec: 2304 + hash: "3cf94e90eddb4b0815762b89f58f8325" + } + Frame { + msec: 2320 + hash: "ab9f876450526b37774c6c4a5794c7b1" + } + Frame { + msec: 2336 + hash: "9109880e9201e92eb17ae87a3648dca7" + } + Frame { + msec: 2352 + hash: "0e759f2f279057c1f4d1147be5b41214" + } + Key { + type: 6 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2368 + hash: "d87bd14345c785cc7e78a5c5462b90ec" + } + Frame { + msec: 2384 + hash: "77850031e012246dd967ac689e353eb3" + } + Frame { + msec: 2400 + hash: "f1bd048cd9167a8f162d1c39aca4f7c1" + } + Frame { + msec: 2416 + hash: "0fa030c5da23f23a0665a535e23b84a2" + } + Frame { + msec: 2432 + hash: "af3a5f1982459164dfec26746172b0eb" + } + Frame { + msec: 2448 + hash: "0de90659472b63dd41a5602197ff502e" + } + Frame { + msec: 2464 + hash: "81e40abf91017614a52e03bb2474549f" + } + Frame { + msec: 2480 + hash: "7bae45481596788afde8866a3c97edd7" + } + Key { + type: 7 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2496 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 2512 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 2528 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 2544 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 2560 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 2576 + hash: "e26dbfb26415b21198add56d5de02cb2" + } + Frame { + msec: 2592 + hash: "fa2877a963417789b82170b32e0af7a0" + } + Frame { + msec: 2608 + hash: "860b39f92c412a7d946f882d8f99d837" + } + Frame { + msec: 2624 + hash: "d7b8c52aef183965a97d82a18b03ed94" + } + Frame { + msec: 2640 + hash: "b1ce9cf0ebd8e1e783e5bd43bbd72072" + } + Frame { + msec: 2656 + hash: "d214b419ec5b4cff8f877bdeb1b9ef96" + } + Frame { + msec: 2672 + hash: "95e7057104508b3919d722d4befde7b7" + } + Frame { + msec: 2688 + hash: "270489ec5da5bf9a93fa4e52f47a71f5" + } + Frame { + msec: 2704 + hash: "46646e396ab0c1c20427dadd71d45ba9" + } + Frame { + msec: 2720 + hash: "65e2fd167565f876310d56fa9203c118" + } + Frame { + msec: 2736 + hash: "aff0da79bd9bd8c285139d7737a1316f" + } + Frame { + msec: 2752 + hash: "bf264fe7d774a597a3ff0965d912fa90" + } + Frame { + msec: 2768 + hash: "f00358343437f6e058848c7237601632" + } + Frame { + msec: 2784 + hash: "88c9e1d58397a81ed23931c7fdae1e7d" + } + Frame { + msec: 2800 + hash: "44d46b459f6bb89510e52b0d999fd499" + } + Frame { + msec: 2816 + hash: "0c196a24c9ca7143d382688db678d855" + } + Frame { + msec: 2832 + hash: "9df6d3d3b9981cb907ab89e65b743e97" + } + Frame { + msec: 2848 + hash: "501a644d6cde64ad041b086e00fd3950" + } + Key { + type: 6 + key: 16777236 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2864 + hash: "83f297406b1c6311da3a216024836d15" + } + Frame { + msec: 2880 + image: "cursorDelegate.2.png" + } + Frame { + msec: 2896 + hash: "93f79f8717948bde8ee55c668af2d397" + } + Frame { + msec: 2912 + hash: "881b5c2ccd0bbdaea4d61abbec600fc5" + } + Frame { + msec: 2928 + hash: "be72fe7c27901db62f2dbd9a757e4838" + } + Frame { + msec: 2944 + hash: "c83c973fb1253ccab333fb1e604155b8" + } + Frame { + msec: 2960 + hash: "dd6072d204812c23e24db1e7a81c6f57" + } + Frame { + msec: 2976 + hash: "fb342743dc5ab9ade2b8a48a2a11dc8f" + } + Key { + type: 7 + key: 16777236 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2992 + hash: "fc8ede705bfe8f339fe47041c502b0d6" + } + Frame { + msec: 3008 + hash: "00fa0306d3fdc7e384cfc0660a3a355d" + } + Frame { + msec: 3024 + hash: "00fa0306d3fdc7e384cfc0660a3a355d" + } + Frame { + msec: 3040 + hash: "fc8ede705bfe8f339fe47041c502b0d6" + } + Frame { + msec: 3056 + hash: "fb342743dc5ab9ade2b8a48a2a11dc8f" + } + Frame { + msec: 3072 + hash: "dd6072d204812c23e24db1e7a81c6f57" + } + Frame { + msec: 3088 + hash: "c83c973fb1253ccab333fb1e604155b8" + } + Frame { + msec: 3104 + hash: "be72fe7c27901db62f2dbd9a757e4838" + } + Frame { + msec: 3120 + hash: "881b5c2ccd0bbdaea4d61abbec600fc5" + } + Frame { + msec: 3136 + hash: "93f79f8717948bde8ee55c668af2d397" + } + Frame { + msec: 3152 + hash: "1bb236db749ef514c00d0a3dd698d24f" + } + Frame { + msec: 3168 + hash: "83f297406b1c6311da3a216024836d15" + } + Frame { + msec: 3184 + hash: "3d284b4000d2849ed4af2f7c1b859492" + } + Frame { + msec: 3200 + hash: "de315e6836334fd0a2da855f5be4ff30" + } + Frame { + msec: 3216 + hash: "5ca117709284f4a1cbd64cdba4079340" + } + Key { + type: 6 + key: 16777236 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3232 + hash: "308a4220f5c74fd56bd218cd695b9822" + } + Frame { + msec: 3248 + hash: "4ac4e09e987f2ba9661ed52fb1bdf236" + } + Frame { + msec: 3264 + hash: "9ffd39a8a540ec88ff2b20a16ef083ee" + } + Frame { + msec: 3280 + hash: "4a36ed8e68811954fef171d5734ccbaf" + } + Frame { + msec: 3296 + hash: "714a6231aca70cfa8e83ea71b7ae90dc" + } + Frame { + msec: 3312 + hash: "1fa9e35449ee87c972e3189ad0651a68" + } + Frame { + msec: 3328 + hash: "d602008fada2f4edb6ad00fe759f9db9" + } + Key { + type: 7 + key: 16777236 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3344 + hash: "bf16cc38f109e761b5ac2b0c63a1a2fe" + } + Frame { + msec: 3360 + hash: "30f26041533455ed92c4984f55e3c6ff" + } + Frame { + msec: 3376 + hash: "5838d666902bc693de505522dad13254" + } + Frame { + msec: 3392 + hash: "6c8ada09b627050e4340da6e8ddd646e" + } + Frame { + msec: 3408 + hash: "b33cd5bbb90d435dd7ea3ab67bef88ee" + } + Frame { + msec: 3424 + hash: "692d4029938c01044b4210958dd1ee7e" + } + Frame { + msec: 3440 + hash: "7e2e55555ee2c7e172e61ddb6365355d" + } + Frame { + msec: 3456 + hash: "87ca0584879b25336a1023ac3252fc9a" + } + Frame { + msec: 3472 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 3488 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 3504 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 3520 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 3536 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 3552 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 3568 + hash: "8c6052eb4cf03d7742a73874d9f15285" + } + Frame { + msec: 3584 + hash: "8a1b63c42867f87a1cf4b47944b3860a" + } + Frame { + msec: 3600 + hash: "90712efd7c17b0ad33d2c2c02e9eaa97" + } + Frame { + msec: 3616 + hash: "8099972420ffd03e2bfc3ea45918a543" + } + Frame { + msec: 3632 + hash: "2b78b1179a34319c287a6659406e23c3" + } + Frame { + msec: 3648 + hash: "ad9458ab4d6376c87350a2356c280f94" + } + Frame { + msec: 3664 + hash: "a74bc230e310a2826b2fed962db22f7a" + } + Frame { + msec: 3680 + hash: "bd72e8f4757050c41673a6f0d38f2285" + } + Frame { + msec: 3696 + hash: "379bad4fa4b605cb6a16434bdb031e2b" + } + Frame { + msec: 3712 + hash: "e144a8e9586f29f9b2f042b47e7739ae" + } + Frame { + msec: 3728 + hash: "bd74c9e79bc1a88dd6a17a3aed21e368" + } + Key { + type: 6 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3744 + hash: "144724168f42372e10ec6c39662a5ed8" + } + Frame { + msec: 3760 + hash: "d8859888802e7b54e2d2a44cf252eb54" + } + Frame { + msec: 3776 + hash: "20561e2faf7e8fe1d6337248e6cd5e94" + } + Frame { + msec: 3792 + hash: "184cff262d1004ce702c117a6b5b9699" + } + Frame { + msec: 3808 + hash: "61b156acacefa6e4f4ddd8adaca90d08" + } + Frame { + msec: 3824 + hash: "0906852b1e62a936694a22d6ffa4f5dd" + } + Frame { + msec: 3840 + image: "cursorDelegate.3.png" + } + Key { + type: 7 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3856 + hash: "cc0fb2ae2dd1ccad94c453bc4c4b6d32" + } + Frame { + msec: 3872 + hash: "6a6baee5ca76d331c47fca4d0f7168e5" + } + Frame { + msec: 3888 + hash: "32032d7ce55af41c97ac5bf33aca40bb" + } + Frame { + msec: 3904 + hash: "a8781226e5e494324a34e120aa446cd1" + } + Frame { + msec: 3920 + hash: "0dd5df088fcc0228a97ffe715c95e2b6" + } + Frame { + msec: 3936 + hash: "774b161fe9645bc69b89e580b3e41f71" + } + Frame { + msec: 3952 + hash: "5756d7ffd8ff656db54f4329ea909553" + } + Frame { + msec: 3968 + hash: "2b4a5c97ff4d8792a7706bb78385ec35" + } + Frame { + msec: 3984 + hash: "f9765e4def564b64861402e1a873b169" + } + Frame { + msec: 4000 + hash: "287b07ef6288dcea13fffd2b95aafd54" + } + Frame { + msec: 4016 + hash: "7abcb9d6cf223c1655f6265f780a321a" + } + Frame { + msec: 4032 + hash: "287b07ef6288dcea13fffd2b95aafd54" + } + Frame { + msec: 4048 + hash: "f9765e4def564b64861402e1a873b169" + } + Frame { + msec: 4064 + hash: "2b4a5c97ff4d8792a7706bb78385ec35" + } + Key { + type: 7 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 4080 + hash: "5756d7ffd8ff656db54f4329ea909553" + } + Frame { + msec: 4096 + hash: "774b161fe9645bc69b89e580b3e41f71" + } + Frame { + msec: 4112 + hash: "0dd5df088fcc0228a97ffe715c95e2b6" + } + Frame { + msec: 4128 + hash: "a8781226e5e494324a34e120aa446cd1" + } + Frame { + msec: 4144 + hash: "32032d7ce55af41c97ac5bf33aca40bb" + } + Frame { + msec: 4160 + hash: "6a6baee5ca76d331c47fca4d0f7168e5" + } + Frame { + msec: 4176 + hash: "cc0fb2ae2dd1ccad94c453bc4c4b6d32" + } + Frame { + msec: 4192 + hash: "2d1b406be294727a278ba6bbc97be62a" + } + Frame { + msec: 4208 + hash: "0906852b1e62a936694a22d6ffa4f5dd" + } + Frame { + msec: 4224 + hash: "61b156acacefa6e4f4ddd8adaca90d08" + } + Frame { + msec: 4240 + hash: "184cff262d1004ce702c117a6b5b9699" + } + Frame { + msec: 4256 + hash: "20561e2faf7e8fe1d6337248e6cd5e94" + } + Frame { + msec: 4272 + hash: "d8859888802e7b54e2d2a44cf252eb54" + } + Frame { + msec: 4288 + hash: "144724168f42372e10ec6c39662a5ed8" + } + Frame { + msec: 4304 + hash: "d2da36fbf73289f545133bd608af66a2" + } + Frame { + msec: 4320 + hash: "b1d7da6b42a31bba91148ab37b111945" + } + Frame { + msec: 4336 + hash: "6f226a3b20d95e17df69e2c4e5aff3d1" + } + Frame { + msec: 4352 + hash: "1109da0f043a9418661fc05e53fe3b45" + } + Frame { + msec: 4368 + hash: "f3e901db9efd1d9fadf1cb6858040d51" + } + Frame { + msec: 4384 + hash: "c8e50c0e924b11a3f1943abb9a4008a4" + } + Frame { + msec: 4400 + hash: "431226a27488ed1dba237de3d43f94c5" + } + Frame { + msec: 4416 + hash: "420d316430c84f10d7cd24d29b918149" + } + Frame { + msec: 4432 + hash: "ccbd4d1e4865ebd9b0fe923e6ab05e5c" + } + Frame { + msec: 4448 + hash: "231bff73758a1c6f7c7c0365159ba3e6" + } + Frame { + msec: 4464 + hash: "d1ac7ceda7303bbf3392d33f47037ed6" + } + Frame { + msec: 4480 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4496 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4512 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4528 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4544 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4560 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4576 + hash: "a2ad07326fafcb3012cdb869f39af466" + } + Frame { + msec: 4592 + hash: "8622eb25a6da44926b5161bce213a483" + } + Frame { + msec: 4608 + hash: "fe563aa9dae9655871f82a779063cdbd" + } + Frame { + msec: 4624 + hash: "775cd79b012f79b773449a0ad8457149" + } + Frame { + msec: 4640 + hash: "01e9fab344a148a0877a7332d561be5a" + } + Frame { + msec: 4656 + hash: "935566d139599a30197850774fb059ba" + } + Frame { + msec: 4672 + hash: "4aae1ac532624417decddd978f516b6e" + } + Frame { + msec: 4688 + hash: "34dc78df6e9941988712c1f8f79c3db0" + } + Frame { + msec: 4704 + hash: "23a96c11d5917c44bd48239ed2b5777f" + } + Frame { + msec: 4720 + hash: "f8f13e097eae3152db3ccebff1343fe0" + } + Frame { + msec: 4736 + hash: "02f8fca7c4ab80ecf425e4b39e966b86" + } + Frame { + msec: 4752 + hash: "c3356367750e797ff81bc4102f948134" + } + Frame { + msec: 4768 + hash: "7b5de3772b8bcb4b10f3d265d5603afb" + } + Frame { + msec: 4784 + hash: "ed3c741639232377f61867fd353ce58a" + } + Frame { + msec: 4800 + image: "cursorDelegate.4.png" + } + Frame { + msec: 4816 + hash: "5ca117709284f4a1cbd64cdba4079340" + } + Frame { + msec: 4832 + hash: "de315e6836334fd0a2da855f5be4ff30" + } + Frame { + msec: 4848 + hash: "3d284b4000d2849ed4af2f7c1b859492" + } + Frame { + msec: 4864 + hash: "83f297406b1c6311da3a216024836d15" + } + Frame { + msec: 4880 + hash: "1bb236db749ef514c00d0a3dd698d24f" + } + Frame { + msec: 4896 + hash: "93f79f8717948bde8ee55c668af2d397" + } + Frame { + msec: 4912 + hash: "881b5c2ccd0bbdaea4d61abbec600fc5" + } + Frame { + msec: 4928 + hash: "be72fe7c27901db62f2dbd9a757e4838" + } + Frame { + msec: 4944 + hash: "c83c973fb1253ccab333fb1e604155b8" + } + Frame { + msec: 4960 + hash: "dd6072d204812c23e24db1e7a81c6f57" + } + Frame { + msec: 4976 + hash: "fb342743dc5ab9ade2b8a48a2a11dc8f" + } + Frame { + msec: 4992 + hash: "fc8ede705bfe8f339fe47041c502b0d6" + } + Frame { + msec: 5008 + hash: "00fa0306d3fdc7e384cfc0660a3a355d" + } + Frame { + msec: 5024 + hash: "00fa0306d3fdc7e384cfc0660a3a355d" + } + Frame { + msec: 5040 + hash: "fc8ede705bfe8f339fe47041c502b0d6" + } + Frame { + msec: 5056 + hash: "fb342743dc5ab9ade2b8a48a2a11dc8f" + } + Frame { + msec: 5072 + hash: "dd6072d204812c23e24db1e7a81c6f57" + } + Frame { + msec: 5088 + hash: "c83c973fb1253ccab333fb1e604155b8" + } + Frame { + msec: 5104 + hash: "be72fe7c27901db62f2dbd9a757e4838" + } + Frame { + msec: 5120 + hash: "881b5c2ccd0bbdaea4d61abbec600fc5" + } + Frame { + msec: 5136 + hash: "93f79f8717948bde8ee55c668af2d397" + } + Frame { + msec: 5152 + hash: "1bb236db749ef514c00d0a3dd698d24f" + } + Frame { + msec: 5168 + hash: "83f297406b1c6311da3a216024836d15" + } + Frame { + msec: 5184 + hash: "3d284b4000d2849ed4af2f7c1b859492" + } + Frame { + msec: 5200 + hash: "de315e6836334fd0a2da855f5be4ff30" + } + Frame { + msec: 5216 + hash: "5ca117709284f4a1cbd64cdba4079340" + } + Frame { + msec: 5232 + hash: "4f0d49aff27a1c83287d38e760c10f16" + } + Frame { + msec: 5248 + hash: "ed3c741639232377f61867fd353ce58a" + } + Frame { + msec: 5264 + hash: "7b5de3772b8bcb4b10f3d265d5603afb" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png new file mode 100644 index 0000000..7c68d9c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png new file mode 100644 index 0000000..96afa8d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png new file mode 100644 index 0000000..58b168d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png new file mode 100644 index 0000000..95f0c98 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml new file mode 100644 index 0000000..7b00cdd --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/qt-669.qml @@ -0,0 +1,1371 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 32 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 48 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 64 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 80 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 96 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 112 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 128 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 144 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 160 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 176 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 192 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 208 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 224 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 240 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 256 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 272 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 288 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 304 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 320 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 336 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 352 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 368 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 384 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 400 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 416 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 432 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 448 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 464 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 480 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 496 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 512 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 528 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 560 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 576 + hash: "b6f3847d394c87873e34814e332e205a" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 592 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 608 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 624 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 640 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 656 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 672 + hash: "b6f3847d394c87873e34814e332e205a" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 688 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 704 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 720 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 736 + hash: "40504095d8877e37cd24ac694ca94758" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 752 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 768 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 784 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 800 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 816 + hash: "40504095d8877e37cd24ac694ca94758" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 832 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 848 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 864 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 880 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 896 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 912 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 928 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 944 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 960 + image: "qt-669.0.png" + } + Frame { + msec: 976 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 992 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 1008 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1024 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 1040 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 1056 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 1072 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 1088 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1104 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 1120 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 1136 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1152 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 1168 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 1184 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 1200 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 1216 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1232 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 1248 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 1264 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 1280 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1296 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 1312 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 1328 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 1344 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1360 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1376 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1392 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1408 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1424 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1440 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1456 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1472 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1488 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1504 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1520 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1536 + hash: "6a76601730228708049c79b414b3cbe2" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1552 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1568 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1584 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1600 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1616 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1632 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1648 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1664 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1680 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1696 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1712 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1728 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1744 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1760 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1776 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1792 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1808 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1824 + hash: "6a76601730228708049c79b414b3cbe2" + } + Frame { + msec: 1840 + hash: "6a76601730228708049c79b414b3cbe2" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1856 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1872 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1888 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1904 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1920 + image: "qt-669.1.png" + } + Frame { + msec: 1936 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1952 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1968 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 1984 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2000 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 2016 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 2032 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 2048 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Frame { + msec: 2064 + hash: "2dc196a65cb13214901e0189c2b1984b" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2080 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 2096 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 2112 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 2128 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 2144 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2160 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 2176 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 2192 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 2208 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Frame { + msec: 2224 + hash: "2da2b87d285f27ee4cdd82c2c03cdf08" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2240 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 2256 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2272 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 2288 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 2304 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 2320 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Frame { + msec: 2336 + hash: "5e8b89638494bceaed69ce3d75245458" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2352 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2368 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2384 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2400 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2416 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2432 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2448 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2464 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2480 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2496 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2512 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2528 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2544 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2560 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2576 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Frame { + msec: 2592 + hash: "0c7162e2bf228c76c7b9247e7ee1cf63" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2608 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 2624 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 2640 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 2656 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 2672 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2688 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 2704 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 2720 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 2736 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Frame { + msec: 2752 + hash: "ad3b0560a1e896c39acff9a7cf53b043" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2768 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 2784 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 2800 + hash: "40504095d8877e37cd24ac694ca94758" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2816 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 2832 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 2848 + hash: "40504095d8877e37cd24ac694ca94758" + } + Frame { + msec: 2864 + hash: "40504095d8877e37cd24ac694ca94758" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2880 + image: "qt-669.2.png" + } + Frame { + msec: 2896 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 2912 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 2928 + hash: "b6f3847d394c87873e34814e332e205a" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2944 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 2960 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 2976 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 2992 + hash: "b6f3847d394c87873e34814e332e205a" + } + Frame { + msec: 3008 + hash: "b6f3847d394c87873e34814e332e205a" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3024 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3040 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3056 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3072 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3088 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3104 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3120 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3136 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3152 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3168 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3184 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3200 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3216 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3232 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3248 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3264 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3280 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3296 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3312 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3328 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3344 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3360 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3376 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3392 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3408 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3424 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3440 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3456 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3472 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3488 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3504 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3520 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3536 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3552 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3568 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3584 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3600 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3616 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3632 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3648 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3664 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3680 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Frame { + msec: 3696 + hash: "3f5f573f37883dc025e21a1fd99eef63" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3712 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3728 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3744 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3760 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3776 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3792 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3808 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3824 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3840 + image: "qt-669.3.png" + } + Frame { + msec: 3856 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3872 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3888 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3904 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3920 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3936 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3952 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3968 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 3984 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4000 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4016 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4032 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4048 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4064 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4080 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4096 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4112 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4128 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4144 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4160 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4176 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4192 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4208 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4224 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4240 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4256 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4272 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4288 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } + Frame { + msec: 4304 + hash: "8d8671fb6c3413f38308a0dd15026eae" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.0.png new file mode 100644 index 0000000..e69860e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.1.png new file mode 100644 index 0000000..1db3c26 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.10.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.10.png new file mode 100644 index 0000000..9c72d52 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.10.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.11.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.11.png new file mode 100644 index 0000000..9c72d52 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.11.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.2.png new file mode 100644 index 0000000..fbef805 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.3.png new file mode 100644 index 0000000..dc56c7e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.4.png new file mode 100644 index 0000000..04ea496 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.5.png new file mode 100644 index 0000000..98bf7de Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.6.png new file mode 100644 index 0000000..d95b895 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.7.png new file mode 100644 index 0000000..9954344 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.8.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.8.png new file mode 100644 index 0000000..d49c2ff Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.9.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.9.png new file mode 100644 index 0000000..9c72d52 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.qml new file mode 100644 index 0000000..c12094e --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/usingMultilineEdit.qml @@ -0,0 +1,4687 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 32 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 48 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 64 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 80 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 96 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 112 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 128 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 144 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 160 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 176 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 192 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 208 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 224 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 240 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 256 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 272 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 288 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 304 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 320 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 118; y: 70 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 336 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 352 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 368 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 384 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 400 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 118; y: 70 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 416 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 432 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 448 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 464 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 480 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 496 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 512 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 528 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 544 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 560 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 576 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 592 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 608 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 624 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 640 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 117; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 656 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 672 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 117; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 688 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 704 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 720 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 736 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 752 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 768 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 784 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 800 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 816 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 832 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 848 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 864 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 880 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 896 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 912 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 928 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 944 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 960 + image: "usingMultilineEdit.0.png" + } + Frame { + msec: 976 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 992 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1008 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1024 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1040 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1056 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1072 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1088 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1104 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1120 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1136 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1152 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1168 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1184 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1200 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1216 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1232 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1248 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1264 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1280 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1296 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Key { + type: 6 + key: 44 + modifiers: 0 + text: "2c" + autorep: false + count: 1 + } + Frame { + msec: 1312 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Frame { + msec: 1328 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Frame { + msec: 1344 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Frame { + msec: 1360 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Frame { + msec: 1376 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Key { + type: 7 + key: 44 + modifiers: 0 + text: "2c" + autorep: false + count: 1 + } + Frame { + msec: 1392 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1408 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1424 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1440 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1456 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1472 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1488 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1504 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1520 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1536 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1552 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Key { + type: 6 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 1568 + hash: "b392b8d675e61166e9707f4a7f191c15" + } + Frame { + msec: 1584 + hash: "b392b8d675e61166e9707f4a7f191c15" + } + Frame { + msec: 1600 + hash: "b392b8d675e61166e9707f4a7f191c15" + } + Key { + type: 7 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 1616 + hash: "b392b8d675e61166e9707f4a7f191c15" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1632 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1648 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1664 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1680 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1696 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1712 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1728 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1744 + hash: "cea68eaed3000fe598917688b49525b7" + } + Frame { + msec: 1760 + hash: "cea68eaed3000fe598917688b49525b7" + } + Frame { + msec: 1776 + hash: "cea68eaed3000fe598917688b49525b7" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1792 + hash: "cea68eaed3000fe598917688b49525b7" + } + Frame { + msec: 1808 + hash: "cea68eaed3000fe598917688b49525b7" + } + Frame { + msec: 1824 + hash: "cea68eaed3000fe598917688b49525b7" + } + Key { + type: 6 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 1840 + hash: "968932500933300e0a0ca711067d6659" + } + Frame { + msec: 1856 + hash: "968932500933300e0a0ca711067d6659" + } + Frame { + msec: 1872 + hash: "968932500933300e0a0ca711067d6659" + } + Frame { + msec: 1888 + hash: "968932500933300e0a0ca711067d6659" + } + Frame { + msec: 1904 + hash: "968932500933300e0a0ca711067d6659" + } + Key { + type: 7 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1920 + image: "usingMultilineEdit.1.png" + } + Frame { + msec: 1936 + hash: "1d5b3f8dc6e0701c0c11a330e055ba5d" + } + Frame { + msec: 1952 + hash: "1d5b3f8dc6e0701c0c11a330e055ba5d" + } + Frame { + msec: 1968 + hash: "1d5b3f8dc6e0701c0c11a330e055ba5d" + } + Key { + type: 6 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 1984 + hash: "067182091936c99dfa5c29b226bd4351" + } + Frame { + msec: 2000 + hash: "067182091936c99dfa5c29b226bd4351" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 2016 + hash: "067182091936c99dfa5c29b226bd4351" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2032 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2048 + hash: "810e996b65424f80e229160860805492" + } + Key { + type: 7 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 2064 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2080 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2096 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2112 + hash: "810e996b65424f80e229160860805492" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2128 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2144 + hash: "810e996b65424f80e229160860805492" + } + Key { + type: 6 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 2160 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2176 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2192 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2208 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2224 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2240 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Key { + type: 7 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Key { + type: 6 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 2256 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2272 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2288 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2304 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2320 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Key { + type: 7 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 2336 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2352 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 2368 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Frame { + msec: 2384 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Frame { + msec: 2400 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Frame { + msec: 2416 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 2432 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Key { + type: 6 + key: 80 + modifiers: 0 + text: "70" + autorep: false + count: 1 + } + Frame { + msec: 2448 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2464 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2480 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2496 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2512 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2528 + hash: "35c0c51dd874faa28058251164836dcb" + } + Key { + type: 7 + key: 80 + modifiers: 0 + text: "70" + autorep: false + count: 1 + } + Frame { + msec: 2544 + hash: "35c0c51dd874faa28058251164836dcb" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2560 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2576 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2592 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2608 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2624 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2640 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2656 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2672 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2688 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Key { + type: 6 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 2704 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2720 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2736 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2752 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2768 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2784 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Key { + type: 6 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 2800 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Key { + type: 7 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 2816 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2832 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2848 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2864 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Key { + type: 7 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 2880 + image: "usingMultilineEdit.2.png" + } + Frame { + msec: 2896 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2912 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2928 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Key { + type: 6 + key: 75 + modifiers: 0 + text: "6b" + autorep: false + count: 1 + } + Frame { + msec: 2944 + hash: "d90cbfbec0e5a73781664eec63ba7081" + } + Frame { + msec: 2960 + hash: "d90cbfbec0e5a73781664eec63ba7081" + } + Frame { + msec: 2976 + hash: "d90cbfbec0e5a73781664eec63ba7081" + } + Key { + type: 7 + key: 75 + modifiers: 0 + text: "6b" + autorep: false + count: 1 + } + Key { + type: 6 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 2992 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Frame { + msec: 3008 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Frame { + msec: 3024 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Frame { + msec: 3040 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Key { + type: 7 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 3056 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3072 + hash: "bac072bfe350abe83fbc941e56845939" + } + Frame { + msec: 3088 + hash: "bac072bfe350abe83fbc941e56845939" + } + Frame { + msec: 3104 + hash: "bac072bfe350abe83fbc941e56845939" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3120 + hash: "bac072bfe350abe83fbc941e56845939" + } + Key { + type: 7 + key: 32 + modifiers: 33554432 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3136 + hash: "bac072bfe350abe83fbc941e56845939" + } + Frame { + msec: 3152 + hash: "bac072bfe350abe83fbc941e56845939" + } + Key { + type: 6 + key: 73 + modifiers: 33554432 + text: "49" + autorep: false + count: 1 + } + Frame { + msec: 3168 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Frame { + msec: 3184 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Frame { + msec: 3200 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Frame { + msec: 3216 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Key { + type: 7 + key: 73 + modifiers: 33554432 + text: "49" + autorep: false + count: 1 + } + Frame { + msec: 3232 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3248 + hash: "982d48e7ef886a74791306f055ddc714" + } + Frame { + msec: 3264 + hash: "982d48e7ef886a74791306f055ddc714" + } + Frame { + msec: 3280 + hash: "982d48e7ef886a74791306f055ddc714" + } + Frame { + msec: 3296 + hash: "982d48e7ef886a74791306f055ddc714" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3312 + hash: "982d48e7ef886a74791306f055ddc714" + } + Key { + type: 6 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 3328 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Frame { + msec: 3344 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Frame { + msec: 3360 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Frame { + msec: 3376 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Frame { + msec: 3392 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Key { + type: 7 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 3408 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 3424 + hash: "18d37190d139a1567d91882fdac411d6" + } + Frame { + msec: 3440 + hash: "18d37190d139a1567d91882fdac411d6" + } + Frame { + msec: 3456 + hash: "18d37190d139a1567d91882fdac411d6" + } + Frame { + msec: 3472 + hash: "18d37190d139a1567d91882fdac411d6" + } + Frame { + msec: 3488 + hash: "18d37190d139a1567d91882fdac411d6" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Key { + type: 6 + key: 78 + modifiers: 0 + text: "6e" + autorep: false + count: 1 + } + Frame { + msec: 3504 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3520 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3536 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3552 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3568 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3584 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Key { + type: 7 + key: 78 + modifiers: 0 + text: "6e" + autorep: false + count: 1 + } + Frame { + msec: 3600 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 3616 + hash: "626123df4dc8fc1321d0262871ffbe3e" + } + Frame { + msec: 3632 + hash: "626123df4dc8fc1321d0262871ffbe3e" + } + Frame { + msec: 3648 + hash: "626123df4dc8fc1321d0262871ffbe3e" + } + Frame { + msec: 3664 + hash: "626123df4dc8fc1321d0262871ffbe3e" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3680 + hash: "00972f42fed66eb94832506b436b203d" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 3696 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3712 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3728 + hash: "00972f42fed66eb94832506b436b203d" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3744 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3760 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3776 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3792 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3808 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3824 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3840 + image: "usingMultilineEdit.3.png" + } + Frame { + msec: 3856 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3872 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3888 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3904 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3920 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3936 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3952 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3968 + hash: "00972f42fed66eb94832506b436b203d" + } + Key { + type: 6 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 3984 + hash: "72d952ff90862b93ccec046f61d85360" + } + Frame { + msec: 4000 + hash: "72d952ff90862b93ccec046f61d85360" + } + Frame { + msec: 4016 + hash: "72d952ff90862b93ccec046f61d85360" + } + Frame { + msec: 4032 + hash: "72d952ff90862b93ccec046f61d85360" + } + Frame { + msec: 4048 + hash: "72d952ff90862b93ccec046f61d85360" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4064 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Key { + type: 7 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 4080 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Frame { + msec: 4096 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Frame { + msec: 4112 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Frame { + msec: 4128 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Key { + type: 6 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 4144 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Frame { + msec: 4160 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4176 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Frame { + msec: 4192 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Frame { + msec: 4208 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 4224 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4240 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Key { + type: 7 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 4256 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4272 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 4288 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4304 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4320 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4336 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4352 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4368 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 4384 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Frame { + msec: 4400 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Frame { + msec: 4416 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Frame { + msec: 4432 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Frame { + msec: 4448 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 4464 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4480 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4496 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4512 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4528 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4544 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4560 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4576 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4592 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 4608 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4624 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4640 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4656 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4672 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4688 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4704 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4720 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4736 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4752 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4768 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4784 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4800 + image: "usingMultilineEdit.4.png" + } + Frame { + msec: 4816 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4832 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Key { + type: 6 + key: 63 + modifiers: 33554432 + text: "3f" + autorep: false + count: 1 + } + Frame { + msec: 4848 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4864 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4880 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4896 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4912 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4928 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4944 + hash: "a616e994d83964ff75d95b702f355937" + } + Key { + type: 7 + key: 63 + modifiers: 33554432 + text: "3f" + autorep: false + count: 1 + } + Frame { + msec: 4960 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4976 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4992 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5008 + hash: "a616e994d83964ff75d95b702f355937" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 5024 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5040 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5056 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5072 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5088 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5104 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5120 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5136 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5152 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5168 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5184 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5200 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5216 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5232 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5248 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5264 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5280 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5296 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5312 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5328 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5344 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5360 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5376 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5392 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5408 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5424 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5440 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5456 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5472 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5488 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5504 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5520 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5536 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5552 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5568 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5584 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5600 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5616 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5632 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5648 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5664 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5680 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5696 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5712 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5728 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5744 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5760 + image: "usingMultilineEdit.5.png" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 48; y: 19 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5776 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Frame { + msec: 5792 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Frame { + msec: 5808 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Frame { + msec: 5824 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 21 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 22 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5840 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 23 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5856 + hash: "3ee2836c3a2ff4c71d82dd261941883b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 31 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5872 + hash: "3ee2836c3a2ff4c71d82dd261941883b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 36 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 41 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5888 + hash: "3ee2836c3a2ff4c71d82dd261941883b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5904 + hash: "4e620c1b847274f691e80a384eac5320" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 58; y: 52 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 58 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5920 + hash: "1a246aa1be0878c38da2eaac6befb738" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 69 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5936 + hash: "7d6d4a33aacd1d2f530834af31069793" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 62; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5952 + hash: "eba517141a4dc94025801fabc8c5e813" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5968 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 97 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 105 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 114 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 128 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 130 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 140 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 148 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 149 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 151 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 153 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Frame { + msec: 6208 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Frame { + msec: 6224 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Frame { + msec: 6240 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Frame { + msec: 6256 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6272 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 152 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6288 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6304 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6320 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 63; y: 98 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6336 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6352 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 72 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6368 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 58 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 51 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6384 + hash: "b6589493e0225846be0af57024e25d98" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6400 + hash: "b6589493e0225846be0af57024e25d98" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 30 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6416 + hash: "d8a1bee2a0e57944d8268a2ce7e6c3c1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 16 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 6 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6432 + hash: "a609d3c9cb375240e66dd316af27543c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -2 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -9 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6448 + hash: "0d376060ba0f9843ed814a8d8150d047" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: -23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6464 + hash: "9ad787bf41f0ab66beffff056a115c23" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -31 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6480 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6496 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6512 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6528 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6544 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6560 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6576 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6592 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6608 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6624 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6640 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6656 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6672 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6688 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: -42 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6704 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: -39 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -36 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6720 + image: "usingMultilineEdit.6.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -33 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: -28 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6736 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -25 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -21 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6752 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: -18 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: -14 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6768 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: -10 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -8 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6784 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -6 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: -3 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6800 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: -1 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 0 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6816 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 2 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 3 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6832 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 5 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 7 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6848 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 8 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 10 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6864 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 11 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6880 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 55; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6896 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6912 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6928 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6944 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6960 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6976 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6992 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7008 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7024 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7040 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7056 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7072 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7088 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 59; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7104 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7120 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7136 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7152 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7168 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 59; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7184 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7200 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7216 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7232 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7248 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7264 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7280 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7296 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7312 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7328 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7344 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7360 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7376 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7392 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7408 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7424 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7440 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7456 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7472 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7488 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7504 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7520 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7536 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7552 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7568 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7584 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7600 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7616 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7632 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7648 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7664 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7680 + image: "usingMultilineEdit.7.png" + } + Frame { + msec: 7696 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7712 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7728 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7744 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7760 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7776 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7792 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7808 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7824 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7840 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7856 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7872 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7888 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7904 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7920 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7936 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7952 + hash: "d1f43fa2f710725527736ac3439577df" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 7968 + hash: "1553d42725394fa4d4c9b97dc12a78b9" + } + Frame { + msec: 7984 + hash: "1553d42725394fa4d4c9b97dc12a78b9" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8000 + hash: "a62df700f3209668a813e765a79e7859" + } + Frame { + msec: 8016 + hash: "a62df700f3209668a813e765a79e7859" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8032 + hash: "e8928770969b82523e828e3036bbe106" + } + Frame { + msec: 8048 + hash: "e8928770969b82523e828e3036bbe106" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8064 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8080 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Key { + type: 7 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8096 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8112 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8128 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8144 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8160 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8176 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8192 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8208 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8224 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8240 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8256 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8272 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8288 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8304 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8320 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8336 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8352 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8368 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8384 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8400 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8416 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8432 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8448 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8464 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8480 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8496 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8512 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8528 + hash: "b65c439a091d3293352de410d28aaca1" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8544 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8560 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8576 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8592 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8608 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8624 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8640 + image: "usingMultilineEdit.8.png" + } + Frame { + msec: 8656 + hash: "b65c439a091d3293352de410d28aaca1" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8672 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8688 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8704 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8720 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8736 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8752 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8768 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8784 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8800 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8816 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8832 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8848 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8864 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8880 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8896 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8912 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8928 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8944 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8960 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8976 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8992 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9008 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9024 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9040 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9056 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9072 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9088 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9104 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9120 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9136 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9152 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9168 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9184 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9200 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 70; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9216 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9232 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 74 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9248 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 76 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9264 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9280 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 70; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9296 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9312 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9328 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9344 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9360 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9376 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9392 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9408 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9424 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9440 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 71; y: 94 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9456 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9472 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9488 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9504 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9520 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9536 + hash: "3d08eff16edf54f522a75df1734150df" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 71; y: 94 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9552 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9568 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9584 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9600 + image: "usingMultilineEdit.9.png" + } + Frame { + msec: 9616 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9632 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9648 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9664 + hash: "3d08eff16edf54f522a75df1734150df" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 9680 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9696 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9712 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9728 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9744 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9760 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9776 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9792 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9808 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9824 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9840 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9856 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9872 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9888 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9904 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9920 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9936 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9952 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9968 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9984 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10000 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10016 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10032 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10048 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10064 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10080 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10096 + hash: "3d08eff16edf54f522a75df1734150df" + } + Key { + type: 6 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10112 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10128 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10144 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10160 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10176 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10192 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10208 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10224 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Key { + type: 7 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10240 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10256 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10272 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10288 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10304 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10320 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10336 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10352 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10368 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10384 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10400 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10416 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10432 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10448 + hash: "3d08eff16edf54f522a75df1734150df" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10464 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10480 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10496 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10512 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10528 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10544 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10560 + image: "usingMultilineEdit.10.png" + } + Frame { + msec: 10576 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10592 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10608 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10624 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10640 + hash: "3d08eff16edf54f522a75df1734150df" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10656 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10672 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10688 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10704 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10720 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10736 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10752 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10768 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10784 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10800 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10816 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10832 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10848 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10864 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10880 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10896 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10912 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10928 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10944 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10960 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10976 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10992 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11008 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11024 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11040 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11056 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11072 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11088 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11104 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11120 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11136 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11152 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11168 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11184 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11200 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11216 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11232 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11248 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11264 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11280 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11296 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11312 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11328 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11344 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11360 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11376 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11392 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11408 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11424 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11440 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11456 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11472 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11488 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11504 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11520 + image: "usingMultilineEdit.11.png" + } + Frame { + msec: 11536 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11552 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11568 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11584 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11600 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11616 + hash: "3d08eff16edf54f522a75df1734150df" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png index ec65f49..4f51246 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png index ec65f49..a27067f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png index ec65f49..e33a8b0 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png index ec65f49..fb35f56 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png index ec65f49..9eab398 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png index ec65f49..66edb6b 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png index ec65f49..66edb6b 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml index 1f5b365..defaf78 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-X11/wrap.qml @@ -6,7 +6,7 @@ VisualTest { } Frame { msec: 16 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "d9acaa85ca366aac5a63f59b8913039a" } Key { type: 6 @@ -18,7 +18,7 @@ VisualTest { } Frame { msec: 32 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "81b7e0be317f0ca4425fa75ac5a73be9" } Key { type: 7 @@ -30,11 +30,11 @@ VisualTest { } Frame { msec: 48 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "81b7e0be317f0ca4425fa75ac5a73be9" } Frame { msec: 64 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "81b7e0be317f0ca4425fa75ac5a73be9" } Key { type: 7 @@ -46,11 +46,11 @@ VisualTest { } Frame { msec: 80 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "81b7e0be317f0ca4425fa75ac5a73be9" } Frame { msec: 96 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "81b7e0be317f0ca4425fa75ac5a73be9" } Key { type: 6 @@ -62,15 +62,15 @@ VisualTest { } Frame { msec: 112 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ad65e3fe3973343e9b6feb1c28ee40f4" } Frame { msec: 128 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ad65e3fe3973343e9b6feb1c28ee40f4" } Frame { msec: 144 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ad65e3fe3973343e9b6feb1c28ee40f4" } Key { type: 6 @@ -82,15 +82,15 @@ VisualTest { } Frame { msec: 160 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "187c3d689a5b217d8e886464303840aa" } Frame { msec: 176 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "187c3d689a5b217d8e886464303840aa" } Frame { msec: 192 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "187c3d689a5b217d8e886464303840aa" } Key { type: 7 @@ -102,11 +102,11 @@ VisualTest { } Frame { msec: 208 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "187c3d689a5b217d8e886464303840aa" } Frame { msec: 224 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "187c3d689a5b217d8e886464303840aa" } Key { type: 6 @@ -118,7 +118,7 @@ VisualTest { } Frame { msec: 240 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "572954512211be45ec468ca0c541f87b" } Key { type: 7 @@ -130,19 +130,19 @@ VisualTest { } Frame { msec: 256 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "572954512211be45ec468ca0c541f87b" } Frame { msec: 272 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "572954512211be45ec468ca0c541f87b" } Frame { msec: 288 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "572954512211be45ec468ca0c541f87b" } Frame { msec: 304 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "572954512211be45ec468ca0c541f87b" } Key { type: 7 @@ -154,11 +154,11 @@ VisualTest { } Frame { msec: 320 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "572954512211be45ec468ca0c541f87b" } Frame { msec: 336 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "572954512211be45ec468ca0c541f87b" } Key { type: 6 @@ -170,19 +170,19 @@ VisualTest { } Frame { msec: 352 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a3ea4d6ebf0b267a01e18d4d7139cace" } Frame { msec: 368 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a3ea4d6ebf0b267a01e18d4d7139cace" } Frame { msec: 384 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a3ea4d6ebf0b267a01e18d4d7139cace" } Frame { msec: 400 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a3ea4d6ebf0b267a01e18d4d7139cace" } Key { type: 7 @@ -194,19 +194,19 @@ VisualTest { } Frame { msec: 416 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a3ea4d6ebf0b267a01e18d4d7139cace" } Frame { msec: 432 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a3ea4d6ebf0b267a01e18d4d7139cace" } Frame { msec: 448 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a3ea4d6ebf0b267a01e18d4d7139cace" } Frame { msec: 464 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a3ea4d6ebf0b267a01e18d4d7139cace" } Key { type: 6 @@ -218,19 +218,19 @@ VisualTest { } Frame { msec: 480 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "36fb24a55e2cda02c3001adaa67e82a7" } Frame { msec: 496 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "36fb24a55e2cda02c3001adaa67e82a7" } Frame { msec: 512 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "36fb24a55e2cda02c3001adaa67e82a7" } Frame { msec: 528 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41fc29e728daf52d54a3acacceabab39" } Key { type: 6 @@ -250,23 +250,23 @@ VisualTest { } Frame { msec: 544 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "cc3eb1d7263556949e5f7ad3862d9959" } Frame { msec: 560 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "cc3eb1d7263556949e5f7ad3862d9959" } Frame { msec: 576 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "cc3eb1d7263556949e5f7ad3862d9959" } Frame { msec: 592 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "cc3eb1d7263556949e5f7ad3862d9959" } Frame { msec: 608 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "cc3eb1d7263556949e5f7ad3862d9959" } Key { type: 7 @@ -286,19 +286,19 @@ VisualTest { } Frame { msec: 624 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1ebd7df1875dc93984c9b663791c058e" } Frame { msec: 640 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1ebd7df1875dc93984c9b663791c058e" } Frame { msec: 656 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1ebd7df1875dc93984c9b663791c058e" } Frame { msec: 672 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1ebd7df1875dc93984c9b663791c058e" } Key { type: 7 @@ -310,11 +310,11 @@ VisualTest { } Frame { msec: 688 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1ebd7df1875dc93984c9b663791c058e" } Frame { msec: 704 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1ebd7df1875dc93984c9b663791c058e" } Key { type: 6 @@ -326,23 +326,23 @@ VisualTest { } Frame { msec: 720 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "35ad49d6517b35bd410db9770818918d" } Frame { msec: 736 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "35ad49d6517b35bd410db9770818918d" } Frame { msec: 752 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "35ad49d6517b35bd410db9770818918d" } Frame { msec: 768 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "35ad49d6517b35bd410db9770818918d" } Frame { msec: 784 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "35ad49d6517b35bd410db9770818918d" } Key { type: 7 @@ -354,7 +354,7 @@ VisualTest { } Frame { msec: 800 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "35ad49d6517b35bd410db9770818918d" } Key { type: 6 @@ -366,15 +366,15 @@ VisualTest { } Frame { msec: 816 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "af5ec042c8a5e5b1942cb3e14a646b3a" } Frame { msec: 832 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "af5ec042c8a5e5b1942cb3e14a646b3a" } Frame { msec: 848 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "af5ec042c8a5e5b1942cb3e14a646b3a" } Key { type: 7 @@ -386,15 +386,15 @@ VisualTest { } Frame { msec: 864 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "af5ec042c8a5e5b1942cb3e14a646b3a" } Frame { msec: 880 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "af5ec042c8a5e5b1942cb3e14a646b3a" } Frame { msec: 896 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "af5ec042c8a5e5b1942cb3e14a646b3a" } Key { type: 6 @@ -406,15 +406,15 @@ VisualTest { } Frame { msec: 912 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3e21db7face603e4a41010e10fdc35eb" } Frame { msec: 928 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3e21db7face603e4a41010e10fdc35eb" } Frame { msec: 944 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3e21db7face603e4a41010e10fdc35eb" } Frame { msec: 960 @@ -422,11 +422,11 @@ VisualTest { } Frame { msec: 976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3e21db7face603e4a41010e10fdc35eb" } Frame { msec: 992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3e21db7face603e4a41010e10fdc35eb" } Key { type: 6 @@ -446,23 +446,23 @@ VisualTest { } Frame { msec: 1008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "f681181b9e889f2fe0ac5ccddaa8c39f" } Frame { msec: 1024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1072 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Key { type: 7 @@ -474,31 +474,31 @@ VisualTest { } Frame { msec: 1088 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1104 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1120 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1136 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1152 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1168 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Frame { msec: 1184 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6d8069ea1f16634ebcf94ba45041984f" } Key { type: 6 @@ -510,23 +510,23 @@ VisualTest { } Frame { msec: 1200 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4058b4a448b3836e980e2167628d5d45" } Frame { msec: 1216 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4058b4a448b3836e980e2167628d5d45" } Frame { msec: 1232 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4058b4a448b3836e980e2167628d5d45" } Frame { msec: 1248 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4058b4a448b3836e980e2167628d5d45" } Frame { msec: 1264 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4058b4a448b3836e980e2167628d5d45" } Key { type: 7 @@ -546,11 +546,11 @@ VisualTest { } Frame { msec: 1280 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9546e50697fd316e17b990d3ab235b8c" } Frame { msec: 1296 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9546e50697fd316e17b990d3ab235b8c" } Key { type: 6 @@ -562,15 +562,15 @@ VisualTest { } Frame { msec: 1312 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Frame { msec: 1328 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Frame { msec: 1344 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Key { type: 7 @@ -582,11 +582,11 @@ VisualTest { } Frame { msec: 1360 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Frame { msec: 1376 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Key { type: 7 @@ -598,19 +598,19 @@ VisualTest { } Frame { msec: 1392 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Frame { msec: 1408 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Frame { msec: 1424 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Frame { msec: 1440 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4f7a3795af41fc641483b6de3829a9b5" } Key { type: 6 @@ -622,23 +622,23 @@ VisualTest { } Frame { msec: 1456 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a086058fa845a399a222c2571ef25442" } Frame { msec: 1472 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a086058fa845a399a222c2571ef25442" } Frame { msec: 1488 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a086058fa845a399a222c2571ef25442" } Frame { msec: 1504 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a086058fa845a399a222c2571ef25442" } Frame { msec: 1520 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "7e63c2f83280eee33bb3c954d769e297" } Key { type: 7 @@ -650,11 +650,11 @@ VisualTest { } Frame { msec: 1536 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "7e63c2f83280eee33bb3c954d769e297" } Frame { msec: 1552 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "7e63c2f83280eee33bb3c954d769e297" } Key { type: 6 @@ -666,23 +666,23 @@ VisualTest { } Frame { msec: 1568 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a4a912ce9cee7ba833e70df683668d8e" } Frame { msec: 1584 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a4a912ce9cee7ba833e70df683668d8e" } Frame { msec: 1600 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a4a912ce9cee7ba833e70df683668d8e" } Frame { msec: 1616 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a4a912ce9cee7ba833e70df683668d8e" } Frame { msec: 1632 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a4a912ce9cee7ba833e70df683668d8e" } Key { type: 6 @@ -702,23 +702,23 @@ VisualTest { } Frame { msec: 1648 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0ca0b36e56019968875c059bf95e133" } Frame { msec: 1664 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0ca0b36e56019968875c059bf95e133" } Frame { msec: 1680 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0ca0b36e56019968875c059bf95e133" } Frame { msec: 1696 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0ca0b36e56019968875c059bf95e133" } Frame { msec: 1712 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0ca0b36e56019968875c059bf95e133" } Key { type: 6 @@ -730,15 +730,15 @@ VisualTest { } Frame { msec: 1728 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3c06f171b86ed55a425fdb316591a4f4" } Frame { msec: 1744 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3c06f171b86ed55a425fdb316591a4f4" } Frame { msec: 1760 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3c06f171b86ed55a425fdb316591a4f4" } Key { type: 7 @@ -750,7 +750,7 @@ VisualTest { } Frame { msec: 1776 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "3c06f171b86ed55a425fdb316591a4f4" } Key { type: 6 @@ -762,11 +762,11 @@ VisualTest { } Frame { msec: 1792 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Frame { msec: 1808 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Key { type: 7 @@ -778,19 +778,19 @@ VisualTest { } Frame { msec: 1824 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Frame { msec: 1840 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Frame { msec: 1856 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Frame { msec: 1872 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Key { type: 7 @@ -802,11 +802,11 @@ VisualTest { } Frame { msec: 1888 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Frame { msec: 1904 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Frame { msec: 1920 @@ -814,11 +814,11 @@ VisualTest { } Frame { msec: 1936 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Frame { msec: 1952 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "e5100e36d546b8af34bfc7a68317fa74" } Key { type: 6 @@ -830,27 +830,27 @@ VisualTest { } Frame { msec: 1968 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "2ddf4c1b9ec2d5540c456e10c2af775e" } Frame { msec: 1984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "2ddf4c1b9ec2d5540c456e10c2af775e" } Frame { msec: 2000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "2ddf4c1b9ec2d5540c456e10c2af775e" } Frame { msec: 2016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6e626464dfc68af86649589a23fe5368" } Frame { msec: 2032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6e626464dfc68af86649589a23fe5368" } Frame { msec: 2048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6e626464dfc68af86649589a23fe5368" } Key { type: 6 @@ -862,7 +862,7 @@ VisualTest { } Frame { msec: 2064 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Key { type: 7 @@ -874,15 +874,15 @@ VisualTest { } Frame { msec: 2080 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Frame { msec: 2096 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Frame { msec: 2112 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Key { type: 7 @@ -894,27 +894,27 @@ VisualTest { } Frame { msec: 2128 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Frame { msec: 2144 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Frame { msec: 2160 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Frame { msec: 2176 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Frame { msec: 2192 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Frame { msec: 2208 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e3a9ddf097022722e9e7ebb5e0bbeed" } Key { type: 6 @@ -926,23 +926,23 @@ VisualTest { } Frame { msec: 2224 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "d715ce5ca080ba5045c16f88211ca2a7" } Frame { msec: 2240 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "d715ce5ca080ba5045c16f88211ca2a7" } Frame { msec: 2256 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "d715ce5ca080ba5045c16f88211ca2a7" } Frame { msec: 2272 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "d715ce5ca080ba5045c16f88211ca2a7" } Frame { msec: 2288 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "d715ce5ca080ba5045c16f88211ca2a7" } Key { type: 6 @@ -954,7 +954,7 @@ VisualTest { } Frame { msec: 2304 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "11f9035d665a6eed88ea9e3030b111c7" } Key { type: 7 @@ -966,15 +966,15 @@ VisualTest { } Frame { msec: 2320 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "11f9035d665a6eed88ea9e3030b111c7" } Frame { msec: 2336 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "11f9035d665a6eed88ea9e3030b111c7" } Frame { msec: 2352 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "11f9035d665a6eed88ea9e3030b111c7" } Key { type: 6 @@ -986,11 +986,11 @@ VisualTest { } Frame { msec: 2368 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8277b43c48def7e966bbb96309042fe6" } Frame { msec: 2384 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8277b43c48def7e966bbb96309042fe6" } Key { type: 7 @@ -1002,15 +1002,15 @@ VisualTest { } Frame { msec: 2400 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8277b43c48def7e966bbb96309042fe6" } Frame { msec: 2416 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8277b43c48def7e966bbb96309042fe6" } Frame { msec: 2432 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8277b43c48def7e966bbb96309042fe6" } Key { type: 7 @@ -1022,15 +1022,15 @@ VisualTest { } Frame { msec: 2448 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8277b43c48def7e966bbb96309042fe6" } Frame { msec: 2464 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8277b43c48def7e966bbb96309042fe6" } Frame { msec: 2480 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8277b43c48def7e966bbb96309042fe6" } Key { type: 6 @@ -1042,19 +1042,19 @@ VisualTest { } Frame { msec: 2496 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1475ec7421f2c16f7dbb13eeb35f21c8" } Frame { msec: 2512 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1475ec7421f2c16f7dbb13eeb35f21c8" } Frame { msec: 2528 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0a5589c5877c807b8d9540a1dd86e265" } Frame { msec: 2544 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0a5589c5877c807b8d9540a1dd86e265" } Key { type: 7 @@ -1066,27 +1066,27 @@ VisualTest { } Frame { msec: 2560 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0a5589c5877c807b8d9540a1dd86e265" } Frame { msec: 2576 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0a5589c5877c807b8d9540a1dd86e265" } Frame { msec: 2592 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0a5589c5877c807b8d9540a1dd86e265" } Frame { msec: 2608 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0a5589c5877c807b8d9540a1dd86e265" } Frame { msec: 2624 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0a5589c5877c807b8d9540a1dd86e265" } Frame { msec: 2640 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0a5589c5877c807b8d9540a1dd86e265" } Key { type: 6 @@ -1098,19 +1098,19 @@ VisualTest { } Frame { msec: 2656 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "eff9abb425dbd30a0eb8ee940c2a0fdc" } Frame { msec: 2672 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "eff9abb425dbd30a0eb8ee940c2a0fdc" } Frame { msec: 2688 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "eff9abb425dbd30a0eb8ee940c2a0fdc" } Frame { msec: 2704 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "eff9abb425dbd30a0eb8ee940c2a0fdc" } Key { type: 7 @@ -1122,15 +1122,15 @@ VisualTest { } Frame { msec: 2720 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "eff9abb425dbd30a0eb8ee940c2a0fdc" } Frame { msec: 2736 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "eff9abb425dbd30a0eb8ee940c2a0fdc" } Frame { msec: 2752 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "eff9abb425dbd30a0eb8ee940c2a0fdc" } Key { type: 6 @@ -1142,23 +1142,23 @@ VisualTest { } Frame { msec: 2768 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "dbc4c1e9f452575a2b543f3cc9ed53eb" } Frame { msec: 2784 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "dbc4c1e9f452575a2b543f3cc9ed53eb" } Frame { msec: 2800 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "dbc4c1e9f452575a2b543f3cc9ed53eb" } Frame { msec: 2816 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "dbc4c1e9f452575a2b543f3cc9ed53eb" } Frame { msec: 2832 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "dbc4c1e9f452575a2b543f3cc9ed53eb" } Key { type: 6 @@ -1178,11 +1178,11 @@ VisualTest { } Frame { msec: 2848 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8ea955780d76128c025cf1a51c995075" } Frame { msec: 2864 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8ea955780d76128c025cf1a51c995075" } Frame { msec: 2880 @@ -1190,7 +1190,7 @@ VisualTest { } Frame { msec: 2896 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8ea955780d76128c025cf1a51c995075" } Key { type: 6 @@ -1202,11 +1202,11 @@ VisualTest { } Frame { msec: 2912 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ab08c67bc5c8f53bba66ad48f618d9c9" } Frame { msec: 2928 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ab08c67bc5c8f53bba66ad48f618d9c9" } Key { type: 7 @@ -1218,11 +1218,11 @@ VisualTest { } Frame { msec: 2944 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ab08c67bc5c8f53bba66ad48f618d9c9" } Frame { msec: 2960 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ab08c67bc5c8f53bba66ad48f618d9c9" } Key { type: 7 @@ -1234,35 +1234,35 @@ VisualTest { } Frame { msec: 2976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ab08c67bc5c8f53bba66ad48f618d9c9" } Frame { msec: 2992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ab08c67bc5c8f53bba66ad48f618d9c9" } Frame { msec: 3008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "ab08c67bc5c8f53bba66ad48f618d9c9" } Frame { msec: 3024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "718894676b3feeff1924b9b315838551" } Frame { msec: 3040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "718894676b3feeff1924b9b315838551" } Frame { msec: 3056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "718894676b3feeff1924b9b315838551" } Frame { msec: 3072 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "718894676b3feeff1924b9b315838551" } Frame { msec: 3088 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "718894676b3feeff1924b9b315838551" } Key { type: 6 @@ -1274,23 +1274,23 @@ VisualTest { } Frame { msec: 3104 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Frame { msec: 3120 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Frame { msec: 3136 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Frame { msec: 3152 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Frame { msec: 3168 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Key { type: 7 @@ -1302,23 +1302,23 @@ VisualTest { } Frame { msec: 3184 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Frame { msec: 3200 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Frame { msec: 3216 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Frame { msec: 3232 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Frame { msec: 3248 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "32ee9af5d9f714bbcc32206be600f309" } Key { type: 6 @@ -1330,15 +1330,15 @@ VisualTest { } Frame { msec: 3264 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0e5a0e32f40d3e02758a394797cb3947" } Frame { msec: 3280 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0e5a0e32f40d3e02758a394797cb3947" } Frame { msec: 3296 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0e5a0e32f40d3e02758a394797cb3947" } Key { type: 7 @@ -1350,15 +1350,15 @@ VisualTest { } Frame { msec: 3312 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0e5a0e32f40d3e02758a394797cb3947" } Frame { msec: 3328 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0e5a0e32f40d3e02758a394797cb3947" } Frame { msec: 3344 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0e5a0e32f40d3e02758a394797cb3947" } Key { type: 6 @@ -1370,23 +1370,23 @@ VisualTest { } Frame { msec: 3360 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "31079d862bb5b41e36e146201f8c34d2" } Frame { msec: 3376 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "31079d862bb5b41e36e146201f8c34d2" } Frame { msec: 3392 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "31079d862bb5b41e36e146201f8c34d2" } Frame { msec: 3408 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "31079d862bb5b41e36e146201f8c34d2" } Frame { msec: 3424 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "31079d862bb5b41e36e146201f8c34d2" } Key { type: 7 @@ -1398,15 +1398,15 @@ VisualTest { } Frame { msec: 3440 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "31079d862bb5b41e36e146201f8c34d2" } Frame { msec: 3456 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "31079d862bb5b41e36e146201f8c34d2" } Frame { msec: 3472 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "31079d862bb5b41e36e146201f8c34d2" } Key { type: 6 @@ -1418,19 +1418,19 @@ VisualTest { } Frame { msec: 3488 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1e5e9ab44b9c703637e58bb248026b51" } Frame { msec: 3504 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1e5e9ab44b9c703637e58bb248026b51" } Frame { msec: 3520 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1e5e9ab44b9c703637e58bb248026b51" } Frame { msec: 3536 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1e5e9ab44b9c703637e58bb248026b51" } Key { type: 7 @@ -1442,11 +1442,11 @@ VisualTest { } Frame { msec: 3552 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1e5e9ab44b9c703637e58bb248026b51" } Frame { msec: 3568 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "1e5e9ab44b9c703637e58bb248026b51" } Key { type: 6 @@ -1458,27 +1458,27 @@ VisualTest { } Frame { msec: 3584 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "18f5f77a48858fb5584d55ba3f3a94d3" } Frame { msec: 3600 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "18f5f77a48858fb5584d55ba3f3a94d3" } Frame { msec: 3616 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "18f5f77a48858fb5584d55ba3f3a94d3" } Frame { msec: 3632 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "18f5f77a48858fb5584d55ba3f3a94d3" } Frame { msec: 3648 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "18f5f77a48858fb5584d55ba3f3a94d3" } Frame { msec: 3664 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "18f5f77a48858fb5584d55ba3f3a94d3" } Key { type: 6 @@ -1490,7 +1490,7 @@ VisualTest { } Frame { msec: 3680 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Key { type: 7 @@ -1502,23 +1502,23 @@ VisualTest { } Frame { msec: 3696 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3712 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3728 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3744 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3760 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Key { type: 7 @@ -1530,19 +1530,19 @@ VisualTest { } Frame { msec: 3776 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3792 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3808 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3824 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3840 @@ -1550,19 +1550,19 @@ VisualTest { } Frame { msec: 3856 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3872 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3888 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Frame { msec: 3904 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "63d557c9ea24a9e63d6bdfc6259c8bf9" } Key { type: 6 @@ -1574,23 +1574,23 @@ VisualTest { } Frame { msec: 3920 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "67b49fc16da9390bff9814b34659baca" } Frame { msec: 3936 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "67b49fc16da9390bff9814b34659baca" } Frame { msec: 3952 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "67b49fc16da9390bff9814b34659baca" } Frame { msec: 3968 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "67b49fc16da9390bff9814b34659baca" } Frame { msec: 3984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "67b49fc16da9390bff9814b34659baca" } Key { type: 7 @@ -1602,11 +1602,11 @@ VisualTest { } Frame { msec: 4000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "67b49fc16da9390bff9814b34659baca" } Frame { msec: 4016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8c949a494d7bd5f9b6e5ac5bf3baec59" } Key { type: 6 @@ -1618,15 +1618,15 @@ VisualTest { } Frame { msec: 4032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a06c039bc65f399f7dcb1a484e557f34" } Frame { msec: 4048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a06c039bc65f399f7dcb1a484e557f34" } Frame { msec: 4064 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a06c039bc65f399f7dcb1a484e557f34" } Key { type: 7 @@ -1638,7 +1638,7 @@ VisualTest { } Frame { msec: 4080 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a06c039bc65f399f7dcb1a484e557f34" } Key { type: 6 @@ -1650,19 +1650,19 @@ VisualTest { } Frame { msec: 4096 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6471c3319fbe937080bd40d91770898f" } Frame { msec: 4112 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6471c3319fbe937080bd40d91770898f" } Frame { msec: 4128 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6471c3319fbe937080bd40d91770898f" } Frame { msec: 4144 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6471c3319fbe937080bd40d91770898f" } Key { type: 7 @@ -1674,15 +1674,15 @@ VisualTest { } Frame { msec: 4160 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6471c3319fbe937080bd40d91770898f" } Frame { msec: 4176 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6471c3319fbe937080bd40d91770898f" } Frame { msec: 4192 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6471c3319fbe937080bd40d91770898f" } Key { type: 6 @@ -1694,23 +1694,23 @@ VisualTest { } Frame { msec: 4208 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "124451f5a072f626642a85ebc36c0914" } Frame { msec: 4224 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "124451f5a072f626642a85ebc36c0914" } Frame { msec: 4240 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "124451f5a072f626642a85ebc36c0914" } Frame { msec: 4256 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "124451f5a072f626642a85ebc36c0914" } Frame { msec: 4272 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "124451f5a072f626642a85ebc36c0914" } Key { type: 6 @@ -1722,7 +1722,7 @@ VisualTest { } Frame { msec: 4288 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Key { type: 7 @@ -1734,15 +1734,15 @@ VisualTest { } Frame { msec: 4304 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Frame { msec: 4320 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Frame { msec: 4336 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Key { type: 7 @@ -1754,23 +1754,23 @@ VisualTest { } Frame { msec: 4352 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Frame { msec: 4368 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Frame { msec: 4384 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Frame { msec: 4400 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Frame { msec: 4416 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "963ee26238b20cd414e69b50ffa5a186" } Key { type: 6 @@ -1782,15 +1782,15 @@ VisualTest { } Frame { msec: 4432 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c5ce4fc832787535e66e64c546383d28" } Frame { msec: 4448 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c5ce4fc832787535e66e64c546383d28" } Frame { msec: 4464 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c5ce4fc832787535e66e64c546383d28" } Key { type: 7 @@ -1802,23 +1802,23 @@ VisualTest { } Frame { msec: 4480 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c5ce4fc832787535e66e64c546383d28" } Frame { msec: 4496 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c5ce4fc832787535e66e64c546383d28" } Frame { msec: 4512 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c5ce4fc832787535e66e64c546383d28" } Frame { msec: 4528 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "55e236c3b51b7104cf3254a44b0f1c92" } Frame { msec: 4544 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "55e236c3b51b7104cf3254a44b0f1c92" } Key { type: 6 @@ -1830,19 +1830,19 @@ VisualTest { } Frame { msec: 4560 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "57bcfc2fbc8e5993f0908980bdef2e79" } Frame { msec: 4576 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "57bcfc2fbc8e5993f0908980bdef2e79" } Frame { msec: 4592 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "57bcfc2fbc8e5993f0908980bdef2e79" } Frame { msec: 4608 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "57bcfc2fbc8e5993f0908980bdef2e79" } Key { type: 7 @@ -1854,19 +1854,19 @@ VisualTest { } Frame { msec: 4624 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "57bcfc2fbc8e5993f0908980bdef2e79" } Frame { msec: 4640 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "57bcfc2fbc8e5993f0908980bdef2e79" } Frame { msec: 4656 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "57bcfc2fbc8e5993f0908980bdef2e79" } Frame { msec: 4672 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "57bcfc2fbc8e5993f0908980bdef2e79" } Key { type: 6 @@ -1878,19 +1878,19 @@ VisualTest { } Frame { msec: 4688 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "60b5ec304c447a3bf54da75f964e9fff" } Frame { msec: 4704 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "60b5ec304c447a3bf54da75f964e9fff" } Frame { msec: 4720 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "60b5ec304c447a3bf54da75f964e9fff" } Frame { msec: 4736 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "60b5ec304c447a3bf54da75f964e9fff" } Key { type: 7 @@ -1902,15 +1902,15 @@ VisualTest { } Frame { msec: 4752 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "60b5ec304c447a3bf54da75f964e9fff" } Frame { msec: 4768 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "60b5ec304c447a3bf54da75f964e9fff" } Frame { msec: 4784 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "60b5ec304c447a3bf54da75f964e9fff" } Key { type: 6 @@ -1926,7 +1926,7 @@ VisualTest { } Frame { msec: 4816 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6ae6a9c38541546561db9049a300bce6" } Key { type: 7 @@ -1938,19 +1938,19 @@ VisualTest { } Frame { msec: 4832 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6ae6a9c38541546561db9049a300bce6" } Frame { msec: 4848 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6ae6a9c38541546561db9049a300bce6" } Frame { msec: 4864 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6ae6a9c38541546561db9049a300bce6" } Frame { msec: 4880 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "6ae6a9c38541546561db9049a300bce6" } Key { type: 6 @@ -1962,19 +1962,19 @@ VisualTest { } Frame { msec: 4896 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 4912 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 4928 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 4944 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Key { type: 7 @@ -1986,203 +1986,203 @@ VisualTest { } Frame { msec: 4960 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 4976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 4992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5072 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5088 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5104 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5120 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5136 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5152 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5168 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5184 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5200 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5216 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5232 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5248 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5264 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5280 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5296 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5312 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5328 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5344 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5360 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5376 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5392 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5408 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5424 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5440 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5456 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5472 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5488 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5504 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 5520 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5536 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5552 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5568 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5584 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5600 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5616 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5632 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5648 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5664 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5680 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5696 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5712 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5728 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5744 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5760 @@ -2190,239 +2190,239 @@ VisualTest { } Frame { msec: 5776 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5792 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5808 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5824 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5840 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5856 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5872 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5888 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5904 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5920 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5936 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5952 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5968 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 5984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6064 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6080 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6096 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6112 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6128 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6144 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6160 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6176 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6192 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6208 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6224 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6240 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6256 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6272 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6288 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6304 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6320 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6336 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6352 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6368 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6384 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6400 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6416 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6432 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6448 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6464 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6480 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6496 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6512 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "a0208b5276f3f26500f40535017563a6" } Frame { msec: 6528 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6544 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6560 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6576 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6592 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6608 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6624 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6640 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6656 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6672 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6688 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6704 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6720 @@ -2430,38 +2430,38 @@ VisualTest { } Frame { msec: 6736 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6752 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6768 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6784 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6800 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6816 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6832 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6848 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } Frame { msec: 6864 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "41179a181fd4ae8bd15a259b66d90eea" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.0.png index 555996a..b24344c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.1.png index b705bad..5e29359 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.2.png index 094cd2a..0ffee64 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.3.png index 9c519c7..6c56e9c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.4.png index 3ec77b5..276170d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.5.png index 579a66e..3d8709f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.6.png index 9e5ac90..80b960c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.7.png index 9f3acfc..7247277 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.8.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.8.png index f27518a..af5a996 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.8.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.9.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.9.png new file mode 100644 index 0000000..b254164 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.qml index ef9ba33..3819043 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/cursorDelegate.qml @@ -6,239 +6,287 @@ VisualTest { } Frame { msec: 16 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "6e8324bf913d9df21a59ab4337257c15" } Frame { msec: 32 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "4e068995d68e8939e6560e35b685e839" } Frame { msec: 48 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "761b09bce25b3b240093d16ad02268d7" } Frame { msec: 64 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "1ecb6d7d08d4e4e14db28e24a60eccc4" } Frame { msec: 80 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "642417a56b3d6b8b35f5aec1bf0a9d2c" } Frame { msec: 96 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "2e24870a44d3fc6c6d5c920bab29d417" } Frame { msec: 112 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "9a59d0672f2a752943561af89fd71d7f" } Frame { msec: 128 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "c359dd36910678a30f935a13c8680ee4" } Frame { msec: 144 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "245f1e127549e9b28c7574ffb143fcde" } Frame { msec: 160 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "8df3d3dbce673311d88c055e8dffaeb5" } Frame { msec: 176 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "590fdeaddb3df033a1908a8a95fcd17a" } Frame { msec: 192 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "a158891c8d2ee3899463412a3363e48c" } Frame { msec: 208 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "e9ec2c82f46b36fbd0285ce6795c7cf9" } Frame { msec: 224 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "0a02598af770dfe1d332f10c9482e770" } Frame { msec: 240 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "8765475468bccbd0df897a533241f3c5" } Frame { msec: 256 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "4cd9deed66bfdfadde8f8bf34f0e5513" } Frame { msec: 272 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "139bf5a1811beb2438df4ecfa3bbaac7" } Frame { msec: 288 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "9d51555afd71a7035e67a543846dcf7f" } Frame { msec: 304 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "de187b58fc8dfaad2d62e9463691b0c0" } Frame { msec: 320 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "9f88ac6d71246b06ca7ce9d8d983c91b" } Frame { msec: 336 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "a43c12a7d6597d171112dc43085a439e" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 352 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "ad38f32755f669837ec2243e355ebc85" } Frame { msec: 368 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "d87bd14345c785cc7e78a5c5462b90ec" } Frame { msec: 384 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "77850031e012246dd967ac689e353eb3" } Frame { msec: 400 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "f1bd048cd9167a8f162d1c39aca4f7c1" } Frame { msec: 416 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "0fa030c5da23f23a0665a535e23b84a2" } Frame { msec: 432 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "af3a5f1982459164dfec26746172b0eb" + } + Key { + type: 6 + key: 16777248 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 448 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "0de90659472b63dd41a5602197ff502e" } Frame { msec: 464 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "81e40abf91017614a52e03bb2474549f" } Frame { msec: 480 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 496 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "7bae45481596788afde8866a3c97edd7" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 512 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "0416581d32ab84680dfc26b6f546d2c5" } Frame { msec: 528 - hash: "15da97430bcbac3a16d9897bbf2e4dbd" + hash: "0416581d32ab84680dfc26b6f546d2c5" } Frame { msec: 544 - hash: "2aec32493055ad17f4aac9b3c9b84c5f" + hash: "0416581d32ab84680dfc26b6f546d2c5" } Frame { msec: 560 - hash: "e0826ff09b628a5e3ddf6d9e5593f937" + hash: "0416581d32ab84680dfc26b6f546d2c5" } Frame { msec: 576 - hash: "eacfa8db605b9e386a55508e8943e7d1" + hash: "ac98b973e6d12193829139661d3e5847" } Frame { msec: 592 - hash: "2dbe9b5bbb5baf12cd2cbfb4190be316" + hash: "366907376adae4d88d42d1b9e7533ec0" } Frame { msec: 608 - hash: "60a60e06237318bf005f87bbba386fef" + hash: "5f486d0a21c74f2ba50afcafa8c15453" } Frame { msec: 624 - hash: "97549f388c02adb8884c2e79510adc7e" + hash: "a3bf6dde525e528745272a8e43fc895c" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 640 - hash: "d882fe91d9df9862d620cf984e27d0bd" + hash: "4ffb297d2a98a3d13b848af569b1b5b5" } Frame { msec: 656 - hash: "6310b65572e39256122c7620f7e87442" + hash: "3679a17658e417bf08fc86d4bef0d4e9" } Frame { msec: 672 - hash: "4e7374a683050ff440056b6e7c971d2b" + hash: "5c6a25284ffd13350425e792fd143421" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 688 - hash: "35c0d55cda3a02eb4c441a5832bcbbf4" + hash: "09a2c1032d0206e20340ae4267525f98" } Frame { msec: 704 - hash: "8d71c418593eb3e4834d5e608ffd3f29" + hash: "0036070d9a7ee854b3612858af46ab59" } Frame { msec: 720 - hash: "0da2c1cd0138172698a3bee5d19168c5" + hash: "8774509eaa5fc29385da89214ef77589" } Frame { msec: 736 - hash: "8ca757a4fd1987329488f63251b0f6b4" + hash: "6d4f8ebf046148e5079f498396c119b4" } Frame { msec: 752 - hash: "70c827f1b34b44cbd775b666913556d6" + hash: "4c7d5d2f77116c96357b0791348af058" } Frame { msec: 768 - hash: "2b91dcef1b3ca66059dd9db4c8e335f3" + hash: "398c927a3525d5b90a5dd7a05ba9467b" } Frame { msec: 784 - hash: "38abc77b2361ce257d39c0cf268ba42b" + hash: "d84b45f6acb8cbd399d4ed6bf80ce132" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 800 - hash: "59865194eb63465dd0f3925c7a500340" + hash: "40c597d9e04e8e0daf62f58b9e7973b3" } Frame { msec: 816 - hash: "7bed5747d6b771db0fe5802153e54f2f" + hash: "2c7fdd47e29d924e3e008a6840e0e6be" } Frame { msec: 832 - hash: "9ac1bf268749bc8e58bc4d04b55ef849" + hash: "2b3229bb1aa220499114f274cf643ce9" } Frame { msec: 848 - hash: "64ea5cb46782d250c46a7a2c8cceea20" + hash: "e55446874c1a343ce3607d679d69d1d4" } Frame { msec: 864 - hash: "d81037eb21bfcb434b6c7f3bbd21ad12" + hash: "6824708eb176a9cf92f241d4054800dd" } Frame { msec: 880 - hash: "1079ea3a1a62e2cca9a8e907bc5aa4e1" + hash: "d386230dd416740625eb4f677ef4531b" } Frame { msec: 896 - hash: "96422f9bfbc11775cd7d1fae2ba357bd" + hash: "9b2fbddab890dbe43e84e85bf320e6c1" } Frame { msec: 912 - hash: "0d247385059a6f68b37bc34f6b2214b1" + hash: "1d1065aca7eb47f0096bc2c8c4320880" } Frame { msec: 928 - hash: "7c513361e13a90eef229b42e68ffaa18" + hash: "d97ba6e2bfc021fe993afdb5b28316ba" } Frame { msec: 944 - hash: "510b8441c613f0637dfc46e03c278112" + hash: "3a3a2f340bf1ccb14eab0562d7ecfe87" } Frame { msec: 960 @@ -246,271 +294,287 @@ VisualTest { } Frame { msec: 976 - hash: "8d90112e2e1c6f226a1a5f4f75785939" + hash: "ea4f4c1de5bfb1be43ab0188afb7189c" } Frame { msec: 992 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "399ca2d4411d3fb226c94bd32a17d0cd" } Frame { msec: 1008 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "ca78503396613536c8e4076884354cb1" } Frame { msec: 1024 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "ca78503396613536c8e4076884354cb1" + } + Key { + type: 7 + key: 16777249 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 1040 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "399ca2d4411d3fb226c94bd32a17d0cd" } Frame { msec: 1056 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "ea4f4c1de5bfb1be43ab0188afb7189c" } Frame { msec: 1072 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "d23d7492b85e4f30994ecd64e8273ff6" } Frame { msec: 1088 - hash: "8d90112e2e1c6f226a1a5f4f75785939" + hash: "3a3a2f340bf1ccb14eab0562d7ecfe87" } Frame { msec: 1104 - hash: "85e6af1f5fd15338a15f984e24d5ec9d" + hash: "d97ba6e2bfc021fe993afdb5b28316ba" } Frame { msec: 1120 - hash: "510b8441c613f0637dfc46e03c278112" + hash: "1d1065aca7eb47f0096bc2c8c4320880" } Frame { msec: 1136 - hash: "7c513361e13a90eef229b42e68ffaa18" + hash: "9b2fbddab890dbe43e84e85bf320e6c1" } Frame { msec: 1152 - hash: "0d247385059a6f68b37bc34f6b2214b1" + hash: "d386230dd416740625eb4f677ef4531b" } Frame { msec: 1168 - hash: "96422f9bfbc11775cd7d1fae2ba357bd" + hash: "6824708eb176a9cf92f241d4054800dd" + } + Key { + type: 6 + key: 16777234 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 1184 - hash: "1079ea3a1a62e2cca9a8e907bc5aa4e1" + hash: "e8e14dbba33578a36d9c69214333c537" } Frame { msec: 1200 - hash: "d81037eb21bfcb434b6c7f3bbd21ad12" + hash: "95c6e967f6f445748945c51943cf532f" } Frame { msec: 1216 - hash: "64ea5cb46782d250c46a7a2c8cceea20" + hash: "d145d4cbd0e3a98686b3bac1c5c17093" } Frame { msec: 1232 - hash: "9ac1bf268749bc8e58bc4d04b55ef849" + hash: "09348a4108a585dd23c3a252a5c596f6" } Frame { msec: 1248 - hash: "7bed5747d6b771db0fe5802153e54f2f" + hash: "55126f2c879771e1aa5ced51b54c827a" } Frame { msec: 1264 - hash: "59865194eb63465dd0f3925c7a500340" + hash: "ebb36a4c2fcb85107033ec2731fc5743" } Frame { msec: 1280 - hash: "38abc77b2361ce257d39c0cf268ba42b" + hash: "0581a4432d4b3d0c1555a31e772c2575" + } + Key { + type: 7 + key: 16777234 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 1296 - hash: "2b91dcef1b3ca66059dd9db4c8e335f3" + hash: "b4030774f06935f1b43fc8f1a69e53a5" } Frame { msec: 1312 - hash: "70c827f1b34b44cbd775b666913556d6" + hash: "655e1739c130888ff83a3b69bb0ab7e3" } Frame { msec: 1328 - hash: "8ca757a4fd1987329488f63251b0f6b4" + hash: "99fc97c572e7c8949693b32910e6eefb" } Frame { msec: 1344 - hash: "0da2c1cd0138172698a3bee5d19168c5" + hash: "e9c8bb13c2549047c05d671daa378496" } Frame { msec: 1360 - hash: "8d71c418593eb3e4834d5e608ffd3f29" + hash: "cb344e0d39b5b07ca7d094bf30ce9f53" } Frame { msec: 1376 - hash: "35c0d55cda3a02eb4c441a5832bcbbf4" - } - Key { - type: 6 - key: 16777232 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "15ba6e62c693f2bf74bdf86668139985" } Frame { msec: 1392 - hash: "4e7374a683050ff440056b6e7c971d2b" + hash: "48133ec73eb9723059eb6e6af3139f2b" } Frame { msec: 1408 - hash: "6310b65572e39256122c7620f7e87442" + hash: "0b19e777a04f03774f2d5f5398bdb10f" } Frame { msec: 1424 - hash: "d882fe91d9df9862d620cf984e27d0bd" + hash: "fc41d9a9aedf9274a68b33603ed6ccd0" } Frame { msec: 1440 - hash: "97549f388c02adb8884c2e79510adc7e" + hash: "fa6e65f0c835b12dc10463711bd73350" } Frame { msec: 1456 - hash: "60a60e06237318bf005f87bbba386fef" - } - Key { - type: 7 - key: 16777232 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "25a02c3388e52df550a0332efde90fcd" } Frame { msec: 1472 - hash: "2dbe9b5bbb5baf12cd2cbfb4190be316" + hash: "2390443be82acf291856be59fa18fc26" } Frame { msec: 1488 - hash: "eacfa8db605b9e386a55508e8943e7d1" + hash: "2390443be82acf291856be59fa18fc26" } Frame { msec: 1504 - hash: "e0826ff09b628a5e3ddf6d9e5593f937" + hash: "2390443be82acf291856be59fa18fc26" } Frame { msec: 1520 - hash: "2aec32493055ad17f4aac9b3c9b84c5f" + hash: "2390443be82acf291856be59fa18fc26" } Frame { msec: 1536 - hash: "c0e72cdf776b0c62742aa9c3683cd523" + hash: "2390443be82acf291856be59fa18fc26" } Frame { msec: 1552 - hash: "ea3f512181b3ee94d8cdd4d9f59ed962" + hash: "2390443be82acf291856be59fa18fc26" } Frame { msec: 1568 - hash: "de924155855e76d0591217448f79bdb6" + hash: "284cd356d551a048d4a000b90217ac72" } Frame { msec: 1584 - hash: "51da770a75102de9ad1920f1f6c44146" + hash: "94fb20c3767e09d1b4254ee6122cf24e" } Frame { msec: 1600 - hash: "e3c0e8f6385ef2ab9b671be3243774c4" + hash: "bfac920384425ce9f34505b44eceb523" } Frame { msec: 1616 - hash: "eac6de65ea6726f0cc50b6d30c1b7ba5" + hash: "4a2d434efcb9a57f2013dc6b366e0e4e" } Frame { msec: 1632 - hash: "2ee111386bd646c4ee577405e490a2f7" + hash: "d0fbe98dc34c4bb0d1ceb7e4678cc1d5" + } + Frame { + msec: 1648 + hash: "28ab147983a71e93e5610f53e14bd113" } Key { type: 6 - key: 16777233 - modifiers: 0 + key: 16777249 + modifiers: 100663296 text: "" autorep: false count: 1 } Frame { - msec: 1648 - hash: "24c376d5a2b3555126b156c8bc7a7a0c" - } - Frame { msec: 1664 - hash: "d9c35de8b02f11db321d9bdcdcd65403" + hash: "2e6ee60fe9ff07fa4558134e6b1d6da8" } Frame { msec: 1680 - hash: "0b32a66497ec3cdd05dc27c0ef9c5718" + hash: "f181e578e865981d7a2073080b381ec1" } Frame { msec: 1696 - hash: "9626f80ef170af2db135792337203265" + hash: "d7c0558ea16829b52ea6d09814c301b9" } Frame { msec: 1712 - hash: "6e4ce7599da579f764ff10e982888889" + hash: "c9304cb66c04566cf4374b46ab85e6e7" } Frame { msec: 1728 - hash: "5ad4dd681be780c0068734ca5c722507" - } - Key { - type: 7 - key: 16777233 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "024dde64822afc9eea63974851fe57e1" } Frame { msec: 1744 - hash: "7d620ef53049f9195cc832d6f9dfd52b" + hash: "8e4520e95a8acc8f1d4b710c4a14898f" } Frame { msec: 1760 - hash: "0f54144c574af01958505eedd69162f6" + hash: "6b271c3f1d9d49bbd80a8ee33f3fc09c" } Frame { msec: 1776 - hash: "50f168354e3901283708a4ae9088783d" + hash: "eb76a46632856bf07b005cad2ba2f6ab" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1792 - hash: "c55fdf2fd0a4eeb9ca0e3072aa3e60c4" + hash: "a29bd83f6b4e877f3c7b89c82dfcab54" } Frame { msec: 1808 - hash: "d351de13e7bb5b273ec3aebb88dffbd5" + hash: "dca39b6b6fff5e4a6309e4c0e42811c0" } Frame { msec: 1824 - hash: "977d44194d1ef05801167157714891af" + hash: "88ad3f9f638a97bed98f00ec7d78dfe4" } Frame { msec: 1840 - hash: "ef3694ca78764709abbe2f8781578fb4" + hash: "5697a705f36283213bbe4b5848baa764" } Frame { msec: 1856 - hash: "77afbc0e0b828d03148ed7fe342dfbda" + hash: "8850842afae3060a91d612f7b869fd48" } Frame { msec: 1872 - hash: "0d94e37430d8b835e65750a6af525ef7" + hash: "4f08dbd1cab0bfcc8b9f232d46cf42db" } Frame { msec: 1888 - hash: "e009a8d2cb7c7f1200055666cf2efd9c" + hash: "f7df5b96d0983a918e3c81aa7bee3950" } Frame { msec: 1904 - hash: "096a2742962d7b22dba768577373e656" + hash: "b28681bcb414d428588acda377fef838" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1920 @@ -518,271 +582,271 @@ VisualTest { } Frame { msec: 1936 - hash: "905b6c7ab24fd1a12f17494fc1935e98" + hash: "5c154b54776ed555563d3e5196a8aedd" } Frame { msec: 1952 - hash: "9bc98b4a32ea933fcc3a40eaae9b3516" + hash: "ee64c0452b325880de3a4fea599c18cc" } Frame { msec: 1968 - hash: "70f0313540b3517f3b6d403c3ab1199c" + hash: "0776e1557b2d32db1c7c43331c532331" } Frame { msec: 1984 - hash: "309ae1af1ef7dbaf0b892ad60fd3eb93" + hash: "24b68da9a63bbf00ffffeca649f771fa" } Frame { msec: 2000 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "00d49d91b51f5bd428c07e9be65f551a" } Frame { msec: 2016 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "874d4b599cb92cd9160960e3b3af74e0" } Frame { msec: 2032 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "00d49d91b51f5bd428c07e9be65f551a" } Frame { msec: 2048 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "24b68da9a63bbf00ffffeca649f771fa" } Frame { msec: 2064 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "0776e1557b2d32db1c7c43331c532331" } Frame { msec: 2080 - hash: "309ae1af1ef7dbaf0b892ad60fd3eb93" + hash: "ee64c0452b325880de3a4fea599c18cc" } Frame { msec: 2096 - hash: "70f0313540b3517f3b6d403c3ab1199c" + hash: "5c154b54776ed555563d3e5196a8aedd" } Frame { msec: 2112 - hash: "9bc98b4a32ea933fcc3a40eaae9b3516" - } - Key { - type: 6 - key: 16777248 - modifiers: 33554432 - text: "" - autorep: false - count: 1 + hash: "a5f90da82b51bc866648304a20a1dcd3" } Frame { msec: 2128 - hash: "905b6c7ab24fd1a12f17494fc1935e98" + hash: "b28681bcb414d428588acda377fef838" } Frame { msec: 2144 - hash: "31adf3a3bfbd1083c50cae7ed5d64334" + hash: "f7df5b96d0983a918e3c81aa7bee3950" } Frame { msec: 2160 - hash: "096a2742962d7b22dba768577373e656" + hash: "4f08dbd1cab0bfcc8b9f232d46cf42db" } Frame { msec: 2176 - hash: "e009a8d2cb7c7f1200055666cf2efd9c" + hash: "8850842afae3060a91d612f7b869fd48" } Frame { msec: 2192 - hash: "0d94e37430d8b835e65750a6af525ef7" + hash: "5697a705f36283213bbe4b5848baa764" } Frame { msec: 2208 - hash: "77afbc0e0b828d03148ed7fe342dfbda" + hash: "88ad3f9f638a97bed98f00ec7d78dfe4" } Frame { msec: 2224 - hash: "ef3694ca78764709abbe2f8781578fb4" + hash: "dca39b6b6fff5e4a6309e4c0e42811c0" + } + Key { + type: 7 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2240 - hash: "977d44194d1ef05801167157714891af" + hash: "a29bd83f6b4e877f3c7b89c82dfcab54" } Frame { msec: 2256 - hash: "d351de13e7bb5b273ec3aebb88dffbd5" + hash: "7defd2ecefeb86b457a2ee76d97424ee" } Frame { msec: 2272 - hash: "c55fdf2fd0a4eeb9ca0e3072aa3e60c4" + hash: "ccf6d45e8822d72482d9b585909b612b" } Frame { msec: 2288 - hash: "50f168354e3901283708a4ae9088783d" + hash: "996dddf091394513adda1b1f00bf0c68" } Frame { msec: 2304 - hash: "0f54144c574af01958505eedd69162f6" + hash: "3cf94e90eddb4b0815762b89f58f8325" } Frame { msec: 2320 - hash: "7d620ef53049f9195cc832d6f9dfd52b" - } - Key { - type: 6 - key: 16777232 - modifiers: 33554432 - text: "" - autorep: false - count: 1 + hash: "ab9f876450526b37774c6c4a5794c7b1" } Frame { msec: 2336 - hash: "03e906dfb3bf98f521d805331d3b5b9c" + hash: "9109880e9201e92eb17ae87a3648dca7" } Frame { msec: 2352 - hash: "c2376393ea9541b909b6b4fe188fa03e" + hash: "0e759f2f279057c1f4d1147be5b41214" + } + Key { + type: 6 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2368 - hash: "9b3935370412c75acdf6e91100cf2f53" + hash: "d87bd14345c785cc7e78a5c5462b90ec" } Frame { msec: 2384 - hash: "30ab7913bdfc51d2df5ab9f3863d28c7" + hash: "77850031e012246dd967ac689e353eb3" } Frame { msec: 2400 - hash: "593656e93d6e01419002dbb581aa6cbd" + hash: "f1bd048cd9167a8f162d1c39aca4f7c1" } Frame { msec: 2416 - hash: "33800dd560e44ce39d6325bbdee689de" + hash: "0fa030c5da23f23a0665a535e23b84a2" } Frame { msec: 2432 - hash: "c41a9c4f08053d5d18fb2d530ed8b5ad" - } - Key { - type: 7 - key: 16777232 - modifiers: 33554432 - text: "" - autorep: false - count: 1 + hash: "af3a5f1982459164dfec26746172b0eb" } Frame { msec: 2448 - hash: "b3f2d4a2cb9a9d1304a2a2d07ad41ff2" + hash: "0de90659472b63dd41a5602197ff502e" } Frame { msec: 2464 - hash: "93cf7fe53bc1fd749c523d40b27d17b4" + hash: "81e40abf91017614a52e03bb2474549f" } Frame { msec: 2480 - hash: "6e9226d01dd93cff763e851148da8dfd" + hash: "7bae45481596788afde8866a3c97edd7" + } + Key { + type: 7 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2496 - hash: "79fdbda495bbc6c9ae8be03e1467de92" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 2512 - hash: "c30fc0fa9351dbcdbe4f2a297cba9a52" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 2528 - hash: "eaf26162fd5ce42262ea08ef39a7123d" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 2544 - hash: "7bf0d6a5753a60eefae6d3c3819fabe4" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 2560 - hash: "a2ee3a3b9cd22d7c0e54524cad32e647" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 2576 - hash: "822298cfc4e2d64db1bf3e442dd891e6" + hash: "e26dbfb26415b21198add56d5de02cb2" } Frame { msec: 2592 - hash: "d075c64000b045eae1b42dce701787b7" + hash: "fa2877a963417789b82170b32e0af7a0" } Frame { msec: 2608 - hash: "5ca7f15af781f896c83c81077f6b072e" + hash: "860b39f92c412a7d946f882d8f99d837" } Frame { msec: 2624 - hash: "7d0f14896e67c56ed5238472dc127cb1" + hash: "d7b8c52aef183965a97d82a18b03ed94" } Frame { msec: 2640 - hash: "dca161e8a9d786ba9d50aa655ccbecd3" + hash: "b1ce9cf0ebd8e1e783e5bd43bbd72072" } Frame { msec: 2656 - hash: "73bfcb0f5104efd056f25f7d73126369" + hash: "d214b419ec5b4cff8f877bdeb1b9ef96" } Frame { msec: 2672 - hash: "0090459043b05bf9504434f36230b32b" + hash: "95e7057104508b3919d722d4befde7b7" } Frame { msec: 2688 - hash: "f64315858f375c6ded480b2017fc18a5" + hash: "270489ec5da5bf9a93fa4e52f47a71f5" } Frame { msec: 2704 - hash: "fe4c0ecfa9779c9fe052d4ffc9386d46" + hash: "46646e396ab0c1c20427dadd71d45ba9" } Frame { msec: 2720 - hash: "849ad15f0ca893881165e956e8a26174" + hash: "65e2fd167565f876310d56fa9203c118" } Frame { msec: 2736 - hash: "c4373fa63ed00832c70a6b94cb729397" + hash: "aff0da79bd9bd8c285139d7737a1316f" } Frame { msec: 2752 - hash: "0c7e08fb7f0dd954b0f171a37ef2a310" + hash: "bf264fe7d774a597a3ff0965d912fa90" } Frame { msec: 2768 - hash: "505071572df7aa300a675f8a808bc7f4" + hash: "f00358343437f6e058848c7237601632" } Frame { msec: 2784 - hash: "52839867e81d52746196f299a8371453" - } - Key { - type: 7 - key: 16777248 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "88c9e1d58397a81ed23931c7fdae1e7d" } Frame { msec: 2800 - hash: "c4d214a7e0fc52c2a45fc6e3df12550a" + hash: "44d46b459f6bb89510e52b0d999fd499" } Frame { msec: 2816 - hash: "f1fa48d796667bd053fff4af7ec1d8ce" + hash: "0c196a24c9ca7143d382688db678d855" } Frame { msec: 2832 - hash: "081e46decc8aba911f018acfd761cda1" + hash: "9df6d3d3b9981cb907ab89e65b743e97" } Frame { msec: 2848 - hash: "fa417c9bfda1da66320a8e59fbaeb5b6" + hash: "501a644d6cde64ad041b086e00fd3950" + } + Key { + type: 6 + key: 16777236 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2864 - hash: "83dfa353fd20f3bf7caa8e6ca9a9933c" + hash: "83f297406b1c6311da3a216024836d15" } Frame { msec: 2880 @@ -790,511 +854,527 @@ VisualTest { } Frame { msec: 2896 - hash: "c11459b1d3e51f3d2f5bd30049bcca42" + hash: "93f79f8717948bde8ee55c668af2d397" } Frame { msec: 2912 - hash: "997ff3fa82ba2fb27a9c41ed9abe8991" + hash: "881b5c2ccd0bbdaea4d61abbec600fc5" } Frame { msec: 2928 - hash: "f8baaadde147266416c9ab3f9d9106ce" + hash: "be72fe7c27901db62f2dbd9a757e4838" } Frame { msec: 2944 - hash: "79d1d34fd343d8de631aa3259167fe26" + hash: "c83c973fb1253ccab333fb1e604155b8" } Frame { msec: 2960 - hash: "8b1445ca6131a0fc4377ded24a60186a" + hash: "dd6072d204812c23e24db1e7a81c6f57" } Frame { msec: 2976 - hash: "784cc01604ecadf74a45164f73f0336d" + hash: "fb342743dc5ab9ade2b8a48a2a11dc8f" + } + Key { + type: 7 + key: 16777236 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2992 - hash: "b9aeac2be5c8e16e7938e141f32776be" + hash: "fc8ede705bfe8f339fe47041c502b0d6" } Frame { msec: 3008 - hash: "b9aeac2be5c8e16e7938e141f32776be" + hash: "00fa0306d3fdc7e384cfc0660a3a355d" } Frame { msec: 3024 - hash: "b9aeac2be5c8e16e7938e141f32776be" + hash: "00fa0306d3fdc7e384cfc0660a3a355d" } Frame { msec: 3040 - hash: "b9aeac2be5c8e16e7938e141f32776be" + hash: "fc8ede705bfe8f339fe47041c502b0d6" } Frame { msec: 3056 - hash: "b9aeac2be5c8e16e7938e141f32776be" + hash: "fb342743dc5ab9ade2b8a48a2a11dc8f" } Frame { msec: 3072 - hash: "b9aeac2be5c8e16e7938e141f32776be" - } - Key { - type: 6 - key: 16777236 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "dd6072d204812c23e24db1e7a81c6f57" } Frame { msec: 3088 - hash: "00dfc5f4468482cb5f74e62be235b1d2" + hash: "c83c973fb1253ccab333fb1e604155b8" } Frame { msec: 3104 - hash: "62bc9c57724f7ab6bcf7d75d8ff68097" + hash: "be72fe7c27901db62f2dbd9a757e4838" } Frame { msec: 3120 - hash: "ad65de5a6887c0a31a9d8f72a2a651db" + hash: "881b5c2ccd0bbdaea4d61abbec600fc5" } Frame { msec: 3136 - hash: "75e854ccaad087bfe776a843f0bd7284" + hash: "93f79f8717948bde8ee55c668af2d397" } Frame { msec: 3152 - hash: "1e3f580f37a0dc063a383bdf435e85ea" + hash: "1bb236db749ef514c00d0a3dd698d24f" } Frame { msec: 3168 - hash: "3d78320cb021944d7c6cee1a42056663" + hash: "83f297406b1c6311da3a216024836d15" } Frame { msec: 3184 - hash: "fca865f762c1a6cc3e487e0e908eef73" - } - Key { - type: 7 - key: 16777236 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "3d284b4000d2849ed4af2f7c1b859492" } Frame { msec: 3200 - hash: "fb7ad9156658f3866d19e43f006cf013" + hash: "de315e6836334fd0a2da855f5be4ff30" } Frame { msec: 3216 - hash: "6f7411363c66d0959ea5a16a9b610e61" - } - Frame { - msec: 3232 - hash: "a33dce3c55b1b1541cfb9b85a75fcb53" - } - Frame { - msec: 3248 - hash: "56b81435dc4ce193bb98c3d02c781242" + hash: "5ca117709284f4a1cbd64cdba4079340" } Key { type: 6 - key: 16777234 - modifiers: 0 + key: 16777236 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { + msec: 3232 + hash: "308a4220f5c74fd56bd218cd695b9822" + } + Frame { + msec: 3248 + hash: "4ac4e09e987f2ba9661ed52fb1bdf236" + } + Frame { msec: 3264 - hash: "59865194eb63465dd0f3925c7a500340" + hash: "9ffd39a8a540ec88ff2b20a16ef083ee" } Frame { msec: 3280 - hash: "38abc77b2361ce257d39c0cf268ba42b" + hash: "4a36ed8e68811954fef171d5734ccbaf" } Frame { msec: 3296 - hash: "2b91dcef1b3ca66059dd9db4c8e335f3" + hash: "714a6231aca70cfa8e83ea71b7ae90dc" } Frame { msec: 3312 - hash: "70c827f1b34b44cbd775b666913556d6" + hash: "1fa9e35449ee87c972e3189ad0651a68" } Frame { msec: 3328 - hash: "8ca757a4fd1987329488f63251b0f6b4" - } - Frame { - msec: 3344 - hash: "0da2c1cd0138172698a3bee5d19168c5" - } - Frame { - msec: 3360 - hash: "8d71c418593eb3e4834d5e608ffd3f29" + hash: "d602008fada2f4edb6ad00fe759f9db9" } Key { type: 7 - key: 16777234 - modifiers: 0 + key: 16777236 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { + msec: 3344 + hash: "bf16cc38f109e761b5ac2b0c63a1a2fe" + } + Frame { + msec: 3360 + hash: "30f26041533455ed92c4984f55e3c6ff" + } + Frame { msec: 3376 - hash: "35c0d55cda3a02eb4c441a5832bcbbf4" + hash: "5838d666902bc693de505522dad13254" } Frame { msec: 3392 - hash: "4e7374a683050ff440056b6e7c971d2b" + hash: "6c8ada09b627050e4340da6e8ddd646e" } Frame { msec: 3408 - hash: "6310b65572e39256122c7620f7e87442" + hash: "b33cd5bbb90d435dd7ea3ab67bef88ee" } Frame { msec: 3424 - hash: "d882fe91d9df9862d620cf984e27d0bd" + hash: "692d4029938c01044b4210958dd1ee7e" } Frame { msec: 3440 - hash: "97549f388c02adb8884c2e79510adc7e" + hash: "7e2e55555ee2c7e172e61ddb6365355d" } Frame { msec: 3456 - hash: "60a60e06237318bf005f87bbba386fef" + hash: "87ca0584879b25336a1023ac3252fc9a" } Frame { msec: 3472 - hash: "2dbe9b5bbb5baf12cd2cbfb4190be316" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 3488 - hash: "eacfa8db605b9e386a55508e8943e7d1" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 3504 - hash: "e0826ff09b628a5e3ddf6d9e5593f937" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 3520 - hash: "2aec32493055ad17f4aac9b3c9b84c5f" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 3536 - hash: "c0e72cdf776b0c62742aa9c3683cd523" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 3552 - hash: "ea3f512181b3ee94d8cdd4d9f59ed962" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 3568 - hash: "de924155855e76d0591217448f79bdb6" + hash: "8c6052eb4cf03d7742a73874d9f15285" } Frame { msec: 3584 - hash: "51da770a75102de9ad1920f1f6c44146" + hash: "8a1b63c42867f87a1cf4b47944b3860a" } Frame { msec: 3600 - hash: "e3c0e8f6385ef2ab9b671be3243774c4" + hash: "90712efd7c17b0ad33d2c2c02e9eaa97" } Frame { msec: 3616 - hash: "eac6de65ea6726f0cc50b6d30c1b7ba5" + hash: "8099972420ffd03e2bfc3ea45918a543" } Frame { msec: 3632 - hash: "2ee111386bd646c4ee577405e490a2f7" + hash: "2b78b1179a34319c287a6659406e23c3" } Frame { msec: 3648 - hash: "fe95122352effcf1815bc237fc6ce6ab" + hash: "ad9458ab4d6376c87350a2356c280f94" } Frame { msec: 3664 - hash: "e3bb1ec3b84df25712f06e0d6963efdd" + hash: "a74bc230e310a2826b2fed962db22f7a" } Frame { msec: 3680 - hash: "a10d3184acc85c46e171fe4cf82e1c23" + hash: "bd72e8f4757050c41673a6f0d38f2285" } Frame { msec: 3696 - hash: "d566b2763312e5e823593806acd9e809" + hash: "379bad4fa4b605cb6a16434bdb031e2b" } Frame { msec: 3712 - hash: "7db073b7487ddea48e7c9df8b9bfdc00" + hash: "e144a8e9586f29f9b2f042b47e7739ae" } Frame { msec: 3728 - hash: "85c663b943f67d158367dba0508980a5" + hash: "bd74c9e79bc1a88dd6a17a3aed21e368" + } + Key { + type: 6 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 3744 - hash: "6336ce0d912ee63773475c4c6c5d59be" + hash: "144724168f42372e10ec6c39662a5ed8" } Frame { msec: 3760 - hash: "c75ba80484af36633b6a4d17b666b1c9" + hash: "d8859888802e7b54e2d2a44cf252eb54" } Frame { msec: 3776 - hash: "08b7d4eef2d15bc717ff1a981a11f275" + hash: "20561e2faf7e8fe1d6337248e6cd5e94" } Frame { msec: 3792 - hash: "0ab8bebb0e43786a7e51ea780745080c" + hash: "184cff262d1004ce702c117a6b5b9699" } Frame { msec: 3808 - hash: "6fa1811f520eff9893b3c7b00e53fa7d" + hash: "61b156acacefa6e4f4ddd8adaca90d08" } Frame { msec: 3824 - hash: "6feb44655bfbec651cc2902676bd08b4" + hash: "0906852b1e62a936694a22d6ffa4f5dd" } Frame { msec: 3840 image: "cursorDelegate.3.png" } + Key { + type: 7 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } Frame { msec: 3856 - hash: "00b7714df163d8055514e0dbd8a83bac" + hash: "cc0fb2ae2dd1ccad94c453bc4c4b6d32" } Frame { msec: 3872 - hash: "6ef2a330d70a7e0ce343bb352c46f126" + hash: "6a6baee5ca76d331c47fca4d0f7168e5" } Frame { msec: 3888 - hash: "f4e26309fa3b8a6d55f44bf146544101" + hash: "32032d7ce55af41c97ac5bf33aca40bb" } Frame { msec: 3904 - hash: "dfa1e24149f2662a4a552da3bb64348c" + hash: "a8781226e5e494324a34e120aa446cd1" } Frame { msec: 3920 - hash: "9ab9d6ef4aeb5863401a9e251f684e2d" + hash: "0dd5df088fcc0228a97ffe715c95e2b6" } Frame { msec: 3936 - hash: "c9f7591a37a3743b3b48de5337fd2fa0" + hash: "774b161fe9645bc69b89e580b3e41f71" } Frame { msec: 3952 - hash: "2d38f17db530050574d9192c805c142d" + hash: "5756d7ffd8ff656db54f4329ea909553" } Frame { msec: 3968 - hash: "38a4ad2cf9fa3015eff67014900a44cc" + hash: "2b4a5c97ff4d8792a7706bb78385ec35" } Frame { msec: 3984 - hash: "9d9ce4ac0de6caa2f0bb78eac414ba65" + hash: "f9765e4def564b64861402e1a873b169" } Frame { msec: 4000 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "287b07ef6288dcea13fffd2b95aafd54" } Frame { msec: 4016 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "7abcb9d6cf223c1655f6265f780a321a" } Frame { msec: 4032 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "287b07ef6288dcea13fffd2b95aafd54" } Frame { msec: 4048 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "f9765e4def564b64861402e1a873b169" } Frame { msec: 4064 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" + hash: "2b4a5c97ff4d8792a7706bb78385ec35" + } + Key { + type: 7 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 4080 - hash: "9d9ce4ac0de6caa2f0bb78eac414ba65" + hash: "5756d7ffd8ff656db54f4329ea909553" } Frame { msec: 4096 - hash: "38a4ad2cf9fa3015eff67014900a44cc" + hash: "774b161fe9645bc69b89e580b3e41f71" } Frame { msec: 4112 - hash: "2d38f17db530050574d9192c805c142d" + hash: "0dd5df088fcc0228a97ffe715c95e2b6" } Frame { msec: 4128 - hash: "c9f7591a37a3743b3b48de5337fd2fa0" + hash: "a8781226e5e494324a34e120aa446cd1" } Frame { msec: 4144 - hash: "9ab9d6ef4aeb5863401a9e251f684e2d" + hash: "32032d7ce55af41c97ac5bf33aca40bb" } Frame { msec: 4160 - hash: "dfa1e24149f2662a4a552da3bb64348c" + hash: "6a6baee5ca76d331c47fca4d0f7168e5" } Frame { msec: 4176 - hash: "f4e26309fa3b8a6d55f44bf146544101" + hash: "cc0fb2ae2dd1ccad94c453bc4c4b6d32" } Frame { msec: 4192 - hash: "6ef2a330d70a7e0ce343bb352c46f126" + hash: "2d1b406be294727a278ba6bbc97be62a" } Frame { msec: 4208 - hash: "00b7714df163d8055514e0dbd8a83bac" + hash: "0906852b1e62a936694a22d6ffa4f5dd" } Frame { msec: 4224 - hash: "ae46d672649a4b0fc5171f776af93a2c" + hash: "61b156acacefa6e4f4ddd8adaca90d08" } Frame { msec: 4240 - hash: "6feb44655bfbec651cc2902676bd08b4" + hash: "184cff262d1004ce702c117a6b5b9699" } Frame { msec: 4256 - hash: "6fa1811f520eff9893b3c7b00e53fa7d" + hash: "20561e2faf7e8fe1d6337248e6cd5e94" } Frame { msec: 4272 - hash: "0ab8bebb0e43786a7e51ea780745080c" + hash: "d8859888802e7b54e2d2a44cf252eb54" } Frame { msec: 4288 - hash: "08b7d4eef2d15bc717ff1a981a11f275" + hash: "144724168f42372e10ec6c39662a5ed8" } Frame { msec: 4304 - hash: "c75ba80484af36633b6a4d17b666b1c9" + hash: "d2da36fbf73289f545133bd608af66a2" } Frame { msec: 4320 - hash: "6336ce0d912ee63773475c4c6c5d59be" + hash: "b1d7da6b42a31bba91148ab37b111945" } Frame { msec: 4336 - hash: "85c663b943f67d158367dba0508980a5" + hash: "6f226a3b20d95e17df69e2c4e5aff3d1" } Frame { msec: 4352 - hash: "7db073b7487ddea48e7c9df8b9bfdc00" + hash: "1109da0f043a9418661fc05e53fe3b45" } Frame { msec: 4368 - hash: "d566b2763312e5e823593806acd9e809" + hash: "f3e901db9efd1d9fadf1cb6858040d51" } Frame { msec: 4384 - hash: "a10d3184acc85c46e171fe4cf82e1c23" + hash: "c8e50c0e924b11a3f1943abb9a4008a4" } Frame { msec: 4400 - hash: "e3bb1ec3b84df25712f06e0d6963efdd" + hash: "431226a27488ed1dba237de3d43f94c5" } Frame { msec: 4416 - hash: "fe95122352effcf1815bc237fc6ce6ab" + hash: "420d316430c84f10d7cd24d29b918149" } Frame { msec: 4432 - hash: "2ee111386bd646c4ee577405e490a2f7" + hash: "ccbd4d1e4865ebd9b0fe923e6ab05e5c" } Frame { msec: 4448 - hash: "eac6de65ea6726f0cc50b6d30c1b7ba5" + hash: "231bff73758a1c6f7c7c0365159ba3e6" } Frame { msec: 4464 - hash: "e3c0e8f6385ef2ab9b671be3243774c4" + hash: "d1ac7ceda7303bbf3392d33f47037ed6" } Frame { msec: 4480 - hash: "51da770a75102de9ad1920f1f6c44146" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4496 - hash: "de924155855e76d0591217448f79bdb6" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4512 - hash: "ea3f512181b3ee94d8cdd4d9f59ed962" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4528 - hash: "c0e72cdf776b0c62742aa9c3683cd523" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4544 - hash: "2aec32493055ad17f4aac9b3c9b84c5f" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4560 - hash: "e0826ff09b628a5e3ddf6d9e5593f937" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4576 - hash: "eacfa8db605b9e386a55508e8943e7d1" + hash: "a2ad07326fafcb3012cdb869f39af466" } Frame { msec: 4592 - hash: "2dbe9b5bbb5baf12cd2cbfb4190be316" + hash: "8622eb25a6da44926b5161bce213a483" } Frame { msec: 4608 - hash: "60a60e06237318bf005f87bbba386fef" + hash: "fe563aa9dae9655871f82a779063cdbd" } Frame { msec: 4624 - hash: "97549f388c02adb8884c2e79510adc7e" + hash: "775cd79b012f79b773449a0ad8457149" } Frame { msec: 4640 - hash: "d882fe91d9df9862d620cf984e27d0bd" + hash: "01e9fab344a148a0877a7332d561be5a" } Frame { msec: 4656 - hash: "6310b65572e39256122c7620f7e87442" + hash: "935566d139599a30197850774fb059ba" } Frame { msec: 4672 - hash: "4e7374a683050ff440056b6e7c971d2b" + hash: "4aae1ac532624417decddd978f516b6e" } Frame { msec: 4688 - hash: "35c0d55cda3a02eb4c441a5832bcbbf4" + hash: "34dc78df6e9941988712c1f8f79c3db0" } Frame { msec: 4704 - hash: "8d71c418593eb3e4834d5e608ffd3f29" + hash: "23a96c11d5917c44bd48239ed2b5777f" } Frame { msec: 4720 - hash: "0da2c1cd0138172698a3bee5d19168c5" + hash: "f8f13e097eae3152db3ccebff1343fe0" } Frame { msec: 4736 - hash: "8ca757a4fd1987329488f63251b0f6b4" + hash: "02f8fca7c4ab80ecf425e4b39e966b86" } Frame { msec: 4752 - hash: "70c827f1b34b44cbd775b666913556d6" + hash: "c3356367750e797ff81bc4102f948134" } Frame { msec: 4768 - hash: "2b91dcef1b3ca66059dd9db4c8e335f3" + hash: "7b5de3772b8bcb4b10f3d265d5603afb" } Frame { msec: 4784 - hash: "38abc77b2361ce257d39c0cf268ba42b" + hash: "ed3c741639232377f61867fd353ce58a" } Frame { msec: 4800 @@ -1302,2254 +1382,118 @@ VisualTest { } Frame { msec: 4816 - hash: "7bed5747d6b771db0fe5802153e54f2f" + hash: "5ca117709284f4a1cbd64cdba4079340" } Frame { msec: 4832 - hash: "9ac1bf268749bc8e58bc4d04b55ef849" + hash: "de315e6836334fd0a2da855f5be4ff30" } Frame { msec: 4848 - hash: "64ea5cb46782d250c46a7a2c8cceea20" + hash: "3d284b4000d2849ed4af2f7c1b859492" } Frame { msec: 4864 - hash: "d81037eb21bfcb434b6c7f3bbd21ad12" + hash: "83f297406b1c6311da3a216024836d15" } Frame { msec: 4880 - hash: "1079ea3a1a62e2cca9a8e907bc5aa4e1" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 130; y: 101 - modifiers: 0 - sendToViewport: true + hash: "1bb236db749ef514c00d0a3dd698d24f" } Frame { msec: 4896 - hash: "3d78320cb021944d7c6cee1a42056663" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 130; y: 102 - modifiers: 0 - sendToViewport: true + hash: "93f79f8717948bde8ee55c668af2d397" } Frame { msec: 4912 - hash: "1e3f580f37a0dc063a383bdf435e85ea" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 131; y: 102 - modifiers: 0 - sendToViewport: true + hash: "881b5c2ccd0bbdaea4d61abbec600fc5" } Frame { msec: 4928 - hash: "75e854ccaad087bfe776a843f0bd7284" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 132; y: 103 - modifiers: 0 - sendToViewport: true + hash: "be72fe7c27901db62f2dbd9a757e4838" } Frame { msec: 4944 - hash: "ad65de5a6887c0a31a9d8f72a2a651db" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 133; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 134; y: 103 - modifiers: 0 - sendToViewport: true + hash: "c83c973fb1253ccab333fb1e604155b8" } Frame { msec: 4960 - hash: "62bc9c57724f7ab6bcf7d75d8ff68097" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 135; y: 103 - modifiers: 0 - sendToViewport: true + hash: "dd6072d204812c23e24db1e7a81c6f57" } Frame { msec: 4976 - hash: "00dfc5f4468482cb5f74e62be235b1d2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 136; y: 103 - modifiers: 0 - sendToViewport: true + hash: "fb342743dc5ab9ade2b8a48a2a11dc8f" } Frame { msec: 4992 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 137; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 138; y: 102 - modifiers: 0 - sendToViewport: true + hash: "fc8ede705bfe8f339fe47041c502b0d6" } Frame { msec: 5008 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 139; y: 101 - modifiers: 0 - sendToViewport: true + hash: "00fa0306d3fdc7e384cfc0660a3a355d" } Frame { msec: 5024 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 140; y: 101 - modifiers: 0 - sendToViewport: true + hash: "00fa0306d3fdc7e384cfc0660a3a355d" } Frame { msec: 5040 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 141; y: 100 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 143; y: 100 - modifiers: 0 - sendToViewport: true + hash: "fc8ede705bfe8f339fe47041c502b0d6" } Frame { msec: 5056 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 100 - modifiers: 0 - sendToViewport: true + hash: "fb342743dc5ab9ade2b8a48a2a11dc8f" } Frame { msec: 5072 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 146; y: 99 - modifiers: 0 - sendToViewport: true + hash: "dd6072d204812c23e24db1e7a81c6f57" } Frame { msec: 5088 - hash: "748dc58a3ad83d7b99d7b26ad2f82786" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 148; y: 99 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 149; y: 99 - modifiers: 0 - sendToViewport: true + hash: "c83c973fb1253ccab333fb1e604155b8" } Frame { msec: 5104 - hash: "242cc0ee7c3bdb44e8933068d3a93b61" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 150; y: 99 - modifiers: 0 - sendToViewport: true + hash: "be72fe7c27901db62f2dbd9a757e4838" } Frame { msec: 5120 - hash: "3be6f0a35fb085dcf6c9481cf1c23f9d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 151; y: 99 - modifiers: 0 - sendToViewport: true + hash: "881b5c2ccd0bbdaea4d61abbec600fc5" } Frame { msec: 5136 - hash: "a6f63267eaba9aefd2c9ab338571ef33" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 99 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 98 - modifiers: 0 - sendToViewport: true + hash: "93f79f8717948bde8ee55c668af2d397" } Frame { msec: 5152 - hash: "ba37dd9ba649e294465dc707f6b768ec" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 153; y: 98 - modifiers: 0 - sendToViewport: true + hash: "1bb236db749ef514c00d0a3dd698d24f" } Frame { msec: 5168 - hash: "35b186609721ec0b8a121d15bc54ce49" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 98 - modifiers: 0 - sendToViewport: true + hash: "83f297406b1c6311da3a216024836d15" } Frame { msec: 5184 - hash: "700ff15e4e48af93362455a149d90363" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 155; y: 98 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 156; y: 98 - modifiers: 0 - sendToViewport: true + hash: "3d284b4000d2849ed4af2f7c1b859492" } Frame { msec: 5200 - hash: "1c51eb8d4d25d086bda4d595a49c3a86" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 98 - modifiers: 0 - sendToViewport: true + hash: "de315e6836334fd0a2da855f5be4ff30" } Frame { msec: 5216 - hash: "2f085b047d24384d463163df7fac2bd3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 98 - modifiers: 0 - sendToViewport: true + hash: "5ca117709284f4a1cbd64cdba4079340" } Frame { msec: 5232 - hash: "46d7aff6eb47e50e23c061ecb149fbf9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 98 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 161; y: 98 - modifiers: 0 - sendToViewport: true + hash: "4f0d49aff27a1c83287d38e760c10f16" } Frame { msec: 5248 - hash: "48d7a8f749f7501dbaa4599ca41096a5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 163; y: 97 - modifiers: 0 - sendToViewport: true + hash: "ed3c741639232377f61867fd353ce58a" } Frame { msec: 5264 - hash: "4c2a085c69c118fedfa15fe46cdc508b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 164; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5280 - hash: "25f25828a4d22fe85db0de5c562f658e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 166; y: 96 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 168; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5296 - hash: "e9fb14ec21e9ec1235d2fea6e055b69d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 170; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5312 - hash: "66417881aeb85778be66566241c45f5a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 174; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5328 - hash: "c8c136690ffd8e5cc3e58f7376693b4f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 176; y: 96 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 178; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5344 - hash: "c58c4fb5b7197cd8bd95742dc8715bbf" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 179; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5360 - hash: "2e0c93380883fcf2d0e56024fecba605" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 180; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5376 - hash: "5f169f09e3d868eb0425a331d4bc3144" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 182; y: 95 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5392 - hash: "ed648742be4b0ded04e713e83ed24b27" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5408 - hash: "92131288bb38480469f4578282dedaf8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 187; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5424 - hash: "e16773f750bb0f635552b1eeadb2d625" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 189; y: 93 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 191; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5440 - hash: "6e653cd552d82f38f30b8027d1951534" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 192; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5456 - hash: "cfc1d6efa8d1b3b86396704f0be031ad" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 194; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5472 - hash: "5848af73f5ab7c811639a6d01921d502" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 196; y: 92 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 198; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5488 - hash: "3823e7da05678f63e6761a81ed7233e2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 199; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5504 - hash: "d095abe9814a60824914960a11663f12" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 200; y: 91 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5520 - hash: "18922bb3269d903a36e0b690249b473a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 200; y: 91 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 201; y: 90 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5536 - hash: "4d8400a3ca2b782e7b054bb2f71d4543" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 202; y: 89 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5552 - hash: "24ed25d7a767f01fb02f545fc6c6931a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 203; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5568 - hash: "55fb16784e3655ae70f97d6c32853cdc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 204; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5584 - hash: "694e6979f0de62b61324dc4b144a2d5d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 207; y: 86 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 208; y: 85 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5600 - hash: "e61b8b03251f6312e3de4e0c8af684d5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 210; y: 85 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5616 - hash: "6203321f87d53692dbb2b2aaf7dd3944" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5632 - hash: "297b77029475d77cd8e481199b23da30" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 213; y: 84 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 214; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5648 - hash: "414615d772b4c80bf85eabfdca6fd0e0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5664 - hash: "46d70882552a21267eebb3505da086f3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5680 - hash: "372acafc63624307bcb384c48a803ab7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 84 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 217; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5696 - hash: "1b98094dd4f192af8229b7058b8ce396" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5712 - hash: "d627fa0ce696e46650225e43134643f5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5728 - hash: "0410f4b504d768bc00940b20d3d942f9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 85 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 86 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 220; y: 86 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5744 - hash: "5f8011b44681d769800af8d205c757cb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 221; y: 87 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5760 - image: "cursorDelegate.5.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 87 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5776 - hash: "99f7a46f841f96445962b5fb3496d996" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5792 - hash: "ed8bba2823ca2fe7cf138af0fcc52806" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 224; y: 90 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5808 - hash: "c9007b7ae5038ba59bfc6fac15c80d5f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 226; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5824 - hash: "2db81c955a99652bcfef958e870054af" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 228; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5840 - hash: "1e3906d7f3ee5a29c3c90b8e1f6c1eb0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 229; y: 96 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 231; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5856 - hash: "fc59738903cc9e6f36ef4d27bfde9496" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 232; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5872 - hash: "768aaf4ef2b13b40b75bdf15787966b6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 233; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5888 - hash: "3085baedc0c58a6757b134bb4f80fa9e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 233; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5904 - hash: "0a1b8cad167bf93801f4d0dd34bf872e" - } - Frame { - msec: 5920 - hash: "6366e04808ee015feed44d95cc117e1e" - } - Frame { - msec: 5936 - hash: "dd67a8542a243aac9462e25dc1586e6e" - } - Frame { - msec: 5952 - hash: "e06c8788b2ef327d005b4048f0807334" - } - Frame { - msec: 5968 - hash: "dda2beda1253bd477d04cada4ec4df27" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 233; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5984 - hash: "d659d1724637d90497c8e417764d3477" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 232; y: 99 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 232; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6000 - hash: "91035aecf2ac15f3c2c3dbc4b73b540f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 231; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6016 - hash: "91035aecf2ac15f3c2c3dbc4b73b540f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 230; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6032 - hash: "91035aecf2ac15f3c2c3dbc4b73b540f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 229; y: 99 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 228; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6048 - hash: "91035aecf2ac15f3c2c3dbc4b73b540f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 227; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6064 - hash: "91035aecf2ac15f3c2c3dbc4b73b540f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 225; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6080 - hash: "bdc53613cad59416ed79287874eb59f8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 224; y: 101 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 101 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6096 - hash: "54efe0acb07fb69827024a566773a36e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 220; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6112 - hash: "860530a5ac3d89193f3cf234e21f8f6a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6128 - hash: "ade5f8e28159304b22866f688efdbb46" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 217; y: 102 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6144 - hash: "7d5f5cf34910527d899e89ea07fb7254" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6160 - hash: "c201ed0f2419396a229d8396152aba01" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 213; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6176 - hash: "b99135e2cb03ab252ff379c8001c26ad" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 102 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6192 - hash: "768aaf4ef2b13b40b75bdf15787966b6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 210; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6208 - hash: "71a5bed1a87e16c986b2f4b245e956b8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 210; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6224 - hash: "7155607add8c7254286097cda52b5888" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 208; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 207; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6240 - hash: "e516e4d8a4ef0195ae04b3287f536ffd" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 206; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6256 - hash: "afa06d10b37d8ad8b57e392142ff50f2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 205; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6272 - hash: "88c3fe68f7251d87a5bf197b9d59b899" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 204; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 203; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6288 - hash: "b2687baf5148539ee2181b18077e0a3d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 202; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6304 - hash: "457aed68cee2b9f3ff3c7d5f0eb2b6aa" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 201; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6320 - hash: "48bb4683718a3b7c34baea29260fbe8c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 200; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 199; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6336 - hash: "7c32fbf799bbfc10d0fbdd96bcfa9d95" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 197; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6352 - hash: "68cee3b8213a9d38e2ed431d06eb6756" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 196; y: 101 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 194; y: 101 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6368 - hash: "596c732c40a86d16bc649f164b919457" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 191; y: 101 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 188; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6384 - hash: "d9cb5bf69d4f8aaebefae6d680a99185" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 187; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6400 - hash: "bb6759f3aff00f027f4f426efb775d2d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6416 - hash: "a408d88f97c30ab8ab12a222b03571b4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 182; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6432 - hash: "bb2e8994dc014eb6d4e4e33257269c2a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 176; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6448 - hash: "190e9df0b8d20b0f37a198e9f3976416" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 171; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6464 - hash: "aa7be52534c8550948deea6ae174330d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 166; y: 94 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 163; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6480 - hash: "533caac613ea1279a51a5b5b29acdccc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6496 - hash: "288cc34879d9ed8ed381ba6cc31de3e7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 159; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6512 - hash: "2a57602c47ab788f288daa81b985fc1d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 94 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 156; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6528 - hash: "fa3540fafa1a9e3c5e796b598dce8fb1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 156; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6544 - hash: "7e9b17ae7c10cb30153539911ac6eb13" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 155; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6560 - hash: "9e62b16c858e80ff1294ec53e2390498" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 94 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 153; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6576 - hash: "287470e6cf9bd4b9acfd1cd1512307e3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 95 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 151; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6592 - hash: "4086c7c7a573a1b9f98d22ebf9b46c5f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 149; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6608 - hash: "7d0868f000a1102916720a29a332543f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 148; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6624 - hash: "bda3cfdca81f7cba54514c512eb6b12e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 146; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6640 - hash: "923ff9fac39c3fba2c9cf7b52fc652ad" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 145; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6656 - hash: "269718e3586affbbdf0b9599e12f5677" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 145; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6672 - hash: "d12e03b5da6ea7b162d7dec6930c1a54" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6688 - hash: "96edf1f15c674c5d8c4e4ce9e1d34f1d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6704 - hash: "70ce229fae6985dd49de8cca01c031e6" - } - Frame { - msec: 6720 - image: "cursorDelegate.6.png" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 144; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6736 - hash: "56215b7d24ac382ff1ed256c80d14091" - } - Frame { - msec: 6752 - hash: "ac132304e072806431803d26e345b264" - } - Frame { - msec: 6768 - hash: "a8f3e7fbb95ed8fe2b83871eb3d2c151" - } - Frame { - msec: 6784 - hash: "43906030c2572af0f8f0577dbc86e346" - } - Frame { - msec: 6800 - hash: "d64b58801430d5063225dceac1603bca" - } - Frame { - msec: 6816 - hash: "56b81435dc4ce193bb98c3d02c781242" - } - Frame { - msec: 6832 - hash: "a33dce3c55b1b1541cfb9b85a75fcb53" - } - Frame { - msec: 6848 - hash: "6f7411363c66d0959ea5a16a9b610e61" - } - Frame { - msec: 6864 - hash: "fb7ad9156658f3866d19e43f006cf013" - } - Frame { - msec: 6880 - hash: "fca865f762c1a6cc3e487e0e908eef73" - } - Frame { - msec: 6896 - hash: "3d78320cb021944d7c6cee1a42056663" - } - Frame { - msec: 6912 - hash: "1e3f580f37a0dc063a383bdf435e85ea" - } - Frame { - msec: 6928 - hash: "75e854ccaad087bfe776a843f0bd7284" - } - Frame { - msec: 6944 - hash: "ad65de5a6887c0a31a9d8f72a2a651db" - } - Frame { - msec: 6960 - hash: "62bc9c57724f7ab6bcf7d75d8ff68097" - } - Frame { - msec: 6976 - hash: "00dfc5f4468482cb5f74e62be235b1d2" - } - Frame { - msec: 6992 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 7008 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 7024 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 7040 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 7056 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 7072 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 7088 - hash: "00dfc5f4468482cb5f74e62be235b1d2" - } - Frame { - msec: 7104 - hash: "62bc9c57724f7ab6bcf7d75d8ff68097" - } - Frame { - msec: 7120 - hash: "ad65de5a6887c0a31a9d8f72a2a651db" - } - Frame { - msec: 7136 - hash: "75e854ccaad087bfe776a843f0bd7284" - } - Frame { - msec: 7152 - hash: "1e3f580f37a0dc063a383bdf435e85ea" - } - Frame { - msec: 7168 - hash: "3d78320cb021944d7c6cee1a42056663" - } - Frame { - msec: 7184 - hash: "fca865f762c1a6cc3e487e0e908eef73" - } - Frame { - msec: 7200 - hash: "fb7ad9156658f3866d19e43f006cf013" - } - Frame { - msec: 7216 - hash: "6f7411363c66d0959ea5a16a9b610e61" - } - Frame { - msec: 7232 - hash: "a33dce3c55b1b1541cfb9b85a75fcb53" - } - Frame { - msec: 7248 - hash: "56b81435dc4ce193bb98c3d02c781242" - } - Frame { - msec: 7264 - hash: "d64b58801430d5063225dceac1603bca" - } - Frame { - msec: 7280 - hash: "43906030c2572af0f8f0577dbc86e346" - } - Frame { - msec: 7296 - hash: "a8f3e7fbb95ed8fe2b83871eb3d2c151" - } - Frame { - msec: 7312 - hash: "ac132304e072806431803d26e345b264" - } - Frame { - msec: 7328 - hash: "56215b7d24ac382ff1ed256c80d14091" - } - Frame { - msec: 7344 - hash: "4d5c97925b21d699f1c3720a3f51ebbb" - } - Frame { - msec: 7360 - hash: "70ce229fae6985dd49de8cca01c031e6" - } - Frame { - msec: 7376 - hash: "96edf1f15c674c5d8c4e4ce9e1d34f1d" - } - Frame { - msec: 7392 - hash: "d12e03b5da6ea7b162d7dec6930c1a54" - } - Frame { - msec: 7408 - hash: "269718e3586affbbdf0b9599e12f5677" - } - Frame { - msec: 7424 - hash: "42d19ea6dd328c505da5a4eee23a257d" - } - Frame { - msec: 7440 - hash: "e4d9d77859759dd95cf3ffee8f142cd8" - } - Frame { - msec: 7456 - hash: "445e4c6e9872b63a1461e3277dd8185c" - } - Frame { - msec: 7472 - hash: "d6343c629acd987179eae0d158d2504c" - } - Frame { - msec: 7488 - hash: "a5340087baa2c3694ed0cc2bbc3e2ad9" - } - Frame { - msec: 7504 - hash: "205973c30aaca71d1f20e740ce971d82" - } - Frame { - msec: 7520 - hash: "ed28c7e07755e177222c7e322116bfb4" - } - Frame { - msec: 7536 - hash: "6cebfc407a985694c803940608ab1303" - } - Frame { - msec: 7552 - hash: "87f825fc820d3942e4d9b5ece5be3714" - } - Frame { - msec: 7568 - hash: "9aa56dfe90ed2eba58eee0ff6ff3822c" - } - Frame { - msec: 7584 - hash: "c93acf87a918f21a55cf39ea255315a3" - } - Frame { - msec: 7600 - hash: "f8ce1bec5d5016c56fc66d52c28e69d1" - } - Frame { - msec: 7616 - hash: "a365dba2f7c4be77ea98b727813c2f03" - } - Frame { - msec: 7632 - hash: "e8d1c35ee9ef74c4070adfce5e4560f1" - } - Frame { - msec: 7648 - hash: "f5f2dbb041eeb4de1821761f4fbca506" - } - Frame { - msec: 7664 - hash: "f4ea6e9dff51778e9b5d1321453617ec" - } - Frame { - msec: 7680 - image: "cursorDelegate.7.png" - } - Frame { - msec: 7696 - hash: "f2869791dde1eb4c2ea24e04dc3ac653" - } - Frame { - msec: 7712 - hash: "9bd70e91b765de22b70fe295adc4f87f" - } - Frame { - msec: 7728 - hash: "c0338d0a5c72ba63bff666a76ab3242c" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 227; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7744 - hash: "cb2a643eed9b5658260e04495820cd3d" - } - Frame { - msec: 7760 - hash: "6dda51f2e611b1f589c75820fd8c7295" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 227; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7776 - hash: "98d8692afd47c61421ddcae62414a72e" - } - Frame { - msec: 7792 - hash: "2c533bcdd9df45c6f942d47509ebf20e" - } - Frame { - msec: 7808 - hash: "d28f231fb1e128329e8985689deac882" - } - Frame { - msec: 7824 - hash: "ea73450baf98a2f629ce1c203cfcd728" - } - Frame { - msec: 7840 - hash: "959a31d38edc343b5e081fd0cddc81df" - } - Frame { - msec: 7856 - hash: "9b1ae10ee8e9b3f176357733af9e6735" - } - Frame { - msec: 7872 - hash: "89b0dd11f456bbb321e0bd2e1614c193" - } - Frame { - msec: 7888 - hash: "a0a3aa6d8d4c677894e745ee432084e2" - } - Frame { - msec: 7904 - hash: "f63207b8903085b19de1c9b6a9ff90e0" - } - Frame { - msec: 7920 - hash: "c8f2126fece8c2b473c6511aa568dddb" - } - Frame { - msec: 7936 - hash: "6ccd1f30e85dbad74468c228d92a9a3c" - } - Frame { - msec: 7952 - hash: "bae09fe9f29e0f6ebda298cae753ddab" - } - Frame { - msec: 7968 - hash: "cde4abae868488345fb124b927f46b45" - } - Frame { - msec: 7984 - hash: "a88ccf9c8ae34ffcfd15af4e66102040" - } - Frame { - msec: 8000 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 8016 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 8032 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 8048 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 8064 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 8080 - hash: "a88ccf9c8ae34ffcfd15af4e66102040" - } - Frame { - msec: 8096 - hash: "cde4abae868488345fb124b927f46b45" - } - Frame { - msec: 8112 - hash: "bae09fe9f29e0f6ebda298cae753ddab" - } - Frame { - msec: 8128 - hash: "6ccd1f30e85dbad74468c228d92a9a3c" - } - Frame { - msec: 8144 - hash: "c8f2126fece8c2b473c6511aa568dddb" - } - Frame { - msec: 8160 - hash: "f63207b8903085b19de1c9b6a9ff90e0" - } - Frame { - msec: 8176 - hash: "a0a3aa6d8d4c677894e745ee432084e2" - } - Frame { - msec: 8192 - hash: "89b0dd11f456bbb321e0bd2e1614c193" - } - Frame { - msec: 8208 - hash: "9b1ae10ee8e9b3f176357733af9e6735" - } - Frame { - msec: 8224 - hash: "959a31d38edc343b5e081fd0cddc81df" - } - Frame { - msec: 8240 - hash: "ea73450baf98a2f629ce1c203cfcd728" - } - Frame { - msec: 8256 - hash: "d28f231fb1e128329e8985689deac882" - } - Frame { - msec: 8272 - hash: "2c533bcdd9df45c6f942d47509ebf20e" - } - Frame { - msec: 8288 - hash: "98d8692afd47c61421ddcae62414a72e" - } - Frame { - msec: 8304 - hash: "6dda51f2e611b1f589c75820fd8c7295" - } - Frame { - msec: 8320 - hash: "cb2a643eed9b5658260e04495820cd3d" - } - Frame { - msec: 8336 - hash: "88afd2fa1182fbb2aab100d4587a1006" - } - Frame { - msec: 8352 - hash: "bc657c5181a11a9ff9565f134bdccb8d" - } - Frame { - msec: 8368 - hash: "a296634d814a6e12f9d09f4d8a9fa097" - } - Frame { - msec: 8384 - hash: "f05a2deeb12722904c4f31d641dffeb4" - } - Frame { - msec: 8400 - hash: "75823698247e39dd10a70fe224e13597" - } - Frame { - msec: 8416 - hash: "244fa06c168f7a7401b8ec7f5ddb0e52" - } - Frame { - msec: 8432 - hash: "a78e0f88d269290e9086d1d854618f0c" - } - Frame { - msec: 8448 - hash: "57b1281d29d5c5fdc15d9cf1e3a5545c" - } - Frame { - msec: 8464 - hash: "a24ac211ef29dcf7f22ac95991f1af3f" - } - Frame { - msec: 8480 - hash: "361f978ea3597fd518c25c0069c22e8b" - } - Frame { - msec: 8496 - hash: "ac8e2c01eb58aac0eb4feb6aba9b9628" - } - Frame { - msec: 8512 - hash: "6099612934b5eb90296f1cc3cb5c1a84" - } - Frame { - msec: 8528 - hash: "7c3f08291168065fc9c1d62108022d33" - } - Frame { - msec: 8544 - hash: "8bf57ba445d668af5f3e59276c4f8800" - } - Frame { - msec: 8560 - hash: "c8ed352cbfbc472ea4802a9e03d40052" - } - Frame { - msec: 8576 - hash: "11e5546b30e47d2f3067c0364b9f0877" - } - Frame { - msec: 8592 - hash: "9df0f136fca92d4a05f17ee68f0cd286" - } - Frame { - msec: 8608 - hash: "39f47838a622ba328548cad57cca9e12" - } - Frame { - msec: 8624 - hash: "c891d582be4b23c01e29032fe861081f" - } - Frame { - msec: 8640 - image: "cursorDelegate.8.png" - } - Frame { - msec: 8656 - hash: "c3820dfd382c4568d9fbd2ee95889eda" - } - Frame { - msec: 8672 - hash: "528cf8778318bf7216b54f983dadb2b4" - } - Frame { - msec: 8688 - hash: "419518a3c63aa36f6070e95eb93e58a3" - } - Frame { - msec: 8704 - hash: "11b22e2853c0a9ea6e4ac764348698c9" - } - Frame { - msec: 8720 - hash: "8018329c4b57647942ae34a5f83c2b12" - } - Frame { - msec: 8736 - hash: "c37e9fd5c3d664c2e4911c8cb9fcabf7" - } - Frame { - msec: 8752 - hash: "4e7895f802c9fc249894ba0db25959f7" - } - Frame { - msec: 8768 - hash: "5fed71d99ef70432bc6be8caaea36f17" - } - Frame { - msec: 8784 - hash: "69976d074acbd7a5731c70b33c8f084b" - } - Frame { - msec: 8800 - hash: "c88952348da3df0627b12b8bb05ca13e" - } - Frame { - msec: 8816 - hash: "cc5222da7a17c66d4db146c406492701" - } - Frame { - msec: 8832 - hash: "8915e752776da27cb86019c9decc8a8c" - } - Frame { - msec: 8848 - hash: "d8a77ccc7c01cf187e846a2903e1c55e" - } - Frame { - msec: 8864 - hash: "3cf3f02f98a199c81ef73e8905e7f7ee" - } - Frame { - msec: 8880 - hash: "7a1d47e0109fc370bf63714040cbef96" - } - Frame { - msec: 8896 - hash: "2ca8b8ddbe73b29327e474da34a14a87" - } - Frame { - msec: 8912 - hash: "ee75214865fca848aa38cc05b6049d8f" - } - Frame { - msec: 8928 - hash: "05ab7d8118a806f2215160f5f266a082" - } - Frame { - msec: 8944 - hash: "31e63095b7be56d0bf75e9cff832feb7" - } - Frame { - msec: 8960 - hash: "3ffda2c2f154f1eb806e9f0963057fa1" - } - Frame { - msec: 8976 - hash: "4e805203b58e8f6f331f2e878704fa01" - } - Frame { - msec: 8992 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 9008 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 9024 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 9040 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 9056 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 9072 - hash: "60edce44dd4ca7fac8d8093990ee5ec1" - } - Frame { - msec: 9088 - hash: "4e805203b58e8f6f331f2e878704fa01" - } - Frame { - msec: 9104 - hash: "3ffda2c2f154f1eb806e9f0963057fa1" - } - Frame { - msec: 9120 - hash: "31e63095b7be56d0bf75e9cff832feb7" - } - Frame { - msec: 9136 - hash: "05ab7d8118a806f2215160f5f266a082" + hash: "7b5de3772b8bcb4b10f3d265d5603afb" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.0.png new file mode 100644 index 0000000..e69860e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.1.png new file mode 100644 index 0000000..1db3c26 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.10.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.10.png new file mode 100644 index 0000000..9c72d52 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.10.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.11.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.11.png new file mode 100644 index 0000000..9c72d52 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.11.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.2.png new file mode 100644 index 0000000..fbef805 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.3.png new file mode 100644 index 0000000..dc56c7e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.4.png new file mode 100644 index 0000000..04ea496 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.5.png new file mode 100644 index 0000000..98bf7de Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.6.png new file mode 100644 index 0000000..d95b895 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.7.png new file mode 100644 index 0000000..9954344 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.8.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.8.png new file mode 100644 index 0000000..d49c2ff Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.9.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.9.png new file mode 100644 index 0000000..9c72d52 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.qml new file mode 100644 index 0000000..94891e5 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data/usingMultilineEdit.qml @@ -0,0 +1,4687 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 32 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 48 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 64 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 80 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 96 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 112 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 128 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 144 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 160 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 176 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 192 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 208 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 224 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 240 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 256 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 272 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 288 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 304 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 320 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 118; y: 70 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 336 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 352 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 368 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 384 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 400 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 118; y: 70 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 416 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 432 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 448 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 464 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 480 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 496 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 512 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 528 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 544 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 560 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 576 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 592 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 608 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 624 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Frame { + msec: 640 + hash: "a4edfba57a47b45f96fe1fa7a37c1720" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 117; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 656 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 672 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 117; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 688 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 704 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 720 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 736 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 752 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 768 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 784 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 800 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 816 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 832 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 848 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 864 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 880 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 896 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 912 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 928 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 944 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 960 + image: "usingMultilineEdit.0.png" + } + Frame { + msec: 976 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 992 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1008 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1024 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1040 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1056 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1072 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1088 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1104 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1120 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1136 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1152 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1168 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1184 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1200 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1216 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1232 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1248 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1264 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1280 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Frame { + msec: 1296 + hash: "bf9ad629e190df34f8bbb242e986083f" + } + Key { + type: 6 + key: 44 + modifiers: 0 + text: "2c" + autorep: false + count: 1 + } + Frame { + msec: 1312 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Frame { + msec: 1328 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Frame { + msec: 1344 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Frame { + msec: 1360 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Frame { + msec: 1376 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Key { + type: 7 + key: 44 + modifiers: 0 + text: "2c" + autorep: false + count: 1 + } + Frame { + msec: 1392 + hash: "bf65dbbfc02ad1589093d965c83d5806" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1408 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1424 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1440 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1456 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1472 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1488 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1504 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1520 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1536 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Frame { + msec: 1552 + hash: "ef0640a754b76b5e28bff78376f1aaf3" + } + Key { + type: 6 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 1568 + hash: "b392b8d675e61166e9707f4a7f191c15" + } + Frame { + msec: 1584 + hash: "b392b8d675e61166e9707f4a7f191c15" + } + Frame { + msec: 1600 + hash: "b392b8d675e61166e9707f4a7f191c15" + } + Key { + type: 7 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 1616 + hash: "b392b8d675e61166e9707f4a7f191c15" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1632 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1648 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1664 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1680 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1696 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1712 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Frame { + msec: 1728 + hash: "f7a9826581a72f37b1211f1006d93ae5" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1744 + hash: "cea68eaed3000fe598917688b49525b7" + } + Frame { + msec: 1760 + hash: "cea68eaed3000fe598917688b49525b7" + } + Frame { + msec: 1776 + hash: "cea68eaed3000fe598917688b49525b7" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1792 + hash: "cea68eaed3000fe598917688b49525b7" + } + Frame { + msec: 1808 + hash: "cea68eaed3000fe598917688b49525b7" + } + Frame { + msec: 1824 + hash: "cea68eaed3000fe598917688b49525b7" + } + Key { + type: 6 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 1840 + hash: "968932500933300e0a0ca711067d6659" + } + Frame { + msec: 1856 + hash: "968932500933300e0a0ca711067d6659" + } + Frame { + msec: 1872 + hash: "968932500933300e0a0ca711067d6659" + } + Frame { + msec: 1888 + hash: "968932500933300e0a0ca711067d6659" + } + Frame { + msec: 1904 + hash: "968932500933300e0a0ca711067d6659" + } + Key { + type: 7 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1920 + image: "usingMultilineEdit.1.png" + } + Frame { + msec: 1936 + hash: "1d5b3f8dc6e0701c0c11a330e055ba5d" + } + Frame { + msec: 1952 + hash: "1d5b3f8dc6e0701c0c11a330e055ba5d" + } + Frame { + msec: 1968 + hash: "1d5b3f8dc6e0701c0c11a330e055ba5d" + } + Key { + type: 6 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 1984 + hash: "067182091936c99dfa5c29b226bd4351" + } + Frame { + msec: 2000 + hash: "067182091936c99dfa5c29b226bd4351" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 2016 + hash: "067182091936c99dfa5c29b226bd4351" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2032 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2048 + hash: "810e996b65424f80e229160860805492" + } + Key { + type: 7 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 2064 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2080 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2096 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2112 + hash: "810e996b65424f80e229160860805492" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2128 + hash: "810e996b65424f80e229160860805492" + } + Frame { + msec: 2144 + hash: "810e996b65424f80e229160860805492" + } + Key { + type: 6 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 2160 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2176 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2192 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2208 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2224 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Frame { + msec: 2240 + hash: "10aca130f139e44c0889d8d9c9bb8673" + } + Key { + type: 7 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Key { + type: 6 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 2256 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2272 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2288 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2304 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2320 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Key { + type: 7 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 2336 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Frame { + msec: 2352 + hash: "6785570c7f2cc9f3c6b0b07b8a94ecb2" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 2368 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Frame { + msec: 2384 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Frame { + msec: 2400 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Frame { + msec: 2416 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 2432 + hash: "701c2738b7c064cd487bd0c6c0beb6b4" + } + Key { + type: 6 + key: 80 + modifiers: 0 + text: "70" + autorep: false + count: 1 + } + Frame { + msec: 2448 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2464 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2480 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2496 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2512 + hash: "35c0c51dd874faa28058251164836dcb" + } + Frame { + msec: 2528 + hash: "35c0c51dd874faa28058251164836dcb" + } + Key { + type: 7 + key: 80 + modifiers: 0 + text: "70" + autorep: false + count: 1 + } + Frame { + msec: 2544 + hash: "35c0c51dd874faa28058251164836dcb" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2560 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2576 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2592 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2608 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2624 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2640 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2656 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2672 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Frame { + msec: 2688 + hash: "12748fe9d3b72aff29449deeb2372d03" + } + Key { + type: 6 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 2704 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2720 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2736 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2752 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2768 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Frame { + msec: 2784 + hash: "0d119074fb7e882ebe4dfbad9bfb401a" + } + Key { + type: 6 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 2800 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Key { + type: 7 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 2816 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2832 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2848 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2864 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Key { + type: 7 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 2880 + image: "usingMultilineEdit.2.png" + } + Frame { + msec: 2896 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2912 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Frame { + msec: 2928 + hash: "3646bd6ea35fb8f0160a24a203b0f469" + } + Key { + type: 6 + key: 75 + modifiers: 0 + text: "6b" + autorep: false + count: 1 + } + Frame { + msec: 2944 + hash: "d90cbfbec0e5a73781664eec63ba7081" + } + Frame { + msec: 2960 + hash: "d90cbfbec0e5a73781664eec63ba7081" + } + Frame { + msec: 2976 + hash: "d90cbfbec0e5a73781664eec63ba7081" + } + Key { + type: 7 + key: 75 + modifiers: 0 + text: "6b" + autorep: false + count: 1 + } + Key { + type: 6 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 2992 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Frame { + msec: 3008 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Frame { + msec: 3024 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Frame { + msec: 3040 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Key { + type: 7 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 3056 + hash: "8faa6d1174cf3e8ef10f6575276ed125" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3072 + hash: "bac072bfe350abe83fbc941e56845939" + } + Frame { + msec: 3088 + hash: "bac072bfe350abe83fbc941e56845939" + } + Frame { + msec: 3104 + hash: "bac072bfe350abe83fbc941e56845939" + } + Key { + type: 6 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3120 + hash: "bac072bfe350abe83fbc941e56845939" + } + Key { + type: 7 + key: 32 + modifiers: 33554432 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3136 + hash: "bac072bfe350abe83fbc941e56845939" + } + Frame { + msec: 3152 + hash: "bac072bfe350abe83fbc941e56845939" + } + Key { + type: 6 + key: 73 + modifiers: 33554432 + text: "49" + autorep: false + count: 1 + } + Frame { + msec: 3168 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Frame { + msec: 3184 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Frame { + msec: 3200 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Frame { + msec: 3216 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Key { + type: 7 + key: 73 + modifiers: 33554432 + text: "49" + autorep: false + count: 1 + } + Frame { + msec: 3232 + hash: "386a85651164d0edbeb5cc2b7ee438c7" + } + Key { + type: 7 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3248 + hash: "982d48e7ef886a74791306f055ddc714" + } + Frame { + msec: 3264 + hash: "982d48e7ef886a74791306f055ddc714" + } + Frame { + msec: 3280 + hash: "982d48e7ef886a74791306f055ddc714" + } + Frame { + msec: 3296 + hash: "982d48e7ef886a74791306f055ddc714" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3312 + hash: "982d48e7ef886a74791306f055ddc714" + } + Key { + type: 6 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 3328 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Frame { + msec: 3344 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Frame { + msec: 3360 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Frame { + msec: 3376 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Frame { + msec: 3392 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Key { + type: 7 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 3408 + hash: "38003a58f17d25d302c5e1b643b271b0" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 3424 + hash: "18d37190d139a1567d91882fdac411d6" + } + Frame { + msec: 3440 + hash: "18d37190d139a1567d91882fdac411d6" + } + Frame { + msec: 3456 + hash: "18d37190d139a1567d91882fdac411d6" + } + Frame { + msec: 3472 + hash: "18d37190d139a1567d91882fdac411d6" + } + Frame { + msec: 3488 + hash: "18d37190d139a1567d91882fdac411d6" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Key { + type: 6 + key: 78 + modifiers: 0 + text: "6e" + autorep: false + count: 1 + } + Frame { + msec: 3504 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3520 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3536 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3552 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3568 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Frame { + msec: 3584 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Key { + type: 7 + key: 78 + modifiers: 0 + text: "6e" + autorep: false + count: 1 + } + Frame { + msec: 3600 + hash: "279aa32aaeebea7f8078e8a750d0514b" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 3616 + hash: "626123df4dc8fc1321d0262871ffbe3e" + } + Frame { + msec: 3632 + hash: "626123df4dc8fc1321d0262871ffbe3e" + } + Frame { + msec: 3648 + hash: "626123df4dc8fc1321d0262871ffbe3e" + } + Frame { + msec: 3664 + hash: "626123df4dc8fc1321d0262871ffbe3e" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3680 + hash: "00972f42fed66eb94832506b436b203d" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 3696 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3712 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3728 + hash: "00972f42fed66eb94832506b436b203d" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3744 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3760 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3776 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3792 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3808 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3824 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3840 + image: "usingMultilineEdit.3.png" + } + Frame { + msec: 3856 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3872 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3888 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3904 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3920 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3936 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3952 + hash: "00972f42fed66eb94832506b436b203d" + } + Frame { + msec: 3968 + hash: "00972f42fed66eb94832506b436b203d" + } + Key { + type: 6 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 3984 + hash: "72d952ff90862b93ccec046f61d85360" + } + Frame { + msec: 4000 + hash: "72d952ff90862b93ccec046f61d85360" + } + Frame { + msec: 4016 + hash: "72d952ff90862b93ccec046f61d85360" + } + Frame { + msec: 4032 + hash: "72d952ff90862b93ccec046f61d85360" + } + Frame { + msec: 4048 + hash: "72d952ff90862b93ccec046f61d85360" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4064 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Key { + type: 7 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 4080 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Frame { + msec: 4096 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Frame { + msec: 4112 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Frame { + msec: 4128 + hash: "abd2bd3a1fdf5dbdd5bfdcc84bad136c" + } + Key { + type: 6 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 4144 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Frame { + msec: 4160 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4176 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Frame { + msec: 4192 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Frame { + msec: 4208 + hash: "f091e9b3d660c3664960f3fe6f624a1d" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 4224 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4240 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Key { + type: 7 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 4256 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4272 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 4288 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4304 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4320 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4336 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4352 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Frame { + msec: 4368 + hash: "bc9ae8ea7f8a7f1089263a20b4a5e826" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 4384 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Frame { + msec: 4400 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Frame { + msec: 4416 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Frame { + msec: 4432 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Frame { + msec: 4448 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 4464 + hash: "f96b7c209a5e558543157cf5aa4ce69e" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4480 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4496 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4512 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4528 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4544 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4560 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4576 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4592 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Key { + type: 6 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 4608 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4624 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4640 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4656 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4672 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4688 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4704 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4720 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4736 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4752 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4768 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4784 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4800 + image: "usingMultilineEdit.4.png" + } + Frame { + msec: 4816 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Frame { + msec: 4832 + hash: "67facce41bc51af385bd8102a7e1285e" + } + Key { + type: 6 + key: 63 + modifiers: 33554432 + text: "3f" + autorep: false + count: 1 + } + Frame { + msec: 4848 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4864 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4880 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4896 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4912 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4928 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4944 + hash: "a616e994d83964ff75d95b702f355937" + } + Key { + type: 7 + key: 63 + modifiers: 33554432 + text: "3f" + autorep: false + count: 1 + } + Frame { + msec: 4960 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4976 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 4992 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5008 + hash: "a616e994d83964ff75d95b702f355937" + } + Key { + type: 7 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 5024 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5040 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5056 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5072 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5088 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5104 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5120 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5136 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5152 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5168 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5184 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5200 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5216 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5232 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5248 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5264 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5280 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5296 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5312 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5328 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5344 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5360 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5376 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5392 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5408 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5424 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5440 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5456 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5472 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5488 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5504 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5520 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5536 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5552 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5568 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5584 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5600 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5616 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5632 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5648 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5664 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5680 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5696 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5712 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5728 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5744 + hash: "a616e994d83964ff75d95b702f355937" + } + Frame { + msec: 5760 + image: "usingMultilineEdit.5.png" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 48; y: 19 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5776 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Frame { + msec: 5792 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Frame { + msec: 5808 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Frame { + msec: 5824 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 21 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 22 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5840 + hash: "e9532a9023548cf5dfca3fdaeb3467e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 23 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5856 + hash: "3ee2836c3a2ff4c71d82dd261941883b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 31 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5872 + hash: "3ee2836c3a2ff4c71d82dd261941883b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 36 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 41 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5888 + hash: "3ee2836c3a2ff4c71d82dd261941883b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5904 + hash: "4e620c1b847274f691e80a384eac5320" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 58; y: 52 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 58 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5920 + hash: "1a246aa1be0878c38da2eaac6befb738" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 69 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5936 + hash: "7d6d4a33aacd1d2f530834af31069793" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 62; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5952 + hash: "eba517141a4dc94025801fabc8c5e813" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5968 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 97 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 105 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 114 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 128 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 130 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 140 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 148 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 149 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 151 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 153 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Frame { + msec: 6208 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Frame { + msec: 6224 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Frame { + msec: 6240 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Frame { + msec: 6256 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6272 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 152 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6288 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6304 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6320 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 63; y: 98 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6336 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6352 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 72 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6368 + hash: "a0f4a1f253c763054ca7d9727d517e5c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 58 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 51 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6384 + hash: "b6589493e0225846be0af57024e25d98" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6400 + hash: "b6589493e0225846be0af57024e25d98" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 30 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6416 + hash: "d8a1bee2a0e57944d8268a2ce7e6c3c1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 16 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 6 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6432 + hash: "a609d3c9cb375240e66dd316af27543c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -2 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -9 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6448 + hash: "0d376060ba0f9843ed814a8d8150d047" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: -23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6464 + hash: "9ad787bf41f0ab66beffff056a115c23" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -31 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6480 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6496 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6512 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6528 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6544 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6560 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6576 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6592 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6608 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6624 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6640 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6656 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Frame { + msec: 6672 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6688 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: -42 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6704 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: -39 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -36 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6720 + image: "usingMultilineEdit.6.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -33 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: -28 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6736 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -25 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -21 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6752 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: -18 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: -14 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6768 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: -10 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -8 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6784 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -6 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: -3 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6800 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: -1 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 0 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6816 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 2 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 3 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6832 + hash: "bc4cd74678c08403bb16b74630d0fd18" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 5 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 7 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6848 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 8 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 10 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6864 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 11 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6880 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 55; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6896 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6912 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6928 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6944 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6960 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6976 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 6992 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7008 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7024 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7040 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7056 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7072 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Frame { + msec: 7088 + hash: "0e728de352bc8658bb3e2900a56bfad9" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 59; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7104 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7120 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7136 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7152 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7168 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 59; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7184 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7200 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7216 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7232 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7248 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7264 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7280 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7296 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7312 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7328 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7344 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7360 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7376 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7392 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7408 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7424 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7440 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7456 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7472 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7488 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7504 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7520 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7536 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7552 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Frame { + msec: 7568 + hash: "c9b766ef3743159fdd7a01d3eeaa357b" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7584 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7600 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7616 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7632 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7648 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7664 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7680 + image: "usingMultilineEdit.7.png" + } + Frame { + msec: 7696 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Frame { + msec: 7712 + hash: "f8d7e167379a5109b1744727b3bb5050" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7728 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7744 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7760 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7776 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7792 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7808 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7824 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7840 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7856 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7872 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7888 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7904 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7920 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7936 + hash: "d1f43fa2f710725527736ac3439577df" + } + Frame { + msec: 7952 + hash: "d1f43fa2f710725527736ac3439577df" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 7968 + hash: "1553d42725394fa4d4c9b97dc12a78b9" + } + Frame { + msec: 7984 + hash: "1553d42725394fa4d4c9b97dc12a78b9" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8000 + hash: "a62df700f3209668a813e765a79e7859" + } + Frame { + msec: 8016 + hash: "a62df700f3209668a813e765a79e7859" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8032 + hash: "e8928770969b82523e828e3036bbe106" + } + Frame { + msec: 8048 + hash: "e8928770969b82523e828e3036bbe106" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8064 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8080 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Key { + type: 6 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Key { + type: 7 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8096 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8112 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8128 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8144 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8160 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8176 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Frame { + msec: 8192 + hash: "ba0c406580cc0fa02a6b26367a290ec9" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8208 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8224 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8240 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8256 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8272 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8288 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8304 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Frame { + msec: 8320 + hash: "479b5ba3f5b3d38b5e9aba6b5204da03" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8336 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8352 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8368 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8384 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8400 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8416 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8432 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8448 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Frame { + msec: 8464 + hash: "978ed05f4ea2cc7ddb06807a25883335" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8480 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8496 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8512 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8528 + hash: "b65c439a091d3293352de410d28aaca1" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8544 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8560 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8576 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8592 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8608 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8624 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8640 + image: "usingMultilineEdit.8.png" + } + Frame { + msec: 8656 + hash: "b65c439a091d3293352de410d28aaca1" + } + Key { + type: 7 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8672 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8688 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8704 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8720 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8736 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8752 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8768 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8784 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8800 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8816 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8832 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8848 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8864 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8880 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8896 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8912 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8928 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8944 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8960 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8976 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 8992 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9008 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9024 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9040 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9056 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9072 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9088 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9104 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9120 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9136 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9152 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9168 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9184 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9200 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 70; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9216 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9232 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 74 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9248 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 76 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9264 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9280 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 70; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9296 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9312 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9328 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9344 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9360 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9376 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9392 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9408 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9424 + hash: "b65c439a091d3293352de410d28aaca1" + } + Frame { + msec: 9440 + hash: "b65c439a091d3293352de410d28aaca1" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 71; y: 94 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9456 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9472 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9488 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9504 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9520 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9536 + hash: "3d08eff16edf54f522a75df1734150df" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 71; y: 94 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9552 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9568 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9584 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9600 + image: "usingMultilineEdit.9.png" + } + Frame { + msec: 9616 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9632 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9648 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9664 + hash: "3d08eff16edf54f522a75df1734150df" + } + Key { + type: 6 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 9680 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9696 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9712 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9728 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9744 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9760 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9776 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9792 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9808 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9824 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9840 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9856 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9872 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9888 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9904 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9920 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9936 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9952 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9968 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 9984 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10000 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10016 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10032 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10048 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10064 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10080 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10096 + hash: "3d08eff16edf54f522a75df1734150df" + } + Key { + type: 6 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10112 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10128 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10144 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10160 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10176 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10192 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10208 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10224 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Key { + type: 7 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10240 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10256 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10272 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10288 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10304 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10320 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10336 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Frame { + msec: 10352 + hash: "8d9ca5bff73c2c93a0db5787ca7ef76b" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10368 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10384 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10400 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10416 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10432 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10448 + hash: "3d08eff16edf54f522a75df1734150df" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10464 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10480 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10496 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10512 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10528 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10544 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10560 + image: "usingMultilineEdit.10.png" + } + Frame { + msec: 10576 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10592 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10608 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10624 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10640 + hash: "3d08eff16edf54f522a75df1734150df" + } + Key { + type: 7 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10656 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10672 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10688 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10704 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10720 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10736 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10752 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10768 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10784 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10800 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10816 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10832 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10848 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10864 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10880 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10896 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10912 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10928 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10944 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10960 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10976 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 10992 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11008 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11024 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11040 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11056 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11072 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11088 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11104 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11120 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11136 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11152 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11168 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11184 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11200 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11216 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11232 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11248 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11264 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11280 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11296 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11312 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11328 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11344 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11360 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11376 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11392 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11408 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11424 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11440 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11456 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11472 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11488 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11504 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11520 + image: "usingMultilineEdit.11.png" + } + Frame { + msec: 11536 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11552 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11568 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11584 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11600 + hash: "3d08eff16edf54f522a75df1734150df" + } + Frame { + msec: 11616 + hash: "3d08eff16edf54f522a75df1734150df" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/qt-669.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/qt-669.qml index b5bb102..d7054ba 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/qt-669.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/qt-669.qml @@ -2,14 +2,13 @@ import QtQuick 1.0 Rectangle { Component { id: testableCursor - //Doesn't blink + //This shouldn't blink Rectangle { color:"black" width:1 } } - color: "green" - width:400; + width:300; height:40; TextEdit { focus: true; diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/usingMultilineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/usingMultilineEdit.qml index 4cf7e97..f03e1cc 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/usingMultilineEdit.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/usingMultilineEdit.qml @@ -1,13 +1,14 @@ import QtQuick 1.0 Rectangle{ - width: 600 - height: 200 + width: 280 + height: 140 Column{ MultilineEdit{ text: 'I am the very model of a modern major general. I\'ve information vegetable, animal and mineral. I know the kings of england and I quote the fights historical - from Marathon to Waterloo in order categorical.'; width: 182; height: 60; } + Rectangle{height: 20; width: 20;}//Spacer MultilineEdit{text: 'Hello world'} } } -- cgit v0.12 From 33f7a5d7f64dd0eed23a83f785f92466611dbc40 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Oct 2010 18:59:53 +1000 Subject: Clean up qmlvisual/qdeclarativetextinput visual tests Platform visuals and some cleanup after extended neglect Task-number: QTBUG-14792 --- .../qdeclarativetextinput/cursorDelegate.qml | 4 +- .../data-X11/cursorDelegate.0.png | Bin 0 -> 3153 bytes .../data-X11/cursorDelegate.1.png | Bin 0 -> 3622 bytes .../data-X11/cursorDelegate.2.png | Bin 0 -> 3163 bytes .../data-X11/cursorDelegate.3.png | Bin 0 -> 3145 bytes .../data-X11/cursorDelegate.4.png | Bin 0 -> 3143 bytes .../data-X11/cursorDelegate.qml | 1551 ++++++++++ .../qdeclarativetextinput/data-X11/echoMode.0.png | Bin 716 -> 570 bytes .../qdeclarativetextinput/data-X11/echoMode.1.png | Bin 1352 -> 1061 bytes .../qdeclarativetextinput/data-X11/echoMode.2.png | Bin 2047 -> 1661 bytes .../qdeclarativetextinput/data-X11/echoMode.3.png | Bin 2827 -> 0 bytes .../qdeclarativetextinput/data-X11/echoMode.4.png | Bin 2827 -> 0 bytes .../qdeclarativetextinput/data-X11/echoMode.qml | 376 +-- .../qdeclarativetextinput/data-X11/hAlign.0.png | Bin 1245 -> 0 bytes .../qdeclarativetextinput/data-X11/hAlign.qml | 50 +- .../data-X11/usingLineEdit.0.png | Bin 3137 -> 2659 bytes .../data-X11/usingLineEdit.1.png | Bin 3195 -> 2696 bytes .../data-X11/usingLineEdit.10.png | Bin 3853 -> 3331 bytes .../data-X11/usingLineEdit.2.png | Bin 3171 -> 2659 bytes .../data-X11/usingLineEdit.3.png | Bin 3228 -> 2682 bytes .../data-X11/usingLineEdit.4.png | Bin 3198 -> 2695 bytes .../data-X11/usingLineEdit.5.png | Bin 3310 -> 2825 bytes .../data-X11/usingLineEdit.6.png | Bin 3233 -> 2681 bytes .../data-X11/usingLineEdit.7.png | Bin 3607 -> 3111 bytes .../data-X11/usingLineEdit.8.png | Bin 3657 -> 3178 bytes .../data-X11/usingLineEdit.9.png | Bin 3262 -> 2806 bytes .../data-X11/usingLineEdit.qml | 1386 ++++----- .../data/cursorDelegate.0.png | Bin 3314 -> 0 bytes .../data/cursorDelegate.1.png | Bin 3377 -> 0 bytes .../data/cursorDelegate.2.png | Bin 3323 -> 0 bytes .../data/cursorDelegate.3.png | Bin 3325 -> 0 bytes .../data/cursorDelegate.4.png | Bin 3322 -> 0 bytes .../data/cursorDelegate.5.png | Bin 3322 -> 0 bytes .../data/cursorDelegate.6.png | Bin 3326 -> 0 bytes .../data/cursorDelegate.7.png | Bin 3814 -> 0 bytes .../data/cursorDelegate.8.png | Bin 3324 -> 0 bytes .../qdeclarativetextinput/data/cursorDelegate.qml | 2966 ++++---------------- .../qdeclarativetextinput/data/echoMode.0.png | Bin 999 -> 0 bytes .../qdeclarativetextinput/data/echoMode.1.png | Bin 1880 -> 0 bytes .../qdeclarativetextinput/data/echoMode.2.png | Bin 2962 -> 0 bytes .../qdeclarativetextinput/data/echoMode.3.png | Bin 2827 -> 0 bytes .../qdeclarativetextinput/data/echoMode.4.png | Bin 2827 -> 0 bytes .../qdeclarativetextinput/data/hAlign.0.png | Bin 1245 -> 0 bytes .../qmlvisual/qdeclarativetextinput/hAlign.qml | 1 + 44 files changed, 3029 insertions(+), 3305 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.5.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.6.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.7.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.8.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/hAlign.0.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/cursorDelegate.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/cursorDelegate.qml index 973462a..69dc32a 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/cursorDelegate.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/cursorDelegate.qml @@ -11,8 +11,8 @@ import QtQuick 1.0 Rectangle { id:bottom; color: "black"; width: 3; height: 1; x: -1; anchors.bottom: parent.bottom;} opacity: 1 SequentialAnimation on opacity { running: cPage.parent.focus == true; loops: Animation.Infinite; - NumberAnimation { properties: "opacity"; to: 1; duration: 500; easing.type: "InQuad"} - NumberAnimation { properties: "opacity"; to: 0; duration: 500; easing.type: "OutQuad"} + NumberAnimation { to: 1; duration: 500; easing.type: "InQuad"} + NumberAnimation { to: 0; duration: 500; easing.type: "OutQuad"} } } width: 1; diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.0.png new file mode 100644 index 0000000..5ab78c0 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.1.png new file mode 100644 index 0000000..3cd1c11 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.2.png new file mode 100644 index 0000000..c0e738e Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.3.png new file mode 100644 index 0000000..a373ded Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.4.png new file mode 100644 index 0000000..647984d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.qml new file mode 100644 index 0000000..6eb74ea --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/cursorDelegate.qml @@ -0,0 +1,1551 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 32 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 48 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 64 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 80 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 96 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 112 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 128 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 144 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 160 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 176 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 192 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 208 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 224 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 240 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 256 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 272 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 288 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 304 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 320 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 336 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 352 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 368 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 384 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 400 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 416 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 432 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Frame { + msec: 448 + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 464 + hash: "97eff9733db71f7c5d396969582c572b" + } + Frame { + msec: 480 + hash: "97eff9733db71f7c5d396969582c572b" + } + Frame { + msec: 496 + hash: "97eff9733db71f7c5d396969582c572b" + } + Frame { + msec: 512 + hash: "97eff9733db71f7c5d396969582c572b" + } + Frame { + msec: 528 + hash: "87902d32dba1439e71ce5f57f514748e" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "cad95931a38718eb481a9175fdfec305" + } + Frame { + msec: 560 + hash: "1dc99e5c7e4d2fa6b624b6df250b78fc" + } + Frame { + msec: 576 + hash: "5d5739beb039a83bebb2c41489166edf" + } + Frame { + msec: 592 + hash: "6320c9a1c0013f5aa6180992b934ca59" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 608 + hash: "9d9837c1f3779e5dab0dfeb1d11fdea1" + } + Frame { + msec: 624 + hash: "9d868112eaf70ce02ce93603278a565d" + } + Frame { + msec: 640 + hash: "d2bccb3184d3bb42b91017410a8655b6" + } + Frame { + msec: 656 + hash: "68f8be3e16637fd39a35f0cebb62b74a" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 672 + hash: "04f5781b57ed9fee32d5ef80dc33f4ff" + } + Frame { + msec: 688 + hash: "06cc2e24a848d441074de5ddff1c739a" + } + Frame { + msec: 704 + hash: "94526186deb7248ac9c747ede15b106d" + } + Frame { + msec: 720 + hash: "1ac130517df314f4f44b9bde2d3dcc53" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 736 + hash: "270ecf4900e94d60599ded230633aa02" + } + Frame { + msec: 752 + hash: "ef2093584cbce9182b99f297fcd2465d" + } + Frame { + msec: 768 + hash: "c445cf5f56213a712585934681d8af55" + } + Frame { + msec: 784 + hash: "9f0edb3871e015a549622e1b70d1b748" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 800 + hash: "144c51d7aa47ea8cc8d79a97efa4b430" + } + Frame { + msec: 816 + hash: "34f768a7c99dfb3c8f0e1fb1a08a37ac" + } + Frame { + msec: 832 + hash: "4f3970c4ad02b69f96c11610494e8a50" + } + Frame { + msec: 848 + hash: "815a1cf66f0c9eb47e244753eebb83ba" + } + Frame { + msec: 864 + hash: "5db11f795c000b382fdc30726a711c65" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 880 + hash: "67976ee172d0d55992c0e4734fbb7ccf" + } + Frame { + msec: 896 + hash: "c764e4d5317acbbf5118a08565e5d5fd" + } + Frame { + msec: 912 + hash: "a83f566d01b990e91f43bb63a58fb5b8" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 928 + hash: "031282f352e01f23bc5f73bf8ce82c9a" + } + Frame { + msec: 944 + hash: "1f3dc1d3ad0304376eac5d60d3c226ee" + } + Frame { + msec: 960 + image: "cursorDelegate.0.png" + } + Frame { + msec: 976 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 992 + hash: "7bae45481596788afde8866a3c97edd7" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1008 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 1024 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 1040 + hash: "7bae45481596788afde8866a3c97edd7" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1056 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 1072 + hash: "a2ad07326fafcb3012cdb869f39af466" + } + Frame { + msec: 1088 + hash: "8622eb25a6da44926b5161bce213a483" + } + Frame { + msec: 1104 + hash: "ccbd4d1e4865ebd9b0fe923e6ab05e5c" + } + Frame { + msec: 1120 + hash: "775cd79b012f79b773449a0ad8457149" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1136 + hash: "2a4ed061e512c5afd11072c4b707f707" + } + Frame { + msec: 1152 + hash: "c855df7b17811f25fd17e4fb108c02e1" + } + Frame { + msec: 1168 + hash: "46c37d8e67ece5cae4f766acf50f3ca3" + } + Frame { + msec: 1184 + hash: "95a70f14ce01aae61190080ed3d55c77" + } + Frame { + msec: 1200 + hash: "87da182d1285f3613bb2e4673e701757" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1216 + hash: "5b97f13f43e713a6fbe96bdca8969191" + } + Frame { + msec: 1232 + hash: "4d003182e7b7b0a05413b80f82a0fc41" + } + Frame { + msec: 1248 + hash: "dba09e038291a8dfdc61911d6b4b9bdf" + } + Frame { + msec: 1264 + hash: "a2ae1e5cc6cd72fae70804e07df5a8a1" + } + Frame { + msec: 1280 + hash: "f1c2a24b6f0ebcf98122e8db1cdcb66f" + } + Frame { + msec: 1296 + hash: "142dade1639655132435ae260b7935a0" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1312 + hash: "e80c0175d947bceef4bf53b60bf7eac0" + } + Key { + type: 6 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1328 + hash: "de912cd8bd2fe762ec6b1ec819732507" + } + Frame { + msec: 1344 + hash: "d3fa9dfab37ee26572d25bcbe8c66b72" + } + Frame { + msec: 1360 + hash: "33bdb2817a2858ce430813d0774f0172" + } + Frame { + msec: 1376 + hash: "4f10f0ffb6b1c87155eedd53af36c74f" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1392 + hash: "1b94be0de8412bd9380689895f290af7" + } + Frame { + msec: 1408 + hash: "48b3a5e2b04c86a75f4b6595eb2c1f55" + } + Frame { + msec: 1424 + hash: "d092fabd3dd51c718486e1e7dadaa0dc" + } + Frame { + msec: 1440 + hash: "243359437235563f1a60b8eaf63365b6" + } + Frame { + msec: 1456 + hash: "a986c8ed8ad2d8b6aab2a001906ba2ad" + } + Frame { + msec: 1472 + hash: "da5e06dc481e9cb7d9159a84d0cc150a" + } + Frame { + msec: 1488 + hash: "1d70a05fce3a05477e21d22b127ae96a" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1504 + hash: "913448213a07f6c8427c8e310d2026de" + } + Frame { + msec: 1520 + hash: "51bef5ae52977a935b66af4baf1da4e6" + } + Frame { + msec: 1536 + hash: "367bc25f868c23005d7fe903a9ea681b" + } + Frame { + msec: 1552 + hash: "3c25181652e788d128ed571ca4fea0b1" + } + Frame { + msec: 1568 + hash: "0218f939ff2b8c0bc22a537ed0f053f0" + } + Frame { + msec: 1584 + hash: "a3b765a823b2b3811273a1be90850533" + } + Frame { + msec: 1600 + hash: "2a42a29774eb4f962d299f8c2c213d55" + } + Frame { + msec: 1616 + hash: "1f0ad54d0fe8fc27cadbaaeaa37364e0" + } + Frame { + msec: 1632 + hash: "04d6028d1b1a1178e5bf774db8eef2c6" + } + Frame { + msec: 1648 + hash: "c325e46e89e8df04e2c3d8bf111c5f09" + } + Frame { + msec: 1664 + hash: "70e6223ce16a797e2c56e21ad74b188b" + } + Frame { + msec: 1680 + hash: "0fb8762fd28564b84b83c17d749a3645" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1696 + hash: "ef5d19b59792ea8822e2391fe0d91dbd" + } + Frame { + msec: 1712 + hash: "70ad15030164be8afbb4ab22d1ae5f5f" + } + Frame { + msec: 1728 + hash: "a5dfb8bd4b681e0d8d2c082821a2a976" + } + Frame { + msec: 1744 + hash: "864781fbb8673b1e603df015f2d88601" + } + Frame { + msec: 1760 + hash: "0bdb6a155cdd14f4dce9fde3c5116dde" + } + Frame { + msec: 1776 + hash: "5421f521a9bdccc8478fcee97e0dbc99" + } + Frame { + msec: 1792 + hash: "c5f29693dd017932767f37e2fb2f22f2" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1808 + hash: "b5e8abeaec33407e673f8021212528b1" + } + Frame { + msec: 1824 + hash: "917c968e5ee8f0b25fdb175719d7dbfa" + } + Frame { + msec: 1840 + hash: "56495c63676b9f73004e76e38d60567e" + } + Frame { + msec: 1856 + hash: "86f1ccdd7ff408c5b141d79797eea1fa" + } + Key { + type: 7 + key: 16777248 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1872 + hash: "9e9b32a9f71ab1aa4e87ddc323ccda03" + } + Key { + type: 6 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1888 + hash: "360aef37452ce8f045659c227285cb82" + } + Frame { + msec: 1904 + hash: "805949377c620fa4310aa4328eba1f23" + } + Frame { + msec: 1920 + image: "cursorDelegate.1.png" + } + Frame { + msec: 1936 + hash: "00df8110a2008ba77b7e0bf2130e5319" + } + Frame { + msec: 1952 + hash: "835f6f723577071461e41da1fd2e990a" + } + Frame { + msec: 1968 + hash: "6876cafa4d6d3a7d387602eba4d26db1" + } + Frame { + msec: 1984 + hash: "5570ae1e700cdf42ba516be69fbaadc0" + } + Frame { + msec: 2000 + hash: "5570ae1e700cdf42ba516be69fbaadc0" + } + Frame { + msec: 2016 + hash: "5570ae1e700cdf42ba516be69fbaadc0" + } + Frame { + msec: 2032 + hash: "5570ae1e700cdf42ba516be69fbaadc0" + } + Key { + type: 7 + key: 16777249 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2048 + hash: "5570ae1e700cdf42ba516be69fbaadc0" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2064 + hash: "6876cafa4d6d3a7d387602eba4d26db1" + } + Frame { + msec: 2080 + hash: "835f6f723577071461e41da1fd2e990a" + } + Frame { + msec: 2096 + hash: "00df8110a2008ba77b7e0bf2130e5319" + } + Frame { + msec: 2112 + hash: "627206a252bd6fcbf57d9f1cde0506bb" + } + Frame { + msec: 2128 + hash: "805949377c620fa4310aa4328eba1f23" + } + Frame { + msec: 2144 + hash: "360aef37452ce8f045659c227285cb82" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2160 + hash: "0ac33070e0c736bc0fb5ab12fa444b5c" + } + Frame { + msec: 2176 + hash: "520a544fd92f17a14380803e253b396f" + } + Frame { + msec: 2192 + hash: "4a080a5154c517e6bcf24b3a1f1d7f2c" + } + Frame { + msec: 2208 + hash: "e83642b0793f5a790efca65ccf20a720" + } + Frame { + msec: 2224 + hash: "8210b9cbf19f519ee34f4bb1a6afce16" + } + Frame { + msec: 2240 + hash: "54d04e64af5c0a3d29f2dc8c0977ed3a" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2256 + hash: "ae2a644f96bd7b2662ebcf4ebc33d930" + } + Frame { + msec: 2272 + hash: "718ac9cb5ef2992b06b34e957f987b7a" + } + Frame { + msec: 2288 + hash: "a2e1dea5e5f37697c7ce1a9419b94f65" + } + Frame { + msec: 2304 + hash: "c0eb56c72311263d892ce65331547531" + } + Frame { + msec: 2320 + hash: "585ad3efb7330de889b8cf56a51a0899" + } + Frame { + msec: 2336 + hash: "236e54ae31e5ee3d08a7bc9aeaef0d9b" + } + Frame { + msec: 2352 + hash: "d6218c8bb4da9d62bdb5d0cf5d7f8e37" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Key { + type: 6 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2368 + hash: "1dddd18a4ef66df9d9b431b2860e24d1" + } + Frame { + msec: 2384 + hash: "5b1b45e75f5a829b31c0b6eb0189da7c" + } + Frame { + msec: 2400 + hash: "062091bc7a5f3296c669614318b80fe7" + } + Frame { + msec: 2416 + hash: "836f37fe92a46233640e0bd2c0932fea" + } + Frame { + msec: 2432 + hash: "f14ec1544a380fc9993b39754c23c2f4" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2448 + hash: "2d549b5fea734e47682415df1717e6a6" + } + Frame { + msec: 2464 + hash: "824c5960260dd3ed7527709ebfb06d27" + } + Frame { + msec: 2480 + hash: "258f034fe1e71f25a92e667e05f53e82" + } + Frame { + msec: 2496 + hash: "c432e758e19c44d788cb38df6e4c6d69" + } + Frame { + msec: 2512 + hash: "a1856592208f9a00385b13c44e1c4503" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2528 + hash: "2b4d40a0555df0b86f52d13790185459" + } + Frame { + msec: 2544 + hash: "b153143e6b16c47fa06663dc6b1034d6" + } + Frame { + msec: 2560 + hash: "ac52236c5d73aeae7c0834df1e6bd84e" + } + Frame { + msec: 2576 + hash: "136eeb348b0b96edc9aaf9fbea741973" + } + Frame { + msec: 2592 + hash: "4f8a1dfa8906de2bcdfbf5c3b29fbf9b" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2608 + hash: "7dc9726df2d112b46f4d9dbe66d534c7" + } + Frame { + msec: 2624 + hash: "f64086ca0e83fa8bb0fae28065260fdc" + } + Frame { + msec: 2640 + hash: "5237dd2b79d71bbfa0a0d3963a7f42b7" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2656 + hash: "8dd435b577bb258979d33034885a8cd8" + } + Frame { + msec: 2672 + hash: "2609c066b8f102b4189991bf7d01eaad" + } + Frame { + msec: 2688 + hash: "986fab22391264d04df9a55b18aee645" + } + Frame { + msec: 2704 + hash: "0256423680aa0843fe8ec84f5e68fc9b" + } + Frame { + msec: 2720 + hash: "b822bdcad69aa868f48b2bbf2d62e297" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2736 + hash: "14effed70ca60233be9b2f6d0a1b5e6c" + } + Frame { + msec: 2752 + hash: "1abaf2c36a0fb9f04606c0e191d113cf" + } + Frame { + msec: 2768 + hash: "cffb8ca29b0369d183d6461bf9e63fdf" + } + Frame { + msec: 2784 + hash: "9378bebddb09036bec98ff7018dcf7c1" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2800 + hash: "0c3823994ee8f838c26040118ba62622" + } + Frame { + msec: 2816 + hash: "d374547f47adc81a18428c7a79cb9cf2" + } + Frame { + msec: 2832 + hash: "449c2996a2d0e74f2300adad619700bc" + } + Frame { + msec: 2848 + hash: "14379a320b6fc36de5d2a6776f1dc963" + } + Frame { + msec: 2864 + hash: "cb010a99ffa3b6df26c6cd263a21cfcd" + } + Frame { + msec: 2880 + image: "cursorDelegate.2.png" + } + Frame { + msec: 2896 + hash: "a445d23288d462009916e31f370a2068" + } + Frame { + msec: 2912 + hash: "8b3f2811300830e837797056f262bec2" + } + Frame { + msec: 2928 + hash: "2303a27e72334cae84b4fe51a62974ba" + } + Frame { + msec: 2944 + hash: "f3a9f3e74d2d83e38aee78cab7209bd6" + } + Frame { + msec: 2960 + hash: "ca4777127a535655f057af57cf3e8c7b" + } + Frame { + msec: 2976 + hash: "de2b65920fa9177a79019f33712c2275" + } + Frame { + msec: 2992 + hash: "de2b65920fa9177a79019f33712c2275" + } + Frame { + msec: 3008 + hash: "de2b65920fa9177a79019f33712c2275" + } + Frame { + msec: 3024 + hash: "de2b65920fa9177a79019f33712c2275" + } + Frame { + msec: 3040 + hash: "de2b65920fa9177a79019f33712c2275" + } + Frame { + msec: 3056 + hash: "de2b65920fa9177a79019f33712c2275" + } + Frame { + msec: 3072 + hash: "ca4777127a535655f057af57cf3e8c7b" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3088 + hash: "83cfb141f6b77fa062443a442a5b2e9e" + } + Frame { + msec: 3104 + hash: "b3e262864238d03f988c9750cc74e48f" + } + Frame { + msec: 3120 + hash: "6ed2086ae01be46f0684bbecc05484c4" + } + Frame { + msec: 3136 + hash: "91f6dad8f05577af6e4f5f0aceb06b4b" + } + Frame { + msec: 3152 + hash: "1bfb0c299c3c0db0518eaa54137c22b0" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3168 + hash: "37cc96ef4b760faadf76cc471f6ba49a" + } + Frame { + msec: 3184 + hash: "67c848bf93e845eaf5eebc9b8e57482c" + } + Frame { + msec: 3200 + hash: "e3906ad9b1dfbd1170364c11ff4b286f" + } + Frame { + msec: 3216 + hash: "24dd59673c5659e3bf6f52723e1bcd07" + } + Frame { + msec: 3232 + hash: "4b694f05f147bcf901a16807d4e3ec7c" + } + Frame { + msec: 3248 + hash: "9d9dbf34f6a67a49210caa249b8a1abb" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3264 + hash: "5381cde4763aa45c97793124e42db6f5" + } + Frame { + msec: 3280 + hash: "0f113c0263faa47428c4d16891ac4d4f" + } + Frame { + msec: 3296 + hash: "cc1767ec13803959333cd35bfb2d9119" + } + Frame { + msec: 3312 + hash: "ec1b4c71f9bd63ccf6d766b0b2f68b30" + } + Frame { + msec: 3328 + hash: "114ad78597ede2afc4dd8bafa1d4df21" + } + Frame { + msec: 3344 + hash: "d08dc22ddc707316483f09b796ea0380" + } + Frame { + msec: 3360 + hash: "135b2b0f4e469b207e673d1e7086cd4f" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3376 + hash: "4267354fe0d24597bdb5ee1a6e9affbb" + } + Frame { + msec: 3392 + hash: "700bd56ecea646bbec2017007bbb5b84" + } + Frame { + msec: 3408 + hash: "874a65c2069f4ba89301c129f884f217" + } + Frame { + msec: 3424 + hash: "b5ec22f95abb43c83533f7dc606667f6" + } + Frame { + msec: 3440 + hash: "445de6663e80d1fe1527ec5acf4ec1de" + } + Frame { + msec: 3456 + hash: "87c129a5bf08536d3fca90375283e26b" + } + Frame { + msec: 3472 + hash: "a63e2438a9cd412c2b119cd42b11009f" + } + Frame { + msec: 3488 + hash: "61a3475bef5fd276b836cf3483526f57" + } + Frame { + msec: 3504 + hash: "097ab9a1a1fe9743f162f57b93599fe7" + } + Key { + type: 7 + key: 16777249 + modifiers: 100663296 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3520 + hash: "ebae1fb540c6ff6b0bc9a951391e2e94" + } + Frame { + msec: 3536 + hash: "ffc2da2e4c091eadaa9746b42b56d9e4" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3552 + hash: "f243d823fc9977e69a008010d8db8a01" + } + Frame { + msec: 3568 + hash: "592ac5bbf1c4b3a360be4d76c40a2be2" + } + Frame { + msec: 3584 + hash: "bd5b206097f30dfce884a8c74856857d" + } + Frame { + msec: 3600 + hash: "f14ec1544a380fc9993b39754c23c2f4" + } + Frame { + msec: 3616 + hash: "836f37fe92a46233640e0bd2c0932fea" + } + Frame { + msec: 3632 + hash: "062091bc7a5f3296c669614318b80fe7" + } + Frame { + msec: 3648 + hash: "5b1b45e75f5a829b31c0b6eb0189da7c" + } + Frame { + msec: 3664 + hash: "1dddd18a4ef66df9d9b431b2860e24d1" + } + Frame { + msec: 3680 + hash: "d6218c8bb4da9d62bdb5d0cf5d7f8e37" + } + Frame { + msec: 3696 + hash: "236e54ae31e5ee3d08a7bc9aeaef0d9b" + } + Frame { + msec: 3712 + hash: "585ad3efb7330de889b8cf56a51a0899" + } + Frame { + msec: 3728 + hash: "c0eb56c72311263d892ce65331547531" + } + Frame { + msec: 3744 + hash: "a2e1dea5e5f37697c7ce1a9419b94f65" + } + Frame { + msec: 3760 + hash: "718ac9cb5ef2992b06b34e957f987b7a" + } + Frame { + msec: 3776 + hash: "ae2a644f96bd7b2662ebcf4ebc33d930" + } + Frame { + msec: 3792 + hash: "54d04e64af5c0a3d29f2dc8c0977ed3a" + } + Frame { + msec: 3808 + hash: "8210b9cbf19f519ee34f4bb1a6afce16" + } + Frame { + msec: 3824 + hash: "e83642b0793f5a790efca65ccf20a720" + } + Frame { + msec: 3840 + image: "cursorDelegate.3.png" + } + Frame { + msec: 3856 + hash: "520a544fd92f17a14380803e253b396f" + } + Frame { + msec: 3872 + hash: "0ac33070e0c736bc0fb5ab12fa444b5c" + } + Frame { + msec: 3888 + hash: "5ee8c9dc7b238db131b3a078e46a8bbd" + } + Frame { + msec: 3904 + hash: "69720bcca91f99f229aebc74c5e74261" + } + Frame { + msec: 3920 + hash: "41d8f4031223f7c833d50208e231964a" + } + Frame { + msec: 3936 + hash: "6fa8fd3252f367f3fafea4e3c7317a48" + } + Frame { + msec: 3952 + hash: "8a1b63c42867f87a1cf4b47944b3860a" + } + Frame { + msec: 3968 + hash: "8c6052eb4cf03d7742a73874d9f15285" + } + Frame { + msec: 3984 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4000 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4016 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4032 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4048 + hash: "7bae45481596788afde8866a3c97edd7" + } + Frame { + msec: 4064 + hash: "8c6052eb4cf03d7742a73874d9f15285" + } + Frame { + msec: 4080 + hash: "8a1b63c42867f87a1cf4b47944b3860a" + } + Frame { + msec: 4096 + hash: "6fa8fd3252f367f3fafea4e3c7317a48" + } + Frame { + msec: 4112 + hash: "41d8f4031223f7c833d50208e231964a" + } + Frame { + msec: 4128 + hash: "69720bcca91f99f229aebc74c5e74261" + } + Frame { + msec: 4144 + hash: "5ee8c9dc7b238db131b3a078e46a8bbd" + } + Frame { + msec: 4160 + hash: "0ac33070e0c736bc0fb5ab12fa444b5c" + } + Frame { + msec: 4176 + hash: "520a544fd92f17a14380803e253b396f" + } + Frame { + msec: 4192 + hash: "4a080a5154c517e6bcf24b3a1f1d7f2c" + } + Frame { + msec: 4208 + hash: "e83642b0793f5a790efca65ccf20a720" + } + Frame { + msec: 4224 + hash: "8210b9cbf19f519ee34f4bb1a6afce16" + } + Frame { + msec: 4240 + hash: "54d04e64af5c0a3d29f2dc8c0977ed3a" + } + Frame { + msec: 4256 + hash: "ae2a644f96bd7b2662ebcf4ebc33d930" + } + Frame { + msec: 4272 + hash: "718ac9cb5ef2992b06b34e957f987b7a" + } + Frame { + msec: 4288 + hash: "a2e1dea5e5f37697c7ce1a9419b94f65" + } + Frame { + msec: 4304 + hash: "c0eb56c72311263d892ce65331547531" + } + Frame { + msec: 4320 + hash: "585ad3efb7330de889b8cf56a51a0899" + } + Frame { + msec: 4336 + hash: "236e54ae31e5ee3d08a7bc9aeaef0d9b" + } + Frame { + msec: 4352 + hash: "d6218c8bb4da9d62bdb5d0cf5d7f8e37" + } + Frame { + msec: 4368 + hash: "1dddd18a4ef66df9d9b431b2860e24d1" + } + Frame { + msec: 4384 + hash: "5b1b45e75f5a829b31c0b6eb0189da7c" + } + Frame { + msec: 4400 + hash: "062091bc7a5f3296c669614318b80fe7" + } + Frame { + msec: 4416 + hash: "836f37fe92a46233640e0bd2c0932fea" + } + Frame { + msec: 4432 + hash: "f14ec1544a380fc9993b39754c23c2f4" + } + Frame { + msec: 4448 + hash: "bd5b206097f30dfce884a8c74856857d" + } + Frame { + msec: 4464 + hash: "592ac5bbf1c4b3a360be4d76c40a2be2" + } + Frame { + msec: 4480 + hash: "f243d823fc9977e69a008010d8db8a01" + } + Frame { + msec: 4496 + hash: "ffc2da2e4c091eadaa9746b42b56d9e4" + } + Frame { + msec: 4512 + hash: "ebae1fb540c6ff6b0bc9a951391e2e94" + } + Frame { + msec: 4528 + hash: "097ab9a1a1fe9743f162f57b93599fe7" + } + Frame { + msec: 4544 + hash: "61a3475bef5fd276b836cf3483526f57" + } + Frame { + msec: 4560 + hash: "a63e2438a9cd412c2b119cd42b11009f" + } + Frame { + msec: 4576 + hash: "87c129a5bf08536d3fca90375283e26b" + } + Frame { + msec: 4592 + hash: "445de6663e80d1fe1527ec5acf4ec1de" + } + Frame { + msec: 4608 + hash: "b5ec22f95abb43c83533f7dc606667f6" + } + Frame { + msec: 4624 + hash: "874a65c2069f4ba89301c129f884f217" + } + Frame { + msec: 4640 + hash: "700bd56ecea646bbec2017007bbb5b84" + } + Frame { + msec: 4656 + hash: "4267354fe0d24597bdb5ee1a6e9affbb" + } + Frame { + msec: 4672 + hash: "135b2b0f4e469b207e673d1e7086cd4f" + } + Frame { + msec: 4688 + hash: "d08dc22ddc707316483f09b796ea0380" + } + Frame { + msec: 4704 + hash: "114ad78597ede2afc4dd8bafa1d4df21" + } + Frame { + msec: 4720 + hash: "ec1b4c71f9bd63ccf6d766b0b2f68b30" + } + Frame { + msec: 4736 + hash: "cc1767ec13803959333cd35bfb2d9119" + } + Frame { + msec: 4752 + hash: "0f113c0263faa47428c4d16891ac4d4f" + } + Frame { + msec: 4768 + hash: "5381cde4763aa45c97793124e42db6f5" + } + Frame { + msec: 4784 + hash: "99940d6744ac1245f82d62f08c371285" + } + Frame { + msec: 4800 + image: "cursorDelegate.4.png" + } + Frame { + msec: 4816 + hash: "77bbed46c7eb023252cdd80d0a15f38a" + } + Frame { + msec: 4832 + hash: "36ee4da72825e96d5f670c94865a30d8" + } + Frame { + msec: 4848 + hash: "c64d56c1b7df0a5c63ab8ff08ae6daf9" + } + Frame { + msec: 4864 + hash: "942e038a3426fa318212a8f245141225" + } + Frame { + msec: 4880 + hash: "c033ebaee12dd8fe953e91160f986c3d" + } + Frame { + msec: 4896 + hash: "07e64024cf7eda082297f6f83dba8067" + } + Frame { + msec: 4912 + hash: "b33cd5bbb90d435dd7ea3ab67bef88ee" + } + Frame { + msec: 4928 + hash: "90712efd7c17b0ad33d2c2c02e9eaa97" + } + Frame { + msec: 4944 + hash: "7e2e55555ee2c7e172e61ddb6365355d" + } + Frame { + msec: 4960 + hash: "87ca0584879b25336a1023ac3252fc9a" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png index f30ee4f..e7e4ad8 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png index 7ae3b94..07a19e2 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png index 636afe8..075c4d5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png deleted file mode 100644 index aa24805..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.4.png deleted file mode 100644 index aa24805..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml index b5a4837..31d3592 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/echoMode.qml @@ -6,11 +6,11 @@ VisualTest { } Frame { msec: 16 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 32 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Key { type: 6 @@ -22,83 +22,83 @@ VisualTest { } Frame { msec: 48 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 64 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 80 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 96 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 112 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 128 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 144 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 160 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 176 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 192 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 208 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 224 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 240 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 256 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 272 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 288 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 304 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 320 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 336 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Frame { msec: 352 - hash: "48400809c3862dae64b0cd00d51057a4" + hash: "eff6a4491bc00e5570ea73a1371f63fc" } Key { type: 6 @@ -110,23 +110,23 @@ VisualTest { } Frame { msec: 368 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 384 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 400 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 416 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 432 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Key { type: 7 @@ -138,27 +138,27 @@ VisualTest { } Frame { msec: 448 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 464 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 480 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 496 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 512 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "86f9d315291a08f35f1c431ae802ada2" } Frame { msec: 528 - hash: "4acf112eda369b7eb351e0e522cefa05" + hash: "48b0300c8109a227176bd90e6b8ca682" } Key { type: 7 @@ -170,43 +170,43 @@ VisualTest { } Frame { msec: 544 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 560 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 576 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 592 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 608 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 624 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 640 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 656 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 672 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Frame { msec: 688 - hash: "238dc96885dadb763bfc1500d8b7c5b2" + hash: "48b0300c8109a227176bd90e6b8ca682" } Key { type: 6 @@ -218,23 +218,23 @@ VisualTest { } Frame { msec: 704 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Frame { msec: 720 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Frame { msec: 736 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Frame { msec: 752 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Frame { msec: 768 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Key { type: 7 @@ -246,23 +246,23 @@ VisualTest { } Frame { msec: 784 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Frame { msec: 800 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Frame { msec: 816 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Frame { msec: 832 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Frame { msec: 848 - hash: "2da540e72d88932b61a261d791fc34b0" + hash: "7de871fbd0f87da5c31216863f6eb0ba" } Key { type: 6 @@ -274,15 +274,15 @@ VisualTest { } Frame { msec: 864 - hash: "25ade09747f07a9bdd07f5885a72dc55" + hash: "2fa1f1853e1ebf127fcb42ba072bc66f" } Frame { msec: 880 - hash: "25ade09747f07a9bdd07f5885a72dc55" + hash: "2fa1f1853e1ebf127fcb42ba072bc66f" } Frame { msec: 896 - hash: "25ade09747f07a9bdd07f5885a72dc55" + hash: "2fa1f1853e1ebf127fcb42ba072bc66f" } Key { type: 7 @@ -294,15 +294,15 @@ VisualTest { } Frame { msec: 912 - hash: "25ade09747f07a9bdd07f5885a72dc55" + hash: "2fa1f1853e1ebf127fcb42ba072bc66f" } Frame { msec: 928 - hash: "25ade09747f07a9bdd07f5885a72dc55" + hash: "2fa1f1853e1ebf127fcb42ba072bc66f" } Frame { msec: 944 - hash: "25ade09747f07a9bdd07f5885a72dc55" + hash: "2fa1f1853e1ebf127fcb42ba072bc66f" } Frame { msec: 960 @@ -310,7 +310,7 @@ VisualTest { } Frame { msec: 976 - hash: "25ade09747f07a9bdd07f5885a72dc55" + hash: "2fa1f1853e1ebf127fcb42ba072bc66f" } Key { type: 6 @@ -322,19 +322,19 @@ VisualTest { } Frame { msec: 992 - hash: "0a60e76e96846f9f4e909f7a01ede377" + hash: "7bd52cf50949b283ec40b82cf457841a" } Frame { msec: 1008 - hash: "0a60e76e96846f9f4e909f7a01ede377" + hash: "7bd52cf50949b283ec40b82cf457841a" } Frame { msec: 1024 - hash: "0a60e76e96846f9f4e909f7a01ede377" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1040 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Key { type: 7 @@ -346,51 +346,51 @@ VisualTest { } Frame { msec: 1056 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1072 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1088 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1104 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1120 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1136 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1152 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1168 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1184 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1200 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1216 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Frame { msec: 1232 - hash: "6f28f435e552cbbf6376f2443ed3843c" + hash: "16069bd86f3b8a896087a455e76f1059" } Key { type: 6 @@ -402,15 +402,15 @@ VisualTest { } Frame { msec: 1248 - hash: "16a353e711a8fb654b5fe3097ba29296" + hash: "fd2dfea0c188c624ad6eec189d677d8e" } Frame { msec: 1264 - hash: "16a353e711a8fb654b5fe3097ba29296" + hash: "fd2dfea0c188c624ad6eec189d677d8e" } Frame { msec: 1280 - hash: "16a353e711a8fb654b5fe3097ba29296" + hash: "fd2dfea0c188c624ad6eec189d677d8e" } Key { type: 7 @@ -422,15 +422,15 @@ VisualTest { } Frame { msec: 1296 - hash: "16a353e711a8fb654b5fe3097ba29296" + hash: "fd2dfea0c188c624ad6eec189d677d8e" } Frame { msec: 1312 - hash: "16a353e711a8fb654b5fe3097ba29296" + hash: "fd2dfea0c188c624ad6eec189d677d8e" } Frame { msec: 1328 - hash: "16a353e711a8fb654b5fe3097ba29296" + hash: "fd2dfea0c188c624ad6eec189d677d8e" } Key { type: 6 @@ -442,39 +442,39 @@ VisualTest { } Frame { msec: 1344 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Frame { msec: 1360 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Frame { msec: 1376 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Frame { msec: 1392 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Frame { msec: 1408 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Frame { msec: 1424 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Frame { msec: 1440 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Frame { msec: 1456 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Frame { msec: 1472 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Key { type: 7 @@ -486,7 +486,7 @@ VisualTest { } Frame { msec: 1488 - hash: "fcdbf8ef17e1a7aa6e0e1d952b25d47d" + hash: "8c3642f420ecc94e77cbaee8b218bddb" } Key { type: 6 @@ -498,19 +498,19 @@ VisualTest { } Frame { msec: 1504 - hash: "fe0e4e097f655e0b330ed6fcfce669c2" + hash: "80685804ddaefa46508a3cbe4cd16f59" } Frame { msec: 1520 - hash: "fe0e4e097f655e0b330ed6fcfce669c2" + hash: "7b294a04afc0567d321a28930bc43600" } Frame { msec: 1536 - hash: "522f11cbb8da0cca25af91d3f6d5240b" + hash: "7b294a04afc0567d321a28930bc43600" } Frame { msec: 1552 - hash: "522f11cbb8da0cca25af91d3f6d5240b" + hash: "7b294a04afc0567d321a28930bc43600" } Key { type: 7 @@ -522,27 +522,27 @@ VisualTest { } Frame { msec: 1568 - hash: "522f11cbb8da0cca25af91d3f6d5240b" + hash: "7b294a04afc0567d321a28930bc43600" } Frame { msec: 1584 - hash: "522f11cbb8da0cca25af91d3f6d5240b" + hash: "7b294a04afc0567d321a28930bc43600" } Frame { msec: 1600 - hash: "522f11cbb8da0cca25af91d3f6d5240b" + hash: "7b294a04afc0567d321a28930bc43600" } Frame { msec: 1616 - hash: "522f11cbb8da0cca25af91d3f6d5240b" + hash: "7b294a04afc0567d321a28930bc43600" } Frame { msec: 1632 - hash: "522f11cbb8da0cca25af91d3f6d5240b" + hash: "7b294a04afc0567d321a28930bc43600" } Frame { msec: 1648 - hash: "522f11cbb8da0cca25af91d3f6d5240b" + hash: "7b294a04afc0567d321a28930bc43600" } Key { type: 6 @@ -554,23 +554,23 @@ VisualTest { } Frame { msec: 1664 - hash: "f459ca172e643d6e22c38067f8ced305" + hash: "00095464e3f162c2a825f7fdae21ab6f" } Frame { msec: 1680 - hash: "f459ca172e643d6e22c38067f8ced305" + hash: "00095464e3f162c2a825f7fdae21ab6f" } Frame { msec: 1696 - hash: "f459ca172e643d6e22c38067f8ced305" + hash: "00095464e3f162c2a825f7fdae21ab6f" } Frame { msec: 1712 - hash: "f459ca172e643d6e22c38067f8ced305" + hash: "00095464e3f162c2a825f7fdae21ab6f" } Frame { msec: 1728 - hash: "f459ca172e643d6e22c38067f8ced305" + hash: "00095464e3f162c2a825f7fdae21ab6f" } Key { type: 6 @@ -582,7 +582,7 @@ VisualTest { } Frame { msec: 1744 - hash: "0016ecff508885d3a199b27baa9b7ecf" + hash: "c25d79796963ca42789725c6621bce01" } Key { type: 7 @@ -594,15 +594,15 @@ VisualTest { } Frame { msec: 1760 - hash: "0016ecff508885d3a199b27baa9b7ecf" + hash: "c25d79796963ca42789725c6621bce01" } Frame { msec: 1776 - hash: "0016ecff508885d3a199b27baa9b7ecf" + hash: "c25d79796963ca42789725c6621bce01" } Frame { msec: 1792 - hash: "0016ecff508885d3a199b27baa9b7ecf" + hash: "c25d79796963ca42789725c6621bce01" } Key { type: 7 @@ -614,19 +614,19 @@ VisualTest { } Frame { msec: 1808 - hash: "0016ecff508885d3a199b27baa9b7ecf" + hash: "c25d79796963ca42789725c6621bce01" } Frame { msec: 1824 - hash: "0016ecff508885d3a199b27baa9b7ecf" + hash: "c25d79796963ca42789725c6621bce01" } Frame { msec: 1840 - hash: "0016ecff508885d3a199b27baa9b7ecf" + hash: "c25d79796963ca42789725c6621bce01" } Frame { msec: 1856 - hash: "0016ecff508885d3a199b27baa9b7ecf" + hash: "c25d79796963ca42789725c6621bce01" } Key { type: 6 @@ -638,15 +638,15 @@ VisualTest { } Frame { msec: 1872 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "e876aa2aaa6ae2c3a5f048771858c21b" } Frame { msec: 1888 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "e876aa2aaa6ae2c3a5f048771858c21b" } Frame { msec: 1904 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "e876aa2aaa6ae2c3a5f048771858c21b" } Frame { msec: 1920 @@ -662,27 +662,27 @@ VisualTest { } Frame { msec: 1936 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "e876aa2aaa6ae2c3a5f048771858c21b" } Frame { msec: 1952 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "e876aa2aaa6ae2c3a5f048771858c21b" } Frame { msec: 1968 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "e876aa2aaa6ae2c3a5f048771858c21b" } Frame { msec: 1984 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "e876aa2aaa6ae2c3a5f048771858c21b" } Frame { msec: 2000 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "e876aa2aaa6ae2c3a5f048771858c21b" } Frame { msec: 2016 - hash: "05c631afb9df51c23b1f714a7de92788" + hash: "deab81e7fcc4ecc31d02fccc52a4cc17" } Key { type: 6 @@ -694,11 +694,11 @@ VisualTest { } Frame { msec: 2032 - hash: "95ad72a49b991225e2ed5ae9c2a7b4e5" + hash: "f87d1f15df169e08cdd3dff50d596492" } Frame { msec: 2048 - hash: "95ad72a49b991225e2ed5ae9c2a7b4e5" + hash: "f87d1f15df169e08cdd3dff50d596492" } Key { type: 7 @@ -710,11 +710,11 @@ VisualTest { } Frame { msec: 2064 - hash: "95ad72a49b991225e2ed5ae9c2a7b4e5" + hash: "f87d1f15df169e08cdd3dff50d596492" } Frame { msec: 2080 - hash: "95ad72a49b991225e2ed5ae9c2a7b4e5" + hash: "f87d1f15df169e08cdd3dff50d596492" } Key { type: 6 @@ -726,19 +726,19 @@ VisualTest { } Frame { msec: 2096 - hash: "7f2366b163c110a50259936c150d8287" + hash: "a50ab62d526aef826ad883f712a22325" } Frame { msec: 2112 - hash: "7f2366b163c110a50259936c150d8287" + hash: "a50ab62d526aef826ad883f712a22325" } Frame { msec: 2128 - hash: "7f2366b163c110a50259936c150d8287" + hash: "a50ab62d526aef826ad883f712a22325" } Frame { msec: 2144 - hash: "7f2366b163c110a50259936c150d8287" + hash: "a50ab62d526aef826ad883f712a22325" } Key { type: 6 @@ -758,19 +758,19 @@ VisualTest { } Frame { msec: 2160 - hash: "b5110b1a7aa74f7b4ed72f573f10b1fe" + hash: "f0c34703a0b5a0631654482fbc785b57" } Frame { msec: 2176 - hash: "b5110b1a7aa74f7b4ed72f573f10b1fe" + hash: "f0c34703a0b5a0631654482fbc785b57" } Frame { msec: 2192 - hash: "b5110b1a7aa74f7b4ed72f573f10b1fe" + hash: "f0c34703a0b5a0631654482fbc785b57" } Frame { msec: 2208 - hash: "b5110b1a7aa74f7b4ed72f573f10b1fe" + hash: "f0c34703a0b5a0631654482fbc785b57" } Key { type: 6 @@ -782,7 +782,7 @@ VisualTest { } Frame { msec: 2224 - hash: "30cdfb276e7a234c72d89a03e6a10dc5" + hash: "0921766e0d224b70d2c3f9f282c51143" } Key { type: 7 @@ -794,23 +794,23 @@ VisualTest { } Frame { msec: 2240 - hash: "30cdfb276e7a234c72d89a03e6a10dc5" + hash: "0921766e0d224b70d2c3f9f282c51143" } Frame { msec: 2256 - hash: "30cdfb276e7a234c72d89a03e6a10dc5" + hash: "0921766e0d224b70d2c3f9f282c51143" } Frame { msec: 2272 - hash: "30cdfb276e7a234c72d89a03e6a10dc5" + hash: "0921766e0d224b70d2c3f9f282c51143" } Frame { msec: 2288 - hash: "30cdfb276e7a234c72d89a03e6a10dc5" + hash: "0921766e0d224b70d2c3f9f282c51143" } Frame { msec: 2304 - hash: "30cdfb276e7a234c72d89a03e6a10dc5" + hash: "0921766e0d224b70d2c3f9f282c51143" } Key { type: 7 @@ -822,11 +822,11 @@ VisualTest { } Frame { msec: 2320 - hash: "30cdfb276e7a234c72d89a03e6a10dc5" + hash: "0921766e0d224b70d2c3f9f282c51143" } Frame { msec: 2336 - hash: "30cdfb276e7a234c72d89a03e6a10dc5" + hash: "0921766e0d224b70d2c3f9f282c51143" } Key { type: 6 @@ -838,27 +838,27 @@ VisualTest { } Frame { msec: 2352 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Frame { msec: 2368 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Frame { msec: 2384 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Frame { msec: 2400 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Frame { msec: 2416 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Frame { msec: 2432 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Key { type: 7 @@ -870,19 +870,19 @@ VisualTest { } Frame { msec: 2448 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Frame { msec: 2464 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Frame { msec: 2480 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Frame { msec: 2496 - hash: "c0f7406f3718ab0120c79ff119d6986c" + hash: "91b44cdde36433cac6644c476e34d4f9" } Key { type: 6 @@ -894,15 +894,15 @@ VisualTest { } Frame { msec: 2512 - hash: "870d7866b8e289b4843b62c856d769d4" + hash: "34d00f787b814ad82c025c77d6be51a2" } Frame { msec: 2528 - hash: "870d7866b8e289b4843b62c856d769d4" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2544 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Key { type: 7 @@ -914,83 +914,83 @@ VisualTest { } Frame { msec: 2560 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2576 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2592 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2608 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2624 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2640 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2656 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2672 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2688 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2704 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2720 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2736 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2752 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2768 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2784 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2800 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2816 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2832 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2848 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2864 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2880 @@ -998,46 +998,46 @@ VisualTest { } Frame { msec: 2896 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2912 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2928 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2944 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2960 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2976 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 2992 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 3008 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "73ebe3eec273bac501d56451c0c0a828" } Frame { msec: 3024 - hash: "84e1cbf26e6b571603e0b9e69579af8b" + hash: "34d00f787b814ad82c025c77d6be51a2" } Frame { msec: 3040 - hash: "870d7866b8e289b4843b62c856d769d4" + hash: "34d00f787b814ad82c025c77d6be51a2" } Frame { msec: 3056 - hash: "870d7866b8e289b4843b62c856d769d4" + hash: "34d00f787b814ad82c025c77d6be51a2" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png deleted file mode 100644 index 87c2e07..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml index a0351e8..32330f4 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/hAlign.qml @@ -6,102 +6,102 @@ VisualTest { } Frame { msec: 16 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 32 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 48 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 64 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 80 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 96 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 112 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 128 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 144 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 160 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 176 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 192 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 208 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 224 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 240 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 256 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 272 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 288 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 304 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 320 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 336 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 352 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 368 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 384 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } Frame { msec: 400 - hash: "7619ed68aca3544f373777e11a4bfefa" + hash: "09298802dfc053e2bb1b3bb2192ca5b2" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.0.png index b064e79..313fcc2 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.1.png index 7dd1bd8..81798cc 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.10.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.10.png index d8e55e2..3e37ebb 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.10.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.10.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.2.png index f9f1744..313fcc2 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.3.png index 70ae713..dc3abe6 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.4.png index 9ce28db..62b464a 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.5.png index 2ef2ac0..ee26c35 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.6.png index 2a614f8..2ea9142 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.7.png index f916c97..fb0be3c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.8.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.8.png index 56bf00b..0122645 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.8.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.9.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.9.png index 97847d9..24da450 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.9.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.qml index cdc5153..f014a30 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-X11/usingLineEdit.qml @@ -6,235 +6,235 @@ VisualTest { } Frame { msec: 16 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 32 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 48 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 64 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 80 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 96 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 112 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 128 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 144 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 160 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 176 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 192 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 208 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 224 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 240 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 256 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 272 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 288 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 304 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 320 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 336 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 352 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 368 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 384 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 400 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 416 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 432 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 448 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 464 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 480 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 496 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 512 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 528 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 544 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 560 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 576 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 592 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 608 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 624 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 640 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 656 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 672 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 688 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 704 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 720 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 736 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 752 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 768 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 784 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 800 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 816 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 832 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 848 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 864 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 880 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 896 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 912 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Frame { msec: 928 - hash: "a6d33b1212bb4d1241734bfff167d1a5" + hash: "9d5b9f785409527b8f315fef560a4688" } Mouse { type: 2 @@ -246,7 +246,7 @@ VisualTest { } Frame { msec: 944 - hash: "c83faf1ed7b59715046e1abef04fa546" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Mouse { type: 3 @@ -270,27 +270,27 @@ VisualTest { } Frame { msec: 976 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 992 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1008 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1024 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1040 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1056 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Mouse { type: 3 @@ -302,79 +302,79 @@ VisualTest { } Frame { msec: 1072 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1088 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1104 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1120 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1136 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1152 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1168 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1184 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1200 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1216 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1232 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1248 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1264 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1280 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1296 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1312 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1328 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1344 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1360 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Key { type: 6 @@ -386,139 +386,139 @@ VisualTest { } Frame { msec: 1376 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1392 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1408 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1424 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1440 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1456 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1472 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1488 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1504 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1520 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1536 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1552 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1568 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1584 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1600 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1616 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1632 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1648 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1664 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1680 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1696 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1712 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1728 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1744 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1760 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1776 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1792 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1808 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1824 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1840 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1856 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1872 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1888 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1904 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1920 @@ -526,19 +526,19 @@ VisualTest { } Frame { msec: 1936 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1952 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1968 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 1984 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Key { type: 6 @@ -550,35 +550,35 @@ VisualTest { } Frame { msec: 2000 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2016 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2032 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2048 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2064 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2080 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2096 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2112 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Key { type: 7 @@ -598,95 +598,95 @@ VisualTest { } Frame { msec: 2128 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2144 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2160 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2176 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2192 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2208 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2224 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2240 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2256 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2272 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2288 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2304 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2320 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2336 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2352 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2368 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2384 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2400 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2416 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2432 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2448 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2464 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Frame { msec: 2480 - hash: "3b899cd28b58c3f94946286a0ddcab89" + hash: "957c85bfa6586d5d92aa3689c178944f" } Key { type: 6 @@ -698,27 +698,27 @@ VisualTest { } Frame { msec: 2496 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2512 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2528 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2544 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2560 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2576 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Key { type: 7 @@ -730,55 +730,55 @@ VisualTest { } Frame { msec: 2592 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2608 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2624 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2640 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2656 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2672 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2688 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2704 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2720 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2736 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2752 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2768 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2784 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Key { type: 6 @@ -790,23 +790,23 @@ VisualTest { } Frame { msec: 2800 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2816 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2832 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2848 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2864 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2880 @@ -814,87 +814,87 @@ VisualTest { } Frame { msec: 2896 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2912 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2928 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2944 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2960 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2976 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 2992 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3008 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3024 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3040 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3056 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3072 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3088 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3104 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3120 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3136 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3152 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3168 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3184 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3200 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Frame { msec: 3216 - hash: "f2a573f227a3eb84f60418d0f3e81fb3" + hash: "ebd6e6bbd0edaffed688dd5fa2328393" } Key { type: 6 @@ -906,31 +906,31 @@ VisualTest { } Frame { msec: 3232 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3248 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3264 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3280 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3296 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3312 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3328 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Key { type: 7 @@ -942,59 +942,59 @@ VisualTest { } Frame { msec: 3344 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3360 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3376 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3392 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3408 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3424 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3440 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3456 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3472 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3488 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3504 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3520 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3536 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Frame { msec: 3552 - hash: "202ad01bacfb48341efdd85197df6964" + hash: "923335b8fdb038fe10c8c557845c2ae1" } Key { type: 6 @@ -1006,35 +1006,35 @@ VisualTest { } Frame { msec: 3568 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3584 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3600 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3616 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3632 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3648 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3664 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3680 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Key { type: 7 @@ -1046,39 +1046,39 @@ VisualTest { } Frame { msec: 3696 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3712 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3728 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3744 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3760 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3776 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3792 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3808 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3824 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3840 @@ -1086,91 +1086,91 @@ VisualTest { } Frame { msec: 3856 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3872 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3888 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3904 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3920 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3936 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3952 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3968 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 3984 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4000 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4016 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4032 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4048 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4064 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4080 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4096 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4112 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4128 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4144 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4160 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4176 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4192 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Key { type: 7 @@ -1182,131 +1182,131 @@ VisualTest { } Frame { msec: 4208 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4224 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4240 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4256 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4272 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4288 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4304 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4320 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4336 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4352 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4368 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4384 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4400 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4416 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4432 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4448 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4464 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4480 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4496 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4512 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4528 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4544 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4560 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4576 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4592 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4608 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4624 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4640 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4656 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4672 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4688 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Frame { msec: 4704 - hash: "eac37a53473ad7f378a2a1bb37fa6b58" + hash: "3e9cbf56be37f593e907759285ddebdb" } Mouse { type: 2 @@ -1318,23 +1318,23 @@ VisualTest { } Frame { msec: 4720 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4736 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4752 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4768 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4784 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4800 @@ -1350,143 +1350,143 @@ VisualTest { } Frame { msec: 4816 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4832 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4848 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4864 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4880 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4896 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4912 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4928 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4944 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4960 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4976 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 4992 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5008 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5024 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5040 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5056 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5072 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5088 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5104 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5120 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5136 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5152 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5168 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5184 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5200 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5216 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5232 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5248 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5264 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5280 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5296 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5312 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5328 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5344 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Frame { msec: 5360 - hash: "c65ff28e032b18223c65f8810b39d603" + hash: "39ce4d31df138a329a21056b8d397fd7" } Key { type: 6 @@ -1498,67 +1498,67 @@ VisualTest { } Frame { msec: 5376 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5392 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5408 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5424 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5440 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5456 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5472 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5488 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5504 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5520 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5536 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5552 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5568 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5584 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5600 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Frame { msec: 5616 - hash: "8c755780c2d281aba23c507bcebfd5db" + hash: "ed58b79d6459243c991a2f941279f88e" } Key { type: 7 @@ -1578,11 +1578,11 @@ VisualTest { } Frame { msec: 5632 - hash: "baa42bc9d5e16c3e7af81e126d37655a" + hash: "c5d53d11b73e52746d8cdc7de15198cb" } Frame { msec: 5648 - hash: "baa42bc9d5e16c3e7af81e126d37655a" + hash: "c5d53d11b73e52746d8cdc7de15198cb" } Key { type: 7 @@ -1602,11 +1602,11 @@ VisualTest { } Frame { msec: 5664 - hash: "aa876e6d6ff0f169bcc3cf25be5e7a81" + hash: "ba3ef31e650737ec5b7477baa4ab5ecf" } Frame { msec: 5680 - hash: "aa876e6d6ff0f169bcc3cf25be5e7a81" + hash: "ba3ef31e650737ec5b7477baa4ab5ecf" } Key { type: 7 @@ -1626,11 +1626,11 @@ VisualTest { } Frame { msec: 5696 - hash: "8ec4c1a8ae28af44dcabf338fc056717" + hash: "59098eca4502479da33d40ec82896330" } Frame { msec: 5712 - hash: "8ec4c1a8ae28af44dcabf338fc056717" + hash: "59098eca4502479da33d40ec82896330" } Key { type: 7 @@ -1650,11 +1650,11 @@ VisualTest { } Frame { msec: 5728 - hash: "ec0da333c0bc090eec0ded5e4d18bd6e" + hash: "9c1888b9575771f653d672c19ab4083f" } Frame { msec: 5744 - hash: "ec0da333c0bc090eec0ded5e4d18bd6e" + hash: "9c1888b9575771f653d672c19ab4083f" } Key { type: 7 @@ -1678,7 +1678,7 @@ VisualTest { } Frame { msec: 5776 - hash: "325ba5789a6150ec0fef81fa5b005c09" + hash: "48bb05f44207f641b573d43043882aa2" } Key { type: 7 @@ -1698,11 +1698,11 @@ VisualTest { } Frame { msec: 5792 - hash: "023dd8fe428b1ed0f4c994f7e67ac3cd" + hash: "f5cb70509c060343a8c9b57d26ecf4ea" } Frame { msec: 5808 - hash: "023dd8fe428b1ed0f4c994f7e67ac3cd" + hash: "f5cb70509c060343a8c9b57d26ecf4ea" } Key { type: 7 @@ -1722,11 +1722,11 @@ VisualTest { } Frame { msec: 5824 - hash: "f661f599f576ae883f25422b20408138" + hash: "5bdfe389421df56140d27a21bbcc10d4" } Frame { msec: 5840 - hash: "f661f599f576ae883f25422b20408138" + hash: "5bdfe389421df56140d27a21bbcc10d4" } Key { type: 7 @@ -1738,7 +1738,7 @@ VisualTest { } Frame { msec: 5856 - hash: "f661f599f576ae883f25422b20408138" + hash: "5bdfe389421df56140d27a21bbcc10d4" } Key { type: 6 @@ -1750,11 +1750,11 @@ VisualTest { } Frame { msec: 5872 - hash: "8e7ad34802a0ced493e88b779c73cc47" + hash: "0f48c779e033240e87675b43cfca02c5" } Frame { msec: 5888 - hash: "8e7ad34802a0ced493e88b779c73cc47" + hash: "0f48c779e033240e87675b43cfca02c5" } Key { type: 7 @@ -1774,7 +1774,7 @@ VisualTest { } Frame { msec: 5904 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Key { type: 7 @@ -1786,39 +1786,39 @@ VisualTest { } Frame { msec: 5920 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 5936 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 5952 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 5968 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 5984 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6000 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6016 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6032 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6048 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Key { type: 6 @@ -1830,27 +1830,27 @@ VisualTest { } Frame { msec: 6064 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6080 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6096 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6112 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6128 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Frame { msec: 6144 - hash: "943c7ec51fbe8db38fcd3086990fa4e0" + hash: "f5e148d32ec832bb9c4fb49016da7903" } Key { type: 6 @@ -1862,67 +1862,67 @@ VisualTest { } Frame { msec: 6160 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6176 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6192 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6208 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6224 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6240 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6256 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6272 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6288 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6304 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6320 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6336 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6352 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6368 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6384 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Frame { msec: 6400 - hash: "bd2e37c4ac90a6389f7f4e1e1360b31b" + hash: "ac4c53142eea27d7148c74de76cdc4d4" } Key { type: 7 @@ -1942,11 +1942,11 @@ VisualTest { } Frame { msec: 6416 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6432 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Key { type: 7 @@ -1966,11 +1966,11 @@ VisualTest { } Frame { msec: 6448 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6464 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Key { type: 7 @@ -1998,63 +1998,63 @@ VisualTest { } Frame { msec: 6480 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6496 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6512 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6528 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6544 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6560 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6576 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6592 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6608 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6624 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6640 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6656 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6672 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6688 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6704 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6720 @@ -2062,19 +2062,19 @@ VisualTest { } Frame { msec: 6736 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6752 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6768 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6784 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Key { type: 6 @@ -2086,7 +2086,7 @@ VisualTest { } Frame { msec: 6800 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Key { type: 7 @@ -2098,39 +2098,39 @@ VisualTest { } Frame { msec: 6816 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6832 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6848 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6864 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6880 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6896 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6912 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6928 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Frame { msec: 6944 - hash: "608bba00320e20da05aa2a6bbcba6e19" + hash: "ecfa95feb59486098b758894cba272c8" } Key { type: 6 @@ -2142,19 +2142,19 @@ VisualTest { } Frame { msec: 6960 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Frame { msec: 6976 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Frame { msec: 6992 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Frame { msec: 7008 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Key { type: 7 @@ -2166,23 +2166,23 @@ VisualTest { } Frame { msec: 7024 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Frame { msec: 7040 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Frame { msec: 7056 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Frame { msec: 7072 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Frame { msec: 7088 - hash: "40456a6d22e09e1817b07f3898676524" + hash: "012fbe791afb6bb8b97091fbec1b0add" } Key { type: 6 @@ -2194,19 +2194,19 @@ VisualTest { } Frame { msec: 7104 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7120 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7136 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7152 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Key { type: 7 @@ -2218,31 +2218,31 @@ VisualTest { } Frame { msec: 7168 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7184 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7200 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7216 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7232 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7248 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Frame { msec: 7264 - hash: "dada78341b65c1efb2816e16a8cbe8b5" + hash: "d1246ecb1e587b9618d4affb6303581b" } Key { type: 6 @@ -2254,23 +2254,23 @@ VisualTest { } Frame { msec: 7280 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7296 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7312 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7328 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7344 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Key { type: 7 @@ -2282,47 +2282,47 @@ VisualTest { } Frame { msec: 7360 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7376 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7392 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7408 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7424 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7440 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7456 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7472 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7488 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7504 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7520 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Key { type: 7 @@ -2334,39 +2334,39 @@ VisualTest { } Frame { msec: 7536 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7552 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7568 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7584 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7600 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7616 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7632 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7648 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7664 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7680 @@ -2374,207 +2374,207 @@ VisualTest { } Frame { msec: 7696 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7712 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7728 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7744 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7760 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7776 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7792 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7808 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7824 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7840 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7856 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7872 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7888 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7904 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7920 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7936 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7952 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7968 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 7984 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8000 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8016 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8032 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8048 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8064 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8080 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8096 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8112 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8128 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8144 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8160 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8176 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8192 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8208 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8224 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8240 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8256 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8272 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8288 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8304 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8320 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8336 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8352 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8368 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8384 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8400 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8416 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8432 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8448 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8464 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8480 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Frame { msec: 8496 - hash: "f249bfae1934844abfd5fc158a9c89cf" + hash: "28b1455bb7b150afb4bec88f3328a1f6" } Mouse { type: 2 @@ -2586,19 +2586,19 @@ VisualTest { } Frame { msec: 8512 - hash: "e594125fb367adee5b6acdb1268c86cd" + hash: "edb037dfb1fe973df3896e4a2d649b8c" } Frame { msec: 8528 - hash: "e594125fb367adee5b6acdb1268c86cd" + hash: "edb037dfb1fe973df3896e4a2d649b8c" } Frame { msec: 8544 - hash: "e594125fb367adee5b6acdb1268c86cd" + hash: "edb037dfb1fe973df3896e4a2d649b8c" } Frame { msec: 8560 - hash: "e594125fb367adee5b6acdb1268c86cd" + hash: "edb037dfb1fe973df3896e4a2d649b8c" } Mouse { type: 5 @@ -2618,7 +2618,7 @@ VisualTest { } Frame { msec: 8576 - hash: "e594125fb367adee5b6acdb1268c86cd" + hash: "edb037dfb1fe973df3896e4a2d649b8c" } Mouse { type: 5 @@ -2630,7 +2630,7 @@ VisualTest { } Frame { msec: 8592 - hash: "7d4116a8689b6995702a042d974ef74b" + hash: "56e3c2d792e204e7d9758263edb6ab24" } Mouse { type: 5 @@ -2650,7 +2650,7 @@ VisualTest { } Frame { msec: 8608 - hash: "cb9221f27ac24e4b6b103ca53acad3b3" + hash: "74b47cf865838cdb3b29cd2104d990fe" } Mouse { type: 5 @@ -2662,7 +2662,7 @@ VisualTest { } Frame { msec: 8624 - hash: "074bc6abd9a67db829ae5d6c5f187fb6" + hash: "b7f624c97fc369c66314ecbb86549686" } Mouse { type: 5 @@ -2694,7 +2694,7 @@ VisualTest { } Frame { msec: 8656 - hash: "074bc6abd9a67db829ae5d6c5f187fb6" + hash: "b7f624c97fc369c66314ecbb86549686" } Mouse { type: 5 @@ -2714,7 +2714,7 @@ VisualTest { } Frame { msec: 8672 - hash: "074bc6abd9a67db829ae5d6c5f187fb6" + hash: "51219dfa7fc899bdba40d50b90ca3ca6" } Mouse { type: 5 @@ -2726,7 +2726,7 @@ VisualTest { } Frame { msec: 8688 - hash: "7e403c56d5652321a7701529fc6b8098" + hash: "51219dfa7fc899bdba40d50b90ca3ca6" } Mouse { type: 5 @@ -2746,7 +2746,7 @@ VisualTest { } Frame { msec: 8704 - hash: "7e403c56d5652321a7701529fc6b8098" + hash: "51219dfa7fc899bdba40d50b90ca3ca6" } Mouse { type: 5 @@ -2766,7 +2766,7 @@ VisualTest { } Frame { msec: 8720 - hash: "7e403c56d5652321a7701529fc6b8098" + hash: "51219dfa7fc899bdba40d50b90ca3ca6" } Mouse { type: 5 @@ -2786,7 +2786,7 @@ VisualTest { } Frame { msec: 8736 - hash: "7e403c56d5652321a7701529fc6b8098" + hash: "9320132e49323d536d435ce4f2263502" } Mouse { type: 5 @@ -2806,7 +2806,7 @@ VisualTest { } Frame { msec: 8752 - hash: "2435f2526b3ccc12b7b573872b40e5f1" + hash: "9320132e49323d536d435ce4f2263502" } Mouse { type: 5 @@ -2826,7 +2826,7 @@ VisualTest { } Frame { msec: 8768 - hash: "2435f2526b3ccc12b7b573872b40e5f1" + hash: "9320132e49323d536d435ce4f2263502" } Mouse { type: 5 @@ -2846,7 +2846,7 @@ VisualTest { } Frame { msec: 8784 - hash: "2435f2526b3ccc12b7b573872b40e5f1" + hash: "ad318ee661054ed3b628c312467dc789" } Mouse { type: 5 @@ -2866,7 +2866,7 @@ VisualTest { } Frame { msec: 8800 - hash: "2435f2526b3ccc12b7b573872b40e5f1" + hash: "ad318ee661054ed3b628c312467dc789" } Mouse { type: 5 @@ -2886,7 +2886,7 @@ VisualTest { } Frame { msec: 8816 - hash: "f5a185b954e8b181222cc50075d8ebb6" + hash: "ad318ee661054ed3b628c312467dc789" } Mouse { type: 5 @@ -2906,7 +2906,7 @@ VisualTest { } Frame { msec: 8832 - hash: "93a00b37c5027650791d1ff589408d0d" + hash: "6916d64662dd8accaa2c70cbd9b94af9" } Mouse { type: 5 @@ -2926,7 +2926,7 @@ VisualTest { } Frame { msec: 8848 - hash: "0b29f6006be3604ef862db7d31f9a434" + hash: "dd995b598e90d482291b94f9cbebace9" } Mouse { type: 5 @@ -2946,7 +2946,7 @@ VisualTest { } Frame { msec: 8864 - hash: "8390b63b71e1452cb93c576a3f2395e1" + hash: "8fb2e565879fdb7ef5ca53a142c1ea45" } Mouse { type: 5 @@ -2966,7 +2966,7 @@ VisualTest { } Frame { msec: 8880 - hash: "72298910946a4e1a9ccc4520d99e9420" + hash: "6cdab9c68965444420401bb95c2d059b" } Mouse { type: 5 @@ -2986,7 +2986,7 @@ VisualTest { } Frame { msec: 8896 - hash: "17d349b0ed29d6aa57bf8fda9a55abf8" + hash: "d11156abb2ef56ef6b8c4e78e2391d8a" } Mouse { type: 5 @@ -3006,7 +3006,7 @@ VisualTest { } Frame { msec: 8912 - hash: "01e8a877d51f5564aaf2f11e7aadbc4a" + hash: "2390c7bfd983c14a6ff4c3573741e2fa" } Mouse { type: 5 @@ -3026,7 +3026,7 @@ VisualTest { } Frame { msec: 8928 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3046,7 +3046,7 @@ VisualTest { } Frame { msec: 8944 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3066,11 +3066,11 @@ VisualTest { } Frame { msec: 8960 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 8976 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3090,7 +3090,7 @@ VisualTest { } Frame { msec: 8992 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3102,55 +3102,55 @@ VisualTest { } Frame { msec: 9008 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9024 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9040 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9056 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9072 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9088 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9104 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9120 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9136 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9152 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9168 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9184 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Frame { msec: 9200 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3162,7 +3162,7 @@ VisualTest { } Frame { msec: 9216 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3174,7 +3174,7 @@ VisualTest { } Frame { msec: 9232 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3194,7 +3194,7 @@ VisualTest { } Frame { msec: 9248 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3214,7 +3214,7 @@ VisualTest { } Frame { msec: 9264 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3234,7 +3234,7 @@ VisualTest { } Frame { msec: 9280 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3254,7 +3254,7 @@ VisualTest { } Frame { msec: 9296 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3274,7 +3274,7 @@ VisualTest { } Frame { msec: 9312 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3294,7 +3294,7 @@ VisualTest { } Frame { msec: 9328 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3314,7 +3314,7 @@ VisualTest { } Frame { msec: 9344 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3334,7 +3334,7 @@ VisualTest { } Frame { msec: 9360 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3354,7 +3354,7 @@ VisualTest { } Frame { msec: 9376 - hash: "bc8f49abd277f5f15d422341de212183" + hash: "e7442142350b9fdaf7fc7e763cafbaf5" } Mouse { type: 5 @@ -3374,7 +3374,7 @@ VisualTest { } Frame { msec: 9392 - hash: "12e705f08ff90fd8ddb1937e5a7e23a0" + hash: "934022d70c2d094d6463d895803f2a79" } Mouse { type: 5 @@ -3394,7 +3394,7 @@ VisualTest { } Frame { msec: 9408 - hash: "12e705f08ff90fd8ddb1937e5a7e23a0" + hash: "934022d70c2d094d6463d895803f2a79" } Mouse { type: 5 @@ -3414,7 +3414,7 @@ VisualTest { } Frame { msec: 9424 - hash: "4daae0f05ff1b7ef68ed1d839b113dc4" + hash: "48caf4c2d3a5a6058b1ffa221ee77d83" } Mouse { type: 5 @@ -3434,7 +3434,7 @@ VisualTest { } Frame { msec: 9440 - hash: "a1186544d7f5576e6ccbbd7938c1c374" + hash: "8e22c6013721d350acf1635f1c00488d" } Mouse { type: 5 @@ -3454,7 +3454,7 @@ VisualTest { } Frame { msec: 9456 - hash: "6ce09c9a06135d2280e4f7bc1c81b70e" + hash: "c8dd72bfeec38d825dc7832f8bf7116d" } Mouse { type: 5 @@ -3474,7 +3474,7 @@ VisualTest { } Frame { msec: 9472 - hash: "6ce09c9a06135d2280e4f7bc1c81b70e" + hash: "f3e934f22fead73fd52ab26d4f3fd480" } Mouse { type: 5 @@ -3494,7 +3494,7 @@ VisualTest { } Frame { msec: 9488 - hash: "035b177c3cacd8cdef807d5673de4607" + hash: "7fc03d3341860a984be91feec0b67da2" } Mouse { type: 5 @@ -3514,7 +3514,7 @@ VisualTest { } Frame { msec: 9504 - hash: "7b7e3c4600f3af7bd0f45799661db993" + hash: "7fc03d3341860a984be91feec0b67da2" } Mouse { type: 5 @@ -3534,7 +3534,7 @@ VisualTest { } Frame { msec: 9520 - hash: "7b7e3c4600f3af7bd0f45799661db993" + hash: "a1eacc5be14a2c411660662dd9e78b2f" } Mouse { type: 5 @@ -3546,7 +3546,7 @@ VisualTest { } Frame { msec: 9536 - hash: "7b7e3c4600f3af7bd0f45799661db993" + hash: "a1eacc5be14a2c411660662dd9e78b2f" } Mouse { type: 5 @@ -3566,7 +3566,7 @@ VisualTest { } Frame { msec: 9552 - hash: "859950e1cf496ef830a30b3a0ec801ac" + hash: "a1eacc5be14a2c411660662dd9e78b2f" } Mouse { type: 5 @@ -3586,7 +3586,7 @@ VisualTest { } Frame { msec: 9568 - hash: "859950e1cf496ef830a30b3a0ec801ac" + hash: "6808d46fa17f9e359c38aeca72466c97" } Mouse { type: 5 @@ -3606,7 +3606,7 @@ VisualTest { } Frame { msec: 9584 - hash: "be7343825b6adcb16f49e20ee2bdf19f" + hash: "0b4b632291769b48d942f5aea91a8ae5" } Mouse { type: 5 @@ -3638,7 +3638,7 @@ VisualTest { } Frame { msec: 9616 - hash: "597923ce1046fbf4b728545c54c97fa5" + hash: "0b4b632291769b48d942f5aea91a8ae5" } Mouse { type: 5 @@ -3658,7 +3658,7 @@ VisualTest { } Frame { msec: 9632 - hash: "597923ce1046fbf4b728545c54c97fa5" + hash: "d730471882eacaf3280295d902c3927f" } Mouse { type: 5 @@ -3678,7 +3678,7 @@ VisualTest { } Frame { msec: 9648 - hash: "597923ce1046fbf4b728545c54c97fa5" + hash: "d730471882eacaf3280295d902c3927f" } Mouse { type: 5 @@ -3698,7 +3698,7 @@ VisualTest { } Frame { msec: 9664 - hash: "2fc5c42f94350f28ae0117bc7f6daff1" + hash: "f2a17005ff90345b440475a772277495" } Mouse { type: 5 @@ -3718,7 +3718,7 @@ VisualTest { } Frame { msec: 9680 - hash: "4b4ec69d583151f1a64052d696966f9c" + hash: "62edb249cc9fcb08e5426f9acd54ad36" } Mouse { type: 5 @@ -3738,7 +3738,7 @@ VisualTest { } Frame { msec: 9696 - hash: "0882a25ac1c2b534367736d825a73630" + hash: "ef6497718983eb548ec2aa43781d2555" } Mouse { type: 5 @@ -3758,7 +3758,7 @@ VisualTest { } Frame { msec: 9712 - hash: "d5b6acc155f827c05b0c4c289a2e3eec" + hash: "d5b90efb68335fc4aa1fc222c67d1f53" } Mouse { type: 5 @@ -3778,7 +3778,7 @@ VisualTest { } Frame { msec: 9728 - hash: "a05b3f2f9f22249ab694ac45e1de7b85" + hash: "a8cbbbe9cffd27002e8a1b3851b23bb0" } Mouse { type: 5 @@ -3798,7 +3798,7 @@ VisualTest { } Frame { msec: 9744 - hash: "5b0e034813f8543627f370efdcf3591e" + hash: "a448d8d01e84961098d6b86319013d5f" } Mouse { type: 5 @@ -3818,7 +3818,7 @@ VisualTest { } Frame { msec: 9760 - hash: "5b8d80b9d7e2a8c1a24c28e127d0f7e5" + hash: "afa98074edfb7b0e904f5645f592efae" } Mouse { type: 5 @@ -3838,7 +3838,7 @@ VisualTest { } Frame { msec: 9776 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3858,7 +3858,7 @@ VisualTest { } Frame { msec: 9792 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3870,7 +3870,7 @@ VisualTest { } Frame { msec: 9808 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3882,7 +3882,7 @@ VisualTest { } Frame { msec: 9824 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3894,7 +3894,7 @@ VisualTest { } Frame { msec: 9840 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3906,11 +3906,11 @@ VisualTest { } Frame { msec: 9856 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 9872 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3922,7 +3922,7 @@ VisualTest { } Frame { msec: 9888 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3934,7 +3934,7 @@ VisualTest { } Frame { msec: 9904 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3946,7 +3946,7 @@ VisualTest { } Frame { msec: 9920 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3958,11 +3958,11 @@ VisualTest { } Frame { msec: 9936 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 9952 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3974,7 +3974,7 @@ VisualTest { } Frame { msec: 9968 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3986,7 +3986,7 @@ VisualTest { } Frame { msec: 9984 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -3998,11 +3998,11 @@ VisualTest { } Frame { msec: 10000 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10016 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 5 @@ -4014,59 +4014,59 @@ VisualTest { } Frame { msec: 10032 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10048 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10064 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10080 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10096 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10112 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10128 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10144 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10160 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10176 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10192 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10208 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10224 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10240 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Mouse { type: 3 @@ -4078,79 +4078,79 @@ VisualTest { } Frame { msec: 10256 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10272 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10288 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10304 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10320 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10336 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10352 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10368 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10384 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10400 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10416 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10432 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10448 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10464 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10480 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10496 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10512 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10528 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10544 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10560 @@ -4158,178 +4158,178 @@ VisualTest { } Frame { msec: 10576 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10592 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10608 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10624 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10640 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10656 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10672 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10688 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10704 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10720 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10736 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10752 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10768 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10784 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10800 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10816 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10832 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10848 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10864 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10880 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10896 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10912 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10928 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10944 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10960 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10976 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 10992 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11008 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11024 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11040 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11056 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11072 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11088 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11104 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11120 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11136 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11152 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11168 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11184 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11200 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11216 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11232 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11248 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } Frame { msec: 11264 - hash: "66715d4a4f83d0e5905adbc4c459b0fb" + hash: "020ac5797abe98f97c4839afc67aac18" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.0.png deleted file mode 100644 index f04f65e..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.1.png deleted file mode 100644 index 46a703a..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.2.png deleted file mode 100644 index e4a3877..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.3.png deleted file mode 100644 index 9ef842a..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.4.png deleted file mode 100644 index 706e2b3..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.5.png deleted file mode 100644 index bcc86cc..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.6.png deleted file mode 100644 index 51ddd44..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.7.png deleted file mode 100644 index 0a2fdda..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.8.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.8.png deleted file mode 100644 index 9c88bff..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.qml index a1d998f..81f1bcc 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/cursorDelegate.qml @@ -6,134 +6,146 @@ VisualTest { } Frame { msec: 16 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 32 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 48 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 64 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 80 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 96 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 112 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 128 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 144 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 160 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 176 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 192 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 208 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 224 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 240 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 256 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 272 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 288 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 304 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 320 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 336 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 352 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 368 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 384 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 400 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 416 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 432 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" } Frame { msec: 448 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "65bbc5da769f475d1c47bdedb92ba65e" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 464 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "97eff9733db71f7c5d396969582c572b" } Frame { msec: 480 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "97eff9733db71f7c5d396969582c572b" } Frame { msec: 496 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "97eff9733db71f7c5d396969582c572b" } Frame { msec: 512 - hash: "cd442d6dc4d155f54ae24f03d080f50c" + hash: "97eff9733db71f7c5d396969582c572b" + } + Frame { + msec: 528 + hash: "87902d32dba1439e71ce5f57f514748e" } Key { - type: 6 + type: 7 key: 16777234 modifiers: 0 text: "" @@ -141,36 +153,44 @@ VisualTest { count: 1 } Frame { - msec: 528 - hash: "56db24ad686d34e75a2d184e5b1da2a9" - } - Frame { msec: 544 - hash: "c3487c7c7dcd392e7eacb74045dd4143" + hash: "cad95931a38718eb481a9175fdfec305" } Frame { msec: 560 - hash: "70aedcda6c93875d18ee111d8a19549e" + hash: "1dc99e5c7e4d2fa6b624b6df250b78fc" } Frame { msec: 576 - hash: "47ad557d366536ad457f6866241dba93" + hash: "5d5739beb039a83bebb2c41489166edf" } Frame { msec: 592 - hash: "e715c2a82745829665226df78598b819" + hash: "6320c9a1c0013f5aa6180992b934ca59" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 608 - hash: "2ff4bd5602c34c020162f0503d625049" + hash: "9d9837c1f3779e5dab0dfeb1d11fdea1" } Frame { msec: 624 - hash: "a494b3b25a23daa858034ebccce0d1c7" + hash: "9d868112eaf70ce02ce93603278a565d" } Frame { msec: 640 - hash: "59d2fb8e21802d256b11730b31919fb3" + hash: "d2bccb3184d3bb42b91017410a8655b6" + } + Frame { + msec: 656 + hash: "68f8be3e16637fd39a35f0cebb62b74a" } Key { type: 7 @@ -181,67 +201,47 @@ VisualTest { count: 1 } Frame { - msec: 656 - hash: "5e09b95292d6d0afe76a5015b0ccebf1" - } - Frame { msec: 672 - hash: "de3c911aec7e42557ece4bdcf02ce562" + hash: "04f5781b57ed9fee32d5ef80dc33f4ff" } Frame { msec: 688 - hash: "680f51f63c4b11a247a668eb7bbd2b62" + hash: "06cc2e24a848d441074de5ddff1c739a" + } + Frame { + msec: 704 + hash: "94526186deb7248ac9c747ede15b106d" + } + Frame { + msec: 720 + hash: "1ac130517df314f4f44b9bde2d3dcc53" } Key { type: 6 - key: 16777236 + key: 16777234 modifiers: 0 text: "" autorep: false count: 1 } Frame { - msec: 704 - hash: "9aa569f7b251371bdd1cb05c8d3aab28" - } - Frame { - msec: 720 - hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e" - } - Frame { msec: 736 - hash: "a0cb3f796fddf7100ca19aee3dedbea8" + hash: "270ecf4900e94d60599ded230633aa02" } Frame { msec: 752 - hash: "b4e273b6415e3951eab2f831100b0bb2" + hash: "ef2093584cbce9182b99f297fcd2465d" } Frame { msec: 768 - hash: "fd3fd655785c4e3c470f742451e3470f" + hash: "c445cf5f56213a712585934681d8af55" } Frame { msec: 784 - hash: "7a9b2057760e48d5f9cfdc79b08866d8" - } - Frame { - msec: 800 - hash: "2a55b52db02d97963d382c9862307384" - } - Frame { - msec: 816 - hash: "c6c90915393fc7cb0aaa464caefbadb0" + hash: "9f0edb3871e015a549622e1b70d1b748" } Key { type: 7 - key: 16777236 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Key { - type: 6 key: 16777234 modifiers: 0 text: "" @@ -249,28 +249,44 @@ VisualTest { count: 1 } Frame { + msec: 800 + hash: "144c51d7aa47ea8cc8d79a97efa4b430" + } + Frame { + msec: 816 + hash: "34f768a7c99dfb3c8f0e1fb1a08a37ac" + } + Frame { msec: 832 - hash: "4f097223462c8f619188b0b0c2ecb080" + hash: "4f3970c4ad02b69f96c11610494e8a50" } Frame { msec: 848 - hash: "243be452ff0798538defc6a14cb8a08b" + hash: "815a1cf66f0c9eb47e244753eebb83ba" } Frame { msec: 864 - hash: "e5472ed9a8a43a64a0fea12540619940" + hash: "5db11f795c000b382fdc30726a711c65" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 880 - hash: "90b0f5f1aa7b5f066fb1266ea63254eb" + hash: "67976ee172d0d55992c0e4734fbb7ccf" } Frame { msec: 896 - hash: "97d5f9fe02e4bd06ec30a7805945f167" + hash: "c764e4d5317acbbf5118a08565e5d5fd" } Frame { msec: 912 - hash: "eb381a1e2ad945e4cfa540c137edbda7" + hash: "a83f566d01b990e91f43bb63a58fb5b8" } Key { type: 7 @@ -282,11 +298,11 @@ VisualTest { } Frame { msec: 928 - hash: "75252ff61682fd32117f0759ebe4b6a1" + hash: "031282f352e01f23bc5f73bf8ce82c9a" } Frame { msec: 944 - hash: "d724bdacc59bce29d0a42d72479be0b6" + hash: "1f3dc1d3ad0304376eac5d60d3c226ee" } Frame { msec: 960 @@ -294,207 +310,247 @@ VisualTest { } Frame { msec: 976 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 992 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1008 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 1024 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 1040 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 1056 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Key { - type: 6 - key: 16777248 - modifiers: 33554432 + type: 7 + key: 16777234 + modifiers: 0 text: "" autorep: false count: 1 } - Key { - type: 6 - key: 16777249 - modifiers: 100663296 - text: "" - autorep: false - count: 1 + Frame { + msec: 1056 + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 1072 - hash: "d7703c18b69f485bba3abd655100b50d" + hash: "a2ad07326fafcb3012cdb869f39af466" } Frame { msec: 1088 - hash: "d724bdacc59bce29d0a42d72479be0b6" + hash: "8622eb25a6da44926b5161bce213a483" } Frame { msec: 1104 - hash: "75252ff61682fd32117f0759ebe4b6a1" + hash: "ccbd4d1e4865ebd9b0fe923e6ab05e5c" } Frame { msec: 1120 - hash: "eb381a1e2ad945e4cfa540c137edbda7" + hash: "775cd79b012f79b773449a0ad8457149" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1136 - hash: "97d5f9fe02e4bd06ec30a7805945f167" + hash: "2a4ed061e512c5afd11072c4b707f707" } Frame { msec: 1152 - hash: "90b0f5f1aa7b5f066fb1266ea63254eb" + hash: "c855df7b17811f25fd17e4fb108c02e1" } Frame { msec: 1168 - hash: "e5472ed9a8a43a64a0fea12540619940" + hash: "46c37d8e67ece5cae4f766acf50f3ca3" } Frame { msec: 1184 - hash: "243be452ff0798538defc6a14cb8a08b" + hash: "95a70f14ce01aae61190080ed3d55c77" } Frame { msec: 1200 - hash: "4f097223462c8f619188b0b0c2ecb080" + hash: "87da182d1285f3613bb2e4673e701757" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1216 - hash: "e7346d8f223684143a0940def878b874" + hash: "5b97f13f43e713a6fbe96bdca8969191" } Frame { msec: 1232 - hash: "512b9746ae4482557b8cef9f99905954" + hash: "4d003182e7b7b0a05413b80f82a0fc41" } Frame { msec: 1248 - hash: "4220dde85eb1c027366efd0798927e8d" + hash: "dba09e038291a8dfdc61911d6b4b9bdf" } Frame { msec: 1264 - hash: "54f7f94b5cdf1becb2ee61d7f6f02c0e" + hash: "a2ae1e5cc6cd72fae70804e07df5a8a1" } Frame { msec: 1280 - hash: "de09380dd57c58ae99fbdba169a19975" + hash: "f1c2a24b6f0ebcf98122e8db1cdcb66f" } Frame { msec: 1296 - hash: "bfc1b03df244839a012e8302dc07764f" + hash: "142dade1639655132435ae260b7935a0" } - Frame { - msec: 1312 - hash: "d5f220e5337837ec0d07eb118e2f948e" + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { - msec: 1328 - hash: "7640c78a286b0b7bdf2ec9117ceced4a" + msec: 1312 + hash: "e80c0175d947bceef4bf53b60bf7eac0" } Key { type: 6 - key: 16777234 + key: 16777248 modifiers: 100663296 text: "" autorep: false count: 1 } Frame { + msec: 1328 + hash: "de912cd8bd2fe762ec6b1ec819732507" + } + Frame { msec: 1344 - hash: "c659fd76d632aac26d396809b57826dd" + hash: "d3fa9dfab37ee26572d25bcbe8c66b72" } Frame { msec: 1360 - hash: "b5ba335eca37416970dcab53157d7ae6" + hash: "33bdb2817a2858ce430813d0774f0172" } Frame { msec: 1376 - hash: "df498dac81260d8867221612ff3b7619" + hash: "4f10f0ffb6b1c87155eedd53af36c74f" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1392 - hash: "578c3a682278f4ead0ca894f029dbfb7" + hash: "1b94be0de8412bd9380689895f290af7" } Frame { msec: 1408 - hash: "5fe9b2365b091047df1b18bcaa5b1bb4" + hash: "48b3a5e2b04c86a75f4b6595eb2c1f55" } Frame { msec: 1424 - hash: "c513b8df83f1d1cc3c05769c41741653" - } - Key { - type: 7 - key: 16777234 - modifiers: 100663296 - text: "" - autorep: false - count: 1 + hash: "d092fabd3dd51c718486e1e7dadaa0dc" } Frame { msec: 1440 - hash: "ee70a2002f52a3f4a9fa32db668db3d0" + hash: "243359437235563f1a60b8eaf63365b6" } Frame { msec: 1456 - hash: "3f299da38c2f3f9057df987d5d339e1f" + hash: "a986c8ed8ad2d8b6aab2a001906ba2ad" } Frame { msec: 1472 - hash: "55f6adbd00910e5f39977162cfe8dcc5" + hash: "da5e06dc481e9cb7d9159a84d0cc150a" } Frame { msec: 1488 - hash: "151fb386855954ae5143046cab314ddf" + hash: "1d70a05fce3a05477e21d22b127ae96a" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1504 - hash: "d9ec76b2c07077b5b6d6c3777d116164" + hash: "913448213a07f6c8427c8e310d2026de" } Frame { msec: 1520 - hash: "ef3ba6c27d9b28de829360985505c185" + hash: "51bef5ae52977a935b66af4baf1da4e6" } Frame { msec: 1536 - hash: "8eafd8f9aea08c172f40de3c4f2b3b59" + hash: "367bc25f868c23005d7fe903a9ea681b" } Frame { msec: 1552 - hash: "2329d5b8182794bb8375f0de204c9b16" + hash: "3c25181652e788d128ed571ca4fea0b1" } Frame { msec: 1568 - hash: "e6b25cf1a8c6858f6937e649b1315955" + hash: "0218f939ff2b8c0bc22a537ed0f053f0" } Frame { msec: 1584 - hash: "3aeedff600509a138b0de31e10bbdd7b" + hash: "a3b765a823b2b3811273a1be90850533" } Frame { msec: 1600 - hash: "0636dee0ddc551ce8ecf3a6c6300b020" + hash: "2a42a29774eb4f962d299f8c2c213d55" } Frame { msec: 1616 - hash: "77f5b0dfdf0c631cf863be60bd09db9c" + hash: "1f0ad54d0fe8fc27cadbaaeaa37364e0" } Frame { msec: 1632 - hash: "2e86762371ae933546e8b2154c78f74b" + hash: "04d6028d1b1a1178e5bf774db8eef2c6" } Frame { msec: 1648 - hash: "1051ec29f94c31b257a5b1c922f8e93f" + hash: "c325e46e89e8df04e2c3d8bf111c5f09" + } + Frame { + msec: 1664 + hash: "70e6223ce16a797e2c56e21ad74b188b" + } + Frame { + msec: 1680 + hash: "0fb8762fd28564b84b83c17d749a3645" } Key { type: 6 @@ -505,76 +561,84 @@ VisualTest { count: 1 } Frame { - msec: 1664 - hash: "5c60da876c8cc9fa334905b5fc7c2a3d" - } - Frame { - msec: 1680 - hash: "c0b0cddd62853ac3499b7ada200d206a" - } - Frame { msec: 1696 - hash: "5bd588d64917f942e0f5ea1553acbf63" + hash: "ef5d19b59792ea8822e2391fe0d91dbd" } Frame { msec: 1712 - hash: "bc5744ef5c81b7d5b365bf977f909be5" - } - Key { - type: 7 - key: 16777236 - modifiers: 100663296 - text: "" - autorep: false - count: 1 + hash: "70ad15030164be8afbb4ab22d1ae5f5f" } Frame { msec: 1728 - hash: "892a1a8a5a9c198e5ae04cc19f0e1d0c" + hash: "a5dfb8bd4b681e0d8d2c082821a2a976" } Frame { msec: 1744 - hash: "708799d2d834302c659958701e217b37" + hash: "864781fbb8673b1e603df015f2d88601" } Frame { msec: 1760 - hash: "360d75bcc178bcfd4f93741d653fd821" + hash: "0bdb6a155cdd14f4dce9fde3c5116dde" } Frame { msec: 1776 - hash: "1cfe03528b1cd84e69efc02b9677c748" + hash: "5421f521a9bdccc8478fcee97e0dbc99" } Frame { msec: 1792 - hash: "6f45d7c37f1fb90138011b2af24aaf1e" + hash: "c5f29693dd017932767f37e2fb2f22f2" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1808 - hash: "ba164375e7ac18cf2e1e613498158fbf" + hash: "b5e8abeaec33407e673f8021212528b1" } Frame { msec: 1824 - hash: "14052b9da9e17a6f06fed05d4ed82b9c" + hash: "917c968e5ee8f0b25fdb175719d7dbfa" } Frame { msec: 1840 - hash: "aac15ce22bfe38f44a46e4644913f144" + hash: "56495c63676b9f73004e76e38d60567e" } Frame { msec: 1856 - hash: "c63aa02ba29ea18334b188185690948d" + hash: "86f1ccdd7ff408c5b141d79797eea1fa" + } + Key { + type: 7 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 1872 - hash: "11ed187ccd4c2221f166851c08b6b467" + hash: "9e9b32a9f71ab1aa4e87ddc323ccda03" + } + Key { + type: 6 + key: 16777248 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1888 - hash: "3543bd4e538981d4bb2c2313c9663a53" + hash: "360aef37452ce8f045659c227285cb82" } Frame { msec: 1904 - hash: "a05fa618b094bde2b54b730f513bcabe" + hash: "805949377c620fa4310aa4328eba1f23" } Frame { msec: 1920 @@ -582,527 +646,623 @@ VisualTest { } Frame { msec: 1936 - hash: "52fc4a32526a74f9a04d8795c7a47c6e" + hash: "00df8110a2008ba77b7e0bf2130e5319" } Frame { msec: 1952 - hash: "17623e1b0ffca3b7736ce930f078dbe0" + hash: "835f6f723577071461e41da1fd2e990a" } Frame { msec: 1968 - hash: "75226dac5691627851d83c7370d7603c" - } - Key { - type: 7 - key: 16777249 - modifiers: 33554432 - text: "" - autorep: false - count: 1 + hash: "6876cafa4d6d3a7d387602eba4d26db1" } Frame { msec: 1984 - hash: "9e506ad52020e2913e80a13a7f3ac797" + hash: "5570ae1e700cdf42ba516be69fbaadc0" } Frame { msec: 2000 - hash: "9e506ad52020e2913e80a13a7f3ac797" + hash: "5570ae1e700cdf42ba516be69fbaadc0" } Frame { msec: 2016 - hash: "9e506ad52020e2913e80a13a7f3ac797" + hash: "5570ae1e700cdf42ba516be69fbaadc0" } Frame { msec: 2032 - hash: "9e506ad52020e2913e80a13a7f3ac797" + hash: "5570ae1e700cdf42ba516be69fbaadc0" + } + Key { + type: 7 + key: 16777249 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 2048 - hash: "9e506ad52020e2913e80a13a7f3ac797" + hash: "5570ae1e700cdf42ba516be69fbaadc0" + } + Key { + type: 7 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2064 - hash: "75226dac5691627851d83c7370d7603c" + hash: "6876cafa4d6d3a7d387602eba4d26db1" } Frame { msec: 2080 - hash: "17623e1b0ffca3b7736ce930f078dbe0" + hash: "835f6f723577071461e41da1fd2e990a" } Frame { msec: 2096 - hash: "52fc4a32526a74f9a04d8795c7a47c6e" + hash: "00df8110a2008ba77b7e0bf2130e5319" } Frame { msec: 2112 - hash: "89f2d3b4441faee557b8d5f44e1e1e18" + hash: "627206a252bd6fcbf57d9f1cde0506bb" } Frame { msec: 2128 - hash: "a05fa618b094bde2b54b730f513bcabe" + hash: "805949377c620fa4310aa4328eba1f23" } Frame { msec: 2144 - hash: "3543bd4e538981d4bb2c2313c9663a53" + hash: "360aef37452ce8f045659c227285cb82" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2160 - hash: "11ed187ccd4c2221f166851c08b6b467" + hash: "0ac33070e0c736bc0fb5ab12fa444b5c" } Frame { msec: 2176 - hash: "c63aa02ba29ea18334b188185690948d" + hash: "520a544fd92f17a14380803e253b396f" } Frame { msec: 2192 - hash: "aac15ce22bfe38f44a46e4644913f144" + hash: "4a080a5154c517e6bcf24b3a1f1d7f2c" } Frame { msec: 2208 - hash: "14052b9da9e17a6f06fed05d4ed82b9c" + hash: "e83642b0793f5a790efca65ccf20a720" } Frame { msec: 2224 - hash: "ba164375e7ac18cf2e1e613498158fbf" + hash: "8210b9cbf19f519ee34f4bb1a6afce16" } Frame { msec: 2240 - hash: "6f45d7c37f1fb90138011b2af24aaf1e" - } - Frame { - msec: 2256 - hash: "1cfe03528b1cd84e69efc02b9677c748" + hash: "54d04e64af5c0a3d29f2dc8c0977ed3a" } Key { type: 7 - key: 16777248 + key: 16777236 modifiers: 0 text: "" autorep: false count: 1 } Frame { + msec: 2256 + hash: "ae2a644f96bd7b2662ebcf4ebc33d930" + } + Frame { msec: 2272 - hash: "360d75bcc178bcfd4f93741d653fd821" + hash: "718ac9cb5ef2992b06b34e957f987b7a" } Frame { msec: 2288 - hash: "708799d2d834302c659958701e217b37" + hash: "a2e1dea5e5f37697c7ce1a9419b94f65" } Frame { msec: 2304 - hash: "892a1a8a5a9c198e5ae04cc19f0e1d0c" + hash: "c0eb56c72311263d892ce65331547531" } Frame { msec: 2320 - hash: "bc5744ef5c81b7d5b365bf977f909be5" + hash: "585ad3efb7330de889b8cf56a51a0899" } Frame { msec: 2336 - hash: "5bd588d64917f942e0f5ea1553acbf63" + hash: "236e54ae31e5ee3d08a7bc9aeaef0d9b" } Frame { msec: 2352 - hash: "c0b0cddd62853ac3499b7ada200d206a" + hash: "d6218c8bb4da9d62bdb5d0cf5d7f8e37" } Key { type: 6 - key: 16777236 - modifiers: 0 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Key { + type: 6 + key: 16777248 + modifiers: 100663296 text: "" autorep: false count: 1 } Frame { msec: 2368 - hash: "5c60da876c8cc9fa334905b5fc7c2a3d" + hash: "1dddd18a4ef66df9d9b431b2860e24d1" } Frame { msec: 2384 - hash: "136a103a893991b97ec09f373c68c5b9" + hash: "5b1b45e75f5a829b31c0b6eb0189da7c" } Frame { msec: 2400 - hash: "b2181ce0165ee060e1a8b713027011a9" + hash: "062091bc7a5f3296c669614318b80fe7" } Frame { msec: 2416 - hash: "e4836bbaf1834658e3ec4bf54a619b53" + hash: "836f37fe92a46233640e0bd2c0932fea" } Frame { msec: 2432 - hash: "3072492f5f72427c8d45cf3c5d3ff919" + hash: "f14ec1544a380fc9993b39754c23c2f4" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2448 - hash: "d897cba896239c77df4f7adb93ad5def" + hash: "2d549b5fea734e47682415df1717e6a6" } Frame { msec: 2464 - hash: "ec9867a95de6d6f4c0f92af567d73771" - } - Key { - type: 7 - key: 16777236 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "824c5960260dd3ed7527709ebfb06d27" } Frame { msec: 2480 - hash: "06b72e3180eb946622e4592de0fa6f91" + hash: "258f034fe1e71f25a92e667e05f53e82" } Frame { msec: 2496 - hash: "33f109c026eaefed113cc12db5912a19" + hash: "c432e758e19c44d788cb38df6e4c6d69" } Frame { msec: 2512 - hash: "ce72c4b4470394dc1c4efd4d9de9907f" + hash: "a1856592208f9a00385b13c44e1c4503" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2528 - hash: "64ac1105ea10ae1f6401e8421731c606" + hash: "2b4d40a0555df0b86f52d13790185459" } Frame { msec: 2544 - hash: "ef977bd74941d3506b8f3ee4b1f587ad" + hash: "b153143e6b16c47fa06663dc6b1034d6" } Frame { msec: 2560 - hash: "9278de91e10788ae5a80399ff5372460" + hash: "ac52236c5d73aeae7c0834df1e6bd84e" } Frame { msec: 2576 - hash: "ddaaf945a5f714b856ed5155f4e502b2" + hash: "136eeb348b0b96edc9aaf9fbea741973" } Frame { msec: 2592 - hash: "f6bb6ba15d996345df04825da71c2cf3" + hash: "4f8a1dfa8906de2bcdfbf5c3b29fbf9b" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2608 - hash: "466c78a5a5052b39b113adeda761da6c" + hash: "7dc9726df2d112b46f4d9dbe66d534c7" } Frame { msec: 2624 - hash: "db650537d773e0d8a737a7bf5f408a5e" + hash: "f64086ca0e83fa8bb0fae28065260fdc" } Frame { msec: 2640 - hash: "64be9f85869f19defada296343895a2b" + hash: "5237dd2b79d71bbfa0a0d3963a7f42b7" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2656 - hash: "5ac6d9751bfadbc7aa064ca0b4d78b2b" + hash: "8dd435b577bb258979d33034885a8cd8" } Frame { msec: 2672 - hash: "a088b351dcc6fc3a8d29256f3a2410c3" + hash: "2609c066b8f102b4189991bf7d01eaad" } Frame { msec: 2688 - hash: "a16a77170a6c969042024fa0868da12d" + hash: "986fab22391264d04df9a55b18aee645" } Frame { msec: 2704 - hash: "3a2509d0d3a314d2ed72f811f4af741e" + hash: "0256423680aa0843fe8ec84f5e68fc9b" } Frame { msec: 2720 - hash: "484db4e1954048cad7eea48bfea08267" - } - Frame { - msec: 2736 - hash: "ad0f84634c5f99ab62ab6d12ad8d8c6a" - } - Frame { - msec: 2752 - hash: "d99b590307f6910963257a1c41c50120" + hash: "b822bdcad69aa868f48b2bbf2d62e297" } Key { type: 6 key: 16777234 - modifiers: 0 + modifiers: 100663296 text: "" autorep: false count: 1 } Frame { + msec: 2736 + hash: "14effed70ca60233be9b2f6d0a1b5e6c" + } + Frame { + msec: 2752 + hash: "1abaf2c36a0fb9f04606c0e191d113cf" + } + Frame { msec: 2768 - hash: "54f7f94b5cdf1becb2ee61d7f6f02c0e" + hash: "cffb8ca29b0369d183d6461bf9e63fdf" } Frame { msec: 2784 - hash: "4220dde85eb1c027366efd0798927e8d" + hash: "9378bebddb09036bec98ff7018dcf7c1" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2800 - hash: "512b9746ae4482557b8cef9f99905954" + hash: "0c3823994ee8f838c26040118ba62622" } Frame { msec: 2816 - hash: "e7346d8f223684143a0940def878b874" + hash: "d374547f47adc81a18428c7a79cb9cf2" } Frame { msec: 2832 - hash: "4f097223462c8f619188b0b0c2ecb080" + hash: "449c2996a2d0e74f2300adad619700bc" } Frame { msec: 2848 - hash: "243be452ff0798538defc6a14cb8a08b" + hash: "14379a320b6fc36de5d2a6776f1dc963" } Frame { msec: 2864 - hash: "e5472ed9a8a43a64a0fea12540619940" + hash: "cb010a99ffa3b6df26c6cd263a21cfcd" } Frame { msec: 2880 image: "cursorDelegate.2.png" } - Key { - type: 7 - key: 16777234 - modifiers: 0 - text: "" - autorep: false - count: 1 - } Frame { msec: 2896 - hash: "97d5f9fe02e4bd06ec30a7805945f167" + hash: "a445d23288d462009916e31f370a2068" } Frame { msec: 2912 - hash: "eb381a1e2ad945e4cfa540c137edbda7" + hash: "8b3f2811300830e837797056f262bec2" } Frame { msec: 2928 - hash: "75252ff61682fd32117f0759ebe4b6a1" + hash: "2303a27e72334cae84b4fe51a62974ba" } Frame { msec: 2944 - hash: "d724bdacc59bce29d0a42d72479be0b6" + hash: "f3a9f3e74d2d83e38aee78cab7209bd6" } Frame { msec: 2960 - hash: "d7703c18b69f485bba3abd655100b50d" + hash: "ca4777127a535655f057af57cf3e8c7b" } Frame { msec: 2976 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "de2b65920fa9177a79019f33712c2275" } Frame { msec: 2992 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "de2b65920fa9177a79019f33712c2275" } Frame { msec: 3008 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "de2b65920fa9177a79019f33712c2275" } Frame { msec: 3024 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "de2b65920fa9177a79019f33712c2275" } Frame { msec: 3040 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "de2b65920fa9177a79019f33712c2275" } Frame { msec: 3056 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "de2b65920fa9177a79019f33712c2275" } Frame { msec: 3072 - hash: "d7703c18b69f485bba3abd655100b50d" + hash: "ca4777127a535655f057af57cf3e8c7b" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3088 - hash: "d724bdacc59bce29d0a42d72479be0b6" + hash: "83cfb141f6b77fa062443a442a5b2e9e" } Frame { msec: 3104 - hash: "75252ff61682fd32117f0759ebe4b6a1" + hash: "b3e262864238d03f988c9750cc74e48f" } Frame { msec: 3120 - hash: "eb381a1e2ad945e4cfa540c137edbda7" + hash: "6ed2086ae01be46f0684bbecc05484c4" } Frame { msec: 3136 - hash: "97d5f9fe02e4bd06ec30a7805945f167" + hash: "91f6dad8f05577af6e4f5f0aceb06b4b" } Frame { msec: 3152 - hash: "90b0f5f1aa7b5f066fb1266ea63254eb" + hash: "1bfb0c299c3c0db0518eaa54137c22b0" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3168 - hash: "e5472ed9a8a43a64a0fea12540619940" + hash: "37cc96ef4b760faadf76cc471f6ba49a" } Frame { msec: 3184 - hash: "243be452ff0798538defc6a14cb8a08b" + hash: "67c848bf93e845eaf5eebc9b8e57482c" } Frame { msec: 3200 - hash: "4f097223462c8f619188b0b0c2ecb080" + hash: "e3906ad9b1dfbd1170364c11ff4b286f" } Frame { msec: 3216 - hash: "e7346d8f223684143a0940def878b874" + hash: "24dd59673c5659e3bf6f52723e1bcd07" } Frame { msec: 3232 - hash: "512b9746ae4482557b8cef9f99905954" + hash: "4b694f05f147bcf901a16807d4e3ec7c" } Frame { msec: 3248 - hash: "4220dde85eb1c027366efd0798927e8d" + hash: "9d9dbf34f6a67a49210caa249b8a1abb" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3264 - hash: "54f7f94b5cdf1becb2ee61d7f6f02c0e" + hash: "5381cde4763aa45c97793124e42db6f5" } Frame { msec: 3280 - hash: "de09380dd57c58ae99fbdba169a19975" + hash: "0f113c0263faa47428c4d16891ac4d4f" } Frame { msec: 3296 - hash: "bfc1b03df244839a012e8302dc07764f" + hash: "cc1767ec13803959333cd35bfb2d9119" } Frame { msec: 3312 - hash: "d5f220e5337837ec0d07eb118e2f948e" + hash: "ec1b4c71f9bd63ccf6d766b0b2f68b30" } Frame { msec: 3328 - hash: "7640c78a286b0b7bdf2ec9117ceced4a" + hash: "114ad78597ede2afc4dd8bafa1d4df21" } Frame { msec: 3344 - hash: "680f51f63c4b11a247a668eb7bbd2b62" + hash: "d08dc22ddc707316483f09b796ea0380" } Frame { msec: 3360 - hash: "de3c911aec7e42557ece4bdcf02ce562" + hash: "135b2b0f4e469b207e673d1e7086cd4f" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3376 - hash: "5e09b95292d6d0afe76a5015b0ccebf1" + hash: "4267354fe0d24597bdb5ee1a6e9affbb" } Frame { msec: 3392 - hash: "59d2fb8e21802d256b11730b31919fb3" + hash: "700bd56ecea646bbec2017007bbb5b84" } Frame { msec: 3408 - hash: "a494b3b25a23daa858034ebccce0d1c7" + hash: "874a65c2069f4ba89301c129f884f217" } Frame { msec: 3424 - hash: "2ff4bd5602c34c020162f0503d625049" + hash: "b5ec22f95abb43c83533f7dc606667f6" } Frame { msec: 3440 - hash: "e715c2a82745829665226df78598b819" + hash: "445de6663e80d1fe1527ec5acf4ec1de" } Frame { msec: 3456 - hash: "47ad557d366536ad457f6866241dba93" + hash: "87c129a5bf08536d3fca90375283e26b" } Frame { msec: 3472 - hash: "70aedcda6c93875d18ee111d8a19549e" + hash: "a63e2438a9cd412c2b119cd42b11009f" } Frame { msec: 3488 - hash: "c3487c7c7dcd392e7eacb74045dd4143" + hash: "61a3475bef5fd276b836cf3483526f57" } Frame { msec: 3504 - hash: "56db24ad686d34e75a2d184e5b1da2a9" + hash: "097ab9a1a1fe9743f162f57b93599fe7" + } + Key { + type: 7 + key: 16777249 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 3520 - hash: "436349a8371597a74404428983cd894c" + hash: "ebae1fb540c6ff6b0bc9a951391e2e94" } Frame { msec: 3536 - hash: "6e1bb59ec518614a0414092f4939d5ad" + hash: "ffc2da2e4c091eadaa9746b42b56d9e4" + } + Key { + type: 7 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 3552 - hash: "f0aa02772df579b921e0c68f794d2327" + hash: "f243d823fc9977e69a008010d8db8a01" } Frame { msec: 3568 - hash: "09ea1462da333c2aeaaa01e9e4f8d54b" + hash: "592ac5bbf1c4b3a360be4d76c40a2be2" } Frame { msec: 3584 - hash: "46d23d8472ce833591dcff548a644288" + hash: "bd5b206097f30dfce884a8c74856857d" } Frame { msec: 3600 - hash: "a7566d5d35a89078bb378bf3f6c78e13" + hash: "f14ec1544a380fc9993b39754c23c2f4" } Frame { msec: 3616 - hash: "4c5f7155b20e34a5627387cdc466e890" + hash: "836f37fe92a46233640e0bd2c0932fea" } Frame { msec: 3632 - hash: "e9b98922327c412db0116a56283d3c86" + hash: "062091bc7a5f3296c669614318b80fe7" } Frame { msec: 3648 - hash: "29ffede9c16c34ead5f291e69e388084" + hash: "5b1b45e75f5a829b31c0b6eb0189da7c" } Frame { msec: 3664 - hash: "16958b8f0b1dbdc15333d99bd1349124" + hash: "1dddd18a4ef66df9d9b431b2860e24d1" } Frame { msec: 3680 - hash: "3408f8d6e4d6ef34d4d5a0cb51090c4c" + hash: "d6218c8bb4da9d62bdb5d0cf5d7f8e37" } Frame { msec: 3696 - hash: "b32b099b260789266d0a3c0edd61c04e" + hash: "236e54ae31e5ee3d08a7bc9aeaef0d9b" } Frame { msec: 3712 - hash: "4dd3617b25e8b95cf2ec31db8b3bb80f" + hash: "585ad3efb7330de889b8cf56a51a0899" } Frame { msec: 3728 - hash: "46b42a08c59909f067810d1984f7a04e" + hash: "c0eb56c72311263d892ce65331547531" } Frame { msec: 3744 - hash: "ab8c505601c381e8a44fa7b6eea6579d" + hash: "a2e1dea5e5f37697c7ce1a9419b94f65" } Frame { msec: 3760 - hash: "73f56e6e1d2cbf3f559d679eb2c15529" + hash: "718ac9cb5ef2992b06b34e957f987b7a" } Frame { msec: 3776 - hash: "b230c56da330823d7d7f7e081c304acb" + hash: "ae2a644f96bd7b2662ebcf4ebc33d930" } Frame { msec: 3792 - hash: "9f3cbd0023dbd78ba4951c26f71c7d5d" + hash: "54d04e64af5c0a3d29f2dc8c0977ed3a" } Frame { msec: 3808 - hash: "9e9b11cf2695dd02c1ab175ff194f491" + hash: "8210b9cbf19f519ee34f4bb1a6afce16" } Frame { msec: 3824 - hash: "8fa6f8eb5deb0ab95c3454e5812ada1d" + hash: "e83642b0793f5a790efca65ccf20a720" } Frame { msec: 3840 @@ -1110,271 +1270,239 @@ VisualTest { } Frame { msec: 3856 - hash: "0b6b24ae8df7c3aa9abb48edb6619d8a" + hash: "520a544fd92f17a14380803e253b396f" } Frame { msec: 3872 - hash: "45805295dd2482fdf21ac8c9bfe47869" + hash: "0ac33070e0c736bc0fb5ab12fa444b5c" } Frame { msec: 3888 - hash: "4893cd31a730d786f075edfd0afc0ad9" + hash: "5ee8c9dc7b238db131b3a078e46a8bbd" } Frame { msec: 3904 - hash: "a3fbfe732568f5cf6e63809fd7e0c32e" + hash: "69720bcca91f99f229aebc74c5e74261" } Frame { msec: 3920 - hash: "21d3327710d51f714e84b5a28df13e4f" + hash: "41d8f4031223f7c833d50208e231964a" } Frame { msec: 3936 - hash: "ea065ab48f27f60505eab36debee3faa" + hash: "6fa8fd3252f367f3fafea4e3c7317a48" } Frame { msec: 3952 - hash: "fe4c2e368d2110374b7ba9e30f330713" + hash: "8a1b63c42867f87a1cf4b47944b3860a" } Frame { msec: 3968 - hash: "723281f6c1a3f03cf170e4de93fa4dbf" + hash: "8c6052eb4cf03d7742a73874d9f15285" } Frame { msec: 3984 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4000 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4016 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4032 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4048 - hash: "e3948b393a3778066a90197b31c71e51" + hash: "7bae45481596788afde8866a3c97edd7" } Frame { msec: 4064 - hash: "723281f6c1a3f03cf170e4de93fa4dbf" - } - Key { - type: 6 - key: 16777232 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "8c6052eb4cf03d7742a73874d9f15285" } Frame { msec: 4080 - hash: "c779e46a89c3c9d0f8234a3192175b60" + hash: "8a1b63c42867f87a1cf4b47944b3860a" } Frame { msec: 4096 - hash: "f223cfeba468e161943b24ac960196de" + hash: "6fa8fd3252f367f3fafea4e3c7317a48" } Frame { msec: 4112 - hash: "dd2f21f063d055edc23c874380149067" + hash: "41d8f4031223f7c833d50208e231964a" } Frame { msec: 4128 - hash: "af580b32b67117eb062bbcefe262c719" - } - Key { - type: 7 - key: 16777232 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "69720bcca91f99f229aebc74c5e74261" } Frame { msec: 4144 - hash: "991f76d483e033024932790f85bb3c5d" + hash: "5ee8c9dc7b238db131b3a078e46a8bbd" } Frame { msec: 4160 - hash: "3d8aa66ab9533d14a468f0869b457033" + hash: "0ac33070e0c736bc0fb5ab12fa444b5c" } Frame { msec: 4176 - hash: "a5540bd5d088ab1201b5f22b32579d7c" + hash: "520a544fd92f17a14380803e253b396f" } Frame { msec: 4192 - hash: "e0844f30578fef2cdcee4e4ff28ab7cf" + hash: "4a080a5154c517e6bcf24b3a1f1d7f2c" } Frame { msec: 4208 - hash: "710e7022b65a9b3fd3a7372bf7f37c7a" + hash: "e83642b0793f5a790efca65ccf20a720" } Frame { msec: 4224 - hash: "db553c856b11db7e6feb38b9d562a804" + hash: "8210b9cbf19f519ee34f4bb1a6afce16" } Frame { msec: 4240 - hash: "6ba56c4ec6e903b0d82235c230ed78cb" + hash: "54d04e64af5c0a3d29f2dc8c0977ed3a" } Frame { msec: 4256 - hash: "786de35a11c3fc1a228392195f509c28" + hash: "ae2a644f96bd7b2662ebcf4ebc33d930" } Frame { msec: 4272 - hash: "cc6307597cea821b63391fc9bdbe038b" + hash: "718ac9cb5ef2992b06b34e957f987b7a" } Frame { msec: 4288 - hash: "73d49e4d0bef103e11820d888bef0368" + hash: "a2e1dea5e5f37697c7ce1a9419b94f65" } Frame { msec: 4304 - hash: "b2ed6ebf66252463326c2f220b3992fa" + hash: "c0eb56c72311263d892ce65331547531" } Frame { msec: 4320 - hash: "129b5bc6d55621e2366fc0d80f105df2" + hash: "585ad3efb7330de889b8cf56a51a0899" } Frame { msec: 4336 - hash: "ae8fe55fa9b497cd6eff18a517c301d8" + hash: "236e54ae31e5ee3d08a7bc9aeaef0d9b" } Frame { msec: 4352 - hash: "535210bd848a20db2966b06278198e07" + hash: "d6218c8bb4da9d62bdb5d0cf5d7f8e37" } Frame { msec: 4368 - hash: "1f4ea7783b5c60bfc424c73cea07a3a0" + hash: "1dddd18a4ef66df9d9b431b2860e24d1" } Frame { msec: 4384 - hash: "5b61f2e9308c4de2864bb7cf133ce545" + hash: "5b1b45e75f5a829b31c0b6eb0189da7c" } Frame { msec: 4400 - hash: "f641f87e9556ecfd24f0f0a772295e52" + hash: "062091bc7a5f3296c669614318b80fe7" } Frame { msec: 4416 - hash: "36f28574c0b042647bc064d75afa9fbc" + hash: "836f37fe92a46233640e0bd2c0932fea" } Frame { msec: 4432 - hash: "dba2ca165b8ab35113b8ec127b204ae9" + hash: "f14ec1544a380fc9993b39754c23c2f4" } Frame { msec: 4448 - hash: "56324b95f63eabba718df588159f374d" + hash: "bd5b206097f30dfce884a8c74856857d" } Frame { msec: 4464 - hash: "af65d67fef3c743e31acca03716040c4" + hash: "592ac5bbf1c4b3a360be4d76c40a2be2" } Frame { msec: 4480 - hash: "105481b5becd127af4c28961d900148c" + hash: "f243d823fc9977e69a008010d8db8a01" } Frame { msec: 4496 - hash: "4859d6bf9c456e52fd463e4c2f68d7f6" + hash: "ffc2da2e4c091eadaa9746b42b56d9e4" } Frame { msec: 4512 - hash: "21c0958bd3c6a1056bb062165c9bc18b" + hash: "ebae1fb540c6ff6b0bc9a951391e2e94" } Frame { msec: 4528 - hash: "287d258a79f45c26c92c69cce6b1a2f3" + hash: "097ab9a1a1fe9743f162f57b93599fe7" } Frame { msec: 4544 - hash: "deabc5c7dd111adcb253eb833f118764" + hash: "61a3475bef5fd276b836cf3483526f57" } Frame { msec: 4560 - hash: "4bad7380f6b645c551edbe06ff67cac9" + hash: "a63e2438a9cd412c2b119cd42b11009f" } Frame { msec: 4576 - hash: "67fc71c16d0b9405c35590bafdc5ea40" - } - Key { - type: 6 - key: 16777233 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "87c129a5bf08536d3fca90375283e26b" } Frame { msec: 4592 - hash: "7aed794eae2f0c65342f190ed4d4f889" + hash: "445de6663e80d1fe1527ec5acf4ec1de" } Frame { msec: 4608 - hash: "23edee3af8f1904558863d37c520555a" + hash: "b5ec22f95abb43c83533f7dc606667f6" } Frame { msec: 4624 - hash: "2f9ed13e8a0d0edf098b05db02c04bdf" - } - Key { - type: 7 - key: 16777233 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "874a65c2069f4ba89301c129f884f217" } Frame { msec: 4640 - hash: "86ed2aa2428feb9c6c14ad2a74e97978" + hash: "700bd56ecea646bbec2017007bbb5b84" } Frame { msec: 4656 - hash: "e189dc0dae9457a6af5082c6ccf451b6" + hash: "4267354fe0d24597bdb5ee1a6e9affbb" } Frame { msec: 4672 - hash: "62d4bfa65bfdc50d24d9204f4df7bad8" + hash: "135b2b0f4e469b207e673d1e7086cd4f" } Frame { msec: 4688 - hash: "5a11ec8a0485a018ebe317e01136e4a5" + hash: "d08dc22ddc707316483f09b796ea0380" } Frame { msec: 4704 - hash: "9aa569f7b251371bdd1cb05c8d3aab28" + hash: "114ad78597ede2afc4dd8bafa1d4df21" } Frame { msec: 4720 - hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e" + hash: "ec1b4c71f9bd63ccf6d766b0b2f68b30" } Frame { msec: 4736 - hash: "a0cb3f796fddf7100ca19aee3dedbea8" + hash: "cc1767ec13803959333cd35bfb2d9119" } Frame { msec: 4752 - hash: "b4e273b6415e3951eab2f831100b0bb2" + hash: "0f113c0263faa47428c4d16891ac4d4f" } Frame { msec: 4768 - hash: "fd3fd655785c4e3c470f742451e3470f" + hash: "5381cde4763aa45c97793124e42db6f5" } Frame { msec: 4784 - hash: "7a9b2057760e48d5f9cfdc79b08866d8" + hash: "99940d6744ac1245f82d62f08c371285" } Frame { msec: 4800 @@ -1382,1998 +1510,42 @@ VisualTest { } Frame { msec: 4816 - hash: "c6c90915393fc7cb0aaa464caefbadb0" + hash: "77bbed46c7eb023252cdd80d0a15f38a" } Frame { msec: 4832 - hash: "36b65658073ac2687dbd88ec7a408a98" + hash: "36ee4da72825e96d5f670c94865a30d8" } Frame { msec: 4848 - hash: "84e165f9f2c55c5c51a260b11ca195c2" + hash: "c64d56c1b7df0a5c63ab8ff08ae6daf9" } Frame { msec: 4864 - hash: "c11cfcfda6f161d058a3d9e93349b578" + hash: "942e038a3426fa318212a8f245141225" } Frame { msec: 4880 - hash: "0568f8c0e1fa51b7547790a7f4978ea3" + hash: "c033ebaee12dd8fe953e91160f986c3d" } Frame { msec: 4896 - hash: "b66fd97ac36ac395df74e9a0dd58d0c7" + hash: "07e64024cf7eda082297f6f83dba8067" } Frame { msec: 4912 - hash: "31b5b3d68e452ffd90e9804ff9e9a264" + hash: "b33cd5bbb90d435dd7ea3ab67bef88ee" } Frame { msec: 4928 - hash: "3cc8791e419986e1e913d4e153243fb2" + hash: "90712efd7c17b0ad33d2c2c02e9eaa97" } Frame { msec: 4944 - hash: "ff1b3ce85bc9f3dd3feb90fa31c3bc0a" + hash: "7e2e55555ee2c7e172e61ddb6365355d" } Frame { msec: 4960 - hash: "d3ae969e538c642d82662d08ef05964e" - } - Frame { - msec: 4976 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 4992 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 5008 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 5024 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 5040 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 5056 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 5072 - hash: "d3ae969e538c642d82662d08ef05964e" - } - Frame { - msec: 5088 - hash: "ff1b3ce85bc9f3dd3feb90fa31c3bc0a" - } - Frame { - msec: 5104 - hash: "3cc8791e419986e1e913d4e153243fb2" - } - Frame { - msec: 5120 - hash: "31b5b3d68e452ffd90e9804ff9e9a264" - } - Frame { - msec: 5136 - hash: "b66fd97ac36ac395df74e9a0dd58d0c7" - } - Frame { - msec: 5152 - hash: "0568f8c0e1fa51b7547790a7f4978ea3" - } - Frame { - msec: 5168 - hash: "c11cfcfda6f161d058a3d9e93349b578" - } - Frame { - msec: 5184 - hash: "84e165f9f2c55c5c51a260b11ca195c2" - } - Frame { - msec: 5200 - hash: "36b65658073ac2687dbd88ec7a408a98" - } - Frame { - msec: 5216 - hash: "c6c90915393fc7cb0aaa464caefbadb0" - } - Frame { - msec: 5232 - hash: "2a55b52db02d97963d382c9862307384" - } - Frame { - msec: 5248 - hash: "7a9b2057760e48d5f9cfdc79b08866d8" - } - Frame { - msec: 5264 - hash: "fd3fd655785c4e3c470f742451e3470f" - } - Frame { - msec: 5280 - hash: "b4e273b6415e3951eab2f831100b0bb2" - } - Frame { - msec: 5296 - hash: "a0cb3f796fddf7100ca19aee3dedbea8" - } - Frame { - msec: 5312 - hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e" - } - Frame { - msec: 5328 - hash: "9aa569f7b251371bdd1cb05c8d3aab28" - } - Frame { - msec: 5344 - hash: "5a11ec8a0485a018ebe317e01136e4a5" - } - Frame { - msec: 5360 - hash: "62d4bfa65bfdc50d24d9204f4df7bad8" - } - Frame { - msec: 5376 - hash: "e189dc0dae9457a6af5082c6ccf451b6" - } - Frame { - msec: 5392 - hash: "86ed2aa2428feb9c6c14ad2a74e97978" - } - Frame { - msec: 5408 - hash: "2f9ed13e8a0d0edf098b05db02c04bdf" - } - Frame { - msec: 5424 - hash: "23edee3af8f1904558863d37c520555a" - } - Frame { - msec: 5440 - hash: "7aed794eae2f0c65342f190ed4d4f889" - } - Frame { - msec: 5456 - hash: "0fa12b48c08266f50e77506e4136dd56" - } - Frame { - msec: 5472 - hash: "679ee2b26a118ab53a84fa116de09edf" - } - Frame { - msec: 5488 - hash: "b9dcdd88fba70636cbcae160edcc0136" - } - Frame { - msec: 5504 - hash: "90af75eeef63ae67e9f6ff1a61d7cca3" - } - Frame { - msec: 5520 - hash: "29d80ae32451c24b655c4d1fd01d3aa1" - } - Frame { - msec: 5536 - hash: "c73fe137644cbc006d0b5274b72faa46" - } - Frame { - msec: 5552 - hash: "8a4d76ae60f5d720a382cced2f6a2b5e" - } - Frame { - msec: 5568 - hash: "a1efa0d424d568d338c6db9fc095c2fb" - } - Frame { - msec: 5584 - hash: "205cafcabb29b78a6db3dcaf44a74ab6" - } - Frame { - msec: 5600 - hash: "7507a3d2158d4cc68454c85922526871" - } - Frame { - msec: 5616 - hash: "7135a6a7999e82cb81e39228805332ee" - } - Frame { - msec: 5632 - hash: "ac2b714b5f32d2b911f31690d7082dc1" - } - Frame { - msec: 5648 - hash: "5cb1ae6d86aafdf11284480c81b939dc" - } - Frame { - msec: 5664 - hash: "ac705840cc94eb4af7a52d62649d0157" - } - Frame { - msec: 5680 - hash: "8c2ebcd80e26ac7b9d25be486f54c4ce" - } - Frame { - msec: 5696 - hash: "12b84aa02dbbab3592d3eb3cb6884b41" - } - Frame { - msec: 5712 - hash: "675043ddde6ed65a3ec4ed093be1e760" - } - Frame { - msec: 5728 - hash: "478126aeef5ddae9c0a77d08294cf3f2" - } - Frame { - msec: 5744 - hash: "0b43af73d91a500ccdf27b4347b9bc47" - } - Frame { - msec: 5760 - image: "cursorDelegate.5.png" - } - Frame { - msec: 5776 - hash: "a6d8708d08bedf0cab5230d6f2936936" - } - Frame { - msec: 5792 - hash: "02e0646024aeef6f01b7541b15267baa" - } - Frame { - msec: 5808 - hash: "da6717c94b46ad7a647c445c06314b0d" - } - Frame { - msec: 5824 - hash: "2ed12d49d72884160ebbf6b6d0e15a9d" - } - Frame { - msec: 5840 - hash: "a1fbc3333b7f742a8336a6fcbad156c9" - } - Frame { - msec: 5856 - hash: "25cac33299d58cdd7775e8b75410085e" - } - Frame { - msec: 5872 - hash: "5d81833eb342f632945c0571e18cb1f9" - } - Frame { - msec: 5888 - hash: "23f6f2a7d971494af43a0fb97dbf8fb5" - } - Frame { - msec: 5904 - hash: "216b70d02a4685dc07258454bb4e7c85" - } - Frame { - msec: 5920 - hash: "1e06742af58d6e63facdc599c46e11b1" - } - Frame { - msec: 5936 - hash: "00f8ac72d3794ed8d66db987402ecde0" - } - Frame { - msec: 5952 - hash: "42ab5f162acba94f563823f5be1e37d2" - } - Frame { - msec: 5968 - hash: "3272b97fdc54eb9f3590e7bbe4ac457d" - } - Frame { - msec: 5984 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 6000 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 6016 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 6032 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 6048 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 6064 - hash: "3272b97fdc54eb9f3590e7bbe4ac457d" - } - Frame { - msec: 6080 - hash: "42ab5f162acba94f563823f5be1e37d2" - } - Frame { - msec: 6096 - hash: "00f8ac72d3794ed8d66db987402ecde0" - } - Frame { - msec: 6112 - hash: "1e06742af58d6e63facdc599c46e11b1" - } - Frame { - msec: 6128 - hash: "216b70d02a4685dc07258454bb4e7c85" - } - Frame { - msec: 6144 - hash: "23f6f2a7d971494af43a0fb97dbf8fb5" - } - Frame { - msec: 6160 - hash: "5d81833eb342f632945c0571e18cb1f9" - } - Frame { - msec: 6176 - hash: "25cac33299d58cdd7775e8b75410085e" - } - Frame { - msec: 6192 - hash: "a1fbc3333b7f742a8336a6fcbad156c9" - } - Frame { - msec: 6208 - hash: "2ed12d49d72884160ebbf6b6d0e15a9d" - } - Frame { - msec: 6224 - hash: "da6717c94b46ad7a647c445c06314b0d" - } - Frame { - msec: 6240 - hash: "02e0646024aeef6f01b7541b15267baa" - } - Frame { - msec: 6256 - hash: "a6d8708d08bedf0cab5230d6f2936936" - } - Frame { - msec: 6272 - hash: "68d459091a85f24ece39a207e395039b" - } - Frame { - msec: 6288 - hash: "0b43af73d91a500ccdf27b4347b9bc47" - } - Frame { - msec: 6304 - hash: "478126aeef5ddae9c0a77d08294cf3f2" - } - Frame { - msec: 6320 - hash: "675043ddde6ed65a3ec4ed093be1e760" - } - Frame { - msec: 6336 - hash: "12b84aa02dbbab3592d3eb3cb6884b41" - } - Frame { - msec: 6352 - hash: "8c2ebcd80e26ac7b9d25be486f54c4ce" - } - Frame { - msec: 6368 - hash: "ac705840cc94eb4af7a52d62649d0157" - } - Frame { - msec: 6384 - hash: "5cb1ae6d86aafdf11284480c81b939dc" - } - Frame { - msec: 6400 - hash: "ac2b714b5f32d2b911f31690d7082dc1" - } - Frame { - msec: 6416 - hash: "7135a6a7999e82cb81e39228805332ee" - } - Frame { - msec: 6432 - hash: "7507a3d2158d4cc68454c85922526871" - } - Frame { - msec: 6448 - hash: "205cafcabb29b78a6db3dcaf44a74ab6" - } - Frame { - msec: 6464 - hash: "a1efa0d424d568d338c6db9fc095c2fb" - } - Frame { - msec: 6480 - hash: "8a4d76ae60f5d720a382cced2f6a2b5e" - } - Frame { - msec: 6496 - hash: "c73fe137644cbc006d0b5274b72faa46" - } - Frame { - msec: 6512 - hash: "29d80ae32451c24b655c4d1fd01d3aa1" - } - Frame { - msec: 6528 - hash: "90af75eeef63ae67e9f6ff1a61d7cca3" - } - Frame { - msec: 6544 - hash: "b9dcdd88fba70636cbcae160edcc0136" - } - Frame { - msec: 6560 - hash: "679ee2b26a118ab53a84fa116de09edf" - } - Frame { - msec: 6576 - hash: "0fa12b48c08266f50e77506e4136dd56" - } - Frame { - msec: 6592 - hash: "7aed794eae2f0c65342f190ed4d4f889" - } - Frame { - msec: 6608 - hash: "23edee3af8f1904558863d37c520555a" - } - Frame { - msec: 6624 - hash: "2f9ed13e8a0d0edf098b05db02c04bdf" - } - Frame { - msec: 6640 - hash: "86ed2aa2428feb9c6c14ad2a74e97978" - } - Frame { - msec: 6656 - hash: "e189dc0dae9457a6af5082c6ccf451b6" - } - Frame { - msec: 6672 - hash: "62d4bfa65bfdc50d24d9204f4df7bad8" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 271; y: 89 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6688 - hash: "680f51f63c4b11a247a668eb7bbd2b62" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 271; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6704 - hash: "7640c78a286b0b7bdf2ec9117ceced4a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 271; y: 95 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 270; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6720 - image: "cursorDelegate.6.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 269; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6736 - hash: "bfc1b03df244839a012e8302dc07764f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 268; y: 107 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6752 - hash: "de09380dd57c58ae99fbdba169a19975" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 266; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6768 - hash: "54f7f94b5cdf1becb2ee61d7f6f02c0e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 266; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6784 - hash: "4220dde85eb1c027366efd0798927e8d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 265; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6800 - hash: "512b9746ae4482557b8cef9f99905954" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 263; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 261; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6816 - hash: "e7346d8f223684143a0940def878b874" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 259; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6832 - hash: "7e7382302681cd29a2c6959a3a704660" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 256; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6848 - hash: "ef8f7dfdd4e70100ecaecca4055d8f52" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 250; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 243; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6864 - hash: "f5cacabb78b88c31af1a1b1e6f60069b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 235; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6880 - hash: "b016ef2306b0a721df86b6916e7953e4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 227; y: 121 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6896 - hash: "a78e9b0b93569b77b0659c771336971a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 124 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 209; y: 126 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6912 - hash: "b957ab07bcbaeffca963d9148130a965" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 200; y: 126 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6928 - hash: "140bc4b078bac52d6903bdfdfc35a94c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 190; y: 127 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6944 - hash: "047c3a7403ae88cceb7fc875793d1ed8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 181; y: 127 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 172; y: 127 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6960 - hash: "03d48446aaf94450a3a9a8f1e956493f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 163; y: 127 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6976 - hash: "6672e47aa6a975fbd82d2fe5bc99bbaf" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 126 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6992 - hash: "3bc73489d06e446d4c96117756a59227" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 146; y: 124 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 138; y: 121 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7008 - hash: "aed995a61df4a1c189ef2962000d02de" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 130; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7024 - hash: "aed995a61df4a1c189ef2962000d02de" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 123; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7040 - hash: "74f0bbe92a23146fbdbd365edd5741c8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 118; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 114; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7056 - hash: "74f0bbe92a23146fbdbd365edd5741c8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 110; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7072 - hash: "6456208c6367687b8dc701791eccd7d4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 108; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7088 - hash: "376b59dc6e00a51bc9f2d4cfa2718e57" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 107; y: 117 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7104 - hash: "fb7bc3401f70ce6eee131c9c7510e1fe" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 105; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7120 - hash: "675a419f0cd8351d6b2a65daf7d2707a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 104; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7136 - hash: "2f7951abac64e0f10d3b66d04966b6e9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 117 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7152 - hash: "1f8daa78c58ae11ec105bd87681c1762" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7168 - hash: "23ab196ed43219c26d94431698f6ac8d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7184 - hash: "9581e2695f4818e063ec032cb5bb6b7f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7200 - hash: "6752cd7c5383e0ccc9b08f79db6ac310" - } - Frame { - msec: 7216 - hash: "51f5675e0fb1410c5a8ec03a86b42681" - } - Frame { - msec: 7232 - hash: "c3c23213b2649b5ccabd8e420a251e00" - } - Frame { - msec: 7248 - hash: "02ceab31171fe983a10e862b53aea16f" - } - Frame { - msec: 7264 - hash: "8a774dda9a1bc16bd270724e570daf20" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7280 - hash: "2b6b892cebfcce14a9db485fecf16703" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7296 - hash: "8b8e6d3362f018cbd9b487f03cfb7a22" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7312 - hash: "a8477a9429633384073618cc60841e6c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7328 - hash: "59558c6665b73f02809259e039b4423a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7344 - hash: "93540071bab8a970a929d209f628970e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 104; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 105; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7360 - hash: "78cdb0a05583150ea33040d32d95de47" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 107; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7376 - hash: "4b1ee34985d3f5b8dd4355678ad39af4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 110; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7392 - hash: "5484e7699c388eabf0311de49706397f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 113; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 117; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7408 - hash: "dee6c2380f398323002ebb43a38d27e8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 124; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7424 - hash: "d66a27728e7fd3c616842613a034c5a0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 131; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7440 - hash: "5f851161f99fcf5b67cbe008a3faf411" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 138; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7456 - hash: "013e949285cfa9edb34ab14e26753230" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 148; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7472 - hash: "5b50acdcbd49969bcce2cfab6f9af380" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 155; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7488 - hash: "d4aeb24211007cfc01512d289ae7aa01" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7504 - hash: "6f1b7e12bbf54586e9a48989145f3274" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 159; y: 116 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 162; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7520 - hash: "0e09c7468bc03770c6cc7f0fba1ee9c0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 163; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7536 - hash: "0fc4522bbf1a2e72002eb0a3c7224e1f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 165; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7552 - hash: "91727292aaa314bf263c618a577b7f74" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 166; y: 116 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 168; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7568 - hash: "a78fb2545d11c521a50a10fd2d1700a7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 171; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7584 - hash: "c207a291b47628921125acd4b8ed5ea8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 174; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7600 - hash: "9a8e3df504ba36e82c51d71a3f5ce268" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 177; y: 116 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7616 - hash: "8cd9da94db91da50ae457d41866a32ba" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 188; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7632 - hash: "9e52b6fdc3ce4ad9c5986e47ffa762fc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 193; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7648 - hash: "a1aff55bffb76bd4e2ac9ee482a03978" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 198; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 206; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7664 - hash: "ba52431b72683cfbf0cc795a2407630e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 209; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7680 - image: "cursorDelegate.7.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 211; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7696 - hash: "eb5a19fbfbdceef233ed3c86c782817c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7712 - hash: "7c8f3f2e96fa6a63867cb716061c8c77" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 213; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7728 - hash: "96b0007f857aa19b41d184a7c7931f69" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 214; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7744 - hash: "96201712b9ffbd9bfbebb5a5b7e23aba" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7760 - hash: "d75e13a7715d5c329a47fdb818dfdbe5" - } - Frame { - msec: 7776 - hash: "c8fa0c2d9e6aa1f3a33e76a31534359d" - } - Frame { - msec: 7792 - hash: "03b11cc517f84c58a681906fdda98347" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7808 - hash: "74cdf8af5d56216ad422951a56661536" - } - Frame { - msec: 7824 - hash: "fcac2575aad872eada547508f312f09c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7840 - hash: "7d76aec1f29d2d6745585be8ef113be5" - } - Frame { - msec: 7856 - hash: "2b4fe4f39433671a9bc440efa1c589a8" - } - Frame { - msec: 7872 - hash: "55a166f920e76173e14121d848a11aa0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7888 - hash: "f764df8ecd68161d3529800e922254f4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7904 - hash: "749caf21947e915b163f72e6fd190032" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7920 - hash: "c350910df8ae4fea573a20d334fd3401" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 217; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7936 - hash: "d177da450f1d380a6d2406e2393b9582" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 115 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 115 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7952 - hash: "bf3da78d7cac19daf2d5150b77840b1e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7968 - hash: "22e337b0b81b18045a205355da6981ad" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 220; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7984 - hash: "66c66927d2fc590fc43c146a403c1ccb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 221; y: 114 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 113 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8000 - hash: "66c66927d2fc590fc43c146a403c1ccb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 113 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8016 - hash: "66c66927d2fc590fc43c146a403c1ccb" - } - Frame { - msec: 8032 - hash: "66c66927d2fc590fc43c146a403c1ccb" - } - Frame { - msec: 8048 - hash: "66c66927d2fc590fc43c146a403c1ccb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8064 - hash: "22e337b0b81b18045a205355da6981ad" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8080 - hash: "bf3da78d7cac19daf2d5150b77840b1e" - } - Frame { - msec: 8096 - hash: "d177da450f1d380a6d2406e2393b9582" - } - Frame { - msec: 8112 - hash: "c350910df8ae4fea573a20d334fd3401" - } - Frame { - msec: 8128 - hash: "749caf21947e915b163f72e6fd190032" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 222; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8144 - hash: "f764df8ecd68161d3529800e922254f4" - } - Frame { - msec: 8160 - hash: "55a166f920e76173e14121d848a11aa0" - } - Frame { - msec: 8176 - hash: "2b4fe4f39433671a9bc440efa1c589a8" - } - Frame { - msec: 8192 - hash: "7d76aec1f29d2d6745585be8ef113be5" - } - Frame { - msec: 8208 - hash: "fcac2575aad872eada547508f312f09c" - } - Frame { - msec: 8224 - hash: "74cdf8af5d56216ad422951a56661536" - } - Frame { - msec: 8240 - hash: "03b11cc517f84c58a681906fdda98347" - } - Frame { - msec: 8256 - hash: "c8fa0c2d9e6aa1f3a33e76a31534359d" - } - Frame { - msec: 8272 - hash: "d75e13a7715d5c329a47fdb818dfdbe5" - } - Frame { - msec: 8288 - hash: "96201712b9ffbd9bfbebb5a5b7e23aba" - } - Frame { - msec: 8304 - hash: "96b0007f857aa19b41d184a7c7931f69" - } - Frame { - msec: 8320 - hash: "bff5b731de7c93fa0cdcefbf99beeb5e" - } - Frame { - msec: 8336 - hash: "ce76704964873be1bc6a324d8a3381be" - } - Frame { - msec: 8352 - hash: "a31b4f2a3defc968098029328de9352d" - } - Frame { - msec: 8368 - hash: "295e3f40a511bd30e1c6599ead93619a" - } - Frame { - msec: 8384 - hash: "3cd74da8b04de8ec7446490dea0e4e6c" - } - Frame { - msec: 8400 - hash: "78a7db5a316609136d1b873d20d5dd3e" - } - Frame { - msec: 8416 - hash: "0f176fb11bfe26f872ef7103011df9e6" - } - Frame { - msec: 8432 - hash: "47866013e79bc77607e0c40bf8457bed" - } - Frame { - msec: 8448 - hash: "5f35467db5c5e0baf5caff90b97e2d0c" - } - Frame { - msec: 8464 - hash: "fefa89763cc1ad8323fdf37b1f5f63d3" - } - Frame { - msec: 8480 - hash: "b9823f88fa51944075ce6dedd695f097" - } - Frame { - msec: 8496 - hash: "72521de21fcc57d6ccf16350b0df8eee" - } - Frame { - msec: 8512 - hash: "fcd591a2e56ba5efa95b315b7bd10532" - } - Frame { - msec: 8528 - hash: "5d437d59995741030e0975829712f85d" - } - Frame { - msec: 8544 - hash: "e7189d174b181985b6aef10b8642726f" - } - Frame { - msec: 8560 - hash: "cefadbae14e573f6c83d07ffc3a5152e" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 277; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8576 - hash: "0fa12b48c08266f50e77506e4136dd56" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 277; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8592 - hash: "7aed794eae2f0c65342f190ed4d4f889" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 276; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8608 - hash: "23edee3af8f1904558863d37c520555a" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 276; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8624 - hash: "2f9ed13e8a0d0edf098b05db02c04bdf" - } - Frame { - msec: 8640 - image: "cursorDelegate.8.png" - } - Frame { - msec: 8656 - hash: "e189dc0dae9457a6af5082c6ccf451b6" - } - Frame { - msec: 8672 - hash: "62d4bfa65bfdc50d24d9204f4df7bad8" - } - Frame { - msec: 8688 - hash: "5a11ec8a0485a018ebe317e01136e4a5" - } - Frame { - msec: 8704 - hash: "9aa569f7b251371bdd1cb05c8d3aab28" - } - Frame { - msec: 8720 - hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e" - } - Frame { - msec: 8736 - hash: "a0cb3f796fddf7100ca19aee3dedbea8" - } - Frame { - msec: 8752 - hash: "b4e273b6415e3951eab2f831100b0bb2" - } - Frame { - msec: 8768 - hash: "fd3fd655785c4e3c470f742451e3470f" - } - Frame { - msec: 8784 - hash: "7a9b2057760e48d5f9cfdc79b08866d8" - } - Frame { - msec: 8800 - hash: "2a55b52db02d97963d382c9862307384" - } - Frame { - msec: 8816 - hash: "c6c90915393fc7cb0aaa464caefbadb0" - } - Frame { - msec: 8832 - hash: "36b65658073ac2687dbd88ec7a408a98" - } - Frame { - msec: 8848 - hash: "84e165f9f2c55c5c51a260b11ca195c2" - } - Frame { - msec: 8864 - hash: "c11cfcfda6f161d058a3d9e93349b578" - } - Frame { - msec: 8880 - hash: "0568f8c0e1fa51b7547790a7f4978ea3" - } - Frame { - msec: 8896 - hash: "b66fd97ac36ac395df74e9a0dd58d0c7" - } - Frame { - msec: 8912 - hash: "31b5b3d68e452ffd90e9804ff9e9a264" - } - Frame { - msec: 8928 - hash: "3cc8791e419986e1e913d4e153243fb2" - } - Frame { - msec: 8944 - hash: "ff1b3ce85bc9f3dd3feb90fa31c3bc0a" - } - Frame { - msec: 8960 - hash: "d3ae969e538c642d82662d08ef05964e" - } - Frame { - msec: 8976 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 8992 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 9008 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 9024 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 9040 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 9056 - hash: "e3948b393a3778066a90197b31c71e51" - } - Frame { - msec: 9072 - hash: "d3ae969e538c642d82662d08ef05964e" - } - Frame { - msec: 9088 - hash: "ff1b3ce85bc9f3dd3feb90fa31c3bc0a" - } - Frame { - msec: 9104 - hash: "3cc8791e419986e1e913d4e153243fb2" - } - Frame { - msec: 9120 - hash: "31b5b3d68e452ffd90e9804ff9e9a264" - } - Frame { - msec: 9136 - hash: "b66fd97ac36ac395df74e9a0dd58d0c7" - } - Frame { - msec: 9152 - hash: "0568f8c0e1fa51b7547790a7f4978ea3" - } - Frame { - msec: 9168 - hash: "c11cfcfda6f161d058a3d9e93349b578" - } - Frame { - msec: 9184 - hash: "84e165f9f2c55c5c51a260b11ca195c2" - } - Frame { - msec: 9200 - hash: "36b65658073ac2687dbd88ec7a408a98" - } - Frame { - msec: 9216 - hash: "c6c90915393fc7cb0aaa464caefbadb0" - } - Frame { - msec: 9232 - hash: "2a55b52db02d97963d382c9862307384" - } - Frame { - msec: 9248 - hash: "7a9b2057760e48d5f9cfdc79b08866d8" - } - Frame { - msec: 9264 - hash: "fd3fd655785c4e3c470f742451e3470f" - } - Frame { - msec: 9280 - hash: "b4e273b6415e3951eab2f831100b0bb2" - } - Frame { - msec: 9296 - hash: "a0cb3f796fddf7100ca19aee3dedbea8" - } - Frame { - msec: 9312 - hash: "a242c9d5ed7f9aef0a0622dcb66d0a7e" - } - Frame { - msec: 9328 - hash: "9aa569f7b251371bdd1cb05c8d3aab28" - } - Frame { - msec: 9344 - hash: "5a11ec8a0485a018ebe317e01136e4a5" - } - Frame { - msec: 9360 - hash: "62d4bfa65bfdc50d24d9204f4df7bad8" - } - Frame { - msec: 9376 - hash: "e189dc0dae9457a6af5082c6ccf451b6" - } - Frame { - msec: 9392 - hash: "86ed2aa2428feb9c6c14ad2a74e97978" - } - Frame { - msec: 9408 - hash: "2f9ed13e8a0d0edf098b05db02c04bdf" - } - Frame { - msec: 9424 - hash: "23edee3af8f1904558863d37c520555a" + hash: "87ca0584879b25336a1023ac3252fc9a" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.0.png deleted file mode 100644 index 2b45a06..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.1.png deleted file mode 100644 index 1f5bae0..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.2.png deleted file mode 100644 index cb2b5a4..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.3.png deleted file mode 100644 index aa24805..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.4.png deleted file mode 100644 index aa24805..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/echoMode.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/hAlign.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/hAlign.0.png deleted file mode 100644 index 87c2e07..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data/hAlign.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/hAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/hAlign.qml index 17e13fd..cf29f7c 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/hAlign.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/hAlign.qml @@ -4,6 +4,7 @@ Item{ width:600; height:300; Column{ + //Because they have auto width, these three should look the same TextInput{ text: "Jackdaws love my big sphinx of quartz"; horizontalAlignment: TextInput.AlignLeft; -- cgit v0.12 From b4a697c6c9f7dd879c5b0a8499af8bb472025b71 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Thu, 28 Oct 2010 19:12:25 +1000 Subject: Clean up package views visual test Shorten duration and remove the element of flicking (not under test). Task-number: QTBUG-14792 --- .../Package_Views/data/packageviews.0.png | Bin 714 -> 797 bytes .../Package_Views/data/packageviews.1.png | Bin 798 -> 794 bytes .../Package_Views/data/packageviews.10.png | Bin 773 -> 0 bytes .../Package_Views/data/packageviews.11.png | Bin 773 -> 0 bytes .../Package_Views/data/packageviews.12.png | Bin 754 -> 0 bytes .../Package_Views/data/packageviews.13.png | Bin 742 -> 0 bytes .../Package_Views/data/packageviews.14.png | Bin 733 -> 0 bytes .../Package_Views/data/packageviews.15.png | Bin 712 -> 0 bytes .../Package_Views/data/packageviews.16.png | Bin 730 -> 0 bytes .../Package_Views/data/packageviews.17.png | Bin 730 -> 0 bytes .../Package_Views/data/packageviews.18.png | Bin 730 -> 0 bytes .../Package_Views/data/packageviews.19.png | Bin 744 -> 0 bytes .../Package_Views/data/packageviews.2.png | Bin 757 -> 817 bytes .../Package_Views/data/packageviews.20.png | Bin 754 -> 0 bytes .../Package_Views/data/packageviews.21.png | Bin 721 -> 0 bytes .../Package_Views/data/packageviews.22.png | Bin 732 -> 0 bytes .../Package_Views/data/packageviews.3.png | Bin 813 -> 796 bytes .../Package_Views/data/packageviews.4.png | Bin 756 -> 805 bytes .../Package_Views/data/packageviews.5.png | Bin 752 -> 774 bytes .../Package_Views/data/packageviews.6.png | Bin 752 -> 0 bytes .../Package_Views/data/packageviews.7.png | Bin 774 -> 0 bytes .../Package_Views/data/packageviews.8.png | Bin 774 -> 0 bytes .../Package_Views/data/packageviews.9.png | Bin 754 -> 0 bytes .../qmlvisual/Package_Views/data/packageviews.qml | 3182 ++++---------------- .../qmlvisual/Package_Views/packageviews.qml | 16 +- 25 files changed, 603 insertions(+), 2595 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png delete mode 100644 tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png index c59b816..f94e879 100644 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.0.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png index d4dbc70..521e818 100644 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.1.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png deleted file mode 100644 index ed9d345..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.10.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png deleted file mode 100644 index ed9d345..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.11.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png deleted file mode 100644 index 45ee400..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.12.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png deleted file mode 100644 index c73e158..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.13.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png deleted file mode 100644 index e2fff6d..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.14.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png deleted file mode 100644 index d7a13df..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.15.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png deleted file mode 100644 index beb3094..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.16.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png deleted file mode 100644 index beb3094..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.17.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png deleted file mode 100644 index beb3094..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.18.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png deleted file mode 100644 index d3a2650..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.19.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png index a09dd28..645abf8 100644 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.2.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png deleted file mode 100644 index 600462a..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.20.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png deleted file mode 100644 index 6defca0..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.21.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png deleted file mode 100644 index 91967e1..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.22.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png index d099a79..517331a 100644 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.3.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png index 385efc8..806063f 100644 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.4.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png index 25a7c3c..8dfcf7b 100644 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png and b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.5.png differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png deleted file mode 100644 index 25a7c3c..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png deleted file mode 100644 index 7a24f51..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png deleted file mode 100644 index 7a24f51..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png deleted file mode 100644 index 45ee400..0000000 Binary files a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml index 08cb46b..1804382 100644 --- a/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml +++ b/tests/auto/declarative/qmlvisual/Package_Views/data/packageviews.qml @@ -6,239 +6,255 @@ VisualTest { } Frame { msec: 16 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 32 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 48 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 64 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 80 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 96 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 112 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 128 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 144 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 160 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 176 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 192 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 208 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 224 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 240 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 256 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 272 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 288 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 304 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 320 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 336 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 352 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 368 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 384 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 400 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 416 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 432 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 448 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 464 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 480 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 496 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 512 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 528 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 544 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 560 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 576 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 592 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 608 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 624 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 640 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 656 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 672 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 688 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 704 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 720 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 736 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 752 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 768 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 784 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 26; y: 79 + modifiers: 0 + sendToViewport: true } Frame { msec: 800 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 816 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 832 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 848 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 26; y: 79 + modifiers: 0 + sendToViewport: true } Frame { msec: 864 - hash: "a327426c93b523526f993b5271ab4501" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 880 - hash: "a327426c93b523526f993b5271ab4501" + hash: "ae75402b2fa678a20c32d743e2b297a0" } Frame { msec: 896 - hash: "a327426c93b523526f993b5271ab4501" + hash: "76a9721ada8280925ff32e7207c01944" } Frame { msec: 912 - hash: "a327426c93b523526f993b5271ab4501" + hash: "87fb13adce4e2af05a7ad2f8cd18bad9" } Frame { msec: 928 - hash: "a327426c93b523526f993b5271ab4501" + hash: "cd7be3a5b9bae876998770dc52dbcd86" } Frame { msec: 944 - hash: "a327426c93b523526f993b5271ab4501" + hash: "3ba0b907dad0bfa9b20337d41661030b" } Frame { msec: 960 @@ -246,319 +262,271 @@ VisualTest { } Frame { msec: 976 - hash: "a327426c93b523526f993b5271ab4501" + hash: "856cbf02e052f9b08a02608128af818d" } Frame { msec: 992 - hash: "a327426c93b523526f993b5271ab4501" + hash: "5af677254d12dc96b82cde90c5a65140" } Frame { msec: 1008 - hash: "a327426c93b523526f993b5271ab4501" + hash: "72cb4e75acb87de293a3cb1872eb946b" } Frame { msec: 1024 - hash: "a327426c93b523526f993b5271ab4501" + hash: "9b057090349c0c544036a33a60710920" } Frame { msec: 1040 - hash: "a327426c93b523526f993b5271ab4501" + hash: "ae19cf81092e75979b6471c0b05541cf" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 48; y: 165 + modifiers: 0 + sendToViewport: true } Frame { msec: 1056 - hash: "a327426c93b523526f993b5271ab4501" + hash: "0f42c19fee319bc8c27a89e9692c5cd9" } Frame { msec: 1072 - hash: "a327426c93b523526f993b5271ab4501" + hash: "865e19e35f361b08e6e844aa88d149eb" } Frame { msec: 1088 - hash: "a327426c93b523526f993b5271ab4501" + hash: "d5fcf7bd78da8918a3512a76189c7202" } Frame { msec: 1104 - hash: "a327426c93b523526f993b5271ab4501" + hash: "d2a6b42c2a3f7ca9eb35acc47f1faaf6" } Frame { msec: 1120 - hash: "a327426c93b523526f993b5271ab4501" + hash: "1388e856eb04fc24091c94406f4b5118" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 48; y: 165 + modifiers: 0 + sendToViewport: true } Frame { msec: 1136 - hash: "a327426c93b523526f993b5271ab4501" + hash: "1388e856eb04fc24091c94406f4b5118" } Frame { msec: 1152 - hash: "a327426c93b523526f993b5271ab4501" + hash: "d529b6dcf510392488b370f6cfb87b3c" } Frame { msec: 1168 - hash: "a327426c93b523526f993b5271ab4501" + hash: "a50b1f2869c95f97a194a95581fa7be9" } Frame { msec: 1184 - hash: "a327426c93b523526f993b5271ab4501" + hash: "4bbee959f95548c3e76fb60ad363c184" } Frame { msec: 1200 - hash: "a327426c93b523526f993b5271ab4501" + hash: "5ec0185f4479377579822f92eb7f375a" } Frame { msec: 1216 - hash: "a327426c93b523526f993b5271ab4501" + hash: "263d09b9447d942c6c048139164d4427" } Frame { msec: 1232 - hash: "a327426c93b523526f993b5271ab4501" + hash: "291cc81fc3f82bca46db4e4403f39d49" } Frame { msec: 1248 - hash: "a327426c93b523526f993b5271ab4501" + hash: "c212f98ededa9ce7fc0fec697116a8e2" } Frame { msec: 1264 - hash: "a327426c93b523526f993b5271ab4501" + hash: "4309ef22d0c36d28a462ab2d4bf2cabd" } Frame { msec: 1280 - hash: "a327426c93b523526f993b5271ab4501" + hash: "f899f861c569416708c6754d821239e9" } Frame { msec: 1296 - hash: "a327426c93b523526f993b5271ab4501" + hash: "ed5ec237020ff06f258ce6e1b31e5eb8" } Frame { msec: 1312 - hash: "a327426c93b523526f993b5271ab4501" + hash: "98f3fe1c211d4f7bdc47b4a485226f14" } Frame { msec: 1328 - hash: "a327426c93b523526f993b5271ab4501" + hash: "40e376d37a85d225c46579b8f7c27159" } Frame { msec: 1344 - hash: "a327426c93b523526f993b5271ab4501" + hash: "cc8a178bf0cfc285185d17b37722bf41" } Frame { msec: 1360 - hash: "a327426c93b523526f993b5271ab4501" + hash: "b612439873d0eeb015d31cccd8e5a436" } Frame { msec: 1376 - hash: "a327426c93b523526f993b5271ab4501" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 57; y: 164 - modifiers: 0 - sendToViewport: true + hash: "48c436165872098b474d0c691df11473" } Frame { msec: 1392 - hash: "a327426c93b523526f993b5271ab4501" + hash: "48c436165872098b474d0c691df11473" } Mouse { - type: 5 - button: 0 + type: 2 + button: 1 buttons: 1 - x: 57; y: 162 + x: 44; y: 50 modifiers: 0 sendToViewport: true } Frame { msec: 1408 - hash: "a327426c93b523526f993b5271ab4501" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 57; y: 159 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 57; y: 156 - modifiers: 0 - sendToViewport: true + hash: "48c436165872098b474d0c691df11473" } Frame { msec: 1424 - hash: "a327426c93b523526f993b5271ab4501" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 56; y: 152 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 56; y: 147 - modifiers: 0 - sendToViewport: true + hash: "48c436165872098b474d0c691df11473" } Frame { msec: 1440 - hash: "87b7cacfb2d9e8ad916e331b2cf1f13e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 55; y: 141 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 54; y: 133 - modifiers: 0 - sendToViewport: true + hash: "48c436165872098b474d0c691df11473" } Frame { msec: 1456 - hash: "34290c1435c1a96d08152479d2d1334e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 54; y: 126 - modifiers: 0 - sendToViewport: true + hash: "48c436165872098b474d0c691df11473" } Mouse { type: 3 button: 1 buttons: 0 - x: 54; y: 126 + x: 44; y: 50 modifiers: 0 sendToViewport: true } Frame { msec: 1472 - hash: "ef5fb09ec8fb4b0d97c864618d6f6231" + hash: "48c436165872098b474d0c691df11473" } Frame { msec: 1488 - hash: "d5b4c2e1d4b0bc877c99739a67b4a4fb" + hash: "33cb50c11326c0589c7cc43ba6193e03" } Frame { msec: 1504 - hash: "a3623a3f253590d51ee03b6849e88edb" + hash: "3f7e7534ccd7105762c78afab5ab997d" } Frame { msec: 1520 - hash: "4c1115f1041629b7c37cf4ae001fd7d3" + hash: "53b23d3eb2aaa1b21e4abaf9c0bfc7f2" } Frame { msec: 1536 - hash: "845bb3d1f52bee4a469fb12d6875a323" + hash: "609b37b12154291a28961210e81049fb" } Frame { msec: 1552 - hash: "eb08b5a671149005dbafc8507bb78b18" + hash: "33cc6e17d087c251381ecf1b4cb9887c" } Frame { msec: 1568 - hash: "16744a5b90b29954faf0710010ac6369" + hash: "dcb3e716035ca3f43895fda99c27e0d8" } Frame { msec: 1584 - hash: "322bbe367fbbf0bf07f9153da652a5fc" + hash: "56bb753199873fac4ed9f30682bd1a3c" } Frame { msec: 1600 - hash: "257769f7c3e24bb2d0cd674dfbe42913" + hash: "8b744c5cbf6154b73bd6c4fe6b087f0a" } Frame { msec: 1616 - hash: "8e299cbcaeae4d53d0fc05e03d36e0d9" + hash: "f2d5996d7fd5391a4d96493e9ef6a637" } Frame { msec: 1632 - hash: "f3fb7f30336045abb4557247aab5bde1" + hash: "4407a05b64c68d43b29124df1f0d8f44" } Frame { msec: 1648 - hash: "468400fb4e9bfa454ea00f19aa5d77b5" + hash: "b71e43a8f7aa7a58cea80629b782a972" } Frame { msec: 1664 - hash: "429cc820ada7a515b2cb71f133320949" + hash: "cca961a04dfdf9da8282219f2022fd2e" } Frame { msec: 1680 - hash: "721ec7594d8f815e5648eb8d570d1179" + hash: "f3349a7ae7d7a97a6665476244d46dd6" } Frame { msec: 1696 - hash: "9bc4105a0456c36738c435323e690db1" + hash: "78fc6123a10c027faa08dc2ff8318acc" } Frame { msec: 1712 - hash: "e54a84718dbdc45dd814089051772585" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1728 - hash: "2c969450ede6b6ea7e0e68ee54d02aaa" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1744 - hash: "c2015dd1d4bd223a7fe1df03027af2f3" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1760 - hash: "74108fedfb0967adea181893834bcd9b" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1776 - hash: "b04a22f1cfde6ede57117992cd97dc1c" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1792 - hash: "271d71cb03dd38100812466a973b79ef" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1808 - hash: "130709eecd8eca395085020a83e7553a" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1824 - hash: "a0e5e187ed5245fd766803d266195e6b" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1840 - hash: "d29c145f3ba39a7c2c6ac54b27f9cea1" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1856 - hash: "6e41349b4adb6e37a2f9f2482c0aa5b1" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1872 - hash: "c02c52d3c87c6befb65f3bf392981cd5" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1888 - hash: "ec48d113c8468bd1e1b465e248eecaee" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1904 - hash: "a2c9b917d1f0cff0e088d3b624d9eeb8" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1920 @@ -566,255 +534,287 @@ VisualTest { } Frame { msec: 1936 - hash: "c4d4f8a351316b4a33f42f5fb030f304" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1952 - hash: "1baee6be1da687309d84a992e430c915" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1968 - hash: "4245f02817f7a674c34c581cbd9e1181" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 1984 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "6056cb02b921b56c63696d7fe9fe90fa" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 181; y: 76 + modifiers: 0 + sendToViewport: true } Frame { msec: 2000 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 2016 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "6056cb02b921b56c63696d7fe9fe90fa" } Frame { msec: 2032 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "6056cb02b921b56c63696d7fe9fe90fa" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 181; y: 76 + modifiers: 0 + sendToViewport: true } Frame { msec: 2048 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "9f94c38547da1855e4bd3ae498aed705" } Frame { msec: 2064 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "783f73da3736a2c554c8d749ce0522c0" } Frame { msec: 2080 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "9a0e1c2bed75874381e4b1ce275d0f68" } Frame { msec: 2096 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "e2ce85192977e6422c89190b3cea4518" } Frame { msec: 2112 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "ba9c80ff0ed723bca702cb6b4c6dfb76" } Frame { msec: 2128 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "7e194db1b86bc7346248d2acf34af286" } Frame { msec: 2144 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "cdd013bb8ee5880b16449efc99dd3ae5" } Frame { msec: 2160 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "3ef7d0fb43c2a1c1398f1152573974e0" } Frame { msec: 2176 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "176d1a86257cc85315dac4ecfe33f543" } Frame { msec: 2192 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "6def1267e573217a19e7b8e2cf6d7b6c" } Frame { msec: 2208 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "f679db34d99e24cda2e41c2afeaf551e" } Frame { msec: 2224 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "54a27193c5e59cd7220b65d8fbbd9061" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 112; y: 79 + modifiers: 0 + sendToViewport: true } Frame { msec: 2240 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "171db3d0bf50062a0d7edd8e4c174024" } Frame { msec: 2256 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "9a7d293dc455e1ef0d18f44c3db7eed7" } Frame { msec: 2272 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "83bef2586d5abeb0ac8765d62135d308" } Frame { msec: 2288 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "56fed2e01cc8a6b9ccbf15731d4e533b" + } + Frame { + msec: 2304 + hash: "10174f2574c51155b8ee77ae545ac76d" } Mouse { - type: 2 + type: 3 button: 1 - buttons: 1 - x: 70; y: 89 + buttons: 0 + x: 112; y: 79 modifiers: 0 sendToViewport: true } Frame { - msec: 2304 - hash: "2fa6bb20f29467713c94886c6fffe5e3" - } - Frame { msec: 2320 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "107928ffebd936080325a1f4e39a0ac0" } Frame { msec: 2336 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "107928ffebd936080325a1f4e39a0ac0" } Frame { msec: 2352 - hash: "2fa6bb20f29467713c94886c6fffe5e3" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 70; y: 89 - modifiers: 0 - sendToViewport: true + hash: "d46e040f85295e66d8b22185be553d3e" } Frame { msec: 2368 - hash: "2fa6bb20f29467713c94886c6fffe5e3" + hash: "3368a34c316486a779d62d143588b425" } Frame { msec: 2384 - hash: "3b9a75225adddb01e92286463e15bf98" + hash: "8f4cd4223c05e1b06a688c5eabc2a854" } Frame { msec: 2400 - hash: "32f99602756898b4ec607d4124b5120f" + hash: "b576bf54b4bae38e8af6d922b3c73463" } Frame { msec: 2416 - hash: "60007f14752d2d87ba6e335ad596f1ad" + hash: "a3a238f5bf182ec6afc398569fd51ac7" } Frame { msec: 2432 - hash: "dcfad2407f53f83964fa7be762a137bd" + hash: "a31329ba054a6fe144c030cffb5bd401" } Frame { msec: 2448 - hash: "fcc1a30a33bec046868734014132eb70" + hash: "0a4b96a93e62359b6003daa703af1a5f" } Frame { msec: 2464 - hash: "f60592829a2765b3cd3a0cecb9c45426" + hash: "a16f126d874d957b879f45d36e88df34" } Frame { msec: 2480 - hash: "a0e26063acd1b53b5eeeb31187f38336" + hash: "89735c5b14f075b8f65533d16b3f714a" } Frame { msec: 2496 - hash: "d7f3e776038bd479db292bcba3a65fc7" + hash: "5d67dac0c4d2cf60e4cb717f4e4bc25f" } Frame { msec: 2512 - hash: "4af31954235ab8a7cf8462eaa64d7dda" + hash: "dbfcc86e621a140466dd2a9215087e81" } Frame { msec: 2528 - hash: "aff3f287c07f546e0d3e9e68731d82fe" + hash: "9f8dfa788048466dc07463e83d0377ff" } Frame { msec: 2544 - hash: "75fbc4e26466e8a1f66503addfcbb525" + hash: "021e1edec94a1909790a4acdbbc71fd8" } Frame { msec: 2560 - hash: "cb4c91f725ec46dd066475efc2bc2d65" + hash: "f16be9ff4aba07708d469d6cfb80f1c2" } Frame { msec: 2576 - hash: "106434203ccc2fd8246c56520095a473" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2592 - hash: "129ced0e7fc406e81b1ced72397adc5c" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2608 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2624 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2640 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2656 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2672 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2688 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2704 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2720 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2736 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 116; y: 165 + modifiers: 0 + sendToViewport: true } Frame { msec: 2752 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2768 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2784 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" } Frame { msec: 2800 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1ab35df24a27349264ec282eb1f53018" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 116; y: 165 + modifiers: 0 + sendToViewport: true } Frame { msec: 2816 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "a0aa5583886efc9bb0571bbb02fdb051" } Frame { msec: 2832 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "a0aa5583886efc9bb0571bbb02fdb051" } Frame { msec: 2848 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "edec25fdce2e05c0456434be4b8fad84" } Frame { msec: 2864 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "0c2061fc908c98980404b9e08acdc2f2" } Frame { msec: 2880 @@ -822,311 +822,295 @@ VisualTest { } Frame { msec: 2896 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "80eba5bc28e88ab12e195555f76bef1c" } Frame { msec: 2912 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "3a80012f6ca448fc30db70e9bcb23ddc" } Frame { msec: 2928 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "22a68838e9f6039e782facce7cfe0c9b" } Frame { msec: 2944 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "243fcc73e46db96ab6a91748adeff1a9" } Frame { msec: 2960 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "433bf03a821da5641909785b4c22cb55" } Frame { msec: 2976 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "66be8aa73b1e7173d899df3c0b9072a6" } Frame { msec: 2992 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "d7e563c1a1db45865794351daea5eb08" } Frame { msec: 3008 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "cc4345c2d4d0d7748c352a22f63030cb" } Frame { msec: 3024 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "382172adf3a339cac16a3e185ef4bb05" } Frame { msec: 3040 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "6019a3eac1825acdeac24d39c898d506" } Frame { msec: 3056 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "ac4b9427592a6fe7585625de8d1bff96" } Frame { msec: 3072 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3088 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3104 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3120 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3136 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3152 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3168 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 80; y: 189 + modifiers: 0 + sendToViewport: true } Frame { msec: 3184 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3200 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3216 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3232 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 80; y: 189 + modifiers: 0 + sendToViewport: true } Frame { msec: 3248 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7cf95f1bc67a90c0df788787589a75a9" } Frame { msec: 3264 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "a623e09cddb4304db658e30aef433dd8" } Frame { msec: 3280 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "4dce74fbb6649138a6ea6c288818fda5" } Frame { msec: 3296 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "2356d6d1f8481cf60542126f197ee0b1" } Frame { msec: 3312 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "7553601e70a7ccc3c60306fcf4999bed" } Frame { msec: 3328 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "bc86afd210d18dc68b433d70705b6603" } Frame { msec: 3344 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "8538d87120dd14958f92b81ceff304a3" } Frame { msec: 3360 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "2a8d299ff16589069d493bbab2ceda53" } Frame { msec: 3376 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "9f92b838c36e46d61a78f9013f04b580" } Frame { msec: 3392 - hash: "49903693b112d5f35c4e877bef6bbdb0" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 49; y: 162 - modifiers: 0 - sendToViewport: true + hash: "7e6710b5491d5b9ad9a84691eadaa66c" } Frame { msec: 3408 - hash: "49903693b112d5f35c4e877bef6bbdb0" + hash: "1b165e39ff01747d5e9ad0d8769c8ee9" } Frame { msec: 3424 - hash: "49903693b112d5f35c4e877bef6bbdb0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 49; y: 161 - modifiers: 0 - sendToViewport: true + hash: "f78ad1eeb030eb58f8140da041acf4cd" } Frame { msec: 3440 - hash: "49903693b112d5f35c4e877bef6bbdb0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 49; y: 159 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 48; y: 157 - modifiers: 0 - sendToViewport: true + hash: "f009dcb6b085ae38a45206f35ab37754" } Frame { msec: 3456 - hash: "49903693b112d5f35c4e877bef6bbdb0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 48; y: 153 - modifiers: 0 - sendToViewport: true + hash: "371dd67bf5a16ea085a256dd2e2583f9" } Mouse { - type: 5 - button: 0 + type: 2 + button: 1 buttons: 1 - x: 48; y: 149 + x: 75; y: 164 modifiers: 0 sendToViewport: true } Frame { msec: 3472 - hash: "1c84452b0ce90ae6f136f5bcce408220" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 50; y: 144 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 50; y: 138 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 50; y: 138 - modifiers: 0 - sendToViewport: true + hash: "9a0606cd6930b3f992f0533f3f6a0f7a" } Frame { msec: 3488 - hash: "4c77d402b995297dadb5e671f071605f" + hash: "1d538ccb1874fe2ddb410d48ca668d74" } Frame { msec: 3504 - hash: "babd28626a81bd48b39b56f8da69c360" + hash: "71e08cb1eced66950e5893306b3043e7" } Frame { msec: 3520 - hash: "71654a76f9b94fafaf3767003598fb96" + hash: "71e08cb1eced66950e5893306b3043e7" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 75; y: 164 + modifiers: 0 + sendToViewport: true } Frame { msec: 3536 - hash: "87ad69a660e072e71f940db93be3a949" + hash: "71e08cb1eced66950e5893306b3043e7" } Frame { msec: 3552 - hash: "147f7f3f1913bc5ac5889c1a4daa8026" + hash: "2da0d9bb50d97ca78ee56f3c528a7db5" } Frame { msec: 3568 - hash: "9c26b3ad7a5dacd56028afa7bf4deef6" + hash: "7f5105df4d41a6739ce13d69451d6059" } Frame { msec: 3584 - hash: "18611ff90e5af36c9b6396c3df4cd646" + hash: "8d171773d643ca5bfb095208efe841a9" } Frame { msec: 3600 - hash: "84701fd73ed8e1951bd4c806b70654ac" + hash: "8aa93bddb58d0533b03d2b7fc6efb839" } Frame { msec: 3616 - hash: "42b40f1683beb23f4fe5ade066c0626f" + hash: "26e2bcff7c3de9995e29fd8a06db4139" } Frame { msec: 3632 - hash: "8c6aeefaa6f36cdffcf7bdb1597c6fbe" + hash: "94fe4626d8f978649bf200bf79885ec0" } Frame { msec: 3648 - hash: "731cea2e0d8fb8aac6ae919b23b89b87" + hash: "61e92064d9da2db6ea0adfdffaad81f6" } Frame { msec: 3664 - hash: "d4dc70a8e09e7ec03e7c1f5123b7abef" + hash: "54d5845c08eb5cc9263c84146fd9fcd2" } Frame { msec: 3680 - hash: "5246e2f52aa104e8030eef105a5b5a7c" + hash: "d10a128980a46713093899696110d81e" } Frame { msec: 3696 - hash: "a9c3d0034c09ba81d19d57ff550d7b4f" + hash: "ff6301533f4fb29194f20a4520824030" } Frame { msec: 3712 - hash: "e9092b1be19273f1f29912cd493dd238" + hash: "598b6e7c6c6c0de77b4793d1f68beea6" } Frame { msec: 3728 - hash: "c2b19c7b818c94e932558676a026f049" + hash: "e3d123e179a6930e1bc1864095621607" } Frame { msec: 3744 - hash: "6627c4d6daab8e6500dbd0d921bc1ebd" + hash: "b1bb4c350969f579630680803e622662" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 72; y: 147 + modifiers: 0 + sendToViewport: true } Frame { msec: 3760 - hash: "45c584ca18e8bfd6aa495c16a977662a" + hash: "3dd276bb96dd3a5ef96095e0b8251c05" } Frame { msec: 3776 - hash: "de79039a8bb623f7d48afe1549ae23e0" + hash: "144402c1397313fb5d13b4972bb3a450" } Frame { msec: 3792 - hash: "076d29278466038071095093266553f5" + hash: "144402c1397313fb5d13b4972bb3a450" } Frame { msec: 3808 - hash: "73ed162dc5f9983bf22446f63691f7e4" + hash: "144402c1397313fb5d13b4972bb3a450" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 72; y: 146 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 72; y: 146 + modifiers: 0 + sendToViewport: true } Frame { msec: 3824 - hash: "4cc3648635884a69191f0cfe2051f621" + hash: "144402c1397313fb5d13b4972bb3a450" } Frame { msec: 3840 @@ -1134,241 +1118,197 @@ VisualTest { } Frame { msec: 3856 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "126b19793c902cf8848824fe4a38fe0c" } Frame { msec: 3872 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "1f7a173f70f04adcc28481cfa40ad82e" } Frame { msec: 3888 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "5189e3a7f4c93d6095d526ee4583adea" } Frame { msec: 3904 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "03ef5fa51d7455e58c34c52be2b2625b" } Frame { msec: 3920 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "6589088e4efab3426d5b3c08f885fcc4" } Frame { msec: 3936 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "35593c99aa3f7040efe6420ce90426f7" } Frame { msec: 3952 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "61e13ba4ed7251e607ae299841b55fea" } Frame { msec: 3968 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "7bc5f663e54b6ac10b7aa8787de0483a" } Frame { msec: 3984 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "141e2fa188fabeef8587770b2d18538c" } Frame { msec: 4000 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "5f59ea38bb55096d6ca50ffb9e9706ec" } Frame { msec: 4016 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "9ff31c7768afa3eba211e862bbfddda1" } Frame { msec: 4032 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "f8731aa264c5e534f13f4fa89fc320a1" } Frame { msec: 4048 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "87bc86979d05432f8ad16ca1f0537fa0" } Frame { msec: 4064 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "749f93235f677af13d162aacfde3840a" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 69; y: 113 + modifiers: 0 + sendToViewport: true } Frame { msec: 4080 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "3af211e45026670fef0e5b391bad3455" } Frame { msec: 4096 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "3af211e45026670fef0e5b391bad3455" } Frame { msec: 4112 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "3af211e45026670fef0e5b391bad3455" } Frame { msec: 4128 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "3af211e45026670fef0e5b391bad3455" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 112 + modifiers: 0 + sendToViewport: true } Frame { msec: 4144 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "3af211e45026670fef0e5b391bad3455" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 70; y: 112 + modifiers: 0 + sendToViewport: true } Frame { msec: 4160 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "3af211e45026670fef0e5b391bad3455" } Frame { msec: 4176 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "de1b3a0b2ffb02f4969ce532bb7d6ad9" } Frame { msec: 4192 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "1e0bb98146f64975c4d5b8f8ef65319c" } Frame { msec: 4208 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "3540ee1fc403cc923100888e3bd15168" } Frame { msec: 4224 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "8f8178db769ed067e40c06ec2a8f3e3f" } Frame { msec: 4240 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "18310df1f8f735313e71739c58b2e42d" } Frame { msec: 4256 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "0797a57080ad60f00a185ad7eecbc40f" } Frame { msec: 4272 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "80cffb466c0e8947f775a4b7a677cd20" } Frame { msec: 4288 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "3f80ed589a282924e1dd4fbbd99078b0" } Frame { msec: 4304 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "7368b2da0c37d4b212fff8222244d413" } Frame { msec: 4320 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "7fb81e12fc1cb3e6f08a4bd0af23f40d" } Frame { msec: 4336 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" - } - Frame { - msec: 4352 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" - } - Frame { - msec: 4368 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + hash: "6677c15df6babf38036d4083c63c2684" } Mouse { type: 2 button: 1 buttons: 1 - x: 151; y: 170 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 151; y: 168 + x: 67; y: 89 modifiers: 0 sendToViewport: true } Frame { - msec: 4384 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" + msec: 4352 + hash: "106d90e84bd5b88c5df048ffc717e843" } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 166 - modifiers: 0 - sendToViewport: true + Frame { + msec: 4368 + hash: "ce69c7e561e9f0c1fd5f3dba2ffda3e8" } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 153; y: 163 - modifiers: 0 - sendToViewport: true + Frame { + msec: 4384 + hash: "63b2956e9bad879bef156a318162656c" } Frame { msec: 4400 - hash: "d06fbe4c7dd8bd392172aa5b29c6ceee" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 160 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 155; y: 154 - modifiers: 0 - sendToViewport: true + hash: "e9f02812bdd7071d1ceb71e0c2195f3a" } Frame { msec: 4416 - hash: "ac75b9adaecd10206c4daa07c93adb27" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 155; y: 148 - modifiers: 0 - sendToViewport: true + hash: "e9f02812bdd7071d1ceb71e0c2195f3a" } Mouse { type: 5 button: 0 buttons: 1 - x: 156; y: 141 + x: 67; y: 88 modifiers: 0 sendToViewport: true } Frame { msec: 4432 - hash: "539ec244fd42801cfcf97adc12f48786" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 121 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4448 - hash: "7d7bc6f7d2ff1da352ddab0d679906e7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 162; y: 101 - modifiers: 0 - sendToViewport: true + hash: "e9f02812bdd7071d1ceb71e0c2195f3a" } Mouse { type: 5 button: 0 buttons: 1 - x: 166; y: 83 + x: 67; y: 87 modifiers: 0 sendToViewport: true } @@ -1376,93 +1316,113 @@ VisualTest { type: 3 button: 1 buttons: 0 - x: 166; y: 83 + x: 67; y: 87 modifiers: 0 sendToViewport: true } Frame { + msec: 4448 + hash: "e9f02812bdd7071d1ceb71e0c2195f3a" + } + Frame { msec: 4464 - hash: "4b508eb55971a03c6dc8a50d0244fa21" + hash: "e33d1f7d03ec85600cb61896c66fd9ca" } Frame { msec: 4480 - hash: "2ceb497ca10e6448a019b62a225a72e4" + hash: "72347f42ad925abdc614244b2ec01e7a" } Frame { msec: 4496 - hash: "1fd9b89ebcb8e707c9b1b13ba64061b4" + hash: "5fbd0e2ce5e2fe609dfc5e5643bfbc8a" } Frame { msec: 4512 - hash: "24a3a48843860f643e55ca6dfec84f98" + hash: "4bcb24b700ac09da7387738bce36def5" } Frame { msec: 4528 - hash: "48ea9398101f44a707c44ee1c5102d0c" + hash: "7c489062131ef9fcdfe765cd0361361b" } Frame { msec: 4544 - hash: "d8f2cebcdb542e75bbbaa4391ca881b8" + hash: "c4c1834200b2b7b3eb38b20d7147b8ee" } Frame { msec: 4560 - hash: "df35827ac111c67588922aadd45b3c85" + hash: "49994b7471ec620ff52e5ba516bbb5d4" } Frame { msec: 4576 - hash: "c1e612548c8d5c2f844e94ad4c0f1db4" + hash: "e1cf4e92e291b8509a8eb8a84f70dcad" } Frame { msec: 4592 - hash: "c298bccebeb1f4528c935e5fd256479c" + hash: "9c7d6d53aa6089712389b1c2b4207d15" } Frame { msec: 4608 - hash: "4c01d969eba4eca32b8a3b7f6f9c99f0" + hash: "408731f3b11d888fff1ef9340ad1c568" } Frame { msec: 4624 - hash: "66c783ae698cb91195088591a9bd67c1" + hash: "d34f3092b84dea762adf7cf86c80abc6" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 67; y: 67 + modifiers: 0 + sendToViewport: true } Frame { msec: 4640 - hash: "5419f6889162fb0db6b8c9e521f57f4f" + hash: "d0202d3154721c968301e4fdb759b5d2" } Frame { msec: 4656 - hash: "d153dbf30acf36145d7fcb8e37dd5c6d" + hash: "89601cb9b82465f6ae96156b7e259e70" } Frame { msec: 4672 - hash: "ffbf186683dc979ef29cdd5ff50296fc" + hash: "7c775a699646acf45f26dea5bd5db783" } Frame { msec: 4688 - hash: "ddcedde95d1ebcafe5b73924ecfa047a" + hash: "be285c318afaeb932a2fd50fdc357813" } Frame { msec: 4704 - hash: "d94b9e92f2c1a5e0ea2f8dd21a905517" + hash: "5ddee39853aa1b8d1be287c86e5b763c" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 67; y: 67 + modifiers: 0 + sendToViewport: true } Frame { msec: 4720 - hash: "92c27d497128ccdcbfe8224a0f55a302" + hash: "5ddee39853aa1b8d1be287c86e5b763c" } Frame { msec: 4736 - hash: "7146017581b03e6551822653e54d5001" + hash: "8386713865c12636ce442cd31eacb8ba" } Frame { msec: 4752 - hash: "a39567e01b8963d3b71f5f525d1582d4" + hash: "9f4df793b3b6320e238b451e35183b9f" } Frame { msec: 4768 - hash: "842654ef5a24143e41412b2450b6024c" + hash: "3cd41f6ab2303dd666269cca13dc95e3" } Frame { msec: 4784 - hash: "c2a002588b4b3f89806d6d283c39ea54" + hash: "504a3dd9018c3c725a92a9d6e84743fc" } Frame { msec: 4800 @@ -1470,239 +1430,287 @@ VisualTest { } Frame { msec: 4816 - hash: "2bea5cc22ea4989f8f07fbf62d09880b" + hash: "63158568d5fdf558d0192809da0cf5fe" } Frame { msec: 4832 - hash: "b8326b959b75b05c050ff91f0c34fa55" + hash: "c4f7130484f17854eace9e541c92207a" } Frame { msec: 4848 - hash: "d5f2e63bd18b2067221ec80764c7500d" + hash: "406a0371c7366fadefcbae7d428d1879" } Frame { msec: 4864 - hash: "157f93ebaa95664965539237ba121265" + hash: "f9d6128c4fe60d95a001642cb80ccb99" } Frame { msec: 4880 - hash: "5bda47a6295e500f24b6ba7bf04e9282" + hash: "2fb6886550a0eb7927274cd9cfc46819" } Frame { msec: 4896 - hash: "0134d543cfbf085eb4b5ea4a0f5ae32f" + hash: "dd4ac1eb6d18bc267b2f39d6d291a8bd" } Frame { msec: 4912 - hash: "d27f2ad3bd9817c23caf01ba64335776" + hash: "7f1e1114fe65b7a54364a04ad7697d4c" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 66; y: 45 + modifiers: 0 + sendToViewport: true } Frame { msec: 4928 - hash: "4dd96288601f4481a24b75afedd34599" + hash: "60a4882d0384489465fec8660933c29c" } Frame { msec: 4944 - hash: "d5ebfbd190fe2482af54004ad9434818" + hash: "2330e35830fb707c9d9074b54cd5c7f6" } Frame { msec: 4960 - hash: "6a8c5c64228b3be521407e00c2b6a1de" + hash: "02c275412e380c7f2878bc1f01e2850a" } Frame { msec: 4976 - hash: "645219e7aa6761bef1b11ac8f17f1f42" + hash: "02c275412e380c7f2878bc1f01e2850a" } Frame { msec: 4992 - hash: "54fff3170fa43d99eca2c87381ecaf1e" + hash: "02c275412e380c7f2878bc1f01e2850a" } Frame { msec: 5008 - hash: "54fff3170fa43d99eca2c87381ecaf1e" + hash: "02c275412e380c7f2878bc1f01e2850a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 43 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 66; y: 43 + modifiers: 0 + sendToViewport: true } Frame { msec: 5024 - hash: "00c3c11b9b266504b8cdbdf4edcc3a98" + hash: "02c275412e380c7f2878bc1f01e2850a" } Frame { msec: 5040 - hash: "00c3c11b9b266504b8cdbdf4edcc3a98" + hash: "a304ddc3e20220f7ed06aeae22589927" } Frame { msec: 5056 - hash: "00c3c11b9b266504b8cdbdf4edcc3a98" + hash: "8ef8e13dff7e5f12c1d0a7a0e438a24f" } Frame { msec: 5072 - hash: "54fff3170fa43d99eca2c87381ecaf1e" + hash: "ef7ef97e56c6b7579e11022861dd3eb5" } Frame { msec: 5088 - hash: "6a8c5c64228b3be521407e00c2b6a1de" + hash: "133613dd5ac9242ce0b6926986cd384a" } Frame { msec: 5104 - hash: "f91cea801322d1bc6ac1b9eeae96c704" + hash: "eb5125c97b9deca07e999ec7e78986b3" } Frame { msec: 5120 - hash: "d27f2ad3bd9817c23caf01ba64335776" + hash: "123c37efefdc1c8e6b27b7eff3bffff8" } Frame { msec: 5136 - hash: "5bda47a6295e500f24b6ba7bf04e9282" + hash: "8443d904bcb63ab2d14cbb5a2e2a8fe7" } Frame { msec: 5152 - hash: "d5f2e63bd18b2067221ec80764c7500d" + hash: "379826db02c7e5cb8ab9007a419e34f9" } Frame { msec: 5168 - hash: "b10145c10c2bc9d01ec6a49a399f728e" + hash: "672d45cdc24a2e1286956e3ce00cab56" } Frame { msec: 5184 - hash: "f0b759a49bf21b0c9b311a1dd02d7807" + hash: "cbaa7c4f52b2ebc1176a3bbe3e029487" } Frame { msec: 5200 - hash: "1c5546c3ddbde95d10921c8c32fd2d67" + hash: "35d70b84722fecd08b1c03f01c5a9895" } Frame { msec: 5216 - hash: "c2a002588b4b3f89806d6d283c39ea54" + hash: "65c1d1c4fc845229853836afd2e7a3c4" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 68; y: 19 + modifiers: 0 + sendToViewport: true } Frame { msec: 5232 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "a238ffd4f6de5ca91bcf0e629407ad11" } Frame { msec: 5248 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "42322853eef74b9b849d81d7aa2ea4af" } Frame { msec: 5264 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "25fb0c4c04d9dcda865a8b254970330c" } Frame { msec: 5280 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "565891a25190705df8b424e1e5e73ddd" } Frame { msec: 5296 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "565891a25190705df8b424e1e5e73ddd" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 68; y: 19 + modifiers: 0 + sendToViewport: true } Frame { msec: 5312 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "565891a25190705df8b424e1e5e73ddd" } Frame { msec: 5328 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "39e05f846071d4ec9a1413922a928995" } Frame { msec: 5344 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "7040400386930b34d989df4cdf36d125" } Frame { msec: 5360 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "2d3c081a1bbb94952becfd486d455de5" } Frame { msec: 5376 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "7a0719f22b0b74e4139ada77ca8d38d6" } Frame { msec: 5392 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "40d070285de7865fa8f415ff06be69d3" } Frame { msec: 5408 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "875ba6c617a4b5d157c747ead185247c" } Frame { msec: 5424 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "2d0ef679259f503d42cc2267b8d95a4e" } Frame { msec: 5440 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "b2aeceddd4d36e600f617578d64a4c32" } Frame { msec: 5456 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "a065ec04aff7a7c164ed8c152130589f" } Frame { msec: 5472 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "a09d94403ce40a8afb12e390aea3d848" } Frame { msec: 5488 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "34b116228527a669dadbfc75f309d045" } Frame { msec: 5504 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "5bee91cba46537ddaefe87f4e118d3d5" } Frame { msec: 5520 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "d0d8bd32268f3e3a62a08514f0d53799" } Frame { msec: 5536 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "b90c3915255d3f98700f8af0181fa6ee" } Frame { msec: 5552 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5568 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5584 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5600 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5616 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5632 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5648 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5664 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5680 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5696 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5712 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5728 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5744 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5760 @@ -1710,2042 +1718,50 @@ VisualTest { } Frame { msec: 5776 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5792 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5808 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5824 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5840 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5856 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5872 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5888 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5904 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5920 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5936 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" + hash: "8d52a504170547407fad6d8785b7199b" } Frame { msec: 5952 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 5968 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 5984 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6000 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6016 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6032 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6048 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6064 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6080 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6096 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6112 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6128 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6144 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6160 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6176 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6192 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6208 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6224 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6240 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6256 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6272 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6288 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6304 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6320 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6336 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6352 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6368 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6384 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6400 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6416 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6432 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6448 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6464 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6480 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6496 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6512 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 177; y: 168 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6528 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6544 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6560 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6576 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 178; y: 168 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6592 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 178; y: 168 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6608 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6624 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6640 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6656 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6672 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6688 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6704 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6720 - image: "packageviews.6.png" - } - Frame { - msec: 6736 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6752 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6768 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6784 - hash: "1eb5d2140ff3c71d55a6e5338dd2853e" - } - Frame { - msec: 6800 - hash: "f6de07972a225d276b4b5c424dc490ef" - } - Frame { - msec: 6816 - hash: "d8c400ca33d590a9b4d9b179b5634d94" - } - Frame { - msec: 6832 - hash: "21ec87c22e52b3daa78bd94b771a105c" - } - Frame { - msec: 6848 - hash: "19a3667f4051e40e944ec58abb16846a" - } - Frame { - msec: 6864 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 6880 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 6896 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 6912 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 6928 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 6944 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 6960 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 6976 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 6992 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7008 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7024 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7040 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7056 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7072 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7088 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7104 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7120 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7136 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7152 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7168 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7184 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7200 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7216 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7232 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7248 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7264 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7280 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7296 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7312 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7328 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7344 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7360 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7376 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7392 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7408 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 157; y: 37 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7424 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Frame { - msec: 7440 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 39 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7456 - hash: "08369a783b1f1f4e64da7dab40df6ef3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 44 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 51 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7472 - hash: "e8ad02d4c2429a03ff0686888e4038bf" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 59 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 67 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7488 - hash: "43dcc86aeff3b8b74ae1b87e735e8963" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 87 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7504 - hash: "96e10ce9e5a80caf626213e5c696d84d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7520 - hash: "3b34cb99481d5418136840afd649807d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 164; y: 134 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 164; y: 134 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7536 - hash: "494cf05eb3d8eb221d0e3c233c936e87" - } - Frame { - msec: 7552 - hash: "e0d5f3aab9fbfac1de47f42202dbeb79" - } - Frame { - msec: 7568 - hash: "8cd6919e15ea4320e00e79d43596ea80" - } - Frame { - msec: 7584 - hash: "395a63aa12928a6b597eabd74f019a03" - } - Frame { - msec: 7600 - hash: "16d4ccbda396a9afcaeac4ddca733012" - } - Frame { - msec: 7616 - hash: "71955518b68a9817a41d5d0f63adcc57" - } - Frame { - msec: 7632 - hash: "152f2569fe8849d5c4289699dba2ee32" - } - Frame { - msec: 7648 - hash: "a1de2cb5acc31a9d73e005c3a44cee4f" - } - Frame { - msec: 7664 - hash: "96ceaad68263b5165a65f557ae19d9cd" - } - Frame { - msec: 7680 - image: "packageviews.7.png" - } - Frame { - msec: 7696 - hash: "9ff5d2774820dac56655a44d965c7742" - } - Frame { - msec: 7712 - hash: "79cdbfb2f93a35680eab38f0df2eaf66" - } - Frame { - msec: 7728 - hash: "19896d510a27871fc589579e27adc0dc" - } - Frame { - msec: 7744 - hash: "71b62e488897345eebf8d9640d50585f" - } - Frame { - msec: 7760 - hash: "4853b95a3f1ae0ebbd468dff3605d595" - } - Frame { - msec: 7776 - hash: "a8030aa0aede17d91758af08256cf39d" - } - Frame { - msec: 7792 - hash: "a2a5e71349060ae262d337d9aa33b549" - } - Frame { - msec: 7808 - hash: "7b5f32f0e53ab102ef6f1eca7da016dd" - } - Frame { - msec: 7824 - hash: "7b5f32f0e53ab102ef6f1eca7da016dd" - } - Frame { - msec: 7840 - hash: "25908df38057c7394135108d9618e28d" - } - Frame { - msec: 7856 - hash: "d3b3ab6e43eef22ca71fc35c36b1f50d" - } - Frame { - msec: 7872 - hash: "c25759db4e12acbe8e4701c7c86d1957" - } - Frame { - msec: 7888 - hash: "fe67a155ead8495d646fa7bbcf5db6b4" - } - Frame { - msec: 7904 - hash: "34e2877a8b84e53e5c85fb1b25d57e2b" - } - Frame { - msec: 7920 - hash: "2fc6c5a0e9bb80e3c8f12553e7e96d02" - } - Frame { - msec: 7936 - hash: "b5122a2530e21a01e93862bd8060e320" - } - Frame { - msec: 7952 - hash: "9c55e0c920bcf5189fb24e1765d221db" - } - Frame { - msec: 7968 - hash: "1106703562135e36ae62130200960fc8" - } - Frame { - msec: 7984 - hash: "c24b57dbf01d2646fbbeb3e66636e220" - } - Frame { - msec: 8000 - hash: "71663a05c04bb77c2e25299a9c6dd9ce" - } - Frame { - msec: 8016 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8032 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8048 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8064 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8080 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8096 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8112 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8128 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8144 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8160 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8176 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8192 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8208 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8224 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8240 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8256 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8272 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8288 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8304 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8320 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8336 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8352 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8368 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8384 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8400 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8416 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8432 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8448 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8464 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8480 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8496 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8512 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8528 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8544 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8560 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8576 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8592 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8608 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8624 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8640 - image: "packageviews.8.png" - } - Frame { - msec: 8656 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8672 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8688 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Frame { - msec: 8704 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 46; y: 147 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8720 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 46; y: 146 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8736 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 46; y: 145 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 46; y: 143 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8752 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 46; y: 141 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8768 - hash: "dd6caf22c0cacf5c34686785072da5f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 46; y: 138 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 46; y: 134 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 46; y: 129 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8784 - hash: "7b1354e70befc84c343145987c81562f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 45; y: 122 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8800 - hash: "6107f00c6472d877b5c109dd58d73145" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 45; y: 115 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 45; y: 115 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8816 - hash: "47288701643899e26b53d28595d59b29" - } - Frame { - msec: 8832 - hash: "a3b4b613d19c8f21ec1b75c1c660ed1d" - } - Frame { - msec: 8848 - hash: "7a5d9fe471eb673f68b77d97f9108bac" - } - Frame { - msec: 8864 - hash: "20a09795ffcf05276d7a5be24b33e207" - } - Frame { - msec: 8880 - hash: "225e529ac77f225fc8b84ed71cdcd70f" - } - Frame { - msec: 8896 - hash: "e4188406a3d3d1f1b83547d362a187f8" - } - Frame { - msec: 8912 - hash: "82707040aad297885ba1c8c6672dc017" - } - Frame { - msec: 8928 - hash: "a369118e98e2bd67dc4242c5e8c86cb8" - } - Frame { - msec: 8944 - hash: "001ef50f7d2b7db7e0db8d2190137d0c" - } - Frame { - msec: 8960 - hash: "2db473b2bd9fd602ed0298501752dae9" - } - Frame { - msec: 8976 - hash: "f9cdbb4e515abf23721627e3f2748960" - } - Frame { - msec: 8992 - hash: "cbc072c5b117ce156a4d6661ae488a77" - } - Frame { - msec: 9008 - hash: "79acb38cec803e6ebeb570dc4d7bbb30" - } - Frame { - msec: 9024 - hash: "848014437545fc8d2e454a774586a8ca" - } - Frame { - msec: 9040 - hash: "0836f3a48355f6384c6b3f452df1e7d6" - } - Frame { - msec: 9056 - hash: "b3da223cdf138e915fcb424cf9181d6b" - } - Frame { - msec: 9072 - hash: "1a7cf7e7ddaac64eeff0d23997580b8c" - } - Frame { - msec: 9088 - hash: "cfbd055b2f905db503250b49120948db" - } - Frame { - msec: 9104 - hash: "c5b8a4ce51ec806f0ce654a8977fb17d" - } - Frame { - msec: 9120 - hash: "d09ba0ea9e7fed2f50d6463ac74da470" - } - Frame { - msec: 9136 - hash: "47ec5bab098fd88ef5be3703c316717a" - } - Frame { - msec: 9152 - hash: "3ea8c442ed43bd3a2aebc9cc2aacfc01" - } - Frame { - msec: 9168 - hash: "f016f14b0b21781924ac2afe146b1b97" - } - Frame { - msec: 9184 - hash: "7b7b6954cce0ca202585310520bbb3e3" - } - Frame { - msec: 9200 - hash: "b0de94ee3b0ce4845101606d2d512426" - } - Frame { - msec: 9216 - hash: "8dc56bcb2313bd8dd9ef0cbc098b80e5" - } - Frame { - msec: 9232 - hash: "a1692b26fb73ade5a05e03de3f4a8dbe" - } - Frame { - msec: 9248 - hash: "672dd46e629475d823b182104f15aa24" - } - Frame { - msec: 9264 - hash: "2859e53d63c20af7891efc99d5e515b5" - } - Frame { - msec: 9280 - hash: "b44b1c4eaa33fbd09c8e59c1bf2a8f2a" - } - Frame { - msec: 9296 - hash: "d520fa81032ca25ec2cb6c358488049d" - } - Frame { - msec: 9312 - hash: "3676c00bd5c3e9af8c4092afd80f58c2" - } - Frame { - msec: 9328 - hash: "6be4d4c35aba5a8d32a28dd88f32acd1" - } - Frame { - msec: 9344 - hash: "375473d4d838ef937c3164e7451d9391" - } - Frame { - msec: 9360 - hash: "610253e766974af4958c3623547deebd" - } - Frame { - msec: 9376 - hash: "20b79be381a95930c924240815cc63f4" - } - Frame { - msec: 9392 - hash: "88130d7132f472ff8495d640adf290cc" - } - Frame { - msec: 9408 - hash: "2e81f4c9a0221708146adcb508eb2d30" - } - Frame { - msec: 9424 - hash: "977f52ed922ba5db66440f115f7484a2" - } - Frame { - msec: 9440 - hash: "706f99c32d00be14ae67b4866fee0cd9" - } - Frame { - msec: 9456 - hash: "210231604091497b510c4a1d42295574" - } - Frame { - msec: 9472 - hash: "210231604091497b510c4a1d42295574" - } - Frame { - msec: 9488 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9504 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9520 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9536 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9552 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9568 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9584 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9600 - image: "packageviews.9.png" - } - Frame { - msec: 9616 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9632 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9648 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9664 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9680 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9696 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9712 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9728 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9744 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9760 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9776 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9792 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9808 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9824 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9840 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9856 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9872 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9888 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9904 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9920 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9936 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9952 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9968 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 9984 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10000 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10016 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10032 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10048 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10064 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10080 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10096 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10112 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10128 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10144 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10160 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10176 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 48; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 10192 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10208 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10224 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10240 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10256 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 48; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 10272 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 10288 - hash: "c54f97c72088b6319efba3c79bbef0fa" - } - Frame { - msec: 10304 - hash: "3627adf820bc44f99cca852096f337a0" - } - Frame { - msec: 10320 - hash: "48c0f775534ff9bbe9227e60ad9a3622" - } - Frame { - msec: 10336 - hash: "da5c6fd80ee0dc20e81031c84ede20cf" - } - Frame { - msec: 10352 - hash: "ce7595da55b274259771eb99a42df454" - } - Frame { - msec: 10368 - hash: "c2dd2aa17b9508477699fefe55bfbd06" - } - Frame { - msec: 10384 - hash: "4ee897ddfec1081eef8bc5d799774f82" - } - Frame { - msec: 10400 - hash: "f4da67964a175acf4cde4a24b054c24c" - } - Frame { - msec: 10416 - hash: "e3da951dad465f1a69d8d7c08e888f02" - } - Frame { - msec: 10432 - hash: "ff862073eada170a07d209048367b823" - } - Frame { - msec: 10448 - hash: "cb61d5a89c1acc2b646f3c07214bea4a" - } - Frame { - msec: 10464 - hash: "15d842ac551c15a136c7598adf2fe2b1" - } - Frame { - msec: 10480 - hash: "04b9e85f7418bbc402e51e0ce8149180" - } - Frame { - msec: 10496 - hash: "455dff37edfac66f5e4ae78e10b93cf9" - } - Frame { - msec: 10512 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10528 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10544 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10560 - image: "packageviews.10.png" - } - Frame { - msec: 10576 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10592 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10608 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10624 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10640 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10656 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10672 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10688 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10704 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10720 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10736 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10752 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10768 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10784 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10800 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10816 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10832 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10848 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10864 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10880 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10896 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10912 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10928 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10944 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10960 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10976 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 10992 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11008 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11024 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11040 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11056 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11072 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11088 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11104 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11120 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11136 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11152 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11168 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11184 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11200 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11216 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11232 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11248 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11264 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11280 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11296 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11312 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11328 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11344 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11360 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11376 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11392 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11408 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11424 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11440 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11456 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11472 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11488 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11504 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 47; y: 141 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 11520 - image: "packageviews.11.png" - } - Frame { - msec: 11536 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11552 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11568 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 47; y: 141 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 11584 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11600 - hash: "259e9da7c3b8738db1762128f2c8d4b0" - } - Frame { - msec: 11616 - hash: "cf515f316c197a307a7fb8373df3b107" - } - Frame { - msec: 11632 - hash: "927379ba611284d5c98a3eb5aca04f7c" - } - Frame { - msec: 11648 - hash: "387ad2042589de0a19cb13aa0cac8872" - } - Frame { - msec: 11664 - hash: "6536ad87d1f04b13c28c43ae0fed984f" - } - Frame { - msec: 11680 - hash: "38d77d6610739614e95c70f32736f238" - } - Frame { - msec: 11696 - hash: "9a6c3a95b61d3b9b787417600123b6d8" - } - Frame { - msec: 11712 - hash: "782d907d7d170108beb030c93d9a4d94" - } - Frame { - msec: 11728 - hash: "646ee08d1ffe676ca0363f70e14c2ed6" - } - Frame { - msec: 11744 - hash: "830730ed9990c8f96fa5c7e6b4228884" - } - Frame { - msec: 11760 - hash: "2e678862f358814278d38950c7c5765b" - } - Frame { - msec: 11776 - hash: "c656eb6ace9caf86d417d79452c4ea34" - } - Frame { - msec: 11792 - hash: "227a9bb3644c26622ef654ba2c61ddad" - } - Frame { - msec: 11808 - hash: "bc8188bf8be749bfb28fc64bb5773922" - } - Frame { - msec: 11824 - hash: "f1e90cfd466bdc26ba98632fe1e5360c" - } - Frame { - msec: 11840 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11856 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11872 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11888 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11904 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11920 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11936 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11952 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11968 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 11984 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12000 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12016 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12032 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12048 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12064 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12080 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12096 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12112 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12128 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12144 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12160 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12176 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12192 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12208 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12224 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12240 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12256 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12272 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12288 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12304 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12320 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12336 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12352 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12368 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12384 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12400 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12416 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12432 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12448 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12464 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12480 - image: "packageviews.12.png" - } - Frame { - msec: 12496 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12512 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12528 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12544 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12560 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12576 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12592 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12608 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12624 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12640 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12656 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12672 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12688 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12704 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12720 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12736 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12752 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12768 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12784 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12800 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12816 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12832 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12848 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12864 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12880 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12896 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12912 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12928 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12944 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12960 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12976 - hash: "81795ee4213ac62e073d811aaf6b580c" - } - Frame { - msec: 12992 - hash: "81795ee4213ac62e073d811aaf6b580c" + hash: "8d52a504170547407fad6d8785b7199b" } } diff --git a/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml b/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml index 99379f1..a9de3f8 100644 --- a/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml +++ b/tests/auto/declarative/qmlvisual/Package_Views/packageviews.qml @@ -17,18 +17,10 @@ Rectangle { ListElement { itemColor: "yellow" } ListElement { itemColor: "slategrey" } ListElement { itemColor: "cyan" } - ListElement { itemColor: "red" } - ListElement { itemColor: "green" } - ListElement { itemColor: "blue" } - ListElement { itemColor: "orange" } - ListElement { itemColor: "purple" } - ListElement { itemColor: "yellow" } - ListElement { itemColor: "slategrey" } - ListElement { itemColor: "cyan" } } delegate: Package { Rectangle { - id: listItem; Package.name: "list"; width:root.width/2; height: 50; color: "transparent"; border.color: "white" + id: listItem; Package.name: "list"; width:root.width/2; height: 25; color: "transparent"; border.color: "white" MouseArea { anchors.fill: parent onClicked: myState.state = myState.state == "list" ? "grid" : "list" @@ -50,12 +42,12 @@ Rectangle { State { name: "list" ParentChange { target: myContent; parent: listItem } - PropertyChanges { target: myContent; x: 0; y: 0; width: listItem.width } + PropertyChanges { target: myContent; x: 0; y: 0; width: listItem.width; height: listItem.height } }, State { name: "grid" ParentChange { target: myContent; parent: gridItem } - PropertyChanges { target: myContent; x: 0; y: 0; width: gridItem.width } + PropertyChanges { target: myContent; x: 0; y: 0; width: gridItem.width; height: gridItem.height } } ] @@ -64,7 +56,7 @@ Rectangle { from: "*"; to: "*" SequentialAnimation { ParentAnimation{ - NumberAnimation { properties: "x,y,width"; easing.type: "InOutQuad" } + NumberAnimation { properties: "x,y,width,height"; easing.type: "InOutQuad" } } } } -- cgit v0.12 From 47448f58b73add569137ced50667c1e42bbcea75 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 10:34:42 +1000 Subject: Shrink and update qdeclarativetext visual tests Task-number: QTBUG-14792 --- .../qdeclarativetext/font/data-X11/plaintext.0.png | Bin 0 -> 77181 bytes .../qdeclarativetext/font/data-X11/plaintext.qml | 11 +++ .../qdeclarativetext/font/data-X11/richtext.0.png | Bin 0 -> 103375 bytes .../qdeclarativetext/font/data-X11/richtext.qml | 11 +++ .../qdeclarativetext/font/data/plaintext.0.png | Bin 0 -> 77181 bytes .../qdeclarativetext/font/data/plaintext.qml | 11 +++ .../qdeclarativetext/font/data/richtext.0.png | Bin 0 -> 103375 bytes .../qdeclarativetext/font/data/richtext.qml | 11 +++ .../qmlvisual/qdeclarativetext/font/plaintext.qml | 88 ++++++++++++--------- .../qmlvisual/qdeclarativetext/font/richtext.qml | 50 +++++------- 10 files changed, 112 insertions(+), 70 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.png new file mode 100644 index 0000000..89195ae Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.qml new file mode 100644 index 0000000..fdf2310 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/plaintext.qml @@ -0,0 +1,11 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "plaintext.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.png new file mode 100644 index 0000000..6a48728 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.qml new file mode 100644 index 0000000..3da391d --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-X11/richtext.qml @@ -0,0 +1,11 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "richtext.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png new file mode 100644 index 0000000..89195ae Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml new file mode 100644 index 0000000..fdf2310 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/plaintext.qml @@ -0,0 +1,11 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "plaintext.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png new file mode 100644 index 0000000..6a48728 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml new file mode 100644 index 0000000..3da391d --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data/richtext.qml @@ -0,0 +1,11 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "richtext.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml index 25db179..e82d80f 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/plaintext.qml @@ -1,11 +1,11 @@ import QtQuick 1.0 Rectangle { - id: s; width: 800; height: 1000; color: "lightsteelblue" - property string text: "The quick brown fox jumps over the lazy dog." + id: s; width: 620; height: 600; color: "lightsteelblue" + property string text: "Jackdaws love my big sphinx of quartz." Column { - spacing: 10 + spacing: 8 Text { text: s.text } @@ -13,7 +13,7 @@ Rectangle { text: s.text; font.pixelSize: 18 } Text { - text: s.text; font.pointSize: 25 + text: s.text; font.pointSize: 20 } Text { text: s.text; color: "red"; smooth: true @@ -52,40 +52,52 @@ Rectangle { text: s.text; font.pixelSize: 18; style: Text.Raised; styleColor: "yellow" } Text { - text: s.text; horizontalAlignment: Text.AlignLeft; width: 800 - } - Text { - text: s.text; horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; width: 800; height: 20 - } - Text { - text: s.text; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignBottom; width: 800; height: 20 - } - Text { - text: s.text; font.pixelSize: 18; style: Text.Outline; styleColor: "white"; wrapMode: Text.WordWrap; width: 200 - } - Text { - text: s.text; elide: Text.ElideLeft; width: 200 - } - Text { - text: s.text; elide: Text.ElideMiddle; width: 200 - } - Text { - text: s.text; elide: Text.ElideRight; width: 200 - } - Text { - text: s.text; elide: Text.ElideLeft; width: 200; wrapMode: Text.WordWrap - } - Text { - text: s.text; elide: Text.ElideMiddle; width: 200; wrapMode: Text.WordWrap - } - Text { - text: s.text; elide: Text.ElideRight; width: 200; wrapMode: Text.WordWrap - } - Text { - text: s.text + " thisisaverylongstringwithnospaces"; width: 150; wrapMode: Text.WrapAnywhere - } - Text { - text: s.text + " thisisaverylongstringwithnospaces"; width: 150; wrapMode: Text.Wrap + text: s.text; horizontalAlignment: Text.AlignLeft; width: s.width + } + Text { + text: s.text; horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; width: s.width; height: 20 + } + Text { + text: s.text; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignBottom; width: s.width; height: 20 + } + Row{ + height: childrenRect.height + spacing: 4 + Text { + text: s.text; elide: Text.ElideLeft; width: 200 + } + Text { + text: s.text; elide: Text.ElideMiddle; width: 200 + } + Text { + text: s.text; elide: Text.ElideRight; width: 200 + } + } + Row{ + height: childrenRect.height + spacing: 4 + Text{ + text: s.text; elide: Text.ElideLeft; width: 200; wrapMode: Text.WordWrap + } + Text { + text: s.text; elide: Text.ElideMiddle; width: 200; wrapMode: Text.WordWrap + } + Text { + text: s.text; elide: Text.ElideRight; width: 200; wrapMode: Text.WordWrap + } + } + Row{ + height: childrenRect.height + spacing: 4 + Text { + text: s.text + " thisisaverylongstringwithnospaces"; width: 150; wrapMode: Text.WrapAnywhere + } + Text { + text: s.text + " thisisaverylongstringwithnospaces"; width: 150; wrapMode: Text.Wrap + } + Text { +text: s.text; font.pixelSize: 18; style: Text.Outline; styleColor: "white"; wrapMode: Text.WordWrap; width: 200 + } } } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml index 31b0e69..7d174cc 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/richtext.qml @@ -1,11 +1,11 @@ import QtQuick 1.0 Rectangle { - id: s; width: 800; height: 1000; color: "lightsteelblue" + id: s; width: 620; height: 600; color: "lightsteelblue" property string text: "The quick brown fox jumps over the lazy dog." Column { - spacing: 10 + spacing: 6 Text { text: s.text } @@ -13,7 +13,7 @@ Rectangle { text: s.text; font.pixelSize: 18 } Text { - text: s.text; font.pointSize: 25 + text: s.text; font.pointSize: 18 } Text { text: s.text; color: "red"; smooth: true @@ -52,40 +52,26 @@ Rectangle { text: s.text; font.pixelSize: 18; style: Text.Raised; styleColor: "yellow" } Text { - text: s.text; horizontalAlignment: Text.AlignLeft; width: 800 + text: s.text; horizontalAlignment: Text.AlignLeft; width: s.width } Text { - text: s.text; horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; width: 800; height: 20 + text: s.text; horizontalAlignment: Text.AlignHCenter; verticalAlignment: Text.AlignVCenter; width: s.width; height: 20 } Text { - text: s.text; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignBottom; width: 800; height: 20 + text: s.text; horizontalAlignment: Text.AlignRight; verticalAlignment: Text.AlignBottom; width: s.width; height: 20 } - Text { - text: s.text; font.pixelSize: 18; style: Text.Outline; styleColor: "white"; wrapMode: Text.WordWrap; width: 200 - } - Text { - text: s.text; elide: Text.ElideLeft; width: 200 - } - Text { - text: s.text; elide: Text.ElideMiddle; width: 200 - } - Text { - text: s.text; elide: Text.ElideRight; width: 200 - } - Text { - text: s.text; elide: Text.ElideLeft; width: 200; wrapMode: Text.WordWrap - } - Text { - text: s.text; elide: Text.ElideMiddle; width: 200; wrapMode: Text.WordWrap - } - Text { - text: s.text; elide: Text.ElideRight; width: 200; wrapMode: Text.WordWrap - } - Text { - text: s.text + " thisisaverylongstringwithnospaces"; width: 150; wrapMode: Text.WrapAnywhere - } - Text { - text: s.text + " thisisaverylongstringwithnospaces"; width: 150; wrapMode: Text.Wrap + Row{ + height: childrenRect.height; + spacing: 4 + Text { + text: s.text + " thisisaverylongstringwithnospaces"; width: 150; wrapMode: Text.WrapAnywhere + } + Text { + text: s.text + " thisisaverylongstringwithnospaces"; width: 150; wrapMode: Text.Wrap + } + Text { + text: s.text; font.pixelSize: 18; style: Text.Outline; styleColor: "white"; wrapMode: Text.WordWrap; width: 200 + } } } } -- cgit v0.12 From 2c2e16dc5b43536eba6cb89c93401fed8f3c26a8 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 10:51:20 +1000 Subject: Update when text changes to "" Also fixes a doc typo. Includes test. Task-number: QTBUG-14469 --- src/declarative/graphicsitems/qdeclarativetext.cpp | 3 +- .../qdeclarativetext/bugs/QTBUG-14469.qml | 22 + .../bugs/data-X11/QTBUG-14469.0.png | Bin 0 -> 422 bytes .../qdeclarativetext/bugs/data-X11/QTBUG-14469.qml | 475 +++++++++++++++++++++ .../qdeclarativetext/bugs/data/QTBUG-14469.0.png | Bin 0 -> 422 bytes .../qdeclarativetext/bugs/data/QTBUG-14469.qml | 475 +++++++++++++++++++++ 6 files changed, 974 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/QTBUG-14469.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.qml diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index c8e3615..865af2d 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -221,6 +221,7 @@ void QDeclarativeTextPrivate::updateSize() if (text.isEmpty()) { q->setImplicitHeight(fm.height()); emit q->paintedSizeChanged(); + q->update(); return; } @@ -866,7 +867,7 @@ void QDeclarativeText::setStyleColor(const QColor &color) and \c Text.AlignVCenter. Note that for a single line of text, the size of the text is the area of the text. In this common case, - all alignments are equivalent. If you want the text to be, say, centered in it parent, then you will + all alignments are equivalent. If you want the text to be, say, centered in its parent, then you will need to either modify the Item::anchors, or set horizontalAlignment to Text.AlignHCenter and bind the width to that of the parent. */ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/QTBUG-14469.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/QTBUG-14469.qml new file mode 100644 index 0000000..ea3a939 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/QTBUG-14469.qml @@ -0,0 +1,22 @@ +import QtQuick 1.0 + +/* The bug was that if text was set to "" or the size didn't increase, the text didn't repaint + ended up only repainting for 1, 10, 11, 12. + Test passes if it goes from "" to 13 back to "" with all numbers being painted (and the text disappearing at 0) + */ + +Item{ + width: 80 + height: 80 + property int val: 0 + Text{ + id: txt; + text: val == 0 ? "" : val + } + Timer{ + interval: 100 + running: true + repeat: true; + onTriggered: {val = (val + 1) % 14;} + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.0.png new file mode 100644 index 0000000..b8cc1c7 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.qml new file mode 100644 index 0000000..6201c72 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data-X11/QTBUG-14469.qml @@ -0,0 +1,475 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 32 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 48 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 64 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 80 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 96 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 112 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 128 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 144 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 160 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 176 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 192 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 208 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 224 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 240 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 256 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 272 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 288 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 304 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 320 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 336 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 352 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 368 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 384 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 400 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 416 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 432 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 448 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 464 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 480 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 496 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 512 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 528 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 544 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 560 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 576 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 592 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 608 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 624 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 640 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 656 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 672 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 688 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 704 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 720 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 736 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 752 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 768 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 784 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 800 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 816 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 832 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 848 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 864 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 880 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 896 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 912 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 928 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 944 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 960 + image: "QTBUG-14469.0.png" + } + Frame { + msec: 976 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 992 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 1008 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 1024 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1040 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1056 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1072 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1088 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1104 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1120 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1136 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1152 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1168 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1184 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1200 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1216 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1232 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1248 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1264 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1280 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1296 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1312 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1328 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1344 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1360 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1376 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1392 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1408 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1424 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1440 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1456 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1472 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1488 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1504 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1520 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1536 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1552 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1568 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1584 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1600 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1616 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1632 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1648 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1664 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1680 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1696 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1712 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1728 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1744 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1760 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1776 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1792 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1808 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1824 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 1840 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 1856 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 1872 + hash: "799c7a637b061686c1456c9c535594d3" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.0.png new file mode 100644 index 0000000..b8cc1c7 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.qml new file mode 100644 index 0000000..6201c72 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/bugs/data/QTBUG-14469.qml @@ -0,0 +1,475 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 32 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 48 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 64 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 80 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 96 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 112 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 128 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 144 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 160 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 176 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 192 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 208 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 224 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 240 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 256 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 272 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 288 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 304 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 320 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 336 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 352 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 368 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 384 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 400 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 416 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 432 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 448 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 464 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 480 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 496 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 512 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 528 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 544 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 560 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 576 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 592 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 608 + hash: "51cd7a5bc24cdb50832066cc04cae313" + } + Frame { + msec: 624 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 640 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 656 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 672 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 688 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 704 + hash: "bac094de06155c73e4d2d9e2fd99b038" + } + Frame { + msec: 720 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 736 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 752 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 768 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 784 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 800 + hash: "3159c438d2cb58e31b4b458ba417f794" + } + Frame { + msec: 816 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 832 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 848 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 864 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 880 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 896 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 912 + hash: "a4f9c320c8aa558c66dd25d132bb5834" + } + Frame { + msec: 928 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 944 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 960 + image: "QTBUG-14469.0.png" + } + Frame { + msec: 976 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 992 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 1008 + hash: "b1a283365bbffbc0ddaa4aa661e52add" + } + Frame { + msec: 1024 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1040 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1056 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1072 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1088 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1104 + hash: "57ba00590bed6fe1b0f8fc3e54b9637e" + } + Frame { + msec: 1120 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1136 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1152 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1168 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1184 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1200 + hash: "e1b070e2bf36e5d8a34cabc0d52b2830" + } + Frame { + msec: 1216 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1232 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1248 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1264 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1280 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1296 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1312 + hash: "bc81044e90cc001fc351a1518ba4b41e" + } + Frame { + msec: 1328 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1344 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1360 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1376 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1392 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1408 + hash: "18386b56e44b1f3981b3aa8fe980410b" + } + Frame { + msec: 1424 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1440 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1456 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1472 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1488 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1504 + hash: "fab978e1e0ee5140d8131320ff2322e9" + } + Frame { + msec: 1520 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1536 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1552 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1568 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1584 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1600 + hash: "6971eb49a32b8f9e09c24ac1340728cb" + } + Frame { + msec: 1616 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1632 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1648 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1664 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1680 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1696 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1712 + hash: "449c6b632a3b85462fe3947a071ffa91" + } + Frame { + msec: 1728 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1744 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1760 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1776 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1792 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1808 + hash: "9c804e5eec3b31acd55a510d301cc419" + } + Frame { + msec: 1824 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 1840 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 1856 + hash: "799c7a637b061686c1456c9c535594d3" + } + Frame { + msec: 1872 + hash: "799c7a637b061686c1456c9c535594d3" + } +} -- cgit v0.12 From 3a784f3c74b10b898d40b06e82851929cba1eca2 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 11:05:49 +1000 Subject: Add a test for multiline text alignment Apparently this is something we've had troubles with in the past Task-number: QTBUG-14792 --- .../align/data-X11/multilineAlign.0.png | Bin 0 -> 1895 bytes .../align/data-X11/multilineAlign.qml | 247 +++++++++++++++++++++ .../align/data/multilineAlign.0.png | Bin 0 -> 1895 bytes .../qdeclarativetext/align/data/multilineAlign.qml | 247 +++++++++++++++++++++ .../qdeclarativetext/align/multilineAlign.qml | 24 ++ 5 files changed, 518 insertions(+) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/align/multilineAlign.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.png new file mode 100644 index 0000000..e6b2b3c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml new file mode 100644 index 0000000..1b43aa3 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-X11/multilineAlign.qml @@ -0,0 +1,247 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 32 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 48 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 64 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 80 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 96 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 112 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 128 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 144 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 160 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 176 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 192 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 208 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 224 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 240 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 256 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 272 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 288 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 304 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 320 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 336 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 352 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 368 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 384 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 400 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 416 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 432 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 448 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 464 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 480 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 496 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 512 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 528 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 544 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 560 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 576 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 592 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 608 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 624 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 640 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 656 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 672 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 688 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 704 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 720 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 736 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 752 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 768 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 784 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 800 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 816 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 832 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 848 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 864 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 880 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 896 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 912 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 928 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 944 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 960 + image: "multilineAlign.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.0.png new file mode 100644 index 0000000..e6b2b3c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.qml new file mode 100644 index 0000000..1b43aa3 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data/multilineAlign.qml @@ -0,0 +1,247 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 32 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 48 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 64 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 80 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 96 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 112 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 128 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 144 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 160 + hash: "1ec47db85ba34bf1900445a2ab87b5e3" + } + Frame { + msec: 176 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 192 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 208 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 224 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 240 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 256 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 272 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 288 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 304 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 320 + hash: "1fc2a63fa95e277bed60abfdecc7c82f" + } + Frame { + msec: 336 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 352 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 368 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 384 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 400 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 416 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 432 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 448 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 464 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 480 + hash: "3a4e863d83f5d475e0c8c5121905bd87" + } + Frame { + msec: 496 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 512 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 528 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 544 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 560 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 576 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 592 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 608 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 624 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 640 + hash: "8887c8f40667f65a814d74b6edcfb81c" + } + Frame { + msec: 656 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 672 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 688 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 704 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 720 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 736 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 752 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 768 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 784 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 800 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 816 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 832 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 848 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 864 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 880 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 896 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 912 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 928 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 944 + hash: "436000b48f688120d96919227d9e67b4" + } + Frame { + msec: 960 + image: "multilineAlign.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/multilineAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/multilineAlign.qml new file mode 100644 index 0000000..976f0b0 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/multilineAlign.qml @@ -0,0 +1,24 @@ +import QtQuick 1.0 + +/*Tests both the alignments of multiline text, and that + it can deal with changing them properly +*/ +Item{ + width: 100 + height: 80 + property int stage: 0 + onStageChanged: if(stage == 6) Qt.quit(); + Text{ + text: "I am the very model of a modern major general." + anchors.fill: parent; + wrapMode: Text.WordWrap + horizontalAlignment: (stage<1 ? Text.AlignRight : (stage<3 ? Text.AlignHCenter : Text.AlignLeft)) + verticalAlignment: (stage<2 ? Text.AlignBottom : (stage<4 ? Text.AlignVCenter : Text.AlignTop)) + } + Timer{ + interval: 160 + running: true + repeat: true + onTriggered: stage += 1 + } +} -- cgit v0.12 From ecb2d6faca9d4b8b2ea216a4647b42df2fc0f805 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 11:15:14 +1000 Subject: Clean up qdeclarativeboarderimage visual tests Includes speeding up the animated resize tests. Task-number: QTBUG-14792 --- .../content/MyBorderImage.qml | 8 +- .../data/animated-smooth.0.png | Bin 61731 -> 89135 bytes .../data/animated-smooth.1.png | Bin 98927 -> 26593 bytes .../data/animated-smooth.2.png | Bin 48780 -> 0 bytes .../data/animated-smooth.3.png | Bin 32431 -> 0 bytes .../data/animated-smooth.4.png | Bin 35835 -> 0 bytes .../data/animated-smooth.5.png | Bin 79428 -> 0 bytes .../data/animated-smooth.6.png | Bin 45928 -> 0 bytes .../data/animated-smooth.qml | 1536 ++--------------- .../qdeclarativeborderimage/data/animated.0.png | Bin 23684 -> 30167 bytes .../qdeclarativeborderimage/data/animated.1.png | Bin 29115 -> 14694 bytes .../qdeclarativeborderimage/data/animated.2.png | Bin 27580 -> 0 bytes .../qdeclarativeborderimage/data/animated.3.png | Bin 14822 -> 0 bytes .../qdeclarativeborderimage/data/animated.4.png | Bin 21356 -> 0 bytes .../qdeclarativeborderimage/data/animated.5.png | Bin 31143 -> 0 bytes .../qdeclarativeborderimage/data/animated.6.png | Bin 26468 -> 0 bytes .../qdeclarativeborderimage/data/animated.7.png | Bin 16225 -> 0 bytes .../qdeclarativeborderimage/data/animated.qml | 1796 ++------------------ .../qdeclarativeborderimage/data/borders.0.png | Bin 22832 -> 24327 bytes 19 files changed, 262 insertions(+), 3078 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml index f4ead54..75a644a 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/content/MyBorderImage.qml @@ -20,14 +20,14 @@ Item { SequentialAnimation on width { loops: Animation.Infinite - NumberAnimation { from: container.minWidth; to: container.maxWidth; duration: 2000; easing.type: "InOutQuad"} - NumberAnimation { from: container.maxWidth; to: container.minWidth; duration: 2000; easing.type: "InOutQuad" } + NumberAnimation { from: container.minWidth; to: container.maxWidth; duration: 1000; easing.type: "InOutQuad"} + NumberAnimation { from: container.maxWidth; to: container.minWidth; duration: 1000; easing.type: "InOutQuad" } } SequentialAnimation on height { loops: Animation.Infinite - NumberAnimation { from: container.minHeight; to: container.maxHeight; duration: 2000; easing.type: "InOutQuad"} - NumberAnimation { from: container.maxHeight; to: container.minHeight; duration: 2000; easing.type: "InOutQuad" } + NumberAnimation { from: container.minHeight; to: container.maxHeight; duration: 1000; easing.type: "InOutQuad"} + NumberAnimation { from: container.maxHeight; to: container.minHeight; duration: 1000; easing.type: "InOutQuad" } } border.top: container.margin diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png index 9a6b079..b6ef0f5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png index 4366d53..11622a7 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.png deleted file mode 100644 index 85a2729..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.png deleted file mode 100644 index de6ff7c..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.png deleted file mode 100644 index fe7d3dd..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.png deleted file mode 100644 index e73bef5..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.png deleted file mode 100644 index 0c75422..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml index e974234..1200099 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated-smooth.qml @@ -22,223 +22,223 @@ VisualTest { } Frame { msec: 80 - hash: "aec13bcab337e55832b0a02fb5c6b526" + hash: "9419c891e347fe6b25d30c05bae5d14c" } Frame { msec: 96 - hash: "aec13bcab337e55832b0a02fb5c6b526" + hash: "62430dd693c4eaeb7afe9e85229406a4" } Frame { msec: 112 - hash: "aec13bcab337e55832b0a02fb5c6b526" + hash: "a9b6aeb509076bf17c2068ce280326fb" } Frame { msec: 128 - hash: "cd2180be80101c2aa4350b51b7a6f502" + hash: "2570806925c3a61a7afaa09331c6eed8" } Frame { msec: 144 - hash: "de471829f8ad3b43bf1b4df9d1d65a4d" + hash: "98d48920293b11511e8bbf820dd49acc" } Frame { msec: 160 - hash: "ed9f2ca797894612600bc4b7fbaecb84" + hash: "e4809aefa55620a86484f66582d4d1b6" } Frame { msec: 176 - hash: "59470d71fa4426d0283e86371f2bfc2a" + hash: "098b063b0e5eb3dd22adb3353342725e" } Frame { msec: 192 - hash: "9a2f92efb51bcc6293d6a8e82d5314ea" + hash: "30aadc837ec2e7d8a2495453348804bc" } Frame { msec: 208 - hash: "7b66e21652a7d0982226e281a48411a9" + hash: "05013a538f2796c728b4d0ddad059851" } Frame { msec: 224 - hash: "a716c8d2c94433dee719f92f0822c8ec" + hash: "b221f14ea2c04078e23ac37ef817c50e" } Frame { msec: 240 - hash: "f22a47b846cfee96ebdf39bbce2e6d51" + hash: "3ef9de605fff5d3156bccc99a93c5da6" } Frame { msec: 256 - hash: "5a8932d13d624932a65694fd19ec05cd" + hash: "7722a4c025f1d2b560c7fec8ba8f7b6d" } Frame { msec: 272 - hash: "48e62dd171f5da82b5aa26c765e4042c" + hash: "e24ad2d67f10d2cc58dffcc469342005" } Frame { msec: 288 - hash: "63d3c47f7dec1236440a05e0a8380900" + hash: "5153a42348885ce8de81f8086f73c163" } Frame { msec: 304 - hash: "323af110731b7af0c30f8862ff59b833" + hash: "7083d70df6cc476ec342abbe6f4409b4" } Frame { msec: 320 - hash: "83c029e328e80af83158c37089cf0ece" + hash: "befd4cd74f59291a9f9a01ad2a051029" } Frame { msec: 336 - hash: "3f9a09ae19be34348bb2552915360cf7" + hash: "705cd5a0717b6a8de8871bf0bfb38129" } Frame { msec: 352 - hash: "df624d70cae1bcefda8d69c0ff055d83" + hash: "a65d51747c0183a3a096e51326fdae78" } Frame { msec: 368 - hash: "d671a3b971468e1d8aa30ab655e020a9" + hash: "99ec9ca33a26afd9e34c1d3246502926" } Frame { msec: 384 - hash: "74c837b29f7f05b615123f0e608b523f" + hash: "3355ce4b409474e6dbd99d010471a0a4" } Frame { msec: 400 - hash: "277ef98ea859fb7685fe6cd44a538a7d" + hash: "bcfb117c5860306c016a05e828773777" } Frame { msec: 416 - hash: "0a8da7a3f57c3e06e4be5ea1d8a83ae9" + hash: "4650216f60377bf7798877546c723d0a" } Frame { msec: 432 - hash: "456be9c208d690c479ba12bf6325dde0" + hash: "3821707e1201c5eebb043f86887c6bc4" } Frame { msec: 448 - hash: "10307beea6d99ab0ff5863f8e35555ed" + hash: "19c079bd61467706ff54f039f512dee6" } Frame { msec: 464 - hash: "170a1d5fe3422cf5223a78015a6a45fd" + hash: "9fdd3bb7d735a96df8538f2883d784fe" } Frame { msec: 480 - hash: "64ecb03aa538e74d0b99c6dec7751401" + hash: "d8096b88c24221d7176472031de3dc14" } Frame { msec: 496 - hash: "f3a7e74a1839f9366f9eeec4d2b80d1e" + hash: "be4abb3dd1ee3fc62b83d152a1a89576" } Frame { msec: 512 - hash: "0f347763f25350ebb62dda1536372b45" + hash: "e3d2caf6eb0afd2e6efd5c08a580e158" } Frame { msec: 528 - hash: "0af81ee0d76ff8335a0e347dc086ca37" + hash: "40bdf75ac82c26a741939945dbf85924" } Frame { msec: 544 - hash: "061406edcbd2d4930ab89c3fcab63c7f" + hash: "e2e3bee6bf84bc82c50a68e442440f05" } Frame { msec: 560 - hash: "31d65134f340d82dd40f2401bda3fb7e" + hash: "2cb89b7538d4dd398a9ff5a94e2d0020" } Frame { msec: 576 - hash: "16c16c77c65b36d1e0954d5ead2642be" + hash: "41dce41d337e7d24a5e70d831dbb448b" } Frame { msec: 592 - hash: "61c16009b65a55bffb63e27727e1615e" + hash: "7812862b4c1d67a64792a94cb584a9ed" } Frame { msec: 608 - hash: "e1474c2cdd8768ca1ef45bf3bc5234ca" + hash: "a82a2af4b9cee89e03db363f979d1661" } Frame { msec: 624 - hash: "89c159ef00d273ecfe61332e1bf7244d" + hash: "7071a72a55fab2d7b367eb113d38dc6d" } Frame { msec: 640 - hash: "f4d0d3bca25e67908b38910f47b4757e" + hash: "835de3a883cb3a7c35cb533f51f9b32c" } Frame { msec: 656 - hash: "0e0c40f8e11a7bd499c80562ac6f8a82" + hash: "498afb76e236561638532ba6cafd758a" } Frame { msec: 672 - hash: "4310a4c3037d845f088f21ad608f366a" + hash: "38ebf5835263e6e80e75653971ad74b4" } Frame { msec: 688 - hash: "3d518cd0348d6202243364af1dd6ce89" + hash: "b5e8c06b458b1afac627ed7f7e76c868" } Frame { msec: 704 - hash: "41987e6b4248d7944c0dbc6eb3862023" + hash: "594e33c35006281b2df3a45c13c31c44" } Frame { msec: 720 - hash: "3e81338d38723d56f2d6c428271f81c1" + hash: "a49989ca004a6991b49d1978cfc0fed7" } Frame { msec: 736 - hash: "74af3457583fbaf73f14556aeccc8403" + hash: "a743fc5cdcaadd42095e9e0d8441f7cc" } Frame { msec: 752 - hash: "efc119983701908a904deb24108c59cb" + hash: "4ca1600674bad4b753007322945e25dd" } Frame { msec: 768 - hash: "3a77785cfd7755f567619d8e04583f6a" + hash: "d2921c6ae6a1aa9168a2fa93e8936ff2" } Frame { msec: 784 - hash: "fd85d1dd931033973283a408b5e328a8" + hash: "55b9f82693d6ebde9ec23e3ed554bb9c" } Frame { msec: 800 - hash: "5d3e85acabe5e5ff802eb7731676274f" + hash: "15e72f5cd1847f591b0c4f6ecb74ed4a" } Frame { msec: 816 - hash: "ae12f1f37a746e16b06e6b869c89fac1" + hash: "7aa94688f72d6ddade09a9d99f1c5563" } Frame { msec: 832 - hash: "d2ed2cf3a12e41bac299399cc35abe6a" + hash: "b782f52c9cb50c72307bbd8fd15fffd2" } Frame { msec: 848 - hash: "84ef6dda8318b623832f58c46d762e89" + hash: "8106f20a3c0c3e7ea0e502e963993330" } Frame { msec: 864 - hash: "b699285764f5e8866a9996f4a0dccc69" + hash: "670b05d25b72ed4c6affdcf873374947" } Frame { msec: 880 - hash: "ddd8a006ef048c8d929144aa9fcd7c5a" + hash: "a34b08cb7e724c0563f86a5c8e209868" } Frame { msec: 896 - hash: "177666cb3bb784c83196886b2c6cf6b6" + hash: "f5281eba399a13f6fa024ae0fa6b01bd" } Frame { msec: 912 - hash: "9cd29b4b023a8b92573575fb3c3dda83" + hash: "db4dba10574839c3b3d8684aa1a2ad08" } Frame { msec: 928 - hash: "adc670a9aa0326744cb23e4f5912e6c7" + hash: "b90f1f30d340d292c658145f62e2bb8a" } Frame { msec: 944 - hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6" + hash: "452c45b5cc9be80abde7af04ba49731c" } Frame { msec: 960 @@ -246,239 +246,239 @@ VisualTest { } Frame { msec: 976 - hash: "64b21b89576fdd0083f60a26f57b9c11" + hash: "8af61e4b09309e31394ae635d58fafd2" } Frame { msec: 992 - hash: "0d407ee07692d0e5a480a60952807b3c" + hash: "9ce60e38b7025c6fa72432de6a3c88b2" } Frame { msec: 1008 - hash: "845170815a87565dc4229792032b3357" + hash: "9e7f9d0e83a33f005d9ee579140c5562" } Frame { msec: 1024 - hash: "8b8120cfc14de03e048632fdea61be21" + hash: "9e7f9d0e83a33f005d9ee579140c5562" } Frame { msec: 1040 - hash: "b0070117f1c24a4da87434725d4bb989" + hash: "9ce60e38b7025c6fa72432de6a3c88b2" } Frame { msec: 1056 - hash: "0239d697642ca1d1b1d1daa3ea048e1e" + hash: "8af61e4b09309e31394ae635d58fafd2" } Frame { msec: 1072 - hash: "3df54504f8891306fa8f1e9e2075a5e2" + hash: "d9ab04d0a6a9373e5622e1124db17866" } Frame { msec: 1088 - hash: "853429387cc639496c7338244de7e1b7" + hash: "452c45b5cc9be80abde7af04ba49731c" } Frame { msec: 1104 - hash: "bd70500fbdfe5aa2fe4362a97a1dee2d" + hash: "b90f1f30d340d292c658145f62e2bb8a" } Frame { msec: 1120 - hash: "b375e723b2396b13b8f55cfc0c81c3c3" + hash: "db4dba10574839c3b3d8684aa1a2ad08" } Frame { msec: 1136 - hash: "53f05993ba3b426949badd2e4cd66d84" + hash: "f5281eba399a13f6fa024ae0fa6b01bd" } Frame { msec: 1152 - hash: "23291a0239c69ea07db959e709b1ff5f" + hash: "a34b08cb7e724c0563f86a5c8e209868" } Frame { msec: 1168 - hash: "85ef33fcb3f91e4fc20391bf94455984" + hash: "670b05d25b72ed4c6affdcf873374947" } Frame { msec: 1184 - hash: "d6615fc345831a3cc5b9a7196284b632" + hash: "8106f20a3c0c3e7ea0e502e963993330" } Frame { msec: 1200 - hash: "07acba64dc608439a8a54fcb080379e8" + hash: "b782f52c9cb50c72307bbd8fd15fffd2" } Frame { msec: 1216 - hash: "2a1fcfb753ca237b518da26e67c928e5" + hash: "7aa94688f72d6ddade09a9d99f1c5563" } Frame { msec: 1232 - hash: "1f964c6c9bebdc9945dc69a6095400f7" + hash: "15e72f5cd1847f591b0c4f6ecb74ed4a" } Frame { msec: 1248 - hash: "bd045f4532d78bba0ef1b64118fd9f24" + hash: "55b9f82693d6ebde9ec23e3ed554bb9c" } Frame { msec: 1264 - hash: "2084ccc60ddd493399c128717816d33b" + hash: "d2921c6ae6a1aa9168a2fa93e8936ff2" } Frame { msec: 1280 - hash: "0640fcb0b24d3ba4ab8695f78271a438" + hash: "4ca1600674bad4b753007322945e25dd" } Frame { msec: 1296 - hash: "7c9a98e2101c33e17c1bd7e6c2d921ff" + hash: "a743fc5cdcaadd42095e9e0d8441f7cc" } Frame { msec: 1312 - hash: "fce2648975106bc5c0ca9a4530f7f748" + hash: "a49989ca004a6991b49d1978cfc0fed7" } Frame { msec: 1328 - hash: "39cc17ee2e889f17dd07179fda99e431" + hash: "594e33c35006281b2df3a45c13c31c44" } Frame { msec: 1344 - hash: "39c46d85d20f7ef3eca1d09c7eb6a068" + hash: "b5e8c06b458b1afac627ed7f7e76c868" } Frame { msec: 1360 - hash: "d65d50fbb920e683b041a1c72238225b" + hash: "38ebf5835263e6e80e75653971ad74b4" } Frame { msec: 1376 - hash: "45d891d804609ebbe1d5ac3f826d0c17" + hash: "498afb76e236561638532ba6cafd758a" } Frame { msec: 1392 - hash: "05cbce0eaa80b4610a9067af8c40f819" + hash: "835de3a883cb3a7c35cb533f51f9b32c" } Frame { msec: 1408 - hash: "00ab7798bcd77a99886dff0414f35382" + hash: "7071a72a55fab2d7b367eb113d38dc6d" } Frame { msec: 1424 - hash: "5cc90d798786c270ddd2616512f4459f" + hash: "a82a2af4b9cee89e03db363f979d1661" } Frame { msec: 1440 - hash: "e5df07ea21e8e415c3ec82560f2d0f34" + hash: "7812862b4c1d67a64792a94cb584a9ed" } Frame { msec: 1456 - hash: "ddf1f5c0b97fe4821719ec5bf4bd091b" + hash: "41dce41d337e7d24a5e70d831dbb448b" } Frame { msec: 1472 - hash: "c61d2aa7f934fb5a9f9f7883e063b51c" + hash: "2cb89b7538d4dd398a9ff5a94e2d0020" } Frame { msec: 1488 - hash: "29ddde3300d0520a4c01b5536d8b9e7a" + hash: "e2e3bee6bf84bc82c50a68e442440f05" } Frame { msec: 1504 - hash: "2fede2f5d871654f3f8a6e9d890adeac" + hash: "40bdf75ac82c26a741939945dbf85924" } Frame { msec: 1520 - hash: "deed4c06c9b713834490832b88e7acaf" + hash: "e3d2caf6eb0afd2e6efd5c08a580e158" } Frame { msec: 1536 - hash: "c2edb016cfdd47c192d1c48281ee76ed" + hash: "be4abb3dd1ee3fc62b83d152a1a89576" } Frame { msec: 1552 - hash: "a261be47ae89e6b53e6bc1c1197154ae" + hash: "d8096b88c24221d7176472031de3dc14" } Frame { msec: 1568 - hash: "e860e97ebd73b7d1d5d5d90458b34bfe" + hash: "9fdd3bb7d735a96df8538f2883d784fe" } Frame { msec: 1584 - hash: "a087b532ecb2f28e4ee60819228c2522" + hash: "19c079bd61467706ff54f039f512dee6" } Frame { msec: 1600 - hash: "64df51b4c1bf744b2aae1c6d908c2cc3" + hash: "3821707e1201c5eebb043f86887c6bc4" } Frame { msec: 1616 - hash: "880640372bf584955627f6835f24be13" + hash: "4650216f60377bf7798877546c723d0a" } Frame { msec: 1632 - hash: "d1110817827c318ceb0c112e8c2bfc1d" + hash: "bcfb117c5860306c016a05e828773777" } Frame { msec: 1648 - hash: "705d9c8de05c859a42769f73761c6a63" + hash: "3355ce4b409474e6dbd99d010471a0a4" } Frame { msec: 1664 - hash: "3bae40654ec551d69e7c8c72f631c7a5" + hash: "99ec9ca33a26afd9e34c1d3246502926" } Frame { msec: 1680 - hash: "774740a393f3e9b8f12b81cce8da8280" + hash: "a65d51747c0183a3a096e51326fdae78" } Frame { msec: 1696 - hash: "64cd225202ed6c91b02c368a9160a656" + hash: "705cd5a0717b6a8de8871bf0bfb38129" } Frame { msec: 1712 - hash: "2b7eb8a9fe26b032be8b4b9c00995912" + hash: "befd4cd74f59291a9f9a01ad2a051029" } Frame { msec: 1728 - hash: "47e920e3884ccf2f0f49e78070af6929" + hash: "7083d70df6cc476ec342abbe6f4409b4" } Frame { msec: 1744 - hash: "fe899138116774df4c4441687e3019c5" + hash: "5153a42348885ce8de81f8086f73c163" } Frame { msec: 1760 - hash: "5d9ee853f083d514fbe51d6953d8e000" + hash: "e24ad2d67f10d2cc58dffcc469342005" } Frame { msec: 1776 - hash: "5736362b42bc2d801e02edabb983663a" + hash: "7722a4c025f1d2b560c7fec8ba8f7b6d" } Frame { msec: 1792 - hash: "c3ea530de646612f9203c5800cad884b" + hash: "3ef9de605fff5d3156bccc99a93c5da6" } Frame { msec: 1808 - hash: "48952ffa5e300778eafa768b9fe7df0c" + hash: "b221f14ea2c04078e23ac37ef817c50e" } Frame { msec: 1824 - hash: "fe04cae65aeec18697eca4f3f83a40e9" + hash: "05013a538f2796c728b4d0ddad059851" } Frame { msec: 1840 - hash: "382d454f2366c1fb4ca472faa3bfa5e9" + hash: "30aadc837ec2e7d8a2495453348804bc" } Frame { msec: 1856 - hash: "89022a8e2feb3dcb845de69aafc333ad" + hash: "098b063b0e5eb3dd22adb3353342725e" } Frame { msec: 1872 - hash: "25506557c853a0020e98cf3992956989" + hash: "e4809aefa55620a86484f66582d4d1b6" } Frame { msec: 1888 - hash: "9a64706c52c9e962816953e32950b8ba" + hash: "98d48920293b11511e8bbf820dd49acc" } Frame { msec: 1904 - hash: "3cbfded47413172ada64095e65c55e8a" + hash: "2570806925c3a61a7afaa09331c6eed8" } Frame { msec: 1920 @@ -486,1338 +486,58 @@ VisualTest { } Frame { msec: 1936 - hash: "c5e399e29b988148913e62ee208b3326" + hash: "62430dd693c4eaeb7afe9e85229406a4" } Frame { msec: 1952 - hash: "b980703c1d0018937e83a8ba8862469e" + hash: "9419c891e347fe6b25d30c05bae5d14c" } Frame { msec: 1968 - hash: "05312f9529c94d3331ace7d73c544284" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 1984 - hash: "a94de4e90a8f8eb4ec33fe902afd226c" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2000 - hash: "ee297a2d68c9e58157d9bf189d353713" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2016 - hash: "00f3c9b8b37cb104cf2a7701639bc61f" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2032 - hash: "ee297a2d68c9e58157d9bf189d353713" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2048 - hash: "a94de4e90a8f8eb4ec33fe902afd226c" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2064 - hash: "05312f9529c94d3331ace7d73c544284" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2080 - hash: "b980703c1d0018937e83a8ba8862469e" + hash: "9419c891e347fe6b25d30c05bae5d14c" } Frame { msec: 2096 - hash: "c5e399e29b988148913e62ee208b3326" + hash: "62430dd693c4eaeb7afe9e85229406a4" } Frame { msec: 2112 - hash: "3b7b83e97d17440b42e6ef4b962076d8" + hash: "a9b6aeb509076bf17c2068ce280326fb" } Frame { msec: 2128 - hash: "3cbfded47413172ada64095e65c55e8a" + hash: "2570806925c3a61a7afaa09331c6eed8" } Frame { msec: 2144 - hash: "9a64706c52c9e962816953e32950b8ba" - } - Frame { - msec: 2160 - hash: "25506557c853a0020e98cf3992956989" - } - Frame { - msec: 2176 - hash: "89022a8e2feb3dcb845de69aafc333ad" - } - Frame { - msec: 2192 - hash: "382d454f2366c1fb4ca472faa3bfa5e9" - } - Frame { - msec: 2208 - hash: "fe04cae65aeec18697eca4f3f83a40e9" - } - Frame { - msec: 2224 - hash: "48952ffa5e300778eafa768b9fe7df0c" - } - Frame { - msec: 2240 - hash: "c3ea530de646612f9203c5800cad884b" - } - Frame { - msec: 2256 - hash: "5736362b42bc2d801e02edabb983663a" - } - Frame { - msec: 2272 - hash: "5d9ee853f083d514fbe51d6953d8e000" - } - Frame { - msec: 2288 - hash: "fe899138116774df4c4441687e3019c5" - } - Frame { - msec: 2304 - hash: "47e920e3884ccf2f0f49e78070af6929" - } - Frame { - msec: 2320 - hash: "2b7eb8a9fe26b032be8b4b9c00995912" - } - Frame { - msec: 2336 - hash: "64cd225202ed6c91b02c368a9160a656" - } - Frame { - msec: 2352 - hash: "774740a393f3e9b8f12b81cce8da8280" - } - Frame { - msec: 2368 - hash: "3bae40654ec551d69e7c8c72f631c7a5" - } - Frame { - msec: 2384 - hash: "705d9c8de05c859a42769f73761c6a63" - } - Frame { - msec: 2400 - hash: "d1110817827c318ceb0c112e8c2bfc1d" - } - Frame { - msec: 2416 - hash: "880640372bf584955627f6835f24be13" - } - Frame { - msec: 2432 - hash: "64df51b4c1bf744b2aae1c6d908c2cc3" - } - Frame { - msec: 2448 - hash: "a087b532ecb2f28e4ee60819228c2522" - } - Frame { - msec: 2464 - hash: "e860e97ebd73b7d1d5d5d90458b34bfe" - } - Frame { - msec: 2480 - hash: "a261be47ae89e6b53e6bc1c1197154ae" - } - Frame { - msec: 2496 - hash: "c2edb016cfdd47c192d1c48281ee76ed" - } - Frame { - msec: 2512 - hash: "deed4c06c9b713834490832b88e7acaf" - } - Frame { - msec: 2528 - hash: "2fede2f5d871654f3f8a6e9d890adeac" - } - Frame { - msec: 2544 - hash: "29ddde3300d0520a4c01b5536d8b9e7a" - } - Frame { - msec: 2560 - hash: "c61d2aa7f934fb5a9f9f7883e063b51c" - } - Frame { - msec: 2576 - hash: "ddf1f5c0b97fe4821719ec5bf4bd091b" - } - Frame { - msec: 2592 - hash: "e5df07ea21e8e415c3ec82560f2d0f34" - } - Frame { - msec: 2608 - hash: "5cc90d798786c270ddd2616512f4459f" - } - Frame { - msec: 2624 - hash: "00ab7798bcd77a99886dff0414f35382" - } - Frame { - msec: 2640 - hash: "05cbce0eaa80b4610a9067af8c40f819" - } - Frame { - msec: 2656 - hash: "45d891d804609ebbe1d5ac3f826d0c17" - } - Frame { - msec: 2672 - hash: "d65d50fbb920e683b041a1c72238225b" - } - Frame { - msec: 2688 - hash: "39c46d85d20f7ef3eca1d09c7eb6a068" - } - Frame { - msec: 2704 - hash: "39cc17ee2e889f17dd07179fda99e431" - } - Frame { - msec: 2720 - hash: "fce2648975106bc5c0ca9a4530f7f748" - } - Frame { - msec: 2736 - hash: "7c9a98e2101c33e17c1bd7e6c2d921ff" - } - Frame { - msec: 2752 - hash: "0640fcb0b24d3ba4ab8695f78271a438" - } - Frame { - msec: 2768 - hash: "2084ccc60ddd493399c128717816d33b" - } - Frame { - msec: 2784 - hash: "bd045f4532d78bba0ef1b64118fd9f24" - } - Frame { - msec: 2800 - hash: "1f964c6c9bebdc9945dc69a6095400f7" - } - Frame { - msec: 2816 - hash: "2a1fcfb753ca237b518da26e67c928e5" - } - Frame { - msec: 2832 - hash: "07acba64dc608439a8a54fcb080379e8" - } - Frame { - msec: 2848 - hash: "d6615fc345831a3cc5b9a7196284b632" - } - Frame { - msec: 2864 - hash: "85ef33fcb3f91e4fc20391bf94455984" - } - Frame { - msec: 2880 - image: "animated-smooth.2.png" - } - Frame { - msec: 2896 - hash: "53f05993ba3b426949badd2e4cd66d84" - } - Frame { - msec: 2912 - hash: "b375e723b2396b13b8f55cfc0c81c3c3" - } - Frame { - msec: 2928 - hash: "bd70500fbdfe5aa2fe4362a97a1dee2d" - } - Frame { - msec: 2944 - hash: "853429387cc639496c7338244de7e1b7" - } - Frame { - msec: 2960 - hash: "3df54504f8891306fa8f1e9e2075a5e2" - } - Frame { - msec: 2976 - hash: "0239d697642ca1d1b1d1daa3ea048e1e" - } - Frame { - msec: 2992 - hash: "b0070117f1c24a4da87434725d4bb989" - } - Frame { - msec: 3008 - hash: "8b8120cfc14de03e048632fdea61be21" - } - Frame { - msec: 3024 - hash: "845170815a87565dc4229792032b3357" - } - Frame { - msec: 3040 - hash: "0d407ee07692d0e5a480a60952807b3c" - } - Frame { - msec: 3056 - hash: "64b21b89576fdd0083f60a26f57b9c11" - } - Frame { - msec: 3072 - hash: "d7e96278583f83ab636ed68fa130e4d2" - } - Frame { - msec: 3088 - hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6" - } - Frame { - msec: 3104 - hash: "adc670a9aa0326744cb23e4f5912e6c7" - } - Frame { - msec: 3120 - hash: "9cd29b4b023a8b92573575fb3c3dda83" - } - Frame { - msec: 3136 - hash: "177666cb3bb784c83196886b2c6cf6b6" - } - Frame { - msec: 3152 - hash: "ddd8a006ef048c8d929144aa9fcd7c5a" - } - Frame { - msec: 3168 - hash: "b699285764f5e8866a9996f4a0dccc69" - } - Frame { - msec: 3184 - hash: "84ef6dda8318b623832f58c46d762e89" - } - Frame { - msec: 3200 - hash: "d2ed2cf3a12e41bac299399cc35abe6a" - } - Frame { - msec: 3216 - hash: "ae12f1f37a746e16b06e6b869c89fac1" - } - Frame { - msec: 3232 - hash: "5d3e85acabe5e5ff802eb7731676274f" - } - Frame { - msec: 3248 - hash: "fd85d1dd931033973283a408b5e328a8" - } - Frame { - msec: 3264 - hash: "3a77785cfd7755f567619d8e04583f6a" - } - Frame { - msec: 3280 - hash: "efc119983701908a904deb24108c59cb" - } - Frame { - msec: 3296 - hash: "74af3457583fbaf73f14556aeccc8403" - } - Frame { - msec: 3312 - hash: "3e81338d38723d56f2d6c428271f81c1" - } - Frame { - msec: 3328 - hash: "41987e6b4248d7944c0dbc6eb3862023" - } - Frame { - msec: 3344 - hash: "3d518cd0348d6202243364af1dd6ce89" - } - Frame { - msec: 3360 - hash: "4310a4c3037d845f088f21ad608f366a" - } - Frame { - msec: 3376 - hash: "0e0c40f8e11a7bd499c80562ac6f8a82" - } - Frame { - msec: 3392 - hash: "f4d0d3bca25e67908b38910f47b4757e" - } - Frame { - msec: 3408 - hash: "89c159ef00d273ecfe61332e1bf7244d" - } - Frame { - msec: 3424 - hash: "e1474c2cdd8768ca1ef45bf3bc5234ca" - } - Frame { - msec: 3440 - hash: "61c16009b65a55bffb63e27727e1615e" - } - Frame { - msec: 3456 - hash: "16c16c77c65b36d1e0954d5ead2642be" - } - Frame { - msec: 3472 - hash: "31d65134f340d82dd40f2401bda3fb7e" - } - Frame { - msec: 3488 - hash: "061406edcbd2d4930ab89c3fcab63c7f" - } - Frame { - msec: 3504 - hash: "0af81ee0d76ff8335a0e347dc086ca37" - } - Frame { - msec: 3520 - hash: "0f347763f25350ebb62dda1536372b45" - } - Frame { - msec: 3536 - hash: "f3a7e74a1839f9366f9eeec4d2b80d1e" - } - Frame { - msec: 3552 - hash: "64ecb03aa538e74d0b99c6dec7751401" - } - Frame { - msec: 3568 - hash: "170a1d5fe3422cf5223a78015a6a45fd" - } - Frame { - msec: 3584 - hash: "10307beea6d99ab0ff5863f8e35555ed" - } - Frame { - msec: 3600 - hash: "456be9c208d690c479ba12bf6325dde0" - } - Frame { - msec: 3616 - hash: "0a8da7a3f57c3e06e4be5ea1d8a83ae9" - } - Frame { - msec: 3632 - hash: "277ef98ea859fb7685fe6cd44a538a7d" - } - Frame { - msec: 3648 - hash: "74c837b29f7f05b615123f0e608b523f" - } - Frame { - msec: 3664 - hash: "d671a3b971468e1d8aa30ab655e020a9" - } - Frame { - msec: 3680 - hash: "df624d70cae1bcefda8d69c0ff055d83" - } - Frame { - msec: 3696 - hash: "3f9a09ae19be34348bb2552915360cf7" - } - Frame { - msec: 3712 - hash: "83c029e328e80af83158c37089cf0ece" - } - Frame { - msec: 3728 - hash: "323af110731b7af0c30f8862ff59b833" - } - Frame { - msec: 3744 - hash: "63d3c47f7dec1236440a05e0a8380900" - } - Frame { - msec: 3760 - hash: "48e62dd171f5da82b5aa26c765e4042c" - } - Frame { - msec: 3776 - hash: "5a8932d13d624932a65694fd19ec05cd" - } - Frame { - msec: 3792 - hash: "f22a47b846cfee96ebdf39bbce2e6d51" - } - Frame { - msec: 3808 - hash: "a716c8d2c94433dee719f92f0822c8ec" - } - Frame { - msec: 3824 - hash: "7b66e21652a7d0982226e281a48411a9" - } - Frame { - msec: 3840 - image: "animated-smooth.3.png" - } - Frame { - msec: 3856 - hash: "59470d71fa4426d0283e86371f2bfc2a" - } - Frame { - msec: 3872 - hash: "ed9f2ca797894612600bc4b7fbaecb84" - } - Frame { - msec: 3888 - hash: "de471829f8ad3b43bf1b4df9d1d65a4d" - } - Frame { - msec: 3904 - hash: "cd2180be80101c2aa4350b51b7a6f502" - } - Frame { - msec: 3920 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 3936 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 3952 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 3968 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 3984 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4000 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4016 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4032 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4048 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4064 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4080 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4096 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4112 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4128 - hash: "cd2180be80101c2aa4350b51b7a6f502" - } - Frame { - msec: 4144 - hash: "de471829f8ad3b43bf1b4df9d1d65a4d" - } - Frame { - msec: 4160 - hash: "ed9f2ca797894612600bc4b7fbaecb84" - } - Frame { - msec: 4176 - hash: "59470d71fa4426d0283e86371f2bfc2a" - } - Frame { - msec: 4192 - hash: "9a2f92efb51bcc6293d6a8e82d5314ea" - } - Frame { - msec: 4208 - hash: "7b66e21652a7d0982226e281a48411a9" - } - Frame { - msec: 4224 - hash: "a716c8d2c94433dee719f92f0822c8ec" - } - Frame { - msec: 4240 - hash: "f22a47b846cfee96ebdf39bbce2e6d51" - } - Frame { - msec: 4256 - hash: "5a8932d13d624932a65694fd19ec05cd" - } - Frame { - msec: 4272 - hash: "48e62dd171f5da82b5aa26c765e4042c" - } - Frame { - msec: 4288 - hash: "63d3c47f7dec1236440a05e0a8380900" - } - Frame { - msec: 4304 - hash: "323af110731b7af0c30f8862ff59b833" - } - Frame { - msec: 4320 - hash: "83c029e328e80af83158c37089cf0ece" - } - Frame { - msec: 4336 - hash: "3f9a09ae19be34348bb2552915360cf7" - } - Frame { - msec: 4352 - hash: "df624d70cae1bcefda8d69c0ff055d83" - } - Frame { - msec: 4368 - hash: "d671a3b971468e1d8aa30ab655e020a9" - } - Frame { - msec: 4384 - hash: "74c837b29f7f05b615123f0e608b523f" - } - Frame { - msec: 4400 - hash: "277ef98ea859fb7685fe6cd44a538a7d" - } - Frame { - msec: 4416 - hash: "0a8da7a3f57c3e06e4be5ea1d8a83ae9" - } - Frame { - msec: 4432 - hash: "456be9c208d690c479ba12bf6325dde0" - } - Frame { - msec: 4448 - hash: "10307beea6d99ab0ff5863f8e35555ed" - } - Frame { - msec: 4464 - hash: "170a1d5fe3422cf5223a78015a6a45fd" - } - Frame { - msec: 4480 - hash: "64ecb03aa538e74d0b99c6dec7751401" - } - Frame { - msec: 4496 - hash: "f3a7e74a1839f9366f9eeec4d2b80d1e" - } - Frame { - msec: 4512 - hash: "0f347763f25350ebb62dda1536372b45" - } - Frame { - msec: 4528 - hash: "0af81ee0d76ff8335a0e347dc086ca37" - } - Frame { - msec: 4544 - hash: "061406edcbd2d4930ab89c3fcab63c7f" - } - Frame { - msec: 4560 - hash: "31d65134f340d82dd40f2401bda3fb7e" - } - Frame { - msec: 4576 - hash: "16c16c77c65b36d1e0954d5ead2642be" - } - Frame { - msec: 4592 - hash: "61c16009b65a55bffb63e27727e1615e" - } - Frame { - msec: 4608 - hash: "e1474c2cdd8768ca1ef45bf3bc5234ca" - } - Frame { - msec: 4624 - hash: "89c159ef00d273ecfe61332e1bf7244d" - } - Frame { - msec: 4640 - hash: "f4d0d3bca25e67908b38910f47b4757e" - } - Frame { - msec: 4656 - hash: "0e0c40f8e11a7bd499c80562ac6f8a82" - } - Frame { - msec: 4672 - hash: "4310a4c3037d845f088f21ad608f366a" - } - Frame { - msec: 4688 - hash: "3d518cd0348d6202243364af1dd6ce89" - } - Frame { - msec: 4704 - hash: "41987e6b4248d7944c0dbc6eb3862023" - } - Frame { - msec: 4720 - hash: "3e81338d38723d56f2d6c428271f81c1" - } - Frame { - msec: 4736 - hash: "74af3457583fbaf73f14556aeccc8403" - } - Frame { - msec: 4752 - hash: "efc119983701908a904deb24108c59cb" - } - Frame { - msec: 4768 - hash: "3a77785cfd7755f567619d8e04583f6a" - } - Frame { - msec: 4784 - hash: "fd85d1dd931033973283a408b5e328a8" - } - Frame { - msec: 4800 - image: "animated-smooth.4.png" - } - Frame { - msec: 4816 - hash: "ae12f1f37a746e16b06e6b869c89fac1" - } - Frame { - msec: 4832 - hash: "d2ed2cf3a12e41bac299399cc35abe6a" - } - Frame { - msec: 4848 - hash: "84ef6dda8318b623832f58c46d762e89" - } - Frame { - msec: 4864 - hash: "b699285764f5e8866a9996f4a0dccc69" - } - Frame { - msec: 4880 - hash: "ddd8a006ef048c8d929144aa9fcd7c5a" - } - Frame { - msec: 4896 - hash: "177666cb3bb784c83196886b2c6cf6b6" - } - Frame { - msec: 4912 - hash: "9cd29b4b023a8b92573575fb3c3dda83" - } - Frame { - msec: 4928 - hash: "adc670a9aa0326744cb23e4f5912e6c7" - } - Frame { - msec: 4944 - hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6" - } - Frame { - msec: 4960 - hash: "d7e96278583f83ab636ed68fa130e4d2" - } - Frame { - msec: 4976 - hash: "64b21b89576fdd0083f60a26f57b9c11" - } - Frame { - msec: 4992 - hash: "0d407ee07692d0e5a480a60952807b3c" - } - Frame { - msec: 5008 - hash: "845170815a87565dc4229792032b3357" - } - Frame { - msec: 5024 - hash: "8b8120cfc14de03e048632fdea61be21" - } - Frame { - msec: 5040 - hash: "b0070117f1c24a4da87434725d4bb989" - } - Frame { - msec: 5056 - hash: "0239d697642ca1d1b1d1daa3ea048e1e" - } - Frame { - msec: 5072 - hash: "3df54504f8891306fa8f1e9e2075a5e2" - } - Frame { - msec: 5088 - hash: "853429387cc639496c7338244de7e1b7" - } - Frame { - msec: 5104 - hash: "bd70500fbdfe5aa2fe4362a97a1dee2d" - } - Frame { - msec: 5120 - hash: "b375e723b2396b13b8f55cfc0c81c3c3" - } - Frame { - msec: 5136 - hash: "53f05993ba3b426949badd2e4cd66d84" - } - Frame { - msec: 5152 - hash: "23291a0239c69ea07db959e709b1ff5f" - } - Frame { - msec: 5168 - hash: "85ef33fcb3f91e4fc20391bf94455984" - } - Frame { - msec: 5184 - hash: "d6615fc345831a3cc5b9a7196284b632" - } - Frame { - msec: 5200 - hash: "07acba64dc608439a8a54fcb080379e8" - } - Frame { - msec: 5216 - hash: "2a1fcfb753ca237b518da26e67c928e5" - } - Frame { - msec: 5232 - hash: "1f964c6c9bebdc9945dc69a6095400f7" - } - Frame { - msec: 5248 - hash: "bd045f4532d78bba0ef1b64118fd9f24" - } - Frame { - msec: 5264 - hash: "2084ccc60ddd493399c128717816d33b" - } - Frame { - msec: 5280 - hash: "0640fcb0b24d3ba4ab8695f78271a438" - } - Frame { - msec: 5296 - hash: "7c9a98e2101c33e17c1bd7e6c2d921ff" - } - Frame { - msec: 5312 - hash: "fce2648975106bc5c0ca9a4530f7f748" - } - Frame { - msec: 5328 - hash: "39cc17ee2e889f17dd07179fda99e431" - } - Frame { - msec: 5344 - hash: "39c46d85d20f7ef3eca1d09c7eb6a068" - } - Frame { - msec: 5360 - hash: "d65d50fbb920e683b041a1c72238225b" - } - Frame { - msec: 5376 - hash: "45d891d804609ebbe1d5ac3f826d0c17" - } - Frame { - msec: 5392 - hash: "05cbce0eaa80b4610a9067af8c40f819" - } - Frame { - msec: 5408 - hash: "00ab7798bcd77a99886dff0414f35382" - } - Frame { - msec: 5424 - hash: "5cc90d798786c270ddd2616512f4459f" - } - Frame { - msec: 5440 - hash: "e5df07ea21e8e415c3ec82560f2d0f34" - } - Frame { - msec: 5456 - hash: "ddf1f5c0b97fe4821719ec5bf4bd091b" - } - Frame { - msec: 5472 - hash: "c61d2aa7f934fb5a9f9f7883e063b51c" - } - Frame { - msec: 5488 - hash: "29ddde3300d0520a4c01b5536d8b9e7a" - } - Frame { - msec: 5504 - hash: "2fede2f5d871654f3f8a6e9d890adeac" - } - Frame { - msec: 5520 - hash: "deed4c06c9b713834490832b88e7acaf" - } - Frame { - msec: 5536 - hash: "c2edb016cfdd47c192d1c48281ee76ed" - } - Frame { - msec: 5552 - hash: "a261be47ae89e6b53e6bc1c1197154ae" - } - Frame { - msec: 5568 - hash: "e860e97ebd73b7d1d5d5d90458b34bfe" - } - Frame { - msec: 5584 - hash: "a087b532ecb2f28e4ee60819228c2522" - } - Frame { - msec: 5600 - hash: "64df51b4c1bf744b2aae1c6d908c2cc3" - } - Frame { - msec: 5616 - hash: "880640372bf584955627f6835f24be13" - } - Frame { - msec: 5632 - hash: "d1110817827c318ceb0c112e8c2bfc1d" - } - Frame { - msec: 5648 - hash: "705d9c8de05c859a42769f73761c6a63" - } - Frame { - msec: 5664 - hash: "3bae40654ec551d69e7c8c72f631c7a5" - } - Frame { - msec: 5680 - hash: "774740a393f3e9b8f12b81cce8da8280" - } - Frame { - msec: 5696 - hash: "64cd225202ed6c91b02c368a9160a656" - } - Frame { - msec: 5712 - hash: "2b7eb8a9fe26b032be8b4b9c00995912" - } - Frame { - msec: 5728 - hash: "47e920e3884ccf2f0f49e78070af6929" - } - Frame { - msec: 5744 - hash: "fe899138116774df4c4441687e3019c5" - } - Frame { - msec: 5760 - image: "animated-smooth.5.png" - } - Frame { - msec: 5776 - hash: "5736362b42bc2d801e02edabb983663a" - } - Frame { - msec: 5792 - hash: "c3ea530de646612f9203c5800cad884b" - } - Frame { - msec: 5808 - hash: "48952ffa5e300778eafa768b9fe7df0c" - } - Frame { - msec: 5824 - hash: "fe04cae65aeec18697eca4f3f83a40e9" - } - Frame { - msec: 5840 - hash: "382d454f2366c1fb4ca472faa3bfa5e9" - } - Frame { - msec: 5856 - hash: "89022a8e2feb3dcb845de69aafc333ad" - } - Frame { - msec: 5872 - hash: "25506557c853a0020e98cf3992956989" - } - Frame { - msec: 5888 - hash: "9a64706c52c9e962816953e32950b8ba" - } - Frame { - msec: 5904 - hash: "3cbfded47413172ada64095e65c55e8a" - } - Frame { - msec: 5920 - hash: "3b7b83e97d17440b42e6ef4b962076d8" - } - Frame { - msec: 5936 - hash: "c5e399e29b988148913e62ee208b3326" - } - Frame { - msec: 5952 - hash: "b980703c1d0018937e83a8ba8862469e" - } - Frame { - msec: 5968 - hash: "05312f9529c94d3331ace7d73c544284" - } - Frame { - msec: 5984 - hash: "a94de4e90a8f8eb4ec33fe902afd226c" - } - Frame { - msec: 6000 - hash: "ee297a2d68c9e58157d9bf189d353713" - } - Frame { - msec: 6016 - hash: "00f3c9b8b37cb104cf2a7701639bc61f" - } - Frame { - msec: 6032 - hash: "ee297a2d68c9e58157d9bf189d353713" - } - Frame { - msec: 6048 - hash: "a94de4e90a8f8eb4ec33fe902afd226c" - } - Frame { - msec: 6064 - hash: "05312f9529c94d3331ace7d73c544284" - } - Frame { - msec: 6080 - hash: "b980703c1d0018937e83a8ba8862469e" - } - Frame { - msec: 6096 - hash: "c5e399e29b988148913e62ee208b3326" - } - Frame { - msec: 6112 - hash: "3b7b83e97d17440b42e6ef4b962076d8" - } - Frame { - msec: 6128 - hash: "3cbfded47413172ada64095e65c55e8a" - } - Frame { - msec: 6144 - hash: "9a64706c52c9e962816953e32950b8ba" - } - Frame { - msec: 6160 - hash: "25506557c853a0020e98cf3992956989" - } - Frame { - msec: 6176 - hash: "89022a8e2feb3dcb845de69aafc333ad" - } - Frame { - msec: 6192 - hash: "382d454f2366c1fb4ca472faa3bfa5e9" - } - Frame { - msec: 6208 - hash: "fe04cae65aeec18697eca4f3f83a40e9" - } - Frame { - msec: 6224 - hash: "48952ffa5e300778eafa768b9fe7df0c" - } - Frame { - msec: 6240 - hash: "c3ea530de646612f9203c5800cad884b" - } - Frame { - msec: 6256 - hash: "5736362b42bc2d801e02edabb983663a" - } - Frame { - msec: 6272 - hash: "5d9ee853f083d514fbe51d6953d8e000" - } - Frame { - msec: 6288 - hash: "fe899138116774df4c4441687e3019c5" - } - Frame { - msec: 6304 - hash: "47e920e3884ccf2f0f49e78070af6929" - } - Frame { - msec: 6320 - hash: "2b7eb8a9fe26b032be8b4b9c00995912" - } - Frame { - msec: 6336 - hash: "64cd225202ed6c91b02c368a9160a656" - } - Frame { - msec: 6352 - hash: "774740a393f3e9b8f12b81cce8da8280" - } - Frame { - msec: 6368 - hash: "3bae40654ec551d69e7c8c72f631c7a5" - } - Frame { - msec: 6384 - hash: "705d9c8de05c859a42769f73761c6a63" - } - Frame { - msec: 6400 - hash: "d1110817827c318ceb0c112e8c2bfc1d" - } - Frame { - msec: 6416 - hash: "880640372bf584955627f6835f24be13" - } - Frame { - msec: 6432 - hash: "64df51b4c1bf744b2aae1c6d908c2cc3" - } - Frame { - msec: 6448 - hash: "a087b532ecb2f28e4ee60819228c2522" - } - Frame { - msec: 6464 - hash: "e860e97ebd73b7d1d5d5d90458b34bfe" - } - Frame { - msec: 6480 - hash: "a261be47ae89e6b53e6bc1c1197154ae" - } - Frame { - msec: 6496 - hash: "c2edb016cfdd47c192d1c48281ee76ed" - } - Frame { - msec: 6512 - hash: "deed4c06c9b713834490832b88e7acaf" - } - Frame { - msec: 6528 - hash: "2fede2f5d871654f3f8a6e9d890adeac" - } - Frame { - msec: 6544 - hash: "29ddde3300d0520a4c01b5536d8b9e7a" - } - Frame { - msec: 6560 - hash: "c61d2aa7f934fb5a9f9f7883e063b51c" - } - Frame { - msec: 6576 - hash: "ddf1f5c0b97fe4821719ec5bf4bd091b" - } - Frame { - msec: 6592 - hash: "e5df07ea21e8e415c3ec82560f2d0f34" - } - Frame { - msec: 6608 - hash: "5cc90d798786c270ddd2616512f4459f" - } - Frame { - msec: 6624 - hash: "00ab7798bcd77a99886dff0414f35382" - } - Frame { - msec: 6640 - hash: "05cbce0eaa80b4610a9067af8c40f819" - } - Frame { - msec: 6656 - hash: "45d891d804609ebbe1d5ac3f826d0c17" - } - Frame { - msec: 6672 - hash: "d65d50fbb920e683b041a1c72238225b" - } - Frame { - msec: 6688 - hash: "39c46d85d20f7ef3eca1d09c7eb6a068" - } - Frame { - msec: 6704 - hash: "39cc17ee2e889f17dd07179fda99e431" - } - Frame { - msec: 6720 - image: "animated-smooth.6.png" - } - Frame { - msec: 6736 - hash: "7c9a98e2101c33e17c1bd7e6c2d921ff" - } - Frame { - msec: 6752 - hash: "0640fcb0b24d3ba4ab8695f78271a438" - } - Frame { - msec: 6768 - hash: "2084ccc60ddd493399c128717816d33b" - } - Frame { - msec: 6784 - hash: "bd045f4532d78bba0ef1b64118fd9f24" - } - Frame { - msec: 6800 - hash: "1f964c6c9bebdc9945dc69a6095400f7" - } - Frame { - msec: 6816 - hash: "2a1fcfb753ca237b518da26e67c928e5" - } - Frame { - msec: 6832 - hash: "07acba64dc608439a8a54fcb080379e8" - } - Frame { - msec: 6848 - hash: "d6615fc345831a3cc5b9a7196284b632" - } - Frame { - msec: 6864 - hash: "85ef33fcb3f91e4fc20391bf94455984" - } - Frame { - msec: 6880 - hash: "23291a0239c69ea07db959e709b1ff5f" - } - Frame { - msec: 6896 - hash: "53f05993ba3b426949badd2e4cd66d84" - } - Frame { - msec: 6912 - hash: "b375e723b2396b13b8f55cfc0c81c3c3" - } - Frame { - msec: 6928 - hash: "bd70500fbdfe5aa2fe4362a97a1dee2d" - } - Frame { - msec: 6944 - hash: "853429387cc639496c7338244de7e1b7" - } - Frame { - msec: 6960 - hash: "3df54504f8891306fa8f1e9e2075a5e2" - } - Frame { - msec: 6976 - hash: "0239d697642ca1d1b1d1daa3ea048e1e" - } - Frame { - msec: 6992 - hash: "b0070117f1c24a4da87434725d4bb989" - } - Frame { - msec: 7008 - hash: "8b8120cfc14de03e048632fdea61be21" - } - Frame { - msec: 7024 - hash: "845170815a87565dc4229792032b3357" - } - Frame { - msec: 7040 - hash: "0d407ee07692d0e5a480a60952807b3c" - } - Frame { - msec: 7056 - hash: "64b21b89576fdd0083f60a26f57b9c11" - } - Frame { - msec: 7072 - hash: "d7e96278583f83ab636ed68fa130e4d2" - } - Frame { - msec: 7088 - hash: "48db9a5e6aad9a9563a3cd35fb7fa9b6" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 7104 - hash: "adc670a9aa0326744cb23e4f5912e6c7" - } - Frame { - msec: 7120 - hash: "9cd29b4b023a8b92573575fb3c3dda83" - } - Frame { - msec: 7136 - hash: "177666cb3bb784c83196886b2c6cf6b6" - } - Frame { - msec: 7152 - hash: "ddd8a006ef048c8d929144aa9fcd7c5a" - } - Frame { - msec: 7168 - hash: "b699285764f5e8866a9996f4a0dccc69" - } - Frame { - msec: 7184 - hash: "84ef6dda8318b623832f58c46d762e89" - } - Frame { - msec: 7200 - hash: "d2ed2cf3a12e41bac299399cc35abe6a" - } - Frame { - msec: 7216 - hash: "ae12f1f37a746e16b06e6b869c89fac1" - } - Frame { - msec: 7232 - hash: "5d3e85acabe5e5ff802eb7731676274f" + hash: "98d48920293b11511e8bbf820dd49acc" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png index 99228f9..3efd596 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png index a2dcd00..517fc06 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.png deleted file mode 100644 index 8a80020..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.png deleted file mode 100644 index 02b57ef..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.png deleted file mode 100644 index df0f6cc..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.png deleted file mode 100644 index 0add64d..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.png deleted file mode 100644 index 0886207..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.png deleted file mode 100644 index bc1a7b0..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml index 630a6d2..236003a 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/animated.qml @@ -22,223 +22,223 @@ VisualTest { } Frame { msec: 80 - hash: "aec13bcab337e55832b0a02fb5c6b526" + hash: "aacf9ae3c23d174a1c1cda493600e355" } Frame { msec: 96 - hash: "aec13bcab337e55832b0a02fb5c6b526" + hash: "465ec993948f7b75aeb5759976f4620d" } Frame { msec: 112 - hash: "aec13bcab337e55832b0a02fb5c6b526" + hash: "b63e4d1686057828fd8781f1c33585f5" } Frame { msec: 128 - hash: "4c60d345821f515c7811f3b69eb94607" + hash: "4d45d70f997c2c67166905c97a900d2e" } Frame { msec: 144 - hash: "aacf9ae3c23d174a1c1cda493600e355" + hash: "08b9be66e23c7b6f6f629c7470394601" } Frame { msec: 160 - hash: "228d5312c261d1a5455faf69ec2f2520" + hash: "406224b535b4425d2708df0083acdc8e" } Frame { msec: 176 - hash: "465ec993948f7b75aeb5759976f4620d" + hash: "8419f1d75b14130730bcfec4e3a9b058" } Frame { msec: 192 - hash: "755cfccc38bababc468fe6e1076804bb" + hash: "c1936628aec13e08e9581dcd2c6d5717" } Frame { msec: 208 - hash: "b63e4d1686057828fd8781f1c33585f5" + hash: "8c66a33d26eec2a1133f4362710a5fab" } Frame { msec: 224 - hash: "c5b3dede34b0d1d78135e39c41d117c6" + hash: "01947e631c3db43f7c5b4427229bc0c8" } Frame { msec: 240 - hash: "4d45d70f997c2c67166905c97a900d2e" + hash: "06d8d8a1a41893d4e27725948a75caf4" } Frame { msec: 256 - hash: "7b4d12e5a877507e7454aa1b8ed87c2d" + hash: "ac8f096e8c7cc23bfb01de69cf3e266e" } Frame { msec: 272 - hash: "08b9be66e23c7b6f6f629c7470394601" + hash: "2a7bed775824968e318c3d40fbc5b1c2" } Frame { msec: 288 - hash: "3dac1d9632378bd18c1c938a4868e3fb" + hash: "f1a7a4a67a21f5025294af4bea3f8998" } Frame { msec: 304 - hash: "406224b535b4425d2708df0083acdc8e" + hash: "18c2f321a149e38b258ac264d40c2376" } Frame { msec: 320 - hash: "482bb92d4f0ad5d7c7e379b9e1ad326e" + hash: "19d05a96f3ae7388e854bbf1075b51c1" } Frame { msec: 336 - hash: "8419f1d75b14130730bcfec4e3a9b058" + hash: "554e1d360463871e7c05cfe6f8abe1dd" } Frame { msec: 352 - hash: "a85ee8be6a47bbd1b14137803ce606ec" + hash: "60f158382f75103c78e2b9b408e0fe65" } Frame { msec: 368 - hash: "c1936628aec13e08e9581dcd2c6d5717" + hash: "6a521f952e05d91b86ad78fd6f5de4f9" } Frame { msec: 384 - hash: "75c9bf83ca3fe24612c245698c089430" + hash: "a6f17da2dd581bdc249ff62f833dc025" } Frame { msec: 400 - hash: "8c66a33d26eec2a1133f4362710a5fab" + hash: "1ea07ee309ce2c52cbc36370b75a872f" } Frame { msec: 416 - hash: "2266df495ab5265e7514a506d3bf5bc6" + hash: "c7eb7837dce71c914186326216214eeb" } Frame { msec: 432 - hash: "01947e631c3db43f7c5b4427229bc0c8" + hash: "93cf31eabb454ec536c638a506be0648" } Frame { msec: 448 - hash: "3f62f032239d412d3637198f5e3e83d6" + hash: "1ac8c393f084aa1894c26610b7f40ea6" } Frame { msec: 464 - hash: "06d8d8a1a41893d4e27725948a75caf4" + hash: "f04e84ad3579d6334077abe73101d206" } Frame { msec: 480 - hash: "6b48bfd0c7993f746d6301c2a0f61d23" + hash: "ff0928dfd16b2da9811a172c19817a97" } Frame { msec: 496 - hash: "ac8f096e8c7cc23bfb01de69cf3e266e" + hash: "7383209c80b403b93da3264eadbc047f" } Frame { msec: 512 - hash: "dd4c9e63001bc6e0e63ea4db2d85301f" + hash: "bc747167dfb3388ac63e9e68a86b9a03" } Frame { msec: 528 - hash: "2a7bed775824968e318c3d40fbc5b1c2" + hash: "ae48da4a66f93c806725ce749700aac8" } Frame { msec: 544 - hash: "3152e5f29015ece423fbdd11a2b382b8" + hash: "956429472da133324c970774f77784f5" } Frame { msec: 560 - hash: "f1a7a4a67a21f5025294af4bea3f8998" + hash: "ec0aea8dc8c269d1f0aee5817347ac55" } Frame { msec: 576 - hash: "a40014d842471784e1222eb205395f6f" + hash: "81d2fc6727dc7449d1a87b4abea9b704" } Frame { msec: 592 - hash: "18c2f321a149e38b258ac264d40c2376" + hash: "80ebac4d923f67fb8dba3d133ce657ba" } Frame { msec: 608 - hash: "4ae120bb6dc2bd5ff81cc99ae03c191e" + hash: "5359f5e45e5467c62c2d9521c8199c48" } Frame { msec: 624 - hash: "19d05a96f3ae7388e854bbf1075b51c1" + hash: "08f55088cdce741c67539f73291e53ab" } Frame { msec: 640 - hash: "e418b5f54705515dce5ce3b4cbc45d19" + hash: "97f7a2175dcf9ac2581a92d614d72f88" } Frame { msec: 656 - hash: "554e1d360463871e7c05cfe6f8abe1dd" + hash: "985868869ef2c332da379460a2f3a71b" } Frame { msec: 672 - hash: "153237f8cf37e29ad2f32f7a8a6aecdb" + hash: "e91bb914c1eb63cd4269b30a220a128a" } Frame { msec: 688 - hash: "60f158382f75103c78e2b9b408e0fe65" + hash: "84c94704c16e246df1048f958cc8cefb" } Frame { msec: 704 - hash: "4e60300cfab8634e04dcd1b556251d31" + hash: "99de44f74f8e1f79652ab46afb4bb59e" } Frame { msec: 720 - hash: "6a521f952e05d91b86ad78fd6f5de4f9" + hash: "a1bd4e995365e79389dba80f9e3b7af8" } Frame { msec: 736 - hash: "b74521d6ac531414aeeca0fb28379d11" + hash: "3b95eb8cbfc831e1ebee2e456b026ab4" } Frame { msec: 752 - hash: "a6f17da2dd581bdc249ff62f833dc025" + hash: "11673a112566a64aca3c7010b9cc9c4d" } Frame { msec: 768 - hash: "93d9f0a7c387cbe653a9a088f8f4ef2b" + hash: "5b027815ea3c1ea54e1a02c798c468db" } Frame { msec: 784 - hash: "1ea07ee309ce2c52cbc36370b75a872f" + hash: "73c5f23f51797a33f4d2898738e6356e" } Frame { msec: 800 - hash: "593a8a45c3a0cd7ce1cb6bd1913136ba" + hash: "fb17df681d99d5de05f6329bba697ea5" } Frame { msec: 816 - hash: "c7eb7837dce71c914186326216214eeb" + hash: "0b1a741975e3d9ef8f5e78f371c89441" } Frame { msec: 832 - hash: "0cba07ca38c7f0483244832a42d9ac53" + hash: "a790f0e884ab85f7802dd094e4ef550f" } Frame { msec: 848 - hash: "93cf31eabb454ec536c638a506be0648" + hash: "b12faa76c07adc21634cd8f8cb8436ae" } Frame { msec: 864 - hash: "e8a61d3858244127cb2b2812f04f5ce9" + hash: "f57727419bb51fb1e589b960ddeb20ae" } Frame { msec: 880 - hash: "1ac8c393f084aa1894c26610b7f40ea6" + hash: "8172e076b05d95248d89e815fde820ef" } Frame { msec: 896 - hash: "8861bf848da5c96b35addff736b01520" + hash: "74c1e71378b502bc1b732a55806a10f1" } Frame { msec: 912 - hash: "f04e84ad3579d6334077abe73101d206" + hash: "a67e9a0f55512fb1c55f13c6b483923b" } Frame { msec: 928 - hash: "eac4600372f0fdfadee88896ac915a48" + hash: "13ca95adab171d9fad9ee8b75d0226bc" } Frame { msec: 944 - hash: "ff0928dfd16b2da9811a172c19817a97" + hash: "7aa0cbf73f7999be7cde4ec739efbc33" } Frame { msec: 960 @@ -246,239 +246,239 @@ VisualTest { } Frame { msec: 976 - hash: "7383209c80b403b93da3264eadbc047f" + hash: "29245946cbd811fe6bf6b2b41cc13002" } Frame { msec: 992 - hash: "86360bd58bba5fdd901c105ddb2e3ade" + hash: "058c918e83bfdd665cd836566b53959b" } Frame { msec: 1008 - hash: "bc747167dfb3388ac63e9e68a86b9a03" + hash: "ed5d80c33dbf72624385b1cf43784626" } Frame { msec: 1024 - hash: "bccb4b8a494bd45bd70c2524a02a9dc3" + hash: "ed5d80c33dbf72624385b1cf43784626" } Frame { msec: 1040 - hash: "ae48da4a66f93c806725ce749700aac8" + hash: "058c918e83bfdd665cd836566b53959b" } Frame { msec: 1056 - hash: "c763f56728e17fc119539a4d45dfccc3" + hash: "29245946cbd811fe6bf6b2b41cc13002" } Frame { msec: 1072 - hash: "956429472da133324c970774f77784f5" + hash: "d1ed4916cb1ecff60277d74369ff311b" } Frame { msec: 1088 - hash: "a4ddb4956d71fd642d54757938100cf3" + hash: "7aa0cbf73f7999be7cde4ec739efbc33" } Frame { msec: 1104 - hash: "ec0aea8dc8c269d1f0aee5817347ac55" + hash: "13ca95adab171d9fad9ee8b75d0226bc" } Frame { msec: 1120 - hash: "68dae343cf324391ec6721cea14575f7" + hash: "a67e9a0f55512fb1c55f13c6b483923b" } Frame { msec: 1136 - hash: "81d2fc6727dc7449d1a87b4abea9b704" + hash: "74c1e71378b502bc1b732a55806a10f1" } Frame { msec: 1152 - hash: "c3a1f12febc979150028737722d6d045" + hash: "8172e076b05d95248d89e815fde820ef" } Frame { msec: 1168 - hash: "80ebac4d923f67fb8dba3d133ce657ba" + hash: "f57727419bb51fb1e589b960ddeb20ae" } Frame { msec: 1184 - hash: "7c22fc3e30377cc14326833bdd23ddd8" + hash: "b12faa76c07adc21634cd8f8cb8436ae" } Frame { msec: 1200 - hash: "5359f5e45e5467c62c2d9521c8199c48" + hash: "a790f0e884ab85f7802dd094e4ef550f" } Frame { msec: 1216 - hash: "30f84a7f67b13a945ba6d5935ea92da5" + hash: "0b1a741975e3d9ef8f5e78f371c89441" } Frame { msec: 1232 - hash: "08f55088cdce741c67539f73291e53ab" + hash: "fb17df681d99d5de05f6329bba697ea5" } Frame { msec: 1248 - hash: "93128906d054e44bfd126fc22bdc3102" + hash: "73c5f23f51797a33f4d2898738e6356e" } Frame { msec: 1264 - hash: "97f7a2175dcf9ac2581a92d614d72f88" + hash: "5b027815ea3c1ea54e1a02c798c468db" } Frame { msec: 1280 - hash: "587cb6e05048579088e88e0180e3ad48" + hash: "11673a112566a64aca3c7010b9cc9c4d" } Frame { msec: 1296 - hash: "985868869ef2c332da379460a2f3a71b" + hash: "3b95eb8cbfc831e1ebee2e456b026ab4" } Frame { msec: 1312 - hash: "94084ca4998fcda408f6987f52c34185" + hash: "a1bd4e995365e79389dba80f9e3b7af8" } Frame { msec: 1328 - hash: "e91bb914c1eb63cd4269b30a220a128a" + hash: "99de44f74f8e1f79652ab46afb4bb59e" } Frame { msec: 1344 - hash: "e880d93963c80e4fab5173554c9600fc" + hash: "84c94704c16e246df1048f958cc8cefb" } Frame { msec: 1360 - hash: "84c94704c16e246df1048f958cc8cefb" + hash: "e91bb914c1eb63cd4269b30a220a128a" } Frame { msec: 1376 - hash: "4f1eace868a6688e5b24ce48a1f0fd18" + hash: "985868869ef2c332da379460a2f3a71b" } Frame { msec: 1392 - hash: "99de44f74f8e1f79652ab46afb4bb59e" + hash: "97f7a2175dcf9ac2581a92d614d72f88" } Frame { msec: 1408 - hash: "44072400ca3f0237d1aebae28a94becc" + hash: "08f55088cdce741c67539f73291e53ab" } Frame { msec: 1424 - hash: "a1bd4e995365e79389dba80f9e3b7af8" + hash: "5359f5e45e5467c62c2d9521c8199c48" } Frame { msec: 1440 - hash: "95d776c84fe155617fc4ee51bdb45b7e" + hash: "80ebac4d923f67fb8dba3d133ce657ba" } Frame { msec: 1456 - hash: "3b95eb8cbfc831e1ebee2e456b026ab4" + hash: "81d2fc6727dc7449d1a87b4abea9b704" } Frame { msec: 1472 - hash: "826c7741ba0c51de407bb799e8f360b5" + hash: "ec0aea8dc8c269d1f0aee5817347ac55" } Frame { msec: 1488 - hash: "11673a112566a64aca3c7010b9cc9c4d" + hash: "956429472da133324c970774f77784f5" } Frame { msec: 1504 - hash: "e1e6c7a7f51bcccd749710dbbf9e97f6" + hash: "ae48da4a66f93c806725ce749700aac8" } Frame { msec: 1520 - hash: "5b027815ea3c1ea54e1a02c798c468db" + hash: "bc747167dfb3388ac63e9e68a86b9a03" } Frame { msec: 1536 - hash: "65c514c9e926affe1da0b4826d2754c7" + hash: "7383209c80b403b93da3264eadbc047f" } Frame { msec: 1552 - hash: "73c5f23f51797a33f4d2898738e6356e" + hash: "ff0928dfd16b2da9811a172c19817a97" } Frame { msec: 1568 - hash: "acd9a2e76b22ab0ff809fd3ec3a018ec" + hash: "f04e84ad3579d6334077abe73101d206" } Frame { msec: 1584 - hash: "fb17df681d99d5de05f6329bba697ea5" + hash: "1ac8c393f084aa1894c26610b7f40ea6" } Frame { msec: 1600 - hash: "1bf7a98884b506b38326f59f85a53f41" + hash: "93cf31eabb454ec536c638a506be0648" } Frame { msec: 1616 - hash: "0b1a741975e3d9ef8f5e78f371c89441" + hash: "c7eb7837dce71c914186326216214eeb" } Frame { msec: 1632 - hash: "a6937ee49648ed0cb409063bf1da3b87" + hash: "1ea07ee309ce2c52cbc36370b75a872f" } Frame { msec: 1648 - hash: "a790f0e884ab85f7802dd094e4ef550f" + hash: "a6f17da2dd581bdc249ff62f833dc025" } Frame { msec: 1664 - hash: "3b644aac161f0a75bfb64f5075373190" + hash: "6a521f952e05d91b86ad78fd6f5de4f9" } Frame { msec: 1680 - hash: "b12faa76c07adc21634cd8f8cb8436ae" + hash: "60f158382f75103c78e2b9b408e0fe65" } Frame { msec: 1696 - hash: "3fb20f9dbd40b4729235e13af9643afc" + hash: "554e1d360463871e7c05cfe6f8abe1dd" } Frame { msec: 1712 - hash: "f57727419bb51fb1e589b960ddeb20ae" + hash: "19d05a96f3ae7388e854bbf1075b51c1" } Frame { msec: 1728 - hash: "7b78cba247f2c209ed81e003ca25d0a5" + hash: "18c2f321a149e38b258ac264d40c2376" } Frame { msec: 1744 - hash: "8172e076b05d95248d89e815fde820ef" + hash: "f1a7a4a67a21f5025294af4bea3f8998" } Frame { msec: 1760 - hash: "a88d6fc324ef48aa52c642a1662ec679" + hash: "2a7bed775824968e318c3d40fbc5b1c2" } Frame { msec: 1776 - hash: "74c1e71378b502bc1b732a55806a10f1" + hash: "ac8f096e8c7cc23bfb01de69cf3e266e" } Frame { msec: 1792 - hash: "6eae517ad33f0609c31ef1f8f80ba899" + hash: "06d8d8a1a41893d4e27725948a75caf4" } Frame { msec: 1808 - hash: "a67e9a0f55512fb1c55f13c6b483923b" + hash: "01947e631c3db43f7c5b4427229bc0c8" } Frame { msec: 1824 - hash: "4887cd34d9926a361f3ca2e75be53ea6" + hash: "8c66a33d26eec2a1133f4362710a5fab" } Frame { msec: 1840 - hash: "13ca95adab171d9fad9ee8b75d0226bc" + hash: "c1936628aec13e08e9581dcd2c6d5717" } Frame { msec: 1856 - hash: "affab9fb48c889a2680eb81458d400f9" + hash: "8419f1d75b14130730bcfec4e3a9b058" } Frame { msec: 1872 - hash: "7aa0cbf73f7999be7cde4ec739efbc33" + hash: "406224b535b4425d2708df0083acdc8e" } Frame { msec: 1888 - hash: "36c054064c9a76f4072492e55c70fb6c" + hash: "08b9be66e23c7b6f6f629c7470394601" } Frame { msec: 1904 - hash: "d1ed4916cb1ecff60277d74369ff311b" + hash: "4d45d70f997c2c67166905c97a900d2e" } Frame { msec: 1920 @@ -486,1606 +486,70 @@ VisualTest { } Frame { msec: 1936 - hash: "29245946cbd811fe6bf6b2b41cc13002" + hash: "465ec993948f7b75aeb5759976f4620d" } Frame { msec: 1952 - hash: "8a9dd7a2d10771633e6896f3f4a722ae" + hash: "aacf9ae3c23d174a1c1cda493600e355" } Frame { msec: 1968 - hash: "058c918e83bfdd665cd836566b53959b" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 1984 - hash: "fdf3b7a0391119e2fe77be8d6a17481d" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2000 - hash: "ed5d80c33dbf72624385b1cf43784626" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2016 - hash: "911591db1519ba264847f09868e38e0e" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2032 - hash: "ed5d80c33dbf72624385b1cf43784626" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2048 - hash: "fdf3b7a0391119e2fe77be8d6a17481d" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2064 - hash: "058c918e83bfdd665cd836566b53959b" + hash: "aec13bcab337e55832b0a02fb5c6b526" } Frame { msec: 2080 - hash: "8a9dd7a2d10771633e6896f3f4a722ae" + hash: "aacf9ae3c23d174a1c1cda493600e355" } Frame { msec: 2096 - hash: "29245946cbd811fe6bf6b2b41cc13002" + hash: "465ec993948f7b75aeb5759976f4620d" } Frame { msec: 2112 - hash: "63ebaa4869728f5e2891d068e4b0091c" + hash: "b63e4d1686057828fd8781f1c33585f5" } Frame { msec: 2128 - hash: "d1ed4916cb1ecff60277d74369ff311b" + hash: "4d45d70f997c2c67166905c97a900d2e" } Frame { msec: 2144 - hash: "36c054064c9a76f4072492e55c70fb6c" + hash: "08b9be66e23c7b6f6f629c7470394601" } Frame { msec: 2160 - hash: "7aa0cbf73f7999be7cde4ec739efbc33" + hash: "406224b535b4425d2708df0083acdc8e" } Frame { msec: 2176 - hash: "affab9fb48c889a2680eb81458d400f9" + hash: "8419f1d75b14130730bcfec4e3a9b058" } Frame { msec: 2192 - hash: "13ca95adab171d9fad9ee8b75d0226bc" - } - Frame { - msec: 2208 - hash: "4887cd34d9926a361f3ca2e75be53ea6" - } - Frame { - msec: 2224 - hash: "a67e9a0f55512fb1c55f13c6b483923b" - } - Frame { - msec: 2240 - hash: "6eae517ad33f0609c31ef1f8f80ba899" - } - Frame { - msec: 2256 - hash: "74c1e71378b502bc1b732a55806a10f1" - } - Frame { - msec: 2272 - hash: "a88d6fc324ef48aa52c642a1662ec679" - } - Frame { - msec: 2288 - hash: "8172e076b05d95248d89e815fde820ef" - } - Frame { - msec: 2304 - hash: "7b78cba247f2c209ed81e003ca25d0a5" - } - Frame { - msec: 2320 - hash: "f57727419bb51fb1e589b960ddeb20ae" - } - Frame { - msec: 2336 - hash: "3fb20f9dbd40b4729235e13af9643afc" - } - Frame { - msec: 2352 - hash: "b12faa76c07adc21634cd8f8cb8436ae" - } - Frame { - msec: 2368 - hash: "3b644aac161f0a75bfb64f5075373190" - } - Frame { - msec: 2384 - hash: "a790f0e884ab85f7802dd094e4ef550f" - } - Frame { - msec: 2400 - hash: "a6937ee49648ed0cb409063bf1da3b87" - } - Frame { - msec: 2416 - hash: "0b1a741975e3d9ef8f5e78f371c89441" - } - Frame { - msec: 2432 - hash: "1bf7a98884b506b38326f59f85a53f41" - } - Frame { - msec: 2448 - hash: "fb17df681d99d5de05f6329bba697ea5" - } - Frame { - msec: 2464 - hash: "acd9a2e76b22ab0ff809fd3ec3a018ec" - } - Frame { - msec: 2480 - hash: "73c5f23f51797a33f4d2898738e6356e" - } - Frame { - msec: 2496 - hash: "65c514c9e926affe1da0b4826d2754c7" - } - Frame { - msec: 2512 - hash: "5b027815ea3c1ea54e1a02c798c468db" - } - Frame { - msec: 2528 - hash: "e1e6c7a7f51bcccd749710dbbf9e97f6" - } - Frame { - msec: 2544 - hash: "11673a112566a64aca3c7010b9cc9c4d" - } - Frame { - msec: 2560 - hash: "826c7741ba0c51de407bb799e8f360b5" - } - Frame { - msec: 2576 - hash: "3b95eb8cbfc831e1ebee2e456b026ab4" - } - Frame { - msec: 2592 - hash: "95d776c84fe155617fc4ee51bdb45b7e" - } - Frame { - msec: 2608 - hash: "a1bd4e995365e79389dba80f9e3b7af8" - } - Frame { - msec: 2624 - hash: "44072400ca3f0237d1aebae28a94becc" - } - Frame { - msec: 2640 - hash: "99de44f74f8e1f79652ab46afb4bb59e" - } - Frame { - msec: 2656 - hash: "4f1eace868a6688e5b24ce48a1f0fd18" - } - Frame { - msec: 2672 - hash: "84c94704c16e246df1048f958cc8cefb" - } - Frame { - msec: 2688 - hash: "e880d93963c80e4fab5173554c9600fc" - } - Frame { - msec: 2704 - hash: "e91bb914c1eb63cd4269b30a220a128a" - } - Frame { - msec: 2720 - hash: "94084ca4998fcda408f6987f52c34185" - } - Frame { - msec: 2736 - hash: "985868869ef2c332da379460a2f3a71b" - } - Frame { - msec: 2752 - hash: "587cb6e05048579088e88e0180e3ad48" - } - Frame { - msec: 2768 - hash: "97f7a2175dcf9ac2581a92d614d72f88" - } - Frame { - msec: 2784 - hash: "93128906d054e44bfd126fc22bdc3102" - } - Frame { - msec: 2800 - hash: "08f55088cdce741c67539f73291e53ab" - } - Frame { - msec: 2816 - hash: "30f84a7f67b13a945ba6d5935ea92da5" - } - Frame { - msec: 2832 - hash: "5359f5e45e5467c62c2d9521c8199c48" - } - Frame { - msec: 2848 - hash: "7c22fc3e30377cc14326833bdd23ddd8" - } - Frame { - msec: 2864 - hash: "80ebac4d923f67fb8dba3d133ce657ba" - } - Frame { - msec: 2880 - image: "animated.2.png" - } - Frame { - msec: 2896 - hash: "81d2fc6727dc7449d1a87b4abea9b704" - } - Frame { - msec: 2912 - hash: "68dae343cf324391ec6721cea14575f7" - } - Frame { - msec: 2928 - hash: "ec0aea8dc8c269d1f0aee5817347ac55" - } - Frame { - msec: 2944 - hash: "a4ddb4956d71fd642d54757938100cf3" - } - Frame { - msec: 2960 - hash: "956429472da133324c970774f77784f5" - } - Frame { - msec: 2976 - hash: "c763f56728e17fc119539a4d45dfccc3" - } - Frame { - msec: 2992 - hash: "ae48da4a66f93c806725ce749700aac8" - } - Frame { - msec: 3008 - hash: "bccb4b8a494bd45bd70c2524a02a9dc3" - } - Frame { - msec: 3024 - hash: "bc747167dfb3388ac63e9e68a86b9a03" - } - Frame { - msec: 3040 - hash: "86360bd58bba5fdd901c105ddb2e3ade" - } - Frame { - msec: 3056 - hash: "7383209c80b403b93da3264eadbc047f" - } - Frame { - msec: 3072 - hash: "280288a7988736e30a2a3e4289ac3b0c" - } - Frame { - msec: 3088 - hash: "ff0928dfd16b2da9811a172c19817a97" - } - Frame { - msec: 3104 - hash: "eac4600372f0fdfadee88896ac915a48" - } - Frame { - msec: 3120 - hash: "f04e84ad3579d6334077abe73101d206" - } - Frame { - msec: 3136 - hash: "8861bf848da5c96b35addff736b01520" - } - Frame { - msec: 3152 - hash: "1ac8c393f084aa1894c26610b7f40ea6" - } - Frame { - msec: 3168 - hash: "e8a61d3858244127cb2b2812f04f5ce9" - } - Frame { - msec: 3184 - hash: "93cf31eabb454ec536c638a506be0648" - } - Frame { - msec: 3200 - hash: "0cba07ca38c7f0483244832a42d9ac53" - } - Frame { - msec: 3216 - hash: "c7eb7837dce71c914186326216214eeb" - } - Frame { - msec: 3232 - hash: "593a8a45c3a0cd7ce1cb6bd1913136ba" - } - Frame { - msec: 3248 - hash: "1ea07ee309ce2c52cbc36370b75a872f" - } - Frame { - msec: 3264 - hash: "93d9f0a7c387cbe653a9a088f8f4ef2b" - } - Frame { - msec: 3280 - hash: "a6f17da2dd581bdc249ff62f833dc025" - } - Frame { - msec: 3296 - hash: "b74521d6ac531414aeeca0fb28379d11" - } - Frame { - msec: 3312 - hash: "6a521f952e05d91b86ad78fd6f5de4f9" - } - Frame { - msec: 3328 - hash: "4e60300cfab8634e04dcd1b556251d31" - } - Frame { - msec: 3344 - hash: "60f158382f75103c78e2b9b408e0fe65" - } - Frame { - msec: 3360 - hash: "153237f8cf37e29ad2f32f7a8a6aecdb" - } - Frame { - msec: 3376 - hash: "554e1d360463871e7c05cfe6f8abe1dd" - } - Frame { - msec: 3392 - hash: "e418b5f54705515dce5ce3b4cbc45d19" - } - Frame { - msec: 3408 - hash: "19d05a96f3ae7388e854bbf1075b51c1" - } - Frame { - msec: 3424 - hash: "4ae120bb6dc2bd5ff81cc99ae03c191e" - } - Frame { - msec: 3440 - hash: "18c2f321a149e38b258ac264d40c2376" - } - Frame { - msec: 3456 - hash: "a40014d842471784e1222eb205395f6f" - } - Frame { - msec: 3472 - hash: "f1a7a4a67a21f5025294af4bea3f8998" - } - Frame { - msec: 3488 - hash: "3152e5f29015ece423fbdd11a2b382b8" - } - Frame { - msec: 3504 - hash: "2a7bed775824968e318c3d40fbc5b1c2" - } - Frame { - msec: 3520 - hash: "dd4c9e63001bc6e0e63ea4db2d85301f" - } - Frame { - msec: 3536 - hash: "ac8f096e8c7cc23bfb01de69cf3e266e" - } - Frame { - msec: 3552 - hash: "6b48bfd0c7993f746d6301c2a0f61d23" - } - Frame { - msec: 3568 - hash: "06d8d8a1a41893d4e27725948a75caf4" - } - Frame { - msec: 3584 - hash: "3f62f032239d412d3637198f5e3e83d6" - } - Frame { - msec: 3600 - hash: "01947e631c3db43f7c5b4427229bc0c8" - } - Frame { - msec: 3616 - hash: "2266df495ab5265e7514a506d3bf5bc6" - } - Frame { - msec: 3632 - hash: "8c66a33d26eec2a1133f4362710a5fab" - } - Frame { - msec: 3648 - hash: "75c9bf83ca3fe24612c245698c089430" - } - Frame { - msec: 3664 - hash: "c1936628aec13e08e9581dcd2c6d5717" - } - Frame { - msec: 3680 - hash: "a85ee8be6a47bbd1b14137803ce606ec" - } - Frame { - msec: 3696 - hash: "8419f1d75b14130730bcfec4e3a9b058" - } - Frame { - msec: 3712 - hash: "482bb92d4f0ad5d7c7e379b9e1ad326e" - } - Frame { - msec: 3728 - hash: "406224b535b4425d2708df0083acdc8e" - } - Frame { - msec: 3744 - hash: "3dac1d9632378bd18c1c938a4868e3fb" - } - Frame { - msec: 3760 - hash: "08b9be66e23c7b6f6f629c7470394601" - } - Frame { - msec: 3776 - hash: "7b4d12e5a877507e7454aa1b8ed87c2d" - } - Frame { - msec: 3792 - hash: "4d45d70f997c2c67166905c97a900d2e" - } - Frame { - msec: 3808 - hash: "c5b3dede34b0d1d78135e39c41d117c6" - } - Frame { - msec: 3824 - hash: "b63e4d1686057828fd8781f1c33585f5" - } - Frame { - msec: 3840 - image: "animated.3.png" - } - Frame { - msec: 3856 - hash: "465ec993948f7b75aeb5759976f4620d" - } - Frame { - msec: 3872 - hash: "228d5312c261d1a5455faf69ec2f2520" - } - Frame { - msec: 3888 - hash: "aacf9ae3c23d174a1c1cda493600e355" - } - Frame { - msec: 3904 - hash: "4c60d345821f515c7811f3b69eb94607" - } - Frame { - msec: 3920 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 3936 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 3952 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 3968 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 3984 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4000 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4016 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4032 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4048 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4064 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4080 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4096 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4112 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 4128 - hash: "4c60d345821f515c7811f3b69eb94607" - } - Frame { - msec: 4144 - hash: "aacf9ae3c23d174a1c1cda493600e355" - } - Frame { - msec: 4160 - hash: "228d5312c261d1a5455faf69ec2f2520" - } - Frame { - msec: 4176 - hash: "465ec993948f7b75aeb5759976f4620d" - } - Frame { - msec: 4192 - hash: "755cfccc38bababc468fe6e1076804bb" - } - Frame { - msec: 4208 - hash: "b63e4d1686057828fd8781f1c33585f5" - } - Frame { - msec: 4224 - hash: "c5b3dede34b0d1d78135e39c41d117c6" - } - Frame { - msec: 4240 - hash: "4d45d70f997c2c67166905c97a900d2e" - } - Frame { - msec: 4256 - hash: "7b4d12e5a877507e7454aa1b8ed87c2d" - } - Frame { - msec: 4272 - hash: "08b9be66e23c7b6f6f629c7470394601" - } - Frame { - msec: 4288 - hash: "3dac1d9632378bd18c1c938a4868e3fb" - } - Frame { - msec: 4304 - hash: "406224b535b4425d2708df0083acdc8e" - } - Frame { - msec: 4320 - hash: "482bb92d4f0ad5d7c7e379b9e1ad326e" - } - Frame { - msec: 4336 - hash: "8419f1d75b14130730bcfec4e3a9b058" - } - Frame { - msec: 4352 - hash: "a85ee8be6a47bbd1b14137803ce606ec" - } - Frame { - msec: 4368 - hash: "c1936628aec13e08e9581dcd2c6d5717" - } - Frame { - msec: 4384 - hash: "75c9bf83ca3fe24612c245698c089430" - } - Frame { - msec: 4400 - hash: "8c66a33d26eec2a1133f4362710a5fab" - } - Frame { - msec: 4416 - hash: "2266df495ab5265e7514a506d3bf5bc6" - } - Frame { - msec: 4432 - hash: "01947e631c3db43f7c5b4427229bc0c8" - } - Frame { - msec: 4448 - hash: "3f62f032239d412d3637198f5e3e83d6" - } - Frame { - msec: 4464 - hash: "06d8d8a1a41893d4e27725948a75caf4" - } - Frame { - msec: 4480 - hash: "6b48bfd0c7993f746d6301c2a0f61d23" - } - Frame { - msec: 4496 - hash: "ac8f096e8c7cc23bfb01de69cf3e266e" - } - Frame { - msec: 4512 - hash: "dd4c9e63001bc6e0e63ea4db2d85301f" - } - Frame { - msec: 4528 - hash: "2a7bed775824968e318c3d40fbc5b1c2" - } - Frame { - msec: 4544 - hash: "3152e5f29015ece423fbdd11a2b382b8" - } - Frame { - msec: 4560 - hash: "f1a7a4a67a21f5025294af4bea3f8998" - } - Frame { - msec: 4576 - hash: "a40014d842471784e1222eb205395f6f" - } - Frame { - msec: 4592 - hash: "18c2f321a149e38b258ac264d40c2376" - } - Frame { - msec: 4608 - hash: "4ae120bb6dc2bd5ff81cc99ae03c191e" - } - Frame { - msec: 4624 - hash: "19d05a96f3ae7388e854bbf1075b51c1" - } - Frame { - msec: 4640 - hash: "e418b5f54705515dce5ce3b4cbc45d19" - } - Frame { - msec: 4656 - hash: "554e1d360463871e7c05cfe6f8abe1dd" - } - Frame { - msec: 4672 - hash: "153237f8cf37e29ad2f32f7a8a6aecdb" - } - Frame { - msec: 4688 - hash: "60f158382f75103c78e2b9b408e0fe65" - } - Frame { - msec: 4704 - hash: "4e60300cfab8634e04dcd1b556251d31" - } - Frame { - msec: 4720 - hash: "6a521f952e05d91b86ad78fd6f5de4f9" - } - Frame { - msec: 4736 - hash: "b74521d6ac531414aeeca0fb28379d11" - } - Frame { - msec: 4752 - hash: "a6f17da2dd581bdc249ff62f833dc025" - } - Frame { - msec: 4768 - hash: "93d9f0a7c387cbe653a9a088f8f4ef2b" - } - Frame { - msec: 4784 - hash: "1ea07ee309ce2c52cbc36370b75a872f" - } - Frame { - msec: 4800 - image: "animated.4.png" - } - Frame { - msec: 4816 - hash: "c7eb7837dce71c914186326216214eeb" - } - Frame { - msec: 4832 - hash: "0cba07ca38c7f0483244832a42d9ac53" - } - Frame { - msec: 4848 - hash: "93cf31eabb454ec536c638a506be0648" - } - Frame { - msec: 4864 - hash: "e8a61d3858244127cb2b2812f04f5ce9" - } - Frame { - msec: 4880 - hash: "1ac8c393f084aa1894c26610b7f40ea6" - } - Frame { - msec: 4896 - hash: "8861bf848da5c96b35addff736b01520" - } - Frame { - msec: 4912 - hash: "f04e84ad3579d6334077abe73101d206" - } - Frame { - msec: 4928 - hash: "eac4600372f0fdfadee88896ac915a48" - } - Frame { - msec: 4944 - hash: "ff0928dfd16b2da9811a172c19817a97" - } - Frame { - msec: 4960 - hash: "280288a7988736e30a2a3e4289ac3b0c" - } - Frame { - msec: 4976 - hash: "7383209c80b403b93da3264eadbc047f" - } - Frame { - msec: 4992 - hash: "86360bd58bba5fdd901c105ddb2e3ade" - } - Frame { - msec: 5008 - hash: "bc747167dfb3388ac63e9e68a86b9a03" - } - Frame { - msec: 5024 - hash: "bccb4b8a494bd45bd70c2524a02a9dc3" - } - Frame { - msec: 5040 - hash: "ae48da4a66f93c806725ce749700aac8" - } - Frame { - msec: 5056 - hash: "c763f56728e17fc119539a4d45dfccc3" - } - Frame { - msec: 5072 - hash: "956429472da133324c970774f77784f5" - } - Frame { - msec: 5088 - hash: "a4ddb4956d71fd642d54757938100cf3" - } - Frame { - msec: 5104 - hash: "ec0aea8dc8c269d1f0aee5817347ac55" - } - Frame { - msec: 5120 - hash: "68dae343cf324391ec6721cea14575f7" - } - Frame { - msec: 5136 - hash: "81d2fc6727dc7449d1a87b4abea9b704" - } - Frame { - msec: 5152 - hash: "c3a1f12febc979150028737722d6d045" - } - Frame { - msec: 5168 - hash: "80ebac4d923f67fb8dba3d133ce657ba" - } - Frame { - msec: 5184 - hash: "7c22fc3e30377cc14326833bdd23ddd8" - } - Frame { - msec: 5200 - hash: "5359f5e45e5467c62c2d9521c8199c48" - } - Frame { - msec: 5216 - hash: "30f84a7f67b13a945ba6d5935ea92da5" - } - Frame { - msec: 5232 - hash: "08f55088cdce741c67539f73291e53ab" - } - Frame { - msec: 5248 - hash: "93128906d054e44bfd126fc22bdc3102" - } - Frame { - msec: 5264 - hash: "97f7a2175dcf9ac2581a92d614d72f88" - } - Frame { - msec: 5280 - hash: "587cb6e05048579088e88e0180e3ad48" - } - Frame { - msec: 5296 - hash: "985868869ef2c332da379460a2f3a71b" - } - Frame { - msec: 5312 - hash: "94084ca4998fcda408f6987f52c34185" - } - Frame { - msec: 5328 - hash: "e91bb914c1eb63cd4269b30a220a128a" - } - Frame { - msec: 5344 - hash: "e880d93963c80e4fab5173554c9600fc" - } - Frame { - msec: 5360 - hash: "84c94704c16e246df1048f958cc8cefb" - } - Frame { - msec: 5376 - hash: "4f1eace868a6688e5b24ce48a1f0fd18" - } - Frame { - msec: 5392 - hash: "99de44f74f8e1f79652ab46afb4bb59e" - } - Frame { - msec: 5408 - hash: "44072400ca3f0237d1aebae28a94becc" - } - Frame { - msec: 5424 - hash: "a1bd4e995365e79389dba80f9e3b7af8" - } - Frame { - msec: 5440 - hash: "95d776c84fe155617fc4ee51bdb45b7e" - } - Frame { - msec: 5456 - hash: "3b95eb8cbfc831e1ebee2e456b026ab4" - } - Frame { - msec: 5472 - hash: "826c7741ba0c51de407bb799e8f360b5" - } - Frame { - msec: 5488 - hash: "11673a112566a64aca3c7010b9cc9c4d" - } - Frame { - msec: 5504 - hash: "e1e6c7a7f51bcccd749710dbbf9e97f6" - } - Frame { - msec: 5520 - hash: "5b027815ea3c1ea54e1a02c798c468db" - } - Frame { - msec: 5536 - hash: "65c514c9e926affe1da0b4826d2754c7" - } - Frame { - msec: 5552 - hash: "73c5f23f51797a33f4d2898738e6356e" - } - Frame { - msec: 5568 - hash: "acd9a2e76b22ab0ff809fd3ec3a018ec" - } - Frame { - msec: 5584 - hash: "fb17df681d99d5de05f6329bba697ea5" - } - Frame { - msec: 5600 - hash: "1bf7a98884b506b38326f59f85a53f41" - } - Frame { - msec: 5616 - hash: "0b1a741975e3d9ef8f5e78f371c89441" - } - Frame { - msec: 5632 - hash: "a6937ee49648ed0cb409063bf1da3b87" - } - Frame { - msec: 5648 - hash: "a790f0e884ab85f7802dd094e4ef550f" - } - Frame { - msec: 5664 - hash: "3b644aac161f0a75bfb64f5075373190" - } - Frame { - msec: 5680 - hash: "b12faa76c07adc21634cd8f8cb8436ae" - } - Frame { - msec: 5696 - hash: "3fb20f9dbd40b4729235e13af9643afc" - } - Frame { - msec: 5712 - hash: "f57727419bb51fb1e589b960ddeb20ae" - } - Frame { - msec: 5728 - hash: "7b78cba247f2c209ed81e003ca25d0a5" - } - Frame { - msec: 5744 - hash: "8172e076b05d95248d89e815fde820ef" - } - Frame { - msec: 5760 - image: "animated.5.png" - } - Frame { - msec: 5776 - hash: "74c1e71378b502bc1b732a55806a10f1" - } - Frame { - msec: 5792 - hash: "6eae517ad33f0609c31ef1f8f80ba899" - } - Frame { - msec: 5808 - hash: "a67e9a0f55512fb1c55f13c6b483923b" - } - Frame { - msec: 5824 - hash: "4887cd34d9926a361f3ca2e75be53ea6" - } - Frame { - msec: 5840 - hash: "13ca95adab171d9fad9ee8b75d0226bc" - } - Frame { - msec: 5856 - hash: "affab9fb48c889a2680eb81458d400f9" - } - Frame { - msec: 5872 - hash: "7aa0cbf73f7999be7cde4ec739efbc33" - } - Frame { - msec: 5888 - hash: "36c054064c9a76f4072492e55c70fb6c" - } - Frame { - msec: 5904 - hash: "d1ed4916cb1ecff60277d74369ff311b" - } - Frame { - msec: 5920 - hash: "63ebaa4869728f5e2891d068e4b0091c" - } - Frame { - msec: 5936 - hash: "29245946cbd811fe6bf6b2b41cc13002" - } - Frame { - msec: 5952 - hash: "8a9dd7a2d10771633e6896f3f4a722ae" - } - Frame { - msec: 5968 - hash: "058c918e83bfdd665cd836566b53959b" - } - Frame { - msec: 5984 - hash: "fdf3b7a0391119e2fe77be8d6a17481d" - } - Frame { - msec: 6000 - hash: "ed5d80c33dbf72624385b1cf43784626" - } - Frame { - msec: 6016 - hash: "911591db1519ba264847f09868e38e0e" - } - Frame { - msec: 6032 - hash: "ed5d80c33dbf72624385b1cf43784626" - } - Frame { - msec: 6048 - hash: "fdf3b7a0391119e2fe77be8d6a17481d" - } - Frame { - msec: 6064 - hash: "058c918e83bfdd665cd836566b53959b" - } - Frame { - msec: 6080 - hash: "8a9dd7a2d10771633e6896f3f4a722ae" - } - Frame { - msec: 6096 - hash: "29245946cbd811fe6bf6b2b41cc13002" - } - Frame { - msec: 6112 - hash: "63ebaa4869728f5e2891d068e4b0091c" - } - Frame { - msec: 6128 - hash: "d1ed4916cb1ecff60277d74369ff311b" - } - Frame { - msec: 6144 - hash: "36c054064c9a76f4072492e55c70fb6c" - } - Frame { - msec: 6160 - hash: "7aa0cbf73f7999be7cde4ec739efbc33" - } - Frame { - msec: 6176 - hash: "affab9fb48c889a2680eb81458d400f9" - } - Frame { - msec: 6192 - hash: "13ca95adab171d9fad9ee8b75d0226bc" - } - Frame { - msec: 6208 - hash: "4887cd34d9926a361f3ca2e75be53ea6" - } - Frame { - msec: 6224 - hash: "a67e9a0f55512fb1c55f13c6b483923b" - } - Frame { - msec: 6240 - hash: "6eae517ad33f0609c31ef1f8f80ba899" - } - Frame { - msec: 6256 - hash: "74c1e71378b502bc1b732a55806a10f1" - } - Frame { - msec: 6272 - hash: "a88d6fc324ef48aa52c642a1662ec679" - } - Frame { - msec: 6288 - hash: "8172e076b05d95248d89e815fde820ef" - } - Frame { - msec: 6304 - hash: "7b78cba247f2c209ed81e003ca25d0a5" - } - Frame { - msec: 6320 - hash: "f57727419bb51fb1e589b960ddeb20ae" - } - Frame { - msec: 6336 - hash: "3fb20f9dbd40b4729235e13af9643afc" - } - Frame { - msec: 6352 - hash: "b12faa76c07adc21634cd8f8cb8436ae" - } - Frame { - msec: 6368 - hash: "3b644aac161f0a75bfb64f5075373190" - } - Frame { - msec: 6384 - hash: "a790f0e884ab85f7802dd094e4ef550f" - } - Frame { - msec: 6400 - hash: "a6937ee49648ed0cb409063bf1da3b87" - } - Frame { - msec: 6416 - hash: "0b1a741975e3d9ef8f5e78f371c89441" - } - Frame { - msec: 6432 - hash: "1bf7a98884b506b38326f59f85a53f41" - } - Frame { - msec: 6448 - hash: "fb17df681d99d5de05f6329bba697ea5" - } - Frame { - msec: 6464 - hash: "acd9a2e76b22ab0ff809fd3ec3a018ec" - } - Frame { - msec: 6480 - hash: "73c5f23f51797a33f4d2898738e6356e" - } - Frame { - msec: 6496 - hash: "65c514c9e926affe1da0b4826d2754c7" - } - Frame { - msec: 6512 - hash: "5b027815ea3c1ea54e1a02c798c468db" - } - Frame { - msec: 6528 - hash: "e1e6c7a7f51bcccd749710dbbf9e97f6" - } - Frame { - msec: 6544 - hash: "11673a112566a64aca3c7010b9cc9c4d" - } - Frame { - msec: 6560 - hash: "826c7741ba0c51de407bb799e8f360b5" - } - Frame { - msec: 6576 - hash: "3b95eb8cbfc831e1ebee2e456b026ab4" - } - Frame { - msec: 6592 - hash: "95d776c84fe155617fc4ee51bdb45b7e" - } - Frame { - msec: 6608 - hash: "a1bd4e995365e79389dba80f9e3b7af8" - } - Frame { - msec: 6624 - hash: "44072400ca3f0237d1aebae28a94becc" - } - Frame { - msec: 6640 - hash: "99de44f74f8e1f79652ab46afb4bb59e" - } - Frame { - msec: 6656 - hash: "4f1eace868a6688e5b24ce48a1f0fd18" - } - Frame { - msec: 6672 - hash: "84c94704c16e246df1048f958cc8cefb" - } - Frame { - msec: 6688 - hash: "e880d93963c80e4fab5173554c9600fc" - } - Frame { - msec: 6704 - hash: "e91bb914c1eb63cd4269b30a220a128a" - } - Frame { - msec: 6720 - image: "animated.6.png" - } - Frame { - msec: 6736 - hash: "985868869ef2c332da379460a2f3a71b" - } - Frame { - msec: 6752 - hash: "587cb6e05048579088e88e0180e3ad48" - } - Frame { - msec: 6768 - hash: "97f7a2175dcf9ac2581a92d614d72f88" - } - Frame { - msec: 6784 - hash: "93128906d054e44bfd126fc22bdc3102" - } - Frame { - msec: 6800 - hash: "08f55088cdce741c67539f73291e53ab" - } - Frame { - msec: 6816 - hash: "30f84a7f67b13a945ba6d5935ea92da5" - } - Frame { - msec: 6832 - hash: "5359f5e45e5467c62c2d9521c8199c48" - } - Frame { - msec: 6848 - hash: "7c22fc3e30377cc14326833bdd23ddd8" - } - Frame { - msec: 6864 - hash: "80ebac4d923f67fb8dba3d133ce657ba" - } - Frame { - msec: 6880 - hash: "c3a1f12febc979150028737722d6d045" - } - Frame { - msec: 6896 - hash: "81d2fc6727dc7449d1a87b4abea9b704" - } - Frame { - msec: 6912 - hash: "68dae343cf324391ec6721cea14575f7" - } - Frame { - msec: 6928 - hash: "ec0aea8dc8c269d1f0aee5817347ac55" - } - Frame { - msec: 6944 - hash: "a4ddb4956d71fd642d54757938100cf3" - } - Frame { - msec: 6960 - hash: "956429472da133324c970774f77784f5" - } - Frame { - msec: 6976 - hash: "c763f56728e17fc119539a4d45dfccc3" - } - Frame { - msec: 6992 - hash: "ae48da4a66f93c806725ce749700aac8" - } - Frame { - msec: 7008 - hash: "bccb4b8a494bd45bd70c2524a02a9dc3" - } - Frame { - msec: 7024 - hash: "bc747167dfb3388ac63e9e68a86b9a03" - } - Frame { - msec: 7040 - hash: "86360bd58bba5fdd901c105ddb2e3ade" - } - Frame { - msec: 7056 - hash: "7383209c80b403b93da3264eadbc047f" - } - Frame { - msec: 7072 - hash: "280288a7988736e30a2a3e4289ac3b0c" - } - Frame { - msec: 7088 - hash: "ff0928dfd16b2da9811a172c19817a97" - } - Frame { - msec: 7104 - hash: "eac4600372f0fdfadee88896ac915a48" - } - Frame { - msec: 7120 - hash: "f04e84ad3579d6334077abe73101d206" - } - Frame { - msec: 7136 - hash: "8861bf848da5c96b35addff736b01520" - } - Frame { - msec: 7152 - hash: "1ac8c393f084aa1894c26610b7f40ea6" - } - Frame { - msec: 7168 - hash: "e8a61d3858244127cb2b2812f04f5ce9" - } - Frame { - msec: 7184 - hash: "93cf31eabb454ec536c638a506be0648" - } - Frame { - msec: 7200 - hash: "0cba07ca38c7f0483244832a42d9ac53" - } - Frame { - msec: 7216 - hash: "c7eb7837dce71c914186326216214eeb" - } - Frame { - msec: 7232 - hash: "593a8a45c3a0cd7ce1cb6bd1913136ba" - } - Frame { - msec: 7248 - hash: "1ea07ee309ce2c52cbc36370b75a872f" - } - Frame { - msec: 7264 - hash: "93d9f0a7c387cbe653a9a088f8f4ef2b" - } - Frame { - msec: 7280 - hash: "a6f17da2dd581bdc249ff62f833dc025" - } - Frame { - msec: 7296 - hash: "b74521d6ac531414aeeca0fb28379d11" - } - Frame { - msec: 7312 - hash: "6a521f952e05d91b86ad78fd6f5de4f9" - } - Frame { - msec: 7328 - hash: "4e60300cfab8634e04dcd1b556251d31" - } - Frame { - msec: 7344 - hash: "60f158382f75103c78e2b9b408e0fe65" - } - Frame { - msec: 7360 - hash: "153237f8cf37e29ad2f32f7a8a6aecdb" - } - Frame { - msec: 7376 - hash: "554e1d360463871e7c05cfe6f8abe1dd" - } - Frame { - msec: 7392 - hash: "e418b5f54705515dce5ce3b4cbc45d19" - } - Frame { - msec: 7408 - hash: "19d05a96f3ae7388e854bbf1075b51c1" - } - Frame { - msec: 7424 - hash: "4ae120bb6dc2bd5ff81cc99ae03c191e" - } - Frame { - msec: 7440 - hash: "18c2f321a149e38b258ac264d40c2376" - } - Frame { - msec: 7456 - hash: "a40014d842471784e1222eb205395f6f" - } - Frame { - msec: 7472 - hash: "f1a7a4a67a21f5025294af4bea3f8998" - } - Frame { - msec: 7488 - hash: "3152e5f29015ece423fbdd11a2b382b8" - } - Frame { - msec: 7504 - hash: "2a7bed775824968e318c3d40fbc5b1c2" - } - Frame { - msec: 7520 - hash: "dd4c9e63001bc6e0e63ea4db2d85301f" - } - Frame { - msec: 7536 - hash: "ac8f096e8c7cc23bfb01de69cf3e266e" - } - Frame { - msec: 7552 - hash: "6b48bfd0c7993f746d6301c2a0f61d23" - } - Frame { - msec: 7568 - hash: "06d8d8a1a41893d4e27725948a75caf4" - } - Frame { - msec: 7584 - hash: "3f62f032239d412d3637198f5e3e83d6" - } - Frame { - msec: 7600 - hash: "01947e631c3db43f7c5b4427229bc0c8" - } - Frame { - msec: 7616 - hash: "2266df495ab5265e7514a506d3bf5bc6" - } - Frame { - msec: 7632 - hash: "8c66a33d26eec2a1133f4362710a5fab" - } - Frame { - msec: 7648 - hash: "75c9bf83ca3fe24612c245698c089430" - } - Frame { - msec: 7664 hash: "c1936628aec13e08e9581dcd2c6d5717" } - Frame { - msec: 7680 - image: "animated.7.png" - } - Frame { - msec: 7696 - hash: "8419f1d75b14130730bcfec4e3a9b058" - } - Frame { - msec: 7712 - hash: "482bb92d4f0ad5d7c7e379b9e1ad326e" - } - Frame { - msec: 7728 - hash: "406224b535b4425d2708df0083acdc8e" - } - Frame { - msec: 7744 - hash: "3dac1d9632378bd18c1c938a4868e3fb" - } - Frame { - msec: 7760 - hash: "08b9be66e23c7b6f6f629c7470394601" - } - Frame { - msec: 7776 - hash: "7b4d12e5a877507e7454aa1b8ed87c2d" - } - Frame { - msec: 7792 - hash: "4d45d70f997c2c67166905c97a900d2e" - } - Frame { - msec: 7808 - hash: "c5b3dede34b0d1d78135e39c41d117c6" - } - Frame { - msec: 7824 - hash: "b63e4d1686057828fd8781f1c33585f5" - } - Frame { - msec: 7840 - hash: "755cfccc38bababc468fe6e1076804bb" - } - Frame { - msec: 7856 - hash: "465ec993948f7b75aeb5759976f4620d" - } - Frame { - msec: 7872 - hash: "228d5312c261d1a5455faf69ec2f2520" - } - Frame { - msec: 7888 - hash: "aacf9ae3c23d174a1c1cda493600e355" - } - Frame { - msec: 7904 - hash: "4c60d345821f515c7811f3b69eb94607" - } - Frame { - msec: 7920 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 7936 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 7952 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 7968 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 7984 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8000 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8016 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8032 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8048 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8064 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8080 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8096 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8112 - hash: "aec13bcab337e55832b0a02fb5c6b526" - } - Frame { - msec: 8128 - hash: "4c60d345821f515c7811f3b69eb94607" - } - Frame { - msec: 8144 - hash: "aacf9ae3c23d174a1c1cda493600e355" - } - Frame { - msec: 8160 - hash: "228d5312c261d1a5455faf69ec2f2520" - } - Frame { - msec: 8176 - hash: "465ec993948f7b75aeb5759976f4620d" - } - Frame { - msec: 8192 - hash: "755cfccc38bababc468fe6e1076804bb" - } - Frame { - msec: 8208 - hash: "b63e4d1686057828fd8781f1c33585f5" - } - Frame { - msec: 8224 - hash: "c5b3dede34b0d1d78135e39c41d117c6" - } - Frame { - msec: 8240 - hash: "4d45d70f997c2c67166905c97a900d2e" - } - Frame { - msec: 8256 - hash: "7b4d12e5a877507e7454aa1b8ed87c2d" - } - Frame { - msec: 8272 - hash: "08b9be66e23c7b6f6f629c7470394601" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 8288 - hash: "3dac1d9632378bd18c1c938a4868e3fb" - } - Frame { - msec: 8304 - hash: "406224b535b4425d2708df0083acdc8e" - } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png index bb9dfbb..03d7082 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.0.png differ -- cgit v0.12 From 29de2567ae5b32ac6871119eb573736f3e345da6 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 11:21:57 +1000 Subject: Clean up qdeclarativeflickable visual tests They are mostly still fine, it's just that the flickable parameters had changed. Expected outputs have been revised. Task-number: QTBUG-14792 --- .../data/flickable-horizontal.0.png | Bin 1427 -> 1423 bytes .../data/flickable-horizontal.1.png | Bin 1357 -> 1424 bytes .../data/flickable-horizontal.2.png | Bin 1405 -> 1397 bytes .../data/flickable-horizontal.3.png | Bin 1427 -> 1453 bytes .../data/flickable-horizontal.qml | 1144 ++- .../data/flickable-vertical.0.png | Bin 1951 -> 1971 bytes .../data/flickable-vertical.1.png | Bin 1951 -> 1941 bytes .../data/flickable-vertical.10.png | Bin 1952 -> 1966 bytes .../data/flickable-vertical.11.png | Bin 1930 -> 1966 bytes .../data/flickable-vertical.12.png | Bin 1974 -> 1966 bytes .../data/flickable-vertical.13.png | Bin 1961 -> 1972 bytes .../data/flickable-vertical.14.png | Bin 1959 -> 0 bytes .../data/flickable-vertical.15.png | Bin 1937 -> 0 bytes .../data/flickable-vertical.16.png | Bin 1618 -> 0 bytes .../data/flickable-vertical.17.png | Bin 1952 -> 0 bytes .../data/flickable-vertical.18.png | Bin 1952 -> 0 bytes .../data/flickable-vertical.19.png | Bin 1930 -> 0 bytes .../data/flickable-vertical.2.png | Bin 1976 -> 1629 bytes .../data/flickable-vertical.20.png | Bin 1930 -> 0 bytes .../data/flickable-vertical.21.png | Bin 1947 -> 0 bytes .../data/flickable-vertical.22.png | Bin 1941 -> 0 bytes .../data/flickable-vertical.23.png | Bin 1951 -> 0 bytes .../data/flickable-vertical.24.png | 0 .../data/flickable-vertical.3.png | Bin 1987 -> 1966 bytes .../data/flickable-vertical.4.png | Bin 1947 -> 1966 bytes .../data/flickable-vertical.5.png | Bin 1975 -> 1995 bytes .../data/flickable-vertical.6.png | Bin 1928 -> 2013 bytes .../data/flickable-vertical.7.png | Bin 1928 -> 1963 bytes .../data/flickable-vertical.8.png | Bin 1928 -> 1963 bytes .../data/flickable-vertical.9.png | Bin 1928 -> 2002 bytes .../data/flickable-vertical.qml | 7504 ++++++++------------ .../qdeclarativeflickable/flickable-vertical.qml | 2 +- 32 files changed, 3788 insertions(+), 4862 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.24.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png index 016902b..f8b7339 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png index a654936..2d29f35 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png index cfd5517..507d9ca 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png index 016902b..1622522 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml index 289af88..92f108c 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-horizontal.qml @@ -6,309 +6,277 @@ VisualTest { } Frame { msec: 16 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 32 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 48 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 64 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 80 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 96 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 112 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 128 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 144 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 160 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 176 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 192 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 208 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 224 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 240 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 256 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 272 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 288 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 304 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 320 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 336 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 352 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 368 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 384 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 400 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 416 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 432 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 448 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 464 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 480 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 496 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 512 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 528 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 544 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 560 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 576 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 592 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 608 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 624 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 640 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 656 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 672 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 688 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 704 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 720 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 447; y: 145 + modifiers: 0 + sendToViewport: true } Frame { msec: 736 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 752 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 768 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 784 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 800 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 816 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 832 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 848 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 864 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 880 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 896 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 912 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 928 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Frame { - msec: 944 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Mouse { - type: 2 - button: 1 + type: 5 + button: 0 buttons: 1 - x: 477; y: 171 + x: 446; y: 145 modifiers: 0 sendToViewport: true } Frame { - msec: 960 - image: "flickable-horizontal.0.png" + msec: 784 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Mouse { type: 5 button: 0 buttons: 1 - x: 473; y: 171 + x: 440; y: 146 modifiers: 0 sendToViewport: true } Frame { - msec: 976 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + msec: 800 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Mouse { type: 5 button: 0 buttons: 1 - x: 463; y: 171 + x: 425; y: 151 modifiers: 0 sendToViewport: true } - Frame { - msec: 992 - hash: "c4d91a9e7f785ccd50db55f697d75cb9" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 407; y: 157 + modifiers: 0 + sendToViewport: true } Frame { - msec: 1008 - hash: "c4d91a9e7f785ccd50db55f697d75cb9" + msec: 816 + hash: "c92e345e4ffdb30c28d9d5aa5400bd30" } Mouse { type: 5 button: 0 buttons: 1 - x: 449; y: 171 + x: 359; y: 169 modifiers: 0 sendToViewport: true } Frame { - msec: 1024 - hash: "4f054038668f56cf3fc46dee08504b24" + msec: 832 + hash: "90f94986ab44ab59618e9a5da17b8cc9" } Mouse { type: 5 button: 0 buttons: 1 - x: 425; y: 172 + x: 309; y: 181 modifiers: 0 sendToViewport: true } Frame { - msec: 1040 - hash: "e6ae6e2a8e5fb7204ae1f559b5dc4a63" + msec: 848 + hash: "0154a65f8693b98576101ac1c2fc8761" } Mouse { type: 5 button: 0 buttons: 1 - x: 393; y: 172 + x: 282; y: 187 modifiers: 0 sendToViewport: true } @@ -316,769 +284,1073 @@ VisualTest { type: 3 button: 1 buttons: 0 - x: 393; y: 172 + x: 282; y: 187 modifiers: 0 sendToViewport: true } Frame { + msec: 864 + hash: "792c1b5267f14c891dae2348a8188a92" + } + Frame { + msec: 880 + hash: "15ce9e88d4ad2e698bf167d1432c0b8a" + } + Frame { + msec: 896 + hash: "8f4109ef4c24d286d73f689565a0d056" + } + Frame { + msec: 912 + hash: "f5728190bf5c94742686f063b4a4b09b" + } + Frame { + msec: 928 + hash: "a38c7527a9a818b7bc25466b0e4939f9" + } + Frame { + msec: 944 + hash: "ed3902455fc31a4e3232308b815a4daa" + } + Frame { + msec: 960 + image: "flickable-horizontal.0.png" + } + Frame { + msec: 976 + hash: "de5647af86a322921dcc68e81979a3cc" + } + Frame { + msec: 992 + hash: "c32349580e3a9586cc1133c935607cf0" + } + Frame { + msec: 1008 + hash: "cd2068492e346eb20d50aee69e3a3559" + } + Frame { + msec: 1024 + hash: "f43a1a38894b8ffad009ba995d84b0ee" + } + Frame { + msec: 1040 + hash: "2d5c4a73df2a054801571f1ce119e31f" + } + Frame { msec: 1056 - hash: "3bfaaef12ca852421ad179d8598a306d" + hash: "b8825cc6bdca8102a655d797ea41b5b1" } Frame { msec: 1072 - hash: "e00ff5e13a9a97bc11e041f89e4782f5" + hash: "3f0be15b85220743d004f2d54b6e137c" } Frame { msec: 1088 - hash: "ae10ada837b21365936672e9a4b4b175" + hash: "4b0952d33149b44ffa0a06723a4116c7" } Frame { msec: 1104 - hash: "63566d7f1707025c9ec37e398d0e69ef" + hash: "9056bda43259e92cfe56fdf394e2ca54" } Frame { msec: 1120 - hash: "20e9d299cd867d680cf85f99e06cd200" + hash: "82ec9f09d2303e5b0b9c05b9a10a84db" } Frame { msec: 1136 - hash: "4d3a19b3c50a20ba1d93a8bcd178a424" + hash: "751a9b3054c09d900364d7c9cac8bc2b" } Frame { msec: 1152 - hash: "d373ab5240e438e8234ae05f935c1ef8" + hash: "17dfdfef20f9da7e8b6f16df974baea9" } Frame { msec: 1168 - hash: "2f9c00aa1f8a8cc5d10e6c6a0baee366" + hash: "108e6d9a5a81df32823bfd7a90a000a7" } Frame { msec: 1184 - hash: "0fd8203b0a33fd8243ecd878f04f9b42" + hash: "71dd0d55a3e837d3a8e4b4e318579ade" } Frame { msec: 1200 - hash: "24a197df4209c7076d68031e5dd4fd9e" + hash: "8013cdb2615bca89134ea040409af509" } Frame { msec: 1216 - hash: "9e4271eacdc875183e3c8e7a1eb098c2" + hash: "4b2826ad4c755690bd837994133f5fac" } Frame { msec: 1232 - hash: "cdf7aac4ff7e5df806977eb38392f5bc" + hash: "52d0da7f138bd37ac587a448d6402aca" } Frame { msec: 1248 - hash: "1ace4a1312cad6f173a04c388624a97f" + hash: "e634724c5bb294d338210845bf64d2cf" } Frame { msec: 1264 - hash: "193d6d6838ac1d5ddb941fbb340ec506" + hash: "59bc5f0d057ee431f289806377f19213" } Frame { msec: 1280 - hash: "ed82807a48f28610ba9bda0c7ab91ce4" + hash: "6ef2c5f7766c2cc77b30d636bfaa4422" } Frame { msec: 1296 - hash: "e1168bb9a88a972decb0c537d86d7758" + hash: "578d056c3db094420dbaa51bd08ced20" } Frame { msec: 1312 - hash: "828ba428b04826687c6ef19b72318924" + hash: "14c6f7a04a52caffefa07af556ccb262" } Frame { msec: 1328 - hash: "7dae52c428253cf44045ffaabaadd2f4" + hash: "7cb63d56fec144d0509ce219fc6fe459" } Frame { msec: 1344 - hash: "06e2a81e1a2421523642cfcf17ec22e4" + hash: "462dafa7f6427aecf6c28a5dcf5a10cc" } Frame { msec: 1360 - hash: "283997835a54e80c0ab8a0321bd03ce7" + hash: "45360814f985ed780a443568a91fc170" } Frame { msec: 1376 - hash: "6354f9379b7b25c8fabda4e5bc3cdf6a" + hash: "0d18ceb2436e4f7eb56a3443fab706e6" } Frame { msec: 1392 - hash: "6bc87dfd21d59efd3397e3cfb0d00d25" + hash: "1d83f367ba9f7f1d4496208271e925ed" } Frame { msec: 1408 - hash: "4f97fc9aa1f79a6b007a00459386b9ff" + hash: "fdbd00ee4c122aef779df42ea53f403a" } Frame { msec: 1424 - hash: "2b5c711ede124c9e97d3ef83a3fdcc8b" + hash: "bedd1cb304efd4851813b39a746198a4" } Frame { msec: 1440 - hash: "5a8cbd4ac3fcd920f2aea6e2cfa96467" + hash: "9aa7bed86efa9634466736f20ee0ab5b" } Frame { msec: 1456 - hash: "5b32961cb36e519f5b1d50386e796d3e" + hash: "00fc8186a7ae44e10195a7b13defa0d2" } Frame { msec: 1472 - hash: "c91f95cccd38cbd1a16ee65abffd40ab" + hash: "42d6e8e0bbed879ed63644c83e61e7bd" } Frame { msec: 1488 - hash: "25108050298d3ffc850113971bcf54da" + hash: "df074f8c210249e5ef652349479b6325" } Frame { msec: 1504 - hash: "6a236881f2a1cb487ee1945c279e020b" + hash: "4f94020437e35cf44dd3576997990ab7" } Frame { msec: 1520 - hash: "2df1824df1cf20022595f64d26adb4ad" + hash: "8ca6c3b4fa3be73ac35073356b680a35" } Frame { msec: 1536 - hash: "4ca4a0a4b4fd9f9c4846adebcdc8fd67" + hash: "c25eee1c5791383ebc59974e7754eacb" } Frame { msec: 1552 - hash: "1696ef0862ff4772f960d203c43fbddf" + hash: "f4917ada78942428cc6b9aa5e56c013d" } Frame { msec: 1568 - hash: "c5846835b8eb5d98c481ee5811344ea1" + hash: "23e1e607101fc7260a4ac841344f5fe0" } Frame { msec: 1584 - hash: "fbcb044ee53302de573321b43f068e65" + hash: "2dcc7d187d8e0493e5766efbf09ef37c" } Frame { msec: 1600 - hash: "d369e0a6c4a3e63102be29a7362ef9eb" + hash: "c1e5602753e80cf44d7b330140c6912e" } Frame { msec: 1616 - hash: "e93131b881805d4aa44949c69f486821" + hash: "febaf72d01a3763461b4b7d2ddd7a23e" } Frame { msec: 1632 - hash: "b7aeee9e5065f1d4656e451b542ecf6a" + hash: "071262b911b61576f451be25691a57cf" } Frame { msec: 1648 - hash: "05521ca19960c070d5f3dd72c5ade0e4" + hash: "44705db9289fd8753b9d63e8bc963b38" } Frame { msec: 1664 - hash: "2c68cb3291cf1f892c8b8eb28b409e4d" + hash: "0c41d7b7d36bd083abfc0b83b862cad9" } Frame { msec: 1680 - hash: "5a0908aea91df2b9e65d222829c2b0ba" + hash: "0c41d7b7d36bd083abfc0b83b862cad9" } Frame { msec: 1696 - hash: "0d4ff147517eee8b3dbcd51a708b2aa7" + hash: "071262b911b61576f451be25691a57cf" } Frame { msec: 1712 - hash: "521e1075de1de89c6e25f469d2728ab7" + hash: "a00aa90e894b48203b0446ca287ee712" } Frame { msec: 1728 - hash: "c543447f98ae608058c6c02c8c8665e6" + hash: "26c9ca53ee4b084c6595ad65bf4880df" } Frame { msec: 1744 - hash: "ac259db754b7dfb8cce8548527c72e4b" + hash: "f4917ada78942428cc6b9aa5e56c013d" } Frame { msec: 1760 - hash: "bc5b68d5ecfb583ae41001e326b7aa9b" + hash: "ffedee7bf2d8099e361b8b1706b03f88" } Frame { msec: 1776 - hash: "e08051cb1ab2d8f979a52dc86411f78f" + hash: "1778ef1629ce977015b641448b46634f" } Frame { msec: 1792 - hash: "b1746ad9563359f0d70a1aaee62e9bd8" + hash: "42d6e8e0bbed879ed63644c83e61e7bd" } Frame { msec: 1808 - hash: "5d6bc33ff2857fb8db582362bf7c19c7" + hash: "99e843ec69b79b79b0792e0a2f28cd1b" } Frame { msec: 1824 - hash: "83f2c3a7124f9be4dbe883a27ca7df8e" + hash: "8b3ebca70b50a6a93823e015ea80f0f9" } Frame { msec: 1840 - hash: "189f7cfb5ede1f8380b1a05b7e3d942e" + hash: "8eaa7f076064ce55051237b04861e408" } Frame { msec: 1856 - hash: "07b1a4e5ca156e6aa1f3e76b825807ce" + hash: "6acc0ca5e5808d911287edfa78c8ac02" } Frame { msec: 1872 - hash: "48b25f0acfe6eb3bc2cb9eb16e6595d0" + hash: "e9f05899e0b53c21f6efe834095a3ea4" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 91; y: 208 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 93; y: 209 + modifiers: 0 + sendToViewport: true } Frame { msec: 1888 - hash: "15ae05f5ed098021073c4593587949ea" + hash: "e9f05899e0b53c21f6efe834095a3ea4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 99; y: 210 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 108; y: 210 + modifiers: 0 + sendToViewport: true } Frame { msec: 1904 - hash: "b300f2c75f4aebcf84ed37ad424ca9fa" + hash: "d2dece405f5f6ed1de2acb6615a931de" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 142; y: 214 + modifiers: 0 + sendToViewport: true } Frame { msec: 1920 image: "flickable-horizontal.1.png" } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 216 + modifiers: 0 + sendToViewport: true + } Frame { msec: 1936 - hash: "7d8ea492fb1c664502e95e085896c569" + hash: "45ea16bca2c9ae07cb7dead1e24f6ed0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 229; y: 218 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 266; y: 220 + modifiers: 0 + sendToViewport: true } Frame { msec: 1952 - hash: "7513b077e073d78b387309b56e1fd44c" + hash: "c10c8b0c94f899414d8b3ef0b7c97646" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 322; y: 223 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 322; y: 223 + modifiers: 0 + sendToViewport: true } Frame { msec: 1968 - hash: "ed1ac5cf6d4b081983a8e16258f431bf" + hash: "807aff4e6c96a9d0de7fa55e233446b1" } Frame { msec: 1984 - hash: "fbb31f23ba6e5d02011363abfb4b3f18" + hash: "dbd02848cefacbb26f4bcb7d8f073d6c" } Frame { msec: 2000 - hash: "6f01df424b38036b9921b4ee1491a1c1" + hash: "9a60608d8ea1b39fa2d3851873f2f08e" } Frame { msec: 2016 - hash: "11f706dfacbec5c0be0c2f3c5442f717" + hash: "e7b3e3a40281f63889808211d6746374" } Frame { msec: 2032 - hash: "0a70348986f4987f43db3e55af63fca5" + hash: "188c225c46ec00105df230bfeea09974" } Frame { msec: 2048 - hash: "6f8b7aaad846f83c6349836d7af34662" + hash: "e2e977b42e91d8c5dee57fd8245692eb" } Frame { msec: 2064 - hash: "44723b22aad6d2d814e074ff9324f3c4" + hash: "ca2f12fb173c405f95e608858ab982ad" } Frame { msec: 2080 - hash: "44723b22aad6d2d814e074ff9324f3c4" + hash: "fa86ee5f25fa425cf2569c8ef570b9d8" } Frame { msec: 2096 - hash: "44723b22aad6d2d814e074ff9324f3c4" + hash: "9b74656866fb8c7394bbbecec6414aca" } Frame { msec: 2112 - hash: "1c12d2c68223324f040b7a693cef2074" + hash: "87147326d1baab174c0f9a5ccdc2cb84" } Frame { msec: 2128 - hash: "0a70348986f4987f43db3e55af63fca5" + hash: "c0d00f98c71bf3f8e5954b45fbab95a8" } Frame { msec: 2144 - hash: "bf4de7baf2730cdaf83887d50d577986" + hash: "c087d1d62e56e573b55c1d8599bba8a6" } Frame { msec: 2160 - hash: "23ddb2c0793d7161a0d8c5b2a777dceb" + hash: "dd5a94c6febdee58e8f115cb75131aaa" } Frame { msec: 2176 - hash: "7513b077e073d78b387309b56e1fd44c" + hash: "a7465d6137f865f512ce65ceb29533b4" } Frame { msec: 2192 - hash: "83fa82362057466dff6a243a95d423db" + hash: "409086f6bb661aab8b548fea56d7e6b1" } Frame { msec: 2208 - hash: "0e60b632ce511109cb01d2e5ff6945f8" + hash: "6a22911e0fb58df31271baa463ff599d" } Frame { msec: 2224 - hash: "78c25194827c4243a16807491f798cdf" + hash: "c4f6dd30d5fdfcf91a8b29cf5c622423" } Frame { msec: 2240 - hash: "4c9dc46794d4a32e654395bb9d78409e" + hash: "5a95b83f237c7243a198a43e9a587179" } Frame { msec: 2256 - hash: "e996d4f3a0b3a4a4ed29ec23a1ad5615" + hash: "d79ed290efc6dbd976d574bf0b14a6a3" } Frame { msec: 2272 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "a7bcb436e96d7c981852239462573495" } Frame { msec: 2288 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "f63cc82e351daab503e316f8b516990f" } Frame { msec: 2304 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "4ea63cd25a1424042ffc60549a78563c" } Frame { msec: 2320 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "ef0fb776012575b3b0dbf6e5f4dee571" } Frame { msec: 2336 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "e2508faec7737be2666d87ad715b5f74" } Frame { msec: 2352 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "9fe4e897c6b853f774d11817a0eb53bf" } Frame { msec: 2368 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "c122ce2e73cbfedcc99d649c21d91f9d" } Frame { msec: 2384 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "883b8b180853f1f432ae98ddfe1b6ce3" } Frame { msec: 2400 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "d0808284e431da60f61d571c257a3011" } Frame { msec: 2416 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "df90f19450bf4d9496aab987a89e3a02" } Frame { msec: 2432 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "5640c1e64556b90e7fbd4448fa9db462" } Frame { msec: 2448 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "6d9b5c2f7d0dedbbc444e69bb39fed08" } Frame { msec: 2464 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "485c4a8049068cf73bf22db5fd3618be" } Frame { msec: 2480 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "9e25da59c9e7e4cf7796902e8e2ff92a" } Frame { msec: 2496 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "bd45e8f2442d7c1a1b16a762bc29e7cf" } Frame { msec: 2512 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "ec1013d23e581dbb39b1549d2e1b3b32" } Frame { msec: 2528 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "1ea3c2fde8ee3a14406e027f2124d793" } Frame { msec: 2544 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "3c3f31a05fb2f32538872c9fa158aaab" } Frame { msec: 2560 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "05a84d9c55e634ec01edd2a63e13613b" } Frame { msec: 2576 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "0f7ccd2da58e2e73b0ab18bb681dafd5" } Frame { msec: 2592 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "e481ff78029f8bc4bf7c697db6824f6a" } Frame { msec: 2608 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "efb92b8b7a90acabeb4a8d5cae52fe3c" } Frame { msec: 2624 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "4728dd0fac4edf40cfd5ef5a422b4ed9" } Frame { msec: 2640 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "27641dcd772c979ae22d12bfbadbb67f" } Frame { msec: 2656 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "26268714105bc4832d336a38a859fc50" } Frame { msec: 2672 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "caf0d351d3b6914ca52853a30643ea48" } Frame { msec: 2688 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "319824b1143925162f04aaddcfaa65d9" } Frame { msec: 2704 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "73aa36815f34bf5e005000e7da38555e" } Frame { msec: 2720 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "73aa36815f34bf5e005000e7da38555e" } Frame { msec: 2736 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "319824b1143925162f04aaddcfaa65d9" } Frame { msec: 2752 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "caf0d351d3b6914ca52853a30643ea48" } Frame { msec: 2768 - hash: "cd6770afe63f28517a93f0961cf9c26e" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 152; y: 189 - modifiers: 0 - sendToViewport: true + hash: "c87ba4dda0a5c931d0c7ae74a0fb2896" } Frame { msec: 2784 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "ab551561ad8a3937558afc080b3e6130" } Frame { msec: 2800 - hash: "cd6770afe63f28517a93f0961cf9c26e" + hash: "474d8b566b9e4ef7dc125a8df30ccbb1" } Frame { msec: 2816 - hash: "cd6770afe63f28517a93f0961cf9c26e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 190 - modifiers: 0 - sendToViewport: true + hash: "cc7dfbcfafa12d40210a4d5fa7f60862" } Frame { msec: 2832 - hash: "cd6770afe63f28517a93f0961cf9c26e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 169; y: 191 - modifiers: 0 - sendToViewport: true + hash: "3c3f31a05fb2f32538872c9fa158aaab" } Frame { msec: 2848 - hash: "edd015434d7ead96c03a51a2b1c9e527" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 202; y: 192 - modifiers: 0 - sendToViewport: true + hash: "9705c0dd30c3f381084ec29242bebb2f" } Frame { msec: 2864 - hash: "ea0eda505daea4171e27aac358aa6a4a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 256; y: 192 - modifiers: 0 - sendToViewport: true + hash: "917579854722d6e6711811e10cbe229f" } Frame { msec: 2880 image: "flickable-horizontal.2.png" } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 331; y: 192 - modifiers: 0 - sendToViewport: true - } Frame { msec: 2896 - hash: "34f70dfe1c226e63300112aa9a4a6968" + hash: "e2166fe87d04be70a9b1d4c8d1002b49" } Frame { msec: 2912 - hash: "34f70dfe1c226e63300112aa9a4a6968" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 395; y: 194 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 395; y: 194 - modifiers: 0 - sendToViewport: true + hash: "5640c1e64556b90e7fbd4448fa9db462" } Frame { msec: 2928 - hash: "dd61e0ae58d7a344908a10bb97cfcb39" + hash: "88cef15940302e2b8b43e73234fd7b9c" } Frame { msec: 2944 - hash: "14a384c4bdd3e89808761d1e86976170" + hash: "041aecec2b0b0d59a56e1dd26b45cab1" } Frame { msec: 2960 - hash: "0e82a4920a53239f117448cd0e0b27f2" + hash: "0d519463c713f3da46ecacd155e1a0f3" } Frame { msec: 2976 - hash: "711e29bf6fbbeb7882064adb0619f4ac" + hash: "5dd0c855b97d298244fb599c9f781651" } Frame { msec: 2992 - hash: "43307cbfe1688daf300fafc8df0082b8" + hash: "bfc51621e9bc95d2d46cec632a3fae12" } Frame { msec: 3008 - hash: "46d788d926c03d85a68b66252e73ae90" + hash: "b05fb6e798ab3fed940b5ac4d88ca378" } Frame { msec: 3024 - hash: "a0042935ad2d5557c906050d4a3581c9" + hash: "6bc9cc0d3b11ea91856296b0ec934a8b" } Frame { msec: 3040 - hash: "b618a40490ca0aea310f08b452fa8c68" + hash: "f4e63f3af69dacbf2d1d719d4d03a266" } Frame { msec: 3056 - hash: "e2aaad7f160a6d77dd788c76bb8cb8a7" + hash: "31ab08997eb86fab062a3128aecbccb5" } Frame { msec: 3072 - hash: "ab5c27fa790c67a6678db0bbae1ae477" + hash: "90736b240ba1e634bd0ea86423908e16" } Frame { msec: 3088 - hash: "b43ed7af838cd6edd32393fc56cf8fb1" + hash: "90736b240ba1e634bd0ea86423908e16" } Frame { msec: 3104 - hash: "88ac50602c9f27fb5b882ad32d14ff46" + hash: "e74982557dc06aac572078840c7e889a" } Frame { msec: 3120 - hash: "259af2e080ed93e16cb633fa940c7c08" + hash: "e74982557dc06aac572078840c7e889a" } Frame { msec: 3136 - hash: "d05bec2351068d552b7bbbf47cf82fad" + hash: "ca30c14c7344d1711a35c707f8804f6e" } Frame { msec: 3152 - hash: "5354b8e07f1ed22950687187ee7a0290" + hash: "e616110d39009f0d636b816828cc0ccb" } Frame { msec: 3168 - hash: "3bfaaef12ca852421ad179d8598a306d" + hash: "e616110d39009f0d636b816828cc0ccb" } Frame { msec: 3184 - hash: "40d3a77fce7a9a9ca7ae6023fc4cfc10" + hash: "e616110d39009f0d636b816828cc0ccb" } Frame { msec: 3200 - hash: "5837c0122aa6b28518f1b7043ead99a9" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 412; y: 214 + modifiers: 0 + sendToViewport: true } Frame { msec: 3216 - hash: "9514d8530275e4642810ac441e8de353" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 3232 - hash: "3b720882f52340549d8e1b9659443461" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } Frame { msec: 3248 - hash: "4de5b95c8f4949a4f1ee9a119940e80a" + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 408; y: 214 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 407; y: 214 + modifiers: 0 + sendToViewport: true } Frame { msec: 3264 - hash: "a35097c00483e0b481222e4ad220c7a4" + hash: "10a89da9887cb4bbd812c090a8a56797" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 403; y: 214 + modifiers: 0 + sendToViewport: true } Frame { msec: 3280 - hash: "82ac348a63a4e358a877a2e45d48e2b1" + hash: "1991cbb0fb053937f922731d5716032c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 398; y: 214 + modifiers: 0 + sendToViewport: true } Frame { msec: 3296 - hash: "1322108409d1fa87d128f0c44c81ab4b" + hash: "df447575a4734bb5bd9badc6e27d98e4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 391; y: 214 + modifiers: 0 + sendToViewport: true } Frame { msec: 3312 - hash: "f6b030effcca891ab20073f106b22d73" + hash: "0fbfe1e0d7fb54450188398aa40690cd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 383; y: 214 + modifiers: 0 + sendToViewport: true } Frame { msec: 3328 - hash: "a7ccd998ac2ff2777d9423d704ddef48" + hash: "cb62e60296046c73d301d7186e14faed" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 369; y: 213 + modifiers: 0 + sendToViewport: true } Frame { msec: 3344 - hash: "b6d971a4f3321b7f3632e778ce733589" + hash: "909cbd1292476584554e22232cb43639" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 352; y: 211 + modifiers: 0 + sendToViewport: true } Frame { msec: 3360 - hash: "b6d971a4f3321b7f3632e778ce733589" + hash: "e63b7e502dfb2834c06a969b683b9bd3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 331; y: 210 + modifiers: 0 + sendToViewport: true } Frame { msec: 3376 - hash: "b6d971a4f3321b7f3632e778ce733589" + hash: "4ea63cd25a1424042ffc60549a78563c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 314; y: 210 + modifiers: 0 + sendToViewport: true } Frame { msec: 3392 - hash: "82ef6700a513e39508fb6de5ef07f1e7" + hash: "77e39d2d4bfcacecdae4f014e4506d71" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 300; y: 210 + modifiers: 0 + sendToViewport: true } Frame { msec: 3408 - hash: "9e4c4d479bc0b1a61566eae12416bea6" + hash: "db576eca8bad67cb8b994f12fc448969" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 288; y: 210 + modifiers: 0 + sendToViewport: true } Frame { msec: 3424 - hash: "f6b030effcca891ab20073f106b22d73" + hash: "efeb3f616da9d78505c3c82fc34ee31c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 278; y: 210 + modifiers: 0 + sendToViewport: true } Frame { msec: 3440 - hash: "8968acd022a9ba6fcc3ea52bdd7268c4" + hash: "e4f8bb02f8ac6bc40e1801cc8f360078" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 266; y: 210 + modifiers: 0 + sendToViewport: true } Frame { msec: 3456 - hash: "de8f1a1fd680af475173d5f81e85b26c" + hash: "82118ef71809e3867717232c4d9c5518" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 252; y: 208 + modifiers: 0 + sendToViewport: true } Frame { msec: 3472 - hash: "82e8c0c7cb7c2b1e8d7a5fc019533e6b" + hash: "5363451c696f6c6eb792b23d086243d7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 238; y: 208 + modifiers: 0 + sendToViewport: true } Frame { msec: 3488 - hash: "f820d250252cd910af97e5c9be181457" + hash: "fe6afe8ae8a7c216a1cffc5515f273d5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 227; y: 206 + modifiers: 0 + sendToViewport: true } Frame { msec: 3504 - hash: "a40558c1fbf328d3c891b473b2454020" + hash: "9b165741d86c70380c15e15cff3fabb6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 224; y: 206 + modifiers: 0 + sendToViewport: true } Frame { msec: 3520 - hash: "0ef9e64bad67670102e1e4d9ef0e96f3" + hash: "f5e176355468f4fa224d4dfcdd7525a3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 222; y: 206 + modifiers: 0 + sendToViewport: true } Frame { msec: 3536 - hash: "1d8013765ac2d3fe09ccaa6db098a208" + hash: "8c5a14a76e052cc6503a3e78245d1da3" } Frame { msec: 3552 - hash: "1d8013765ac2d3fe09ccaa6db098a208" + hash: "8c5a14a76e052cc6503a3e78245d1da3" } Frame { msec: 3568 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "8c5a14a76e052cc6503a3e78245d1da3" } Frame { msec: 3584 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "8c5a14a76e052cc6503a3e78245d1da3" } Frame { msec: 3600 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "8c5a14a76e052cc6503a3e78245d1da3" } Frame { msec: 3616 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "8c5a14a76e052cc6503a3e78245d1da3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 224; y: 206 + modifiers: 0 + sendToViewport: true } Frame { msec: 3632 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "f5e176355468f4fa224d4dfcdd7525a3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 232; y: 204 + modifiers: 0 + sendToViewport: true } Frame { msec: 3648 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "acf538fce5f1b90b83474d9898b7cdd7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 246; y: 203 + modifiers: 0 + sendToViewport: true } Frame { msec: 3664 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "5a0ee016b8732fbc36064e8a35d91215" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 265; y: 203 + modifiers: 0 + sendToViewport: true } Frame { msec: 3680 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "8fd06a14c1de175813845ce8f07db6ec" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 292; y: 201 + modifiers: 0 + sendToViewport: true } Frame { msec: 3696 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "26b0ff6ffda0725e0800f7ea3af510ef" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 310; y: 201 + modifiers: 0 + sendToViewport: true } Frame { msec: 3712 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "80443f134511be0356a687c9b542b3e7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 321; y: 199 + modifiers: 0 + sendToViewport: true } Frame { msec: 3728 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "3eeb98a829d29b3dc52f3d145ac49d58" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 323; y: 199 + modifiers: 0 + sendToViewport: true } Frame { msec: 3744 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "f4d43069b16f41a30e5549aae911d4cd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 324; y: 199 + modifiers: 0 + sendToViewport: true } Frame { msec: 3760 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "661c89fa832f0abdcf4ae0c9e8e2d18f" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 324; y: 199 + modifiers: 0 + sendToViewport: true } Frame { msec: 3776 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "661c89fa832f0abdcf4ae0c9e8e2d18f" } Frame { msec: 3792 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "1520f54b6c8606b9e8372c5c06180453" } Frame { msec: 3808 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "0fcf5e2ce47348cbb5bb485f101fe5ac" } Frame { msec: 3824 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "2eb070e69de07c89830543e0475fc110" } Frame { msec: 3840 @@ -1086,114 +1358,218 @@ VisualTest { } Frame { msec: 3856 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "90f94986ab44ab59618e9a5da17b8cc9" } Frame { msec: 3872 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "cc969b2c64839ca6d3b5069c0ed938d0" } Frame { msec: 3888 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "1f819e18d1297a1c7eeebb7b040bdef8" } Frame { msec: 3904 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "3643b99afbd8af0953cb39b2c8c04b9f" } Frame { msec: 3920 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "713fd2e2fa38ab27604cb9cae59f1777" } Frame { msec: 3936 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "e2508faec7737be2666d87ad715b5f74" } Frame { msec: 3952 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "fc33b1c7479caeff676ffd885a18d618" } Frame { msec: 3968 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "aca01143db4f870a56bb7546e84cbc5e" } Frame { msec: 3984 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "442b58c39fd3745c61a1eb5043fcbb53" } Frame { msec: 4000 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "7983d7183cc11d6819fa0a006c2d67b4" } Frame { msec: 4016 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "9fe4e897c6b853f774d11817a0eb53bf" } Frame { msec: 4032 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "43f528c81ccfa5b9921dfa3564a24c68" } Frame { msec: 4048 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "dfe04ff0b3ccf205bb38beeab58a4411" } Frame { msec: 4064 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "32ff30b50b500e9feb51e8eef205783c" } Frame { msec: 4080 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "7d83ab4c336b05bcf2cde4e7d8031f6c" } Frame { msec: 4096 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "c92e345e4ffdb30c28d9d5aa5400bd30" } Frame { msec: 4112 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "02eec604d0c00965aae4ac61b91bdc22" } Frame { msec: 4128 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "df447575a4734bb5bd9badc6e27d98e4" } Frame { msec: 4144 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "bac10d8f94a39573313b3b8b2f871c49" } Frame { msec: 4160 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 + hash: "e5944c5dc6dec8f0c28b7ec3cd58723d" } Frame { msec: 4176 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "1991cbb0fb053937f922731d5716032c" } Frame { msec: 4192 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "50d6538bcaffc343f6626635a3e5899c" } Frame { msec: 4208 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "f3613f57cdb9ed38d8e3fa636962aa99" } Frame { msec: 4224 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "10a89da9887cb4bbd812c090a8a56797" } Frame { msec: 4240 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "89ba74d46970ad2edff701475c059ec8" } Frame { msec: 4256 - hash: "0fa60818532d1e5c20cd82ce3d61e3f7" + hash: "6e8b84c70e81578a2216e9e975b35434" + } + Frame { + msec: 4272 + hash: "6e8b84c70e81578a2216e9e975b35434" + } + Frame { + msec: 4288 + hash: "883b8b180853f1f432ae98ddfe1b6ce3" + } + Frame { + msec: 4304 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4320 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4336 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4352 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4368 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4384 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4400 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4416 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4432 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4448 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4464 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4480 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4496 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4512 + hash: "e616110d39009f0d636b816828cc0ccb" + } + Frame { + msec: 4528 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4544 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4560 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4576 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4592 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4608 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4624 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4640 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4656 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4672 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4688 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" + } + Frame { + msec: 4704 + hash: "244c12e82ee0b2528a0dbb02a8b8134a" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png index 18fef53..67f2de8 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png index 18fef53..6ab0a15 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.png index b352c68..d525858 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.10.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.png index ce7ee68..d525858 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.11.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.png index d8cdacf..d525858 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.12.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.png index 0c2fa7b..167703b 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.13.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.png deleted file mode 100644 index e9b3028..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.14.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.png deleted file mode 100644 index 2186a8b..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.15.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.png deleted file mode 100644 index b4590af..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.16.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.png deleted file mode 100644 index fe29f19..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.17.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.png deleted file mode 100644 index fe29f19..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.18.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.png deleted file mode 100644 index 4f8587f..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.19.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png index 0a7cc03..9dd9ae8 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.png deleted file mode 100644 index 4f8587f..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.20.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.png deleted file mode 100644 index c0b0bdf..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.21.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.png deleted file mode 100644 index 4168c3b..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.22.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.png deleted file mode 100644 index 18fef53..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.23.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.24.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.24.png deleted file mode 100644 index e69de29..0000000 diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png index fc6669d..d525858 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png index c0b0bdf..d525858 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png index 2ffa96e..c066392 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png index f550b89..e7accc7 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png index f550b89..f282709 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png index f550b89..f282709 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.png b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.png index f550b89..593cf12 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.png and b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml index a5ca451..86fd3ca 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/data/flickable-vertical.qml @@ -6,239 +6,343 @@ VisualTest { } Frame { msec: 16 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 32 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 48 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 64 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 80 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 96 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 112 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 128 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 144 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 160 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 176 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 192 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 208 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 224 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 240 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 256 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 272 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 288 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 304 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 320 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 336 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 352 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 368 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 384 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 400 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 416 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 432 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 448 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 464 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 480 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 496 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 512 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 528 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 544 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 560 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 576 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 592 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 608 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 624 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 640 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 656 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 143; y: 471 + modifiers: 0 + sendToViewport: true } Frame { msec: 672 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Frame { msec: 688 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "c246bde0eb2b3e1797dfb770a9db78bb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 143; y: 470 + modifiers: 0 + sendToViewport: true } Frame { msec: 704 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "c246bde0eb2b3e1797dfb770a9db78bb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 144; y: 469 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 144; y: 467 + modifiers: 0 + sendToViewport: true } Frame { msec: 720 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "c246bde0eb2b3e1797dfb770a9db78bb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 144; y: 463 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 146; y: 453 + modifiers: 0 + sendToViewport: true } Frame { msec: 736 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 148; y: 433 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 148; y: 410 + modifiers: 0 + sendToViewport: true } Frame { msec: 752 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "26a71f2ecae39fb2f61ab13ad4fe2796" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 148; y: 365 + modifiers: 0 + sendToViewport: true } Frame { msec: 768 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "5aedca385a68ed5f6281c48a57bb94e5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 148; y: 340 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 146; y: 319 + modifiers: 0 + sendToViewport: true } Frame { msec: 784 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "4ee9f528fecf850db3be24a26241c2c5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 144; y: 300 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 144; y: 300 + modifiers: 0 + sendToViewport: true } Frame { msec: 800 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "bc83cb2708fba7bae035bc5da984fc71" } Frame { msec: 816 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "1d0ca08757375ac51024b83c0d224474" } Frame { msec: 832 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "ee09f63ce3b3ead641ba4a4853772d41" } Frame { msec: 848 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "5e944bc5723d75fa859f7cb8d2b106e1" } Frame { msec: 864 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "55ab5752ac0f4c93f5db6c92c519e5fb" } Frame { msec: 880 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "026bd0f5e380d54b8688172e44ff9f08" } Frame { msec: 896 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "5812a751d877896801a4bc6d2dd3ecc8" } Frame { msec: 912 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "2e6fd08a00480c4a018311d7ef3d0f50" } Frame { msec: 928 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "981ea7420d7ab189bb17fbfdde889471" } Frame { msec: 944 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b3b737cb536205f6d0faef4f8b1f2e77" } Frame { msec: 960 @@ -246,239 +350,311 @@ VisualTest { } Frame { msec: 976 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "4dafcfd5f5c5de1e83b9b7514ba5bde0" } Frame { msec: 992 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "97104a677cb208783522af82f4690003" } Frame { msec: 1008 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "4b1f38c9fdd8f79f2c43273913438ddc" } Frame { msec: 1024 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "7f76a7579174d7f8ea0e0819f70aebf6" } Frame { msec: 1040 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "97dd3be905cb37a7f178f27018ffe0f8" } Frame { msec: 1056 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "19fa6136cba216000b3ce56f0b7c02e6" } Frame { msec: 1072 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "e311e2cb0c6c6a844f092dcbf2b89a70" } Frame { msec: 1088 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "a954794d643718ca538ce1347ee93899" } Frame { msec: 1104 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "1b97f96d6615d2455ab49262347d3ae7" } Frame { msec: 1120 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "4ce55b03ac0ab7d6301b8185e139667d" } Frame { msec: 1136 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "c0c37b06ccca61524ee3530a3e9707c6" } Frame { msec: 1152 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "9cddaaaa52819cbb2dd740c31ebed5e2" } Frame { msec: 1168 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "5c82f9c2c59d3b844c7eb1bef77c2722" } Frame { msec: 1184 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "27b8e460849e8a06ad35e147f725d6df" } Frame { msec: 1200 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "381c0e45f68daf697f80fb0cb87f028e" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 121; y: 138 + modifiers: 0 + sendToViewport: true } Frame { msec: 1216 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "f4b378fcf727ba85bcbf90c938dc9806" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 121; y: 141 + modifiers: 0 + sendToViewport: true } Frame { msec: 1232 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "f4b378fcf727ba85bcbf90c938dc9806" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 121; y: 144 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 121; y: 155 + modifiers: 0 + sendToViewport: true } Frame { msec: 1248 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "852a7007d816d4cbec894f42549311f0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 119; y: 185 + modifiers: 0 + sendToViewport: true } Frame { msec: 1264 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "1ecc94e9c4aec0fa099816a7276f484a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 122; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 124; y: 228 + modifiers: 0 + sendToViewport: true } Frame { msec: 1280 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "8d74af236c5b0023b0577235f74aad7a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 128; y: 270 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 128; y: 270 + modifiers: 0 + sendToViewport: true } Frame { msec: 1296 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "5485c7dd5e79c3823c0c9258470f8ca7" } Frame { msec: 1312 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "a5fe758873729aeaf0a0c45fbdcc9b8f" } Frame { msec: 1328 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "7b134402e3268b66e3fc7e16624463ee" } Frame { msec: 1344 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "146f339b009287872f22d27892c0e2e5" } Frame { msec: 1360 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "1436a3a4cd29690da39ead7d08f0c927" } Frame { msec: 1376 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "1cdabb8da157c35c1bcc5d5965d60e59" } Frame { msec: 1392 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "b05878876db2fbfde1cf4069f2dae3db" } Frame { msec: 1408 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "6f8089424b163d79c7bcfe1715eca6ee" } Frame { msec: 1424 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "91ffc70bd8a4e0f917d534131de849cf" } Frame { msec: 1440 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "5c03d99e1bf12f55de8fc36742d7a962" } Frame { msec: 1456 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "bc22d18311f322713a046763262b65f8" } Frame { msec: 1472 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "59557c6874603decba5d383d3429005a" } Frame { msec: 1488 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "e2df3b279fffcd89c90afbfdbf14b5b3" } Frame { msec: 1504 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "a0aab7c147a30bb1765dec0f461b0ac1" } Frame { msec: 1520 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "f58d85bd7b3b772032bdb4e2ee8867d8" } Frame { msec: 1536 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "05e6f6753a40075653b8b757ea626b2f" } Frame { msec: 1552 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "6bfe88cb1d1a2264cc3fbf5143640507" } Frame { msec: 1568 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "d54065930af312621115cc08d73fa541" } Frame { msec: 1584 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "c3666377c19e3b4034a90a36651020de" } Frame { msec: 1600 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "92610ffcd541d943841bfea8bfcc2815" } Frame { msec: 1616 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "87d1472f48148a1cc8ae16700227ed1e" } Frame { msec: 1632 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "4bb790042573e5de09938f1beb3d8e73" } Frame { msec: 1648 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "f0a748b20f8b0d7a9a5ef0c26e5d29d1" } Frame { msec: 1664 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "66b7697170705d246dbb9c33e2edd85a" } Frame { msec: 1680 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "22bc677976f53937c80f908d17a6b994" } Frame { msec: 1696 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "8d35befcc7c03d9c7ff04d3aca966057" } Frame { msec: 1712 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "c27b4404612c57b2f360bc958acf8487" } Frame { msec: 1728 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "79aaa8cd6081e771ceab5f6d638df7ad" } Frame { msec: 1744 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "8959c740dfc85a79c056dd5057474161" } Frame { msec: 1760 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "4ba9cdf84e1d16d80bb57c670bdb85a9" } Frame { msec: 1776 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "f4f2b1847a8e3233e0e283853c942b60" } Frame { msec: 1792 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "da3f760fdd2f45d66f3ef410101afbab" } Frame { msec: 1808 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "17e5c56c3909da0da882bc0c8cf5c6d4" } Frame { msec: 1824 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "4e931b797bdbe7d397125a4f80f3d865" } Frame { msec: 1840 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "0fc21dde21d8c11e39f1f740dddf9439" } Frame { msec: 1856 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "3be4aa6c6f014b79a25bd04b1e44e6fd" } Frame { msec: 1872 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "9049c7636d06a2885a910440a5cb829d" } Frame { msec: 1888 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "9049c7636d06a2885a910440a5cb829d" } Frame { msec: 1904 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "9049c7636d06a2885a910440a5cb829d" } Frame { msec: 1920 @@ -486,1869 +662,285 @@ VisualTest { } Frame { msec: 1936 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "222242141fadd2c27435ce93aa1c460d" } Frame { msec: 1952 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "17e5c56c3909da0da882bc0c8cf5c6d4" } Frame { msec: 1968 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "2e7cc1dd1c62de751ff6734853fbadd7" } Frame { msec: 1984 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "5d234f4d69167a436ed6c95e909ae6e8" } Frame { msec: 2000 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "dee8be671b7d430a3bf044ea67841f15" } Frame { msec: 2016 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "f75438b7deb18e36c2ce397291401f4d" } Frame { msec: 2032 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "84d6efd807d94fb345ea640782dbfdcf" } Frame { msec: 2048 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "9dea3319774b70cb45eab5a71207c6bc" } Frame { msec: 2064 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "706c98bffe5118d5f49a3eb371b121f6" } Frame { msec: 2080 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "4ca3b88d0af1ea0fae4a08ee2a8b7413" } Frame { msec: 2096 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "2959676d888680c3288f9226d8ad1059" } Frame { msec: 2112 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "92a7dddbdf86f7fcd4f1d7631b7a3210" } Frame { msec: 2128 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "2de45cf2660f9ea4b54b3dfe3a2d6b8f" } Frame { msec: 2144 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "aa17f9e53e23f3de7addd126bbe2b866" } Frame { msec: 2160 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "36eb0221391fb7257c6eff73a1f491f3" } Frame { msec: 2176 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "a4b644bf91108dbc9b21a1646dab0b37" } Frame { msec: 2192 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "f16544e0ad09c14dc8980203aec29591" } Frame { msec: 2208 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "1a93e2ed871ae094aff5eeaa07385a94" } Frame { msec: 2224 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "977a2efa43d3be0340975ccbe6b0e8a9" } Frame { msec: 2240 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "0a8c81335816c747d320b3a147ee0350" } Frame { msec: 2256 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "0a8c81335816c747d320b3a147ee0350" } Frame { msec: 2272 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "0ab48b86c21be99f7caa3dda6d3a3e4d" } Frame { msec: 2288 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "46e69596c809d4c7563d5d44ca62eb02" } Frame { msec: 2304 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "46e69596c809d4c7563d5d44ca62eb02" } Frame { msec: 2320 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "46e69596c809d4c7563d5d44ca62eb02" } Frame { msec: 2336 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "46e69596c809d4c7563d5d44ca62eb02" } Frame { msec: 2352 - hash: "8443c45791c906a9fe23831844f48a1c" + hash: "573a18633748447b94bb67fd8e1726a4" } Frame { msec: 2368 - hash: "8443c45791c906a9fe23831844f48a1c" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 143; y: 387 - modifiers: 0 - sendToViewport: true + hash: "573a18633748447b94bb67fd8e1726a4" } Frame { msec: 2384 - hash: "a21e65718bc7a0cdcbeb058d0cbd2977" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 386 - modifiers: 0 - sendToViewport: true + hash: "573a18633748447b94bb67fd8e1726a4" } Frame { msec: 2400 - hash: "a21e65718bc7a0cdcbeb058d0cbd2977" + hash: "573a18633748447b94bb67fd8e1726a4" } Mouse { - type: 5 - button: 0 - buttons: 1 - x: 145; y: 386 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 + type: 2 + button: 1 buttons: 1 - x: 147; y: 380 + x: 32; y: 574 modifiers: 0 sendToViewport: true } Frame { msec: 2416 - hash: "a21e65718bc7a0cdcbeb058d0cbd2977" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 151; y: 372 - modifiers: 0 - sendToViewport: true + hash: "573a18633748447b94bb67fd8e1726a4" } Frame { msec: 2432 - hash: "90d9c65705a006741671657d00ab9dba" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 159; y: 346 - modifiers: 0 - sendToViewport: true + hash: "573a18633748447b94bb67fd8e1726a4" } Frame { msec: 2448 - hash: "8c6301fb7409a22fda85072d48e838c8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 161; y: 328 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 161; y: 304 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2464 - hash: "f5121fd6b0f20844d13cd8625a1a5047" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 159; y: 276 - modifiers: 0 - sendToViewport: true + hash: "573a18633748447b94bb67fd8e1726a4" } Mouse { type: 3 button: 1 buttons: 0 - x: 159; y: 276 + x: 32; y: 574 modifiers: 0 sendToViewport: true } Frame { + msec: 2464 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" + } + Frame { msec: 2480 - hash: "0d64b804b3b7e3ee052395f612d62bcf" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2496 - hash: "17b68429dfaf80bb3313e78bb01d6c4e" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2512 - hash: "e86ea3b103a7d9f95f7484f3579a95b5" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2528 - hash: "884d3842f4aa2a38ff73511b143789a0" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2544 - hash: "646d1dd3003ccac06b7251e8ce1beb2f" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2560 - hash: "ff66db77c56bf6830bc39211b3441e69" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2576 - hash: "8ff9c081cf823adaf6b17014fc582f12" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2592 - hash: "7b1563aed6f030003e04f19bb6e91a51" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2608 - hash: "3661b26f082e44cbc38e6033c28e99cb" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2624 - hash: "8e0f117dc1f2527d6b2b3f0c849fbda1" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2640 - hash: "5a13b0045bc132ec6c917a6d7ddf9c7a" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2656 - hash: "06f332d287ed14b29dd0a252d59565a2" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2672 - hash: "7b1512aabac1fb17ecc8e0c771e2477f" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2688 - hash: "22b62a7b42df6bbafad76d99001616c7" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2704 - hash: "0f6588fc79fa06097b2ba9bf6b1d6d14" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2720 - hash: "c7849941c7572b3581a7eb9423838d90" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2736 - hash: "8ddd8e9dc33698ecca6e19f2318e1c2e" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2752 - hash: "1606eb49c73e60445d9eca11e23a33f9" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { msec: 2768 - hash: "6a7e58d27492742bf3d853ee37144dae" + hash: "b0e76c5cfeb797888e8c032b3f2781bd" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 123; y: 264 + modifiers: 0 + sendToViewport: true } Frame { msec: 2784 - hash: "a55ba5b7ccdabd39385c6cb32e8e1b26" + hash: "96fb3652bfcf0aac1e35a2e50532816f" } Frame { msec: 2800 - hash: "afe5705e8ebc240babee4a88a4321189" + hash: "96fb3652bfcf0aac1e35a2e50532816f" } - Frame { - msec: 2816 - hash: "807d92ab4b8d2295f3abfd3508258dd5" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 123; y: 265 + modifiers: 0 + sendToViewport: true } Frame { - msec: 2832 - hash: "ae95ed79eee246c74535d9ca97878ce6" + msec: 2816 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } - Frame { - msec: 2848 - hash: "c8cf5d07a06646552d5595603532b786" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 123; y: 266 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 2864 - hash: "45971fd130662a263fcd86513aee222d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 124; y: 269 + modifiers: 0 + sendToViewport: true } Frame { - msec: 2880 - image: "flickable-vertical.2.png" - } - Frame { - msec: 2896 - hash: "8e78a9098ebd02cc828b76609c58d6b9" - } - Frame { - msec: 2912 - hash: "7f4d7a1c8e0a5494bf7f37a0a165d02b" - } - Frame { - msec: 2928 - hash: "881ed825133259e731b71cf6251ed862" - } - Frame { - msec: 2944 - hash: "8fb86c54b4e0280de18eb2d4f1c55e68" - } - Frame { - msec: 2960 - hash: "58ad7494c0bddc0de86bfd041f45a5d3" - } - Frame { - msec: 2976 - hash: "87489ba1390ee152a7de023e8ba25c72" - } - Frame { - msec: 2992 - hash: "b1f06b26110799e88837781cdf4688a7" - } - Frame { - msec: 3008 - hash: "d23e94ef53ce3b8143a716028ab729f9" - } - Frame { - msec: 3024 - hash: "1c5fdf8d85537836b698a50fcab58a4e" - } - Frame { - msec: 3040 - hash: "bd9c6ea06278efa4d491519734d0032f" - } - Frame { - msec: 3056 - hash: "b533e6543ca4efb34e187d540e4ed7e0" - } - Frame { - msec: 3072 - hash: "65f4ff7328ce366671436512da44a094" - } - Frame { - msec: 3088 - hash: "e7afcc4c29cd1868bcf1ebea1d19fca1" - } - Frame { - msec: 3104 - hash: "ddaf80f4b1d98b07fe4bf8282e13b2a8" - } - Frame { - msec: 3120 - hash: "d4888df20b11e30a7d613a32e603cea5" - } - Frame { - msec: 3136 - hash: "ac74be483173b08cb41b8d63e3e4d073" - } - Frame { - msec: 3152 - hash: "35c65757fe27f68e35c438269c00ba53" - } - Frame { - msec: 3168 - hash: "b8a28356b50362f2dabd0ab4a0d1d621" - } - Frame { - msec: 3184 - hash: "71205ebfcce9e3a018fe2c30f7f3ee92" - } - Frame { - msec: 3200 - hash: "0ef526ebcc23342ba4b8dfa8ed41e7de" - } - Frame { - msec: 3216 - hash: "9caaec9ca80b5da75e5e1231635c2f37" - } - Frame { - msec: 3232 - hash: "bb6b951e8c2252d873828e9ef1c9b625" - } - Frame { - msec: 3248 - hash: "15faa58fbb91f80a8c1256e5627e7777" - } - Frame { - msec: 3264 - hash: "bf2d0f512ade00ee44adb6624573daf9" - } - Frame { - msec: 3280 - hash: "5af713203ef673d40c69b014dcaf242f" - } - Frame { - msec: 3296 - hash: "970972470176fbd64208a3b25d4f5f65" - } - Frame { - msec: 3312 - hash: "135a4356d91e594ee2b71132ecf9a606" - } - Frame { - msec: 3328 - hash: "8a6364c0e033d517180ec287e61b3c9d" - } - Frame { - msec: 3344 - hash: "71c7d7eddd49b77e8f96f3b7a6e8470f" - } - Frame { - msec: 3360 - hash: "59667814b3e1a2d832b895235a9cdaf6" - } - Frame { - msec: 3376 - hash: "a324de5e8d115862b9908aba881df913" - } - Frame { - msec: 3392 - hash: "300902de67507207465a74bf6404c1c4" - } - Frame { - msec: 3408 - hash: "63f40e307d9f0c14bab111e833047ee1" - } - Frame { - msec: 3424 - hash: "53f54f5a4745043ef616ac21583416ef" - } - Frame { - msec: 3440 - hash: "851e6eebe48034d3185674f6908932af" - } - Frame { - msec: 3456 - hash: "06ef04a044394ab55fe2806a50db2abf" - } - Frame { - msec: 3472 - hash: "88c82d8bb518b18a174f55c647395de1" - } - Frame { - msec: 3488 - hash: "e62b84c87e1d73028305b9038915c53d" - } - Frame { - msec: 3504 - hash: "fdb38aa631cd6967585dd23e20f866a9" - } - Frame { - msec: 3520 - hash: "edabcd9bee25b1abcabced3b0b3dff1e" - } - Frame { - msec: 3536 - hash: "6f0a2dc3151c018846b13fd2e11d0fab" - } - Frame { - msec: 3552 - hash: "5101944e7867260ffdd3134436c6373a" - } - Frame { - msec: 3568 - hash: "a04f231f840571734f8dab609b2f82fd" - } - Frame { - msec: 3584 - hash: "87c22f82c659b405fd4e81640ce0b166" - } - Frame { - msec: 3600 - hash: "2273564228baea48cac343a4f30d6a59" - } - Frame { - msec: 3616 - hash: "8a4d1fc12743e6153c0f47e1fce9d55f" - } - Frame { - msec: 3632 - hash: "944cd812097868935a686211551ccd35" - } - Frame { - msec: 3648 - hash: "a2f1a14510a1cfe3c2c45fa10b0442b4" - } - Frame { - msec: 3664 - hash: "d754cc64c12ef8cc2db0ddf99381e88c" - } - Frame { - msec: 3680 - hash: "168487c8ca6f3463b3aa4433cfc99792" - } - Frame { - msec: 3696 - hash: "67a82c1516b0d8d953c7055f07a9fdc7" - } - Frame { - msec: 3712 - hash: "0df1592631b8cc1986f905a049b40bf0" - } - Frame { - msec: 3728 - hash: "8677472d35e17d7bd5fe40f7841bb01d" - } - Frame { - msec: 3744 - hash: "4472a8412e41377e0795d51706fb9180" - } - Frame { - msec: 3760 - hash: "84533717ec1419617895f2ec646fb1c0" - } - Frame { - msec: 3776 - hash: "ad50bd7708be94c6b8e63077e589ae48" - } - Frame { - msec: 3792 - hash: "a37fb5d7cec3fbff8e12157c88e08833" - } - Frame { - msec: 3808 - hash: "df1ca02b5bb76338ff24a561876f89f2" - } - Frame { - msec: 3824 - hash: "df1ca02b5bb76338ff24a561876f89f2" - } - Frame { - msec: 3840 - image: "flickable-vertical.3.png" - } - Frame { - msec: 3856 - hash: "a37fb5d7cec3fbff8e12157c88e08833" - } - Frame { - msec: 3872 - hash: "3c8a94d2e139a9e84eaa6bf522250756" - } - Frame { - msec: 3888 - hash: "23647f577ee83bc500ca1078eea2be90" - } - Frame { - msec: 3904 - hash: "c1a52221113c162e963a2a165b8d08a5" - } - Frame { - msec: 3920 - hash: "993c57d4ed9026f8615c68ef5d8c5c16" - } - Frame { - msec: 3936 - hash: "3d843eac108e047b6fe9ac21d8866fdd" - } - Frame { - msec: 3952 - hash: "5be1fa7cb99fda017cd5cdcf91a18525" - } - Frame { - msec: 3968 - hash: "c68ef5177f4568eb77c0f4135ba65e44" - } - Frame { - msec: 3984 - hash: "f047939a56a0ecee5deefcd3d2bf1710" - } - Frame { - msec: 4000 - hash: "4af748f59c6a62156a228ae635ec2d9c" - } - Frame { - msec: 4016 - hash: "b69b045557a8eada80a24eb4caa7ea4e" - } - Frame { - msec: 4032 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4048 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4064 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4080 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4096 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4112 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4128 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4144 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4160 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4176 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4192 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4208 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4224 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4240 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4256 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4272 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4288 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4304 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4320 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4336 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4352 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4368 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4384 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4400 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4416 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4432 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4448 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4464 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4480 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4496 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4512 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4528 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4544 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4560 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4576 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4592 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4608 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4624 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4640 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4656 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4672 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4688 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4704 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4720 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4736 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4752 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4768 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4784 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4800 - image: "flickable-vertical.4.png" - } - Frame { - msec: 4816 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4832 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4848 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4864 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4880 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4896 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4912 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4928 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4944 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4960 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4976 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 4992 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5008 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5024 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5040 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5056 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5072 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5088 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5104 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5120 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5136 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5152 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5168 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5184 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5200 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5216 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5232 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5248 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5264 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 5280 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 173; y: 85 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5296 - hash: "06472b42bc00fcaf7f84cd4ac613bbd2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 173; y: 86 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5312 - hash: "06472b42bc00fcaf7f84cd4ac613bbd2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 173; y: 89 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 173; y: 101 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5328 - hash: "0031f6edee383e97a3a31fe4268ff778" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 175; y: 117 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 179; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5344 - hash: "e594c62fe10165ae08e3dd8b33b9f584" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 159 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 183 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5360 - hash: "dd61c97aafee69eb7c54a47dceea5810" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 207 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5376 - hash: "29d06473d4aac07c89041b4413ce421f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 227 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 243 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5392 - hash: "7843b1bdb9efdbee0e6dd39ef8f1078a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 253 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 185; y: 253 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5408 - hash: "f609350d3c3041998340c9a6ded9baec" - } - Frame { - msec: 5424 - hash: "53b559ea9764ad466a0ffc1c55a596c2" - } - Frame { - msec: 5440 - hash: "8ac64c07cb29adff5d8510f956f3c35d" - } - Frame { - msec: 5456 - hash: "cb7ab2e7af067f1493197731515462fa" - } - Frame { - msec: 5472 - hash: "a0509acbb96bb3ced08a7c968836bd69" - } - Frame { - msec: 5488 - hash: "e4c5e681a275b4eff49eed39a6b544d6" - } - Frame { - msec: 5504 - hash: "4403e91762ff703eb12dee1b47f4072c" - } - Frame { - msec: 5520 - hash: "9f548a31dea71208c9f465e37bafc589" - } - Frame { - msec: 5536 - hash: "c86dd18e63508adfdbd5b3b891fd0d99" - } - Frame { - msec: 5552 - hash: "b182070ff0c1b579a9fd16d39f950079" - } - Frame { - msec: 5568 - hash: "4308c4d6346e20ed89026c0ec216ae89" - } - Frame { - msec: 5584 - hash: "2da84d83767e5ac1f7ce361bdcebe9c8" - } - Frame { - msec: 5600 - hash: "a3ce932ebf10147f79a183e44a6f6eb7" - } - Frame { - msec: 5616 - hash: "f5907789e23150c8dd0858d7c5098907" - } - Frame { - msec: 5632 - hash: "98b76cfad574957f5b7633390c6788c8" - } - Frame { - msec: 5648 - hash: "8c58d6511a7077cc386216a6227e8b52" - } - Frame { - msec: 5664 - hash: "2ca5e16bfd83f933f32367aa49db0e1d" - } - Frame { - msec: 5680 - hash: "ba387d0ab480eb9eaf6993c2ad168350" - } - Frame { - msec: 5696 - hash: "ae9f3b3245ccf921967a178712566b55" - } - Frame { - msec: 5712 - hash: "32cf742724558260447f61da03d5f321" - } - Frame { - msec: 5728 - hash: "ad21273f37c1abac0719f532dd5530ac" - } - Frame { - msec: 5744 - hash: "50e43629e0b8d0d651b9670241354cb1" - } - Frame { - msec: 5760 - image: "flickable-vertical.5.png" - } - Frame { - msec: 5776 - hash: "e4f0192406831c8e0abe1b561120b9c0" - } - Frame { - msec: 5792 - hash: "4c98e619b487d67d114ed0d7800f157e" - } - Frame { - msec: 5808 - hash: "11ed6dc9464396eb790db236f3713164" - } - Frame { - msec: 5824 - hash: "908febb1e344d6972d6df611e82792bd" - } - Frame { - msec: 5840 - hash: "03536bb4d6ff84bf75d9ec3574bb7361" - } - Frame { - msec: 5856 - hash: "f9946a44c2d4e91a947e6bda7415cf9b" - } - Frame { - msec: 5872 - hash: "0e63e4b9dd6bc7d7b684cb461c6257bf" - } - Frame { - msec: 5888 - hash: "1ffe88b771bed2aa27aafe6853b67c7a" - } - Frame { - msec: 5904 - hash: "ff1b78113a710481273ecf01cc978a46" - } - Frame { - msec: 5920 - hash: "e381553fa74436ca4b0d166bdca78cf7" - } - Frame { - msec: 5936 - hash: "d9a6f9bfc011edb7da23091fe24e2717" - } - Frame { - msec: 5952 - hash: "bd137e8b15f5c485d10b83461dedc67f" - } - Frame { - msec: 5968 - hash: "8f5b5e19845aa537790b683ef37c8626" - } - Frame { - msec: 5984 - hash: "5abbf0dccef8a3bb7b090a24d715a25f" - } - Frame { - msec: 6000 - hash: "bf924dd11e226022c9c812b5c7e8229e" - } - Frame { - msec: 6016 - hash: "c47b59ff7f3c4acfb296959f6eb14801" - } - Frame { - msec: 6032 - hash: "b5c0ac4514d44a651a4ab817646f1d88" - } - Frame { - msec: 6048 - hash: "86a9fba0e2ca761a4fb71e5edbf34cab" - } - Frame { - msec: 6064 - hash: "5bf43304399bdc979afd2580b922fd30" - } - Frame { - msec: 6080 - hash: "3696756d6250f23b1122d314df08b936" - } - Frame { - msec: 6096 - hash: "49c7b24b1655a1b5a9b4cc2187f7cc58" - } - Frame { - msec: 6112 - hash: "a387dce727804fb4ca1c3378ba130d08" - } - Frame { - msec: 6128 - hash: "505150386afee9c5d89566c90778cf58" - } - Frame { - msec: 6144 - hash: "a00ecae0150a069d306127ed54c4921f" - } - Frame { - msec: 6160 - hash: "e556bfca052e4d8922a4b85d6e94a22a" - } - Frame { - msec: 6176 - hash: "ac710b4796de4d0b7d275c5fffcefe1f" - } - Frame { - msec: 6192 - hash: "2f0475e842083c93b0fa0b8a8a33117a" - } - Frame { - msec: 6208 - hash: "6de0e820748df06e702a82f127d9f635" - } - Frame { - msec: 6224 - hash: "b3748d7a26ea8289e2faa9dd624b23a3" - } - Frame { - msec: 6240 - hash: "52be51e9a5bf6e6d0c2e64e584a4bf11" - } - Frame { - msec: 6256 - hash: "9c4a08a51556d56f2809d27a1de0aae3" - } - Frame { - msec: 6272 - hash: "4a151e94a39b68a47374cc45cb8969df" - } - Frame { - msec: 6288 - hash: "a2c2926224103d6e0a679b891451f791" - } - Frame { - msec: 6304 - hash: "c192adca5c3cf3741f6e7b33d53a722a" - } - Frame { - msec: 6320 - hash: "8fa9d85c213243e0709e3e32f03cebd9" - } - Frame { - msec: 6336 - hash: "20f516aa2c4ebc239a283176d83ade6f" - } - Frame { - msec: 6352 - hash: "ac8ace61348c5500dd6e2d1f3b4b174b" - } - Frame { - msec: 6368 - hash: "39cc6b136e17283ddc65425150cec7be" - } - Frame { - msec: 6384 - hash: "b250cb3fd5a7ab5c76ae15d5a500a894" - } - Frame { - msec: 6400 - hash: "f07e4f8b61c0ce514364e062867687a2" - } - Frame { - msec: 6416 - hash: "caed510a4edc2830f885f9a8ff98c072" - } - Frame { - msec: 6432 - hash: "2cfba2b8cd1cbc260edf390e17532afa" - } - Frame { - msec: 6448 - hash: "f1d705e01521261f22b89aeefb146c7a" - } - Frame { - msec: 6464 - hash: "9508799a0e28e60a65925b7c10fa2874" - } - Frame { - msec: 6480 - hash: "accdad5176a0cdce92ed07a7ae818a13" - } - Frame { - msec: 6496 - hash: "2748258d00cf2f0e5f94c94f97ed95ae" - } - Frame { - msec: 6512 - hash: "994897c0842947675e2e2df4021c1b5e" - } - Frame { - msec: 6528 - hash: "22936773b2fc5c555f14a8375da2a7a4" - } - Frame { - msec: 6544 - hash: "22936773b2fc5c555f14a8375da2a7a4" - } - Frame { - msec: 6560 - hash: "b58badc862e394bf5374554e019f90c0" - } - Frame { - msec: 6576 - hash: "b58badc862e394bf5374554e019f90c0" - } - Frame { - msec: 6592 - hash: "b58badc862e394bf5374554e019f90c0" - } - Frame { - msec: 6608 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6624 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6640 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6656 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6672 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6688 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6704 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6720 - image: "flickable-vertical.6.png" - } - Frame { - msec: 6736 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6752 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6768 - hash: "679369b924d719ae309a45034bdba40d" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 31; y: 575 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6784 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6800 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6816 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6832 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6848 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6864 - hash: "679369b924d719ae309a45034bdba40d" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 31; y: 575 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6880 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6896 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6912 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6928 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6944 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6960 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6976 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 6992 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7008 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7024 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7040 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7056 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7072 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7088 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7104 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7120 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7136 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7152 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7168 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7184 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7200 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7216 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7232 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7248 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7264 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7280 - hash: "679369b924d719ae309a45034bdba40d" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 156; y: 403 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7296 - hash: "843453070c3ac1bf26cfd84d3ab151eb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 156; y: 402 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 396 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7312 - hash: "843453070c3ac1bf26cfd84d3ab151eb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 386 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7328 - hash: "843453070c3ac1bf26cfd84d3ab151eb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 376 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 360 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7344 - hash: "843453070c3ac1bf26cfd84d3ab151eb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 344 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 322 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7360 - hash: "843453070c3ac1bf26cfd84d3ab151eb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 164; y: 298 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 168; y: 278 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 168; y: 278 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7376 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7392 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7408 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7424 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7440 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7456 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7472 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7488 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7504 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7520 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7536 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7552 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7568 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7584 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7600 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7616 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7632 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7648 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7664 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7680 - image: "flickable-vertical.7.png" - } - Frame { - msec: 7696 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7712 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7728 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7744 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7760 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7776 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7792 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7808 - hash: "679369b924d719ae309a45034bdba40d" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 154; y: 161 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7824 - hash: "16eef219cc7d4e7589ea59ebc349973c" - } - Frame { - msec: 7840 - hash: "16eef219cc7d4e7589ea59ebc349973c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 162 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7856 - hash: "16eef219cc7d4e7589ea59ebc349973c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 164 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 167 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7872 - hash: "16eef219cc7d4e7589ea59ebc349973c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 177 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7888 - hash: "16eef219cc7d4e7589ea59ebc349973c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 150; y: 189 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 146; y: 207 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7904 - hash: "16eef219cc7d4e7589ea59ebc349973c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 229 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 140; y: 255 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7920 - hash: "16eef219cc7d4e7589ea59ebc349973c" + msec: 2832 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } Mouse { type: 5 button: 0 buttons: 1 - x: 134; y: 281 + x: 124; y: 275 modifiers: 0 sendToViewport: true } @@ -2356,31 +948,19 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 132; y: 313 + x: 125; y: 284 modifiers: 0 sendToViewport: true } Frame { - msec: 7936 - hash: "16eef219cc7d4e7589ea59ebc349973c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 128; y: 343 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7952 - hash: "16eef219cc7d4e7589ea59ebc349973c" + msec: 2848 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } Mouse { type: 5 button: 0 buttons: 1 - x: 126; y: 373 + x: 125; y: 293 modifiers: 0 sendToViewport: true } @@ -2388,475 +968,315 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 126; y: 397 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 126; y: 397 + x: 127; y: 304 modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7968 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 7984 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8000 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8016 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8032 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8048 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8064 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8080 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8096 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8112 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8128 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8144 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8160 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8176 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8192 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8208 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8224 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8240 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8256 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8272 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8288 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8304 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8320 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8336 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8352 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8368 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8384 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8400 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8416 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8432 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8448 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8464 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8480 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8496 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8512 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8528 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8544 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8560 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8576 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8592 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8608 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8624 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8640 - image: "flickable-vertical.8.png" - } - Frame { - msec: 8656 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8672 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8688 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8704 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8720 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8736 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8752 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8768 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8784 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8800 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8816 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8832 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8848 - hash: "679369b924d719ae309a45034bdba40d" - } - Frame { - msec: 8864 - hash: "679369b924d719ae309a45034bdba40d" + sendToViewport: true } Frame { - msec: 8880 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2864 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } - Frame { - msec: 8896 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 129; y: 320 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 8912 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 131; y: 337 + modifiers: 0 + sendToViewport: true } Frame { - msec: 8928 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2880 + image: "flickable-vertical.2.png" } - Frame { - msec: 8944 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 136; y: 354 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 8960 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 142; y: 375 + modifiers: 0 + sendToViewport: true } Frame { - msec: 8976 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2896 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } - Frame { - msec: 8992 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 144; y: 392 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 9008 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 149; y: 411 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9024 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2912 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } - Frame { - msec: 9040 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 156; y: 451 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9056 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2928 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } - Frame { - msec: 9072 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 159; y: 466 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 9088 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 159; y: 479 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9104 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2944 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } Mouse { - type: 2 - button: 1 + type: 5 + button: 0 buttons: 1 - x: 44; y: 574 + x: 161; y: 488 modifiers: 0 sendToViewport: true } - Frame { - msec: 9120 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 161; y: 493 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9136 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2960 + hash: "96fb3652bfcf0aac1e35a2e50532816f" } - Frame { - msec: 9152 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 161; y: 494 + modifiers: 0 + sendToViewport: true } Mouse { type: 3 button: 1 buttons: 0 - x: 44; y: 574 + x: 161; y: 494 modifiers: 0 sendToViewport: true } Frame { - msec: 9168 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2976 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9184 - hash: "679369b924d719ae309a45034bdba40d" + msec: 2992 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9200 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3008 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9216 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3024 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9232 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3040 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9248 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3056 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9264 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3072 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9280 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3088 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9296 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3104 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9312 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3120 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9328 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3136 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9344 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3152 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9360 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3168 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9376 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3184 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 9392 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 162; y: 474 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9408 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3200 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 9424 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 472 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 9440 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 468 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9456 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3216 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 9472 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 165; y: 464 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 9488 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 460 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9504 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3232 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 9520 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 450 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 9536 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 170; y: 438 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9552 - hash: "679369b924d719ae309a45034bdba40d" + msec: 3248 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 9568 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 172; y: 426 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 9584 - hash: "679369b924d719ae309a45034bdba40d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 174; y: 409 + modifiers: 0 + sendToViewport: true } Frame { - msec: 9600 - image: "flickable-vertical.9.png" + msec: 3264 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Mouse { - type: 2 - button: 1 + type: 5 + button: 0 buttons: 1 - x: 152; y: 444 + x: 174; y: 397 modifiers: 0 sendToViewport: true } - Frame { - msec: 9616 - hash: "843453070c3ac1bf26cfd84d3ab151eb" - } Mouse { type: 5 button: 0 buttons: 1 - x: 152; y: 442 + x: 176; y: 383 modifiers: 0 sendToViewport: true } Frame { - msec: 9632 - hash: "843453070c3ac1bf26cfd84d3ab151eb" + msec: 3280 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Mouse { type: 5 button: 0 buttons: 1 - x: 152; y: 440 + x: 176; y: 367 modifiers: 0 sendToViewport: true } @@ -2864,31 +1284,39 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 152; y: 438 + x: 176; y: 350 modifiers: 0 sendToViewport: true } Frame { - msec: 9648 - hash: "843453070c3ac1bf26cfd84d3ab151eb" + msec: 3296 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 174; y: 335 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 154; y: 429 + x: 172; y: 316 modifiers: 0 sendToViewport: true } Frame { - msec: 9664 - hash: "3b0e0ed925b1c197cd94afd3d1a6d572" + msec: 3312 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Mouse { type: 5 button: 0 buttons: 1 - x: 156; y: 421 + x: 170; y: 296 modifiers: 0 sendToViewport: true } @@ -2896,31 +1324,47 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 158; y: 413 + x: 168; y: 279 modifiers: 0 sendToViewport: true } Frame { - msec: 9680 - hash: "d7b3838ee1219816b76224c29c7ba2e1" + msec: 3328 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 262 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 160; y: 403 + x: 166; y: 244 modifiers: 0 sendToViewport: true } Frame { - msec: 9696 - hash: "9835b420f0c40a03f8f9fafe39e209f1" + msec: 3344 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 164; y: 231 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 162; y: 393 + x: 164; y: 222 modifiers: 0 sendToViewport: true } @@ -2928,599 +1372,543 @@ VisualTest { type: 3 button: 1 buttons: 0 - x: 162; y: 393 + x: 164; y: 222 modifiers: 0 sendToViewport: true } Frame { - msec: 9712 - hash: "46fb2005a813fc2c278f1bfe83801c0e" - } - Frame { - msec: 9728 - hash: "81dd9308e475548db21474c37cb9a5b0" - } - Frame { - msec: 9744 - hash: "10043d74eef240abd2360d45845dd51e" - } - Frame { - msec: 9760 - hash: "0f83b8f23ba42b22c10a2b68227db64e" - } - Frame { - msec: 9776 - hash: "7a296e3702c9fef25cb53ac04053853b" - } - Frame { - msec: 9792 - hash: "ae439daa32f76a368ab314c86c55a378" - } - Frame { - msec: 9808 - hash: "42ac3503dfa462bf0b5d8c15f6f3b143" - } - Frame { - msec: 9824 - hash: "b8bb92eb2de7ca0f5924b09f380f47db" - } - Frame { - msec: 9840 - hash: "994e314d2d38005b6006e81468f10efa" - } - Frame { - msec: 9856 - hash: "be6a32f3c82aeccebc7778ff5646637f" - } - Frame { - msec: 9872 - hash: "2fb196f53d5e785e04a14d98d9dab8a1" - } - Frame { - msec: 9888 - hash: "0926f8209f4f35f6e6fa92935d7408e4" - } - Frame { - msec: 9904 - hash: "780450301d37ea2b94eb9386e7e5294c" - } - Frame { - msec: 9920 - hash: "cd4e9629c767813c9a2a2fa30dc5114b" - } - Frame { - msec: 9936 - hash: "409630d7b9c3c4231bccf74f7453f0af" - } - Frame { - msec: 9952 - hash: "4c98e619b487d67d114ed0d7800f157e" - } - Frame { - msec: 9968 - hash: "0a8157dc45764ab8e0e0b89e5c73a76b" + msec: 3360 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 9984 - hash: "ecfc611b58e000df9f608c8889a2a84f" + msec: 3376 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10000 - hash: "5c6bc246446c75d57bcd40e86041892b" + msec: 3392 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10016 - hash: "fe1a3e688da126861b29a94b676b68f7" + msec: 3408 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10032 - hash: "f5feef892bf013916bacb63ff6460cb7" + msec: 3424 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10048 - hash: "665018efd991cab3acb4b80005fc2bd3" + msec: 3440 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10064 - hash: "bc7614e4a0e0724a9cb0981f09f8a7f6" + msec: 3456 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10080 - hash: "463a6da452a5a6267240992ad5284e89" + msec: 3472 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10096 - hash: "eca3f146e0143856f58b4f7aee42e6f8" + msec: 3488 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10112 - hash: "dec9b9845509c4d28d7faae043b292d1" + msec: 3504 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10128 - hash: "49452842cb2429cd465e40478638e0e3" + msec: 3520 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10144 - hash: "a7029d0090d3620ee21b9e3d55eefe78" + msec: 3536 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10160 - hash: "1041b18d422acba0b9a45ca89856e493" + msec: 3552 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10176 - hash: "d53038b688b920715b196dd4cc2b2587" + msec: 3568 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10192 - hash: "da59ffebb491ab5fa98429117c3bb8ac" + msec: 3584 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10208 - hash: "602269f78eaf0df36c66de72e005989a" + msec: 3600 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10224 - hash: "a311b6b35feb4096b0d01753a6695210" + msec: 3616 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10240 - hash: "cd303e8850c6aac58fcf2a98db418f1b" + msec: 3632 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10256 - hash: "6e9132dd840a136cc688676bce7640de" + msec: 3648 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10272 - hash: "a3818492bb4ebd91ce86675d34731c58" + msec: 3664 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10288 - hash: "b85a127895713234028641787312b717" + msec: 3680 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10304 - hash: "a030dc1543e84d8a0ec9f77fd6325060" + msec: 3696 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10320 - hash: "669cd28abe17d419e9cabe4d796a38c3" + msec: 3712 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10336 - hash: "bfdd15cf058050203561b5f935106263" + msec: 3728 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10352 - hash: "a39abc94fee93175a6a37b402750e4f7" + msec: 3744 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10368 - hash: "0c65e19e12d95ec8ee253219b0c3e472" + msec: 3760 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10384 - hash: "15debc234e70765a4510bfbda886a2c9" + msec: 3776 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10400 - hash: "9566a87437cb6e9025f9a3881a620823" + msec: 3792 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10416 - hash: "b66d89244cba537a21901dcb11387bf7" + msec: 3808 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10432 - hash: "03347ce314393bd84873026cd01c562f" + msec: 3824 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10448 - hash: "458fab2449dba089ae6f1e78a230564b" + msec: 3840 + image: "flickable-vertical.3.png" } Frame { - msec: 10464 - hash: "7115f27574bfc68ff58a2e4fb65107dd" + msec: 3856 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10480 - hash: "66260c030dddda4b086bc98982a11934" + msec: 3872 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10496 - hash: "d5790ee5eb8ecf249cb1dcf58aefa4ee" + msec: 3888 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10512 - hash: "6bec07ba1e2ac637aab7a9038cbacc93" + msec: 3904 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10528 - hash: "a72f36cc18c8620a2bd85bac49f6771a" + msec: 3920 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10544 - hash: "65b178ae559ab0ba9c568718f287ff68" + msec: 3936 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10560 - image: "flickable-vertical.10.png" + msec: 3952 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10576 - hash: "b35a8e33f876921d477809b5adb7a201" + msec: 3968 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10592 - hash: "057b69ef8137f38c596432da547f1ead" + msec: 3984 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10608 - hash: "62f76f46857106010c2e862ed19baeea" + msec: 4000 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10624 - hash: "fbfc73e1b20b79d71953c298ca095047" + msec: 4016 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10640 - hash: "aea78988f875083660dd46d6afc71683" + msec: 4032 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10656 - hash: "60d8decd7ded420433256a94f1bf954f" + msec: 4048 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10672 - hash: "221f72cdf18e0b33e7f6a65356fcc61b" + msec: 4064 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10688 - hash: "221f72cdf18e0b33e7f6a65356fcc61b" + msec: 4080 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10704 - hash: "c2eac9c0d84c6b2f133d8751ac5f265f" + msec: 4096 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10720 - hash: "c2eac9c0d84c6b2f133d8751ac5f265f" + msec: 4112 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10736 - hash: "c2eac9c0d84c6b2f133d8751ac5f265f" + msec: 4128 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10752 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4144 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10768 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4160 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10784 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4176 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10800 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4192 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10816 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4208 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10832 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4224 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10848 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4240 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10864 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4256 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10880 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4272 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 2 button: 1 buttons: 1 - x: 98; y: 573 + x: 38; y: 583 modifiers: 0 sendToViewport: true } Frame { - msec: 10896 - hash: "28a06534a2e35250c67112dfb6c05095" - } - Frame { - msec: 10912 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4288 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10928 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4304 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10944 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4320 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10960 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4336 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 3 button: 1 buttons: 0 - x: 98; y: 573 + x: 38; y: 583 modifiers: 0 sendToViewport: true } Frame { - msec: 10976 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4352 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 10992 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4368 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11008 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4384 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11024 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4400 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11040 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4416 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11056 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4432 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11072 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4448 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11088 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4464 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11104 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4480 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11120 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4496 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11136 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4512 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11152 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4528 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11168 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4544 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11184 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4560 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11200 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4576 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11216 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4592 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11232 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4608 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11248 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4624 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11264 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4640 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11280 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4656 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11296 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4672 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11312 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4688 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11328 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4704 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11344 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4720 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11360 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4736 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11376 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4752 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11392 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4768 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11408 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4784 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 110; y: 578 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4800 + image: "flickable-vertical.4.png" + } + Frame { + msec: 4816 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" + } + Frame { + msec: 4832 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 110; y: 578 + modifiers: 0 + sendToViewport: true } Frame { - msec: 11424 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4848 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11440 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4864 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11456 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4880 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11472 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4896 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11488 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4912 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11504 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4928 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11520 - image: "flickable-vertical.11.png" + msec: 4944 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11536 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4960 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11552 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4976 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11568 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 4992 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11584 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5008 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11600 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5024 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11616 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5040 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11632 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5056 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11648 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5072 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11664 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5088 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11680 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5104 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11696 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5120 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11712 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5136 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 11728 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5152 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 2 button: 1 buttons: 1 - x: 170; y: 335 + x: 123; y: 218 modifiers: 0 sendToViewport: true } Frame { - msec: 11744 - hash: "28a06534a2e35250c67112dfb6c05095" - } - Frame { - msec: 11760 - hash: "28a06534a2e35250c67112dfb6c05095" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 170; y: 336 - modifiers: 0 - sendToViewport: true + msec: 5168 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 5 button: 0 buttons: 1 - x: 170; y: 338 + x: 123; y: 219 modifiers: 0 sendToViewport: true } Frame { - msec: 11776 - hash: "28a06534a2e35250c67112dfb6c05095" + msec: 5184 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 5 button: 0 buttons: 1 - x: 170; y: 346 + x: 124; y: 223 modifiers: 0 sendToViewport: true } - Frame { - msec: 11792 - hash: "12040d4dd56848fc93d6390005045188" - } Mouse { type: 5 button: 0 buttons: 1 - x: 170; y: 359 + x: 124; y: 230 modifiers: 0 sendToViewport: true } Frame { - msec: 11808 - hash: "caa70db5f31eb607c2de39734a42796c" + msec: 5200 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 5 button: 0 buttons: 1 - x: 168; y: 367 + x: 126; y: 241 modifiers: 0 sendToViewport: true } @@ -3528,375 +1916,219 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 166; y: 379 + x: 126; y: 257 modifiers: 0 sendToViewport: true } Frame { - msec: 11824 - hash: "ca45ab832b5a8b041ba8bea1185a2b38" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 166; y: 393 - modifiers: 0 - sendToViewport: true + msec: 5216 + hash: "43865bf07d3b0818bd0fd3388451f055" } Mouse { type: 5 button: 0 buttons: 1 - x: 164; y: 407 + x: 130; y: 300 modifiers: 0 sendToViewport: true } Frame { - msec: 11840 - hash: "188042b1a045dc96a65a7fc0e90568c3" + msec: 5232 + hash: "d7e49dfc8f9faef7d405451ae52691e0" } Mouse { type: 5 button: 0 buttons: 1 - x: 164; y: 419 + x: 132; y: 325 modifiers: 0 sendToViewport: true } - Frame { - msec: 11856 - hash: "714a3cf591beeeddbdc2df94f5cedef1" - } Mouse { type: 5 button: 0 buttons: 1 - x: 164; y: 443 + x: 134; y: 349 modifiers: 0 sendToViewport: true } Frame { - msec: 11872 - hash: "e9978c24eef649d01cb2245f783cb562" + msec: 5248 + hash: "427d51731dac5e356c5ab82d272c0d5a" } Mouse { type: 5 button: 0 buttons: 1 - x: 164; y: 461 + x: 136; y: 372 modifiers: 0 sendToViewport: true } - Frame { - msec: 11888 - hash: "bc8f32062afdfe33da7c99ee867bc2a3" - } Mouse { type: 5 button: 0 buttons: 1 - x: 166; y: 467 + x: 138; y: 395 modifiers: 0 sendToViewport: true } Frame { - msec: 11904 - hash: "d788c09f4acba8197b2d8fef2e8ece51" + msec: 5264 + hash: "9370cc84e32afc59c81c4d2dbf5fa690" } Mouse { type: 5 button: 0 buttons: 1 - x: 168; y: 470 + x: 142; y: 433 modifiers: 0 sendToViewport: true } Frame { - msec: 11920 - hash: "b0a383eb416727c22451a30a997f48f1" + msec: 5280 + hash: "984bd78f9f503e8a3ffac5bbe69fe3a9" } Mouse { type: 5 button: 0 buttons: 1 - x: 169; y: 472 + x: 144; y: 470 modifiers: 0 sendToViewport: true } - Frame { - msec: 11936 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 11952 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 11968 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 11984 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12000 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12016 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12032 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12048 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12064 - hash: "6b81b365eb057ffa32d89e564bc92949" - } Mouse { type: 3 button: 1 buttons: 0 - x: 169; y: 472 + x: 144; y: 470 modifiers: 0 sendToViewport: true } Frame { - msec: 12080 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12096 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12112 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12128 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Frame { - msec: 12144 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5296 + hash: "022106d1ecd8195923b6d79fb95d1135" } Frame { - msec: 12160 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5312 + hash: "5b6bd34ae7e59923bb4b4c2e4e7a0bf3" } Frame { - msec: 12176 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5328 + hash: "2f8a121667195d85cd05417a350dd35b" } Frame { - msec: 12192 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5344 + hash: "d0f7fcb01dc6abc0ae29ca1ee45edf24" } Frame { - msec: 12208 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5360 + hash: "9f3e5d23ea33bff4f05900d6faf7dbae" } Frame { - msec: 12224 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5376 + hash: "535f40614a02fa3f627748a5c24b3a39" } Frame { - msec: 12240 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5392 + hash: "138bc0c4dd08ffec0c79c4c7474ed318" } Frame { - msec: 12256 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5408 + hash: "838f07195d00b19104bbbd93c7670dab" } Frame { - msec: 12272 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5424 + hash: "b7fb0944bf53ccc62effe159333449ff" } Frame { - msec: 12288 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5440 + hash: "56a21c9210074ef8a044019fa9375b14" } Frame { - msec: 12304 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5456 + hash: "4ef80a5d73981ce1f1081fc578ea088a" } Frame { - msec: 12320 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5472 + hash: "f3f9cf99ab436c1a2805c0859df9589e" } Frame { - msec: 12336 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5488 + hash: "0d88023fe7af39e409f7a12348d4e3d6" } Frame { - msec: 12352 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5504 + hash: "b4abf98d58fe490ceb7a62621292f8d9" } Frame { - msec: 12368 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5520 + hash: "5c3247324b214b961ed40da985fb50a4" } Frame { - msec: 12384 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5536 + hash: "41195a5c39ac1ecbd175e5663d23cdaa" } Frame { - msec: 12400 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5552 + hash: "028460cd5eecd50a12261e541f1776bf" } Frame { - msec: 12416 - hash: "6b81b365eb057ffa32d89e564bc92949" + msec: 5568 + hash: "56763e343221db0a111bb91e72640911" } Frame { - msec: 12432 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 171; y: 452 - modifiers: 0 - sendToViewport: true + msec: 5584 + hash: "a4b644bf91108dbc9b21a1646dab0b37" } Frame { - msec: 12448 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 172; y: 450 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 173; y: 448 - modifiers: 0 - sendToViewport: true + msec: 5600 + hash: "c2d2d51f0147e78550f762ec84f7f338" } Frame { - msec: 12464 - hash: "6b81b365eb057ffa32d89e564bc92949" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 175; y: 434 - modifiers: 0 - sendToViewport: true + msec: 5616 + hash: "1a93e2ed871ae094aff5eeaa07385a94" } Frame { - msec: 12480 - image: "flickable-vertical.12.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 175; y: 431 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 177; y: 423 - modifiers: 0 - sendToViewport: true + msec: 5632 + hash: "977a2efa43d3be0340975ccbe6b0e8a9" } Frame { - msec: 12496 - hash: "7e760a017ab10fe920074405248d1473" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 177; y: 415 - modifiers: 0 - sendToViewport: true + msec: 5648 + hash: "977a2efa43d3be0340975ccbe6b0e8a9" } Frame { - msec: 12512 - hash: "eab43f1c2b6fb79aad578a164b8b7b28" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 181; y: 395 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 383 - modifiers: 0 - sendToViewport: true + msec: 5664 + hash: "0a8c81335816c747d320b3a147ee0350" } Frame { - msec: 12528 - hash: "a5446ca4c6650ffc9812845bdb8db088" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 371 - modifiers: 0 - sendToViewport: true + msec: 5680 + hash: "0a8c81335816c747d320b3a147ee0350" } Frame { - msec: 12544 - hash: "71cb7dc7f9dbb9e17d7f44885ec71bdb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 187; y: 357 - modifiers: 0 - sendToViewport: true + msec: 5696 + hash: "46e69596c809d4c7563d5d44ca62eb02" } Frame { - msec: 12560 - hash: "ccf0908d968f658311a9787182de498a" + msec: 5712 + hash: "46e69596c809d4c7563d5d44ca62eb02" } Mouse { - type: 5 - button: 0 + type: 2 + button: 1 buttons: 1 - x: 187; y: 329 + x: 176; y: 412 modifiers: 0 sendToViewport: true } Frame { - msec: 12576 - hash: "26b9c6379590bbda24d129bd4f19f7d3" + msec: 5728 + hash: "aebff194f1c84190623ebfc358503b5f" } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 303 + x: 177; y: 406 modifiers: 0 sendToViewport: true } @@ -3904,1139 +2136,1363 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 187; y: 293 + x: 177; y: 395 modifiers: 0 sendToViewport: true } Frame { - msec: 12592 - hash: "6c88a02ffdffee6d615ddc6a11c1b698" + msec: 5744 + hash: "39f1cee1ad7ab2ab6601e2b67f5d83c7" } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 283 + x: 181; y: 367 modifiers: 0 sendToViewport: true } Frame { - msec: 12608 - hash: "38175cb09b6e63353b478635b22dbb5b" + msec: 5760 + image: "flickable-vertical.5.png" } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 280 + x: 183; y: 326 modifiers: 0 sendToViewport: true } + Frame { + msec: 5776 + hash: "02d9d0829c64b92e98b8093b38e6f848" + } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 277 + x: 183; y: 299 modifiers: 0 sendToViewport: true } - Frame { - msec: 12624 - hash: "5084910bf204e8b688de31d4f9018a57" - } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 275 + x: 180; y: 276 modifiers: 0 sendToViewport: true } + Frame { + msec: 5792 + hash: "46f76f341787a80b9f9c16a5bc9f83c5" + } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 273 + x: 175; y: 214 modifiers: 0 sendToViewport: true } Frame { - msec: 12640 - hash: "e984565312571ec144a1cd4cc11253e8" + msec: 5808 + hash: "67c3225460673038d190169115622f02" } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 272 + x: 167; y: 147 modifiers: 0 sendToViewport: true } Mouse { - type: 5 - button: 0 - buttons: 1 - x: 187; y: 271 + type: 3 + button: 1 + buttons: 0 + x: 167; y: 147 modifiers: 0 sendToViewport: true } Frame { - msec: 12656 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5824 + hash: "2cb9abc32225ea9d39deb09da6119a94" } Frame { - msec: 12672 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5840 + hash: "bf69fa4cd3f73e15f07394d290b801e6" } Frame { - msec: 12688 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5856 + hash: "cf5f2524171ca121f4478c3c6d7dfd35" } Frame { - msec: 12704 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5872 + hash: "d498a494fa489150bd324e18a1c14fe5" } Frame { - msec: 12720 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5888 + hash: "459c2e8110f1c21b3f8d590e7c0355de" } Frame { - msec: 12736 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5904 + hash: "1bde4841026fd6117b49d94d697b03fa" } Frame { - msec: 12752 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5920 + hash: "84b025039284f616d69465ec8cc245b8" } Frame { - msec: 12768 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5936 + hash: "3652c4664895a0b6fbe06521a79c8bb9" } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 187; y: 271 - modifiers: 0 - sendToViewport: true + Frame { + msec: 5952 + hash: "f817f6059b8cb3fc4a85c9c91df6c7a3" } Frame { - msec: 12784 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5968 + hash: "cb671ab3c3a9de0c17df2896e45beca9" } Frame { - msec: 12800 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 5984 + hash: "d9102b25f63ca9274057dad0ab2b6102" } Frame { - msec: 12816 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6000 + hash: "b9df17ad73b7a5b018ab30c5c57afd02" } Frame { - msec: 12832 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6016 + hash: "664494b87407881a11b4732f0713f587" } Frame { - msec: 12848 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6032 + hash: "cac62fc442c064286b7e4a71a13b929c" } Frame { - msec: 12864 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6048 + hash: "989b4649dca89e227f552979af1c68f0" } Frame { - msec: 12880 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6064 + hash: "80b4b11b3cbc684d920fa89c3345d8bc" } Frame { - msec: 12896 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6080 + hash: "dcbd4e93e7ac0ef0e78c6a19cf3295f1" } Frame { - msec: 12912 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6096 + hash: "33f3ddd9d7fa5a472465029d7a7263ae" } Frame { - msec: 12928 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6112 + hash: "fb5675d4870528b9c0591c5a80530b17" } Frame { - msec: 12944 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6128 + hash: "e57dbe962c1ef45893e41559cee19d16" } Frame { - msec: 12960 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6144 + hash: "a9081993871e0171e25159a078a5cdbc" } Frame { - msec: 12976 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6160 + hash: "cadc7f53518ba3f4cbe8e686b90fa5ab" } Frame { - msec: 12992 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 6176 + hash: "e9208a44f95ccc181bfc64e8785bd633" } Frame { - msec: 13008 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6192 + hash: "a69f2969122a547b1af195f581c272b8" } Frame { - msec: 13024 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6208 + hash: "eee0b7c2f01bcc57f141d9aa27f73da6" } Frame { - msec: 13040 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6224 + hash: "f58ac16d11909563cf214b6c2baef0dc" } Frame { - msec: 13056 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6240 + hash: "e373def5a0bcd30ea7f4acb539785e3c" } Frame { - msec: 13072 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6256 + hash: "0dce9f4bab793ea1d6e368cd6fb37047" } Frame { - msec: 13088 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6272 + hash: "4a4725f2546b08faffa3a543de578e59" } Frame { - msec: 13104 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6288 + hash: "ea36b5869634115182c365990518b993" } Frame { - msec: 13120 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6304 + hash: "45b102bd0c5ab42783b9e428cea202a4" } Frame { - msec: 13136 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6320 + hash: "0154e6010f3a8621a8f992bb7dcfd5b8" } Frame { - msec: 13152 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6336 + hash: "035a8c7e9eece0f9ea4f5ad62658d7f9" } Frame { - msec: 13168 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6352 + hash: "fc1050cf971296a9200c548feee08d0a" } Frame { - msec: 13184 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6368 + hash: "ef9c7f1228ac6825cce8ce0e9e7aaac5" } Frame { - msec: 13200 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6384 + hash: "70ef278074b1527aba16eca8c3811af5" } Frame { - msec: 13216 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6400 + hash: "08012939aca6381dedd838a7fd0be1a3" } Frame { - msec: 13232 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6416 + hash: "2c702b17a0ec2aac2928ad8bcc2e080b" } Frame { - msec: 13248 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6432 + hash: "e70e243e8ecc8e8f50ea4f0f4559c8c6" } Frame { - msec: 13264 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6448 + hash: "73013ff1a7f0c3040f3520f0581e4ce0" } Frame { - msec: 13280 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6464 + hash: "14cdd689ae9e5b15e212d9dab63ec946" } Frame { - msec: 13296 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6480 + hash: "354d822bf252559211513e49e417a413" } Frame { - msec: 13312 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6496 + hash: "77eb798efd1447eca75de12dc2c7a215" } Frame { - msec: 13328 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6512 + hash: "08dc9068d21db7ff87d4d88eb1443aed" } Frame { - msec: 13344 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6528 + hash: "baab3b98e70ca51d1cbd27d4a998380f" } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 181; y: 242 - modifiers: 0 - sendToViewport: true + Frame { + msec: 6544 + hash: "baab3b98e70ca51d1cbd27d4a998380f" } Frame { - msec: 13360 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6560 + hash: "baab3b98e70ca51d1cbd27d4a998380f" } Frame { - msec: 13376 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6576 + hash: "84519c415186e5abd122a1f39e26265b" } Frame { - msec: 13392 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6592 + hash: "df63754934af656e08e93ce4fa69c19e" } Frame { - msec: 13408 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6608 + hash: "34439eb26069feabee5ba97bfd1c2cb3" } Frame { - msec: 13424 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6624 + hash: "46534a7da31ac76c52036e51c63db72e" } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 181; y: 242 - modifiers: 0 - sendToViewport: true + Frame { + msec: 6640 + hash: "cf8e86112be37fc94687aa8bd437e1a2" } Frame { - msec: 13440 - image: "flickable-vertical.13.png" + msec: 6656 + hash: "f93ba6420ab0ef719aa10c6aae71c878" } Frame { - msec: 13456 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6672 + hash: "22f991814552e7e3e2db8fea0abe9d6c" } Frame { - msec: 13472 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6688 + hash: "7d2773bec8310d92166ab7184741ace4" } Frame { - msec: 13488 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6704 + hash: "f18aace5e0d4ca8a385a57682d82e43f" } Frame { - msec: 13504 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6720 + image: "flickable-vertical.6.png" } Frame { - msec: 13520 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6736 + hash: "7f445e22f19808ca71416cadd497f305" } Frame { - msec: 13536 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6752 + hash: "d6ef83bec490d2fb0f4d640f8c43f694" } Frame { - msec: 13552 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6768 + hash: "fbd19c34e68a21c8924f83c4d0cbcb79" } Frame { - msec: 13568 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6784 + hash: "179abedb6eef26a2e78c3a7884cb2178" } Frame { - msec: 13584 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6800 + hash: "292af687e9001eb7cf8434094202b4a0" } Frame { - msec: 13600 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6816 + hash: "1de0a8aa08194151e2b72d8b16cdba5f" } Frame { - msec: 13616 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6832 + hash: "ee607cf6f558e3ed7b08dad80a17dd05" } Frame { - msec: 13632 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6848 + hash: "2024a393baa1fa1c2d38ccc6756c4a44" } Frame { - msec: 13648 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6864 + hash: "898ac470a5b1619564496132c0150df2" } Frame { - msec: 13664 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6880 + hash: "b447e3917b7353e97409755159a614bc" } Frame { - msec: 13680 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 6896 + hash: "d03610c18a2c21785e59b4de7b92f20e" + } + Frame { + msec: 6912 + hash: "014dfa76c222aea838483840befff092" + } + Frame { + msec: 6928 + hash: "014dfa76c222aea838483840befff092" + } + Frame { + msec: 6944 + hash: "7830f79e5a37242fd97dd6ff9f89e9d0" + } + Frame { + msec: 6960 + hash: "331a6b6ebaa7e9f7b970bacafe070b2f" + } + Frame { + msec: 6976 + hash: "331a6b6ebaa7e9f7b970bacafe070b2f" + } + Frame { + msec: 6992 + hash: "331a6b6ebaa7e9f7b970bacafe070b2f" + } + Frame { + msec: 7008 + hash: "331a6b6ebaa7e9f7b970bacafe070b2f" + } + Frame { + msec: 7024 + hash: "eb0b45fac8756d32586cac82f25c5a51" + } + Frame { + msec: 7040 + hash: "eb0b45fac8756d32586cac82f25c5a51" + } + Frame { + msec: 7056 + hash: "eb0b45fac8756d32586cac82f25c5a51" + } + Frame { + msec: 7072 + hash: "eb0b45fac8756d32586cac82f25c5a51" + } + Frame { + msec: 7088 + hash: "eb0b45fac8756d32586cac82f25c5a51" + } + Frame { + msec: 7104 + hash: "eb0b45fac8756d32586cac82f25c5a51" + } + Frame { + msec: 7120 + hash: "eb0b45fac8756d32586cac82f25c5a51" + } + Frame { + msec: 7136 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7152 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7168 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7184 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7200 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7216 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7232 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7248 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7264 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Frame { + msec: 7280 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13696 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7296 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13712 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7312 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13728 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7328 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13744 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7344 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13760 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7360 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13776 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7376 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13792 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7392 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13808 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7408 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13824 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7424 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13840 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7440 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13856 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7456 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13872 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7472 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13888 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7488 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13904 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7504 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13920 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7520 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13936 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7536 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Mouse { type: 2 button: 1 buttons: 1 - x: 181; y: 242 + x: 94; y: 581 modifiers: 0 sendToViewport: true } Frame { - msec: 13952 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7552 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13968 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7568 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 13984 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7584 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14000 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7600 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } - Frame { - msec: 14016 - hash: "4b86de37ae9bc630a2f3440811087617" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 94; y: 581 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14032 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7616 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14048 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7632 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14064 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7648 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14080 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7664 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14096 - hash: "4b86de37ae9bc630a2f3440811087617" + msec: 7680 + image: "flickable-vertical.7.png" } Frame { - msec: 14112 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7696 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14128 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7712 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14144 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7728 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14160 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7744 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14176 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7760 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14192 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7776 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14208 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7792 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14224 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7808 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14240 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7824 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14256 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7840 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14272 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7856 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14288 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7872 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14304 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7888 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14320 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7904 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14336 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7920 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14352 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7936 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } - Frame { - msec: 14368 - hash: "d96fb1b387b34f41f80e98c1feb05303" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 146; y: 574 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14384 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7952 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14400 - image: "flickable-vertical.14.png" + msec: 7968 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14416 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 7984 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14432 - hash: "d96fb1b387b34f41f80e98c1feb05303" + msec: 8000 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14448 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8016 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } - Frame { - msec: 14464 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 146; y: 574 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14480 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8032 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14496 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8048 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14512 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8064 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14528 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8080 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14544 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8096 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14560 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8112 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14576 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8128 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14592 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8144 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14608 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8160 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14624 - hash: "ecd5db8e582e6d2e15943ffd9fcb32a7" + msec: 8176 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14640 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8192 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14656 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8208 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14672 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8224 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14688 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8240 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14704 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8256 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14720 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8272 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14736 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8288 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14752 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8304 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 14768 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8320 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } - Frame { - msec: 14784 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 161; y: 422 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 14800 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 420 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14816 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8336 + hash: "bd1667fe88a71bc2f52ba5a6c9dc098c" } - Frame { - msec: 14832 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 415 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 14848 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 411 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14864 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8352 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 406 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 165; y: 397 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14880 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8368 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 386 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 375 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14896 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8384 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 364 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 352 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14912 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8400 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 342 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 165; y: 331 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14928 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8416 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 319 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 308 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14944 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8432 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 297 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 284 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14960 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8448 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 161; y: 272 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 161; y: 261 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14976 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8464 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 159; y: 250 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 235 + modifiers: 0 + sendToViewport: true } Frame { - msec: 14992 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8480 + hash: "1889f1f0e319b90b6a68d76df6eebe96" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 224 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 155; y: 211 + modifiers: 0 + sendToViewport: true } Frame { - msec: 15008 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 8496 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } - Frame { - msec: 15024 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 153; y: 198 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 15040 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 153; y: 187 + modifiers: 0 + sendToViewport: true } Mouse { type: 3 button: 1 buttons: 0 - x: 181; y: 242 + x: 153; y: 187 modifiers: 0 sendToViewport: true } Frame { - msec: 15056 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15072 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15088 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15104 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15120 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15136 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15152 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15168 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15184 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15200 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15216 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15232 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15248 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15264 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15280 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8512 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15296 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8528 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15312 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8544 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15328 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8560 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15344 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8576 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15360 - image: "flickable-vertical.15.png" + msec: 8592 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15376 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8608 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15392 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8624 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15408 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8640 + image: "flickable-vertical.8.png" } Frame { - msec: 15424 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8656 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15440 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8672 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15456 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8688 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15472 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8704 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15488 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8720 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15504 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8736 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15520 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8752 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15536 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8768 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15552 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8784 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15568 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8800 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15584 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8816 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15600 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8832 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15616 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8848 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15632 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8864 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15648 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8880 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15664 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8896 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15680 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8912 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15696 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8928 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Frame { - msec: 15712 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8944 + hash: "1889f1f0e319b90b6a68d76df6eebe96" } Mouse { type: 2 button: 1 buttons: 1 - x: 192; y: 218 + x: 127; y: 125 modifiers: 0 sendToViewport: true } Frame { - msec: 15728 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15744 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15760 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15776 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15792 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15808 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15824 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15840 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15856 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15872 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15888 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15904 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15920 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15936 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15952 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15968 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 15984 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" - } - Frame { - msec: 16000 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8960 + hash: "c1d084f6e9361c6c0c70f064ae863051" } - Frame { - msec: 16016 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 127; y: 128 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 16032 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 127; y: 131 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16048 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8976 + hash: "c1d084f6e9361c6c0c70f064ae863051" } - Frame { - msec: 16064 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 128; y: 135 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 16080 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 128; y: 139 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16096 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 8992 + hash: "a84a07f9d3006718d55de7d6ed60795e" } - Frame { - msec: 16112 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 130; y: 152 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16128 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 9008 + hash: "deaa0f57eff99ca88f7204e8d8b159b5" } - Frame { - msec: 16144 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 134; y: 176 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16160 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 9024 + hash: "4366ee113f7c987a2d8e5978b667e3d0" } - Frame { - msec: 16176 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 138; y: 207 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16192 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 9040 + hash: "9dbad53daf3a7988498c561dda4c00a6" } - Frame { - msec: 16208 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 145; y: 238 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16224 - hash: "e3069d9d3cbcd845b1e4763b0759dc38" + msec: 9056 + hash: "e70aeae6d78628c16a7c8c354cf91c98" } - Frame { - msec: 16240 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 152; y: 266 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16256 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9072 + hash: "38aa5fd0540648edce34103704d8b861" } - Frame { - msec: 16272 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 156; y: 288 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16288 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9088 + hash: "ff08c650e24f63fe7eae1984bb190e02" } - Frame { - msec: 16304 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 308 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16320 - image: "flickable-vertical.16.png" + msec: 9104 + hash: "0d0f2377991d15416bf76619d2f71218" } - Frame { - msec: 16336 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 327 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16352 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9120 + hash: "b7681257ec2ad1d532aa522147dd7549" } - Frame { - msec: 16368 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 343 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16384 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9136 + hash: "baaf75edb3c17bbc754e26fe15f1d295" } - Frame { - msec: 16400 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 353 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16416 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9152 + hash: "b68aab52cbcaf524ebb80f2a3af014b4" } - Frame { - msec: 16432 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 363 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16448 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9168 + hash: "c69d2b45d92950f7246976bcc247c687" } - Frame { - msec: 16464 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 373 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16480 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9184 + hash: "68cd8f467ac225f6e2c5a2914f92edc1" } - Frame { - msec: 16496 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 157; y: 383 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16512 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9200 + hash: "90cfbee19fd7c03bcfc9a57d94c7fd8d" } - Frame { - msec: 16528 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 155; y: 387 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 16544 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 155; y: 387 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16560 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9216 + hash: "8216a9f0024507e4cb8406575760947f" } Frame { - msec: 16576 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9232 + hash: "47f76e736f13c6f2318e8c8a8ab69d0e" } Frame { - msec: 16592 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9248 + hash: "75fc24bcf9d4b8d00f8a493b0095f445" } Frame { - msec: 16608 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9264 + hash: "d8e9b69514f411a6672b7057c33bcc41" } Frame { - msec: 16624 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9280 + hash: "9743d8ab32903d7fac7a4101ad24bcfd" } - Frame { - msec: 16640 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 150; y: 438 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16656 - hash: "53a0e69fe4816e6eed0b4e795bf90e19" + msec: 9296 + hash: "6bfcd36f945af8cc7b2aa2cca1cde750" } Mouse { type: 5 button: 0 buttons: 1 - x: 198; y: 222 + x: 150; y: 442 modifiers: 0 sendToViewport: true } @@ -5044,19 +3500,19 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 198; y: 224 + x: 150; y: 446 modifiers: 0 sendToViewport: true } Frame { - msec: 16672 - hash: "c30bea2a73a8b5af4565ef3996f29416" + msec: 9312 + hash: "8e821eb27a5fd0933805d3e88d1f5f1e" } Mouse { type: 5 button: 0 buttons: 1 - x: 198; y: 228 + x: 152; y: 451 modifiers: 0 sendToViewport: true } @@ -5064,127 +3520,135 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 198; y: 230 + x: 152; y: 457 modifiers: 0 sendToViewport: true } Frame { - msec: 16688 - hash: "9612c176ec3ecf76a367728f451522a4" + msec: 9328 + hash: "84191607b7ba11b1204bba0ab5b4f98c" } Mouse { type: 5 button: 0 buttons: 1 - x: 198; y: 233 + x: 152; y: 467 modifiers: 0 sendToViewport: true } Frame { - msec: 16704 - hash: "24f6feeeb1ff82c8d4262f74e4656602" + msec: 9344 + hash: "e154e8cdbc4f9a1d4cbe926306bf76c1" } Mouse { type: 5 button: 0 buttons: 1 - x: 198; y: 238 + x: 152; y: 474 modifiers: 0 sendToViewport: true } Frame { - msec: 16720 - hash: "5823b56f1e362fdfc216a82e2dcdec61" + msec: 9360 + hash: "2510607dadaf22d60838934cd460bde4" } Mouse { type: 5 button: 0 buttons: 1 - x: 198; y: 241 + x: 152; y: 492 modifiers: 0 sendToViewport: true } Frame { - msec: 16736 - hash: "4ee243b91e847dabaceb21b5540c2a6d" + msec: 9376 + hash: "38087462c92bae32df01a27520183c5f" } Mouse { type: 5 button: 0 buttons: 1 - x: 198; y: 245 + x: 154; y: 499 modifiers: 0 sendToViewport: true } Frame { - msec: 16752 - hash: "87f1dc2238577fc5be6b1bd941226f3e" + msec: 9392 + hash: "0e5231ff13dd8b3205acb2c451fcf208" } Mouse { type: 5 button: 0 buttons: 1 - x: 198; y: 251 + x: 154; y: 515 modifiers: 0 sendToViewport: true } Frame { - msec: 16768 - hash: "480c6fcf1b3862a41a7225c35d8080c3" + msec: 9408 + hash: "12dfb280b1cb828b75d04f62b5261f78" } Mouse { type: 5 button: 0 buttons: 1 - x: 198; y: 256 + x: 157; y: 545 modifiers: 0 sendToViewport: true } Frame { - msec: 16784 - hash: "0ac819bd8e6ce19553bd954e466e7ac0" + msec: 9424 + hash: "fc89205b7a0bae9c2726b775aabf7a6a" + } + Frame { + msec: 9440 + hash: "40807414ec0f879ae666f27360d2b91d" } Mouse { type: 5 button: 0 buttons: 1 - x: 199; y: 258 + x: 159; y: 567 modifiers: 0 sendToViewport: true } - Frame { - msec: 16800 - hash: "0636dd7c4eb0b56697fb59fb46f47f9c" - } Mouse { type: 5 button: 0 buttons: 1 - x: 201; y: 267 + x: 160; y: 581 modifiers: 0 sendToViewport: true } Frame { - msec: 16816 - hash: "62f76f46857106010c2e862ed19baeea" + msec: 9456 + hash: "01c759fad050fa6cecefdf7e2d528bd3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 594 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 276 + x: 162; y: 608 modifiers: 0 sendToViewport: true } Frame { - msec: 16832 - hash: "26b9c6379590bbda24d129bd4f19f7d3" + msec: 9472 + hash: "81887d4c0718d74f51d03c9efcd7d265" } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 279 + x: 162; y: 620 modifiers: 0 sendToViewport: true } @@ -5192,1011 +3656,1159 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 203; y: 280 + x: 162; y: 639 modifiers: 0 sendToViewport: true } Frame { - msec: 16848 - hash: "21baf0596553627c8e683a31c2e6d04f" + msec: 9488 + hash: "d0e6f2146daffb910be0be23a2b77a5c" } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 281 + x: 160; y: 682 modifiers: 0 sendToViewport: true } + Frame { + msec: 9504 + hash: "ffcf5113009c86c8b2df2e9276f2e8c0" + } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 282 + x: 157; y: 704 modifiers: 0 sendToViewport: true } - Frame { - msec: 16864 - hash: "036679da5def5e696361f2373172a3f4" - } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 283 + x: 155; y: 729 modifiers: 0 sendToViewport: true } Frame { - msec: 16880 - hash: "e3fc6101bc6cccf309b3df6b194820ea" + msec: 9520 + hash: "45d262f0b3bec61a2a235ab613db664c" } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 285 + x: 150; y: 775 modifiers: 0 sendToViewport: true } Frame { - msec: 16896 - hash: "d9ee6d0a7455cfd724c1856549100756" + msec: 9536 + hash: "1bb9a85fc290e30b841648bd9573ac84" } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 286 + x: 146; y: 823 modifiers: 0 sendToViewport: true } Frame { - msec: 16912 - hash: "caa70db5f31eb607c2de39734a42796c" + msec: 9552 + hash: "46ff9bb9662543c711fcd84f44fc6af6" } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 287 + x: 141; y: 869 modifiers: 0 sendToViewport: true } Frame { - msec: 16928 - hash: "e2dc88b454e69cf92d6887a2f0629a94" + msec: 9568 + hash: "84fe171380d203a80fedaf4b10412e1a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 139; y: 907 + modifiers: 0 + sendToViewport: true } Frame { - msec: 16944 - hash: "e2dc88b454e69cf92d6887a2f0629a94" + msec: 9584 + hash: "496f7ba4a3d45861d93e2cb95e3d5dea" } Mouse { type: 5 button: 0 buttons: 1 - x: 203; y: 288 + x: 135; y: 947 modifiers: 0 sendToViewport: true } Frame { - msec: 16960 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9600 + image: "flickable-vertical.9.png" } - Frame { - msec: 16976 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 133; y: 962 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 16992 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 133; y: 977 + modifiers: 0 + sendToViewport: true } Frame { - msec: 17008 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9616 + hash: "e3c4f8d056d2c3b5aef3184fda19a92d" } - Frame { - msec: 17024 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 131; y: 993 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 17040 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 129; y: 1006 + modifiers: 0 + sendToViewport: true } Frame { - msec: 17056 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9632 + hash: "90be1cd9716907fc46309f9f043a6f84" } - Frame { - msec: 17072 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 122; y: 1029 + modifiers: 0 + sendToViewport: true } Frame { - msec: 17088 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9648 + hash: "b6e868b2d23004f75d0bdb1519e8487d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 118; y: 1043 + modifiers: 0 + sendToViewport: true } Mouse { type: 3 button: 1 buttons: 0 - x: 203; y: 288 + x: 118; y: 1043 modifiers: 0 sendToViewport: true } Frame { - msec: 17104 - hash: "fac8455a2707b04aabff25723375a78b" - } - Frame { - msec: 17120 - hash: "fac8455a2707b04aabff25723375a78b" - } - Frame { - msec: 17136 - hash: "fac8455a2707b04aabff25723375a78b" - } - Frame { - msec: 17152 - hash: "fac8455a2707b04aabff25723375a78b" - } - Frame { - msec: 17168 - hash: "fac8455a2707b04aabff25723375a78b" - } - Frame { - msec: 17184 - hash: "fac8455a2707b04aabff25723375a78b" - } - Frame { - msec: 17200 - hash: "fac8455a2707b04aabff25723375a78b" - } - Frame { - msec: 17216 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9664 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17232 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9680 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17248 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9696 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17264 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9712 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17280 - image: "flickable-vertical.17.png" + msec: 9728 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17296 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9744 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17312 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9760 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17328 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9776 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17344 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9792 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17360 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9808 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17376 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9824 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17392 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9840 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17408 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9856 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17424 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9872 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17440 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9888 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17456 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9904 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17472 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9920 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17488 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9936 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17504 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9952 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17520 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9968 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17536 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 9984 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17552 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10000 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17568 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10016 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17584 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10032 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17600 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10048 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17616 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10064 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17632 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10080 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17648 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10096 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17664 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10112 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17680 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10128 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17696 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10144 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17712 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10160 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17728 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10176 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17744 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10192 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17760 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10208 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17776 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10224 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17792 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10240 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17808 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10256 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17824 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10272 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17840 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10288 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17856 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10304 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17872 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10320 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 17888 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10336 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 17904 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 158; y: 415 + modifiers: 0 + sendToViewport: true } Frame { - msec: 17920 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10352 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Frame { - msec: 17936 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10368 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 17952 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 159; y: 416 + modifiers: 0 + sendToViewport: true } Frame { - msec: 17968 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10384 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 17984 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 160; y: 417 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18000 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 161; y: 422 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18016 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10400 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 18032 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 162; y: 429 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18048 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 444 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18064 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10416 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18080 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 459 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18096 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 173; y: 473 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18112 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10432 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18128 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 175; y: 486 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18144 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 178; y: 499 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18160 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10448 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18176 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 180; y: 512 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18192 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 183; y: 524 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18208 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10464 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18224 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 185; y: 535 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18240 - image: "flickable-vertical.18.png" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 187; y: 548 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18256 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10480 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18272 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 189; y: 562 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18288 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 189; y: 577 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18304 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10496 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18320 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 593 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18336 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 193; y: 609 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18352 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10512 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18368 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 195; y: 626 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18384 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 641 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18400 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10528 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18416 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 655 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18432 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 199; y: 670 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18448 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10544 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { - type: 2 - button: 1 + type: 5 + button: 0 buttons: 1 - x: 102; y: 575 + x: 201; y: 681 modifiers: 0 sendToViewport: true } - Frame { - msec: 18464 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 201; y: 690 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18480 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10560 + image: "flickable-vertical.10.png" } - Frame { - msec: 18496 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 201; y: 698 + modifiers: 0 + sendToViewport: true } Mouse { - type: 3 - button: 1 - buttons: 0 - x: 102; y: 575 + type: 5 + button: 0 + buttons: 1 + x: 203; y: 706 modifiers: 0 sendToViewport: true } Frame { - msec: 18512 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10576 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18528 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 712 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18544 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 718 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18560 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10592 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18576 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 722 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18592 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 725 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18608 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10608 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18624 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 727 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18640 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 731 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18656 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10624 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18672 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 735 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18688 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 737 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18704 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10640 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18720 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 739 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 18736 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 740 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18752 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10656 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18768 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 741 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18784 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10672 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18800 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10688 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18816 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10704 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 18832 - hash: "fac8455a2707b04aabff25723375a78b" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 205; y: 741 + modifiers: 0 + sendToViewport: true } Frame { - msec: 18848 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10720 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18864 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10736 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18880 - hash: "fac8455a2707b04aabff25723375a78b" + msec: 10752 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18896 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10768 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18912 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10784 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18928 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10800 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18944 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10816 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18960 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10832 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18976 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10848 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 18992 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10864 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19008 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10880 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19024 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10896 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19040 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10912 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19056 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10928 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19072 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10944 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19088 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10960 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19104 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10976 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19120 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 10992 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19136 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11008 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19152 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11024 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19168 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11040 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19184 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11056 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19200 - image: "flickable-vertical.19.png" + msec: 11072 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19216 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11088 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19232 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11104 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19248 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11120 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19264 - hash: "cce4177eb20b7aa43a7383a16c43f473" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 164; y: 571 - modifiers: 0 - sendToViewport: true + msec: 11136 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19280 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11152 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19296 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11168 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19312 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11184 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19328 - hash: "cce4177eb20b7aa43a7383a16c43f473" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 164; y: 571 - modifiers: 0 - sendToViewport: true + msec: 11200 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19344 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11216 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19360 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11232 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19376 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11248 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19392 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11264 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19408 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11280 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19424 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11296 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19440 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11312 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19456 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11328 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19472 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11344 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19488 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11360 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19504 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11376 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19520 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11392 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19536 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11408 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19552 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11424 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19568 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11440 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19584 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11456 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19600 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11472 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19616 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11488 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19632 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11504 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 19648 - hash: "cce4177eb20b7aa43a7383a16c43f473" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 115; y: 578 + modifiers: 0 + sendToViewport: true } Frame { - msec: 19664 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11520 + image: "flickable-vertical.11.png" } Frame { - msec: 19680 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11536 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19696 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11552 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19712 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11568 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19728 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11584 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 19744 - hash: "cce4177eb20b7aa43a7383a16c43f473" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 115; y: 578 + modifiers: 0 + sendToViewport: true } Frame { - msec: 19760 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11600 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19776 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11616 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19792 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11632 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19808 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11648 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19824 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11664 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19840 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11680 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19856 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11696 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19872 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11712 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19888 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11728 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19904 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11744 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19920 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11760 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19936 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11776 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19952 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11792 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19968 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11808 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 19984 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11824 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20000 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11840 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20016 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11856 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20032 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11872 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 20048 - hash: "cce4177eb20b7aa43a7383a16c43f473" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 130; y: 410 + modifiers: 0 + sendToViewport: true } Frame { - msec: 20064 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11888 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20080 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11904 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20096 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11920 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20112 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11936 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20128 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11952 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20144 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11968 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 20160 - image: "flickable-vertical.20.png" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 130; y: 410 + modifiers: 0 + sendToViewport: true } Frame { - msec: 20176 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 11984 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20192 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 12000 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20208 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 12016 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 20224 - hash: "cce4177eb20b7aa43a7383a16c43f473" + msec: 12032 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { - type: 2 + type: 4 button: 1 buttons: 1 - x: 170; y: 450 + x: 130; y: 410 modifiers: 0 sendToViewport: true } Frame { - msec: 20240 - hash: "b8e7a053fc023be42ab5136f6e7305fd" + msec: 12048 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Frame { - msec: 20256 - hash: "b8e7a053fc023be42ab5136f6e7305fd" + msec: 12064 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Mouse { type: 5 button: 0 buttons: 1 - x: 170; y: 448 + x: 131; y: 410 modifiers: 0 sendToViewport: true } Frame { - msec: 20272 - hash: "b8e7a053fc023be42ab5136f6e7305fd" + msec: 12080 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Mouse { type: 5 button: 0 buttons: 1 - x: 172; y: 438 + x: 133; y: 408 modifiers: 0 sendToViewport: true } - Frame { - msec: 20288 - hash: "40cf6e4567c796d6ad83778fb1959d8a" - } Mouse { type: 5 button: 0 buttons: 1 - x: 176; y: 410 + x: 134; y: 405 modifiers: 0 sendToViewport: true } Frame { - msec: 20304 - hash: "9914584daf02407c1edc3b6a38b8302d" + msec: 12096 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Mouse { type: 5 button: 0 buttons: 1 - x: 176; y: 388 + x: 136; y: 403 modifiers: 0 sendToViewport: true } @@ -6204,351 +4816,219 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 176; y: 366 + x: 140; y: 396 modifiers: 0 sendToViewport: true } Frame { - msec: 20320 - hash: "5aff2316a5e34f5e15b7cb36257a3d72" + msec: 12112 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } Mouse { type: 5 button: 0 buttons: 1 - x: 176; y: 342 + x: 150; y: 380 modifiers: 0 sendToViewport: true } + Frame { + msec: 12128 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" + } Mouse { - type: 3 - button: 1 - buttons: 0 - x: 176; y: 342 + type: 5 + button: 0 + buttons: 1 + x: 154; y: 370 modifiers: 0 sendToViewport: true } - Frame { - msec: 20336 - hash: "de1f9ff1abfa8cdc760bc84129fab40d" - } - Frame { - msec: 20352 - hash: "032c4fd62a0a611207262d317d4ea103" - } - Frame { - msec: 20368 - hash: "1db8a7b3899f5efea25ccf93285ee6bd" - } - Frame { - msec: 20384 - hash: "3c106f68b755862346cddd21d75c0caf" - } - Frame { - msec: 20400 - hash: "41d025dfe037b9cebe84e4c7200e9d15" - } - Frame { - msec: 20416 - hash: "f347687313c88150a6f977ae8b1620fc" - } - Frame { - msec: 20432 - hash: "4bb30faaec54e2a47dfd2b2988a6c231" - } - Frame { - msec: 20448 - hash: "fede02600e790d4b6eb1f85563b37cbc" - } - Frame { - msec: 20464 - hash: "0a949f7150b3709b9eda62c98f98fc62" - } - Frame { - msec: 20480 - hash: "214e571c2346b0d6b5d1220e856a8e67" - } - Frame { - msec: 20496 - hash: "f84207d20cfff984d1c79654a1074d02" - } - Frame { - msec: 20512 - hash: "7dc3592294dcd88fbfff2f984fd2d4c3" - } - Frame { - msec: 20528 - hash: "42829e78f62e692a093df267d2b673e2" - } - Frame { - msec: 20544 - hash: "d264570c78e7d1ea283c72191953a2ce" - } - Frame { - msec: 20560 - hash: "b69b045557a8eada80a24eb4caa7ea4e" - } - Frame { - msec: 20576 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20592 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20608 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20624 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20640 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20656 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20672 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20688 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20704 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20720 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20736 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20752 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20768 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20784 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20800 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20816 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20832 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20848 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20864 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20880 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20896 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20912 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20928 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20944 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20960 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20976 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 20992 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 21008 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 21024 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 21040 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 21056 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 21072 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 21088 - hash: "a76f069dfcb1af0794999c34507e190e" - } - Frame { - msec: 21104 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 158; y: 361 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21120 - image: "flickable-vertical.21.png" + msec: 12144 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 21136 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 161; y: 353 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 21152 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 163; y: 343 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21168 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12160 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 21184 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 332 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 21200 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 166; y: 324 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21216 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12176 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 21232 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 315 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 21248 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 309 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21264 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12192 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 21280 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 303 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 21296 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 297 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21312 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12208 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 21328 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 293 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 21344 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 291 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21360 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12224 + hash: "c246bde0eb2b3e1797dfb770a9db78bb" } - Frame { - msec: 21376 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 168; y: 290 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 21392 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 168; y: 290 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21408 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12240 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21424 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12256 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21440 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12272 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21456 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12288 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21472 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12304 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21488 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12320 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21504 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12336 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21520 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12352 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21536 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12368 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21552 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12384 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 21568 - hash: "a76f069dfcb1af0794999c34507e190e" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 167; y: 295 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21584 - hash: "a76f069dfcb1af0794999c34507e190e" + msec: 12400 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { - type: 2 - button: 1 + type: 5 + button: 0 buttons: 1 - x: 197; y: 124 + x: 167; y: 300 modifiers: 0 sendToViewport: true } @@ -6556,19 +5036,19 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 197; y: 132 + x: 165; y: 308 modifiers: 0 sendToViewport: true } Frame { - msec: 21600 - hash: "06472b42bc00fcaf7f84cd4ac613bbd2" + msec: 12416 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 5 button: 0 buttons: 1 - x: 197; y: 146 + x: 165; y: 316 modifiers: 0 sendToViewport: true } @@ -6576,19 +5056,19 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 197; y: 164 + x: 165; y: 326 modifiers: 0 sendToViewport: true } Frame { - msec: 21616 - hash: "463fce69afc3dec181425c9adaa3e77c" + msec: 12432 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 5 button: 0 buttons: 1 - x: 197; y: 190 + x: 163; y: 336 modifiers: 0 sendToViewport: true } @@ -6596,442 +5076,512 @@ VisualTest { type: 5 button: 0 buttons: 1 - x: 195; y: 218 + x: 163; y: 346 modifiers: 0 sendToViewport: true } Frame { - msec: 21632 - hash: "9af34ff618e277eafad32e0377ecc94b" + msec: 12448 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 165; y: 356 + modifiers: 0 + sendToViewport: true } Mouse { type: 5 button: 0 buttons: 1 - x: 187; y: 250 + x: 165; y: 369 modifiers: 0 sendToViewport: true } Frame { - msec: 21648 - hash: "db4b2333630ccc4a7982361609a12837" + msec: 12464 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Mouse { type: 5 button: 0 buttons: 1 - x: 183; y: 284 + x: 165; y: 382 modifiers: 0 sendToViewport: true } Mouse { - type: 3 - button: 1 - buttons: 0 - x: 183; y: 284 + type: 5 + button: 0 + buttons: 1 + x: 167; y: 393 modifiers: 0 sendToViewport: true } Frame { - msec: 21664 - hash: "50335b19a1e210f87924d01bb343a0e0" - } - Frame { - msec: 21680 - hash: "59b4f80a7cd6b732eb26f3b4147efe7e" + msec: 12480 + image: "flickable-vertical.12.png" } - Frame { - msec: 21696 - hash: "b99cc1f07bcb0480801d4d5403372525" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 405 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 21712 - hash: "871040b0f921646609b79828bab38949" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 415 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21728 - hash: "2acb3d19eed000313872d5cd66765b53" + msec: 12496 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 21744 - hash: "b5431a2d2e856a726ceac2066b128f8f" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 420 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 21760 - hash: "04047c917a95a2a3df30c14bb20601dd" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 429 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21776 - hash: "fea7ac3d26975f438129e394c667e628" + msec: 12512 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 21792 - hash: "4db41ff05865cabc4ef288478254e633" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 167; y: 433 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21808 - hash: "e0d3737effd817a8f603eb393677b8b6" + msec: 12528 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 21824 - hash: "d4f06941d213544ddcae714ddc0b47e9" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 167; y: 433 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21840 - hash: "dbb21caf4a4c9b88563f1d0aad35f3d3" + msec: 12544 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21856 - hash: "eb9a052219c3f955f2c036834990089b" + msec: 12560 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21872 - hash: "40090a35caf674ed9c4bf1d10f9209ea" + msec: 12576 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21888 - hash: "064de0abec66d1ddcf0f6073ce7d91ef" + msec: 12592 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21904 - hash: "f407334d0b63a34657dc1306fd67aeb7" + msec: 12608 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21920 - hash: "1c0744be97c65c68ca92bd86d42c7b0e" + msec: 12624 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } Frame { - msec: 21936 - hash: "7469d4a06c5df073e22db3c905baefc1" + msec: 12640 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 21952 - hash: "35912a7e2ecc0c387fc9fb9da7201bfd" + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 145; y: 357 + modifiers: 0 + sendToViewport: true } Frame { - msec: 21968 - hash: "9f835091374f0d0d9a6996e6dad10e19" + msec: 12656 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 21984 - hash: "afade1ecbaf5f920880eaff3b3de606e" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 145; y: 350 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 22000 - hash: "9c70e8a020c8c1101b9884529cb4527f" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 145; y: 342 + modifiers: 0 + sendToViewport: true } Frame { - msec: 22016 - hash: "3e7d4dc75f85dfeb065da18ef1c102c1" + msec: 12672 + hash: "b0e76c5cfeb797888e8c032b3f2781bd" } - Frame { - msec: 22032 - hash: "16852d62a77eefccea9497ae1b09842d" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 145; y: 333 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 22048 - hash: "ea8afda6d837a98f408a7aa133494575" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 145; y: 323 + modifiers: 0 + sendToViewport: true } Frame { - msec: 22064 - hash: "666435dccf30c53eb09ea7ad8b5264a1" + msec: 12688 + hash: "7eda3c99a4c066ed00c717e33a66682c" } - Frame { - msec: 22080 - image: "flickable-vertical.22.png" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 147; y: 305 + modifiers: 0 + sendToViewport: true } Frame { - msec: 22096 - hash: "2e959bf0470bac84e2220d9e8a8bbb97" + msec: 12704 + hash: "85402c05dd1bd85316422aec2b774e4f" } - Frame { - msec: 22112 - hash: "595b6cfd559f8362b010616de4947ec6" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 147; y: 285 + modifiers: 0 + sendToViewport: true } Frame { - msec: 22128 - hash: "976dd345cc7cb4e3c09a288530d3c8af" + msec: 12720 + hash: "f8ebaae72eb98b880aaf5bb8cf517840" } - Frame { - msec: 22144 - hash: "9493e425d5cd3f9eef904a1be63f45f1" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 147; y: 275 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 22160 - hash: "0a2013afebb5e09d82633c8d8a393f01" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 147; y: 264 + modifiers: 0 + sendToViewport: true } Frame { - msec: 22176 - hash: "d8377c464bc59d95e0670d697888d804" + msec: 12736 + hash: "83ebbcd20af8178175ea72698b9bfd08" } - Frame { - msec: 22192 - hash: "52f9416973da953bd6fe55b2fe22786a" + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 145; y: 253 + modifiers: 0 + sendToViewport: true } - Frame { - msec: 22208 - hash: "23b9af0f371b7817e9ceaa1a83995d35" + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 145; y: 253 + modifiers: 0 + sendToViewport: true } Frame { - msec: 22224 - hash: "34b0e0333c91bc4533e0c01eaeb3d3f9" + msec: 12752 + hash: "a154f7125f88c25484aea9f268a10e22" } Frame { - msec: 22240 - hash: "1597b86afe2841c3bb77bb5dd6aa6803" + msec: 12768 + hash: "4a1fdbc170f98e3c438cf47526fd16a1" } Frame { - msec: 22256 - hash: "d74111814ff259fea47e1eb3b36e174b" + msec: 12784 + hash: "99228a13ebf2516199d339cc73e1358f" } Frame { - msec: 22272 - hash: "c64c46fe9cd75afbf2385241ea8e55d4" + msec: 12800 + hash: "724687b54e474e4dc53b105ed9ca2def" } Frame { - msec: 22288 - hash: "1e8740a104643fe30b0e874bbbed44ab" + msec: 12816 + hash: "4db074b34af9472a5d853928953901dc" } Frame { - msec: 22304 - hash: "ef669a8d142947463084383a6c7c7f85" + msec: 12832 + hash: "ab1acd2ba148a7830f75cbf2e09e426c" } Frame { - msec: 22320 - hash: "2314c42b5994bdbfd73eb2c3ea54626b" + msec: 12848 + hash: "04a22e2278823d9e49e524ef2d8d45c5" } Frame { - msec: 22336 - hash: "53a0694d8eee91b968bd43efe43f2c9e" + msec: 12864 + hash: "f5a658c7c2b185e250dc1b245457094b" } Frame { - msec: 22352 - hash: "be4772528f30c18193e49ae04a290af8" + msec: 12880 + hash: "bb611d6a086b0eedb37111d7575847df" } Frame { - msec: 22368 - hash: "a0b0877ab92a0323e35fdb7beb602dee" + msec: 12896 + hash: "04e9e40c43a51b704378871710ad9f8b" } Frame { - msec: 22384 - hash: "a0e299fb4ba811a0b22fb62c222cb86c" + msec: 12912 + hash: "7ff5ba1e30f93de2dd3cad953d3d60fb" } Frame { - msec: 22400 - hash: "2562bc9c9aa60a48b6ca00333f60d163" + msec: 12928 + hash: "f85e46ed733dbbec83509d6a3b4c72a0" } Frame { - msec: 22416 - hash: "486b45c385d88d6f054fa6308b55f2ac" + msec: 12944 + hash: "2f08cc1d92102138d6a4945116727be5" } Frame { - msec: 22432 - hash: "86502af668ed6336dce8fe329e3408a6" + msec: 12960 + hash: "864a68a8519e58081205d74b4184498b" } Frame { - msec: 22448 - hash: "2a79a6530a07f00810310117d00d28ed" + msec: 12976 + hash: "1fb6a1ecbde71566486a1310a5ab9c17" } Frame { - msec: 22464 - hash: "94a5fce3e0c3b219e0d807bfcade11e8" + msec: 12992 + hash: "5ab977d88d850d94340bfc0c15137486" } Frame { - msec: 22480 - hash: "94a5fce3e0c3b219e0d807bfcade11e8" + msec: 13008 + hash: "79bafb9b957d88f938c977b37e1d8b9c" } Frame { - msec: 22496 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13024 + hash: "fa5b1cf343b45407f6cee7ce38ca9eb0" } Frame { - msec: 22512 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13040 + hash: "1147ff69795a65878ffea7bed4b9a93f" } Frame { - msec: 22528 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13056 + hash: "08ad4cd6fbdba8c98dfbc096ab91ebd2" } Frame { - msec: 22544 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13072 + hash: "3ee0c33a1a80b8cad7ec525b8b16cb70" } Frame { - msec: 22560 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13088 + hash: "cabd708943ce14892bb69aa22dc4a2b5" } Frame { - msec: 22576 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13104 + hash: "86a7afcbbd67b50b7bf3ef85f1843e3d" } Frame { - msec: 22592 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13120 + hash: "111f0161479cf82c08dd918b6ece8e45" } Frame { - msec: 22608 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13136 + hash: "33da9e73f1521297c3d250f00cda20cd" } Frame { - msec: 22624 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13152 + hash: "72f166ddddac3962b39cf4283b4554f3" } Frame { - msec: 22640 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13168 + hash: "1ee57340798998f95114d929d2702ce6" } Frame { - msec: 22656 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13184 + hash: "eb036d3246a2361aa1b11c8408f9eb1a" } Frame { - msec: 22672 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13200 + hash: "af73e799d7cb536d0ba6db985396c597" } Frame { - msec: 22688 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13216 + hash: "5d84accad1fa5d421bc3effb148d81a6" } Frame { - msec: 22704 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13232 + hash: "d752289e96eb2398096297234b6b88f6" } Frame { - msec: 22720 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13248 + hash: "53970a50451c182f672d0ddcd572279d" } Frame { - msec: 22736 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13264 + hash: "6323f61cc6966e75be10a49aeaab9a3e" } Frame { - msec: 22752 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13280 + hash: "fb679e5ad89681f482d94b4dab80e3bb" } Frame { - msec: 22768 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13296 + hash: "1788a7f680bbcbcedb2583cead6ced57" } Frame { - msec: 22784 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13312 + hash: "b325580b9f88dd5490d914f580b9d341" } Frame { - msec: 22800 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13328 + hash: "8fa25fff546b060a92b60e6fbb3b2fa8" } Frame { - msec: 22816 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13344 + hash: "2fb5ee5e86745910b46d98943af4c9d5" } Frame { - msec: 22832 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13360 + hash: "7fcdce21e2e1b14501e79d9c716b0011" } Frame { - msec: 22848 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13376 + hash: "bf79452e478bfe3374d4c275fc3b42fb" } Frame { - msec: 22864 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13392 + hash: "1069c4aff64ab8193798965af7a6988e" } Frame { - msec: 22880 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13408 + hash: "3031ea711d0880a2fafd557f23c38cc0" } Frame { - msec: 22896 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13424 + hash: "5955c49ae05578f6a9b023a1f6c8301b" } Frame { - msec: 22912 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13440 + image: "flickable-vertical.13.png" } Frame { - msec: 22928 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13456 + hash: "af2fc9780356c01d44e7e918643e334b" } Frame { - msec: 22944 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13472 + hash: "b28600a5433e08299bf5ab3c789a4d5a" } Frame { - msec: 22960 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13488 + hash: "159dab2806a6fbac4f090c4ca029433e" } Frame { - msec: 22976 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13504 + hash: "b1937894776d083eb38f105901344d55" } Frame { - msec: 22992 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13520 + hash: "2420c1280e6520e35f30879fe139ed77" } Frame { - msec: 23008 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13536 + hash: "ba0018197140b398caa05eada958e2ce" } Frame { - msec: 23024 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13552 + hash: "b04094c2734f71e17a2d0091b3c85565" } Frame { - msec: 23040 - image: "flickable-vertical.23.png" + msec: 13568 + hash: "2ff995d15a49fcbd0adfcb970135ebae" } Frame { - msec: 23056 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13584 + hash: "9b10dc438e944a8711aef1f45c912538" } Frame { - msec: 23072 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13600 + hash: "c397307c99d125789e03b0239c6d7130" } Frame { - msec: 23088 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13616 + hash: "aa6fe1c4d968bbf381f38c09e9c26eea" } Frame { - msec: 23104 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13632 + hash: "8d586f001d41ccde450a4ce88a8ef89a" } Frame { - msec: 23120 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13648 + hash: "80f98a4935097ec76bd863ffe4e3a441" } Frame { - msec: 23136 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13664 + hash: "620b4eddf956d85701387a114ec228fc" } Frame { - msec: 23152 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13680 + hash: "dc56a6cafe22e56d6d5efee62c324784" } Frame { - msec: 23168 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13696 + hash: "8fcf5f5b350ffc80cde03b044dc81e57" } Frame { - msec: 23184 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13712 + hash: "5bc02d5bfcc6f4a9349623139663e664" } Frame { - msec: 23200 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13728 + hash: "6a71734b1a38cdbacf8447a41481d67c" } Frame { - msec: 23216 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13744 + hash: "34b069ef8080e15db86f66983f18c58d" } Frame { - msec: 23232 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13760 + hash: "0131b30e21796e0ea9ad1484ac7ac6e4" } Frame { - msec: 23248 - hash: "8443c45791c906a9fe23831844f48a1c" + msec: 13776 + hash: "0131b30e21796e0ea9ad1484ac7ac6e4" } - Frame { - msec: 23264 - hash: "8443c45791c906a9fe23831844f48a1c +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml index 5f43f95..5c8ff52 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflickable/flickable-vertical.qml @@ -85,6 +85,6 @@ Rectangle { height: 50 x: 200 y: parent.height - 50 - color: blue + color: "blue" } } -- cgit v0.12 From b6ee57e14e145d9caa3f572d55447ec92f78cea4 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 11:39:07 +1000 Subject: Mark qdeclarativegridview autotests as expect-fail Includes the task numbers of the bugs, for later processing. Task-number: QTBUG-14792 --- .../qdeclarativegridview/data/gridview.0.png | Bin 1303 -> 0 bytes .../qdeclarativegridview/data/gridview.1.png | Bin 1317 -> 0 bytes .../qdeclarativegridview/data/gridview.2.png | Bin 1318 -> 0 bytes .../qdeclarativegridview/data/gridview.3.png | Bin 1306 -> 0 bytes .../qdeclarativegridview/data/gridview.4.png | Bin 1308 -> 0 bytes .../qdeclarativegridview/data/gridview.5.png | Bin 1303 -> 0 bytes .../qdeclarativegridview/data/gridview.6.png | Bin 1323 -> 0 bytes .../qdeclarativegridview/data/gridview.7.png | Bin 1325 -> 0 bytes .../qdeclarativegridview/data/gridview.8.png | Bin 1346 -> 0 bytes .../qdeclarativegridview/data/gridview.9.png | Bin 1303 -> 0 bytes .../qdeclarativegridview/data/gridview.qml | 2859 -------------------- .../qdeclarativegridview/data/gridview2.0.png | Bin 1310 -> 0 bytes .../qdeclarativegridview/data/gridview2.1.png | Bin 1322 -> 0 bytes .../qdeclarativegridview/data/gridview2.10.png | Bin 1313 -> 0 bytes .../qdeclarativegridview/data/gridview2.2.png | Bin 1341 -> 0 bytes .../qdeclarativegridview/data/gridview2.3.png | Bin 1368 -> 0 bytes .../qdeclarativegridview/data/gridview2.4.png | Bin 1319 -> 0 bytes .../qdeclarativegridview/data/gridview2.5.png | Bin 1352 -> 0 bytes .../qdeclarativegridview/data/gridview2.6.png | Bin 1309 -> 0 bytes .../qdeclarativegridview/data/gridview2.7.png | Bin 1347 -> 0 bytes .../qdeclarativegridview/data/gridview2.8.png | Bin 1310 -> 0 bytes .../qdeclarativegridview/data/gridview2.9.png | Bin 1354 -> 0 bytes .../qdeclarativegridview/data/gridview2.qml | 2479 ----------------- .../qmlvisual/qdeclarativegridview/gridview.qml | 2 + .../qmlvisual/qdeclarativegridview/gridview2.qml | 2 + 25 files changed, 4 insertions(+), 5338 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png deleted file mode 100644 index 6c82777..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png deleted file mode 100644 index 07b1f7c..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png deleted file mode 100644 index f2f08c0..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png deleted file mode 100644 index 08649f9..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png deleted file mode 100644 index f9c2f17..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png deleted file mode 100644 index 52ec0bd..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png deleted file mode 100644 index 3fe25be..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png deleted file mode 100644 index 4cc12a6..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png deleted file mode 100644 index 2267f23..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png deleted file mode 100644 index 6c82777..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml deleted file mode 100644 index 67aa10a..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml +++ /dev/null @@ -1,2859 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 32 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 48 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 64 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 80 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 96 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 112 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 128 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 144 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 160 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 176 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 192 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 208 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 224 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 240 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 256 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 272 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 288 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 304 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 320 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 336 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 352 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 368 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 384 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 400 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 416 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Frame { - msec: 432 - hash: "c33447c78ea64452ec3cd1696fb502eb" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 448 - hash: "96ad89eafa7f99269518a192573af91b" - } - Frame { - msec: 464 - hash: "735b00b968d0e2ea1f34cc0bdc028a8e" - } - Frame { - msec: 480 - hash: "ce37c8e15fbb1aea72aff9629683fa96" - } - Frame { - msec: 496 - hash: "a3f2471ef4ceac77a1c20ac327550d8d" - } - Frame { - msec: 512 - hash: "28f120bd3bda9552dbc8cc908409c67d" - } - Frame { - msec: 528 - hash: "f21cf0ed746fa48e67dc90c70c5bbae8" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 544 - hash: "485d55730366b68e01582879f6970fa1" - } - Frame { - msec: 560 - hash: "700e53c78b28993dce5dafb4035f4760" - } - Frame { - msec: 576 - hash: "1e538e175a5e402e2334cf354392e8a7" - } - Frame { - msec: 592 - hash: "0fbfba93eebaf05ae60067b365b6b4bc" - } - Frame { - msec: 608 - hash: "7b1893397b76b0c95094eeca1dd21446" - } - Frame { - msec: 624 - hash: "7b1893397b76b0c95094eeca1dd21446" - } - Frame { - msec: 640 - hash: "7b1893397b76b0c95094eeca1dd21446" - } - Frame { - msec: 656 - hash: "7b1893397b76b0c95094eeca1dd21446" - } - Frame { - msec: 672 - hash: "7b1893397b76b0c95094eeca1dd21446" - } - Frame { - msec: 688 - hash: "7b1893397b76b0c95094eeca1dd21446" - } - Frame { - msec: 704 - hash: "7b1893397b76b0c95094eeca1dd21446" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 720 - hash: "25e48099a8194ed2674651818d854c61" - } - Frame { - msec: 736 - hash: "b75d02dfc238ba2292306ca1421279c3" - } - Frame { - msec: 752 - hash: "7e48b7d9c1291b4e438c81f44228d8ad" - } - Frame { - msec: 768 - hash: "fe4b009abe081a6eaeab6ef9e996f3fd" - } - Frame { - msec: 784 - hash: "edea8c305fe88708dbafc03e427caa09" - } - Frame { - msec: 800 - hash: "7b58803f12d0ab893acf539799d79e31" - } - Frame { - msec: 816 - hash: "9b56c3d1d140114dcc57d0a8568e9b95" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 832 - hash: "35e38e273dbc8e565917b21d00fc1530" - } - Frame { - msec: 848 - hash: "116e294391333e8780daeca54c3d51ea" - } - Frame { - msec: 864 - hash: "6219676215f82540d7a53b2a8aa60279" - } - Frame { - msec: 880 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 896 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 912 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 928 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 944 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 960 - image: "gridview.0.png" - } - Frame { - msec: 976 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 992 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1008 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1024 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1040 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1056 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1072 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1088 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1104 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1120 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1136 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 1152 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1168 - hash: "2667c2596de97dc15353158eba03495f" - } - Frame { - msec: 1184 - hash: "6a7b64e1427dcb7e438aa09a739cbc7b" - } - Frame { - msec: 1200 - hash: "5bad6dc745958f5827403ea593c78752" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1216 - hash: "b393401219ada7d094a451dba8af3f1a" - } - Frame { - msec: 1232 - hash: "ba656452f8adf3d1ca7db9286274c37f" - } - Frame { - msec: 1248 - hash: "1e9725c8c364a491f34035fad1f77c63" - } - Frame { - msec: 1264 - hash: "a0aef0b65446dec0673b5cec3a260390" - } - Frame { - msec: 1280 - hash: "d60c11a5d376af0831d6f05f2a839a92" - } - Frame { - msec: 1296 - hash: "1dd2c456c6ee9cc8f9be0e9f3617d44b" - } - Frame { - msec: 1312 - hash: "56208e6551e2f4202bab2d62a1cf46a2" - } - Frame { - msec: 1328 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1344 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1360 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1376 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1392 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1408 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1424 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1440 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1456 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1472 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1488 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1504 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1520 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1536 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1552 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1568 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1584 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1600 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1616 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1632 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Frame { - msec: 1648 - hash: "caa3c1a106d549e6bb94a1746bd7a53c" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1664 - hash: "f0f00d22d15ed9828db7b5f3a3669fe9" - } - Frame { - msec: 1680 - hash: "153e7984089530bbd052c9e4f62eb14c" - } - Frame { - msec: 1696 - hash: "0525d40cc58d054a3abd7ee2486576f8" - } - Frame { - msec: 1712 - hash: "8c23d5245774ab5252c98c19c33f8171" - } - Frame { - msec: 1728 - hash: "5ca243794d1350f04cf973d4bfc8ab89" - } - Frame { - msec: 1744 - hash: "d19b7f4c0897aba498e122d83b4cbbf1" - } - Frame { - msec: 1760 - hash: "99e41460dd8efc6e5c3faf54b14c3d43" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1776 - hash: "703469f8b133156ed3aabe02762d66c3" - } - Frame { - msec: 1792 - hash: "1cc2c383e988048db76a80d8d7f5a0e2" - } - Frame { - msec: 1808 - hash: "8e87117c19eb9d6e600c44e0f3869ae1" - } - Frame { - msec: 1824 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1840 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1856 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1872 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1888 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1904 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1920 - image: "gridview.1.png" - } - Frame { - msec: 1936 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1952 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1968 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Frame { - msec: 1984 - hash: "8304d2432168a2ea8a887d9a135b40b4" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2000 - hash: "4924037ce643d0748b8b2c666e61fd62" - } - Frame { - msec: 2016 - hash: "ef9750584e669a8b2d415d13854e12a6" - } - Frame { - msec: 2032 - hash: "69937eacef6e6b11ad1d5741c69a1faa" - } - Frame { - msec: 2048 - hash: "a1bd870fffd95a0604dd8e170e571632" - } - Frame { - msec: 2064 - hash: "a3a72386594aacc88977cdaa6441df48" - } - Frame { - msec: 2080 - hash: "6d8e89de38d52f0f0f871dfa18361cb5" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2096 - hash: "96cfb1eb6893fac86c9434d1ffb82fcb" - } - Frame { - msec: 2112 - hash: "5e11df1660634ff317be474118174ec5" - } - Frame { - msec: 2128 - hash: "2eb75858b50c3a9a80673ab89014ed63" - } - Frame { - msec: 2144 - hash: "3ff5d66f7902af92d49ebebf04d16c26" - } - Frame { - msec: 2160 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2176 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2192 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2208 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2224 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2240 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2256 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2272 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2288 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2304 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2320 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Frame { - msec: 2336 - hash: "570da61e2d48acd11474fe005110ab4b" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2352 - hash: "efeda5b2d97e1b7c22e2308250501cb7" - } - Frame { - msec: 2368 - hash: "d6158379b699279f66b94a8418e53af1" - } - Frame { - msec: 2384 - hash: "ab960b0669fa594e0552df623a9136ea" - } - Frame { - msec: 2400 - hash: "0ebf6be1305ee1eb8740f4d0365ef4c5" - } - Frame { - msec: 2416 - hash: "46cde47dffc6f2687c8c643eca09b95d" - } - Frame { - msec: 2432 - hash: "2b8698ce02a6964115d960ae19f40c37" - } - Frame { - msec: 2448 - hash: "ff1e7d800bb27b41710c50554adc1091" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2464 - hash: "5837b3aca09038cae23dcb149acc8b0b" - } - Frame { - msec: 2480 - hash: "dbe7c571cdbdb9de4fd01faa6d5374cf" - } - Frame { - msec: 2496 - hash: "f431abcaf05f49ead909296d7649f8a9" - } - Frame { - msec: 2512 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2528 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2544 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2560 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2576 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2592 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2608 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2624 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2640 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2656 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2672 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2688 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2704 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2720 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2736 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2752 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2768 - hash: "043583b19c921740dbc990afd4f508ed" - } - Frame { - msec: 2784 - hash: "043583b19c921740dbc990afd4f508ed" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2800 - hash: "4f2fafdb59db544352e3067d67c0a714" - } - Frame { - msec: 2816 - hash: "4dcd4cdf6f4e305732185ec52cd2f2f6" - } - Frame { - msec: 2832 - hash: "dfd3c29b0520edbbee57dfacfa7e2b30" - } - Frame { - msec: 2848 - hash: "257d3d8bcf78671d35a898befec091cb" - } - Frame { - msec: 2864 - hash: "20e89c544284603943396694abe86756" - } - Frame { - msec: 2880 - image: "gridview.2.png" - } - Frame { - msec: 2896 - hash: "b88c6af89423b32b3a4413035711df03" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2912 - hash: "e34de13af44c449c9ecc86e06ce01ed2" - } - Frame { - msec: 2928 - hash: "98ffe81129aa7cc7325764221f1dae59" - } - Frame { - msec: 2944 - hash: "db2d545de9879362738e71a02a3d1d26" - } - Frame { - msec: 2960 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 2976 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 2992 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 3008 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 3024 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 3040 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 3056 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 3072 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 3088 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Frame { - msec: 3104 - hash: "e67ae32a47213b360c1a445bf645dde2" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3120 - hash: "02d8c90faf56c65252e4f938944bda7b" - } - Frame { - msec: 3136 - hash: "a32994e2320e357241f63b956b6db236" - } - Frame { - msec: 3152 - hash: "9ada466c26c217adbcd7a93df264ed75" - } - Frame { - msec: 3168 - hash: "79d1a3489be95d113e8c611a2ba63456" - } - Frame { - msec: 3184 - hash: "d3aa82455c4ae3ac25097354e132a30f" - } - Frame { - msec: 3200 - hash: "62d12e5933ed4ed048ccafd229f4b2b7" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3216 - hash: "5bc4ac94ae20e425084d0811dee1ba08" - } - Frame { - msec: 3232 - hash: "6d5113e3732dc7a9172eea3667a01f7b" - } - Frame { - msec: 3248 - hash: "e435a2588b25d3336f290331931f5981" - } - Frame { - msec: 3264 - hash: "bce201adbeb319b181cce139f179d7f0" - } - Frame { - msec: 3280 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3296 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3312 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3328 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3344 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3360 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3376 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3392 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3408 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3424 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3440 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Frame { - msec: 3456 - hash: "5fa3ec31176bed2de8cb076b87e0be74" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3472 - hash: "8f0f3cd35ae92047f23084f447046eb8" - } - Frame { - msec: 3488 - hash: "ceb12e6c5e9f0566039040d9f3ff587f" - } - Frame { - msec: 3504 - hash: "dfd0c89c3ea73aceefcdafa71609c720" - } - Frame { - msec: 3520 - hash: "8d8ed1a9dc6a9f74dfc81b79f02af4c5" - } - Frame { - msec: 3536 - hash: "d450bd62e03e1e4c7cb66e98ece05f97" - } - Frame { - msec: 3552 - hash: "d1ece2210cd24eedd5361e5c3a162236" - } - Frame { - msec: 3568 - hash: "77589e48b9db95e702055753046319e5" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3584 - hash: "7793263ecb831a1e63fbd76c8addde03" - } - Frame { - msec: 3600 - hash: "bfa9675f981c37fed27dea100226f61a" - } - Frame { - msec: 3616 - hash: "9780849fe8abd22c32ccafcdd46b0d65" - } - Frame { - msec: 3632 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3648 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3664 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3680 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3696 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3712 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3728 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3744 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3760 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3776 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3792 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3808 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3824 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3840 - image: "gridview.3.png" - } - Frame { - msec: 3856 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3872 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3888 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3904 - hash: "e63d987ba303a42046827f14941b444a" - } - Frame { - msec: 3920 - hash: "e63d987ba303a42046827f14941b444a" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3936 - hash: "a61dbcb7d914afe34009085bf37fb8e2" - } - Frame { - msec: 3952 - hash: "89175b83b4f7ee4b5d99219cdc97aa59" - } - Frame { - msec: 3968 - hash: "f524421286503f6175e4ad71dd89145f" - } - Frame { - msec: 3984 - hash: "ca5af7d98a008eccba1e21be0da61f3c" - } - Frame { - msec: 4000 - hash: "77c19e7e17e00787ff0d7a4e7bad7bc8" - } - Frame { - msec: 4016 - hash: "04c8db761e324101ad92e0ac9ceed7d4" - } - Frame { - msec: 4032 - hash: "97a3dcb81349efab6b44d458e83ce5c4" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4048 - hash: "e86ebc276b88705c97cc9efb66ccc6b2" - } - Frame { - msec: 4064 - hash: "a134bbfd14879f13b288a04d23382348" - } - Frame { - msec: 4080 - hash: "9530ad3f58ad1c66401572869f7d91bc" - } - Frame { - msec: 4096 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Frame { - msec: 4112 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Frame { - msec: 4128 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Frame { - msec: 4144 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Frame { - msec: 4160 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Frame { - msec: 4176 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Frame { - msec: 4192 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Frame { - msec: 4208 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Frame { - msec: 4224 - hash: "db3d030de94b19ea1db5c60be7c7ca5c" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4240 - hash: "980e0fa84fd3bab496623936f5f220a2" - } - Frame { - msec: 4256 - hash: "ed3268911723d664699bbc31317befc1" - } - Frame { - msec: 4272 - hash: "3bfda4b3b0b2d2a97ec1c0b5b3f4da63" - } - Frame { - msec: 4288 - hash: "1616c6def28659d51905564ff83cc112" - } - Frame { - msec: 4304 - hash: "68342f34c18956d3a093f8eeeae6977e" - } - Frame { - msec: 4320 - hash: "ac1b12959e9055a28fe2bda0a12b75bc" - } - Frame { - msec: 4336 - hash: "009b85ff6b86e418c78ed33a5e88d3f1" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4352 - hash: "59753bc7dc69767fe2109fdc41f20dae" - } - Frame { - msec: 4368 - hash: "1c87d3d8c8d564d4d95a26f57fd28f38" - } - Frame { - msec: 4384 - hash: "4e43b7b6787002c9013010dd74c83f49" - } - Frame { - msec: 4400 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4416 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4432 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4448 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4464 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4480 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4496 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4512 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4528 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4544 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4560 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4576 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Frame { - msec: 4592 - hash: "2476aa1a7191b485a76c76e98c9be2b0" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4608 - hash: "84de5b5e8b0fba190a783c72967661c7" - } - Frame { - msec: 4624 - hash: "60b696f4913379d28f300fd1b531c6cb" - } - Frame { - msec: 4640 - hash: "d01e651d9094332fd82ad1cea3e93e9d" - } - Frame { - msec: 4656 - hash: "87be4cd7c894b03b2b64c996e915d71f" - } - Frame { - msec: 4672 - hash: "b07fccb0c5565d2feed5a9fcdf8acead" - } - Frame { - msec: 4688 - hash: "3dca3165fd34be549d21fb6c414c67d8" - } - Frame { - msec: 4704 - hash: "5f69f3298f8ca73fa9b3b6e630c60186" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4720 - hash: "d7f41e9a29d550a7d9a41bb947569abe" - } - Frame { - msec: 4736 - hash: "4ede2e90ad216a2d44580c50a25dea23" - } - Frame { - msec: 4752 - hash: "9b339845ee588b789dc9095c272e0bdf" - } - Frame { - msec: 4768 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4784 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4800 - image: "gridview.4.png" - } - Frame { - msec: 4816 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4832 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4848 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4864 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4880 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4896 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4912 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4928 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4944 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4960 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4976 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 4992 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5008 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5024 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5040 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5056 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5072 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5088 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5104 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5120 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5136 - hash: "9cdea4790972efaecabd52b435107e69" - } - Frame { - msec: 5152 - hash: "9cdea4790972efaecabd52b435107e69" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 5168 - hash: "d6f0a6d7604bad811eeba13fd7c45368" - } - Frame { - msec: 5184 - hash: "5f92e1531a3f6c21ec82e3c908167fc7" - } - Frame { - msec: 5200 - hash: "5214e99ff052dcdc8f85bad29de92e03" - } - Frame { - msec: 5216 - hash: "d4abed9f0f1115c9a45b0b9b4f54754e" - } - Frame { - msec: 5232 - hash: "cfae8a0281e704b0e62f6bf31b32800f" - } - Frame { - msec: 5248 - hash: "c203f0674596ae690bf19f2d49be62ac" - } - Frame { - msec: 5264 - hash: "2e2c7e05aade104bdc4f6c489b6f0601" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 5280 - hash: "b4b2148b0557dcab3a441165e5e4de5f" - } - Frame { - msec: 5296 - hash: "c5e791d27a42a63d25cdbd492b4af29a" - } - Frame { - msec: 5312 - hash: "0f94ebcb407f8e6ae263bd954f2c8177" - } - Frame { - msec: 5328 - hash: "d9b56b817a411812789881697a28fe4c" - } - Frame { - msec: 5344 - hash: "d9b56b817a411812789881697a28fe4c" - } - Frame { - msec: 5360 - hash: "d9b56b817a411812789881697a28fe4c" - } - Frame { - msec: 5376 - hash: "d9b56b817a411812789881697a28fe4c" - } - Frame { - msec: 5392 - hash: "d9b56b817a411812789881697a28fe4c" - } - Frame { - msec: 5408 - hash: "d9b56b817a411812789881697a28fe4c" - } - Frame { - msec: 5424 - hash: "d9b56b817a411812789881697a28fe4c" - } - Frame { - msec: 5440 - hash: "d9b56b817a411812789881697a28fe4c" - } - Frame { - msec: 5456 - hash: "d9b56b817a411812789881697a28fe4c" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 5472 - hash: "6fdfe69e377da72e04dc130f5677ed2c" - } - Frame { - msec: 5488 - hash: "c041d26d43766fa1735f2ada2a43225b" - } - Frame { - msec: 5504 - hash: "aa62dbd6c6256665ee1b4ef468607978" - } - Frame { - msec: 5520 - hash: "987fcdf6483a83b1242053f4e7fb7a26" - } - Frame { - msec: 5536 - hash: "fbde70c34709b68eb22f5460a8815fba" - } - Frame { - msec: 5552 - hash: "911ddc838ebaf5ade1bb026dff2741ba" - } - Frame { - msec: 5568 - hash: "120bbf35b2a3b756bdeaea0df43e49b2" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 5584 - hash: "ea93e33c079d6dc5fb18c69fb4fed441" - } - Frame { - msec: 5600 - hash: "b9ac8ab01cb59b1fee11967bdb6d2dd6" - } - Frame { - msec: 5616 - hash: "3ff266bf29cbcaa30bc1e7af5dd9866b" - } - Frame { - msec: 5632 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5648 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5664 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5680 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5696 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5712 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5728 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5744 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5760 - image: "gridview.5.png" - } - Frame { - msec: 5776 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5792 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Frame { - msec: 5808 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 5824 - hash: "de1f83d25751639dff42f1755a6534c3" - } - Frame { - msec: 5840 - hash: "edefdea8b2461d03fb97cf5ed66e9b6d" - } - Frame { - msec: 5856 - hash: "cef1886397e3932a511f37571b5011f4" - } - Frame { - msec: 5872 - hash: "05589ad354314d9e04ef90c1addd99f5" - } - Frame { - msec: 5888 - hash: "ff88b52e3755b9b4785d2719ddd4f090" - } - Frame { - msec: 5904 - hash: "f59edc3016b177a2e8faa6612d718b17" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 5920 - hash: "dc673a7cdd927f70b28ebcfe51cd3d89" - } - Frame { - msec: 5936 - hash: "3abec0da85fb663e63ab22188e092827" - } - Frame { - msec: 5952 - hash: "50c2c8ac68cafad7c47b576cd8f4a037" - } - Frame { - msec: 5968 - hash: "06c31b861e2b96e6595b2244d7b3f4d5" - } - Frame { - msec: 5984 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6000 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6016 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6032 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6048 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6064 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6080 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6096 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6112 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6128 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6144 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6160 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6176 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6192 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6208 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6224 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6240 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6256 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6272 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6288 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6304 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6320 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6336 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6352 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6368 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6384 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6400 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Frame { - msec: 6416 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 6432 - hash: "7f52a770775c19e10784b4c5f7874210" - } - Frame { - msec: 6448 - hash: "827cfb74286a2a80aca8b6c5277d6cfd" - } - Frame { - msec: 6464 - hash: "8399231eda9b66821d43a3d8c4c7d645" - } - Frame { - msec: 6480 - hash: "fc163583671f3c4023361460b436c895" - } - Frame { - msec: 6496 - hash: "893dea6496c95c32095ad1d673e500c2" - } - Frame { - msec: 6512 - hash: "808c7403b2cdcc882059da56a2f806fe" - } - Frame { - msec: 6528 - hash: "7466b2e5b86ba8ad46be75818659786c" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 6544 - hash: "dd2561cd780e24401130305d47757a53" - } - Frame { - msec: 6560 - hash: "bee89299532d43fc3e6c3e69c343b381" - } - Frame { - msec: 6576 - hash: "94f8474aedee94098592c05d8fc7d868" - } - Frame { - msec: 6592 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" - } - Frame { - msec: 6608 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" - } - Frame { - msec: 6624 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" - } - Frame { - msec: 6640 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" - } - Frame { - msec: 6656 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" - } - Frame { - msec: 6672 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" - } - Frame { - msec: 6688 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" - } - Frame { - msec: 6704 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 6720 - image: "gridview.6.png" - } - Frame { - msec: 6736 - hash: "ccd58be20d47422121d6ef799b927a7a" - } - Frame { - msec: 6752 - hash: "e090c7f39649786a1796870e25bd0f0d" - } - Frame { - msec: 6768 - hash: "acf3dcd9f4a869169dbc1ae7fe60e9d0" - } - Frame { - msec: 6784 - hash: "51795e9a720845e8305d23507785e1ca" - } - Frame { - msec: 6800 - hash: "0d34a43e177e6b73e2ff9155747d0385" - } - Frame { - msec: 6816 - hash: "1876c3cdffc1af01da1aaa0ac636d0a8" - } - Frame { - msec: 6832 - hash: "3131296b6edf4190520e2cdb3f8b936e" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 6848 - hash: "ee92f0a764e5081b130e205a5c362b07" - } - Frame { - msec: 6864 - hash: "8737ea2c60aeb215228c00a7fddd1baa" - } - Frame { - msec: 6880 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 6896 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 6912 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 6928 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 6944 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 6960 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 6976 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 6992 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7008 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7024 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 7040 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7056 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7072 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7088 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7104 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7120 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7136 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7152 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 7168 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7184 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7200 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7216 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7232 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7248 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7264 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7280 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7296 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7312 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7328 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7344 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7360 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7376 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7392 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7408 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7424 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7440 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7456 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7472 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7488 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7504 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7520 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7536 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7552 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7568 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7584 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 7600 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" - } - Frame { - msec: 7616 - hash: "eb0d1be15f63af6eaf6634b02e5f240a" - } - Frame { - msec: 7632 - hash: "2423c305bebb3449e87c78e8fb447c88" - } - Frame { - msec: 7648 - hash: "f0ede6ea85647728db80878b3e525edc" - } - Frame { - msec: 7664 - hash: "387d127b2b000dc344ee4768cf2d29b2" - } - Frame { - msec: 7680 - image: "gridview.7.png" - } - Frame { - msec: 7696 - hash: "1d0d8100e994c16d7973ad9a97b0068f" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 7712 - hash: "95fb4a6d0331ffc4773e39ec8c3e6511" - } - Frame { - msec: 7728 - hash: "34738f16150228d971972833d4bd5c8f" - } - Frame { - msec: 7744 - hash: "9b71c8dacc530f32d7c6f409928caf5c" - } - Frame { - msec: 7760 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7776 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7792 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7808 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7824 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7840 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7856 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7872 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7888 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7904 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7920 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7936 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7952 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 7968 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 7984 - hash: "831efd0970c5c29fbe10b3be7707f915" - } - Frame { - msec: 8000 - hash: "0587fc809c38c3bbe1fbac2960596974" - } - Frame { - msec: 8016 - hash: "d20eba806cf4730a850db4c095fa36f9" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 8032 - hash: "c1663e75ba05b341e1e970a451958ea0" - } - Frame { - msec: 8048 - hash: "ea40cc33b689d6b42fc5a69fa30178e4" - } - Frame { - msec: 8064 - hash: "a07a1c61de1813158ff743cd326ee427" - } - Frame { - msec: 8080 - hash: "6dfddaa340df8999ca77f6a6e4c6c3ce" - } - Frame { - msec: 8096 - hash: "76ca40bb169c1ddc291847d4be2d38d7" - } - Frame { - msec: 8112 - hash: "e44778541b76208981a3944a64235cac" - } - Frame { - msec: 8128 - hash: "fdf45ea650d31957cc675c3bec8bf53e" - } - Frame { - msec: 8144 - hash: "b78cdb727535ab7e567af08abf25e64c" - } - Frame { - msec: 8160 - hash: "b78cdb727535ab7e567af08abf25e64c" - } - Frame { - msec: 8176 - hash: "b78cdb727535ab7e567af08abf25e64c" - } - Frame { - msec: 8192 - hash: "b78cdb727535ab7e567af08abf25e64c" - } - Frame { - msec: 8208 - hash: "b78cdb727535ab7e567af08abf25e64c" - } - Frame { - msec: 8224 - hash: "b78cdb727535ab7e567af08abf25e64c" - } - Frame { - msec: 8240 - hash: "b78cdb727535ab7e567af08abf25e64c" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 8256 - hash: "b78cdb727535ab7e567af08abf25e64c" - } - Frame { - msec: 8272 - hash: "338481e6390f2a61e975084c16427584" - } - Frame { - msec: 8288 - hash: "8923c45c23b1f4250b7d1e483b07a4da" - } - Frame { - msec: 8304 - hash: "b21de834906d0eecea985561e2e41e4f" - } - Frame { - msec: 8320 - hash: "a8c9761cfb20631520ed890cd2648c4b" - } - Frame { - msec: 8336 - hash: "abf96a042ef12190bc48ff49732ef55a" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 8352 - hash: "5b9506dfb038cd26dfc81ecd2406ada9" - } - Frame { - msec: 8368 - hash: "be75b8d39f81b2fdaff01469bfc67d4a" - } - Frame { - msec: 8384 - hash: "488aa2977f349df82b5f6ae5e3619d35" - } - Frame { - msec: 8400 - hash: "d69f17f0ce8537511353d20b59d20de0" - } - Frame { - msec: 8416 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8432 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8448 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8464 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8480 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8496 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8512 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8528 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8544 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 8560 - hash: "7647efcc0152cc3d6544106f969ace26" - } - Frame { - msec: 8576 - hash: "8f74d33bf95cbf37fdb4521c69373a64" - } - Frame { - msec: 8592 - hash: "e33bb4cd12790c9d9992efdd3e23bee9" - } - Frame { - msec: 8608 - hash: "36f32e34b4093091c4707f26c52896ad" - } - Frame { - msec: 8624 - hash: "5ab5e142f8dc883287c116cedbacfd55" - } - Frame { - msec: 8640 - image: "gridview.8.png" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 8656 - hash: "c74212e45a6c4b6a18caeb6a22350609" - } - Frame { - msec: 8672 - hash: "8919643a7d13677dd902941860093209" - } - Frame { - msec: 8688 - hash: "6f2ab4400fadf51b994351f0975e31fc" - } - Frame { - msec: 8704 - hash: "4798559ce6f9bd7455ed5385d0030763" - } - Frame { - msec: 8720 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8736 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8752 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8768 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8784 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8800 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8816 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8832 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8848 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8864 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 8880 - hash: "72759bd1e2618c61c42bbe4de3ad3a96" - } - Frame { - msec: 8896 - hash: "fac81cf6f45cb47abc1fa36d23e39d34" - } - Frame { - msec: 8912 - hash: "862f4deee01183fd38b094da59048b23" - } - Frame { - msec: 8928 - hash: "2f3b147221da30d8857d25fc788b3eac" - } - Frame { - msec: 8944 - hash: "5b295b187c6cfc6aefa51e5efc2c27e3" - } - Frame { - msec: 8960 - hash: "fe3139ddc8fdbc1b0c25bd641f83e833" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 8976 - hash: "8f2a9585dc6248a403aafd0f151d6ba0" - } - Frame { - msec: 8992 - hash: "39eca8cc6bb8ea30cc452dc24f8e46dc" - } - Frame { - msec: 9008 - hash: "8dbbc6026942cb6e572f1cb7e2675713" - } - Frame { - msec: 9024 - hash: "62dfa07b96dd18c6be89822654bf09f3" - } - Frame { - msec: 9040 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9056 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9072 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9088 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9104 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9120 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9136 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9152 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9168 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9184 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9200 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9216 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9232 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9248 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9264 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Key { - type: 6 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 9280 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9296 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9312 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9328 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9344 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9360 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9376 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Key { - type: 7 - key: 16777235 - modifiers: 536870912 - text: "1e" - autorep: false - count: 1 - } - Frame { - msec: 9392 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9408 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9424 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9440 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9456 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9472 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9488 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9504 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9520 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9536 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9552 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9568 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9584 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9600 - image: "gridview.9.png" - } - Frame { - msec: 9616 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9632 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9648 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9664 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9680 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9696 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9712 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9728 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9744 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9760 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 9776 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9792 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9808 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9824 - hash: "02c632713d0dc64bff9d8e58f745df95" - } - Frame { - msec: 9840 - hash: "02c632713d0dc64bff9d8e58f745df95" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png deleted file mode 100644 index 3021d58..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png deleted file mode 100644 index baeb1a6..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png deleted file mode 100644 index b0486e5..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png deleted file mode 100644 index 2d0c731..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png deleted file mode 100644 index af9ed05..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png deleted file mode 100644 index 0b0945d..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png deleted file mode 100644 index 618ae0c..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png deleted file mode 100644 index fc31262..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png deleted file mode 100644 index 22291ac..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png deleted file mode 100644 index 3021d58..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png deleted file mode 100644 index 2f2f5b9..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml deleted file mode 100644 index 1c90af9..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml +++ /dev/null @@ -1,2479 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "dba2f6f1c773bd4cd9523108fca861c4" - } - Frame { - msec: 32 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 48 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 64 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 80 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 96 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 112 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 128 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 144 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 160 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 176 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 192 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 208 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 224 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 240 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 256 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 272 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 288 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 304 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 320 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 336 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 352 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 368 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 384 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 400 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 416 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 432 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 448 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 464 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 480 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 496 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 512 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 528 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 544 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 560 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 576 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 592 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 608 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 624 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 640 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 656 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 672 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 688 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 704 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 720 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 736 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 752 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 768 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 784 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 800 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 816 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 832 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 848 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 864 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 880 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 896 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 912 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 928 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 944 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 960 - image: "gridview2.0.png" - } - Frame { - msec: 976 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 992 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1008 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1024 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1040 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1056 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1072 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1088 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1104 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1120 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1136 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1152 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1168 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1184 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1200 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1216 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1232 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1248 - hash: "33d81c39d16c6a326012499796e50e03" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1264 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 1280 - hash: "aaec7184a27e6700d96ffff376b8fa53" - } - Frame { - msec: 1296 - hash: "3fa3a890a4ff4a59336a9a2d478d0dde" - } - Frame { - msec: 1312 - hash: "3711c6c2f4f9aba7f2c72bd1f1d85016" - } - Frame { - msec: 1328 - hash: "23da2f9a800b805ce7b77ff08218907d" - } - Frame { - msec: 1344 - hash: "12e4bc953b06cdaad0720f87fb96a37e" - } - Frame { - msec: 1360 - hash: "46e69658bda69bab202a2790a76ba1cd" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 1376 - hash: "44608e67c69b92ccbb45e119e1158fe3" - } - Frame { - msec: 1392 - hash: "97a309b47017d38294644a486a7ce68e" - } - Frame { - msec: 1408 - hash: "41f42b50b22e0496c8aca5019b24b9cb" - } - Frame { - msec: 1424 - hash: "8603ea1cb60c804563f50bc41c0180fe" - } - Frame { - msec: 1440 - hash: "e29777fa70daafe9640c6e9bb7bd63d6" - } - Frame { - msec: 1456 - hash: "2c4c360320f527e99fee799e68c2c0aa" - } - Frame { - msec: 1472 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Frame { - msec: 1488 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Frame { - msec: 1504 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Frame { - msec: 1520 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Frame { - msec: 1536 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Frame { - msec: 1552 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Frame { - msec: 1568 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Frame { - msec: 1584 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 1600 - hash: "0d30916c7e05ff8609af5894f47a89bb" - } - Frame { - msec: 1616 - hash: "17027b7c099b11cb5382f30dbbd1e647" - } - Frame { - msec: 1632 - hash: "0e17461a4ca843f9903b7f03e99a0b00" - } - Frame { - msec: 1648 - hash: "a5e61901920553e59892fa405beea15a" - } - Frame { - msec: 1664 - hash: "310eaf71fe8d3807606e58a666c65ccd" - } - Frame { - msec: 1680 - hash: "76f556d05fb77082f33eb1836c10587a" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 1696 - hash: "4e7e4b7790a96396e7ea3533b5c32ed9" - } - Frame { - msec: 1712 - hash: "b065287b6490f58ca6f0e9eb2027cf20" - } - Frame { - msec: 1728 - hash: "907cd9dbdffa1d395caaabd466dc8e86" - } - Frame { - msec: 1744 - hash: "3b144e5b4867328beafa3020ce931480" - } - Frame { - msec: 1760 - hash: "b59b2b60b7d55424b61b1b0ed3e227b8" - } - Frame { - msec: 1776 - hash: "4032e934871b315b68c7c2abea42efee" - } - Frame { - msec: 1792 - hash: "8f80127b2f8d6fc10aa84062544cc381" - } - Frame { - msec: 1808 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1824 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1840 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1856 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1872 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1888 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1904 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1920 - image: "gridview2.1.png" - } - Frame { - msec: 1936 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1952 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1968 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 1984 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 2000 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 2016 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2032 - hash: "77d5193bc5f53fe5cb98a236c55f841e" - } - Frame { - msec: 2048 - hash: "a45d2630872a14541f39b862e15ff461" - } - Frame { - msec: 2064 - hash: "714711d7382ef8bba5fb39e2e44bd59c" - } - Frame { - msec: 2080 - hash: "63deed0356e761f94f88be18a7d10053" - } - Frame { - msec: 2096 - hash: "d5b4fc1b568a4a1b63a91b422272c704" - } - Frame { - msec: 2112 - hash: "b6d2c80925cc6b4b7b297bd6ee903c7c" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 2128 - hash: "38117482196360353586cb7ace593894" - } - Frame { - msec: 2144 - hash: "2301f3a148bf4e311cc8ce011ddf65f8" - } - Frame { - msec: 2160 - hash: "2a4982a0961f89a15618f8d4c2081f5a" - } - Frame { - msec: 2176 - hash: "acf8666d6a8a29925f3895aa8e93f713" - } - Frame { - msec: 2192 - hash: "967ed026bc92a6d2747c5227105543a6" - } - Frame { - msec: 2208 - hash: "ff72f3fb95f25990c99c1c14cfef57da" - } - Frame { - msec: 2224 - hash: "0874a4f863596c3860dcf5b1f7f6ceb2" - } - Frame { - msec: 2240 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2256 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2272 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2288 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2304 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2320 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2336 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2352 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2368 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 2384 - hash: "520445d8619ad9bdde0db0e61f17567c" - } - Frame { - msec: 2400 - hash: "7c4bbf0423d63d7642d218cac56a6215" - } - Frame { - msec: 2416 - hash: "e8c77dbc89721b51549f8d46453fe09d" - } - Frame { - msec: 2432 - hash: "7953503590b639872ac12215695e8cea" - } - Frame { - msec: 2448 - hash: "edaee946a2e25fed6de9acfda0d44a14" - } - Frame { - msec: 2464 - hash: "4996ef39bb0122c10d65f8dd8674b386" - } - Frame { - msec: 2480 - hash: "ede7c6ca9d6deb7819c3715e98755d6e" - } - Frame { - msec: 2496 - hash: "e703fad2fcf9244ec9865200c7d17ce3" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 2512 - hash: "e2bfc16fd893bb3eb0e5df89a0169af3" - } - Frame { - msec: 2528 - hash: "cfd0eb2bc378bd46644f3f7820150685" - } - Frame { - msec: 2544 - hash: "442b05b04762c2bcda291aaa0341398e" - } - Frame { - msec: 2560 - hash: "55842a6503057eea98e2075ef160873e" - } - Frame { - msec: 2576 - hash: "730f80233dacf1119660a76d2a34c5fc" - } - Frame { - msec: 2592 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2608 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2624 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2640 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2656 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2672 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2688 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2704 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2720 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2736 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Key { - type: 6 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 2752 - hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" - } - Frame { - msec: 2768 - hash: "4d04c12bc7fab0b22df3135bf3a87a22" - } - Frame { - msec: 2784 - hash: "fdca5a3f8312452feba7f37b1caa6419" - } - Frame { - msec: 2800 - hash: "97b955e0f8cde30299b238d9ac0eb308" - } - Frame { - msec: 2816 - hash: "19664de1a738458810896959ba4087ad" - } - Frame { - msec: 2832 - hash: "4f9a4b6de6a2969e4639076a8f7c258e" - } - Key { - type: 7 - key: 16777234 - modifiers: 536870912 - text: "1c" - autorep: false - count: 1 - } - Frame { - msec: 2848 - hash: "a10f18aa686be2681a48082ec9f01df7" - } - Frame { - msec: 2864 - hash: "b8f39a6cca377dd573429d879286dd63" - } - Frame { - msec: 2880 - image: "gridview2.2.png" - } - Frame { - msec: 2896 - hash: "3301e52a46efbc49882401c77853ffde" - } - Frame { - msec: 2912 - hash: "0c614597f17496ebc701efe7b0c1fbb6" - } - Frame { - msec: 2928 - hash: "6dda2d6b034c932e279cf216c9b3e6ad" - } - Frame { - msec: 2944 - hash: "7bf08cd5fe3ad3f83bbef28f452e0545" - } - Frame { - msec: 2960 - hash: "1b7ebcf0e3d68e429cb04966120985e5" - } - Frame { - msec: 2976 - hash: "1b7ebcf0e3d68e429cb04966120985e5" - } - Frame { - msec: 2992 - hash: "1b7ebcf0e3d68e429cb04966120985e5" - } - Frame { - msec: 3008 - hash: "1b7ebcf0e3d68e429cb04966120985e5" - } - Frame { - msec: 3024 - hash: "1b7ebcf0e3d68e429cb04966120985e5" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 3040 - hash: "1b7ebcf0e3d68e429cb04966120985e5" - } - Frame { - msec: 3056 - hash: "0fe7d46e7c18ce7bb5a098c5c662d557" - } - Frame { - msec: 3072 - hash: "cd5df541cc1ed545bc27da9e4a937261" - } - Frame { - msec: 3088 - hash: "35762467b83fee1870cff9b0436994d3" - } - Frame { - msec: 3104 - hash: "75a620b42caabf5b1576041dbd4c2808" - } - Frame { - msec: 3120 - hash: "f1b06290a6cbd48b8d3d4ce1e42ed754" - } - Frame { - msec: 3136 - hash: "8e1a50dc082828587a4656117760a852" - } - Frame { - msec: 3152 - hash: "aae8e5f166e736040138d8e222a844dd" - } - Frame { - msec: 3168 - hash: "f69e5cf2bcb26fe49126776695b0b7e0" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 3184 - hash: "7b482fece0255ea07496ef0545b008a2" - } - Frame { - msec: 3200 - hash: "3f96eaebfebe8d4eeb347b201b59ab11" - } - Frame { - msec: 3216 - hash: "9943626d2226c3be711c8213906133f0" - } - Frame { - msec: 3232 - hash: "fd5fd8177b3957c27f1de0d95621351a" - } - Frame { - msec: 3248 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3264 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3280 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3296 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3312 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3328 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3344 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3360 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3376 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3392 - hash: "506283ccfe9670633ce0bf60b437b37b" - } - Frame { - msec: 3408 - hash: "fb437f6c23561092a124e498f1604ff2" - } - Frame { - msec: 3424 - hash: "402ba144bbb7260eec4553e68eb35cda" - } - Frame { - msec: 3440 - hash: "76a983de9e85e0c81dfb8908252bd6c9" - } - Frame { - msec: 3456 - hash: "09219f55fae47a0afed887ebf68a36bc" - } - Frame { - msec: 3472 - hash: "344e81cc262093facef2f6a235a734dc" - } - Frame { - msec: 3488 - hash: "8f1c5544eb537555b1c59a377b15e31d" - } - Frame { - msec: 3504 - hash: "606b9bb549fe2e4bbd09d67b7dea0d1a" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3520 - hash: "63e239c97bd01a61cb31ef2869e7f47c" - } - Frame { - msec: 3536 - hash: "f7c176550c39f8a1ad64590cf33a60a4" - } - Frame { - msec: 3552 - hash: "8581cb14ed81efdf9abb638b5e542cc3" - } - Frame { - msec: 3568 - hash: "7a1e9354ecc49d8bc27d303c7bdc81f9" - } - Frame { - msec: 3584 - hash: "610288b97276ee03702ed8a814ef333d" - } - Frame { - msec: 3600 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3616 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3632 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3648 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3664 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3680 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3696 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3712 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3728 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3744 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3760 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3776 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3792 - hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" - } - Frame { - msec: 3808 - hash: "9713c6b9aff051dd0cc45c545d34b688" - } - Frame { - msec: 3824 - hash: "1f8fd4d759e343720a8681b6ad126b72" - } - Frame { - msec: 3840 - image: "gridview2.3.png" - } - Frame { - msec: 3856 - hash: "8550d916d91a40b0c3a886b962e07ffc" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 3872 - hash: "df0c2e474139e79429bfc19c79a65ef8" - } - Frame { - msec: 3888 - hash: "acfb99d081d754276e5ed59bd590aeab" - } - Frame { - msec: 3904 - hash: "2b34cd101b442f7a3de2893fd5514c16" - } - Frame { - msec: 3920 - hash: "df92ced66faa1d59354d8010278438ec" - } - Frame { - msec: 3936 - hash: "dd39a8e6fa3784453461193a6da416cd" - } - Frame { - msec: 3952 - hash: "5670e8f91ea2df451f0974a51cd77d7d" - } - Frame { - msec: 3968 - hash: "74b97a09bfe7400872a2c6214e04a5ac" - } - Frame { - msec: 3984 - hash: "cfd55b963506ab54cf09a7311e84bcc9" - } - Frame { - msec: 4000 - hash: "59657ee9293c03f064d62de826931435" - } - Frame { - msec: 4016 - hash: "31f6a4adf31be5ed0af0ea4097e3acee" - } - Frame { - msec: 4032 - hash: "8f5bfc40c8cdb2f8ce69adb72e7efe76" - } - Frame { - msec: 4048 - hash: "9dc38985113124130e2ca7950e0bd144" - } - Frame { - msec: 4064 - hash: "786e6e8b9e74876a6f393d61a78b8fc7" - } - Frame { - msec: 4080 - hash: "1f4d59a4e4684aab309363a711b30006" - } - Frame { - msec: 4096 - hash: "a11e332de151b43051796e16dbcf75c3" - } - Frame { - msec: 4112 - hash: "1a0e82029ae107cb2a018786752433ff" - } - Frame { - msec: 4128 - hash: "b14c51977c7fbf51f9cf6fec309bff6a" - } - Frame { - msec: 4144 - hash: "2b418f811992399c3f87c268db745632" - } - Frame { - msec: 4160 - hash: "0e9a056207053ca98c4e9f42de244c62" - } - Frame { - msec: 4176 - hash: "1945c3f9e3a1337e7d111e15adea345f" - } - Frame { - msec: 4192 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4208 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4224 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4240 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4256 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4272 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4288 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4304 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4320 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4336 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4352 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4368 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4384 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4400 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4416 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4432 - hash: "d8cf36b6cc15a01ead815d814ae81cb4" - } - Frame { - msec: 4448 - hash: "1945c3f9e3a1337e7d111e15adea345f" - } - Frame { - msec: 4464 - hash: "0e9a056207053ca98c4e9f42de244c62" - } - Frame { - msec: 4480 - hash: "2b418f811992399c3f87c268db745632" - } - Frame { - msec: 4496 - hash: "b14c51977c7fbf51f9cf6fec309bff6a" - } - Frame { - msec: 4512 - hash: "1a0e82029ae107cb2a018786752433ff" - } - Frame { - msec: 4528 - hash: "a11e332de151b43051796e16dbcf75c3" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4544 - hash: "1f4d59a4e4684aab309363a711b30006" - } - Frame { - msec: 4560 - hash: "786e6e8b9e74876a6f393d61a78b8fc7" - } - Frame { - msec: 4576 - hash: "9dc38985113124130e2ca7950e0bd144" - } - Frame { - msec: 4592 - hash: "8f5bfc40c8cdb2f8ce69adb72e7efe76" - } - Frame { - msec: 4608 - hash: "31f6a4adf31be5ed0af0ea4097e3acee" - } - Frame { - msec: 4624 - hash: "59657ee9293c03f064d62de826931435" - } - Frame { - msec: 4640 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4656 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4672 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4688 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4704 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4720 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4736 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4752 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4768 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4784 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4800 - image: "gridview2.4.png" - } - Frame { - msec: 4816 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Key { - type: 6 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4832 - hash: "23aa652a0de7fced4a780d72f0940a1b" - } - Frame { - msec: 4848 - hash: "d46eea049d6156a5e85d9c6811d9d367" - } - Frame { - msec: 4864 - hash: "d5796ae85247cb8502f92f0d044e4e1f" - } - Frame { - msec: 4880 - hash: "90987ac49c1a4e6b668436e3ff631e6c" - } - Frame { - msec: 4896 - hash: "c38d69759ad80242b1fe83ba191cd421" - } - Frame { - msec: 4912 - hash: "09d08aed76a04e492d8a39cc4dd2b8f5" - } - Key { - type: 7 - key: 16777236 - modifiers: 536870912 - text: "1d" - autorep: false - count: 1 - } - Frame { - msec: 4928 - hash: "9671d2ff9a2ef46ce3c750a1965404a4" - } - Frame { - msec: 4944 - hash: "f55857816d666ece4a7987a70883b3d1" - } - Frame { - msec: 4960 - hash: "a2d80527b30316d9120b057bbfcfa666" - } - Frame { - msec: 4976 - hash: "87ca69287c1469cbc7e65d1673016de7" - } - Frame { - msec: 4992 - hash: "51588c7ebbe2dcd87a3c9bebf028aee3" - } - Frame { - msec: 5008 - hash: "917a9a171273fe9fd4c450eeed6f58ed" - } - Frame { - msec: 5024 - hash: "6e7ade250a9a9692caee2a220dd2ac53" - } - Frame { - msec: 5040 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5056 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5072 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5088 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5104 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5120 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5136 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5152 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5168 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5184 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5200 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5216 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5232 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5248 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5264 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5280 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5296 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5312 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5328 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5344 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5360 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5376 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5392 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5408 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5424 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5440 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5456 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5472 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5488 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5504 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5520 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5536 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5552 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5568 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5584 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5600 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 5616 - hash: "ca2dcb16d553889a3a57b48700c2a595" - } - Frame { - msec: 5632 - hash: "c5c9aab9bea757f1c451e89df72bd836" - } - Frame { - msec: 5648 - hash: "a8cf3085f8c3b743f3f15db1ad7b8801" - } - Frame { - msec: 5664 - hash: "c25a92050eced1c304506572723273a3" - } - Frame { - msec: 5680 - hash: "cff981039c1a3eb6c3c1a20f142fbae2" - } - Frame { - msec: 5696 - hash: "930765587fe3355873bbdff66b812b74" - } - Frame { - msec: 5712 - hash: "6a60f97c7b39add465e1bd366e9c644b" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 5728 - hash: "7a1fd3c488d1064a75dc598c9a773291" - } - Frame { - msec: 5744 - hash: "e2ecd7e68e27eb3d2dcb5e368d3ee5a0" - } - Frame { - msec: 5760 - image: "gridview2.5.png" - } - Frame { - msec: 5776 - hash: "20f3aaca2efc3066076e73d1d95e5363" - } - Frame { - msec: 5792 - hash: "b18d476cadc36e22dddc3185f595c123" - } - Frame { - msec: 5808 - hash: "8cbc47555178c8ee355774eab17b4b19" - } - Frame { - msec: 5824 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5840 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5856 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5872 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5888 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5904 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5920 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5936 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5952 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5968 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 5984 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 6000 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 6016 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 6032 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 6048 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 6064 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 6080 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 6096 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 6112 - hash: "e488fb76fb550fba51b95bee3fee80d5" - } - Frame { - msec: 6128 - hash: "8c2fab0c73d1cfbeeb0ec937085d6b3b" - } - Frame { - msec: 6144 - hash: "5d9353517177ef7c6314d8a65cb009ec" - } - Frame { - msec: 6160 - hash: "ed8de504f7e2028cd369c1555314fd81" - } - Frame { - msec: 6176 - hash: "8fe84d8badbe5bd08d097ba6bda10611" - } - Frame { - msec: 6192 - hash: "d77419a55a3cf933505e793bb258e6af" - } - Frame { - msec: 6208 - hash: "457ac82be02e2f5e08e51ccc78c94781" - } - Frame { - msec: 6224 - hash: "e57e2852f065afff9c24c5bc9f29edee" - } - Frame { - msec: 6240 - hash: "f72cd6ad3324936c3a18c264e23e05a9" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 6256 - hash: "a4bf7eae6fc7a05239d09421ae95304a" - } - Frame { - msec: 6272 - hash: "423f3bd07df8bee25818644c07201a3c" - } - Frame { - msec: 6288 - hash: "225e9c698424f287b9458b7839b4479b" - } - Frame { - msec: 6304 - hash: "0f463db7e4acc184a4efb7b5e5c0d397" - } - Frame { - msec: 6320 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6336 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6352 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6368 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6384 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6400 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6416 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6432 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6448 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6464 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6480 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6496 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6512 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6528 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6544 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6560 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6576 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6592 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6608 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6624 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6640 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6656 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6672 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6688 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6704 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6720 - image: "gridview2.6.png" - } - Frame { - msec: 6736 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Key { - type: 6 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 6752 - hash: "b92ad1c3be35c46c0d12bf7701c56f23" - } - Frame { - msec: 6768 - hash: "738f6bcc043d221488285c7e529b1d1c" - } - Frame { - msec: 6784 - hash: "cb0a4e8e79372dd67e8ecfea2143a47c" - } - Frame { - msec: 6800 - hash: "544d1825b36f4e7950c1a62b26c1fd9b" - } - Frame { - msec: 6816 - hash: "df99396622342b4f092b0db34a224c3d" - } - Frame { - msec: 6832 - hash: "47391f51e5df2249a6ca1f1f6e8e80e0" - } - Key { - type: 7 - key: 16777237 - modifiers: 536870912 - text: "1f" - autorep: false - count: 1 - } - Frame { - msec: 6848 - hash: "d8079a874ca18d00aeeb611effcbeb8b" - } - Frame { - msec: 6864 - hash: "4cfd9264af6935aca425da75ebb2d7cc" - } - Frame { - msec: 6880 - hash: "aee6547cb653cd2d56d07285d836149d" - } - Frame { - msec: 6896 - hash: "969720f17eae51258e2e143e14bfa737" - } - Frame { - msec: 6912 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 6928 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 6944 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 6960 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 6976 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 6992 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7008 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7024 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7040 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7056 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7072 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7088 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7104 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7120 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7136 - hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" - } - Frame { - msec: 7152 - hash: "beeaec4b983c970ae448e33047dfdfea" - } - Frame { - msec: 7168 - hash: "7c415ab1b7d8e25b71af75d3eec8ee4a" - } - Frame { - msec: 7184 - hash: "8913037e57b9a6a58b68f2d6e69b1bd1" - } - Frame { - msec: 7200 - hash: "19e59e9409fdaf90ccf75606b58688b7" - } - Frame { - msec: 7216 - hash: "1ae71ef5b1006f637bd8df0769af65a6" - } - Frame { - msec: 7232 - hash: "1f0aa8b368b2dbccafd54b923d8cce95" - } - Frame { - msec: 7248 - hash: "c5079fb25a8c80a995d7aa5fbbd91428" - } - Frame { - msec: 7264 - hash: "59f41220fa5d23db298c9e94f115c17b" - } - Frame { - msec: 7280 - hash: "48259dfe8b266d9e7f50b187be98c3cb" - } - Frame { - msec: 7296 - hash: "f7554552598351c3b8dfcbe3ebc32b3b" - } - Frame { - msec: 7312 - hash: "219e9cd84d7e5c5c0e6cb80100aa3ab5" - } - Frame { - msec: 7328 - hash: "5578e870ee8ce00bce5a59bb25e3d0a9" - } - Frame { - msec: 7344 - hash: "4d9cebbf750c03380694245e0e22ab94" - } - Frame { - msec: 7360 - hash: "a60a8032e97ed0a3caa05012c1283de5" - } - Frame { - msec: 7376 - hash: "3bee20b349a7e9d67f7770ede6da8673" - } - Frame { - msec: 7392 - hash: "d8c34576c25fb8b5e4fa12680ac32e99" - } - Frame { - msec: 7408 - hash: "cd1360aa7db7c3b2f2012dfc44de2198" - } - Frame { - msec: 7424 - hash: "cd82782f63c9a7d21d51b3440c2f038b" - } - Frame { - msec: 7440 - hash: "e59061967a841aa45607c0828b687527" - } - Frame { - msec: 7456 - hash: "01962406c9aaf1aa8bf3ab49e30ddf5f" - } - Frame { - msec: 7472 - hash: "5a5732a568189e598c7985ee806bc67e" - } - Frame { - msec: 7488 - hash: "54775aed3a6283c1fa330d65de5bc70c" - } - Frame { - msec: 7504 - hash: "66640b4a5c1e68924b25de24e3c3f008" - } - Frame { - msec: 7520 - hash: "76999d3125f20ba47dbdff38ee722a8a" - } - Frame { - msec: 7536 - hash: "5159c81533bee8825cff11910bcb90dc" - } - Frame { - msec: 7552 - hash: "ac0295495345987d1e000f6bb2436927" - } - Frame { - msec: 7568 - hash: "d56b4a04f1d2835a0852ea20e8e2f451" - } - Frame { - msec: 7584 - hash: "ae41fe23e2ab508d7642973c0d9d35b0" - } - Frame { - msec: 7600 - hash: "730ca01fbee6ec4928715ec52773c06c" - } - Frame { - msec: 7616 - hash: "ad1fa52c617a2b119d61eb9fb7d58a82" - } - Frame { - msec: 7632 - hash: "c74321a822b515a393e8e218bd45e8e3" - } - Frame { - msec: 7648 - hash: "a9e2f3bee1d47166204c74bdf90cd8c8" - } - Frame { - msec: 7664 - hash: "e10d4bf08980ea7d079a2f359ee62b95" - } - Frame { - msec: 7680 - image: "gridview2.7.png" - } - Frame { - msec: 7696 - hash: "9f0ba6051e684e54ff4e36d980a7e600" - } - Frame { - msec: 7712 - hash: "aa6268d8d7fb3d2b91db3e225e8c818a" - } - Frame { - msec: 7728 - hash: "8e547e55279b1929f42bf51e753f142e" - } - Frame { - msec: 7744 - hash: "5386c71f8d6701379e177f161d714da2" - } - Frame { - msec: 7760 - hash: "a184e9e6012c72fc1aeaed9f98b0fb1e" - } - Frame { - msec: 7776 - hash: "777a6b70ca77c45e2e5e3914cc328dcb" - } - Frame { - msec: 7792 - hash: "424f73f25a1e91126f951838d45adc3b" - } - Frame { - msec: 7808 - hash: "3f7f2eb6b9a5d19fbfcd700baf566dfb" - } - Frame { - msec: 7824 - hash: "c3c4c72b25c2295b82a5fd7454942f77" - } - Frame { - msec: 7840 - hash: "3b35e93d3eb9d28c5c03d6d353f805d2" - } - Frame { - msec: 7856 - hash: "5dcad019a1c0eaaab381a7602e1914ff" - } - Frame { - msec: 7872 - hash: "602a5c569555767413bf445af44c744f" - } - Frame { - msec: 7888 - hash: "3e9facab95dae772f695b6f7c5175063" - } - Frame { - msec: 7904 - hash: "0921220ec36ca7b25eaae699872a2006" - } - Frame { - msec: 7920 - hash: "1d5fa7fd630af62bcc805bdc6686df37" - } - Frame { - msec: 7936 - hash: "165c02de63604aa118d9f8995e6b45af" - } - Frame { - msec: 7952 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 7968 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 7984 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8000 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8016 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8032 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8048 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8064 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8080 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8096 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8112 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8128 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8144 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8160 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8176 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8192 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8208 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8224 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8240 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8256 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8272 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8288 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8304 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8320 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8336 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8352 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8368 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8384 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8400 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8416 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8432 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8448 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8464 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8480 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8496 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8512 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8528 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8544 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8560 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8576 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8592 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8608 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8624 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8640 - image: "gridview2.8.png" - } - Frame { - msec: 8656 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8672 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8688 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8704 - hash: "33d81c39d16c6a326012499796e50e03" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 8720 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8736 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8752 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8768 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8784 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8800 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8816 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8832 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8848 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8864 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8880 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8896 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8912 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8928 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8944 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8960 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8976 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 8992 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 9008 - hash: "33d81c39d16c6a326012499796e50e03" - } - Frame { - msec: 9024 - hash: "33d81c39d16c6a326012499796e50e03" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml index c79e19f..4dac63e 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml @@ -1,5 +1,7 @@ import QtQuick 1.0 +//Currently doesn't behave right, see QTBUG-14837 + Rectangle { width: 300; height: 400; color: "black" diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml index 811e0e4..e27b4df 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml @@ -1,5 +1,7 @@ import QtQuick 1.0 +//Currently doesn't behave right: see QTBUG-14838 + Rectangle { width: 300; height: 400; color: "black" -- cgit v0.12 From efe07823154a1fd1348ddb4951478adace2401b1 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 11:44:38 +1000 Subject: Clean up qdeclarativeparticles visual test update visuals, and add a couple comments. Task-number: QTBUG-14792 --- .../qdeclarativeparticles/data/particles.0.png | Bin 10219 -> 9951 bytes .../qdeclarativeparticles/data/particles.1.png | Bin 13469 -> 14613 bytes .../qdeclarativeparticles/data/particles.2.png | Bin 14051 -> 14056 bytes .../qdeclarativeparticles/data/particles.qml | 376 ++++++++++----------- .../qmlvisual/qdeclarativeparticles/particles.qml | 10 +- 5 files changed, 193 insertions(+), 193 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png index 7321d95..da77af9 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png index 49d2a5a..578c9e9 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png index 6fe14b7..24c6126 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml index 463edf8..3fec1ef 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/data/particles.qml @@ -10,235 +10,235 @@ VisualTest { } Frame { msec: 32 - hash: "43c0ad5826e8058260951f063f0851ab" + hash: "c7eb3936886726f584d1bd99133a199f" } Frame { msec: 48 - hash: "55eb2c9939514338e7ef58c9276fc223" + hash: "f7f6eeab119435f0cccd55074b4941bf" } Frame { msec: 64 - hash: "6a1bbb91bf450547d6100b6e61a98f6d" + hash: "06f52743e61bf0212971652c500fe5d1" } Frame { msec: 80 - hash: "bdb9b8cab70c72d99aba830eb8e8913b" + hash: "1f9dd3a3a0524c60791362f560936f9b" } Frame { msec: 96 - hash: "71a0e046bc68183b830df9dafd8fa147" + hash: "42538495fc9d63384a1709476c06d750" } Frame { msec: 112 - hash: "e7228e0ed77e05c661282c2d2fe88b3e" + hash: "4d1b53541ffe5cdfcf0e3aa2916b1bac" } Frame { msec: 128 - hash: "93a4c3e501b05844f687a2dd1754aad2" + hash: "6a3a683dbd2ad7c89f0788441303485e" } Frame { msec: 144 - hash: "1856ac86313c16bf4874130d9a48ff45" + hash: "125a936660dae42969fab4144d166ac6" } Frame { msec: 160 - hash: "3637d8dad4f44c938f91b0800bd9fb2f" + hash: "87d008547326ff1bf2c4c2a9d9b99abc" } Frame { msec: 176 - hash: "c5ace4ede38d29363d69c6b4b2f9349f" + hash: "0df69d85b37d3ebf0e314a7e89701703" } Frame { msec: 192 - hash: "a5d832d02f4a635052817654df90caba" + hash: "7af12cac3bd33c903d6aa6fa8f89b498" } Frame { msec: 208 - hash: "9ebf8bea8abe7ac209d47214a87f8fc0" + hash: "424c950111c492ded19df874b938067c" } Frame { msec: 224 - hash: "35b8f5cb18284867be8d27d601394a2b" + hash: "bee69a0df1ca8ccc7d83a52f9de34f8c" } Frame { msec: 240 - hash: "a2c4a6063f219af6f2b29b2d21a4265d" + hash: "47da1538d818e22d836de57d5c6601ce" } Frame { msec: 256 - hash: "27f25ace7b8e93c55638ed99f49b821c" + hash: "fbfb0e177b19d6ef9433619f60dd9580" } Frame { msec: 272 - hash: "4f6511bfbbd8113195a7597eb6dfb219" + hash: "23b4f8bb116e8db48db25ccccedba43a" } Frame { msec: 288 - hash: "6a696159cdbb51a67064c600124535d1" + hash: "13f0847f1b86f880690692066cde21c7" } Frame { msec: 304 - hash: "6cd667eb352256dbb728532634e7ffd0" + hash: "639ca4c978bea080139b219c75bf01d1" } Frame { msec: 320 - hash: "28fa16c8936bf86a8426ded306aa2b8c" + hash: "19debcaa7bbde930eda2fd08ac1e9d8a" } Frame { msec: 336 - hash: "061fecdb88733e3e51c5823571bc4d19" + hash: "1d733c5010604bff67138f1eb9881dcd" } Frame { msec: 352 - hash: "f64530f638b3d18d56593e0b7c884f5d" + hash: "b14435e41a3730baff06bb0800157081" } Frame { msec: 368 - hash: "8530cf40739890dc7401fad65a6325bf" + hash: "504b3548c38d50f15235594f3f3d7be5" } Frame { msec: 384 - hash: "0abc555552e7256dbc424b2eac5c95f2" + hash: "4e73ef73c949da579217c1d94139a75a" } Frame { msec: 400 - hash: "64aeae59a8c958dfc62d92636b2f5217" + hash: "5fced44782484b1962368b9c04bf5246" } Frame { msec: 416 - hash: "3e0f50f5bee017220b129d06b2acde2c" + hash: "6ab0cd5c14e1871a35d003574255c1db" } Frame { msec: 432 - hash: "e676c01ff2e35bdfe674be67d49945b1" + hash: "23f5c485fbd0acd607119e93277284db" } Frame { msec: 448 - hash: "bc060b480aab94fd440fd27f5beb7383" + hash: "02ebd53ee0e6ca3605916b05d827989e" } Frame { msec: 464 - hash: "79c79f723de72315e63da8a7cbe1b425" + hash: "99b1d1e72d7da88a7d5d5a7907e1b1f4" } Frame { msec: 480 - hash: "7bf93c2697af75d0f862a47d57cd6a7f" + hash: "b7de7d40263f2811ec51f28f8ff4929c" } Frame { msec: 496 - hash: "7641b9e233f4aabd99bcd985ce1d51ae" + hash: "e64059f850dd4c8642a9883a1c5356bf" } Frame { msec: 512 - hash: "b596a28cb67617d37408bd25d947d088" + hash: "b0aefb8f8d4d970ba4b51d7f77b55cf1" } Frame { msec: 528 - hash: "f2c5cdf15c27b05c0ea97675ddc41757" + hash: "5ab4b1373c233b2342eb66cf9eccac8d" } Frame { msec: 544 - hash: "eae5eb8c41a1d6d75446618518490f20" + hash: "b3726c296d5919a59c32201d857e92b4" } Frame { msec: 560 - hash: "0be5e9a6d857fe1a262524801c69490d" + hash: "70e246371f9cf83b5913f2fc53f6b736" } Frame { msec: 576 - hash: "65478b8c4d932c10924f70462a662254" + hash: "871cd4b99b6d544d487424219e0caf92" } Frame { msec: 592 - hash: "7b034f3c98e8eb38eec11cf3c2aa0804" + hash: "8c002ec15e88220bf12ebaa5a3390570" } Frame { msec: 608 - hash: "5bbc8eed41500ccbc820cfb38794232f" + hash: "21c994a5ad23938a9e873d04bbd4165e" } Frame { msec: 624 - hash: "1b39d555ca8932b40efd769c4ba74d3f" + hash: "1f04a0ed31823cd0817f3e97a11e3a46" } Frame { msec: 640 - hash: "f9a38e12becbce400191e22f1d22427c" + hash: "f163eda68878ae0ed4cac7f941e24414" } Frame { msec: 656 - hash: "cbc27c72517d76edfc2d3692cd83f151" + hash: "560527d6c7fa64a4739f9c79f3eaab8f" } Frame { msec: 672 - hash: "4a883a5aed05f0bbcefcefea6ef56df6" + hash: "df7e7469ff685c4cd822232b1aa66029" } Frame { msec: 688 - hash: "7a30ea30c0619c87c96bcaba916c64df" + hash: "fa92bf73b0737d4ac8bbc16518cd9c2a" } Frame { msec: 704 - hash: "33cd0797b6d229592ed53117fcaaa898" + hash: "bb2f2765ba20b727701352f11ed30417" } Frame { msec: 720 - hash: "21178ef9366c8a65ecb9e21d584573b0" + hash: "4c45617ce77a5869cdbfcfe851796422" } Frame { msec: 736 - hash: "fe75beac8681fdac8a2b79c9c7267128" + hash: "24aa2eabe8d2a4adc5a096dd201a3bc1" } Frame { msec: 752 - hash: "df26a23d394e053417de86309683c5e0" + hash: "2eb5de2524ad38e1dcd44d89b115e75a" } Frame { msec: 768 - hash: "411594a1ed7c351cb872e0a6f3081b1b" + hash: "8b39e542908051b0ab8fbf3cd36f3be9" } Frame { msec: 784 - hash: "b4b639f204cfed9e1fec872e4de115c2" + hash: "a447e9d7c87c90633dcfc550fcf04ff6" } Frame { msec: 800 - hash: "4d801e2f4848399c011d60264720b912" + hash: "c3d1e7753b592bc0d0c3169e3cf08bb7" } Frame { msec: 816 - hash: "4f28c7b154853ff78cdefb5a5ac9d2b7" + hash: "fb20ccb3b36798835fbc1d529a7424ea" } Frame { msec: 832 - hash: "cc6d4283b0d7bf9f579637575d5e1fef" + hash: "ff253670ae78826250b9612cf2a2e1a4" } Frame { msec: 848 - hash: "8edc371d23d01be547990074b5e640af" + hash: "45fb7f71debd3b61062a4165c04c0637" } Frame { msec: 864 - hash: "874845d7178e6cd8369f21379060f561" + hash: "a1542b5bc5e65cdb3f8775cf21b54429" } Frame { msec: 880 - hash: "98fb6d79990775385603fb1a50ab5186" + hash: "a146b5b88875e4148658dd55e162d6f4" } Frame { msec: 896 - hash: "d15539efc27baabb5a74f464b152d266" + hash: "94222050206925d4c9b38da03125cc0c" } Frame { msec: 912 - hash: "fc44d091d6689e8870162a6d29b6d287" + hash: "71a63ace8450029b968723cfa684330c" } Frame { msec: 928 - hash: "a3c964f4bf524e22092b1650df43375a" + hash: "14e4d2af07146133c6a0e87391747c6a" } Frame { msec: 944 - hash: "ca203fd630ec1eadea37cf36bd30ba40" + hash: "e380593e219531620dbca0a8131b4f13" } Frame { msec: 960 @@ -246,239 +246,239 @@ VisualTest { } Frame { msec: 976 - hash: "2e0630818c04fc6c259eec8561c645cd" + hash: "2b33354b9e53eae7ebd5996ae0350773" } Frame { msec: 992 - hash: "a7b1f6305ddcf4a338e1a96ea31a5341" + hash: "0d2871475891f96e1cc4150cbe725d46" } Frame { msec: 1008 - hash: "23a5013a8f9407d06ac6fd0c1e961743" + hash: "b6d064a26c282ce4fd8cba48de0a0f7b" } Frame { msec: 1024 - hash: "9de73decddaab4269bd33efdb21278a3" + hash: "9ad67d9833d749b2b8158abb3076357b" } Frame { msec: 1040 - hash: "7582c26b45dd11c262f51b387af89cb2" + hash: "ce86624a1e055fdb4711dd73be31dc42" } Frame { msec: 1056 - hash: "650e0d395f1d1f2ddda8711089d85511" + hash: "a2c6fc81e1f02477f6ad084acaf12b0d" } Frame { msec: 1072 - hash: "9ff84e81219aa6bb7ab534b2a47a3930" + hash: "bab24924a5ac4cd45c1fa7b5e4ff3efe" } Frame { msec: 1088 - hash: "11e255273e8ca4716047fb52636f0c3e" + hash: "8c8fd3b9cc257dab84df8e88a3e7a001" } Frame { msec: 1104 - hash: "b2fcbefd13db3c765183b1eefc2ca0bc" + hash: "a3f9936dc4e3161d9db1fa39267cda4d" } Frame { msec: 1120 - hash: "7150aff523c0d480702f6a326699cb65" + hash: "d6669c8a47077f665a93587ea3cafe6e" } Frame { msec: 1136 - hash: "63886c15107a2a7d639069cd81c3cd07" + hash: "601dbd220a7f312d4343323ae99e21ee" } Frame { msec: 1152 - hash: "1ec1fc30bbb5f43a1d6d36bce345f569" + hash: "722411ffc1d6740caed9bf1231bc54ba" } Frame { msec: 1168 - hash: "34060cbc31ce1fbf406cbb595312c609" + hash: "cb3bd6f5ee770399e21a07e56dcf28ef" } Frame { msec: 1184 - hash: "6f3a04c7f411785956e640aa630f7ac4" + hash: "1819d6719e6b56b3e673dacf1865272e" } Frame { msec: 1200 - hash: "d7bdb7e170b6f193eaf4b07c01b4dc6b" + hash: "6b6532937a3e37df28b3939cbadc4741" } Frame { msec: 1216 - hash: "6ca02c0d9cfeb4b1932f7ad1feac9850" + hash: "8a065d54600e9ae3c7958f7b71d8432d" } Frame { msec: 1232 - hash: "d446c7b185361de5c615a17ac1fee607" + hash: "2259806ac264b292f5701f34ffac5c35" } Frame { msec: 1248 - hash: "bc2faf5b7b2972f155954e4e685e80ae" + hash: "e4b2a6440df9141616f89cbb6a6ba0aa" } Frame { msec: 1264 - hash: "2bf26cedc76aea4a6d9744b7dd935db8" + hash: "034b74fe5327909214bb5a6e3084edf2" } Frame { msec: 1280 - hash: "accbee9d0f8cf73ef72aa7bfb49b3fa5" + hash: "976fd9bc54baefe8d71002a22706052a" } Frame { msec: 1296 - hash: "933eb2e46f42e212bdfc515d30f663d3" + hash: "45138388ebc6ec44a205934475907b25" } Frame { msec: 1312 - hash: "7495318c893dbb22771b53e93c7614e8" + hash: "01edec5ae6e33b49baee2abe2a59ad7d" } Frame { msec: 1328 - hash: "894fe23c1b3543451293c047b640c4bb" + hash: "9a89ff95df027e53827c5554a28e05a8" } Frame { msec: 1344 - hash: "9b7179ef059ee82ca4a383f536f47a42" + hash: "8d1cd8a1181b7320990b7348b424ce4b" } Frame { msec: 1360 - hash: "5ec1a5bfac2473efdcad7dba0da4015c" + hash: "2366d1ee0c0740f0d19fe2ce1acfe4c3" } Frame { msec: 1376 - hash: "2bd64528e83260a80e7f2843e2c34a19" + hash: "071988963ab2d1a53243e0f6837fecb0" } Frame { msec: 1392 - hash: "16bf64a9bf6b4bc09b108c65d074b5f2" + hash: "20f1e8adef04cea6bcd1511ac47a7922" } Frame { msec: 1408 - hash: "c33eaa717ba63655f375499058b1be55" + hash: "2241def30a3ef54ea82e5fa2b1ef5997" } Frame { msec: 1424 - hash: "d080f4591f9fd59745bf850525590849" + hash: "15365370ac6859f1bfc76e96e603c417" } Frame { msec: 1440 - hash: "921585c88ec133c83c07650745bb4441" + hash: "45edcbeb23c88f62982f9af9a4647f4c" } Frame { msec: 1456 - hash: "f037b28137b22a0c91fc71fc6626475a" + hash: "b7a9c7c44e6f9ff5132d1ad3f6137dc8" } Frame { msec: 1472 - hash: "e10b3c432a230d5509c2fa7df48b56c9" + hash: "8a55b85fdd63ac63c1a566a5c4d92a04" } Frame { msec: 1488 - hash: "ac02c7b7e68ee8cfad1fe556020e93d8" + hash: "e1973b7d557dec08e6375feefb56db47" } Frame { msec: 1504 - hash: "12d59e70dedfa0c741afed9b98cb9a3a" + hash: "a321445212e561de4262228482b0edbe" } Frame { msec: 1520 - hash: "a9aa635ccde26829d7e1cdc29fcce8d1" + hash: "a2c787a576e1f85561c08330b6801e98" } Frame { msec: 1536 - hash: "f571b3da827b884ad036dade8ad2fe37" + hash: "ba84070f0081d4c7a08ebc3204d9aebf" } Frame { msec: 1552 - hash: "1ffa8d7512e9001cbc78b28451133b44" + hash: "4b82a6908ed0caf3cbfd9dc9211ec69a" } Frame { msec: 1568 - hash: "2ef4b10f2eafd71dfde15f7f00e923c6" + hash: "a1dc7c4ad596fc005cf3077ee78406e1" } Frame { msec: 1584 - hash: "09b3bc232a134eae5ae14c0336f508ba" + hash: "53d76884202d4b9ce3874db796705b80" } Frame { msec: 1600 - hash: "ebadb5c6b4986c865f7f8ef232680b7e" + hash: "9f24c090531259f9d83ea97e842c4f14" } Frame { msec: 1616 - hash: "26621991073510e9a95e3b208e3ee56e" + hash: "541c81585a781bab82d4ee95b9f844ff" } Frame { msec: 1632 - hash: "f18e97f13c06f3c5368edf851f19f401" + hash: "73e15141e6c6bfba4a2c820ba96e3f6e" } Frame { msec: 1648 - hash: "3c322dbbf5ecfe1de56595dcb7d949e1" + hash: "0500129b602ab14925aa09a1d9bee3d0" } Frame { msec: 1664 - hash: "50058d1bb992a6d0601c9d5490149936" + hash: "2d45ba5e0e21430f468332c13ce3ee15" } Frame { msec: 1680 - hash: "4cc78f56f13478ec21a4a0d6b22f956b" + hash: "bafd11c210e683d79ac438c5612503bc" } Frame { msec: 1696 - hash: "d765cd86560dff3faa5a3c902512c74c" + hash: "f968f49e6a0674877c55282e5543edab" } Frame { msec: 1712 - hash: "ad983068c2149b0c06da3b89a5d94d24" + hash: "705307529862a3825a0870b294058825" } Frame { msec: 1728 - hash: "e6da7260001771fc00c472bccae641fe" + hash: "a008a501d1dc16a5ffaee325fdd90816" } Frame { msec: 1744 - hash: "71778ad8a61ecb0f78f7234ecf0d1d97" + hash: "5091621481873738658f4d8543582c62" } Frame { msec: 1760 - hash: "6b2209ea5f7f17c2cd868986f0c907d9" + hash: "141216eeb31b5af4ec247bb930169a7f" } Frame { msec: 1776 - hash: "6513c82829ef7e7c9461dcf5b50f675f" + hash: "bfb203e39ab0a9837fc5b9c9b49d9580" } Frame { msec: 1792 - hash: "0172c5bdf96c8bceab25a6c82bdbe527" + hash: "1f2704480af7dd2bb382d13450f34755" } Frame { msec: 1808 - hash: "64b53bf1c1988d3a799b564089f8e63f" + hash: "f3182da7f6202250a6cc2de3e43fcf87" } Frame { msec: 1824 - hash: "a1bdea4771ec9719cfe88f4e827bd005" + hash: "6fa500f5ff387c5801186fb7eced96f4" } Frame { msec: 1840 - hash: "263de376cee2ba7701a7ca116bc1be81" + hash: "1874d59911d70daf098cd053da69127b" } Frame { msec: 1856 - hash: "9795dada7f09d7d4d40df858dea8bc70" + hash: "52a7bcb9a18e8d4a24c2617124b7961b" } Frame { msec: 1872 - hash: "85ea4c63fc31f79423cb509f6c6d4faa" + hash: "f3a7dd26aa4177dbee02d52df664c751" } Frame { msec: 1888 - hash: "c86d8c4460d1e3c2f26b723dc628fe84" + hash: "5180db29e325f00c3940b6a7b8eb8a8e" } Frame { msec: 1904 - hash: "6bf6ef1fd377bfcf0b93baa7f28e1d3d" + hash: "eab16b6ef76e627eff492cdf5d5da9e2" } Frame { msec: 1920 @@ -486,239 +486,239 @@ VisualTest { } Frame { msec: 1936 - hash: "57b8a48bed9375b74391950c28e611da" + hash: "00743f1dceb5d0351a67a237bcf1985b" } Frame { msec: 1952 - hash: "70203655bc832998529071d7f665ecbe" + hash: "85ecf35d439bd4129f8780d8ee561dfb" } Frame { msec: 1968 - hash: "9ab9808d495f907a255d85fbd82491e2" + hash: "785d712b57b3ec4cee6b9e2fcfa1b775" } Frame { msec: 1984 - hash: "297570136b058ba43e883b0aef20d82f" + hash: "77906acfafec6ab595e8dad00373f953" } Frame { msec: 2000 - hash: "0c2f15ce83e2d961ec36299b13890709" + hash: "33722e5c66ee6dfc87ca62a53590969e" } Frame { msec: 2016 - hash: "6d57b6dcb1dbfa35245d79ef36ca49b2" + hash: "7bd3d9e36789b3456c5e098d02341ce3" } Frame { msec: 2032 - hash: "12a71804fd71991706d8a39b676d1628" + hash: "be4af661ca19ca607acf0d8949b58c26" } Frame { msec: 2048 - hash: "f6a9e1b0b498fc576f3eadeb86c08fe9" + hash: "e249df985887229664d3c61c7b01d2ef" } Frame { msec: 2064 - hash: "051c2ed34cbef82d44aec4841a33f086" + hash: "541a01af440e81c7b20fa9df0e85f5f9" } Frame { msec: 2080 - hash: "12b89590b20fff8d6c94dde40a5d6185" + hash: "3579e5a3ab93b8c9998ef812f43ba158" } Frame { msec: 2096 - hash: "7a29cd11ddb042203465a9522ff951ce" + hash: "c2902c8068a48788e5511d2987191181" } Frame { msec: 2112 - hash: "4853f364261ab8e1c9d35cfe42efb385" + hash: "3fc7d417d13cbccbff81c0630cf968f3" } Frame { msec: 2128 - hash: "7149ab3ed649cac9cf662be7c434056f" + hash: "5507fabe77585c38b2929e2565cd8e9d" } Frame { msec: 2144 - hash: "bbe199700474dda156355d31ac09be39" + hash: "73f6a9a1602929b80ba28ac2c8095a95" } Frame { msec: 2160 - hash: "a3f3fbbe844b8c6fb8cb8bbcc17120e3" + hash: "3377ee6818f1fbf15cfe2916ef7328ed" } Frame { msec: 2176 - hash: "e9a04cfe9e8c50f74978fbd4ecce536a" + hash: "4bea4237a5044b9ffbe9815b877a5b96" } Frame { msec: 2192 - hash: "0df1d4211f770cdd7b8a98ea476c6f42" + hash: "f25dadf7b916625f120d3b5fc1602d0d" } Frame { msec: 2208 - hash: "a6837afb43663b9473db2378b1a9f989" + hash: "ba095d86b7ecc9e2ca6c5d6567d6debf" } Frame { msec: 2224 - hash: "691ea67f3b84b8dda449c2a8e86b1087" + hash: "296129caee6a9526aa2c6071fb07198c" } Frame { msec: 2240 - hash: "16d18947637c63662b9a502c493f06ec" + hash: "42abe26548e9eb7a2c63aea7f349808c" } Frame { msec: 2256 - hash: "8f9207d404da08706e150f3b64d0088d" + hash: "2d187394342584568aa24353233f67f7" } Frame { msec: 2272 - hash: "48ad430e38cdc34845a834cfb9ea70ef" + hash: "5c4047c8ca78103d443f9058f3ec3237" } Frame { msec: 2288 - hash: "1252cfb294ae99c40b03dd021160553f" + hash: "05af8a131ec98b5bc60669bfcdee9a16" } Frame { msec: 2304 - hash: "b1d5e752fbe03c95ee0dc7bbdf6fb9f6" + hash: "b486a796a74962d6b5a4e928ff9e6a2d" } Frame { msec: 2320 - hash: "2282cb42ef0c812ba27e33ed0f962a84" + hash: "8bfa5cc3edf294a728bae51014733230" } Frame { msec: 2336 - hash: "42fc82c8d40d383b3cf31a741a4358c5" + hash: "fb5928a74d75f7eb23ed914e12ea2dba" } Frame { msec: 2352 - hash: "368c1ffa2deb1911929f1769e31c8017" + hash: "16c83f70c3559e97c4a28df7e8b94d95" } Frame { msec: 2368 - hash: "8693bdbde404e36970943ac6b650ca00" + hash: "a7f926210d56dc368c99da12a27db42e" } Frame { msec: 2384 - hash: "57609613c336029b60da428d48842a4e" + hash: "9f235f259af00126a3fc2417d399dee6" } Frame { msec: 2400 - hash: "b61dafe9e87421d3fcf8cb9ff0e7a41b" + hash: "2397c99cc1697303bad9fbd029ee63a3" } Frame { msec: 2416 - hash: "c8c34d1d82bef418ef97f52cb9773cf4" + hash: "b83a021c82c203d6cf690edd5fd98c89" } Frame { msec: 2432 - hash: "aa756c09717dc02e81e76511b4c58f60" + hash: "4e9e74f8b115b69b593f0233f9431258" } Frame { msec: 2448 - hash: "96e75c5ce1b5393f6cc46fbbe0a67689" + hash: "2d8f24eea1e87691eb2292bd01756498" } Frame { msec: 2464 - hash: "fb5febae411f43a6cd218b03b36f5018" + hash: "bad7ffbfe4feac5e7a13a70c8096ddab" } Frame { msec: 2480 - hash: "889870fa67784261e7b73b7d0a53324e" + hash: "6869d23bf601c67593f23402023f931d" } Frame { msec: 2496 - hash: "fb124d4ebee6457f2137f07954619912" + hash: "6e4846623fe8b4a1c850729620cd7502" } Frame { msec: 2512 - hash: "258ae87f78805c555e0ed802c5123eeb" + hash: "f679d87f206ca71de191f3991c13f4b0" } Frame { msec: 2528 - hash: "2e730872c37f118a03864d23ebf7bab3" + hash: "7f503ceda23f0e4718f6216c3b4ddef7" } Frame { msec: 2544 - hash: "381386302f210932bc7d44247a48f13c" + hash: "69f01285109c21cbd32a0f17942734be" } Frame { msec: 2560 - hash: "306f8e6d183eb080da3375d65f2491f0" + hash: "f2060324802c080703ff62c051c7cff2" } Frame { msec: 2576 - hash: "39862f236aabf362d0a07ba64eb212e1" + hash: "45d01b58f0812596aff06a09c1167d83" } Frame { msec: 2592 - hash: "57452ecfea80ebd4d9fd23f8efbb34f2" + hash: "688c9931abdaa7225da91cdf7f2beb48" } Frame { msec: 2608 - hash: "64bd12d4f6e32f19abef79289673c2fe" + hash: "d522505f28615cc17206ca6099dbd83e" } Frame { msec: 2624 - hash: "56340d636f4df7e5f68e84c1d8388429" + hash: "ad86d8cee90c1458b64318f3edd94aee" } Frame { msec: 2640 - hash: "795cd97d4be294fa6157f23793861ec3" + hash: "6dda1a6359b421ef7c9ffa4ecd863341" } Frame { msec: 2656 - hash: "4be9fd5314ad6721a0ddf5a5dc51ccee" + hash: "dcc388cdf2b87e10b07e2f05ab6dce3c" } Frame { msec: 2672 - hash: "3349b775c329db022bf0414b9ed57466" + hash: "a5d64264be7778929116c9407548c7f8" } Frame { msec: 2688 - hash: "587b7070836063f9d138c4a4ee8da8bb" + hash: "cc7ac18a25936825d42694a9022b73fa" } Frame { msec: 2704 - hash: "5bb078819bef7695c9af1bd4b544a26a" + hash: "4423af95764aadbaffe3c608fb3a376b" } Frame { msec: 2720 - hash: "799c05999713e8b29f7d2917f515d2c2" + hash: "ad186cd5735531e2e6bfb2fc387dee2d" } Frame { msec: 2736 - hash: "41bb926661acd8e21300f4933734748a" + hash: "d0e7c8071350bac03cf06996b6f74a63" } Frame { msec: 2752 - hash: "2ead23d38a2f1834c7688a9657d9d7cc" + hash: "d012311c64fb35717155ebc88f9940d6" } Frame { msec: 2768 - hash: "196309eac81adea21630dda19947ef5e" + hash: "13111334420c479b6a3ddbde65e2d143" } Frame { msec: 2784 - hash: "cf414b2004712581f11f27890745c761" + hash: "3a77939f35498ef91590cd57c534fb6a" } Frame { msec: 2800 - hash: "6b2a6837da878fa8f3811b2045e098b1" + hash: "89cbc568600c18c3d7163c3079a3f584" } Frame { msec: 2816 - hash: "7390cfdef1d4bc194b86854b1947f15d" + hash: "2a8db5a4cae5258578749a88fbf915ce" } Frame { msec: 2832 - hash: "9e4543fcf65a56edfbcaf46805343071" + hash: "ddd9cef18ce748096869dae9c2e23de3" } Frame { msec: 2848 - hash: "3a886e2ed813eb7d44d0cd67eb5dee31" + hash: "d9e213af096ce69f75863ed7c39b59f4" } Frame { msec: 2864 - hash: "625baed6cbf3a58b32060810be53d0b6" + hash: "69e9bfa09b8f5a1e2d83b77a5c9bc374" } Frame { msec: 2880 @@ -726,50 +726,50 @@ VisualTest { } Frame { msec: 2896 - hash: "484666ad104cee644c6a7e8ec0c4b10e" + hash: "449168c60d6c9f04c94b3c48f27de7ff" } Frame { msec: 2912 - hash: "41abe2e2d92b293407141d0333d7d04a" + hash: "e60ed277794737b9f5d8c4a575f5b300" } Frame { msec: 2928 - hash: "953c03834bd3b50798b77c0c6bb0f4a8" + hash: "5c1a39fa9789064ff0d5ea1fd4c6d187" } Frame { msec: 2944 - hash: "a076463868003c62df3ee5147ffd4660" + hash: "64c1593bf33b85593153ac9eeeb7793e" } Frame { msec: 2960 - hash: "b389b5c9ed31816dd562a8f1332d28c9" + hash: "dab7df26ba23ed3e750fa6080916f177" } Frame { msec: 2976 - hash: "246706829939a2619d64fad63e424fdb" + hash: "5958428d5ab5a379f9bbcc0f86c20d1b" } Frame { msec: 2992 - hash: "d5e644f16bde52c566191a054a1279e5" + hash: "65929536b7b8b48958fab7bd1e3ccca5" } Frame { msec: 3008 - hash: "10b2e99d2e08939b75c24a6bbf481858" + hash: "cb157ba8c58bb7a8ec357e83e82ab441" } Frame { msec: 3024 - hash: "732a7bb0009f394f0039e09594362c75" + hash: "bf36b7c52a3b3b2fb08524131bb4b9e2" } Frame { msec: 3040 - hash: "261f38ce42a8a8c86daadd497ecfad07" + hash: "0d2dbb3ba42cad9e8b5833c97dd0cdba" } Frame { msec: 3056 - hash: "8b66ae6261db386d6c4e88d0146db090" + hash: "f918a9f5fa6808b545c715dffa2f4838" } Frame { msec: 3072 - hash: "dc8dba79e4466059c29725084cf801bb" + hash: "ec11344fb21ee06df6cface390d611d9" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml index b36a220..78ba061 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeparticles/particles.qml @@ -4,31 +4,31 @@ import Qt.labs.particles 1.0 Rectangle { width: 640; height: 480; color: "black" - Particles { id:particlesAnotEmitting + Particles { id:particlesAneverEmitting y:60; width: 260; height:30; source: "star.png"; lifeSpan:1000; count: 50; angle:70; angleDeviation:36; velocity:30; velocityDeviation:10; emissionRate: 0 ParticleMotionWander { yvariance:5; xvariance:30; pace:100 } } - Particles { id:particlesA + Particles { id:particlesA //snowy particles from the top y:0; width: 260; height:30; source: "star.png"; lifeSpan:1000; count: 50; angle:70; angleDeviation:36; velocity:30; velocityDeviation:10; emissionRate: 10 ParticleMotionWander { yvariance:5; xvariance:30; pace:100 } } - Particles { id:particlesB + Particles { id:particlesB //particle fountain bursting every second y:280; x:180; width:1; height:1; lifeSpan:1000; source: "star.png" count: 100; angle:270; angleDeviation:45; velocity:50; velocityDeviation:30; emissionRate: 0 ParticleMotionGravity { yattractor: 1000; xattractor:0; acceleration:25 } } - Timer { running: true; interval: 1000; repeat: true; onTriggered: particlesB.burst(200, 2000); } + Timer { running: true; interval: 1000; repeat: true; onTriggered: particlesB.burst(200, 2000); } Column{ x: 340; - Repeater{ + Repeater{//emission variance test model: 5 delegate: Component{ Item{ -- cgit v0.12 From cbeda35432a347851f9ff842403c168ee742eff7 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 11:53:15 +1000 Subject: Update visuals for qdeclarativepathview visual tests The only difference appears to be a change to the flicking parameters, so the test is still valid. Task-number: QTBUG-14792 --- .../data/test-pathview-2.0.png | Bin 2263 -> 2270 bytes .../data/test-pathview-2.1.png | Bin 2329 -> 2332 bytes .../data/test-pathview-2.2.png | Bin 2279 -> 2354 bytes .../data/test-pathview-2.3.png | Bin 2263 -> 2280 bytes .../data/test-pathview-2.4.png | Bin 2263 -> 2280 bytes .../data/test-pathview-2.5.png | Bin 2308 -> 2311 bytes .../data/test-pathview-2.6.png | Bin 2280 -> 2286 bytes .../qdeclarativepathview/data/test-pathview-2.qml | 894 ++++++++++----------- .../qdeclarativepathview/data/test-pathview.0.png | Bin 2412 -> 2412 bytes .../qdeclarativepathview/data/test-pathview.1.png | Bin 2443 -> 2373 bytes .../qdeclarativepathview/data/test-pathview.2.png | Bin 2398 -> 2404 bytes .../qdeclarativepathview/data/test-pathview.3.png | Bin 2390 -> 2390 bytes .../qdeclarativepathview/data/test-pathview.4.png | Bin 2416 -> 2416 bytes .../qdeclarativepathview/data/test-pathview.5.png | Bin 2395 -> 2395 bytes .../qdeclarativepathview/data/test-pathview.qml | 264 +++--- .../qdeclarativepathview/test-pathview.qml | 2 +- 16 files changed, 580 insertions(+), 580 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png index 18c8a9e..3e1a92d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png index e86acb4..8658d7d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png index 17990b7..f1a56d7 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png index 18c8a9e..e1eaebf 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png index 18c8a9e..e1eaebf 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png index 8636f8f..06e7d18 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.png index fa7c4b6..2c6c5f9 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml index 54ef858..e3baa4d 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview-2.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 32 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 48 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 64 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 80 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 96 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 112 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 128 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 144 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 160 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 176 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 192 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 208 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 224 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 240 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 256 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 272 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 288 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 304 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 320 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 336 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 352 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 368 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 384 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 400 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 416 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 432 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 448 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 464 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 480 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 496 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 512 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 528 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 544 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 560 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 576 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 592 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 608 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 624 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 640 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 656 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 672 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 688 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 704 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 720 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 736 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 752 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 768 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 784 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 800 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 816 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 832 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 848 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 864 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 880 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 896 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 912 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 928 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 944 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 960 @@ -246,23 +246,23 @@ VisualTest { } Frame { msec: 976 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 992 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 1008 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 1024 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Frame { msec: 1040 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Mouse { type: 2 @@ -274,7 +274,7 @@ VisualTest { } Frame { msec: 1056 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Mouse { type: 5 @@ -286,7 +286,7 @@ VisualTest { } Frame { msec: 1072 - hash: "1ed6fa56736cf7cb2f99b5d362974463" + hash: "cffe9de189a5c9bed3d98f8803b47212" } Mouse { type: 5 @@ -298,7 +298,7 @@ VisualTest { } Frame { msec: 1088 - hash: "24f3dd6c49dd8b19cd0c387409405e18" + hash: "e8c46deb6b5f5739e4b95d53619e9314" } Mouse { type: 5 @@ -310,7 +310,7 @@ VisualTest { } Frame { msec: 1104 - hash: "08c828e7fdfba4252fa7a9fb06eb728e" + hash: "11d19a126669227211f399d262bfd8bd" } Mouse { type: 5 @@ -322,7 +322,7 @@ VisualTest { } Frame { msec: 1120 - hash: "b76110faf8520f52128b5e1af8f2b838" + hash: "46d81424418241d7dd98c581491c08c7" } Mouse { type: 5 @@ -334,7 +334,7 @@ VisualTest { } Frame { msec: 1136 - hash: "5f56acb5f39ac291cc8e73c0268df214" + hash: "8674dba6282cd9dd6ca31442f7f996e2" } Mouse { type: 5 @@ -346,7 +346,7 @@ VisualTest { } Frame { msec: 1152 - hash: "840ee0c0d8ea94e22e783a15687f979d" + hash: "efc9e337337267c43b865f33c8912c4c" } Mouse { type: 5 @@ -358,7 +358,7 @@ VisualTest { } Frame { msec: 1168 - hash: "69827007bbdf5a360ccc34a016315113" + hash: "b3fd11ff8cf16bad9fd7e1329add6029" } Mouse { type: 5 @@ -370,7 +370,7 @@ VisualTest { } Frame { msec: 1184 - hash: "2437beb8f9cb39b125611fb186bad820" + hash: "3be61bd51ca152965c0e789a7587fe98" } Mouse { type: 5 @@ -390,183 +390,183 @@ VisualTest { } Frame { msec: 1200 - hash: "df07c389b26fc191234c70b97bfaa432" + hash: "9b02fac96198b587d59b10ddc021dfca" } Frame { msec: 1216 - hash: "8d4e23f4e91d0e0df9d87c3171d5971f" + hash: "505b19e66a416012cc10125381b3e012" } Frame { msec: 1232 - hash: "dd79837aefeabffa7184be07f2a98969" + hash: "eff92d7a9b0962067d5ef97e86a23c07" } Frame { msec: 1248 - hash: "2d9bb2aaf4b882902f090ff0c89053c8" + hash: "74f48d40be0dd93988d01aa18f26ae96" } Frame { msec: 1264 - hash: "b1ec9adbb026d8002a7f16fe9a8d56d2" + hash: "1f8608199813f9c54c426f59290089fa" } Frame { msec: 1280 - hash: "43b23d6e1aeeb36350c3530650e9156f" + hash: "8b4e68ab41bf4e0e23d86c7f99ff11a5" } Frame { msec: 1296 - hash: "03f231597c4d5010ee71c74217f2483d" + hash: "00180bb46496f5b10350071a7f0e1f85" } Frame { msec: 1312 - hash: "8607c7412a5a1b4ea1522f28c465a83e" + hash: "d966232acbb1ecf2339a1df02642dd9e" } Frame { msec: 1328 - hash: "671e80e290bec997eb36320ff76fdccf" + hash: "0235a7aa18d390099e6934971354f878" } Frame { msec: 1344 - hash: "5f6717112bd45e5ebe194e0f87d12be6" + hash: "136159dc7d4775e108c4738b7c1bcc86" } Frame { msec: 1360 - hash: "ca8e33c7a5428d70ae13cb64e5098a48" + hash: "e976f2c7ef3d61c2e200fcc849e9f4cd" } Frame { msec: 1376 - hash: "86e60eb395f66bbaa1ec07b3e07013c0" + hash: "09181b465a9d228006e827b56ec83c1d" } Frame { msec: 1392 - hash: "342fa6ddc02d0a793e97a79ba8882415" + hash: "8b3f884ac343f1272e3d3af6b2b4d875" } Frame { msec: 1408 - hash: "a907fbcc47807d4eb6d66e070ea7f2de" + hash: "419ffc2f8685ea8d1e5232c4440b2d96" } Frame { msec: 1424 - hash: "04838f8b495bed6d050cbe54d00aad31" + hash: "105b3cc7c5b8f07e90a3c3aaa9d78ce7" } Frame { msec: 1440 - hash: "d485534916473ea6c4612230c5a95421" + hash: "6005de2db98dfd9cb8e3cb42a668a6bd" } Frame { msec: 1456 - hash: "1d3da7cc5b9120724645558584f2f0f3" + hash: "2bae12b6d577965a3cd24bb05c4f5e44" } Frame { msec: 1472 - hash: "c271f057d5f1745e910b2b407c52a4f3" + hash: "e74db37aedd78bf1765d0a3b4ed89023" } Frame { msec: 1488 - hash: "050d1814a9ced514db6cfd2732eb76be" + hash: "49511dcf43ce2dbbe4fbafb461189e72" } Frame { msec: 1504 - hash: "cfcd21aadfe3fd611caad83920fb2432" + hash: "21183bde6a5cb1d9769e01630e1b593a" } Frame { msec: 1520 - hash: "472f900ef8eef74522da3338ce7fa93e" + hash: "15bef0512513a0bdef002a4af5e1b3d3" } Frame { msec: 1536 - hash: "f9d892a81c6ba3b9fc4c6e76082d4fa7" + hash: "d46944a859d8be8c3371bf719ffe6251" } Frame { msec: 1552 - hash: "a3febe1c3c4585e25a410a91cc34c1fa" + hash: "2a5249bc1e0eba408654d6500fe22e6f" } Frame { msec: 1568 - hash: "74cd765c9d9a6fb243070b4a56a07e87" + hash: "df860d60c47ea0eae7ed917ce1cd0578" } Frame { msec: 1584 - hash: "469d324abbef017a99bc587bfae622b3" + hash: "90bfd7e58c63e7e2ad647d37a597c084" } Frame { msec: 1600 - hash: "6054ff6e658f0a5f5e313f0a724d9610" + hash: "a400250799ca74b0de5fa0b00ea54223" } Frame { msec: 1616 - hash: "67cee7ebe428c9d35f1f28274f3049d5" + hash: "1943506235c641ee444394b2bf48f2ea" } Frame { msec: 1632 - hash: "ce6c3a1dd726eacbba6306e56121beef" + hash: "ac9dd2d323a513f6cf729890b5b6dccc" } Frame { msec: 1648 - hash: "a7d5f703c98c0c8cd32b189a79e1fd05" + hash: "029cbaec81f7e1251d8de63b8011f06e" } Frame { msec: 1664 - hash: "41cfd9982767ba904843fb73a5a0ed71" + hash: "c0cf823c09a96cf8b6ac063a87f1e5ed" } Frame { msec: 1680 - hash: "388dcde17a820800237d1185372d889f" + hash: "9ed0e1fef6937f5e05b6647b0fb9d534" } Frame { msec: 1696 - hash: "3bd72585388f04d55900ccd345cd576e" + hash: "61b878c5c6db407032c6abb76e49e1b2" } Frame { msec: 1712 - hash: "0e5c63b066f2b70000eca7f3aaa3a195" + hash: "b842458ea2b17501f089c9b5cdd15cc4" } Frame { msec: 1728 - hash: "15199f3e9f00afc76279b5bbffb78d92" + hash: "8a308f9048be4323eb82229b2bcdfbe2" } Frame { msec: 1744 - hash: "596ad681a3b96afbc284e3af5fd173cb" + hash: "5a4e29c2d768a3d0ca319ae7406920dd" } Frame { msec: 1760 - hash: "e5ae2d0245fc5d74c6ea3f7dddd1ca2a" + hash: "b96f98a169e700ccf5c77b42e1143d50" } Frame { msec: 1776 - hash: "0d152716f9ebe5f0fae3f5cabb20630f" + hash: "570b2182f63d4eebc2c9d136636c5c7a" } Frame { msec: 1792 - hash: "74afbfa464b0d19b53432fa4d5ea2804" + hash: "df2bb468c032ce62cc23ac3600123649" } Frame { msec: 1808 - hash: "c8aa3f4738a8c07cdf2450a24c885ce6" + hash: "f6579e334ba34bae43c6fa9bae465e32" } Frame { msec: 1824 - hash: "2e4e0003f1b1cb10593075862b972643" + hash: "b6bba71527e894c0520eb840db66fc8a" } Frame { msec: 1840 - hash: "acea518c7da7330ae78daf5fbfd1a423" + hash: "510afb9fd3812786cfdfb82b7131a158" } Frame { msec: 1856 - hash: "0b8d4ea6947b522c6aa9a32d9f16723e" + hash: "13da41ed3e0e071c1645e71a003a8a1d" } Frame { msec: 1872 - hash: "19f2aef82586817ef574a70865060997" + hash: "c09aabd8c11c6124d97793563b274c7a" } Frame { msec: 1888 - hash: "115565eb0ba3024dbf15d00ed242c389" + hash: "34101fd20242b0b48d056f24f21c8939" } Frame { msec: 1904 - hash: "7e59425c85acf93f5bf55e139c148737" + hash: "34f064cb167b85e79a2f113eb430a675" } Frame { msec: 1920 @@ -574,139 +574,139 @@ VisualTest { } Frame { msec: 1936 - hash: "ce96601476cf55f665bef09bb1b038e2" + hash: "d50eb3d7eaad3d2a825876dcf1f59d91" } Frame { msec: 1952 - hash: "dc6eaacefe37fc709ac0bef99110f796" + hash: "c0c308b9eb3af4c1af3bc7e197696475" } Frame { msec: 1968 - hash: "82ad9b84425bd8e385524cb052a8fdd4" + hash: "67e630b9f050a64645e276695f3d4932" } Frame { msec: 1984 - hash: "608000b44ade998e225010d5ea562316" + hash: "5bb212885448a7506ee6de766ea80a8a" } Frame { msec: 2000 - hash: "ec6b4d519b7bafcf5293c2b5e6585007" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2016 - hash: "9895792ffa929ba6fc600949f11766b6" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2032 - hash: "0d2b27c9ca22520b269f93c90de08df4" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2048 - hash: "78a61e4565db709215b419aa56f6efab" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2064 - hash: "d6f2aebed062d093c00b27a52f0b14b8" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2080 - hash: "21b7a438ad1e835b84e5576e52abbe84" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2096 - hash: "703e32f43e9a71b8677d6839a0eafe06" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2112 - hash: "b04bea8af558de4120723fc5abd0f36c" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2128 - hash: "ac8e91c3b55e058ce8ff08ad6e3af9b6" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2144 - hash: "54846c8c70b232d05ff5eaf144f6f7d3" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2160 - hash: "52281806f5c80512b4bcab7f61139f74" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2176 - hash: "a352657ff34ef8962162c00647df343a" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2192 - hash: "3a0b12d1f8bf5cae8ac06289dd30d52a" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2208 - hash: "2c6bbcd05719f69b9a67be18de2084a6" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2224 - hash: "ab091484522587412b0e8aceeb8987ce" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2240 - hash: "13682b0d45bcbad0f011d08899085b1d" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2256 - hash: "3c5d6f82eafd1b04edfbcbffbdbe2177" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2272 - hash: "151803d70b7c3327df32c8602fcd677a" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2288 - hash: "78613cec5364fe3f0df84188793d8eac" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2304 - hash: "fc05a3cad43af35230c5ba89f6fd13c5" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2320 - hash: "9f826733b300c89eeb80452129505e8b" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2336 - hash: "8565efc5c1fb1bdf5629e3bd495bb611" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2352 - hash: "3b8f6e8c526ab8cce170277c378a5a69" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2368 - hash: "07db3bc0ab19e0ca829e89558bacf1a1" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2384 - hash: "ed8843024c6ac28a8c782839b362149c" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2400 - hash: "381a9f6564c090613aa2cd0476b95210" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2416 - hash: "c3fabd891fa8e27fd71df175db383667" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2432 - hash: "9b441792fdaa9ba9d340fc0c6a9c11bd" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2448 - hash: "3209c9ba69fa016370e3d56e7e1e37a4" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Frame { msec: 2464 - hash: "34da0a01453fbb2571b370257fd35f8e" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Mouse { type: 2 @@ -726,7 +726,7 @@ VisualTest { } Frame { msec: 2480 - hash: "32e6204a07c493d0a0f9f50773fe8f32" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Mouse { type: 5 @@ -738,7 +738,7 @@ VisualTest { } Frame { msec: 2496 - hash: "2a1814768ae500ba9c24bc2e3e4de1d5" + hash: "f9ec9b4de5244e58fbba2f6871e4a61b" } Mouse { type: 5 @@ -750,7 +750,7 @@ VisualTest { } Frame { msec: 2512 - hash: "7cf6e3c52d12d590beafd061979a49cb" + hash: "a123e6b06abaa4dda4645bc174edc6ad" } Mouse { type: 5 @@ -770,7 +770,7 @@ VisualTest { } Frame { msec: 2528 - hash: "c66c36642ab7f6c32b45e27de38d23b6" + hash: "a706a48bce5eec7a1d55fec0df8c4d81" } Mouse { type: 5 @@ -782,7 +782,7 @@ VisualTest { } Frame { msec: 2544 - hash: "6e003380cc6fd303ae3b499863225ba5" + hash: "297edbcda96e508dc9d0d977951c015a" } Mouse { type: 5 @@ -794,7 +794,7 @@ VisualTest { } Frame { msec: 2560 - hash: "a790259cea2c247493be58c6018435b9" + hash: "7d334b1b7bfe3893473b02b49e2e1bda" } Mouse { type: 5 @@ -814,79 +814,79 @@ VisualTest { } Frame { msec: 2576 - hash: "e6cce7468a27b5063821df8dbaa15c18" + hash: "45ba14d15a8fcac259a06dc85a935f18" } Frame { msec: 2592 - hash: "ff8386cbe89aeac184f4a75237ef4a14" + hash: "0119f472e718a8e6bc59a998c18beb7f" } Frame { msec: 2608 - hash: "1a11a90853b025837b991be40efb78f8" + hash: "fb08ca9960ec17a26dcf27de6474392f" } Frame { msec: 2624 - hash: "17da10de7e2d2fcf125207e2873bdee8" + hash: "b209bd311ce16fa9daf612786b7c5f53" } Frame { msec: 2640 - hash: "dfbda435d05903cc3a31f4f8f31e8985" + hash: "d47eb1544d2c417e5b452df6715efe0e" } Frame { msec: 2656 - hash: "1f3753e809099f20c6289f150a096935" + hash: "caf3eeb521fbd0b5f97e99111d4a2416" } Frame { msec: 2672 - hash: "9454afc9d70103e1f1c00eb0ad2ca534" + hash: "5726e2e19aca222de3ce0125cf1def6c" } Frame { msec: 2688 - hash: "860ab90e2421a0c8faab304915b5e6f2" + hash: "7f2ca733f50390284d90e757788c6c64" } Frame { msec: 2704 - hash: "600258507426a8c3c89e3591ee9328f1" + hash: "72eb5d86be5e9b477abbfbfae78261fc" } Frame { msec: 2720 - hash: "0795a607b893da2bdc0970195f3039fd" + hash: "f0a1dda33df6856a02e5668c6bb45aa2" } Frame { msec: 2736 - hash: "e300b9109e242d85537fc3f4461eaf8e" + hash: "55863490cefc48da96a368b95055ac2b" } Frame { msec: 2752 - hash: "dbb84b38e2bda694f210f133dc133180" + hash: "e01c23ac71fd3906a47b4a969ee592d9" } Frame { msec: 2768 - hash: "2455e9de47da4db88eef35fea1dc2abe" + hash: "b45eb0154d405b49c9f7ea1452601b4e" } Frame { msec: 2784 - hash: "5f0c3d7e089c921a68813a48f0fd8844" + hash: "b5bf040d5dbf4f7cf8c5a0dc3d6aaea1" } Frame { msec: 2800 - hash: "e6d9e7d0fdc724a6a1804bc94629cab4" + hash: "c171c81a12d4971f33154e52f789967a" } Frame { msec: 2816 - hash: "d177183bcbaa27ad061fd88bd037277d" + hash: "fac8265a6d744a11120a0d434821d8b4" } Frame { msec: 2832 - hash: "78dd13fa6367abd14374462d89a3d066" + hash: "2b6b1f9aa8aa32c9e48579d215e31268" } Frame { msec: 2848 - hash: "41d12e4c362ccc99a1a04b3a09f0e68c" + hash: "8455997dc106cd5d386eb3cf3703828c" } Frame { msec: 2864 - hash: "5112700bf72aacb176e63ef054fce244" + hash: "c6525e8ee9c7ac6fa4d0c8d6dd4e1745" } Frame { msec: 2880 @@ -894,239 +894,239 @@ VisualTest { } Frame { msec: 2896 - hash: "0257e67512c62ffc42a272fd304e4ed3" + hash: "bc501c449f5d8b7de40b27204c5344a4" } Frame { msec: 2912 - hash: "42cd0a98aa0f3768cf77aac284072fa9" + hash: "fe850b5232c819a9171d0b93aaf5e811" } Frame { msec: 2928 - hash: "811d27f89b0c434fc49e4280f85c2f27" + hash: "a54d819719aeb80392e5b6ffbc25dea0" } Frame { msec: 2944 - hash: "887406c50c666d08e4d98c040efae9a5" + hash: "8479d90984fd9f619b86529231b840fd" } Frame { msec: 2960 - hash: "27e10fa9d82920c7f761465501d44564" + hash: "6bfa9782e64bfc0041175073aa2bbb80" } Frame { msec: 2976 - hash: "ba67dbe0010ba2aae3ca100886b11553" + hash: "8df19b6bd14c7e1f014dfdb4cc887263" } Frame { msec: 2992 - hash: "8064db575e2c74c0faf7782adc527a08" + hash: "02dd88bf2766c756b840bea3e6f7dd80" } Frame { msec: 3008 - hash: "b7fd5446ad957610ab853e0c597b9a36" + hash: "edf9f3ca4b85ffba5ca051d96b1b3b64" } Frame { msec: 3024 - hash: "092b53eb50e91d74db7899328899cfd3" + hash: "7da796da178c888018981d7dd39b3784" } Frame { msec: 3040 - hash: "0346065ad603b41db9365987ebe81586" + hash: "d4b850c173169ec184634bb2001e3f3d" } Frame { msec: 3056 - hash: "705083f27a338fea544c9806f0d8fcb3" + hash: "37afe96e32df2ac6031d70fe9ded7d56" } Frame { msec: 3072 - hash: "fc29b4888e26deec4c983e487b9bd058" + hash: "7a0f09bc5d91c4295000d39c97b31d76" } Frame { msec: 3088 - hash: "0ff734e0509908eba292c1814f677e5b" + hash: "afbbb94bc89ef4f9e321dd2c391d0af1" } Frame { msec: 3104 - hash: "7181d9011ddd3ad49ee95fac2e146b12" + hash: "93c4ff33449244b76103f0d35cc7a9e1" } Frame { msec: 3120 - hash: "4478b07b0331bb30e60f23ee74475f73" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3136 - hash: "514aa7a4b1230ae1701004f479eeb5f2" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3152 - hash: "56e51f8f36e0f1a5a4b6b21c41151375" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3168 - hash: "f58216f12e507a91482ded5372f960c7" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3184 - hash: "18e8675ca5ea7ade7e32b29f1632e1ff" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3200 - hash: "13ec0166cc7dd82042e596739c598a1e" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3216 - hash: "5cebf9afa912b17ac3161619d238e5da" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3232 - hash: "f096b191e347b7e2eab51b6adc1a5aac" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3248 - hash: "81cffc13a615ab673172912760863c08" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3264 - hash: "e89c7acfc07bc0eb6e9740d545400064" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3280 - hash: "e681f06f57d43a38acb29a3cb45e4384" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3296 - hash: "945bfe7808fb620dc3f7ad887183244c" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3312 - hash: "4d1fc53701adce4e4af87c32e6c5a8de" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3328 - hash: "c42bbf27e800558fab33bc6e9a0f36b9" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3344 - hash: "5f48f59812b17a9be466f0601f0ed0df" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3360 - hash: "f3a3f645115077b7aeb66465280b7a16" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3376 - hash: "d1c295b2157001ff1020515f4b2aceaa" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3392 - hash: "e5f364e0e4bd75dd04280f6b6f48b8ba" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3408 - hash: "f439df4b5907ba0201c0dad934115721" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3424 - hash: "2e7eb0e999792f3aa87c63865f68d26b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3440 - hash: "45d3ccb3b03adc8323445207d2dca502" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3456 - hash: "c345f92a25406e33256bfe47dc7f72f3" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3472 - hash: "dcb2663d27d644c0b50aa7386aa9d488" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3488 - hash: "ebe4b9eaf39676bcdd968f8517efa222" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3504 - hash: "deb3e3e6fdf8fe18de907f88822538e8" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3520 - hash: "30e8ab0e6cf32a45190c4b29e458d858" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3536 - hash: "059e6f57c2c78a25ab8b515c878231f9" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3552 - hash: "fa7621f338ae187edac5cb69b22e64b3" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3568 - hash: "bf287cbb0963fc8e575cd95808e1983d" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3584 - hash: "741dc09e0ae13d6afbdaae701cb699ef" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3600 - hash: "8dd52007df5585aed4b9737a8314a74d" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3616 - hash: "ddcd945a3a4467d8dd0b7a4197aafed5" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3632 - hash: "015deb5f228fa2f77978315ccca4f4c8" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3648 - hash: "e1c960e966873e694837fd98f231cfcb" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3664 - hash: "17a177d37b427d9488e36d19b345a397" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3680 - hash: "d4aded08d04f79d50536ecf539c0583d" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3696 - hash: "72890e9b84acf9df6083e23ab9270da1" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3712 - hash: "313859115de570f8d41f67c4db7cf49e" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3728 - hash: "98918d73b6d6b375db53470dd72c7b35" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3744 - hash: "ff706517a4d257747893c11a3b059926" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3760 - hash: "73e62664a31232c1a349568c8da6ce64" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3776 - hash: "bed046c6eae90d267e859cd76d3eacfb" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3792 - hash: "4643348fc1b47f0d3244e7e717247953" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3808 - hash: "0305bfc35b5618da19e9eabb3c1b5d2b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3824 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3840 @@ -1134,47 +1134,47 @@ VisualTest { } Frame { msec: 3856 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3872 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3888 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3904 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3920 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3936 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3952 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3968 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 3984 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4000 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4016 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 2 @@ -1186,7 +1186,7 @@ VisualTest { } Frame { msec: 4032 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1198,7 +1198,7 @@ VisualTest { } Frame { msec: 4048 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1210,7 +1210,7 @@ VisualTest { } Frame { msec: 4064 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1222,7 +1222,7 @@ VisualTest { } Frame { msec: 4080 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1234,7 +1234,7 @@ VisualTest { } Frame { msec: 4096 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1254,7 +1254,7 @@ VisualTest { } Frame { msec: 4112 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1266,7 +1266,7 @@ VisualTest { } Frame { msec: 4128 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1278,7 +1278,7 @@ VisualTest { } Frame { msec: 4144 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1298,7 +1298,7 @@ VisualTest { } Frame { msec: 4160 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1310,7 +1310,7 @@ VisualTest { } Frame { msec: 4176 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1322,7 +1322,7 @@ VisualTest { } Frame { msec: 4192 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1342,7 +1342,7 @@ VisualTest { } Frame { msec: 4208 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1354,7 +1354,7 @@ VisualTest { } Frame { msec: 4224 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1366,7 +1366,7 @@ VisualTest { } Frame { msec: 4240 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1386,7 +1386,7 @@ VisualTest { } Frame { msec: 4256 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1398,7 +1398,7 @@ VisualTest { } Frame { msec: 4272 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1410,7 +1410,7 @@ VisualTest { } Frame { msec: 4288 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1430,7 +1430,7 @@ VisualTest { } Frame { msec: 4304 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1442,7 +1442,7 @@ VisualTest { } Frame { msec: 4320 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1454,7 +1454,7 @@ VisualTest { } Frame { msec: 4336 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1474,115 +1474,115 @@ VisualTest { } Frame { msec: 4352 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4368 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4384 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4400 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4416 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4432 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4448 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4464 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4480 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4496 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4512 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4528 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4544 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4560 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4576 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4592 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4608 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4624 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4640 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4656 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4672 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4688 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4704 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4720 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4736 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4752 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4768 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4784 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4800 @@ -1590,147 +1590,147 @@ VisualTest { } Frame { msec: 4816 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4832 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4848 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4864 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4880 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4896 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4912 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4928 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4944 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4960 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4976 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 4992 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5008 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5024 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5040 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5056 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5072 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5088 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5104 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5120 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5136 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5152 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5168 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5184 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5200 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5216 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5232 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5248 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5264 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5280 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5296 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5312 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5328 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5344 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5360 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Frame { msec: 5376 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 2 @@ -1742,7 +1742,7 @@ VisualTest { } Frame { msec: 5392 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1762,7 +1762,7 @@ VisualTest { } Frame { msec: 5408 - hash: "754f9689239e6154a762a6a1e9e0131b" + hash: "5e21e09fa0ec2b1e9f29be60100c40f2" } Mouse { type: 5 @@ -1774,7 +1774,7 @@ VisualTest { } Frame { msec: 5424 - hash: "ba4e61f8de7f078cfc1e5fc8dd3c65f3" + hash: "d269b601f6c58e4349a5bc41ed8040cb" } Mouse { type: 5 @@ -1786,7 +1786,7 @@ VisualTest { } Frame { msec: 5440 - hash: "00389598468dbd1a90cada9543715770" + hash: "b5fb0c0e78b48380e5d9dd82be64554c" } Mouse { type: 5 @@ -1798,7 +1798,7 @@ VisualTest { } Frame { msec: 5456 - hash: "ab020b76bc23554e176bd3a59712c3bc" + hash: "86699ae4ad4491a39272704aa8d2be0a" } Mouse { type: 5 @@ -1810,7 +1810,7 @@ VisualTest { } Frame { msec: 5472 - hash: "96483c5c51cc851c55166b13617b12ea" + hash: "f7ad9df8715594e9012d9e6ba61784ae" } Mouse { type: 5 @@ -1822,7 +1822,7 @@ VisualTest { } Frame { msec: 5488 - hash: "1ad679d1400a0f185a380a75840c6a50" + hash: "5d50347997afcdd437e8f5b1afd5fdb6" } Mouse { type: 5 @@ -1842,7 +1842,7 @@ VisualTest { } Frame { msec: 5504 - hash: "b5ed338d402d16a831c0595311350789" + hash: "40290cb6417848caf299aac419e78b3e" } Mouse { type: 5 @@ -1862,63 +1862,63 @@ VisualTest { } Frame { msec: 5520 - hash: "bf51ff7b6f264170d9c5700559e03262" + hash: "cdd32a53cd968afc378069fa7fc08fc1" } Frame { msec: 5536 - hash: "0d62681e661aad7b67b880e13afeb4de" + hash: "2f0e8c2f895506b3d484da3024c0e823" } Frame { msec: 5552 - hash: "3371739270c458d4ce8a08f2e12d4ba5" + hash: "e97ab47515d55760919b4319f7aa2f4a" } Frame { msec: 5568 - hash: "db271b0ebfa0172d8386ac9afde9f296" + hash: "e8698483768d3cf121985ffce93c89e0" } Frame { msec: 5584 - hash: "d64c064ab483c9636b2736c67b2b1a48" + hash: "75f23e628458b6abce65873777ec2226" } Frame { msec: 5600 - hash: "20a8ccb0ff1c0d5ff606b343f1a32bff" + hash: "5477a54c2c2fd9de2b76a82fb8c9c371" } Frame { msec: 5616 - hash: "5547bb0a4d6b51733829597b9d8d141a" + hash: "c20f1a85cf8166664b1dc44986fc7f1a" } Frame { msec: 5632 - hash: "1135177a5cb24aa11372653985599775" + hash: "44f4b02055397a06c628564d9f2180f3" } Frame { msec: 5648 - hash: "5031ea6ca8ec59155edb7c1f10f77925" + hash: "09d79da372ded40a24d1fdc0d5d97fa6" } Frame { msec: 5664 - hash: "7c5c1015af23f32c002a24a880201883" + hash: "7fec934dac44b7365ef110fc9fa2ff0b" } Frame { msec: 5680 - hash: "c1dd3ad07775d74d2e81b830d07543e0" + hash: "d9f6e4e21629626f9f3fbdf879173147" } Frame { msec: 5696 - hash: "ad6651f644be3c6f1ebf340809fe516f" + hash: "674967f6494a5aa45f4344142f54145f" } Frame { msec: 5712 - hash: "1eb69541ae67d9d9193b86a6592de4c2" + hash: "59090ec0960776ae02deb8f2365848a8" } Frame { msec: 5728 - hash: "c9c40ec693a421243804efb8f99707f4" + hash: "6ced1eb439584cd55d7ea83b4c6ad89d" } Frame { msec: 5744 - hash: "832884a5102069ca085001156a04e74e" + hash: "2f93341754e279408ebe9389987d6354" } Frame { msec: 5760 @@ -1926,239 +1926,239 @@ VisualTest { } Frame { msec: 5776 - hash: "df0c7d73069e1087d34c7a703197cb2a" + hash: "6ecfb56d8e685d6e251938ecc740a0d3" } Frame { msec: 5792 - hash: "4a8e1f548e48b86140aa1a5fa8b17bd3" + hash: "eb3254187a72afde5091eb240f1ce043" } Frame { msec: 5808 - hash: "f79f47e3a0c16a1361fa287a594c4673" + hash: "cc367bfa5264fa7539d26ca7f2b81300" } Frame { msec: 5824 - hash: "c26da5ed2e4055f5c172b48163560143" + hash: "6a869340f179e768d271b28fd8983c1b" } Frame { msec: 5840 - hash: "0e971cd0c2e25d52b689d4b22509a7d9" + hash: "e22f23a5d5e55eed1e74414dfd4da00f" } Frame { msec: 5856 - hash: "40bae0ef35772c476cddccc034b7c872" + hash: "c6b0c88158ff5052bb3e8ff4c46fa0f3" } Frame { msec: 5872 - hash: "ce1fc0faae5e313bc21e024dac3097da" + hash: "8cebf630fa954c5a3be2b26b29597379" } Frame { msec: 5888 - hash: "ba614972cec0e9fa47cb09f1ba77eefb" + hash: "60bc980648f99ca37a80bff2e462f2f6" } Frame { msec: 5904 - hash: "2266ae29490ae01ff8a2329956c124a7" + hash: "8c3db2a7a7314931a5553408f41551af" } Frame { msec: 5920 - hash: "debae0194926cb5af0a8f7fdfb7f08b8" + hash: "97323491971e95f6d09c83afbcadcbdc" } Frame { msec: 5936 - hash: "10a7111367cfcbe24063b9ee6975e4fc" + hash: "9abecb040056c3d07614c1d0253d08c6" } Frame { msec: 5952 - hash: "3c0f9e0603e33506f31ff6569d007b97" + hash: "b3efc154d193cb69f074c511918f4976" } Frame { msec: 5968 - hash: "69d92abce3f093cc7610bd715a7396fa" + hash: "e8fd8d8ebfb33d0f7c7717f89dec87b8" } Frame { msec: 5984 - hash: "befad9882a6af920684d94c74d8d7f78" + hash: "fe9eb2c5b292db6fedbdacb4e31b8d9c" } Frame { msec: 6000 - hash: "10632052ac53504bd36687ba7aa7ebc1" + hash: "6e86cbefdb523a7153019aa6c3bdee40" } Frame { msec: 6016 - hash: "af4053320c12cbcc6f0e7e321dba1c83" + hash: "142b81c3de5c7140680f6c0ed77e7a55" } Frame { msec: 6032 - hash: "4560c5fcef9d630d744e80dc46947b9d" + hash: "cfef661007ee19ef6c39cc784f3e8369" } Frame { msec: 6048 - hash: "012ee780ed98131321aaa241a2599c5f" + hash: "1305eafc2ffd60605274e043829bce0c" } Frame { msec: 6064 - hash: "25d3fb9d44bc2be3b86a5451d8ffaec2" + hash: "3c6d2fc8364dd9e5e0409cc6f3d16e78" } Frame { msec: 6080 - hash: "09c5cbff81a5c9fae40ec29b936ee52b" + hash: "e1eb0c51700d3b5c56cf8555d9eb8cf6" } Frame { msec: 6096 - hash: "27a0b1d2ea2fc8729e5542c6462c1815" + hash: "9778e7a92f9223f4a8b01edab2627c94" } Frame { msec: 6112 - hash: "c6f347c942aed190ebee077b5bd0888c" + hash: "7616da76832eace7846df67ff29524bd" } Frame { msec: 6128 - hash: "029d78844bd72acb310bd2887489bdf0" + hash: "f7bf509b2764a44227e1b6ebbb6bcabe" } Frame { msec: 6144 - hash: "3af16ab398f1515e90e81460ac061a74" + hash: "a2efece1011c7f90872154242db70d46" } Frame { msec: 6160 - hash: "0151ca050722645e2899919f79f6aa0b" + hash: "f77dbceb3f26533f2f795ea16116a880" } Frame { msec: 6176 - hash: "eead61dfc1851bc9fba3b4bca510af6a" + hash: "8874effc7fa1455c658490f42aad0046" } Frame { msec: 6192 - hash: "da822098c606556ad8683316f5a821ab" + hash: "6d8e2a8c79eed4edbc7a1005fd7e85fd" } Frame { msec: 6208 - hash: "ee47fc2bcf2264f5799a76308fbf2b65" + hash: "7d0f33ce8f934f0d4bfd6ac5b50bc0a6" } Frame { msec: 6224 - hash: "81b208b84ca887d35cda79b5c0e4cd4e" + hash: "1aefde7dbbd6ca7f57637147bfd7a664" } Frame { msec: 6240 - hash: "fd52ccaddcb79a2dfa12bb57640a3610" + hash: "524fa1fc729a033983817fd9591dff09" } Frame { msec: 6256 - hash: "b187e8fcd0a777657a733c260aaaf557" + hash: "c5559eb1e5bb5d2ab20888831a3924a0" } Frame { msec: 6272 - hash: "2cfe47a86bf9df3704002288b6249ed9" + hash: "e5e78ff025bfa205f6ad243484122ec1" } Frame { msec: 6288 - hash: "b79b81706f62789a15557ac1a017addf" + hash: "b3a4e501838e7c44f9b0e21b263922a3" } Frame { msec: 6304 - hash: "77a84eb447fe7034783678f6903ff76d" + hash: "c35ddb641840b7d7a100e074aab82bb8" } Frame { msec: 6320 - hash: "82529385d3072812fa737193914ece1c" + hash: "1121ff859d3a120efd8d3f6b307d2f5c" } Frame { msec: 6336 - hash: "a7ccfa6c8aebf2016f2f12045d2f1abe" + hash: "2be325c442cfc17ae7b722add60170e1" } Frame { msec: 6352 - hash: "486d38e7ea6a5cf13f2ecd1c6919ece7" + hash: "c3e86d4a73c739c159e71255ca08457e" } Frame { msec: 6368 - hash: "6c5bd377d2289ec88f969e961f1dcf65" + hash: "fc56984eb2c3c9db61a54edcfe67f36b" } Frame { msec: 6384 - hash: "92e20565fbcf8c7c9a67726f3a0dd41f" + hash: "477421a20f47af33b4272fd8f63718bb" } Frame { msec: 6400 - hash: "0fcd995a26262b875440d0d9f03d16c4" + hash: "dee4659125ff750159c5b5ec0acd6a99" } Frame { msec: 6416 - hash: "f679759eddca739764bd2816ee53ef31" + hash: "31dce66ad26dbcee6f1515dd43a94354" } Frame { msec: 6432 - hash: "adffd1da9b750df3d9f48820a2235c0b" + hash: "25c4478c27d808b85746cd65fbb1f93f" } Frame { msec: 6448 - hash: "e0f8730acf7a6802ade228f95d700c08" + hash: "f9094ea959b54b92a6d39db6cd9b5f10" } Frame { msec: 6464 - hash: "2c5209c3715bb9f39ac23a8b32a17ef9" + hash: "47f1d0f234073353ca233206c2872093" } Frame { msec: 6480 - hash: "741694ef4cbd3477a8e13ba89fc9d607" + hash: "3a6cf2c77f1ae99977f2ed0b4683aecf" } Frame { msec: 6496 - hash: "e88d6a61acb3fde6b441c2e718a0c2fb" + hash: "df203035dbd68ffe2c9dc532061e7927" } Frame { msec: 6512 - hash: "b91863800e6ab967616d68def388d5d5" + hash: "20f69f8e32fd217967feb9a955e27717" } Frame { msec: 6528 - hash: "4c28a99236c351a2e3e3301c0b5bbba8" + hash: "0bd932d1953ee28c38a359ddfb0c2075" } Frame { msec: 6544 - hash: "6affb524d7f63fef94d29629a148be04" + hash: "0c6c75cca96a1d04c9b60d9bd1543318" } Frame { msec: 6560 - hash: "f7823d25adf673117f010738d977b787" + hash: "9b4c8f6cf066800c1f2bb07357fc2e0d" } Frame { msec: 6576 - hash: "dfb930f3db30ec53c8e9a1aa5d9056e4" + hash: "eb861eb18ddb237cd11d24e101be83d1" } Frame { msec: 6592 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "086db75c06bf1fb1f527f5c8e6255d02" } Frame { msec: 6608 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "e807b1166ca3f658c780b1fef8400b8d" } Frame { msec: 6624 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6640 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6656 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6672 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6688 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6704 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6720 @@ -2166,138 +2166,138 @@ VisualTest { } Frame { msec: 6736 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6752 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6768 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6784 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6800 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6816 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6832 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6848 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6864 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6880 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6896 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6912 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6928 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6944 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6960 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6976 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 6992 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7008 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7024 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7040 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7056 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7072 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7088 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7104 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7120 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7136 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7152 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7168 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7184 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7200 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7216 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7232 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7248 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } Frame { msec: 7264 - hash: "57269234dc01b66f6aeb841c328c06b5" + hash: "a9c65a178a4b4598705bf736c0b1b595" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png index 16a7e10..d94ea19 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png index 116ce88..df940df 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png index 13896d4..d10afe1 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png index 5d18003..8f99617 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png index cd3387f..18b1c09 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png index 9f31c69..e15d688 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml index 06d32b6..949807d 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/data/test-pathview.qml @@ -246,7 +246,7 @@ VisualTest { } Frame { msec: 912 - hash: "1c2d4a99e7e2f5e945c05857d6a463a2" + hash: "01b9c877f51b878ed262943aedcf89b4" } Mouse { type: 5 @@ -558,79 +558,79 @@ VisualTest { } Frame { msec: 1616 - hash: "0b3782e842a6c54585d6a266314025d8" + hash: "64c0ba48b59addcbd9dc2a36c24b3070" } Frame { msec: 1632 - hash: "02409885b82ebac931df18d8e23238d7" + hash: "5ce463d514a776055897052defbae117" } Frame { msec: 1648 - hash: "edcbd91ad267c125c431367be3e4a8a3" + hash: "16b25853ec30feee97c3f11a0ea5767e" } Frame { msec: 1664 - hash: "47641fd7ec919b3c041c5acc04b0d083" + hash: "55cfc9179923c935a44de0fee69d74ce" } Frame { msec: 1680 - hash: "ea8f026fee0fba2c27a8df1e1e531acb" + hash: "47641fd7ec919b3c041c5acc04b0d083" } Frame { msec: 1696 - hash: "e2e8a398760be380f9b2b7dbcb03c0e8" + hash: "466eedb320beed99d7eba5a71095438a" } Frame { msec: 1712 - hash: "a1767f2e10f9ab87050ef246a4a29bbb" + hash: "a7520215940ca21acd148ca88c0fec62" } Frame { msec: 1728 - hash: "f60cccf793bd6d356d69b1394638a201" + hash: "f5c8bff5c3305064dbaa777707994de3" } Frame { msec: 1744 - hash: "31dc8c50a99164c19445a089223c8813" + hash: "95b37e22bb68634029e18bcef7e9502c" } Frame { msec: 1760 - hash: "78ff726b7da5ba03fa74f66b39bf1006" + hash: "f60cccf793bd6d356d69b1394638a201" } Frame { msec: 1776 - hash: "6f8a540dccf7182f6aed8903a0afb109" + hash: "d77a5c2553e9391c14a49dba951ae236" } Frame { msec: 1792 - hash: "c914c500507b9c7180dcf25e985135e9" + hash: "0bfa2f6e5fa25a9847c2515de8ad53bd" } Frame { msec: 1808 - hash: "39702ce38bcfca46ef3a8dbb7299c725" + hash: "202c077b20213814545ab594987b3c46" } Frame { msec: 1824 - hash: "969b71ee88a1d244e62af1cecc105234" + hash: "32c5d1644c4f6a3386b4300b1dadae2e" } Frame { msec: 1840 - hash: "11c8397fb9d7b993761b08ba8c9958e5" + hash: "c914c500507b9c7180dcf25e985135e9" } Frame { msec: 1856 - hash: "79ad4a90ab449e3232db993b30786d89" + hash: "62095b2214425007cb19a6218819ed21" } Frame { msec: 1872 - hash: "daf979fd50e0860bf30f377a059d89dc" + hash: "06d25e03eca85906c93d60b7c80b353c" } Frame { msec: 1888 - hash: "5412e7524dc22e8064c8a8c684092802" + hash: "605992eb3f636b705b4b6dd7dfbe1a5f" } Frame { msec: 1904 - hash: "2c3bea8bf10ecf6c19b93e94cb7ac0ea" + hash: "3241ccb6da86acc69bb07c044ba5bade" } Frame { msec: 1920 @@ -638,15 +638,15 @@ VisualTest { } Frame { msec: 1936 - hash: "bbfa2f8aaab0abaff9d771d5ec546d96" + hash: "f09fe53cd6698a94d1626df1a1e4079b" } Frame { msec: 1952 - hash: "be2811bf369bc9dd8c5d9deec3b84788" + hash: "aff96cfa2f88f1f2ce6af5e6a838fb79" } Frame { msec: 1968 - hash: "779838915f48eb917d36c3f2b65eedae" + hash: "dddc255c053608f6b199cebb40e164bc" } Mouse { type: 2 @@ -666,7 +666,7 @@ VisualTest { } Frame { msec: 1984 - hash: "d20b5fe14b47dfb1e73f8ef44802da11" + hash: "345864eccf0b48f94097c9e0f037d71d" } Mouse { type: 5 @@ -678,7 +678,7 @@ VisualTest { } Frame { msec: 2000 - hash: "5312dd1f9d309ab5134b8bb67685488e" + hash: "05e9776009f78d5466473c67a900e74d" } Mouse { type: 5 @@ -698,219 +698,219 @@ VisualTest { } Frame { msec: 2016 - hash: "8d6b6cbb74cc654bc5aff10a807dd3cb" + hash: "3a2bca372b5e492d71c73c945851a616" } Frame { msec: 2032 - hash: "dee717869177d1de4a26599b120f1c3d" + hash: "f7957d18f0fc7421f7109dfc5debba3a" } Frame { msec: 2048 - hash: "2b2c60f42024784ceed5c68505dfa5ca" + hash: "cdd2a73b65b60991f1a3671cc668fa0e" } Frame { msec: 2064 - hash: "1a6a108fd6cf607ec08dbedd804d12f7" + hash: "d1646d66d0726f163cd32d4e985da46b" } Frame { msec: 2080 - hash: "10bc4d0a1dc400fedc9a68b68c6525fd" + hash: "1d2ea750a691ba78943c8e6e1a950017" } Frame { msec: 2096 - hash: "dc6a4abfbfb38e90af2308320d0f795b" + hash: "c372a639a59e7cb1f5573de540dd0dcf" } Frame { msec: 2112 - hash: "82c61d8461001c19af7c2b458d427e0b" + hash: "964fc74c67a84cb84516389c57468ada" } Frame { msec: 2128 - hash: "e455d9ccffedaa708532bb69ad15871e" + hash: "7310eb82821b9c209dd9e54d7b8d2e61" } Frame { msec: 2144 - hash: "b9c6169ad08724fc70df30668dfe7509" + hash: "55b62e5afa61e8acb4faf97f7c2b1aa5" } Frame { msec: 2160 - hash: "a3fe5862be470470854d4157c1c027db" + hash: "4a9994d898380369eb705efb52839402" } Frame { msec: 2176 - hash: "6a3804bd5f4fd5f1c424615ceb620525" + hash: "340811fac74949d8561c825547801ab0" } Frame { msec: 2192 - hash: "df0d72248310654a9cf47e707fe9e414" + hash: "4ab688cb3f157dff07a652a84d1ed1da" } Frame { msec: 2208 - hash: "beb19f2b2979ab40b5ccf8c0fbe9b72f" + hash: "a249bd338776e1f0d11ad70aebcb91b3" } Frame { msec: 2224 - hash: "be3449b49048b764bea68a76baa0fc75" + hash: "6db4a1fd4f2597a180705b7d927ef512" } Frame { msec: 2240 - hash: "4a615cae9c8f85e7b8aecd4c9014f1eb" + hash: "7a47ac68a2a433d6edce92b772c3c608" } Frame { msec: 2256 - hash: "b3c274f1a9d65684c0a55a544bf77810" + hash: "10f23e9e7729a6525549b71143ae539c" } Frame { msec: 2272 - hash: "31456b01fcfb60a77d2b9662c2fff7b6" + hash: "c977e2525e1fb7406414862fbd23fcf8" } Frame { msec: 2288 - hash: "2be5cf3f6158bf09659acc68b134846f" + hash: "66251028e13fbd8f4f4d6836eb9615f9" } Frame { msec: 2304 - hash: "5f9c725a11305f3e6c48ab332faabf50" + hash: "925b50a4f9fe33d83463914c2221be82" } Frame { msec: 2320 - hash: "277c2733c7245d045665198984b74224" + hash: "7169f87de9a332bb94108661e9783a54" } Frame { msec: 2336 - hash: "265b8342bc747fb43a5291df0f4ce48b" + hash: "3ff3c0d2db8d1d65cfc7b14520cf41aa" } Frame { msec: 2352 - hash: "803b49ec31955b481009a51c64bcce65" + hash: "0757ee68ff9923a2dbeb2129f3d4409c" } Frame { msec: 2368 - hash: "a717b30ad50746cdf0fae82212ac88f0" + hash: "223dd69204949b494cda0762ef9965fd" } Frame { msec: 2384 - hash: "65f46c8e69f24d060b5da6f866867f51" + hash: "e97c6ba010857de43baeccbe85e2b262" } Frame { msec: 2400 - hash: "52f9e5d1106d00a950470076a50e4239" + hash: "9f170350da8b3785d5db9c24ce8cacf8" } Frame { msec: 2416 - hash: "058a787aae2845308e68bb93f6a811e4" + hash: "512f3a1ef9d5c263ab22559490dc3022" } Frame { msec: 2432 - hash: "621985111c25994c0c0fe3635be67c1d" + hash: "0f3df7f366bc918c55172df45c22056e" } Frame { msec: 2448 - hash: "2949b8185cefbaaf587a043d805cc670" + hash: "71f8f04423b9a3356aa08235a91ddde7" } Frame { msec: 2464 - hash: "d4a03127ae5047184c736617deeac92d" + hash: "0c48c98562318f7bac502c49fd09fd5e" } Frame { msec: 2480 - hash: "876c6c5ac4500de6234423bf6f3511d6" + hash: "17defd865ec00da3a74360044a906ea9" } Frame { msec: 2496 - hash: "eb08aa172cfbdb696b6f672dfa7b6fff" + hash: "07ef0b634016b52023174a6a593cb2aa" } Frame { msec: 2512 - hash: "a60c13b8f46faa0a35dbb539010550d4" + hash: "56d06c41e9ad55852654bcc6ce77504d" } Frame { msec: 2528 - hash: "c6f8786506e0326a5734ab8aea782f95" + hash: "05848d818a1531a649f9c23947e67855" } Frame { msec: 2544 - hash: "a49927f2aae24e692fc379f0ab6f4ee9" + hash: "11c8397fb9d7b993761b08ba8c9958e5" } Frame { msec: 2560 - hash: "2f1a2d50e1090b34ad1ea6a36eec4fe0" + hash: "82255275db096d4150bd6cbd07805b3f" } Frame { msec: 2576 - hash: "a5ee24d37be960a88684748b73dc75fe" + hash: "8dd3572656f6feb16d55d9318b6b6317" } Frame { msec: 2592 - hash: "28682389395b47ae33ceec1ba3beef4e" + hash: "8096e99b41c38a777df2010057119afb" } Frame { msec: 2608 - hash: "1869667b50b76d99716dd0d7849901fa" + hash: "4187c358b8319dffdef36c67b02a4921" } Frame { msec: 2624 - hash: "2806ee1005193f55825aa6147583985f" + hash: "f891ef9a694bc6513f04e38d34c78e24" } Frame { msec: 2640 - hash: "c00589dce90e3ab2f2c8890f30f80d3d" + hash: "77db9416fb003a5bb793b6573ca3a3cd" } Frame { msec: 2656 - hash: "1f1881f0a29525e380ecbcce15499fa4" + hash: "152cf831ca83212fc026b1146c49a386" } Frame { msec: 2672 - hash: "2a4c3ff764545a3899c864680f22f0a3" + hash: "a596b17515b471d5e67edda3baf8938b" } Frame { msec: 2688 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "307db3e3c929da9783b12d7a2efdbda5" } Frame { msec: 2704 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "1baff6641852daabdc639a35a4821189" } Frame { msec: 2720 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "1f7df5b9c29773c7ae3d08005e7dd903" } Frame { msec: 2736 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "7eb1937ccb2727c27e57b7d7960678d2" } Frame { msec: 2752 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "8294b7a9105083887634973a1c64b70a" } Frame { msec: 2768 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "89ea9be6ebb280ff43d7b037d989aa53" } Frame { msec: 2784 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "4cbeaef4f796eebf114c5e470389d30a" } Frame { msec: 2800 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "0ce8c069bf3fb31d759d62e429c67a15" } Frame { msec: 2816 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "201f1b39884249f60a53a201f783ce9b" } Frame { msec: 2832 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "bcafa2c76a9747a64565a3d3484c1c91" } Frame { msec: 2848 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "94c7ff74b5a37b6e03a47afc40fde107" } Frame { msec: 2864 - hash: "2685820514ce5d5729f3761b1eaa1682" + hash: "08127dfa54da0616ce6cb19c646487ed" } Frame { msec: 2880 @@ -934,7 +934,7 @@ VisualTest { } Frame { msec: 2896 - hash: "ce00c77e8ff1768b41f5585344af1c58" + hash: "b76ce9c50fcbe38a29c1930302dd61da" } Mouse { type: 5 @@ -946,7 +946,7 @@ VisualTest { } Frame { msec: 2912 - hash: "24f401275fa6ec7d26234609792fe0b8" + hash: "d30704b159562c21cd2f42f2370acdfa" } Mouse { type: 5 @@ -958,7 +958,7 @@ VisualTest { } Frame { msec: 2928 - hash: "d3c74863c627a1b922a6b6c4a24f8c40" + hash: "db0916ebf147ee738aaf7492bd38c262" } Mouse { type: 5 @@ -978,203 +978,203 @@ VisualTest { } Frame { msec: 2944 - hash: "64a3209e6adc737065e5d5c3202a7283" + hash: "128058d78c8ceabf4867c8c2d23c8007" } Frame { msec: 2960 - hash: "cf936ffe4330edefddb31c59368491fc" + hash: "9a59b6d1576b70796abcd58167e5135e" } Frame { msec: 2976 - hash: "a67213db044bb876f737cd355fe54444" + hash: "2d5f030aa7ae5f7b5df1894f0250a391" } Frame { msec: 2992 - hash: "0f9e97057cbbd8071e0f5f61318bdf9c" + hash: "fb45fe68abab13f5eb4e8022f1e4e2f1" } Frame { msec: 3008 - hash: "c5f38d334df86ebb6ac4600c83eced20" + hash: "ad090853500b3720c1bb4d750731e25c" } Frame { msec: 3024 - hash: "6d8e6049a36eac4136dbdb5fb18d0650" + hash: "f8f560f26cc0b63f51858c5119b7a1ef" } Frame { msec: 3040 - hash: "8ee97cff4a632e6e297bd3bdac27b8d4" + hash: "87e9d53c0ffcf7231693d9d6619ad37e" } Frame { msec: 3056 - hash: "aca1fcd005d211d35245e64a44002c01" + hash: "73000f490569eb178d47a00b96d39a17" } Frame { msec: 3072 - hash: "7076180bf0eb14a5e733be9320f1f009" + hash: "b8a196eca9c3bd95659931115bec319f" } Frame { msec: 3088 - hash: "e0a0545b3a0b6a0b07d3fa987e1d58b6" + hash: "5f9265d0818701ce08066b55a8bbd904" } Frame { msec: 3104 - hash: "0294b098ce7f0d381542776320e52d2e" + hash: "9a62f2e25e8d32872e43fbdcdb838756" } Frame { msec: 3120 - hash: "36f8bcc42add38fe149e34a703cf8a02" + hash: "1c7b238074d274e4f105b5c2b7fd6dac" } Frame { msec: 3136 - hash: "631426bde50fd35d1da1c30d9878253e" + hash: "f6fbd5658a122ced7257852b4d38605d" } Frame { msec: 3152 - hash: "a4d64c9d378138bedf63389e58d8f1d6" + hash: "24a0cc1d69213b12f9420fa9ffee7319" } Frame { msec: 3168 - hash: "17fdf61bffd947c2e9898f5c4517fdf8" + hash: "8811594c57e514da3afeb04460569e5d" } Frame { msec: 3184 - hash: "653b8c7a55bc4ca763238098711eafa1" + hash: "760d4afdc958184b5b68bc3bcc2f1d3b" } Frame { msec: 3200 - hash: "89e15b3ee1b1fc945801e08cfcdba62c" + hash: "b3b2ca99af9aa022dfebf71bfa1cd491" } Frame { msec: 3216 - hash: "7ea615af67336895e6cee6d3a39ff7de" + hash: "293dbff5edf4dde1f57ca3af1c4bce5e" } Frame { msec: 3232 - hash: "88faee45db80f04ef1120c35057a5f7d" + hash: "0c48c98562318f7bac502c49fd09fd5e" } Frame { msec: 3248 - hash: "8cfe34047b29ac85e58d55e0f6e0b195" + hash: "1cac8d792f55f3e47549d628bd729a7d" } Frame { msec: 3264 - hash: "39255546502fcb882005fe4c38c21fb0" + hash: "d63664b4a6c42c67a3c700e3a000fc07" } Frame { msec: 3280 - hash: "6bf7a959a05fc27f651b2a3ba07de30d" + hash: "be41201056bd58d4793c9c7b5cc63f3f" } Frame { msec: 3296 - hash: "c2c61cb8dbbbd38827277ab32579c6da" + hash: "0ea52d61c7b8803d76340874b846783d" } Frame { msec: 3312 - hash: "ff370d4b4e44c4cbacca96107105df21" + hash: "260c743db91b8802e2c27f8c92d620e5" } Frame { msec: 3328 - hash: "ccadd9e070d54de21c76397d18ad3de8" + hash: "33d3dbe981874cd04edd35a4e5bf4e68" } Frame { msec: 3344 - hash: "6302c39de00070b0a23f9dc87f74dd8d" + hash: "27d183bfe7a7775ba47578de7a5b2dcb" } Frame { msec: 3360 - hash: "7ab69e6d9809c78dc723609bd2761206" + hash: "a6c0bd87922ca8d40fe413ab8624dd24" } Frame { msec: 3376 - hash: "c429cc724b39891805cf4c1448de60b3" + hash: "218d68463d34cc31dc81756be9effd02" } Frame { msec: 3392 - hash: "396ddf0b01e9fe7c2bfb220e64a0c7ec" + hash: "29e9148ab8c0aa66988a6bcda12b06ea" } Frame { msec: 3408 - hash: "7a519a4efeecef5e7623a270e458fb13" + hash: "8cc09fb7e94b1bd0d3482e0bf5d0abec" } Frame { msec: 3424 - hash: "869d174a939e0638a1a22d5c8a010c14" + hash: "39a595b99ed012a1e54b516b75f8652d" } Frame { msec: 3440 - hash: "9ecd2cf4e3b42ff93bcbf4db9829666c" + hash: "30754f5e10dc0d148f10a5eced16258a" } Frame { msec: 3456 - hash: "b06b58b250d3df365806a3f8991d57f3" + hash: "85de32bfdfaea28e4c534dca69b1255e" } Frame { msec: 3472 - hash: "7a6fb03feb2ae0af1f143daedd22a88b" + hash: "459bda74f223c6cfbee12524939b09ef" } Frame { msec: 3488 - hash: "e9fe338dbe7afb69f3870743b0a18805" + hash: "db2ae2401ff1a65911339e2292f075dd" } Frame { msec: 3504 - hash: "04b8def2085e9ce4065b02b938915557" + hash: "0cc18d7cbf42cb68baedd73cf59d8c08" } Frame { msec: 3520 - hash: "7e6942f72012875ba83a1c9121e1f786" + hash: "36c72c3d608fc5126f4b62d4416ad54e" } Frame { msec: 3536 - hash: "291e2d79a79959d9c8c586b6bdc31689" + hash: "7f4db14f493a300ba37dae79a9d60084" } Frame { msec: 3552 - hash: "e490bc7fd92f486b964cca967bd33b38" + hash: "efe0031b95195bebfd887ef63c2ce441" } Frame { msec: 3568 - hash: "0c9858e0445e25d2b12c84801de441cb" + hash: "ade092ef64fc3b1e4d4afc86dca3cf71" } Frame { msec: 3584 - hash: "72ba7a4aacb150e1e9c6de72cff82258" + hash: "e57a7cf2f90b87fed0fd438599fabae3" } Frame { msec: 3600 - hash: "1daca95256842545a5b77bcc46782478" + hash: "1be372fe7de83c4d019e3856c03b39b6" } Frame { msec: 3616 - hash: "869f3d16e203ad47f1ae7ca83e369b75" + hash: "4cb14166395004b6f0f04c6d95879583" } Frame { msec: 3632 - hash: "9cc9cb20aab3369f4e3c5259d291708c" + hash: "a5ec71ba41f5fc0eeebf907749f26266" } Frame { msec: 3648 - hash: "a507b957bab3efe2023a65f8c8b3540a" + hash: "257ef3bb651dbd43635576563c0f97c7" } Frame { msec: 3664 - hash: "9fce2a6cddd8b06a80ce16599b56caa6" + hash: "aa95d440ff9c75215bd2483befe18f78" } Frame { msec: 3680 - hash: "2f85d3064968e3e7b669f733fad58459" + hash: "670815d144a7838b02bf24cf586c8df4" } Frame { msec: 3696 - hash: "6dd6fad85dc5317a22a05a8486317767" + hash: "5f58ff1dd96ee21710ce2aeee81c232b" } Frame { msec: 3712 - hash: "b0faa2ec225cd96fb6d2fd05dc66bed1" + hash: "0c5a6c2dfbac5b97481b8e505fd4c4eb" } Frame { msec: 3728 - hash: "3188219f095c2a9ac7c0f6034463d769" + hash: "b269e9fe4d14537c8bef0b66effe7319" } Frame { msec: 3744 diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml index ce516ac..c89bd68 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepathview/test-pathview.qml @@ -33,7 +33,7 @@ Rectangle { PathView { id: photoPathView; model: rssModel; delegate: photoDelegate - y: 100; width: 800; height: 330; pathItemCount: 10; z: 1 + y: 100; width: 800; height: 330; z: 1 path: Path { startX: -50; startY: 40; -- cgit v0.12 From f1354b80b78adfdb8a4f0a09dc2f593f4b02a4ea Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 12:08:59 +1000 Subject: Clean up qdeclarativepositioner tests dynamic.qml is now at expect-fail status, see QTBUG-14839 Task-number: QTBUG-14792 --- .../qdeclarativepositioners/data/dynamic.0.png | Bin 1429 -> 0 bytes .../qdeclarativepositioners/data/dynamic.1.png | Bin 1433 -> 0 bytes .../qdeclarativepositioners/data/dynamic.2.png | Bin 1431 -> 0 bytes .../qdeclarativepositioners/data/dynamic.3.png | Bin 1428 -> 0 bytes .../qdeclarativepositioners/data/dynamic.4.png | Bin 1432 -> 0 bytes .../qdeclarativepositioners/data/dynamic.5.png | Bin 1434 -> 0 bytes .../qdeclarativepositioners/data/dynamic.qml | 1603 -------------------- .../data/usingRepeater.0.png | Bin 2782 -> 0 bytes .../qdeclarativepositioners/data/usingRepeater.qml | 268 +--- .../qmlvisual/qdeclarativepositioners/dynamic.qml | 65 +- .../qdeclarativepositioners/usingRepeater.qml | 5 +- 11 files changed, 70 insertions(+), 1871 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png deleted file mode 100644 index f474afe..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png deleted file mode 100644 index 8b7ae74..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png deleted file mode 100644 index 9088bb4..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png deleted file mode 100644 index 18cd429..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png deleted file mode 100644 index 739afc1..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png deleted file mode 100644 index 93f0682..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml deleted file mode 100644 index 4b36e16..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml +++ /dev/null @@ -1,1603 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 32 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 48 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 64 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 80 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 96 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 112 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 128 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 144 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 160 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 176 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 192 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 208 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 224 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 240 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 256 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 272 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 288 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 304 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 320 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 336 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 352 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 368 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 384 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 400 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 416 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 432 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 448 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 464 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 480 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 496 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 512 - hash: "ee42cfa8cbbd67becb7d50998d26fe73" - } - Frame { - msec: 528 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 544 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 560 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 576 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 592 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 608 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 624 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 640 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 656 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 672 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 688 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 704 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 720 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 736 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 752 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 768 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 784 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 800 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 816 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 832 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 848 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 864 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 880 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 896 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 912 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 928 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 944 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 960 - image: "dynamic.0.png" - } - Frame { - msec: 976 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 992 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 1008 - hash: "62727b1025930e19bb03c8f533a12ced" - } - Frame { - msec: 1024 - hash: "3e52e7d7d428cf1b850cb9c60dbb3c21" - } - Frame { - msec: 1040 - hash: "64f75ab14c979d33d6e0c0d86b76cd35" - } - Frame { - msec: 1056 - hash: "c198a48f4050f176465649d203d6e09a" - } - Frame { - msec: 1072 - hash: "6dd8cee5a585a96e78f2cf7478c4da62" - } - Frame { - msec: 1088 - hash: "09edfbce2ea4b8a547f769ce709dcb6b" - } - Frame { - msec: 1104 - hash: "e93d01aa6e4f5d3fc82cf5a008e3ea17" - } - Frame { - msec: 1120 - hash: "0e2e7b5eec0e62853972b0139b8c17c6" - } - Frame { - msec: 1136 - hash: "26d4f54628ce20f5665bdc6ddc7f3b6a" - } - Frame { - msec: 1152 - hash: "59836aa6eff85b0152be352b97076d89" - } - Frame { - msec: 1168 - hash: "47cc9894096731a52ca342ab04df9aad" - } - Frame { - msec: 1184 - hash: "ec95dd3b34a0f17f6fb9b5bedab73653" - } - Frame { - msec: 1200 - hash: "e32c2b70882828b5082ca3ec889a0dde" - } - Frame { - msec: 1216 - hash: "68d3f8e9c9d5388a6f8360368c8f4d2f" - } - Frame { - msec: 1232 - hash: "17378b2bd8bde7f357fa5463f457c7b2" - } - Frame { - msec: 1248 - hash: "03db786cd54ec34ce8db15953a5fc847" - } - Frame { - msec: 1264 - hash: "9e22a82a622ed0287c44cc629059d5bd" - } - Frame { - msec: 1280 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1296 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1312 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1328 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1344 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1360 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1376 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1392 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1408 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1424 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1440 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1456 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1472 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1488 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1504 - hash: "42955cd23747f7c37d0f0229c0955e90" - } - Frame { - msec: 1520 - hash: "981fb1ee75e307b548a32df08a86f4cd" - } - Frame { - msec: 1536 - hash: "f77568307e93d8cd9f0ae417cc19d6e3" - } - Frame { - msec: 1552 - hash: "3bdd4468e26aceee0dad6b3b97b1c1ea" - } - Frame { - msec: 1568 - hash: "252c9ebc2c32755b2289ee1b03877fe3" - } - Frame { - msec: 1584 - hash: "64169b7eb7b7ae8573556c5f80230965" - } - Frame { - msec: 1600 - hash: "4965dfa709a9ac7d8f7dfb4bf8303c65" - } - Frame { - msec: 1616 - hash: "8c53cf92510154087341ac65a93aae5a" - } - Frame { - msec: 1632 - hash: "4dd7502e3e238743d2f3cf038270491e" - } - Frame { - msec: 1648 - hash: "cd9a58316837eb92f4ac92dbd86bdba3" - } - Frame { - msec: 1664 - hash: "5de043e3ac8696b59293a2fa60ed7e65" - } - Frame { - msec: 1680 - hash: "1bf42a6f6be5a3468d2f47cccfac761e" - } - Frame { - msec: 1696 - hash: "ca05510c1ad25e5d3b002603f4379a09" - } - Frame { - msec: 1712 - hash: "f6904a918a6475f1965d74372e52a4b1" - } - Frame { - msec: 1728 - hash: "9e2312ddfc1648b615288107a06c9f9c" - } - Frame { - msec: 1744 - hash: "95c470273b1cb08d4d602efcce339554" - } - Frame { - msec: 1760 - hash: "dade96f707d4a21885480e13b258b7e9" - } - Frame { - msec: 1776 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1792 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1808 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1824 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1840 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1856 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1872 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1888 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1904 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1920 - image: "dynamic.1.png" - } - Frame { - msec: 1936 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1952 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1968 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 1984 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 2000 - hash: "0bfbd46f1d4cf562253fb383776cb601" - } - Frame { - msec: 2016 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2032 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2048 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2064 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2080 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2096 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2112 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2128 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2144 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2160 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2176 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2192 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2208 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2224 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2240 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2256 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2272 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2288 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2304 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2320 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2336 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2352 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2368 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2384 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2400 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2416 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2432 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2448 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2464 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2480 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2496 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2512 - hash: "6fc83e8d4ac99b34062c122a8f7f1850" - } - Frame { - msec: 2528 - hash: "fabf4e535bc4cc17497939d2eeae4a2d" - } - Frame { - msec: 2544 - hash: "a7981035f46869f5ae824d0c58b263b2" - } - Frame { - msec: 2560 - hash: "86d8e369bdceb499b244f84ed9e80ba3" - } - Frame { - msec: 2576 - hash: "e28a7dc7ea8690da75670b5a6e93a26b" - } - Frame { - msec: 2592 - hash: "bf4e815360a67bd80732bd8812269b21" - } - Frame { - msec: 2608 - hash: "a6f8c56cb93da8acc0c90e35596a60d4" - } - Frame { - msec: 2624 - hash: "1e60656f0758605169e51b57bd03af36" - } - Frame { - msec: 2640 - hash: "c069b26b9fae47e0104070d702ba9562" - } - Frame { - msec: 2656 - hash: "457eb2ca1adff6cbb158afa140b2f20b" - } - Frame { - msec: 2672 - hash: "4e5e750b0d94b6777aebff85d38225d9" - } - Frame { - msec: 2688 - hash: "96d9840c2354a8786a8470309be97544" - } - Frame { - msec: 2704 - hash: "ac7570cc7eeff1acd8c47f2d9328f8be" - } - Frame { - msec: 2720 - hash: "887f937bb263c54f29659f27f2b7a3e3" - } - Frame { - msec: 2736 - hash: "616371183c82b97f69a4c6e2367b8066" - } - Frame { - msec: 2752 - hash: "36de8ffa9abe850fb681b37aea45ef8b" - } - Frame { - msec: 2768 - hash: "0505101f0edaaf7ff17deeaaddc6bbf9" - } - Frame { - msec: 2784 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2800 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2816 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2832 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2848 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2864 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2880 - image: "dynamic.2.png" - } - Frame { - msec: 2896 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2912 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2928 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2944 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2960 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2976 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 2992 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 3008 - hash: "e8c53dd8343d7d4c384c2f8507ff0631" - } - Frame { - msec: 3024 - hash: "99e4d853d64a381e8db27707b5ff2b25" - } - Frame { - msec: 3040 - hash: "ab0e62aeffc0d57a5e1d63e6cf49b809" - } - Frame { - msec: 3056 - hash: "4ab11bbf1fb6adb0eec8895f78a24a41" - } - Frame { - msec: 3072 - hash: "634ff2ceb39a3f263a3362238a4ae252" - } - Frame { - msec: 3088 - hash: "7f4856873dc23a02297b2497101de9b9" - } - Frame { - msec: 3104 - hash: "bca3919e9d8e6dc5badd8090401dc934" - } - Frame { - msec: 3120 - hash: "824bfe40c3657cfe1368563640e4cfce" - } - Frame { - msec: 3136 - hash: "f831c1600f68bda139697c406ca70c5e" - } - Frame { - msec: 3152 - hash: "f8102ca251a9ff46a8fe5a24cff0d2d6" - } - Frame { - msec: 3168 - hash: "f33407ad684aa16efc6615d1cf6fa4b9" - } - Frame { - msec: 3184 - hash: "a73d27f776a6ebfc90309b34421700e5" - } - Frame { - msec: 3200 - hash: "ff2a4e2663fc50dfec35152f0e79f935" - } - Frame { - msec: 3216 - hash: "4935f5f58f2672e9d240625151044bda" - } - Frame { - msec: 3232 - hash: "f3ad5c203f621fe4d5d321c3c1880743" - } - Frame { - msec: 3248 - hash: "d4fb7cd2e1f6a533dae65ddbb50da8ac" - } - Frame { - msec: 3264 - hash: "91705e9234c4f02d0a730f6270f9e95f" - } - Frame { - msec: 3280 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3296 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3312 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3328 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3344 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3360 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3376 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3392 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3408 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3424 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3440 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3456 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3472 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3488 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3504 - hash: "41e177bec783497b996d6d5f6dac1a15" - } - Frame { - msec: 3520 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3536 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3552 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3568 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3584 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3600 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3616 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3632 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3648 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3664 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3680 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3696 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3712 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3728 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3744 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3760 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3776 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3792 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3808 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3824 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3840 - image: "dynamic.3.png" - } - Frame { - msec: 3856 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3872 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3888 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3904 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3920 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3936 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3952 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3968 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 3984 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4000 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4016 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4032 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4048 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4064 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4080 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4096 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4112 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4128 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4144 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4160 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4176 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4192 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4208 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4224 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4240 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4256 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4272 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4288 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4304 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4320 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4336 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4352 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4368 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4384 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4400 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4416 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4432 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4448 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4464 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4480 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4496 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4512 - hash: "496dc6261695bcf04a8e574146544e98" - } - Frame { - msec: 4528 - hash: "9681be99003f8a14cc5654d06d2c8255" - } - Frame { - msec: 4544 - hash: "bcb592a2335aa2e35956881fd028f4e6" - } - Frame { - msec: 4560 - hash: "f914b25fdcb02a02b71220d82b7b2a75" - } - Frame { - msec: 4576 - hash: "63c82c08eb7f2bd50b54b94c952df3f2" - } - Frame { - msec: 4592 - hash: "8a8dc82be81fa55605c6c2e749895120" - } - Frame { - msec: 4608 - hash: "271f8d79b8052dfcd840ffa9ba9ffeec" - } - Frame { - msec: 4624 - hash: "8f77bbd0585b57e69ac1919bd81ee3b1" - } - Frame { - msec: 4640 - hash: "b974260a2f90e141ebc33ced98fbca88" - } - Frame { - msec: 4656 - hash: "77ada180f8a45652a6fa636d7ece4d9d" - } - Frame { - msec: 4672 - hash: "4c8dc2e33cd989cb3b0938c6c75b5f95" - } - Frame { - msec: 4688 - hash: "a145954989508b925a444e14f0c27a20" - } - Frame { - msec: 4704 - hash: "8d27ff203819174747ae4a5cee8d0ae8" - } - Frame { - msec: 4720 - hash: "830f34b0dab780c6efe2294872ba8508" - } - Frame { - msec: 4736 - hash: "5d70a4bbd815569cfe5735b596bad080" - } - Frame { - msec: 4752 - hash: "964527bb82ea006e03b030c787a8597c" - } - Frame { - msec: 4768 - hash: "1ad54954b818fa9e6032ac4b6114e7db" - } - Frame { - msec: 4784 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4800 - image: "dynamic.4.png" - } - Frame { - msec: 4816 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4832 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4848 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4864 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4880 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4896 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4912 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4928 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4944 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4960 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4976 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 4992 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 5008 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 5024 - hash: "47865243cc252aef67774001af70c54c" - } - Frame { - msec: 5040 - hash: "baeb8adffc13e230e797e0437f2ad5fa" - } - Frame { - msec: 5056 - hash: "d2e440fcad0ee2b7b35d7e5c4e581f73" - } - Frame { - msec: 5072 - hash: "fb8acb2f69234d3ee089281d0297ad7c" - } - Frame { - msec: 5088 - hash: "7fda29a83dc535ed8d6b35e999400311" - } - Frame { - msec: 5104 - hash: "6482e3eb10cfdbdeb57dd38ba3e3d67e" - } - Frame { - msec: 5120 - hash: "4d222549bc2565c1598a532460aae4e6" - } - Frame { - msec: 5136 - hash: "776d1b0f9945c0e1ceda0cf117264919" - } - Frame { - msec: 5152 - hash: "f2c362b34a0982ee1a11dea6b063945e" - } - Frame { - msec: 5168 - hash: "115f02b8893972b5b1d63525ce70762e" - } - Frame { - msec: 5184 - hash: "7f2d53581fe2c6c45a628fa4cd9b5742" - } - Frame { - msec: 5200 - hash: "b5ed1120c4edf842b15d5144adbd93b0" - } - Frame { - msec: 5216 - hash: "3511938df57c4cdce316692de204b057" - } - Frame { - msec: 5232 - hash: "99583918d068ab5d132fe7a699c2a7a6" - } - Frame { - msec: 5248 - hash: "c0ce9df18479dbb57fb1dbc777f4f0e5" - } - Frame { - msec: 5264 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5280 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5296 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5312 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5328 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5344 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5360 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5376 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5392 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5408 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5424 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5440 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5456 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5472 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5488 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5504 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5520 - hash: "b24db7b5c406328380fcf9927fb26c5c" - } - Frame { - msec: 5536 - hash: "98cc64411264d8a635a6afe6b11cee6e" - } - Frame { - msec: 5552 - hash: "b86434b7af8ad1db946c43a2791d69ab" - } - Frame { - msec: 5568 - hash: "f45616f9e33658d1dddb537e842c8768" - } - Frame { - msec: 5584 - hash: "e49d8955e27cdc19a37c331e56c81af1" - } - Frame { - msec: 5600 - hash: "b2dbe764906b50195f65dc11a5842515" - } - Frame { - msec: 5616 - hash: "71ce7c63d65c29cdffd83f5ae07f0b93" - } - Frame { - msec: 5632 - hash: "901d01e1fc777ec185cd023ad0ace4c1" - } - Frame { - msec: 5648 - hash: "a3f31de30fc2e92bae1f735504216216" - } - Frame { - msec: 5664 - hash: "0fc52dd8102506e3e7671fa548551b23" - } - Frame { - msec: 5680 - hash: "fb92809e728416035dbb91116ad8fe0e" - } - Frame { - msec: 5696 - hash: "9003dc8ca4f781909035cb03dc45864f" - } - Frame { - msec: 5712 - hash: "2bff1de793ad8521fd54413849c3cf29" - } - Frame { - msec: 5728 - hash: "8362e4db7c4446282d844a4fc6632d19" - } - Frame { - msec: 5744 - hash: "b874fa274c6ec77c106ff4a0288f9169" - } - Frame { - msec: 5760 - image: "dynamic.5.png" - } - Frame { - msec: 5776 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5792 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5808 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5824 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5840 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5856 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5872 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5888 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5904 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5920 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5936 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5952 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5968 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 5984 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 6000 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 6016 - hash: "e64ac8e11e36cafb25c947c5802d54b9" - } - Frame { - msec: 6032 - hash: "7621e64568058b82bcb6f6b46cee3ebc" - } - Frame { - msec: 6048 - hash: "f77f6de6fc88813f49427b4888a59dbf" - } - Frame { - msec: 6064 - hash: "d3a48f596219372ac25941e4c5ec5b2b" - } - Frame { - msec: 6080 - hash: "d572d932b613f9ca1e0acf144f127dd1" - } - Frame { - msec: 6096 - hash: "edf317eaf51d933bcd0f57f214921a81" - } - Frame { - msec: 6112 - hash: "e0cee7959a5a8a08ad03d75e7b5c6ca1" - } - Frame { - msec: 6128 - hash: "96877a15f44d4a2c8d9974cb28b9e1b6" - } - Frame { - msec: 6144 - hash: "c0ffb0ef6dd9d007d201feebd2f68e44" - } - Frame { - msec: 6160 - hash: "209fb930223243fa19c5dde9e85ec518" - } - Frame { - msec: 6176 - hash: "ae98ac4dba0e78eb8fb7f7dbe29b2832" - } - Frame { - msec: 6192 - hash: "c94a7d68ce007d83df77a595a5815a96" - } - Frame { - msec: 6208 - hash: "4c28e409bf5a6c1289bcab8cd59a9e42" - } - Frame { - msec: 6224 - hash: "ea1009f1a3446dd5ce937e6949794794" - } - Frame { - msec: 6240 - hash: "940c16766c2f87feef48e1187672ca9b" - } - Frame { - msec: 6256 - hash: "93664c87c8dcfadc0345f646b2508625" - } - Frame { - msec: 6272 - hash: "93664c87c8dcfadc0345f646b2508625" - } - Frame { - msec: 6288 - hash: "93664c87c8dcfadc0345f646b2508625" - } - Frame { - msec: 6304 - hash: "93664c87c8dcfadc0345f646b2508625" - } - Frame { - msec: 6320 - hash: "93664c87c8dcfadc0345f646b2508625" - } - Frame { - msec: 6336 - hash: "93664c87c8dcfadc0345f646b2508625" - } - Frame { - msec: 6352 - hash: "93664c87c8dcfadc0345f646b2508625" - } - Frame { - msec: 6368 - hash: "93664c87c8dcfadc0345f646b2508625" - } - Frame { - msec: 6384 - hash: "93664c87c8dcfadc0345f646b2508625" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png deleted file mode 100644 index 3234c98..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml index bdf8fee..5d88df7 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/usingRepeater.qml @@ -6,334 +6,130 @@ VisualTest { } Frame { msec: 16 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 32 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 48 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 64 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 80 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 96 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 112 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 128 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 144 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 160 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 176 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 192 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 208 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 224 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 240 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 256 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "1a396cf01a6c31155609532654653599" } Frame { msec: 272 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 288 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 304 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 320 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 336 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 352 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 368 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 384 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 400 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 416 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 432 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 448 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 464 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 480 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 496 - hash: "e9c524091a0351926c3d658b9935f176" + hash: "8a4565aee33d40840bda26b65b6a0d90" } Frame { msec: 512 - hash: "e9c524091a0351926c3d658b9935f176" - } - Frame { - msec: 528 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 544 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 560 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 576 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 592 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 608 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 624 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 640 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 656 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 672 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 688 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 704 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 720 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 736 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 752 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 768 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 784 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 800 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 816 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 832 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 848 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 864 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 880 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 896 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 912 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 928 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 944 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 960 - image: "usingRepeater.0.png" - } - Frame { - msec: 976 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 992 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1008 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1024 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1040 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1056 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1072 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1088 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1104 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1120 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1136 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1152 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1168 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1184 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1200 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1216 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1232 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1248 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1264 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1280 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1296 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1312 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" - } - Frame { - msec: 1328 - hash: "2b1fb0ebb6f728fe685d95b5947cce90" + hash: "8a4565aee33d40840bda26b65b6a0d90" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml index 8da3602..8a522a5 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml @@ -1,13 +1,14 @@ import QtQuick 1.0 +//Expected to fail until QTBUG-14839 is resolved Item { - width: 400; height: 400; + width: 120; height: 60; property int step: 0 function tick() { step++; if(step == 1){ - row1.destroy(); //Not dynamically created, so is this valid? + //row1.destroy(); //Not dynamically created, so is this valid? }else if(step == 2){ r2a.destroy(); }else if(step == 3){ @@ -21,42 +22,46 @@ Item { }else if(step == 7){ r3c.parent = row2; }else if(step == 8){ - row3.destroy(); + //row3.destroy();//empty now, so should have no effect//May be invalid, but was deleting the reparent items at one point }else{ repeater.model++; } } - //Tests base positioner functionality, so just using row - Row{ - id: row1 - Rectangle{id: r1a; width:20; height:20; color: "red"} - Rectangle{id: r1b; width:20; height:20; color: "green"} - Rectangle{id: r1c; width:20; height:20; color: "blue"} - } - Row{ - y:20 - id: row2 - move: Transition{NumberAnimation{properties:"x"}} - Repeater{ - id: repeater - model: 0; - delegate: Component{ Rectangle { color: "yellow"; width:20; height:20;}} + //Tests base positioner functionality, so don't need them all. + Column{ + move: Transition{NumberAnimation{properties:"y"}} + Row{ + id: row1 + height: childrenRect.height + Rectangle{id: r1a; width:20; height:20; color: "red"} + Rectangle{id: r1b; width:20; height:20; color: "green"} + Rectangle{id: r1c; width:20; height:20; color: "blue"} + } + Row{ + id: row2 + height: childrenRect.height + move: Transition{NumberAnimation{properties:"x"}} + Repeater{ + id: repeater + model: 0; + delegate: Component{ Rectangle { color: "yellow"; width:20; height:20;}} + } + Rectangle{id: r2a; width:20; height:20; color: "red"} + Rectangle{id: r2b; width:20; height:20; color: "green"} + Rectangle{id: r2c; width:20; height:20; color: "blue"} + } + Row{ + move: Transition{NumberAnimation{properties:"x"}} + id: row3 + height: childrenRect.height + Rectangle{id: r3a; width:20; height:20; color: "red"} + Rectangle{id: r3b; width:20; height:20; color: "green"} + Rectangle{id: r3c; width:20; height:20; color: "blue"} } - Rectangle{id: r2a; width:20; height:20; color: "red"} - Rectangle{id: r2b; width:20; height:20; color: "green"} - Rectangle{id: r2c; width:20; height:20; color: "blue"} - } - Row{ - move: Transition{NumberAnimation{properties:"x"}} - y:40 - id: row3 - Rectangle{id: r3a; width:20; height:20; color: "red"} - Rectangle{id: r3b; width:20; height:20; color: "green"} - Rectangle{id: r3c; width:20; height:20; color: "blue"} } Timer{ - interval: 500; + interval: 250; running: true; repeat: true; onTriggered: tick(); diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml index c318a99..c236b6a 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/usingRepeater.qml @@ -1,7 +1,7 @@ import QtQuick 1.0 Item{ - width: 200; height: 600 + width: 40; height: 320 Column{ Rectangle{color:"Red"; width:40; height:40;} Repeater{ @@ -11,5 +11,6 @@ Item{ } Rectangle{color:"Blue"; width:40; height:40;} } - Timer{ interval: 500; running: true; onTriggered: rep.model=6;} + Timer{ interval: 250; running: true; onTriggered: rep.model=6;} + Timer{ interval: 500; running: true; onTriggered: Qt.quit();} } -- cgit v0.12 From 8389b9c2cdb2957c3e6db678e39fba060df9d045 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 12:13:26 +1000 Subject: Clean up qdeclarativesmoothedanimation visual tests Smoothed animation test is actually just a subset of smoothed follow now Task-number: QTBUG-14792 --- .../data/easefollow.0.png | Bin 1305 -> 0 bytes .../data/easefollow.1.png | Bin 1306 -> 0 bytes .../data/easefollow.2.png | Bin 1305 -> 0 bytes .../data/easefollow.3.png | Bin 1303 -> 0 bytes .../data/easefollow.4.png | Bin 1303 -> 0 bytes .../data/easefollow.5.png | Bin 1305 -> 0 bytes .../data/easefollow.6.png | Bin 1306 -> 0 bytes .../data/easefollow.qml | 1807 -------------------- .../smoothedanimation.qml | 45 - 9 files changed, 1852 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.5.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.6.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedanimation.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.0.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.0.png deleted file mode 100644 index 21b6afb..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.1.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.1.png deleted file mode 100644 index bb8a02b..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.2.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.2.png deleted file mode 100644 index da60237..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.3.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.3.png deleted file mode 100644 index 3e943e8..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.4.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.4.png deleted file mode 100644 index 4fbaf26..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.5.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.5.png deleted file mode 100644 index c10d196..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.6.png b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.6.png deleted file mode 100644 index a672c06..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.qml b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.qml deleted file mode 100644 index 2500ef0..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/data/easefollow.qml +++ /dev/null @@ -1,1807 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "1f60efdb8704b92c9361daa468a25391" - } - Frame { - msec: 32 - hash: "3bb6a87617e0e5d4922e573eec975886" - } - Frame { - msec: 48 - hash: "268941737e6324d580890b151de621fb" - } - Frame { - msec: 64 - hash: "99c674eccc082d7f0982257a748d93e5" - } - Frame { - msec: 80 - hash: "2970467e8262c8a3f0b11be71245d048" - } - Frame { - msec: 96 - hash: "63cbd06d6bb035d27c18dba49238d8b2" - } - Frame { - msec: 112 - hash: "49f77bb3d323f882c0ec56e1f1040b3a" - } - Frame { - msec: 128 - hash: "40263c5f9b5d2236536163785f832b4d" - } - Frame { - msec: 144 - hash: "dc63b1c21a2027c4beb9c297a3677fbd" - } - Frame { - msec: 160 - hash: "4fab52ea29a819fec032f19dbcbef012" - } - Frame { - msec: 176 - hash: "60b48407a8f8ae2cce7d3e7c8b21991c" - } - Frame { - msec: 192 - hash: "6e542c681092a5ebeef0534fa2bd2d6c" - } - Frame { - msec: 208 - hash: "c7c6471969bbf81efdb86d1695548fc6" - } - Frame { - msec: 224 - hash: "b7f4ad9a49feb400894209c02b94478a" - } - Frame { - msec: 240 - hash: "3eb58b2f5233aead976183c13f241113" - } - Frame { - msec: 256 - hash: "54f2036c50c6d8079fc0cadc01385980" - } - Frame { - msec: 272 - hash: "f297659d75f6e724d72bd548821f4c9f" - } - Frame { - msec: 288 - hash: "112798f080336fc9c603a7e9097dd8aa" - } - Frame { - msec: 304 - hash: "c432e6ec2b53ca43cb7a7325d0cc379b" - } - Frame { - msec: 320 - hash: "4a6d3db3efd665ad7f372bf3f2508ed7" - } - Frame { - msec: 336 - hash: "0befa5dc4d2cc196fed0eb1a3aa75b8f" - } - Frame { - msec: 352 - hash: "a34d010b50d59c362b54e44d69c2df91" - } - Frame { - msec: 368 - hash: "cbdacced50186c87066ce1d46548b27e" - } - Frame { - msec: 384 - hash: "a4060010ae4d3c0973bda48d68f7bd0a" - } - Frame { - msec: 400 - hash: "47353437da587f732f986004c09884d0" - } - Frame { - msec: 416 - hash: "080c348145167bbec671a04da6f7564f" - } - Frame { - msec: 432 - hash: "69dead737c717a076ae3865680341fb4" - } - Frame { - msec: 448 - hash: "1efdc31c5c8fa72fc848877deb6caaa4" - } - Frame { - msec: 464 - hash: "28d7da1e933d0585d03acf4a529e7b42" - } - Frame { - msec: 480 - hash: "bf85534124bf025b7ede0d6c80b8e443" - } - Frame { - msec: 496 - hash: "cdbeb2d51541b1b1eff060efe993db91" - } - Frame { - msec: 512 - hash: "52ad56ae16c8ab523adda8edc512dd87" - } - Frame { - msec: 528 - hash: "61b1937f4c8dd2cb0ddd7031c5bfb3ab" - } - Frame { - msec: 544 - hash: "1b109baba71b16827f90da654af093a3" - } - Frame { - msec: 560 - hash: "d56621362802c8626868f36ba1e7db22" - } - Frame { - msec: 576 - hash: "ee5555ec3ad8760f43bbf5958a925936" - } - Frame { - msec: 592 - hash: "1ed2831144a453af1978605c0e42d17c" - } - Frame { - msec: 608 - hash: "c74d5cdb3395a702269dfa88c8c9d975" - } - Frame { - msec: 624 - hash: "ea98ddd9588cc23fd82a342ec2925ba8" - } - Frame { - msec: 640 - hash: "e76b94d6d57f1a510f7649eaab892562" - } - Frame { - msec: 656 - hash: "022f40b6fe9dbaf8019855234acb3461" - } - Frame { - msec: 672 - hash: "467da4f48aa6aeb113f0797facf157e8" - } - Frame { - msec: 688 - hash: "8df407aadd4d896eb6537e1555a0242f" - } - Frame { - msec: 704 - hash: "122e4671881e31f54e617729f4fbb3b0" - } - Frame { - msec: 720 - hash: "562718f101c3cd7525b890076413df5e" - } - Frame { - msec: 736 - hash: "07feae99ecf4b70eb094fd3e10deca56" - } - Frame { - msec: 752 - hash: "0980d133b1006cc07796023880415163" - } - Frame { - msec: 768 - hash: "7112b6ac97678b3b942c64c5108f0329" - } - Frame { - msec: 784 - hash: "bb9f893a9aaee60ab6c30918552828a4" - } - Frame { - msec: 800 - hash: "65d1f29437aaaea33676757276f1e434" - } - Frame { - msec: 816 - hash: "52adcf2509f3236ac8ef571708e77206" - } - Frame { - msec: 832 - hash: "22df5e7eda8a813531d0e0366cbfbf64" - } - Frame { - msec: 848 - hash: "fe9b7b7812dd2410b8ed2eb19aa78f4d" - } - Frame { - msec: 864 - hash: "141e22de4469f316b5ef5471f3c7bba0" - } - Frame { - msec: 880 - hash: "1125c0a105fc4a2cae36b798058ce23f" - } - Frame { - msec: 896 - hash: "8c17c5da2ae867fb0016a485ba9e4166" - } - Frame { - msec: 912 - hash: "d8da9fc7ec4dcefb894c5a6a71e9d001" - } - Frame { - msec: 928 - hash: "00ff642bea89fd89de394d78f8c5db33" - } - Frame { - msec: 944 - hash: "8549063d517a3ce1ffd44c56b3b6cf5e" - } - Frame { - msec: 960 - image: "easefollow.0.png" - } - Frame { - msec: 976 - hash: "95a642caa72bb31cc1e04ecc12d07cd0" - } - Frame { - msec: 992 - hash: "e65c823476bf920d0386f62ca831e6a0" - } - Frame { - msec: 1008 - hash: "91e8913dc693c91a674a10b5b088dd8f" - } - Frame { - msec: 1024 - hash: "1a469ffa0d530f72c78dc14783891c78" - } - Frame { - msec: 1040 - hash: "6e46a83d07f8bc034b421103ef0e4f8c" - } - Frame { - msec: 1056 - hash: "8ddacab411a8b73b6c9e69576fa1b003" - } - Frame { - msec: 1072 - hash: "41f419a85fe44efe27c9a526d83a1e9a" - } - Frame { - msec: 1088 - hash: "73d4ece31b258f9caf4556ce20a5be1f" - } - Frame { - msec: 1104 - hash: "ef3ebe0acb50386cf79b9f08fbba2fbc" - } - Frame { - msec: 1120 - hash: "c11a84d2fa80f28adb1466409812e987" - } - Frame { - msec: 1136 - hash: "2e9db854b02d28b38063ff2a8e821ed1" - } - Frame { - msec: 1152 - hash: "48e073c0e6b19aea8314629a2179af87" - } - Frame { - msec: 1168 - hash: "77e518b7428d93b67a8fb0d33d85ed97" - } - Frame { - msec: 1184 - hash: "1d18323af9c62e015513451883f8b39f" - } - Frame { - msec: 1200 - hash: "df49889ba157cdc1ca240d08d2760ad7" - } - Frame { - msec: 1216 - hash: "7b8cd2bcf0a4c38ab870f27894a43d2f" - } - Frame { - msec: 1232 - hash: "84f10e0c9fd57dd1799df7fc34c5ef01" - } - Frame { - msec: 1248 - hash: "ead4e609bc4a0755032b1648485b9625" - } - Frame { - msec: 1264 - hash: "9a9829c3bd4a3a4155383c37e21e8db8" - } - Frame { - msec: 1280 - hash: "5008917f60256abad867f32c1caf954d" - } - Frame { - msec: 1296 - hash: "c21455d66ed0754177af5ce44b7c7600" - } - Frame { - msec: 1312 - hash: "e8332f2586d80a2700b610e8fe5c72d9" - } - Frame { - msec: 1328 - hash: "0d0c8af138f98bae8a370ebec4a4796c" - } - Frame { - msec: 1344 - hash: "04065e8feeb900d18deeb941572f7f10" - } - Frame { - msec: 1360 - hash: "992a225b1f25bf5b21dd7f8a55dc4b70" - } - Frame { - msec: 1376 - hash: "8ef739d91ee2a4337cbfc3dc94ce9845" - } - Frame { - msec: 1392 - hash: "46744977a26b37ab65e65e1891ceafe7" - } - Frame { - msec: 1408 - hash: "1b4c0d79eeb8d6b2e30172f3664407b9" - } - Frame { - msec: 1424 - hash: "d572831ed34d14d1125570b8b8767bdb" - } - Frame { - msec: 1440 - hash: "8b785c756d11e0fc18959d0897a45673" - } - Frame { - msec: 1456 - hash: "164a71ffcea63ceb6c1ebeb8d0d07af1" - } - Frame { - msec: 1472 - hash: "e128dc12d5117eed9f7c0a16e8348ba2" - } - Frame { - msec: 1488 - hash: "4c7db5b12d83bf22b1c88ac06ca7c385" - } - Frame { - msec: 1504 - hash: "c7283df8dbd78121e17a5893e3ea4f3c" - } - Frame { - msec: 1520 - hash: "fea768e5bb43f6d86d88ced9f73915de" - } - Frame { - msec: 1536 - hash: "b99b54f8e75452c539bb4e7b6a36e944" - } - Frame { - msec: 1552 - hash: "b7274938d16f03b376ad9739e2e893f1" - } - Frame { - msec: 1568 - hash: "e61601942193add8c1c8ebf5c5319932" - } - Frame { - msec: 1584 - hash: "8fdc2181e0120391505706716ba7e5d7" - } - Frame { - msec: 1600 - hash: "66f737ed28453da5175d6b5e807c374d" - } - Frame { - msec: 1616 - hash: "2e00a7895d61edbe794f0a8000871b30" - } - Frame { - msec: 1632 - hash: "1a279fc6b7c4105eccc4e3bc99481bef" - } - Frame { - msec: 1648 - hash: "bc1dea4d23ca9bc29b72a8c2bde4787b" - } - Frame { - msec: 1664 - hash: "8ef40e0be5fb82b32b365b3d4b85421d" - } - Frame { - msec: 1680 - hash: "ee37c68bf38d5eed4e3e9a31306f6801" - } - Frame { - msec: 1696 - hash: "303d760c87a7a833606c8e9f46cb5fc0" - } - Frame { - msec: 1712 - hash: "cc2563b47c58efd39bec6b4e0f2995bb" - } - Frame { - msec: 1728 - hash: "33f7daf09497510475283d6dc7c51228" - } - Frame { - msec: 1744 - hash: "5b5e2de9934c80bd49e0eb7afd85151d" - } - Frame { - msec: 1760 - hash: "5e6bf706336789ca6b60a82998b70113" - } - Frame { - msec: 1776 - hash: "b4d4a860f49bfb88dd2079862b40b7ec" - } - Frame { - msec: 1792 - hash: "07b571fa55327487e34a592c778beb67" - } - Frame { - msec: 1808 - hash: "cb5b349a536cf75a83734181b3eab92b" - } - Frame { - msec: 1824 - hash: "ce903bb58c5c86f2955e68412893aedf" - } - Frame { - msec: 1840 - hash: "ffa89e879558c83ed538812a93e2fe29" - } - Frame { - msec: 1856 - hash: "562aa66bf537853be82a654542c8b80e" - } - Frame { - msec: 1872 - hash: "dc45dac0cc20220bcc81210fb5506ee2" - } - Frame { - msec: 1888 - hash: "3b429eb827df0800a1ad8b906ea32ef9" - } - Frame { - msec: 1904 - hash: "d6ebaf12515d9e24cdbf6d75080c0b28" - } - Frame { - msec: 1920 - image: "easefollow.1.png" - } - Frame { - msec: 1936 - hash: "9f6d26224055c809dc2f3490cd0ff880" - } - Frame { - msec: 1952 - hash: "5630cc8f0b401f7d81bdceaaae5cce68" - } - Frame { - msec: 1968 - hash: "dafda60467e5e2b99c41543dd191ac2d" - } - Frame { - msec: 1984 - hash: "e053cb07a734278cd111d612883c165e" - } - Frame { - msec: 2000 - hash: "63870f3e99c11707004dab9439d61389" - } - Frame { - msec: 2016 - hash: "14c311a6fab45f828c3a19535ea9edc8" - } - Frame { - msec: 2032 - hash: "13e614446cbfcbfd2a7ecc5f0e8688df" - } - Frame { - msec: 2048 - hash: "173c97f59da05b9347180a4824e60c06" - } - Frame { - msec: 2064 - hash: "932e2a9bbcb7dc5befca8f63d8fa3c95" - } - Frame { - msec: 2080 - hash: "4b8f232ffe0cbc7f900de5737c9f95be" - } - Frame { - msec: 2096 - hash: "9686d294d4e931a5eed0e6b5bda63377" - } - Frame { - msec: 2112 - hash: "969c569d92e3ec51dfbdd20d64432224" - } - Frame { - msec: 2128 - hash: "0cef3550cca9fb5611b836098c517dd1" - } - Frame { - msec: 2144 - hash: "6728080a09aa5d48462a3abb8e285e8a" - } - Frame { - msec: 2160 - hash: "4b904dc671b7fc72db0b6e52543e96bd" - } - Frame { - msec: 2176 - hash: "38232f89dffc9b16db6ea60b02f8d1be" - } - Frame { - msec: 2192 - hash: "6b41f2a0f950eddad217a03e137f9a9b" - } - Frame { - msec: 2208 - hash: "be576ea74c2c404da46fcf1d22de6df9" - } - Frame { - msec: 2224 - hash: "3f44bad4b51ceff2944337064a5efa91" - } - Frame { - msec: 2240 - hash: "e1ab98ac1366e9fd8af62a6a26878c73" - } - Frame { - msec: 2256 - hash: "bd131e1725a54b3dbbb86a29ca8a56a9" - } - Frame { - msec: 2272 - hash: "4d3e8af70f228643803f780c4e36f1a6" - } - Frame { - msec: 2288 - hash: "853a5ab4271af7a7638454cfa883aa33" - } - Frame { - msec: 2304 - hash: "ede9260157000f346900153ce2409278" - } - Frame { - msec: 2320 - hash: "b2b16d8ce1ba89f0d9558ac387e25c3d" - } - Frame { - msec: 2336 - hash: "387d338910453637c5cf80fa35528e56" - } - Frame { - msec: 2352 - hash: "26deabf9cdd994455f2a8802eb0e04dc" - } - Frame { - msec: 2368 - hash: "13939659a315dae1b81e3ea166102edf" - } - Frame { - msec: 2384 - hash: "be92b55bb7562372401b25a9167abb2b" - } - Frame { - msec: 2400 - hash: "ee7bf60d7ee97b7de5e909b9af88df80" - } - Frame { - msec: 2416 - hash: "434313a3bcd1d7582b0d89b9a145ef09" - } - Frame { - msec: 2432 - hash: "0857ca59a283897e3df62b9633488f83" - } - Frame { - msec: 2448 - hash: "76718fc7e3d21b54930bc8307a57733a" - } - Frame { - msec: 2464 - hash: "93a91588b38129053a462b920fd686e3" - } - Frame { - msec: 2480 - hash: "2a2486c52fde915696fd8cbd3682e8db" - } - Frame { - msec: 2496 - hash: "b1f4ab6cc5fb4a3a1b4885f2d1b29277" - } - Frame { - msec: 2512 - hash: "4258afce8a85a2e9ead149e34b43d8fc" - } - Frame { - msec: 2528 - hash: "6672c71b98e13d51ebb523aed9036a72" - } - Frame { - msec: 2544 - hash: "eaa39af7eb78948f433e3b44a9454317" - } - Frame { - msec: 2560 - hash: "0a766bc97bea67d4b848c703eaa6777a" - } - Frame { - msec: 2576 - hash: "0b461ec1885ede1dd96b71cf38bfd3d6" - } - Frame { - msec: 2592 - hash: "15efc929370a3864529080e30db1026a" - } - Frame { - msec: 2608 - hash: "e1529e30ff1e4ea1b092a88e85f2f1f6" - } - Frame { - msec: 2624 - hash: "f29bd9dbf7317e94b885da63f0cb7374" - } - Frame { - msec: 2640 - hash: "e5294e087e2ce0d7d936c0129b6c37ae" - } - Frame { - msec: 2656 - hash: "9c63129e774b391cc398cf5da5c9339c" - } - Frame { - msec: 2672 - hash: "4371d85854419d4b00671176bb7c5a2b" - } - Frame { - msec: 2688 - hash: "dd10b3f50e2fdc56c75f00321634b1cc" - } - Frame { - msec: 2704 - hash: "aac6256b21152a5f1f8c576b667d275e" - } - Frame { - msec: 2720 - hash: "c937c44037b2228590d334df4d56a86f" - } - Frame { - msec: 2736 - hash: "f6c714db51cbd1bdb737afe612c33f9c" - } - Frame { - msec: 2752 - hash: "0bba45af79f3201bc7cf042d5c648f73" - } - Frame { - msec: 2768 - hash: "941b08ddbafea3bd46262c060b1e290b" - } - Frame { - msec: 2784 - hash: "d898918dc2023de239b4ab38f7420960" - } - Frame { - msec: 2800 - hash: "d1a16dc2282329113093d06862e7a871" - } - Frame { - msec: 2816 - hash: "bba5359475f643fbeee240e71e843d4c" - } - Frame { - msec: 2832 - hash: "03cf861f4b6bc767e723e47e95c2448b" - } - Frame { - msec: 2848 - hash: "a64bf158c6199b88bc2db3b741d342f0" - } - Frame { - msec: 2864 - hash: "cf0fe7cb42ba842f1c28c1211adb768d" - } - Frame { - msec: 2880 - image: "easefollow.2.png" - } - Frame { - msec: 2896 - hash: "9b3c6414e4ef5a452a5c92bb0b893fc3" - } - Frame { - msec: 2912 - hash: "7cc7ddec3ac2d8cac33c0b0f80a7544d" - } - Frame { - msec: 2928 - hash: "7dd4e7d606e953c872c57fad786d64aa" - } - Frame { - msec: 2944 - hash: "117cc903a39d99ca22f6556095e6f883" - } - Frame { - msec: 2960 - hash: "c6c9304fd65fee1909473bdb21ac7806" - } - Frame { - msec: 2976 - hash: "8e704fe81c040f49c4d80e7dcc46084d" - } - Frame { - msec: 2992 - hash: "d202d5c0a058e1e088fdd280e59f17bb" - } - Frame { - msec: 3008 - hash: "90c072dea32c056f8bd6d010df681929" - } - Frame { - msec: 3024 - hash: "80b4e99f1b47e64084e295a2a3e1121e" - } - Frame { - msec: 3040 - hash: "41d6307075ec9ae9e92d227921f71289" - } - Frame { - msec: 3056 - hash: "f33de23cf4a5c4881310c6866261d387" - } - Frame { - msec: 3072 - hash: "441faa0a1fc95d66b27479dfc1e40188" - } - Frame { - msec: 3088 - hash: "2314b5f6ba3864abd5e87bc87bd621b0" - } - Frame { - msec: 3104 - hash: "e71e3b0ad953258ceef3101e38283fdb" - } - Frame { - msec: 3120 - hash: "890c3b0e727f136bf1ccc486531c9677" - } - Frame { - msec: 3136 - hash: "2a0d23e6dcc6475c323dbf8eb36e8094" - } - Frame { - msec: 3152 - hash: "692682e82347936f87a66484b428e959" - } - Frame { - msec: 3168 - hash: "cf4005c08789762ad21be1a1d78755c9" - } - Frame { - msec: 3184 - hash: "566184563091626bb20ae679e3ce3b91" - } - Frame { - msec: 3200 - hash: "f88a24ad3bbc2699924bb9a7ff6490b3" - } - Frame { - msec: 3216 - hash: "23f3f63d07b2bdc2b82ff4e8606a634d" - } - Frame { - msec: 3232 - hash: "fe121c71ce469ec6f0bf957eb2f0447b" - } - Frame { - msec: 3248 - hash: "ba217690a33c701afe11842aa8105cbb" - } - Frame { - msec: 3264 - hash: "e5c7c1323108f13ba26f5198cc62c137" - } - Frame { - msec: 3280 - hash: "664f76d3d0008b56be2790c470befc91" - } - Frame { - msec: 3296 - hash: "b3f54070ba64b983ccd2a15941ef4c35" - } - Frame { - msec: 3312 - hash: "8a0ba2ae36ad3811778f3a3bc55743f5" - } - Frame { - msec: 3328 - hash: "bfdc71733ca45a2ba2e8abf751554a62" - } - Frame { - msec: 3344 - hash: "686e4d7bb5ae148d37fc2a1f6004a33a" - } - Frame { - msec: 3360 - hash: "29c553d9fe42fdbbd019d0ead61dffa0" - } - Frame { - msec: 3376 - hash: "bfa2b72c6554a2ed80a3b86f2cbed986" - } - Frame { - msec: 3392 - hash: "074ff90417a947f0a04926d5675d073b" - } - Frame { - msec: 3408 - hash: "6f56f9e0aa40149156ca71d6f8d4476a" - } - Frame { - msec: 3424 - hash: "950ce749bbf572021de2dd1688cb87e6" - } - Frame { - msec: 3440 - hash: "2d0903bd71862dc6f28bd702d955ae99" - } - Frame { - msec: 3456 - hash: "2733adae56728f1b744a4086ecb98052" - } - Frame { - msec: 3472 - hash: "779859d739e799bba15beeb97d18e682" - } - Frame { - msec: 3488 - hash: "9074386cfabe136b8839637e5cd58f57" - } - Frame { - msec: 3504 - hash: "fa5bcbf20c6ad0a218f23d98961229a1" - } - Frame { - msec: 3520 - hash: "5406c94da1717eaa5eb0010564216059" - } - Frame { - msec: 3536 - hash: "27d0a3c3a33c04df843bebd72ef79824" - } - Frame { - msec: 3552 - hash: "270df9c99c2679071b854b3d82337f79" - } - Frame { - msec: 3568 - hash: "5b3945505443a67e7a91f66fe42b4fe3" - } - Frame { - msec: 3584 - hash: "9a2f8565c354cb366725368ed323ccf4" - } - Frame { - msec: 3600 - hash: "6702cb7ccd61c008b511932d7bd5d107" - } - Frame { - msec: 3616 - hash: "f6b86c3a1cc88357f588b6dae11aae30" - } - Frame { - msec: 3632 - hash: "b10c23937f420db72af8abaf126f71c2" - } - Frame { - msec: 3648 - hash: "7d6b0810ffc6e488c8168e19bccb7358" - } - Frame { - msec: 3664 - hash: "c01ef69ec46391909619434e9d9dd0ce" - } - Frame { - msec: 3680 - hash: "a046464fccb0c5ba1f63f8b569821a44" - } - Frame { - msec: 3696 - hash: "8763c526924d882438f9aa9bfb4fe87d" - } - Frame { - msec: 3712 - hash: "dede7a62d6e5c10e8f30caa075bd8dfd" - } - Frame { - msec: 3728 - hash: "3b408e5c986f5bb01d8c3949876b792f" - } - Frame { - msec: 3744 - hash: "0a458f3b17cdd3ea85522779c9346af9" - } - Frame { - msec: 3760 - hash: "fef521f0301cce90af88d37e6d441ec8" - } - Frame { - msec: 3776 - hash: "3d083e0822242b3b37c6839ca91a1f68" - } - Frame { - msec: 3792 - hash: "f8fe013a717e6e61830137bdc78a8b40" - } - Frame { - msec: 3808 - hash: "0ae80ad65dd194043500fa50b5a547a6" - } - Frame { - msec: 3824 - hash: "a53c67fa32ef971eaea202fa5d8a6ad6" - } - Frame { - msec: 3840 - image: "easefollow.3.png" - } - Frame { - msec: 3856 - hash: "41f86bbf0658b127f01e8d46d7ec941b" - } - Frame { - msec: 3872 - hash: "d20f21df127565f9eb87c5d759a638d9" - } - Frame { - msec: 3888 - hash: "85ff94f03cea3e111807e90d062c1367" - } - Frame { - msec: 3904 - hash: "aa637850fe5f05a71ac4c7d31dbb36ee" - } - Frame { - msec: 3920 - hash: "c86a67096c5e62bb73b785cdf6a5b6b1" - } - Frame { - msec: 3936 - hash: "9d53537f2c50a0016bf7bb522b2ec3d8" - } - Frame { - msec: 3952 - hash: "b48630c27c27785ddce568a85d4dc58f" - } - Frame { - msec: 3968 - hash: "01c1bdb6e261cc509f26712b13eeb554" - } - Frame { - msec: 3984 - hash: "af8a44284695fd999acd5944434f0372" - } - Frame { - msec: 4000 - hash: "b156d9d6d5163f007ac4a309d8927ae9" - } - Frame { - msec: 4016 - hash: "2df3715416c3c005f04b66fe1258c0d8" - } - Frame { - msec: 4032 - hash: "96b4a7c6b8542b50fc345b54d38ec82a" - } - Frame { - msec: 4048 - hash: "7e62e757fafa06833444c3a7e1d96ce4" - } - Frame { - msec: 4064 - hash: "5222a8f9366c7d974d0687d05d229069" - } - Frame { - msec: 4080 - hash: "ec96169f4633c3bddfd582feeb8e9ad4" - } - Frame { - msec: 4096 - hash: "cb10db893d1e1cb2a370507dc5679985" - } - Frame { - msec: 4112 - hash: "d7e346c2ac77796bde639bd829b72e85" - } - Frame { - msec: 4128 - hash: "ba5bea8857e4fb444bedd3873563e7db" - } - Frame { - msec: 4144 - hash: "05556fba5d1714f70fd6c2bfb43d213b" - } - Frame { - msec: 4160 - hash: "aeeabf35f9759f045a670a9b9f90dc68" - } - Frame { - msec: 4176 - hash: "131bd453f4c7726e5fdd546252700e2e" - } - Frame { - msec: 4192 - hash: "7c5c3b5bb7a4082e6b9b43640e29f4e2" - } - Frame { - msec: 4208 - hash: "07515e21b7a7895f333e4a8bbd2202eb" - } - Frame { - msec: 4224 - hash: "6cf136f223ac6edd39ba6ed9b4445884" - } - Frame { - msec: 4240 - hash: "84264f5745add8a922101735ed8def84" - } - Frame { - msec: 4256 - hash: "660863d1e4b361f2e5445b417be0d2ad" - } - Frame { - msec: 4272 - hash: "7ceb86f4b16546370d72164d0ca3147c" - } - Frame { - msec: 4288 - hash: "a13e97da9722545ad87ac3c5eb92c497" - } - Frame { - msec: 4304 - hash: "5896b5307cbd609d2062d3607786d40c" - } - Frame { - msec: 4320 - hash: "c8c511115394116e4544c67f615ea5d5" - } - Frame { - msec: 4336 - hash: "59ca5fdf12a735e5c292901b54acccb2" - } - Frame { - msec: 4352 - hash: "155cce2738d34e0eac86f5eb63d638f0" - } - Frame { - msec: 4368 - hash: "83a840c3ae7dbd9a05c17fdd8be07d7a" - } - Frame { - msec: 4384 - hash: "800a15de28b14d88f0ad58fc3f4a2520" - } - Frame { - msec: 4400 - hash: "c8381439a3cd3f9e7f80061023723a6e" - } - Frame { - msec: 4416 - hash: "e3d63000db4b9458b202dece49d1bdba" - } - Frame { - msec: 4432 - hash: "c943e56781695798f3c221f8ab09681a" - } - Frame { - msec: 4448 - hash: "1137ee66d7fbf5a84c33f5ffff15b3dd" - } - Frame { - msec: 4464 - hash: "5a98013cc4462aad18cad8d941f77aa0" - } - Frame { - msec: 4480 - hash: "d0b3748fb49a13c0ad9a68b0e2914921" - } - Frame { - msec: 4496 - hash: "12113f71f9117670acbd7877edded7e0" - } - Frame { - msec: 4512 - hash: "22983424da08cdae7a9c6a8905b37736" - } - Frame { - msec: 4528 - hash: "b2db5618a025cefb2650124c81880c49" - } - Frame { - msec: 4544 - hash: "84fb5e7edc5b42163a83e0cd362b3a46" - } - Frame { - msec: 4560 - hash: "39d6f1ed0f60a0c366c22e1442c455ac" - } - Frame { - msec: 4576 - hash: "702367f6e4aaa2a862e57f9e02a08758" - } - Frame { - msec: 4592 - hash: "ecc75293bc156c560d55cb7d278a4e58" - } - Frame { - msec: 4608 - hash: "e68af8e97ce65376fd7904e599440c92" - } - Frame { - msec: 4624 - hash: "75fe9f766d6cf636cd72d8879a461439" - } - Frame { - msec: 4640 - hash: "162aef147ef4bbb0cd92bd70e4f37f62" - } - Frame { - msec: 4656 - hash: "d879aae8949976c7bad4d97f1e5b5549" - } - Frame { - msec: 4672 - hash: "8a983d7228190721f988de2d72cb3aa2" - } - Frame { - msec: 4688 - hash: "a4f3c63fde664d128cd35b129a4f9a23" - } - Frame { - msec: 4704 - hash: "115fb5f3c9b7f1c28ab379596faba91c" - } - Frame { - msec: 4720 - hash: "ea9600c4d6c77a3b32e59401aa84fe96" - } - Frame { - msec: 4736 - hash: "bd6531fdd9cfd46af2df73bacb31f4c5" - } - Frame { - msec: 4752 - hash: "33bdcf1df50eab5e7963c649fbd32226" - } - Frame { - msec: 4768 - hash: "236e88fb72369a55f9eba4b50712ae85" - } - Frame { - msec: 4784 - hash: "5eb3c14a6296fb3a1c58603b2fc937c8" - } - Frame { - msec: 4800 - image: "easefollow.4.png" - } - Frame { - msec: 4816 - hash: "31d11a1ce6422524241c77603fe53e61" - } - Frame { - msec: 4832 - hash: "44e8b9947026c10b922c84883dd8e889" - } - Frame { - msec: 4848 - hash: "d049e4f7c4bc1849398859a4d630c1b3" - } - Frame { - msec: 4864 - hash: "e83b4757898e4eeef74be8213619fbfa" - } - Frame { - msec: 4880 - hash: "d08f40615f2d5abc6236e856a67575dd" - } - Frame { - msec: 4896 - hash: "d9cb26bf1b8bbafb2aed8f74bd454077" - } - Frame { - msec: 4912 - hash: "aa321b94a6cc53b2ebac80e834c0a908" - } - Frame { - msec: 4928 - hash: "48da37164be156b67a4b3b14e50f2375" - } - Frame { - msec: 4944 - hash: "f522ce7728a4a9e7fad86c72f29bd8f9" - } - Frame { - msec: 4960 - hash: "9bc1d16b4bda596702a3d8a3fad8a5c5" - } - Frame { - msec: 4976 - hash: "5275dccf18745dec6c59b846de17d9ef" - } - Frame { - msec: 4992 - hash: "4eb6babc177b96f69b148d52f56d82d7" - } - Frame { - msec: 5008 - hash: "ccdfb454070ac04c4fe4f3513c52f8c8" - } - Frame { - msec: 5024 - hash: "07f6adad6e8ff4f0eff92c758636a951" - } - Frame { - msec: 5040 - hash: "241e0ad9218d49be477509e008e45548" - } - Frame { - msec: 5056 - hash: "151a482e821779da8a61063f1cc73f8c" - } - Frame { - msec: 5072 - hash: "1499d207c5a3a9bc7bbb84d9c5e35578" - } - Frame { - msec: 5088 - hash: "c253753f653157a5058ef071f16b8bbb" - } - Frame { - msec: 5104 - hash: "ec9fea5a870724a106b952edef7fb466" - } - Frame { - msec: 5120 - hash: "99b673f8ed049d31a2aecabcc46d841d" - } - Frame { - msec: 5136 - hash: "61e77fea693ea55aafbdc94c40c3ab33" - } - Frame { - msec: 5152 - hash: "53e44a3732ee6858d5bd596b4c5d5305" - } - Frame { - msec: 5168 - hash: "5b25d3894a56dc4f4a0aa8f88cb69e23" - } - Frame { - msec: 5184 - hash: "5683ad02f1b9126f4e4ff6b03044fdc6" - } - Frame { - msec: 5200 - hash: "0a3ec255575ec1b70e0b10cf59c7c5fd" - } - Frame { - msec: 5216 - hash: "0f5f46fe3fdf42d4651891f13c8afc7e" - } - Frame { - msec: 5232 - hash: "b6955407245c73e356a460d99dad77be" - } - Frame { - msec: 5248 - hash: "6018b53414921943b37c33fa04a29697" - } - Frame { - msec: 5264 - hash: "ff184d349ce0b648f8c1fce91ae997f6" - } - Frame { - msec: 5280 - hash: "9c112a3a785d970593887eeab72fa7fe" - } - Frame { - msec: 5296 - hash: "00384fb20d4c6cd6236d519d2d734cc3" - } - Frame { - msec: 5312 - hash: "601ea99400e5f50ee9a5a4b74b6f3017" - } - Frame { - msec: 5328 - hash: "9afed04bf7eca24d9b6d31ac84ae59c2" - } - Frame { - msec: 5344 - hash: "1983319c8043bfe403513af7ccb5b924" - } - Frame { - msec: 5360 - hash: "b0244e4e1b61202ede78405415c22bca" - } - Frame { - msec: 5376 - hash: "ec5516b1aaeace8784b04649c51ab40b" - } - Frame { - msec: 5392 - hash: "8ff7d2001594abb588f769bab15406d7" - } - Frame { - msec: 5408 - hash: "64d5fd96a1726aa5276f9b508566676f" - } - Frame { - msec: 5424 - hash: "ab49497a6c825038354f076bdbbbc235" - } - Frame { - msec: 5440 - hash: "6b821e43be932800b20af58a7b5a1ff7" - } - Frame { - msec: 5456 - hash: "683a2902300f930e2a81a82dc37c583b" - } - Frame { - msec: 5472 - hash: "86d7946d7fbb66369ccbf26430939225" - } - Frame { - msec: 5488 - hash: "fb38f5fb6555fc14e95a47c595a6ea0c" - } - Frame { - msec: 5504 - hash: "3878f685d9fa3299e9ffe78c22595387" - } - Frame { - msec: 5520 - hash: "b48840a68ff007901b02332c7177f315" - } - Frame { - msec: 5536 - hash: "9d847abc99220b04aceef12e5c09aac0" - } - Frame { - msec: 5552 - hash: "9893ac89fda64d96ec4140c3c87e17a5" - } - Frame { - msec: 5568 - hash: "cd94e1c36e6be9877cd9c12df42bd968" - } - Frame { - msec: 5584 - hash: "c1ce5e53b74af022dc103ad74ff5f1af" - } - Frame { - msec: 5600 - hash: "b3630e08eac02a9578a00b01baabaaba" - } - Frame { - msec: 5616 - hash: "0eb9241aa1f9526c1e24ba76d630805c" - } - Frame { - msec: 5632 - hash: "1b532ae7f9253469467522d4ca66c47b" - } - Frame { - msec: 5648 - hash: "7e6e49079ed6330da2e337a5e4ffd730" - } - Frame { - msec: 5664 - hash: "0391d668f4b906b244a5f5c1713573c2" - } - Frame { - msec: 5680 - hash: "8070fa3280d0d64bf976d4a276359c4c" - } - Frame { - msec: 5696 - hash: "f7d0d36a2d40c798f56ac7ecc1effca6" - } - Frame { - msec: 5712 - hash: "9f8e35ee5080e811c670c480a9c2bd9f" - } - Frame { - msec: 5728 - hash: "c7fea75a43a59a11aa504df32afcdaf8" - } - Frame { - msec: 5744 - hash: "7e549a93ffc6ddcc3d8111f10c05b29e" - } - Frame { - msec: 5760 - image: "easefollow.5.png" - } - Frame { - msec: 5776 - hash: "92d298262f610a2dafa095e3d67c80af" - } - Frame { - msec: 5792 - hash: "db8826b0b2feece0999863b8827a6234" - } - Frame { - msec: 5808 - hash: "12c7050e8094bb39212aed0163666d1a" - } - Frame { - msec: 5824 - hash: "69531beace5c749bf90160a4b25f736a" - } - Frame { - msec: 5840 - hash: "ce873e4dbc8853183b54d59991b2e030" - } - Frame { - msec: 5856 - hash: "fa1078973634578d69527402b11fb7e0" - } - Frame { - msec: 5872 - hash: "1e3b3db590567c0afd1913101192cda9" - } - Frame { - msec: 5888 - hash: "7b9e097018278b784973a546da3d401a" - } - Frame { - msec: 5904 - hash: "a7b0667093888480de6697280aeea9ba" - } - Frame { - msec: 5920 - hash: "e381f2422ead86575abf643b0b0c9797" - } - Frame { - msec: 5936 - hash: "44b08f5a0de2a6955e02f67753f409c8" - } - Frame { - msec: 5952 - hash: "db04665e58448ecc7f95baa3e4ea79a5" - } - Frame { - msec: 5968 - hash: "0e4aae728d8d543538a9446c41e18e91" - } - Frame { - msec: 5984 - hash: "e3cd1bbb1d9963e5c74d36e526a871b0" - } - Frame { - msec: 6000 - hash: "bcd893a0e200ddda4e1468c159018865" - } - Frame { - msec: 6016 - hash: "9c5293356aa6312f909e655e9bcf961b" - } - Frame { - msec: 6032 - hash: "0bab7b9166f6af554d4fa0badeec739e" - } - Frame { - msec: 6048 - hash: "e74996581f0aaeced118c5cbfd977d90" - } - Frame { - msec: 6064 - hash: "5d128eb20a2a23da8c2d9a35293e5769" - } - Frame { - msec: 6080 - hash: "ebbbc343698287faf7ffa7526a726b54" - } - Frame { - msec: 6096 - hash: "d812172192cc19590f9a2d7dbf970439" - } - Frame { - msec: 6112 - hash: "60263addb1b4b5ac43f8199b8ed77e40" - } - Frame { - msec: 6128 - hash: "702a1ff2876eaaa59359811bb6437c5b" - } - Frame { - msec: 6144 - hash: "8f81dc43decce5094ee7a089f0009730" - } - Frame { - msec: 6160 - hash: "efda5dd9edd83a0da089d0b28806c6b6" - } - Frame { - msec: 6176 - hash: "7274a33a7a5272d7abdaf41f4b2bf664" - } - Frame { - msec: 6192 - hash: "0cc80077476e721a3da85c17cc56a65e" - } - Frame { - msec: 6208 - hash: "e65a534f0e7e70520a9c2cfa09ee8159" - } - Frame { - msec: 6224 - hash: "b05b514c63bd8998785382e6a9cbd849" - } - Frame { - msec: 6240 - hash: "10a04d641e0cc65c120d8bcf2f3e54c8" - } - Frame { - msec: 6256 - hash: "68418e2206a496dd15a05b50fec6f87e" - } - Frame { - msec: 6272 - hash: "6549e0989e1c86e3a7eb0dcc8dd31380" - } - Frame { - msec: 6288 - hash: "bd0193c2cbc8958f674f4ec52a693b72" - } - Frame { - msec: 6304 - hash: "746440b45a3688dbd32b34c57454e956" - } - Frame { - msec: 6320 - hash: "6b54ee8af30be2178e8b3afab5dcb4c7" - } - Frame { - msec: 6336 - hash: "ba2fbad3fe2fe25ec0c0c542659168dc" - } - Frame { - msec: 6352 - hash: "84bd72703bd8200f8f090783d06ae451" - } - Frame { - msec: 6368 - hash: "17c9fb063280c2ee4cb4a13273bbb199" - } - Frame { - msec: 6384 - hash: "df28fd55719f5c2d164596d02c2faff2" - } - Frame { - msec: 6400 - hash: "c2e280e78e892200d40022d17ce695b7" - } - Frame { - msec: 6416 - hash: "c657caa0c5158e178ec5df80bbad6bcb" - } - Frame { - msec: 6432 - hash: "d91f4f6ec6503fe8280f9b02dd11e64a" - } - Frame { - msec: 6448 - hash: "0fb9400cdca9dbd4035fbf8af9952360" - } - Frame { - msec: 6464 - hash: "cac0e1b4aa094306b95f90ede4705391" - } - Frame { - msec: 6480 - hash: "e60a4bb14300a937a767effee931c60f" - } - Frame { - msec: 6496 - hash: "8b461397e3f210ee7e9305dcab2af2db" - } - Frame { - msec: 6512 - hash: "6ce9ec0942dd06c9f73929a7e176852c" - } - Frame { - msec: 6528 - hash: "da36e254635eea854a6552ba008117f9" - } - Frame { - msec: 6544 - hash: "0bec6402b5eb09d05ce8e9ff5253ea8d" - } - Frame { - msec: 6560 - hash: "72f6610527d395ca590eda166ef6bc4e" - } - Frame { - msec: 6576 - hash: "622ae3fd47adb2432e2a40d3c5539393" - } - Frame { - msec: 6592 - hash: "0b18c49e2bbf9370216e06b555faf183" - } - Frame { - msec: 6608 - hash: "0c090bb975fb883301b52479fd6f5fdf" - } - Frame { - msec: 6624 - hash: "c4205d7ecb7327426d9591e77247acab" - } - Frame { - msec: 6640 - hash: "f0e0075243e4b8aa97056248fe6033ed" - } - Frame { - msec: 6656 - hash: "47f99b40a8764ee9d9e429061fb7acb2" - } - Frame { - msec: 6672 - hash: "49e8c1e974b0716570d85109b53817a5" - } - Frame { - msec: 6688 - hash: "72f981bad831b6ed858009527902f734" - } - Frame { - msec: 6704 - hash: "e959a0493b06369a429f90f66cb65977" - } - Frame { - msec: 6720 - image: "easefollow.6.png" - } - Frame { - msec: 6736 - hash: "93470d983282f24425558f47ad705154" - } - Frame { - msec: 6752 - hash: "cdccbe1a7c7abd4a6a6ee754ed0c9759" - } - Frame { - msec: 6768 - hash: "0e1b7b5332a9fcdb492db5314a2a0267" - } - Frame { - msec: 6784 - hash: "1e1ffe3439aab51d0b325474e7d8dc28" - } - Frame { - msec: 6800 - hash: "e8e7e9b5871caf77f15678616d6c9c8a" - } - Frame { - msec: 6816 - hash: "9771fff3b7752154d093c038bea73d28" - } - Frame { - msec: 6832 - hash: "1af851ea214cbddb0e3a743084a5cf6b" - } - Frame { - msec: 6848 - hash: "1566182a7e29bbb738705a90c4909617" - } - Frame { - msec: 6864 - hash: "feed650e1d948fe622234d212fb745f2" - } - Frame { - msec: 6880 - hash: "3cd3d063275b91f9680717421c118ba4" - } - Frame { - msec: 6896 - hash: "c1f088801334762cd499e7cc70e1e59a" - } - Frame { - msec: 6912 - hash: "e8f8d153e7a027a5092a9209411d97f7" - } - Frame { - msec: 6928 - hash: "f11747c3533b4b2fc77a64ca0cace8b0" - } - Frame { - msec: 6944 - hash: "21618c67a2a8bbce86fc872060ad40e8" - } - Frame { - msec: 6960 - hash: "02da96335db74b87ceefe91b1dfe72e6" - } - Frame { - msec: 6976 - hash: "2b2e4143143ead8dea5865fd782f1775" - } - Frame { - msec: 6992 - hash: "13e710900b05e26cdb030b1e2b2be715" - } - Frame { - msec: 7008 - hash: "29e8995d17aac4d02034debcbb9fcb98" - } - Frame { - msec: 7024 - hash: "1099db1b3e4c69e84c6ab1b7c311bf1e" - } - Frame { - msec: 7040 - hash: "cc7cb720043334f1eeb385dce4389dc2" - } - Frame { - msec: 7056 - hash: "34c7a62c1bc7261e2fd31c40068b37a7" - } - Frame { - msec: 7072 - hash: "7fafbe05cbcaa21893e3aa0f1fcfb5a0" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 7088 - hash: "5b26c8cf047706633795a8ed3e703a89" - } - Frame { - msec: 7104 - hash: "e0774bf9e74d0cde81c5cb216a9258fc" - } - Frame { - msec: 7120 - hash: "0870262f643245e13f4fba79fd575897" - } - Frame { - msec: 7136 - hash: "8faf0d050bb435ade8af5012c1a6b0dc" - } - Frame { - msec: 7152 - hash: "382c037895cc39a6870db57b5016c01f" - } - Frame { - msec: 7168 - hash: "f1f5a2cbc103ab1bee9f537fa8266e03" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedanimation.qml b/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedanimation.qml deleted file mode 100644 index ac0c141..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativesmoothedanimation/smoothedanimation.qml +++ /dev/null @@ -1,45 +0,0 @@ -import QtQuick 1.0 - -Rectangle { - width: 800; height: 240; color: "gray" - - Rectangle { - id: rect - width: 50; height: 20; y: 30; color: "black" - SequentialAnimation on x { - loops: Animation.Infinite - NumberAnimation { from: 50; to: 700; duration: 2000 } - NumberAnimation { from: 700; to: 50; duration: 2000 } - } - } - - Rectangle { - width: 50; height: 20; y: 60; color: "red" - x: rect.x - Behavior on x { SmoothedAnimation { velocity: 400 } } - } - - Rectangle { - width: 50; height: 20; y: 90; color: "yellow" - x: rect.x - Behavior on x { SmoothedAnimation { velocity: 300; reversingMode: SmoothedAnimation.Immediate } } - } - - Rectangle { - width: 50; height: 20; y: 120; color: "green" - x: rect.x - Behavior on x { SmoothedAnimation { reversingMode: SmoothedAnimation.Sync } } - } - - Rectangle { - width: 50; height: 20; y: 150; color: "purple" - x: rect.x - Behavior on x { SmoothedAnimation { maximumEasingTime: 200 } } - } - - Rectangle { - width: 50; height: 20; y: 180; color: "blue" - x: rect.x - Behavior on x { SmoothedAnimation { duration: 300 } } - } -} -- cgit v0.12 From 55c4d94dfea78951f3371d3697a3cb28539b3012 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Fri, 29 Oct 2010 12:21:10 +1000 Subject: Regression: QML fonts look bad on Mac with font smoothing on Task-number: QTBUG-14840 --- src/declarative/util/qdeclarativeview.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/declarative/util/qdeclarativeview.cpp b/src/declarative/util/qdeclarativeview.cpp index 2381172..0e31a20 100644 --- a/src/declarative/util/qdeclarativeview.cpp +++ b/src/declarative/util/qdeclarativeview.cpp @@ -72,6 +72,7 @@ QT_BEGIN_NAMESPACE DEFINE_BOOL_CONFIG_OPTION(frameRateDebug, QML_SHOW_FRAMERATE) +extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled; class QDeclarativeScene : public QGraphicsScene { @@ -696,7 +697,14 @@ void QDeclarativeView::paintEvent(QPaintEvent *event) if (frameRateDebug()) time = d->frameTimer.restart(); +#ifdef Q_WS_MAC + bool oldSmooth = qt_applefontsmoothing_enabled; + qt_applefontsmoothing_enabled = false; +#endif QGraphicsView::paintEvent(event); +#ifdef Q_WS_MAC + qt_applefontsmoothing_enabled = oldSmooth; +#endif QDeclarativeDebugTrace::endRange(QDeclarativeDebugTrace::Painting); -- cgit v0.12 From 2255e4f681d20b095f328a8ee3f33ce328353a8f Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 13:14:12 +1000 Subject: Update qdeclarativespringanimation visual tests Still correct, main problem was not getting updated visuals when we switched away from follows. Task-number: QTBUG-14792 --- .../qdeclarativespringanimation/clock.qml | 64 + .../content/background.png | Bin 0 -> 46895 bytes .../qdeclarativespringanimation/content/center.png | Bin 0 -> 765 bytes .../qdeclarativespringanimation/content/clock.png | Bin 0 -> 20653 bytes .../qdeclarativespringanimation/content/hour.png | Bin 0 -> 625 bytes .../qdeclarativespringanimation/content/minute.png | Bin 0 -> 625 bytes .../qdeclarativespringanimation/content/second.png | Bin 0 -> 303 bytes .../qdeclarativespringanimation/data/clock.0.png | Bin 0 -> 16437 bytes .../qdeclarativespringanimation/data/clock.1.png | Bin 0 -> 16543 bytes .../qdeclarativespringanimation/data/clock.qml | 615 +++++++ .../qdeclarativespringanimation/data/follow.0.png | Bin 0 -> 975 bytes .../qdeclarativespringanimation/data/follow.1.png | Bin 0 -> 1244 bytes .../qdeclarativespringanimation/data/follow.2.png | Bin 0 -> 1225 bytes .../qdeclarativespringanimation/data/follow.3.png | Bin 0 -> 1243 bytes .../qdeclarativespringanimation/data/follow.4.png | Bin 0 -> 1230 bytes .../qdeclarativespringanimation/data/follow.5.png | Bin 0 -> 1244 bytes .../qdeclarativespringanimation/data/follow.6.png | Bin 0 -> 1242 bytes .../qdeclarativespringanimation/data/follow.qml | 1763 ++++++++++++++++++++ .../qdeclarativespringanimation/follow.qml | 79 + .../qmlvisual/qdeclarativespringfollow/clock.qml | 67 - .../content/background.png | Bin 46895 -> 0 bytes .../qdeclarativespringfollow/content/center.png | Bin 765 -> 0 bytes .../qdeclarativespringfollow/content/clock.png | Bin 20653 -> 0 bytes .../qdeclarativespringfollow/content/hour.png | Bin 625 -> 0 bytes .../qdeclarativespringfollow/content/minute.png | Bin 625 -> 0 bytes .../qdeclarativespringfollow/content/second.png | Bin 303 -> 0 bytes .../qdeclarativespringfollow/data/clock.0.png | Bin 17294 -> 0 bytes .../qdeclarativespringfollow/data/clock.1.png | Bin 17394 -> 0 bytes .../qdeclarativespringfollow/data/clock.2.png | Bin 17524 -> 0 bytes .../qdeclarativespringfollow/data/clock.3.png | Bin 17572 -> 0 bytes .../qdeclarativespringfollow/data/clock.qml | 1135 ------------- .../qdeclarativespringfollow/data/follow.0.png | Bin 959 -> 0 bytes .../qdeclarativespringfollow/data/follow.1.png | Bin 1244 -> 0 bytes .../qdeclarativespringfollow/data/follow.10.png | Bin 1299 -> 0 bytes .../qdeclarativespringfollow/data/follow.2.png | Bin 1224 -> 0 bytes .../qdeclarativespringfollow/data/follow.3.png | Bin 1243 -> 0 bytes .../qdeclarativespringfollow/data/follow.4.png | Bin 1230 -> 0 bytes .../qdeclarativespringfollow/data/follow.5.png | Bin 1231 -> 0 bytes .../qdeclarativespringfollow/data/follow.6.png | Bin 1239 -> 0 bytes .../qdeclarativespringfollow/data/follow.7.png | Bin 1241 -> 0 bytes .../qdeclarativespringfollow/data/follow.8.png | Bin 1237 -> 0 bytes .../qdeclarativespringfollow/data/follow.9.png | Bin 1229 -> 0 bytes .../qdeclarativespringfollow/data/follow.qml | 1763 -------------------- .../qmlvisual/qdeclarativespringfollow/follow.qml | 79 - 44 files changed, 2521 insertions(+), 3044 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/clock.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/background.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/center.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/clock.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/hour.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/minute.png create mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/second.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringanimation/follow.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/background.png delete mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/center.png delete mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/clock.png delete mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/hour.png delete mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/minute.png delete mode 100755 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/second.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.0.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.1.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.10.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.2.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.3.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.4.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.5.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.6.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.7.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.8.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.9.png delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.qml delete mode 100644 tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/clock.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/clock.qml new file mode 100644 index 0000000..0e4e642 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/clock.qml @@ -0,0 +1,64 @@ +import QtQuick 1.0 + +Rectangle { + id: clock + color: "gray" + width: 200; height: 200 + + property variant hours: 10 + property variant minutes: 28 + property variant seconds: 0 + + Timer { + interval: 1000; running: true; repeat: true; triggeredOnStart: true + onTriggered: seconds++ + } + + Image { id: background; source: "content/clock.png" } + + Image { + x: 92.5; y: 27 + source: "content/hour.png" + transform: Rotation { + id: hourRotation + origin.x: 7.5; origin.y: 73 + angle: (clock.hours * 30) + (clock.minutes * 0.5) + + Behavior on angle { + SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } + } + } + } + + Image { + x: 93.5; y: 17 + source: "content/minute.png" + transform: Rotation { + id: minuteRotation + origin.x: 6.5; origin.y: 83 + angle: clock.minutes * 6 + + Behavior on angle { + SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } + } + } + } + + Image { + x: 97.5; y: 20 + source: "content/second.png" + transform: Rotation { + id: secondRotation + origin.x: 2.5; origin.y: 80 + angle: clock.seconds * 6 + + Behavior on angle { + SpringAnimation { spring: 5; damping: 0.25; modulus: 360 } + } + } + } + + Image { + anchors.centerIn: background; source: "content/center.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/background.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/background.png new file mode 100644 index 0000000..a885950 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/background.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/center.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/center.png new file mode 100755 index 0000000..7fbd802 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/center.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/clock.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/clock.png new file mode 100755 index 0000000..462edac Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/clock.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/hour.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/hour.png new file mode 100755 index 0000000..f8061a1 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/hour.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/minute.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/minute.png new file mode 100755 index 0000000..1297ec7 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/minute.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/second.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/second.png new file mode 100755 index 0000000..4aa9fb5 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/content/second.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.0.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.0.png new file mode 100644 index 0000000..f159b6b Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.1.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.1.png new file mode 100644 index 0000000..d24af1a Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.qml new file mode 100644 index 0000000..a3cd66b --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/clock.qml @@ -0,0 +1,615 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "cb33c89e5108c85e43b53489d1255862" + } + Frame { + msec: 32 + hash: "cb33c89e5108c85e43b53489d1255862" + } + Frame { + msec: 48 + hash: "fcf631cb42237d2ce9e57ef5fef85f93" + } + Frame { + msec: 64 + hash: "a9f1e24d60588ff9b565b15847669438" + } + Frame { + msec: 80 + hash: "c5a07045cd24b835fdd0653db5b34f9f" + } + Frame { + msec: 96 + hash: "bce3e9bfa92f81f0c8746a4777ce1b3e" + } + Frame { + msec: 112 + hash: "6da93132be1be8b42aaf007306ce5990" + } + Frame { + msec: 128 + hash: "8695e73f009bd20f3f3aae4a6b8f0098" + } + Frame { + msec: 144 + hash: "172ece19e661999ce48053007a92f107" + } + Frame { + msec: 160 + hash: "6e02e658d8873dd678dc9cc7cc8035a0" + } + Frame { + msec: 176 + hash: "d8e9bad91fd91bce0310a24233ecb906" + } + Frame { + msec: 192 + hash: "9c23533f0a4d47ec192bed2e48f11c60" + } + Frame { + msec: 208 + hash: "9c23533f0a4d47ec192bed2e48f11c60" + } + Frame { + msec: 224 + hash: "be0ee20e9eb94b80171f66fa6f1c2441" + } + Frame { + msec: 240 + hash: "83b841f7ea7a5e92a21ec0d0130b4281" + } + Frame { + msec: 256 + hash: "3bbf822e403f4198fbfaa6973726947d" + } + Frame { + msec: 272 + hash: "172ece19e661999ce48053007a92f107" + } + Frame { + msec: 288 + hash: "602ca5ac2fc928b831d8e10de01f5bf7" + } + Frame { + msec: 304 + hash: "9f07659e63a5b3412ede3c8400678cc6" + } + Frame { + msec: 320 + hash: "6104f86706bd11cee6b5aeef495eacfa" + } + Frame { + msec: 336 + hash: "b564cfe8c73b3d51e07bbcf5320868f8" + } + Frame { + msec: 352 + hash: "b2136411eee23d64718a63269071499f" + } + Frame { + msec: 368 + hash: "7f610f3b80c2cf002c6565ac4b7a8325" + } + Frame { + msec: 384 + hash: "5480e79cc96fdaffecb2d9dec254c8d4" + } + Frame { + msec: 400 + hash: "50eea6c6f135c21ecf05fc83ad1ae9a8" + } + Frame { + msec: 416 + hash: "2d3634d621782194674da127abe66039" + } + Frame { + msec: 432 + hash: "285180aa632c9247c3b7aa26f5544da6" + } + Frame { + msec: 448 + hash: "8695e73f009bd20f3f3aae4a6b8f0098" + } + Frame { + msec: 464 + hash: "914dc6254f29a6cffc80e90a23b61130" + } + Frame { + msec: 480 + hash: "a564dc3a53b607ca7e9fc6920b65abc3" + } + Frame { + msec: 496 + hash: "6104f86706bd11cee6b5aeef495eacfa" + } + Frame { + msec: 512 + hash: "6f34176630c5d9d421a1a31cb3b97a28" + } + Frame { + msec: 528 + hash: "62199c5663263fee08ba5ce560c7429d" + } + Frame { + msec: 544 + hash: "1110cb0281044eb0679e9dc373a7d063" + } + Frame { + msec: 560 + hash: "0ec354101faf6603c9ca56fe82dc8ac3" + } + Frame { + msec: 576 + hash: "0ec354101faf6603c9ca56fe82dc8ac3" + } + Frame { + msec: 592 + hash: "1110cb0281044eb0679e9dc373a7d063" + } + Frame { + msec: 608 + hash: "1110cb0281044eb0679e9dc373a7d063" + } + Frame { + msec: 624 + hash: "62199c5663263fee08ba5ce560c7429d" + } + Frame { + msec: 640 + hash: "1716d50c65b4319845fdc7ea1ceafe4d" + } + Frame { + msec: 656 + hash: "d087befa8f95f70e33604748230d5dd5" + } + Frame { + msec: 672 + hash: "7ae892fbab85d76e713ab70ca13d3f1f" + } + Frame { + msec: 688 + hash: "fb069bfb88b35f9f15273e04a62a9534" + } + Frame { + msec: 704 + hash: "41c69834e756bafc051ff65e149f8994" + } + Frame { + msec: 720 + hash: "f0c13b542b9ee9b0c9f4ef800900db16" + } + Frame { + msec: 736 + hash: "f0c13b542b9ee9b0c9f4ef800900db16" + } + Frame { + msec: 752 + hash: "f0c13b542b9ee9b0c9f4ef800900db16" + } + Frame { + msec: 768 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 784 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 800 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 816 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 832 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 848 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 864 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 880 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 896 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 912 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 928 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 944 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 960 + image: "clock.0.png" + } + Frame { + msec: 976 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 992 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 1008 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 1024 + hash: "2ff4e8f394a62892adb348271435205c" + } + Frame { + msec: 1040 + hash: "0ec9e1163fe8284ab27aa55f94bf3b14" + } + Frame { + msec: 1056 + hash: "9b6efbb358b1c7928e005620a60ab4a9" + } + Frame { + msec: 1072 + hash: "5be6fe791a3bb6f72a6c6a3d1e2fa86e" + } + Frame { + msec: 1088 + hash: "41fefdc45bd52600f7f108d4163d484b" + } + Frame { + msec: 1104 + hash: "45828a5bef6c4ad4d274c0ea46f72e44" + } + Frame { + msec: 1120 + hash: "17f0925ae38ee4c523713592d6b9f541" + } + Frame { + msec: 1136 + hash: "ed3acc723c29321751702903b57a557a" + } + Frame { + msec: 1152 + hash: "ded71422852eec4464f54e9c1b01b28a" + } + Frame { + msec: 1168 + hash: "0318d105aa5f7d3bebb0d24a85065f90" + } + Frame { + msec: 1184 + hash: "9abe4cb4e8ff6ffafd993b10ac55aad9" + } + Frame { + msec: 1200 + hash: "b92dba35b477ce11822277ba64582232" + } + Frame { + msec: 1216 + hash: "3a9a6106e1f12ffbc81ae9d4b30376fe" + } + Frame { + msec: 1232 + hash: "4647b6e6c95e3339094c7e2641458137" + } + Frame { + msec: 1248 + hash: "0977f3ed3ab6426423f7a7bfb0bd1726" + } + Frame { + msec: 1264 + hash: "930002bcd6986af36678d23c3dc17330" + } + Frame { + msec: 1280 + hash: "ded71422852eec4464f54e9c1b01b28a" + } + Frame { + msec: 1296 + hash: "16164138479aed4db7fd9a1c785556cb" + } + Frame { + msec: 1312 + hash: "0b884e6a8a1c93d62fcee037f9ad8745" + } + Frame { + msec: 1328 + hash: "dd1323c721a0ede74910c16df4b47074" + } + Frame { + msec: 1344 + hash: "ed3acc723c29321751702903b57a557a" + } + Frame { + msec: 1360 + hash: "e8c528178425f7c6089ed6d094e734fb" + } + Frame { + msec: 1376 + hash: "f2954641b11004bc4d29a217791e3833" + } + Frame { + msec: 1392 + hash: "5d4d4086c4aebf04eb5b0045cf9a36a8" + } + Frame { + msec: 1408 + hash: "f2954641b11004bc4d29a217791e3833" + } + Frame { + msec: 1424 + hash: "c2e47da0e709c9ddeee01ae29d3ad059" + } + Frame { + msec: 1440 + hash: "e539f0142b3f6c2f7de084ddedbe979e" + } + Frame { + msec: 1456 + hash: "ed3acc723c29321751702903b57a557a" + } + Frame { + msec: 1472 + hash: "ae191ede94be250b60744d81179c5054" + } + Frame { + msec: 1488 + hash: "f985b1ab4feae3bd7066e15bdd026c1a" + } + Frame { + msec: 1504 + hash: "dd1323c721a0ede74910c16df4b47074" + } + Frame { + msec: 1520 + hash: "c99c541e424ebe82f1cceea204f3ffdc" + } + Frame { + msec: 1536 + hash: "dcdeb76d6e4c676e736ec9fcf68f993b" + } + Frame { + msec: 1552 + hash: "599bfdb42d46a31bf8639e7b1c89526b" + } + Frame { + msec: 1568 + hash: "bef384984df19143de0c290a6621146d" + } + Frame { + msec: 1584 + hash: "bef384984df19143de0c290a6621146d" + } + Frame { + msec: 1600 + hash: "04192a5408bc1aff5431b4ea0be94b27" + } + Frame { + msec: 1616 + hash: "8da64659fb7f532eac43a67accd319ee" + } + Frame { + msec: 1632 + hash: "dcdeb76d6e4c676e736ec9fcf68f993b" + } + Frame { + msec: 1648 + hash: "fba3a7729e46d8e78d203188ef29d829" + } + Frame { + msec: 1664 + hash: "c99c541e424ebe82f1cceea204f3ffdc" + } + Frame { + msec: 1680 + hash: "c99c541e424ebe82f1cceea204f3ffdc" + } + Frame { + msec: 1696 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1712 + hash: "7f62ba22b5567d4ea96725a6215ff98a" + } + Frame { + msec: 1728 + hash: "a21cc4fa347929fd816ad36f4b33efab" + } + Frame { + msec: 1744 + hash: "a21cc4fa347929fd816ad36f4b33efab" + } + Frame { + msec: 1760 + hash: "a21cc4fa347929fd816ad36f4b33efab" + } + Frame { + msec: 1776 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1792 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1808 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1824 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1840 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1856 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1872 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1888 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1904 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1920 + image: "clock.1.png" + } + Frame { + msec: 1936 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1952 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1968 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 1984 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 2000 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 2016 + hash: "a3e6173e6d82d2cb52149588b32851e4" + } + Frame { + msec: 2032 + hash: "dba66886121f802a4a49ee1e220279db" + } + Frame { + msec: 2048 + hash: "b43648a05b6900bd0402bb56c98692df" + } + Frame { + msec: 2064 + hash: "8213e39455c952a589a90eea0040edfe" + } + Frame { + msec: 2080 + hash: "0d72dcbb2de67c84c0cf802e1de2b32b" + } + Frame { + msec: 2096 + hash: "db5b4994b46f3e0de86149af8b99abb6" + } + Frame { + msec: 2112 + hash: "440f7414e3db5339f2180bf1fcdc1c55" + } + Frame { + msec: 2128 + hash: "f757740304369ac45bb88657f79f304e" + } + Frame { + msec: 2144 + hash: "4521da9bcf198f78f7270cca959adfe4" + } + Frame { + msec: 2160 + hash: "92d602d139aedf31180f12349a1edcad" + } + Frame { + msec: 2176 + hash: "4092500cb913f0c9ae49d61e53553371" + } + Frame { + msec: 2192 + hash: "dee122e2c46b398c48a7ef1619683a6f" + } + Frame { + msec: 2208 + hash: "1817fa481e8648dd092e29403b0f887e" + } + Frame { + msec: 2224 + hash: "93a69d88553709c0f164b11d8d765805" + } + Frame { + msec: 2240 + hash: "92d602d139aedf31180f12349a1edcad" + } + Frame { + msec: 2256 + hash: "4ff6679a9615ca8bd5dd63c296cca3d5" + } + Frame { + msec: 2272 + hash: "4521da9bcf198f78f7270cca959adfe4" + } + Frame { + msec: 2288 + hash: "127b93b536f6266965941af5888a63dd" + } + Frame { + msec: 2304 + hash: "1a3e36e44069a8bf29b73acfd8340044" + } + Frame { + msec: 2320 + hash: "1065e18d2b41af8b0b5c4f5ae2a30d4d" + } + Frame { + msec: 2336 + hash: "37144e92ba8c7edd2ef87ecb6525ed5f" + } + Frame { + msec: 2352 + hash: "d6445d8270ddbf5fcd196b3d71393da4" + } + Frame { + msec: 2368 + hash: "b55cc8bdf97531912fa1df1f379e623c" + } + Frame { + msec: 2384 + hash: "fdb86be92fa17fd4e773e5fd65f249a3" + } + Frame { + msec: 2400 + hash: "b55cc8bdf97531912fa1df1f379e623c" + } + Frame { + msec: 2416 + hash: "eb0de8259f7a6be756102f79b5220f56" + } + Frame { + msec: 2432 + hash: "5afbb87fe77112b86282252a2ffe3821" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.png new file mode 100644 index 0000000..c79ac9c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.png new file mode 100644 index 0000000..d00d78d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.png new file mode 100644 index 0000000..c01c980 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.png new file mode 100644 index 0000000..6bca85f Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.png new file mode 100644 index 0000000..5f024d2 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.png new file mode 100644 index 0000000..b244fbe Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.png b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.png new file mode 100644 index 0000000..141753c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml new file mode 100644 index 0000000..e5c55a4 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/data/follow.qml @@ -0,0 +1,1763 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "e94ba580322887dbbbf9cb6309e39c23" + } + Frame { + msec: 32 + hash: "e94ba580322887dbbbf9cb6309e39c23" + } + Frame { + msec: 48 + hash: "787a59cda2c0b27d8959026e6d1b9427" + } + Frame { + msec: 64 + hash: "9ca724d4b31aa16015b5cbb50eea0c3a" + } + Frame { + msec: 80 + hash: "8a2c62a0190da1b7c1bade243baea6b8" + } + Frame { + msec: 96 + hash: "e129bebca7ad348c3134569d8eee4efc" + } + Frame { + msec: 112 + hash: "fd6387415e1c02fe6d17d9c3aa1d1ed8" + } + Frame { + msec: 128 + hash: "a82a4042fdca7c30facd2c4740c455f7" + } + Frame { + msec: 144 + hash: "62195722eb3acbfbad137ec71fd50bfe" + } + Frame { + msec: 160 + hash: "449819cdc880d59650732b5447ec6237" + } + Frame { + msec: 176 + hash: "552a838ebcacc0e08fa93b64a2433831" + } + Frame { + msec: 192 + hash: "3984992606d54f05eb31dd0974af2183" + } + Frame { + msec: 208 + hash: "3fd7225bbb0215ca8b6397580f2352a5" + } + Frame { + msec: 224 + hash: "0fd8f26f40a9049de1cf2a9493d579d1" + } + Frame { + msec: 240 + hash: "d08f0c57f071dc42e79fc5e0e3c32eeb" + } + Frame { + msec: 256 + hash: "084c2db330ee82cd032df248ecc9629d" + } + Frame { + msec: 272 + hash: "98da0d7f280d7fc4579c970c9a173b51" + } + Frame { + msec: 288 + hash: "4c819c54ced1b6ef0574417a7e11f2e7" + } + Frame { + msec: 304 + hash: "3dc5f7b412cb176c3b23d37cda3ef87c" + } + Frame { + msec: 320 + hash: "c368a01b43d94205c03f9c750c37f330" + } + Frame { + msec: 336 + hash: "8842bd0c8b17cac4fc9df84835999174" + } + Frame { + msec: 352 + hash: "26829e9c7ca44dfcb0c03852f4158a18" + } + Frame { + msec: 368 + hash: "ecffdb0888f1721e27b163e1f29a1950" + } + Frame { + msec: 384 + hash: "eaead96f2683c464a12df8aadba20691" + } + Frame { + msec: 400 + hash: "1e931963925bd208dce1ec9011372a3b" + } + Frame { + msec: 416 + hash: "1c3fd049001c1e883f21d0d1e0e32cba" + } + Frame { + msec: 432 + hash: "e8c3422ca637750ac52565594737d092" + } + Frame { + msec: 448 + hash: "b1c36322cf89e15a80af7c43f2aebca1" + } + Frame { + msec: 464 + hash: "f676c3171495f7bb2cb1812cfebaa17a" + } + Frame { + msec: 480 + hash: "255119e2efa99c8e31fee611aaaa5137" + } + Frame { + msec: 496 + hash: "e0bd32e3d44cfc2351db105f4595f18a" + } + Frame { + msec: 512 + hash: "b7f23b8f3769f929b42491efda7ebe19" + } + Frame { + msec: 528 + hash: "718cee11d869a8a8c5191cc0c09f2d30" + } + Frame { + msec: 544 + hash: "fbdbf92f8c5f507605ff50abc594682b" + } + Frame { + msec: 560 + hash: "c07fdc69c72b40d3c8dd1cc499008888" + } + Frame { + msec: 576 + hash: "38e17ecd537dc0f51211ad672a2ebb21" + } + Frame { + msec: 592 + hash: "2cbdc8728ef779c62f9938672986658a" + } + Frame { + msec: 608 + hash: "7fb66509d5d1df34861e9c70f9a579f0" + } + Frame { + msec: 624 + hash: "410b89392e859058718a08b79ec3d8fa" + } + Frame { + msec: 640 + hash: "9bd90f80700217d08dafed93b81ee9cf" + } + Frame { + msec: 656 + hash: "6d83671504a4274887b4e0d9bd2b24e7" + } + Frame { + msec: 672 + hash: "51ff7bd3fd4a776af33fce7b935b145c" + } + Frame { + msec: 688 + hash: "20f27392368b63b248bcd455cf3c9106" + } + Frame { + msec: 704 + hash: "1a5ab296bd55aa215c9b04a7ff6c73a1" + } + Frame { + msec: 720 + hash: "020fd7b14e8662fc006b0c39adca7c6a" + } + Frame { + msec: 736 + hash: "2619120bdb25a153963bdf05c4a16d44" + } + Frame { + msec: 752 + hash: "fd321314031efeb9ce71146764289d9f" + } + Frame { + msec: 768 + hash: "378a71f09445dfff284db919787cbf87" + } + Frame { + msec: 784 + hash: "d59eefe82ab8a00c903141dd9ea767ef" + } + Frame { + msec: 800 + hash: "0a65004d69a4567f2a5c7e84dab3a905" + } + Frame { + msec: 816 + hash: "92a4631716a51ff484ca14d9cfe05b2e" + } + Frame { + msec: 832 + hash: "87203f627cf410cad56d6ba38a140efa" + } + Frame { + msec: 848 + hash: "054cc085998cc059a6b7b4a7300dd36b" + } + Frame { + msec: 864 + hash: "af3fefeb908a0485c723d36f61eff0a4" + } + Frame { + msec: 880 + hash: "3f905d1e1ea79858b5a9bbfeab4eb255" + } + Frame { + msec: 896 + hash: "f935f1fc5f26a201098d894fca9a4d1f" + } + Frame { + msec: 912 + hash: "42b003dbb531da514716b9c32bdd3614" + } + Frame { + msec: 928 + hash: "a82fed83ee4efee7896b639c7691b13a" + } + Frame { + msec: 944 + hash: "31ad8cbf875233ea495330b0d3d4d2dd" + } + Frame { + msec: 960 + image: "follow.0.png" + } + Frame { + msec: 976 + hash: "78422e0e8d323dea6aa655a2980b7562" + } + Frame { + msec: 992 + hash: "5d71ff48b865ad4266eb8292f981b04e" + } + Frame { + msec: 1008 + hash: "df599d934d131c92b209284277009efb" + } + Frame { + msec: 1024 + hash: "5aaf33d11eb70ffdfe89246c637caed7" + } + Frame { + msec: 1040 + hash: "9648cf623a66ded145c4fd23a42917b3" + } + Frame { + msec: 1056 + hash: "9d33c2cc44ceac5a527ddcf809a51df6" + } + Frame { + msec: 1072 + hash: "6d0ad2e0d012e53a03e246e6d5e49e13" + } + Frame { + msec: 1088 + hash: "d33fa68796e38b19f44571d11c1bcd33" + } + Frame { + msec: 1104 + hash: "636680f49bbf30b0fac31a6c581f18dd" + } + Frame { + msec: 1120 + hash: "66801dbc39301e6b46b244fe502e0340" + } + Frame { + msec: 1136 + hash: "f8fa6a033483279e78636f26493b10ac" + } + Frame { + msec: 1152 + hash: "11b46611550173df42986dee4339d907" + } + Frame { + msec: 1168 + hash: "5c9afdb519006079ee8d28b2b60d0b76" + } + Frame { + msec: 1184 + hash: "9a55c38b2cd8abf25fbe448c7ef80971" + } + Frame { + msec: 1200 + hash: "27ebdf1424e892b35c93ec009d942407" + } + Frame { + msec: 1216 + hash: "2d9e3f0ae56f7337012b51c4dd173108" + } + Frame { + msec: 1232 + hash: "e6f89ca892131d68ff1f4ca95c95d807" + } + Frame { + msec: 1248 + hash: "f75791f1b12a217d37acb09bdb114cc5" + } + Frame { + msec: 1264 + hash: "94c5ab1460fb1b0f957a9718b45bca36" + } + Frame { + msec: 1280 + hash: "e246c8a0ec3d01ea20258b24a5673fe1" + } + Frame { + msec: 1296 + hash: "529de7735e73409dff266d8c1275215c" + } + Frame { + msec: 1312 + hash: "330400763a670580570cb62241ebec62" + } + Frame { + msec: 1328 + hash: "ae444d1de9c509fc6f74136ca90f927a" + } + Frame { + msec: 1344 + hash: "c43631ca8ee90ea5dc7664be5bc45429" + } + Frame { + msec: 1360 + hash: "b366ac4a5b66c331a7667e9df0fc4eda" + } + Frame { + msec: 1376 + hash: "1c7f4c47a9c57a34787cc9703e99bff1" + } + Frame { + msec: 1392 + hash: "5555535609d512e8d34549b6624f74b8" + } + Frame { + msec: 1408 + hash: "be59df714541923494b59f31f57e310e" + } + Frame { + msec: 1424 + hash: "63e434f053032e54298f6e61c8d4da7d" + } + Frame { + msec: 1440 + hash: "b0bb838637eceb6f8993ebc5b887afed" + } + Frame { + msec: 1456 + hash: "fc39f33add4ebcaf578558ecd4aea281" + } + Frame { + msec: 1472 + hash: "3f36faa7cc1e5898d4d5890c47633ff3" + } + Frame { + msec: 1488 + hash: "4b328002b4461869b1f7de48e7291902" + } + Frame { + msec: 1504 + hash: "26252c63924d2abcaebea2c7caf1d7aa" + } + Frame { + msec: 1520 + hash: "a9a6023484ae439be86b2c2ff59dc40b" + } + Frame { + msec: 1536 + hash: "620dab11bd4aab84cc0d949c48dd9a5d" + } + Frame { + msec: 1552 + hash: "3b45ef80ee3e6fbbd3533bfa0d666e2f" + } + Frame { + msec: 1568 + hash: "b33306abcb6a8402e491b7216495c778" + } + Frame { + msec: 1584 + hash: "3cc52e8649a02e87785f1dc63f5c1efd" + } + Frame { + msec: 1600 + hash: "fe21141f48da685213ed9d7641b2e7a0" + } + Frame { + msec: 1616 + hash: "205aac4e822e20bd32f637256250f3c8" + } + Frame { + msec: 1632 + hash: "124df0948f36aaf6151556d301f4b930" + } + Frame { + msec: 1648 + hash: "c1701edd5eaf143fd1dbdc4a5324b48a" + } + Frame { + msec: 1664 + hash: "117402df55367c918a3835958f4ab1d6" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 195; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1680 + hash: "73e3b86a1da28490cae4b03fdceefe19" + } + Frame { + msec: 1696 + hash: "172e329fb47d6db0180242990a84fe3b" + } + Frame { + msec: 1712 + hash: "82cf704cdfd406bab22689bc888ddc8d" + } + Frame { + msec: 1728 + hash: "4c288f198a06d1b2815d34c3c8f97051" + } + Frame { + msec: 1744 + hash: "6404d81456bb95a6b1c1ae55a181e40e" + } + Frame { + msec: 1760 + hash: "2c01571e523002166ba6ec476bc8a68b" + } + Frame { + msec: 1776 + hash: "95388037c1f79a9dab951031f1d7c307" + } + Frame { + msec: 1792 + hash: "c4ee57d9bffbb5f0ff173db48eadf2e3" + } + Frame { + msec: 1808 + hash: "703ac9672a9c55cf08e6381ef76ac13c" + } + Frame { + msec: 1824 + hash: "ea7726d2a2923290398262c8f70d511e" + } + Frame { + msec: 1840 + hash: "5d1af6cbdb4ee5b00045751204408632" + } + Frame { + msec: 1856 + hash: "a52aa37b10a05382f1b136896b7e00e8" + } + Frame { + msec: 1872 + hash: "a5acc1a45c95a67725e5e15084b7be18" + } + Frame { + msec: 1888 + hash: "c9fac8b5a4110493958d49b073ea96ed" + } + Frame { + msec: 1904 + hash: "6fca3a5c6d1cfbf1b905aca25b7785c5" + } + Frame { + msec: 1920 + image: "follow.1.png" + } + Frame { + msec: 1936 + hash: "379d5c4ced414f856e476095fbedfb7d" + } + Frame { + msec: 1952 + hash: "b2f980ab19d44ee98ab3e82a19adfe2d" + } + Frame { + msec: 1968 + hash: "e01732623930aebefd76ab62c81dc722" + } + Frame { + msec: 1984 + hash: "3a59c6851bc89eb31100092b1ceddbd9" + } + Frame { + msec: 2000 + hash: "2949de19eacb9f35816aa7ba69614f2c" + } + Frame { + msec: 2016 + hash: "f2c4c1f4429cbb6bd10f2318b2cb6904" + } + Frame { + msec: 2032 + hash: "2c48af64162e7e028cd536dba03eab71" + } + Frame { + msec: 2048 + hash: "7fe13b8f9253f720b6591b396cfba2d1" + } + Frame { + msec: 2064 + hash: "559947a03e650575a764801366cc504b" + } + Frame { + msec: 2080 + hash: "a8d09f6c862fd5ec2dcf34f06d1ef744" + } + Frame { + msec: 2096 + hash: "e3bb4b62209631ff84134f2243bfdb42" + } + Frame { + msec: 2112 + hash: "a1956a9d1939bc154ea0c88d596948cc" + } + Frame { + msec: 2128 + hash: "c98a375727860da1e827d4dd74af8f63" + } + Frame { + msec: 2144 + hash: "df4edcbb2ef5348341ff55c808609b6c" + } + Frame { + msec: 2160 + hash: "6287564be85b7cbadc6bb6f0232bc837" + } + Frame { + msec: 2176 + hash: "9826fdb48f7ea770fa5f198ec49d7cb7" + } + Frame { + msec: 2192 + hash: "56f82641a5591df9bb929cc0d32eb95d" + } + Frame { + msec: 2208 + hash: "526c55e555fb2e58796561efa3568c50" + } + Frame { + msec: 2224 + hash: "6b4b74613421c1841a17c369cb316754" + } + Frame { + msec: 2240 + hash: "37f785c30947d5eec113dcf6af649abf" + } + Frame { + msec: 2256 + hash: "5ff2c975dd9e261c764537c836627c4d" + } + Frame { + msec: 2272 + hash: "efe554981583749c3d09988bce7fed02" + } + Frame { + msec: 2288 + hash: "0f7204b4afb0ea5d58e49650e8027c0c" + } + Frame { + msec: 2304 + hash: "817291f91f4b309710ad3aed53a7d47a" + } + Frame { + msec: 2320 + hash: "c15c9cd03089090cf8a777c1f0d88de7" + } + Frame { + msec: 2336 + hash: "05f45cb8d0856dcc81091351615e35d6" + } + Frame { + msec: 2352 + hash: "99785a16fed6d6409b4b47ec55afb56b" + } + Frame { + msec: 2368 + hash: "39032cb4432ee9536af500673fccf526" + } + Frame { + msec: 2384 + hash: "9057653e3cd6042831037d3590e7595b" + } + Frame { + msec: 2400 + hash: "76c772eb2ab8f117c260c9c96bc99e1d" + } + Frame { + msec: 2416 + hash: "b6474665b8f8bcdd76d1a38efecad889" + } + Frame { + msec: 2432 + hash: "106c2d2efafad0181e3ded3a6805f2c6" + } + Frame { + msec: 2448 + hash: "5275fa4ffef6c1909f9d03bb1e7b9cae" + } + Frame { + msec: 2464 + hash: "0c1043c0087d60000dc7259d4ac03618" + } + Frame { + msec: 2480 + hash: "645748569b4f5cb9b206b0808bb7d23d" + } + Frame { + msec: 2496 + hash: "dd95dfa80e1b3ff511e7c75efd0d87ce" + } + Frame { + msec: 2512 + hash: "86b3dd03b04d7610837cdc67cad07e0a" + } + Frame { + msec: 2528 + hash: "8264f67ac92e4ebcfe4cc8e954f8c5d2" + } + Frame { + msec: 2544 + hash: "6bf52377d822b09eb28a1ec36d3a36a9" + } + Frame { + msec: 2560 + hash: "7ae1d65cdaf7fa71eb4ec318b37bb0aa" + } + Frame { + msec: 2576 + hash: "860f5ce9844c90cf9e6a6d383ff0972f" + } + Frame { + msec: 2592 + hash: "5502229c038dfc59d966f69ae6ed8957" + } + Frame { + msec: 2608 + hash: "21843c027bc1434ae60b3bb0fced2c54" + } + Frame { + msec: 2624 + hash: "962df45680949c3eb6c968f98cd76b20" + } + Frame { + msec: 2640 + hash: "f313c26fa76a0edce61244bdf92528e4" + } + Frame { + msec: 2656 + hash: "b7bbde239e98cbd66b1e51b54b747f51" + } + Frame { + msec: 2672 + hash: "62340707fbc832fcb805c8f80ab353d1" + } + Frame { + msec: 2688 + hash: "d008a3f7af1810ff70b68b38a4cd0f0d" + } + Frame { + msec: 2704 + hash: "e651dd628af24faf34d716beb392b052" + } + Frame { + msec: 2720 + hash: "a97733963c7a7616b25741545b07ffba" + } + Frame { + msec: 2736 + hash: "3e017cc1db720cf16521bd17308e4f44" + } + Frame { + msec: 2752 + hash: "13652ebaa610cca71486517e2eed21a5" + } + Frame { + msec: 2768 + hash: "09f0f500c6f7d11be39c31f9e589b38a" + } + Frame { + msec: 2784 + hash: "b87968cbc60ddc6a5f5699e830410eab" + } + Frame { + msec: 2800 + hash: "50e65b043d1f07a321a08ee4c25204f6" + } + Frame { + msec: 2816 + hash: "122d1ffa1510468e8c4067e0f511588f" + } + Frame { + msec: 2832 + hash: "585f6c25caaafb99a22a23d8a998d202" + } + Frame { + msec: 2848 + hash: "9b245a00ad576666c10f509d8a80a61e" + } + Frame { + msec: 2864 + hash: "9b245a00ad576666c10f509d8a80a61e" + } + Frame { + msec: 2880 + image: "follow.2.png" + } + Frame { + msec: 2896 + hash: "3c5d3d10bacc093afc6a9c0b5aa4cddc" + } + Frame { + msec: 2912 + hash: "31926d69c2309fdf13fbd7f0e9868c3d" + } + Frame { + msec: 2928 + hash: "eb3acacce5dd31b0e94b59b9e546ccae" + } + Frame { + msec: 2944 + hash: "9a51cff3276d75803a0a6e480f7ecb70" + } + Frame { + msec: 2960 + hash: "fbbd8b9d519993a699815d935bcd2b9f" + } + Frame { + msec: 2976 + hash: "0314190c6de73f9f374a4eaed0709645" + } + Frame { + msec: 2992 + hash: "8ca1a203bdb5446094eb948aeb0a333e" + } + Frame { + msec: 3008 + hash: "301e1b86ce38e11ad9d0d7aba0909985" + } + Frame { + msec: 3024 + hash: "922095867d0a91b73ab7a63df2041279" + } + Frame { + msec: 3040 + hash: "ba8275f3ba4633bf64a1f81f630c90f1" + } + Frame { + msec: 3056 + hash: "efe39545279a7bd015d2de75d2b9d8b1" + } + Frame { + msec: 3072 + hash: "78926c3c0c6fcf89b9291f9902710964" + } + Frame { + msec: 3088 + hash: "ea63dcb7f00d3ddede0d8be59ad9d6bc" + } + Frame { + msec: 3104 + hash: "286ad493301b713a49e378f123482a53" + } + Frame { + msec: 3120 + hash: "a4bbbb8bb88188d3e99996502e3eebd1" + } + Frame { + msec: 3136 + hash: "a6100e79f3dc5af594e86ab6cd8dfb76" + } + Frame { + msec: 3152 + hash: "d9e3f777dc89bcf1b7f712206db768e2" + } + Frame { + msec: 3168 + hash: "768045c600c0aa0b1e9e6f012733c600" + } + Frame { + msec: 3184 + hash: "d8b4caa641ddee786f7898359efe9d07" + } + Frame { + msec: 3200 + hash: "f7c3b76d5bb7c263ac9447eaad685158" + } + Frame { + msec: 3216 + hash: "f7f97db815d653ec29fa31b87f72af2a" + } + Frame { + msec: 3232 + hash: "18524623762487b60943312cd8bd4388" + } + Frame { + msec: 3248 + hash: "5823dee5dd56e9f7515601f9629ccbae" + } + Frame { + msec: 3264 + hash: "5823dee5dd56e9f7515601f9629ccbae" + } + Frame { + msec: 3280 + hash: "5823dee5dd56e9f7515601f9629ccbae" + } + Frame { + msec: 3296 + hash: "5823dee5dd56e9f7515601f9629ccbae" + } + Frame { + msec: 3312 + hash: "18524623762487b60943312cd8bd4388" + } + Frame { + msec: 3328 + hash: "430995770b655054aaeda383df8e27f7" + } + Frame { + msec: 3344 + hash: "16a3a00f2b89aed676f80d63c4933ec3" + } + Frame { + msec: 3360 + hash: "6c55aa62079ec546522edbf69c37b270" + } + Frame { + msec: 3376 + hash: "0d68ca3ccecdd831013950cc7405e46e" + } + Frame { + msec: 3392 + hash: "9da2511bc8b434218695fa74ed543439" + } + Frame { + msec: 3408 + hash: "05afdd0b99dab81a500cdc2b2f0786fe" + } + Frame { + msec: 3424 + hash: "e6f8882d146ae60bcc6ea47ff41a637b" + } + Frame { + msec: 3440 + hash: "154542ed0e88321294f382501819aefc" + } + Frame { + msec: 3456 + hash: "8f47b6980c387c5020145bf04645fd2d" + } + Frame { + msec: 3472 + hash: "b34b055c7602f1f4e1cde875b258120c" + } + Frame { + msec: 3488 + hash: "5a697f675575f05e297d4877604b9a47" + } + Frame { + msec: 3504 + hash: "729dff1d1b357d19fc81804ec8940d0e" + } + Frame { + msec: 3520 + hash: "c6f3fee46baa94a6139d2ee40254b160" + } + Frame { + msec: 3536 + hash: "af0e700bb8ae34834510830f8b44afdb" + } + Frame { + msec: 3552 + hash: "9c87bb54c2dfe58c2da9194dae6f7502" + } + Frame { + msec: 3568 + hash: "2132356a92c75d725f9feafb8201b142" + } + Frame { + msec: 3584 + hash: "50d855d2595eeae2bfd6aaa8c2fa0454" + } + Frame { + msec: 3600 + hash: "5fde3c62d6e53a9056e3586f9dcda59e" + } + Frame { + msec: 3616 + hash: "8f04460254a1e9fb949d5165894cd92a" + } + Frame { + msec: 3632 + hash: "2b514c5e3b20d30f9c7e71092c69f081" + } + Frame { + msec: 3648 + hash: "2c1ba6224037790e15f5c0f2864ace4d" + } + Frame { + msec: 3664 + hash: "0d5b8e7bd5f560888aacaf2b3c6827a8" + } + Frame { + msec: 3680 + hash: "ae25004530e7df134414018e4a34780e" + } + Frame { + msec: 3696 + hash: "1a8fd9eaf9a91f1b42924f8986fbed9a" + } + Frame { + msec: 3712 + hash: "2ea6de2025d40ed5beeff12a5b70ccc9" + } + Frame { + msec: 3728 + hash: "624e417718d3cac1e4b7e4ce258ce6ea" + } + Frame { + msec: 3744 + hash: "8b56d29391257c7be8966af6be26ea9f" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 195; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3760 + hash: "5c0d977d8b446d9191bde57335cf1062" + } + Frame { + msec: 3776 + hash: "100be2b21d069e3a5dbb694a90da4d4f" + } + Frame { + msec: 3792 + hash: "caab03f6c81080dd8fdbedb4e94ae4a5" + } + Frame { + msec: 3808 + hash: "3328a4d06f2f80a7e9ccf2ff21522fca" + } + Frame { + msec: 3824 + hash: "a534e6cc28daf3eff6a9cf8379bd6375" + } + Frame { + msec: 3840 + image: "follow.3.png" + } + Frame { + msec: 3856 + hash: "0aed83364cd59e3f7309c92593894d43" + } + Frame { + msec: 3872 + hash: "d3f1c3593375ca5c022a1361a7ec70bd" + } + Frame { + msec: 3888 + hash: "67843e6192e2ecaa3820c37dc2f93106" + } + Frame { + msec: 3904 + hash: "19a022f678e5b8f4ebdff936162323dc" + } + Frame { + msec: 3920 + hash: "34e55ae70c9e156db339ae15642359c3" + } + Frame { + msec: 3936 + hash: "3784778c817f9d9bb73d990cfe12685a" + } + Frame { + msec: 3952 + hash: "0403fdf79e3ba339c7e3786db0c9c0f0" + } + Frame { + msec: 3968 + hash: "93e4a0d5645d1cfc916f1e8422655555" + } + Frame { + msec: 3984 + hash: "29080bfabb87160b7c51385fb36b474b" + } + Frame { + msec: 4000 + hash: "9da2d83edc9d35f00fb8a159e79de4d9" + } + Frame { + msec: 4016 + hash: "5505a42d4788f00cfc7499fbfda851ce" + } + Frame { + msec: 4032 + hash: "bdd3040ab16fa9ffdd2fbc66b06699f8" + } + Frame { + msec: 4048 + hash: "2a347e30a20c693a9440caa60ade0a0f" + } + Frame { + msec: 4064 + hash: "0307f1857c091a639d47f112ce1a2f5a" + } + Frame { + msec: 4080 + hash: "778d18e539bbd562ebe39283a6315df1" + } + Frame { + msec: 4096 + hash: "0369cf6c3d1f5db2e92ee1f7c5d3b8ed" + } + Frame { + msec: 4112 + hash: "9f7413587ab50f1abf776bf180ec2d6f" + } + Frame { + msec: 4128 + hash: "7d04a27236485808e571e8a39f23ea17" + } + Frame { + msec: 4144 + hash: "a1dff63b723473d5a4c9c59975a2fb81" + } + Frame { + msec: 4160 + hash: "9795ea70a3b9d3b7805221a58c19e5da" + } + Frame { + msec: 4176 + hash: "f1392c489e21107136eb8e0d1e8b427e" + } + Frame { + msec: 4192 + hash: "95c225ef07171a96335e99078195b06a" + } + Frame { + msec: 4208 + hash: "d46ef3e7f9cec06e8c18afc0d07be4f3" + } + Frame { + msec: 4224 + hash: "b017f5b51d423bb0fca0d6df3aaded8b" + } + Frame { + msec: 4240 + hash: "60584d085b0cd6fbc436773be678597e" + } + Frame { + msec: 4256 + hash: "117951465dfd5c386826b295560d2dec" + } + Frame { + msec: 4272 + hash: "1b70137da5f4e024593999e93121fe8b" + } + Frame { + msec: 4288 + hash: "bd50dffd41941fef127f39b55c4748e0" + } + Frame { + msec: 4304 + hash: "8eec34d8e1d2e22d11b85a671cd4d3aa" + } + Frame { + msec: 4320 + hash: "9e3c97cfad5002ef5f3fcc365aeb7bd0" + } + Frame { + msec: 4336 + hash: "28e1cf1ee033915ea2ee39c9ab00a73d" + } + Frame { + msec: 4352 + hash: "99101a156a553f441f00221f6facbf1f" + } + Frame { + msec: 4368 + hash: "419023e5d59d16c26b35bee7d3cea559" + } + Frame { + msec: 4384 + hash: "485d23519293975b04031fe4baa5c276" + } + Frame { + msec: 4400 + hash: "c8bc60735e0ede26dbaf228294853f9a" + } + Frame { + msec: 4416 + hash: "ada3680b807d59843e3adf6640704066" + } + Frame { + msec: 4432 + hash: "3e28f3adf9241512cd0d6918d81ffffb" + } + Frame { + msec: 4448 + hash: "8f339acc33cbc89ae1c62391ce021bb3" + } + Frame { + msec: 4464 + hash: "d303960c0853a90557d64a04b8283c94" + } + Frame { + msec: 4480 + hash: "f907dbdacf2cfa9fdf8f9c8dead5b4c4" + } + Frame { + msec: 4496 + hash: "30c6e6f283f4a3f538cdda9c2e92de8c" + } + Frame { + msec: 4512 + hash: "04d2ac55774b43107a43a7d33764199b" + } + Frame { + msec: 4528 + hash: "cddf3e111cbc59e721725daa1d8a0c31" + } + Frame { + msec: 4544 + hash: "15b1b63cd1695207ebf9f04387be0739" + } + Frame { + msec: 4560 + hash: "690769b9bbe86a3c5b1fbdee39615fbd" + } + Frame { + msec: 4576 + hash: "2bd640d8ddbf878d808f22656fef1ed9" + } + Frame { + msec: 4592 + hash: "a654f1e4519bf883d554276ebbe96323" + } + Frame { + msec: 4608 + hash: "68f0313cfc3f51a0bb9b47c5407c19b6" + } + Frame { + msec: 4624 + hash: "77f29806b084de4cabf7ab9bf1a93d5e" + } + Frame { + msec: 4640 + hash: "f9991189e3282d107b98fb0ae5f5ef00" + } + Frame { + msec: 4656 + hash: "0cd1f2f6e347d48feea1b26a4968dec7" + } + Frame { + msec: 4672 + hash: "e75a6f6a088e2289042572a161ffb0e9" + } + Frame { + msec: 4688 + hash: "5a541081444c0a71128223a4c4c3144c" + } + Frame { + msec: 4704 + hash: "6813d442cc610f346a5441ed0cd723e5" + } + Frame { + msec: 4720 + hash: "24ec539bc57899819915f833f26deacd" + } + Frame { + msec: 4736 + hash: "3a7ed1b4b533b817674aa141c420cd61" + } + Frame { + msec: 4752 + hash: "d0a643fae97bb152e97ca60e96299003" + } + Frame { + msec: 4768 + hash: "c84093931520f4661eff6645091a294b" + } + Frame { + msec: 4784 + hash: "81e7ceaece82505a4a16ead195a66162" + } + Frame { + msec: 4800 + image: "follow.4.png" + } + Frame { + msec: 4816 + hash: "a510d302d2441b9a07463aed8b592d32" + } + Frame { + msec: 4832 + hash: "d1824ced8af34ad9edb36a58ae9aa7f5" + } + Frame { + msec: 4848 + hash: "167b9a49fbb94908e09e7e9c9147cd8b" + } + Frame { + msec: 4864 + hash: "442d5f0906840de526d59a80ada322c0" + } + Frame { + msec: 4880 + hash: "78206c4d4d23c7c1ba888b9062b09432" + } + Frame { + msec: 4896 + hash: "e898202cfebbff1952efc6e01254d855" + } + Frame { + msec: 4912 + hash: "ab31dc7bbad2b0552359866bb8d92f0c" + } + Frame { + msec: 4928 + hash: "f093304e88964376baf9721d53d4fb49" + } + Frame { + msec: 4944 + hash: "3ef76f3e1c44d13c3a469bd192ff7b5d" + } + Frame { + msec: 4960 + hash: "5d3b6d0d91f8cc5b89e39407bc3b5a15" + } + Frame { + msec: 4976 + hash: "3c73573f12f49b34e1d990a55ad913fa" + } + Frame { + msec: 4992 + hash: "d1bac071b01a1c6fddab90cdc435fad4" + } + Frame { + msec: 5008 + hash: "36a219aadec910f1dbef616c641e1d2b" + } + Frame { + msec: 5024 + hash: "5871fc67d361cc988551592ee21dfb23" + } + Frame { + msec: 5040 + hash: "6e65ee6c814b9a9da205c36925e663bf" + } + Frame { + msec: 5056 + hash: "290b20fa8e91d34000d7c2d81745f6d2" + } + Frame { + msec: 5072 + hash: "19e7405a9083a8143f7bb040f8837b29" + } + Frame { + msec: 5088 + hash: "c0a0fa2b4c1ceb6c70594994a1ac8713" + } + Frame { + msec: 5104 + hash: "c236224c16743fb606deb78bcb8afc8d" + } + Frame { + msec: 5120 + hash: "7d44db15eb300b4338ffc26e9bcfce20" + } + Frame { + msec: 5136 + hash: "067a79148a194c45c6f32d85316a1e11" + } + Frame { + msec: 5152 + hash: "9075c379044476994a87f0fdcce8e332" + } + Frame { + msec: 5168 + hash: "b2316988fbd51096a4f512e71fe7d0a2" + } + Frame { + msec: 5184 + hash: "280f70877d93af5f84e178aad6a102d8" + } + Frame { + msec: 5200 + hash: "3eef4ae7e43a8cf1cd9dd562237296f8" + } + Frame { + msec: 5216 + hash: "e3184f77ce3a47ca4dca6386f42d7fec" + } + Frame { + msec: 5232 + hash: "a2a5df66fe4808ea8d466cac84ba910c" + } + Frame { + msec: 5248 + hash: "9f8a0e54788112d6c30482e840504f35" + } + Frame { + msec: 5264 + hash: "ae69cf84798844f9f360c86790feaecd" + } + Frame { + msec: 5280 + hash: "0244526572acb6266db5b7eb9d29c6fc" + } + Frame { + msec: 5296 + hash: "8fb53d60b95ddb5aef27442934ea9983" + } + Frame { + msec: 5312 + hash: "930fcfde491b4f5681e3861764003895" + } + Frame { + msec: 5328 + hash: "bcdcd0a637112d113ebe11dc18823237" + } + Frame { + msec: 5344 + hash: "65a564d5a5afbc14c0cdad4d52753507" + } + Frame { + msec: 5360 + hash: "0c5056d438d2d54938f31ef5f996673a" + } + Frame { + msec: 5376 + hash: "11c157ad2236fc390ffbdf339366cbc1" + } + Frame { + msec: 5392 + hash: "6cb341b1f281a97a35c2e41bfd4c4d9d" + } + Frame { + msec: 5408 + hash: "553a945f7f19f70ddae4ebe88e52a79b" + } + Frame { + msec: 5424 + hash: "d10b42b4095a2474e66a5a322f72e936" + } + Frame { + msec: 5440 + hash: "0f943d61e8072d70eddee8aa1ba0de5a" + } + Frame { + msec: 5456 + hash: "3df18e237b666e78d57857739b759e6d" + } + Frame { + msec: 5472 + hash: "1ddc0bfdb2ca7b6dee63f1024e62f26e" + } + Frame { + msec: 5488 + hash: "aaa397714528f41238059e3a88833abc" + } + Frame { + msec: 5504 + hash: "c94bd69f925c782656afc5f9618180a6" + } + Frame { + msec: 5520 + hash: "824ff8c0e1ab43e3c0eaa79b7cc19b9c" + } + Frame { + msec: 5536 + hash: "6c440a0b2293811335bdbf2c4f25f47d" + } + Frame { + msec: 5552 + hash: "bfc7936cdf833d5b720ec9baca740112" + } + Frame { + msec: 5568 + hash: "375fa305dbae2872dc9b20e59381cc0c" + } + Frame { + msec: 5584 + hash: "fffd6173aa49e74164dc17a238bcd830" + } + Frame { + msec: 5600 + hash: "44d9007e00fab161fd393b653255d7f4" + } + Frame { + msec: 5616 + hash: "f669ee25c58b4fa20a01705d334f0065" + } + Frame { + msec: 5632 + hash: "2dbb7d57711b67d5d9e1b81f70e22d34" + } + Frame { + msec: 5648 + hash: "19351b91448265cb95c1670ee283c611" + } + Frame { + msec: 5664 + hash: "19351b91448265cb95c1670ee283c611" + } + Frame { + msec: 5680 + hash: "3a24b99d048348a21f4e4bd69393de89" + } + Frame { + msec: 5696 + hash: "35a6fe955a52950bbfa954a453e4008e" + } + Frame { + msec: 5712 + hash: "896f4ec28c976237b34fb2725a44460e" + } + Frame { + msec: 5728 + hash: "ed3008ea950ec84c57518e573ea36d15" + } + Frame { + msec: 5744 + hash: "3447c7be992759f772c1db2033eead99" + } + Frame { + msec: 5760 + image: "follow.5.png" + } + Frame { + msec: 5776 + hash: "6354ebe3aa919a52902b5a5346b473ae" + } + Frame { + msec: 5792 + hash: "adc55f2fcf312a90b025a75fa80aa079" + } + Frame { + msec: 5808 + hash: "3ac85cad400d2b8e4f33798f4f6b7b42" + } + Frame { + msec: 5824 + hash: "1c115efd84ccbe489d24c3c521c4a61c" + } + Frame { + msec: 5840 + hash: "39518f1bbc0c4aba6ff517bc3dc7c279" + } + Frame { + msec: 5856 + hash: "7bd28d32996f4de61c415d3217da16d0" + } + Frame { + msec: 5872 + hash: "f5d06e25d775bf8db07e95625a712733" + } + Frame { + msec: 5888 + hash: "4820ea6ea3be88af2f86111c547a19d7" + } + Frame { + msec: 5904 + hash: "fa6e681c368118b7f135a47ae8fc12ff" + } + Frame { + msec: 5920 + hash: "f6b30e618aeeb837d2b3eca270b0a060" + } + Frame { + msec: 5936 + hash: "ac8504bde8d3063a8bf02b9d4b69d755" + } + Frame { + msec: 5952 + hash: "9670537bb77caa8e23fda7bbfa96ca60" + } + Frame { + msec: 5968 + hash: "8cd292865ce5c1d240e9ddc93881a0ed" + } + Frame { + msec: 5984 + hash: "de112013e526203d151c46e6cfba9f92" + } + Frame { + msec: 6000 + hash: "cd61066e697de8c055aaa168791c2d8c" + } + Frame { + msec: 6016 + hash: "cd61066e697de8c055aaa168791c2d8c" + } + Frame { + msec: 6032 + hash: "e68b27ff14aac03c827fd43ac488d23e" + } + Frame { + msec: 6048 + hash: "e68b27ff14aac03c827fd43ac488d23e" + } + Frame { + msec: 6064 + hash: "1f61d857a8c26587fbda5895c603441a" + } + Frame { + msec: 6080 + hash: "1e0dffdd02e05ade1ae444427d4aa345" + } + Frame { + msec: 6096 + hash: "9a416ee7a1de9ac45ab2d609233c9520" + } + Frame { + msec: 6112 + hash: "dfa35bf1cd908011c3214a506bcbdcb8" + } + Frame { + msec: 6128 + hash: "bd502dc72dce4af3036f7af9ed7cf9e9" + } + Frame { + msec: 6144 + hash: "0506667a14ace4e2edf04956c137e217" + } + Frame { + msec: 6160 + hash: "a38ed1532a40210ad7da4c0d4d1a7195" + } + Frame { + msec: 6176 + hash: "8ac8a8df937da526bbffb9a3590d89ac" + } + Frame { + msec: 6192 + hash: "07527cb9a4494e11f4c9f99eb72598b9" + } + Frame { + msec: 6208 + hash: "655b0327ef0f8711810714ba50f2f8cc" + } + Frame { + msec: 6224 + hash: "4c1ce8b4eb16c69614e2560c04ad48cf" + } + Frame { + msec: 6240 + hash: "7a382ae4e6a48826eaa2c83ee7a73fb2" + } + Frame { + msec: 6256 + hash: "5acd5f250c5b32d9006ed68dfecbfa1c" + } + Frame { + msec: 6272 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6288 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6304 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6320 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6336 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6352 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6368 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Frame { + msec: 6384 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6400 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6416 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6432 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6448 + hash: "877aca1c64e588845329ca8a38222604" + } + Frame { + msec: 6464 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6480 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6496 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6512 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6528 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6544 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6560 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6576 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6592 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6608 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6624 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6640 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6656 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6672 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6688 + hash: "b0f28e923f93dcdcea8460ca9d8cd674" + } + Frame { + msec: 6704 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6720 + image: "follow.6.png" + } + Frame { + msec: 6736 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6752 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6768 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6784 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6800 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6816 + hash: "228920e994ebf71d542c71ce8263614e" + } + Frame { + msec: 6832 + hash: "07e5f1277558bfe7638b00cf9d967baf" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 6848 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6864 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6880 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6896 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6912 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } + Frame { + msec: 6928 + hash: "3189e5a89d7b2ba1e6a06f6e3070e8c1" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/follow.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/follow.qml new file mode 100644 index 0000000..0097449 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativespringanimation/follow.qml @@ -0,0 +1,79 @@ +import QtQuick 1.0 + +Rectangle { + color: "#ffffff" + width: 320; height: 240 + + Rectangle { + id: rect + color: "#00ff00" + y: 200; width: 60; height: 20 + SequentialAnimation on y { + loops: Animation.Infinite + NumberAnimation { + to: 20; duration: 500 + easing.type: "InOutQuad" + } + NumberAnimation { + to: 200; duration: 2000 + easing.type: "OutBounce" + } + PauseAnimation { duration: 1000 } + } + } + + // Velocity + Rectangle { + color: "#ff0000" + x: rect.width; width: rect.width; height: 20 + y: rect.y + Behavior on y { SpringAnimation { velocity: 200 } } + } + + // Spring + Rectangle { + color: "#ff0000" + x: rect.width * 2; width: rect.width/2; height: 20 + y: rect.y + Behavior on y { SpringAnimation { spring: 1.0; damping: 0.2 } } + } + Rectangle { + color: "#880000" + x: rect.width * 2.5; width: rect.width/2; height: 20 + y: rect.y + Behavior on y { SpringAnimation { spring: 1.0; damping: 0.2; mass: 3.0 } } // "heavier" object + } + + // Follow mouse + MouseArea { + id: mouseRegion + anchors.fill: parent + Rectangle { + id: ball + property int targetX: mouseRegion.mouseX - 10 + property int targetY: mouseRegion.mouseY - 10 + + x: targetX + y: targetY + width: 20; height: 20 + radius: 10 + color: "#0000ff" + + Behavior on x { SpringAnimation { spring: 1.0; damping: 0.05; epsilon: 0.25 } } + Behavior on y { SpringAnimation { spring: 1.0; damping: 0.05; epsilon: 0.25 } } + + states: [ + State { + name: "following" + when: ball.x != ball.targetX || ball.y != ball.targetY + PropertyChanges { target: ball; color: "#ff0000" } + } + ] + transitions: [ + Transition { + ColorAnimation { duration: 200 } + } + ] + } + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml deleted file mode 100644 index 44c4dcd..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/clock.qml +++ /dev/null @@ -1,67 +0,0 @@ -import QtQuick 1.0 - -Rectangle { - id: clock - color: "gray" - width: 200; height: 200 - - property variant hours: 10 - property variant minutes: 28 - property variant seconds: 0 - - Timer { - interval: 1000; running: true; repeat: true; triggeredOnStart: true - onTriggered: seconds++ - } - - Image { id: background; source: "content/clock.png" } - - Image { - x: 92.5; y: 27 - source: "content/hour.png" - smooth: true - transform: Rotation { - id: hourRotation - origin.x: 7.5; origin.y: 73 - angle: (clock.hours * 30) + (clock.minutes * 0.5) - - Behavior on angle { - SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } - } - } - } - - Image { - x: 93.5; y: 17 - source: "content/minute.png" - smooth: true - transform: Rotation { - id: minuteRotation - origin.x: 6.5; origin.y: 83 - angle: clock.minutes * 6 - - Behavior on angle { - SpringAnimation { spring: 2; damping: 0.2; modulus: 360 } - } - } - } - - Image { - x: 97.5; y: 20 - source: "content/second.png" - smooth: true - transform: Rotation { - id: secondRotation - origin.x: 2.5; origin.y: 80 - angle: clock.seconds * 6 - - Behavior on angle { - SpringAnimation { spring: 5; damping: 0.25; modulus: 360 } - } - } - } - - Image { - anchors.centerIn: background; source: "content/center.png" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/background.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/background.png deleted file mode 100644 index a885950..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/background.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/center.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/center.png deleted file mode 100755 index 7fbd802..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/center.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/clock.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/clock.png deleted file mode 100755 index 462edac..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/clock.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/hour.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/hour.png deleted file mode 100755 index f8061a1..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/hour.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/minute.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/minute.png deleted file mode 100755 index 1297ec7..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/minute.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/second.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/second.png deleted file mode 100755 index 4aa9fb5..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/content/second.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.0.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.0.png deleted file mode 100644 index baf1d45..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.1.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.1.png deleted file mode 100644 index 932f63f..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.2.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.2.png deleted file mode 100644 index a5cb437..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.3.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.3.png deleted file mode 100644 index 62e895c..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.qml deleted file mode 100644 index 5da471e..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/clock.qml +++ /dev/null @@ -1,1135 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "d17c9cd015b065adf7e36ad0d4f6c00c" - } - Frame { - msec: 32 - hash: "e759f652c69a06d01837302cc0369a58" - } - Frame { - msec: 48 - hash: "392855ef490903121fb894858961dfb0" - } - Frame { - msec: 64 - hash: "5ba4248f606a3a35d840cb98eff30b46" - } - Frame { - msec: 80 - hash: "3b97e1ab4054c20d19c1d05f795b71de" - } - Frame { - msec: 96 - hash: "81904d248125cf35249f79da7e94d8d7" - } - Frame { - msec: 112 - hash: "474179152aad4b64904c8b7c63581a89" - } - Frame { - msec: 128 - hash: "583a7906d1dc41d8ce8d0c8f28c9b8c5" - } - Frame { - msec: 144 - hash: "341437083f858e2dca36a8bb39559a1e" - } - Frame { - msec: 160 - hash: "ed75a933c176ed6ac3fa5b2986cbfade" - } - Frame { - msec: 176 - hash: "5494c10d3984a9be607b8b5ee659ebfc" - } - Frame { - msec: 192 - hash: "7af8dfca43036ee69012cbb100d110ad" - } - Frame { - msec: 208 - hash: "356b8185889e560b5a1a2d6436dac834" - } - Frame { - msec: 224 - hash: "f601a66de5dc1a388e515ba4ff14be6e" - } - Frame { - msec: 240 - hash: "4cfb9f3a72070533288b2e50820cbbbd" - } - Frame { - msec: 256 - hash: "ddcb670af0806dadf5897bcd3fd65cd7" - } - Frame { - msec: 272 - hash: "3fedf4aa340d7632359273b1eb71c5a3" - } - Frame { - msec: 288 - hash: "3dab7e1eaccb68b14e30741775db6ff7" - } - Frame { - msec: 304 - hash: "015ab6c080c2ffab8ac763681bf3f95c" - } - Frame { - msec: 320 - hash: "74f438510f0d8f64120cc45bca7f4f5d" - } - Frame { - msec: 336 - hash: "e57666fb224cdbf869e5be4ef3391be9" - } - Frame { - msec: 352 - hash: "ff8b3dddd4d10b111b38801470fcbfd0" - } - Frame { - msec: 368 - hash: "e547ee9f1e509d5db980cb91fce5f6ee" - } - Frame { - msec: 384 - hash: "aaa9fb71bd47ad3a1c753d7ac918e399" - } - Frame { - msec: 400 - hash: "54a335aac86669138730c0735ea99c8b" - } - Frame { - msec: 416 - hash: "ff8f30aaa7afd8abfdd147b830e9d6c4" - } - Frame { - msec: 432 - hash: "07f8fca270953cf815cb0e77534da824" - } - Frame { - msec: 448 - hash: "30799c12182b2c3eb2f28b05d81ed6fc" - } - Frame { - msec: 464 - hash: "6244e3b740218aec56c81c92dc57abcb" - } - Frame { - msec: 480 - hash: "cb10a34e3d234043704e633b49184607" - } - Frame { - msec: 496 - hash: "66de73779b5f86a6a1692eb74be24201" - } - Frame { - msec: 512 - hash: "4c4c0b5e75f0f587ace8002720d78309" - } - Frame { - msec: 528 - hash: "88c774ec272c72457b35b60306c2bc21" - } - Frame { - msec: 544 - hash: "28ce64adc1d35d6bc34174765beda553" - } - Frame { - msec: 560 - hash: "37238c3d6dc0c34bf4e00ba2a82ce3aa" - } - Frame { - msec: 576 - hash: "d14dd306fec80f1a1ff9a85aa51b9a57" - } - Frame { - msec: 592 - hash: "bfa2ec6fa546c75ee85e2ebeb3af8e3c" - } - Frame { - msec: 608 - hash: "d1ec3faab47065f34e9397fd73f9edce" - } - Frame { - msec: 624 - hash: "0b59b5dba365fff38872b520afc84edb" - } - Frame { - msec: 640 - hash: "3c4ae01b5e878b85a2eea403f3ad478a" - } - Frame { - msec: 656 - hash: "329111f7079230e8b3cfda1217e8fcdf" - } - Frame { - msec: 672 - hash: "97761329ac9ba03ec41e3d5b35f245df" - } - Frame { - msec: 688 - hash: "9d26e3a3357530e903ee89f7bf439357" - } - Frame { - msec: 704 - hash: "1cf4c130ea3565547ff74280211f10c9" - } - Frame { - msec: 720 - hash: "d60284711cb557b1dab4d27072c95597" - } - Frame { - msec: 736 - hash: "98195e02405ee26c0a6a3177cebe9eaa" - } - Frame { - msec: 752 - hash: "f0a776c39363e340ebfb7736f368f609" - } - Frame { - msec: 768 - hash: "5a146b4b76f93e3064d5dfa13107b1c3" - } - Frame { - msec: 784 - hash: "7f7fef3a7ff2047f598bfca0fc7d5935" - } - Frame { - msec: 800 - hash: "85a2fd48605f8a77764bf96542db14c3" - } - Frame { - msec: 816 - hash: "89bdc99d16e6605e2106dfa5f53d7c8e" - } - Frame { - msec: 832 - hash: "d03754d56d85508b7c77959d1ab7b34a" - } - Frame { - msec: 848 - hash: "8d330472a376b47d65cec0b8e3df25cb" - } - Frame { - msec: 864 - hash: "401adaeecfd2c0a5598194e9ead4dd5d" - } - Frame { - msec: 880 - hash: "5c600e940e0a01fec15505fba595df3d" - } - Frame { - msec: 896 - hash: "b7940b041fbd3df5e6969130bf97da10" - } - Frame { - msec: 912 - hash: "62314bb115c307eeff4c4c7c91ee74a2" - } - Frame { - msec: 928 - hash: "54745a8a7ed96a4d5e2d4ec2de605882" - } - Frame { - msec: 944 - hash: "a4145b63f59d060ac0e0dc32dd22c815" - } - Frame { - msec: 960 - image: "clock.0.png" - } - Frame { - msec: 976 - hash: "c420b1298329c7eb0d3ec6a90a7eb802" - } - Frame { - msec: 992 - hash: "e63a5384cde6287c3cd8bdb823f35dca" - } - Frame { - msec: 1008 - hash: "af708b5e4a2a706385afd43896eeff16" - } - Frame { - msec: 1024 - hash: "32011e16d4b1c14619820ade020f6416" - } - Frame { - msec: 1040 - hash: "fbf9f8f075b15922f7306e469075d3cf" - } - Frame { - msec: 1056 - hash: "bf0fab116eae6e7fb5b3209220a3a52a" - } - Frame { - msec: 1072 - hash: "7a21aee4bcb99feb12a2a2c6bb3fd893" - } - Frame { - msec: 1088 - hash: "d721462af9c94e13f12374b2590dad1e" - } - Frame { - msec: 1104 - hash: "70385b585c2cbf1b2d64f1b9ebb5fb56" - } - Frame { - msec: 1120 - hash: "fc7adc3dd2f42bfe6cd74c2ee1ea9aa8" - } - Frame { - msec: 1136 - hash: "232884da74c9843d1349e82a7300cc19" - } - Frame { - msec: 1152 - hash: "c6790d9c8cbea7bf97cbedf443da330c" - } - Frame { - msec: 1168 - hash: "1847875f98555ef46a103c107bd5bc37" - } - Frame { - msec: 1184 - hash: "d7b35992b44a0220bd83a00b7f75dcdd" - } - Frame { - msec: 1200 - hash: "fc9e1db602c34863088d82ed8f601364" - } - Frame { - msec: 1216 - hash: "404e2d071f8a6409ba6c6bfd8450693c" - } - Frame { - msec: 1232 - hash: "dc2b6be9bc4c32460797e94ec617406c" - } - Frame { - msec: 1248 - hash: "5077b6afd808f7a2c319e66f0aef3002" - } - Frame { - msec: 1264 - hash: "07f07a04ec7c864196faeb44eff65b4c" - } - Frame { - msec: 1280 - hash: "5d9089a68ef0b8b78b68c33d3082b597" - } - Frame { - msec: 1296 - hash: "d955c9f66eaf123351a19947240e8847" - } - Frame { - msec: 1312 - hash: "f1821cbcb3883a041f22a114f7158532" - } - Frame { - msec: 1328 - hash: "77f17db09c5a7125c42359c304f274de" - } - Frame { - msec: 1344 - hash: "bc38a4c859f596f6cf3c399d3a04b1cd" - } - Frame { - msec: 1360 - hash: "982c43a4a1c9fae8bf3980b5885cee2f" - } - Frame { - msec: 1376 - hash: "c15bb9b7dd77d505ee9918eb36b75c31" - } - Frame { - msec: 1392 - hash: "bda534fd941a6f8289bfbec9b8dde717" - } - Frame { - msec: 1408 - hash: "7ad5c54b481525ace42ae8926a5c0556" - } - Frame { - msec: 1424 - hash: "2399778158f63481eb8514245277b917" - } - Frame { - msec: 1440 - hash: "6c200d090b34a0152c7eb233c97c3886" - } - Frame { - msec: 1456 - hash: "7ba4500e81df31e3e2c5d165bacf771a" - } - Frame { - msec: 1472 - hash: "c7e13f3d9bdfe35eb905c1d4ed6b73ac" - } - Frame { - msec: 1488 - hash: "808b72766f5dce71fc983ffa01945665" - } - Frame { - msec: 1504 - hash: "899ac513755476db1e1304317524a755" - } - Frame { - msec: 1520 - hash: "27190dce033171966981672e52f07107" - } - Frame { - msec: 1536 - hash: "5d9ef583b6b3cb5257cb044cf376eff2" - } - Frame { - msec: 1552 - hash: "77b648fe26a942b246eec0fa018ad86f" - } - Frame { - msec: 1568 - hash: "744a61493816338113ba4ba7c05f76de" - } - Frame { - msec: 1584 - hash: "2eb0da64d5937c1a38754fd55ca684d0" - } - Frame { - msec: 1600 - hash: "6f799c2c0c0e1ed419af03f8bbb9fae1" - } - Frame { - msec: 1616 - hash: "5b84344f31d5e4d15be6b53ad3bf9c84" - } - Frame { - msec: 1632 - hash: "997b5967e3e3a35d02f10e1eae417dbf" - } - Frame { - msec: 1648 - hash: "c522369c836e8d08c56e2e332dd005ac" - } - Frame { - msec: 1664 - hash: "22f4072da05d261cfcca232ea54d2cb4" - } - Frame { - msec: 1680 - hash: "7081a90c33785306800b7a57a4a9a75c" - } - Frame { - msec: 1696 - hash: "32a8bea14c92ce61ede89182765f0759" - } - Frame { - msec: 1712 - hash: "4bafe476d5301974c616311073763ab4" - } - Frame { - msec: 1728 - hash: "291188ca795d455ae293437c2fb2303d" - } - Frame { - msec: 1744 - hash: "99d2658f863c82dd71fde0f0b93b4d62" - } - Frame { - msec: 1760 - hash: "8a7183e11fde2846d5435847ad9add45" - } - Frame { - msec: 1776 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1792 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1808 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1824 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1840 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1856 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1872 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1888 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1904 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1920 - image: "clock.1.png" - } - Frame { - msec: 1936 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1952 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1968 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 1984 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 2000 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 2016 - hash: "34b6180b74f0653ce1f18c22022d333f" - } - Frame { - msec: 2032 - hash: "150f511972394d8485979a6d9badcee5" - } - Frame { - msec: 2048 - hash: "50b420f72479ec613fd443b5faa3cb94" - } - Frame { - msec: 2064 - hash: "a51cbeea7ad5407b2784a3a3c8ca1ecf" - } - Frame { - msec: 2080 - hash: "0f658f4c91f890cd252d0f9d9bbe064d" - } - Frame { - msec: 2096 - hash: "c814c99815a91547eff01dc899c275f2" - } - Frame { - msec: 2112 - hash: "f9dac59029008e52efe4225cf919f013" - } - Frame { - msec: 2128 - hash: "b87bdcf09b425f2b2d6aed65f96ae8a3" - } - Frame { - msec: 2144 - hash: "f353bf64e664166a542aa027dc625529" - } - Frame { - msec: 2160 - hash: "12492b26c2f1c018e034c0fa936fa7b5" - } - Frame { - msec: 2176 - hash: "33f04d25bced580f15590f12ddafef62" - } - Frame { - msec: 2192 - hash: "cdd8ee656e4fec3ac6e72b6f7626de3b" - } - Frame { - msec: 2208 - hash: "22a94ea46fb9ee78830eab79e4adc5c5" - } - Frame { - msec: 2224 - hash: "64a10c9d4738c004c7f08f95b48a7a4d" - } - Frame { - msec: 2240 - hash: "ff3300fb49a735e0a958362aead1905f" - } - Frame { - msec: 2256 - hash: "8289dfdad12a8c13513175e5aad6a2d9" - } - Frame { - msec: 2272 - hash: "49e5cbb94f7d8bc853ca3c9366d737c9" - } - Frame { - msec: 2288 - hash: "76d2d8df4ad0359bb8ae102b225b3a68" - } - Frame { - msec: 2304 - hash: "98d925b3306aa7dd1b1fb9e066cd8a02" - } - Frame { - msec: 2320 - hash: "3911b53eb0346af1773ad991232e61ee" - } - Frame { - msec: 2336 - hash: "8991c10234f9f286ebab39d72729525d" - } - Frame { - msec: 2352 - hash: "ca2c8c6f23b30957a5cc20d9750a3ffe" - } - Frame { - msec: 2368 - hash: "80abe9b146b31dbedf1fe2357d922dda" - } - Frame { - msec: 2384 - hash: "0e34091d6bceab00bdabcec78e99e265" - } - Frame { - msec: 2400 - hash: "ba04053c25e53b3dc790feac9a33e221" - } - Frame { - msec: 2416 - hash: "cb6f7f2cce4f68ef1d35f765e00bbf7b" - } - Frame { - msec: 2432 - hash: "1e63fb94f5fbf3b600ec9298cbb97c8a" - } - Frame { - msec: 2448 - hash: "8991c10234f9f286ebab39d72729525d" - } - Frame { - msec: 2464 - hash: "00531d4a5fe98bbb487ad835414e7d07" - } - Frame { - msec: 2480 - hash: "7af9f861cb57c937c87b24eee9fbb558" - } - Frame { - msec: 2496 - hash: "7ecd1a4a75753e70ad5937e5bc897e03" - } - Frame { - msec: 2512 - hash: "557766fe964033f6a488574af7306cac" - } - Frame { - msec: 2528 - hash: "bd0f7164dd0a84ce1a1b2a6acbc2157b" - } - Frame { - msec: 2544 - hash: "d24ef664cf13519b99d6193bf98fcfd1" - } - Frame { - msec: 2560 - hash: "6c3626248bbb41cab85ec2a908b7874b" - } - Frame { - msec: 2576 - hash: "0f9bea8d474690164a09dfd3b13ff80b" - } - Frame { - msec: 2592 - hash: "e5197674c91de893a970614e650547e5" - } - Frame { - msec: 2608 - hash: "ce6861e9a7e75b809df026f078c8516b" - } - Frame { - msec: 2624 - hash: "eb0539e30fd53fb905d7b28ff0bc6cfd" - } - Frame { - msec: 2640 - hash: "45f70dda0d647119175457fb4d451e85" - } - Frame { - msec: 2656 - hash: "ca6b75fa4ee612bf6bb1776ef4115b16" - } - Frame { - msec: 2672 - hash: "c7d6bd687be6d5476300539411b97fc5" - } - Frame { - msec: 2688 - hash: "27da9137b936d813d3c79a873053ed38" - } - Frame { - msec: 2704 - hash: "4389a5758bf9df9553300c074aa7bb36" - } - Frame { - msec: 2720 - hash: "30476b70a29716b359a046f99b6387e5" - } - Frame { - msec: 2736 - hash: "b91c6f1e57d718e95ab05d1f386aedb9" - } - Frame { - msec: 2752 - hash: "578b022173dcac39d227ffeb043e53d0" - } - Frame { - msec: 2768 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2784 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2800 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2816 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2832 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2848 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2864 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2880 - image: "clock.2.png" - } - Frame { - msec: 2896 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2912 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2928 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2944 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2960 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2976 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 2992 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 3008 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 3024 - hash: "fe8ffe202a5f58b184a65d0ebc9c5f32" - } - Frame { - msec: 3040 - hash: "294d542f880356b4cbb171170c28dcd7" - } - Frame { - msec: 3056 - hash: "946b5937974e28ffd996ce132c8fad15" - } - Frame { - msec: 3072 - hash: "bb61994ff1dc36d3933084b874073832" - } - Frame { - msec: 3088 - hash: "ec337c7ae77deeb41f38adb1851720e5" - } - Frame { - msec: 3104 - hash: "7691c6c048b78e1551b46a37b6e95b16" - } - Frame { - msec: 3120 - hash: "b3116620d319ae4b681f4ca76c068b32" - } - Frame { - msec: 3136 - hash: "ed5a27e5be3dbde3867715f877da41db" - } - Frame { - msec: 3152 - hash: "8dcc220cc652f57aa8ac33364edc96a3" - } - Frame { - msec: 3168 - hash: "a7832d86283e27ee1523c4808b42fc43" - } - Frame { - msec: 3184 - hash: "fc90d18b072638f2df1bacee12fe1743" - } - Frame { - msec: 3200 - hash: "cdd7b5598155eba57783ebe1872db818" - } - Frame { - msec: 3216 - hash: "b45e32d12bbc2e56f4a3e7e473528d3e" - } - Frame { - msec: 3232 - hash: "5762a693ea6287e8987c604ef9fac361" - } - Frame { - msec: 3248 - hash: "2e46a8df5ec0c7070a374186a313f2c6" - } - Frame { - msec: 3264 - hash: "e612134417f3f901661b658801a72848" - } - Frame { - msec: 3280 - hash: "5de468fac915894ef34f3fee1c637e01" - } - Frame { - msec: 3296 - hash: "e29c8713573e49fc98387311d80c7510" - } - Frame { - msec: 3312 - hash: "6fce67b704f613e6fd9181ccb9ee237f" - } - Frame { - msec: 3328 - hash: "bf499add3d91d751ffa1cce28bece380" - } - Frame { - msec: 3344 - hash: "7d50cad7b18a4a37be6aac7796014195" - } - Frame { - msec: 3360 - hash: "6695208c8d39373ff0846c821c819cb2" - } - Frame { - msec: 3376 - hash: "0140ec2286b0fb94340d2dd6d418f539" - } - Frame { - msec: 3392 - hash: "9f92a99737aa6a7da48af7e7a4ed7a6a" - } - Frame { - msec: 3408 - hash: "8e593e8192d17d07c2265d6fa840f281" - } - Frame { - msec: 3424 - hash: "ea70e72eb12d5595d9bf0d9cc77efd4d" - } - Frame { - msec: 3440 - hash: "faeeb9e6e6a260a266ac8965f204b542" - } - Frame { - msec: 3456 - hash: "d50987082d056997a8e7fe5940cb7968" - } - Frame { - msec: 3472 - hash: "44089138e01bfee916306ae66ba43e9f" - } - Frame { - msec: 3488 - hash: "60256356ca6fe8bd323ef36bc149a3ea" - } - Frame { - msec: 3504 - hash: "6caae71d6bd897d755aeb22f10862171" - } - Frame { - msec: 3520 - hash: "8ba18bf5df010718f83d6bb25aa1858b" - } - Frame { - msec: 3536 - hash: "a903996370fb7efcaf295f00b9b4c4b6" - } - Frame { - msec: 3552 - hash: "cc0b736c8b4d46d3d809dcfe82068c88" - } - Frame { - msec: 3568 - hash: "037b2f65d162d44c39706d322cd6b6e5" - } - Frame { - msec: 3584 - hash: "92c2b4f346329ffbcae07db74332ebbe" - } - Frame { - msec: 3600 - hash: "3f9b2b5aade31333568a7cccf89e3176" - } - Frame { - msec: 3616 - hash: "b40f9cce4cddf9fa5245276a105a3e0d" - } - Frame { - msec: 3632 - hash: "74eb3e8a282693bd6bc92f381e380d61" - } - Frame { - msec: 3648 - hash: "43d85dd9e0de49c639db0d91047c88bb" - } - Frame { - msec: 3664 - hash: "563a07f4aa618252933e0356cc300bba" - } - Frame { - msec: 3680 - hash: "73d1e5745154996fd245a91a831d5462" - } - Frame { - msec: 3696 - hash: "7b2785b605c64135ea6914ad8388eb8f" - } - Frame { - msec: 3712 - hash: "b2d989af972715a86ca374753d32f757" - } - Frame { - msec: 3728 - hash: "96311aac52bc9167a7350af29741f3dc" - } - Frame { - msec: 3744 - hash: "56e4b98816896f7353dddeac090f70d1" - } - Frame { - msec: 3760 - hash: "7bd8ac36107e9e5db39e1aa37f2c5ca8" - } - Frame { - msec: 3776 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3792 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3808 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3824 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3840 - image: "clock.3.png" - } - Frame { - msec: 3856 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3872 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3888 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3904 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3920 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3936 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3952 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3968 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 3984 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 4000 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 4016 - hash: "b9545df89c8bec940678b65d5ef9ce04" - } - Frame { - msec: 4032 - hash: "df3a1204f6243673d567724d27d07a9e" - } - Frame { - msec: 4048 - hash: "7d0d3e92cb61d868d062bdf173924a4d" - } - Frame { - msec: 4064 - hash: "29948b5d7807a6ed0076a9637ec3eb79" - } - Frame { - msec: 4080 - hash: "2986b5e0a4a49bbe9f4ffada30433a48" - } - Frame { - msec: 4096 - hash: "0d9e3813141a1ee15474380902d87815" - } - Frame { - msec: 4112 - hash: "c5197a932430d498b7344c1f37454320" - } - Frame { - msec: 4128 - hash: "c8ef8acf314486c157e74bdd2695ddb2" - } - Frame { - msec: 4144 - hash: "adeb73de4b967912a9f2b04ba2b6fe4c" - } - Frame { - msec: 4160 - hash: "da5fddd1e4ab8c096af0acc62114d69f" - } - Frame { - msec: 4176 - hash: "5ef0784315603da196e66b4628524c5c" - } - Frame { - msec: 4192 - hash: "1ff2a89c510953d71198056f5ac5b1a6" - } - Frame { - msec: 4208 - hash: "f63d409e134e59b875099ab11b469d21" - } - Frame { - msec: 4224 - hash: "e353748e0b0c49a217d6e2d06a9bfeb6" - } - Frame { - msec: 4240 - hash: "a9d7470902a232d815bd2580e24fdc22" - } - Frame { - msec: 4256 - hash: "eecbad718aa4eaf5bef7cd921b2ce9f9" - } - Frame { - msec: 4272 - hash: "7a51cadbfb93eb4a66acc9cb150002ed" - } - Frame { - msec: 4288 - hash: "2aa511fb96a51a50e3a45b784e349c15" - } - Frame { - msec: 4304 - hash: "a1ad19593dc6b9f4c027f388e802dcbe" - } - Frame { - msec: 4320 - hash: "ef6787f03bc1e33ea5f2a54aa1ba3a41" - } - Frame { - msec: 4336 - hash: "3386337bbc1ab82374d9965b7b0ffdef" - } - Frame { - msec: 4352 - hash: "c76afb4f412b4d5dd8eca74db6c54fb8" - } - Frame { - msec: 4368 - hash: "f91ac74ec153152670d43f42b1e2a2db" - } - Frame { - msec: 4384 - hash: "58f22723fa0c67379972238e0e7ed5e2" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 4400 - hash: "a4730b0a8d6e0dd9e7eb58b51fb631ec" - } - Frame { - msec: 4416 - hash: "193bf624efefcad70af29f41eeab128e" - } - Frame { - msec: 4432 - hash: "d692f262facf26c2be2b0f747903d476" - } - Frame { - msec: 4448 - hash: "e59e43b5d4abebea0a55b1d072d148bc" - } - Frame { - msec: 4464 - hash: "134ff829e91161146b5f048a50c7eef7" - } - Frame { - msec: 4480 - hash: "07a80e45e70cb13f45e3858404c5f8dd" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.0.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.0.png deleted file mode 100644 index 3f42e75..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.1.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.1.png deleted file mode 100644 index d661df6..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.1.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.10.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.10.png deleted file mode 100644 index e8c96e1..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.10.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.2.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.2.png deleted file mode 100644 index 35bfa43..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.2.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.3.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.3.png deleted file mode 100644 index 74141cf..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.3.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.4.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.4.png deleted file mode 100644 index 9544054..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.4.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.5.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.5.png deleted file mode 100644 index 4b02c79..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.5.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.6.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.6.png deleted file mode 100644 index 8ea8345..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.6.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.7.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.7.png deleted file mode 100644 index 76a73e8..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.7.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.8.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.8.png deleted file mode 100644 index 8824940..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.8.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.9.png b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.9.png deleted file mode 100644 index f954cc5..0000000 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.qml deleted file mode 100644 index e7e5b3c..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/data/follow.qml +++ /dev/null @@ -1,1763 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "3561ebf22b19c7bd5a70947d36b50b63" - } - Frame { - msec: 32 - hash: "3561ebf22b19c7bd5a70947d36b50b63" - } - Frame { - msec: 48 - hash: "bd0006fc34f58ec1ea6aa4c4acbb0070" - } - Frame { - msec: 64 - hash: "c25f9fb6aea93413bfef5eb176c02476" - } - Frame { - msec: 80 - hash: "4ce0eb12fb41960e60e208dffb09ed3a" - } - Frame { - msec: 96 - hash: "75b3375881969710b6eb21f2a93c36cc" - } - Frame { - msec: 112 - hash: "91e9b13e332959e41a29c0b225675a05" - } - Frame { - msec: 128 - hash: "8e04a31a953b42903dffe86b37b3f59f" - } - Frame { - msec: 144 - hash: "837e0e646a2853d3fde571f9dd966fc7" - } - Frame { - msec: 160 - hash: "7367e25ae1e3a3731d83da76d5795f8c" - } - Frame { - msec: 176 - hash: "3621846fb85b286a886a02de442e76c4" - } - Frame { - msec: 192 - hash: "ed20a4c3476b8bb5545d5343747c39c8" - } - Frame { - msec: 208 - hash: "1fc73efb410e9beb3f791cbff8e814b3" - } - Frame { - msec: 224 - hash: "199c99a4e3aa14fbc8c8a0d8baacf998" - } - Frame { - msec: 240 - hash: "513ce5a2f57e40002a26b7722c8a10db" - } - Frame { - msec: 256 - hash: "b80b51cd4e75bdc799bbe79e66b7d02b" - } - Frame { - msec: 272 - hash: "e1531b6c5b3ac872563fdfaf49d32a27" - } - Frame { - msec: 288 - hash: "6d7cfd78ebd56ae6adfc97aad5d11b13" - } - Frame { - msec: 304 - hash: "4252ebb2fba165e39f025f631e0a676a" - } - Frame { - msec: 320 - hash: "04d6ae51415b083bbb0eabd1b0304ca4" - } - Frame { - msec: 336 - hash: "750df1f1626c8b84dd72a35bf081fe00" - } - Frame { - msec: 352 - hash: "003d7a846e09ba23ee8a7ae6d473be9f" - } - Frame { - msec: 368 - hash: "5cf3abdbb9a5b8cba6a8afe8abb60ced" - } - Frame { - msec: 384 - hash: "0669f86043a0c84d0b4672cc5c1136b4" - } - Frame { - msec: 400 - hash: "94f59435fe4f3ca06699c996b537ae8c" - } - Frame { - msec: 416 - hash: "211c8ec42a6d6949253af71c6eeffa53" - } - Frame { - msec: 432 - hash: "6de6c6d1b4a37a864b96c0293be8ebf5" - } - Frame { - msec: 448 - hash: "468d67d069eaac1968a6ad52e56f3ab5" - } - Frame { - msec: 464 - hash: "18d8de7a5c73d8c8188e6ae00a701820" - } - Frame { - msec: 480 - hash: "4387c724ed49bfbbca238bf57a704a14" - } - Frame { - msec: 496 - hash: "f317c59f65c7266765333048d8545748" - } - Frame { - msec: 512 - hash: "6575d40c2f27f110443a2ede8a873c77" - } - Frame { - msec: 528 - hash: "3e65cb675124dbd9db5116fa7584e223" - } - Frame { - msec: 544 - hash: "df80612a74b33eca81db6f43aa33e411" - } - Frame { - msec: 560 - hash: "6b2bc20397f3fb452ea14d81e9efd61d" - } - Frame { - msec: 576 - hash: "e5b8a2476487f6cd9fd37e3b3f54f88d" - } - Frame { - msec: 592 - hash: "e93f8156e2dc278a5e20d9e28b48d9fa" - } - Frame { - msec: 608 - hash: "e524d5117888b0b68781ffaf1a3e7303" - } - Frame { - msec: 624 - hash: "f3b777409534d87c59e60499fd6a3808" - } - Frame { - msec: 640 - hash: "09d1fa8f1306eb6f51db97d04c2d7ad3" - } - Frame { - msec: 656 - hash: "acebdcebe6880c8b3b94ad7606181b72" - } - Frame { - msec: 672 - hash: "347945a94002cd44d7a2df47f82940a1" - } - Frame { - msec: 688 - hash: "c716014d63ff2a22cab04dadc18b10c1" - } - Frame { - msec: 704 - hash: "ced019e3f8b5ca079582d01f1f585a8e" - } - Frame { - msec: 720 - hash: "d61d31de835ea8d1ffa56fd04c873ac1" - } - Frame { - msec: 736 - hash: "2eec542c5af4c6eecc153cc0fcae7dd3" - } - Frame { - msec: 752 - hash: "c13b9443e1c000a2877e4586428da308" - } - Frame { - msec: 768 - hash: "c5c2e30b3dc3298afc201f6045e79e59" - } - Frame { - msec: 784 - hash: "308f2ca66133d37c2fcb222e68698d25" - } - Frame { - msec: 800 - hash: "bf820215986a35b56daf07c164fd2a79" - } - Frame { - msec: 816 - hash: "a0bb21475100fb25b767d055d70b062f" - } - Frame { - msec: 832 - hash: "bfb0927bcb23689820b0f96ea56426fc" - } - Frame { - msec: 848 - hash: "8f294742ca9dd6ab10689f1f4ec2ed96" - } - Frame { - msec: 864 - hash: "f60c232307570fb4ec6e74f18e243553" - } - Frame { - msec: 880 - hash: "7411970ab72d8b2dbf48ee8d4e6503b3" - } - Frame { - msec: 896 - hash: "d4d766038daeae2fbec290204ca3983b" - } - Frame { - msec: 912 - hash: "f85525c3fd784ee7f9a3d9465e37d6f3" - } - Frame { - msec: 928 - hash: "c5e63da86ddbd2a54c7cd3d03e5428a2" - } - Frame { - msec: 944 - hash: "369a7405b1717ddf06c99ab1dd6d4cb0" - } - Frame { - msec: 960 - image: "follow.0.png" - } - Frame { - msec: 976 - hash: "18d5c4378f9daf63bf4cb76d76374548" - } - Frame { - msec: 992 - hash: "f36e649db2e1ec9fbe15e7711ea13ab5" - } - Frame { - msec: 1008 - hash: "f68515607dca1bda14b6afa6e05ebb6b" - } - Frame { - msec: 1024 - hash: "bc5cc4c9050a5bd4c64debd12643fd73" - } - Frame { - msec: 1040 - hash: "f053a18bca4d8c47a0f181fad8118e9a" - } - Frame { - msec: 1056 - hash: "9a2218f51faed4fa891c507fe6828d2c" - } - Frame { - msec: 1072 - hash: "ce671ff4dd1f343243f2fcc263d137f4" - } - Frame { - msec: 1088 - hash: "8624f8d814094ad25a1482a11f424990" - } - Frame { - msec: 1104 - hash: "324dad940b3adb54491d6cdd4e7d8aa7" - } - Frame { - msec: 1120 - hash: "0cd7c53ec5b591053de6769967b8bad5" - } - Frame { - msec: 1136 - hash: "e9e8f5e9c2dc179498943d0b5912af09" - } - Frame { - msec: 1152 - hash: "5f1552ccd61f09335a88658ee1c4e97e" - } - Frame { - msec: 1168 - hash: "866e01eed7e26dd1bd9af8aaddf4d7c0" - } - Frame { - msec: 1184 - hash: "2efba3c33c4c7b6d89ce7efca2dc516a" - } - Frame { - msec: 1200 - hash: "2de9d8a2ad64d2491b3444712be032dc" - } - Frame { - msec: 1216 - hash: "84206972322eae033d05f71b178180c9" - } - Frame { - msec: 1232 - hash: "8571d11da1a893edcbe5add1a9399d7a" - } - Frame { - msec: 1248 - hash: "c0d65ecefa77ee7cb1c08a560e3ad572" - } - Frame { - msec: 1264 - hash: "0f8a8523969713771a6c7984069b15e4" - } - Frame { - msec: 1280 - hash: "2e80e4b54538b7b586f4a3be55eb6da3" - } - Frame { - msec: 1296 - hash: "ae028381f311a60946ecd26eab95bb42" - } - Frame { - msec: 1312 - hash: "ac5902d58bc116a002c093f55cf20278" - } - Frame { - msec: 1328 - hash: "242f8617718048cfab9950b812eb1b26" - } - Frame { - msec: 1344 - hash: "b642f2f0d3161f80a702b09a910c589b" - } - Frame { - msec: 1360 - hash: "d1508034ecd908120c6f58cf08360c3c" - } - Frame { - msec: 1376 - hash: "ad10a5ea8598616f2ffa633eecfbd43a" - } - Frame { - msec: 1392 - hash: "1d2c3cfaac1cca868f31872bf4248de8" - } - Frame { - msec: 1408 - hash: "28da57a6aec84318ff6aa029ac17f1dd" - } - Frame { - msec: 1424 - hash: "6f9bf89843d5e40f6c282e69337e7d25" - } - Frame { - msec: 1440 - hash: "1c5733ad9620805127372fb76f5b0228" - } - Frame { - msec: 1456 - hash: "16f21041e9e475a37c478cf38cdc353b" - } - Frame { - msec: 1472 - hash: "b39ea2e8a1991b3ea5be818a284ff69f" - } - Frame { - msec: 1488 - hash: "4f5bdc935080707525a2b74936b41b2e" - } - Frame { - msec: 1504 - hash: "a39426dc761df1d2ba398aa17d220ded" - } - Frame { - msec: 1520 - hash: "2e965042273b377958b04190250d273e" - } - Frame { - msec: 1536 - hash: "51f021c1d50291b425c98dee4894b330" - } - Frame { - msec: 1552 - hash: "88fea2e6d6898084acb5897833adb182" - } - Frame { - msec: 1568 - hash: "12f55e64c8ec9825bf6c5cfd5d50d2bb" - } - Frame { - msec: 1584 - hash: "365b358eb7a678e1076774c36a82f452" - } - Frame { - msec: 1600 - hash: "a992b326739bff87bf042c711a7fa65c" - } - Frame { - msec: 1616 - hash: "083aa3c766a3b50492e51aab3ee128d0" - } - Frame { - msec: 1632 - hash: "16a2db3b3a773e2612bc57f7a7d7fbbe" - } - Frame { - msec: 1648 - hash: "32a28101a53d308b107d26a30ae7cdd9" - } - Frame { - msec: 1664 - hash: "da3908e584542ff2f73cb22369f49c1c" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 195; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1680 - hash: "8ad535bb0c5decd8c970aa36286d57e7" - } - Frame { - msec: 1696 - hash: "5bfbcab7607622486c350a9117ab0884" - } - Frame { - msec: 1712 - hash: "17e13c8bfd81081f6400d3e71daecb4c" - } - Frame { - msec: 1728 - hash: "9411a66b6c3ef9a98bc62dea282d6a51" - } - Frame { - msec: 1744 - hash: "423cded80165ee13f903460e5396526b" - } - Frame { - msec: 1760 - hash: "709cc55316e6702c1359b66c06676603" - } - Frame { - msec: 1776 - hash: "27232931c000a2edb5c3d480a6692e6b" - } - Frame { - msec: 1792 - hash: "22311fd0903b53f50df824ba345ca350" - } - Frame { - msec: 1808 - hash: "9bb066e60e7e5b3eaa0a221b8ba1a431" - } - Frame { - msec: 1824 - hash: "517000255d372d384773dff8c80f5a65" - } - Frame { - msec: 1840 - hash: "329dbd77ae53ea8e4beb669a976033a8" - } - Frame { - msec: 1856 - hash: "2acd5d3e878e1db5413270c1a50ffc83" - } - Frame { - msec: 1872 - hash: "8eb5946ac5d53dfc2813d1f1c6a2b6c5" - } - Frame { - msec: 1888 - hash: "375299e5b1067e02d5de3238a37659f2" - } - Frame { - msec: 1904 - hash: "f385c90e585db5555e873996165f55af" - } - Frame { - msec: 1920 - image: "follow.1.png" - } - Frame { - msec: 1936 - hash: "6c13bb69b6483c72463437e102a9dabb" - } - Frame { - msec: 1952 - hash: "c1b5d10688681c3b2363bb6d4173deca" - } - Frame { - msec: 1968 - hash: "b434649e4c9b2c184d2f9036f9d041bf" - } - Frame { - msec: 1984 - hash: "ca32e9f9080983803bb37b7231ed1c84" - } - Frame { - msec: 2000 - hash: "976eab47b2d6445fdd8293f2c73564c1" - } - Frame { - msec: 2016 - hash: "e63daea8f3bc79cea7a6b8dcfd31a094" - } - Frame { - msec: 2032 - hash: "626cbe5e6b79f2fd0ef57c943666b571" - } - Frame { - msec: 2048 - hash: "4e07255ce12a21966eec33c0cc623d96" - } - Frame { - msec: 2064 - hash: "94045005de77725c63c62575a6b06852" - } - Frame { - msec: 2080 - hash: "3b6dcf783c5e9fe99ce3d9ca02bceff6" - } - Frame { - msec: 2096 - hash: "e901ed7e831e2d012b97b98b3ab6fa1b" - } - Frame { - msec: 2112 - hash: "74ef03f72d032daaff13114fde02b824" - } - Frame { - msec: 2128 - hash: "9eb334d7dda3801c1fe292844040e014" - } - Frame { - msec: 2144 - hash: "82bf8fb5e3a9bf167f3f00b1f6ab3c06" - } - Frame { - msec: 2160 - hash: "df3a2bc7758d00d595347e62c7e53c4a" - } - Frame { - msec: 2176 - hash: "e77ac04a6ad9f97226b45d202a0d5196" - } - Frame { - msec: 2192 - hash: "37411333a28ea840c59cabd96fd1deba" - } - Frame { - msec: 2208 - hash: "8d1eb90ffd080bcd078b69c9635108d1" - } - Frame { - msec: 2224 - hash: "68ee5d58b2edeb6b5a64a714115e4499" - } - Frame { - msec: 2240 - hash: "003ddf0a5dd3d4bb947a34bdd22ad8c1" - } - Frame { - msec: 2256 - hash: "bf3c89d0a09ed2159a78f10124f5d7bb" - } - Frame { - msec: 2272 - hash: "6ec994f41d4540db988846416c2f7b4f" - } - Frame { - msec: 2288 - hash: "9ca7e3ca6ea26e8259d34a8c0f80f7a9" - } - Frame { - msec: 2304 - hash: "edf5cea581d46400914610213c8503ea" - } - Frame { - msec: 2320 - hash: "9b96aac3f98cd37a361788be8b81e308" - } - Frame { - msec: 2336 - hash: "5d304a8398512ebc85bebf973ed6a4f4" - } - Frame { - msec: 2352 - hash: "cf2a27a395f23f7976a48d69f5e8e120" - } - Frame { - msec: 2368 - hash: "458323a37208ea14972d8f84cebc66a5" - } - Frame { - msec: 2384 - hash: "da9c8e4d168b9cd32d5ec3f5857d2942" - } - Frame { - msec: 2400 - hash: "5d6663be8e02b0a7a4701595c9c26663" - } - Frame { - msec: 2416 - hash: "4190712a39ca07f810a6d84e15488393" - } - Frame { - msec: 2432 - hash: "26b22be0a1c2fecec1e25a6513b19484" - } - Frame { - msec: 2448 - hash: "3e623bc2b9e8cec49671571291cf6afb" - } - Frame { - msec: 2464 - hash: "3e623bc2b9e8cec49671571291cf6afb" - } - Frame { - msec: 2480 - hash: "2cb2968d16323af4659b3197d391bb91" - } - Frame { - msec: 2496 - hash: "5376b1285647950428b29e75f2e27c4f" - } - Frame { - msec: 2512 - hash: "baaacc3940c8d36f715d90e046346bed" - } - Frame { - msec: 2528 - hash: "277719afea4c119f17c34c59ef0b7984" - } - Frame { - msec: 2544 - hash: "00a172ff8afd1e8444fb84249a3af0fd" - } - Frame { - msec: 2560 - hash: "bf8a0f939a5602a0a9f5a3bc7c8d0d86" - } - Frame { - msec: 2576 - hash: "b22860751790b3113b2cb299c9f628b8" - } - Frame { - msec: 2592 - hash: "fdda1e520457974443720bd44f21d929" - } - Frame { - msec: 2608 - hash: "538af31f9463cd07163d54adc2721345" - } - Frame { - msec: 2624 - hash: "2ca50398746c8fb1c936fd412c7556b4" - } - Frame { - msec: 2640 - hash: "63cd898c3e22a29846489e5c47f455a1" - } - Frame { - msec: 2656 - hash: "1e69cc765c3f2c27c2b6e7f3e47f515a" - } - Frame { - msec: 2672 - hash: "9d7ce0df7bee9a387917ef228fd50652" - } - Frame { - msec: 2688 - hash: "afa0b735a9dd0734362b3f3f7d7177c3" - } - Frame { - msec: 2704 - hash: "91bee07133319a0adbf9a31c430e58ad" - } - Frame { - msec: 2720 - hash: "6aee88b6391e524bafc15524825ada74" - } - Frame { - msec: 2736 - hash: "655ce421faa628b3389f084fe675ad53" - } - Frame { - msec: 2752 - hash: "367fd34b54f12e896839b0ef4fb06925" - } - Frame { - msec: 2768 - hash: "0b3ac04504bfe876c4338a4dc3721280" - } - Frame { - msec: 2784 - hash: "c6cdb77888f1a3cbfe4cfec28bfad12d" - } - Frame { - msec: 2800 - hash: "ef01302544f4da4575035d3e4f2443c9" - } - Frame { - msec: 2816 - hash: "53f01d26a75f7e91d14b8975c81638d5" - } - Frame { - msec: 2832 - hash: "10fc7b3f7e5dff21edef4123d252cba0" - } - Frame { - msec: 2848 - hash: "10fc7b3f7e5dff21edef4123d252cba0" - } - Frame { - msec: 2864 - hash: "10fc7b3f7e5dff21edef4123d252cba0" - } - Frame { - msec: 2880 - image: "follow.2.png" - } - Frame { - msec: 2896 - hash: "143970d31598c017d7f24e8b09fd0f0a" - } - Frame { - msec: 2912 - hash: "fc6c38bfdcd2df7a928e83d57dc0b18d" - } - Frame { - msec: 2928 - hash: "647c09aae23ea5ec7979775d3022cacf" - } - Frame { - msec: 2944 - hash: "f1ed5cd564be1eed3242997c14a99887" - } - Frame { - msec: 2960 - hash: "aec3d7f18d6c4002229ef1d36727c4b0" - } - Frame { - msec: 2976 - hash: "3552e5a3923593a2c66ecd5e2cb2ee25" - } - Frame { - msec: 2992 - hash: "55a72327b726a3c75383cc5a28ba9503" - } - Frame { - msec: 3008 - hash: "c25ff06944f8c92006245452e07215ef" - } - Frame { - msec: 3024 - hash: "cc0187a10a7ccf087838a481f667af6e" - } - Frame { - msec: 3040 - hash: "ae9d7ff04066eb998d052c2e21b58327" - } - Frame { - msec: 3056 - hash: "91707fa1aaa267e6d1d56d173a063bde" - } - Frame { - msec: 3072 - hash: "c076a33b8afcaf915387375f065e49df" - } - Frame { - msec: 3088 - hash: "c24390ec788b5f34356e7a6507507a93" - } - Frame { - msec: 3104 - hash: "e42c9800379de3076d00802c68cc99e8" - } - Frame { - msec: 3120 - hash: "a2d3ba5353b1c967da93d96b61f7927f" - } - Frame { - msec: 3136 - hash: "fe719953aa3468d373801bb80ae93eff" - } - Frame { - msec: 3152 - hash: "e89b9bed1ebc7ebdd37d6975ecb0601c" - } - Frame { - msec: 3168 - hash: "7f3d84f49a7dd4fe39a1ba0ed7f5da3e" - } - Frame { - msec: 3184 - hash: "b16c9e05f72e7c8fa59f80422b987600" - } - Frame { - msec: 3200 - hash: "bd0606da0f7bc6c47a361462b3b2dede" - } - Frame { - msec: 3216 - hash: "88f81db6d705b745c4d2ffe470cb6966" - } - Frame { - msec: 3232 - hash: "4ac6769d3f725720bba6c125b43885cd" - } - Frame { - msec: 3248 - hash: "4ac6769d3f725720bba6c125b43885cd" - } - Frame { - msec: 3264 - hash: "4ac6769d3f725720bba6c125b43885cd" - } - Frame { - msec: 3280 - hash: "4ac6769d3f725720bba6c125b43885cd" - } - Frame { - msec: 3296 - hash: "88f81db6d705b745c4d2ffe470cb6966" - } - Frame { - msec: 3312 - hash: "88f81db6d705b745c4d2ffe470cb6966" - } - Frame { - msec: 3328 - hash: "1f112ff43280a208e967e373db8e3f34" - } - Frame { - msec: 3344 - hash: "6d966dafdfd2cf1927c14f749e24a99c" - } - Frame { - msec: 3360 - hash: "8ab4ce88e52d7cd2ec9059cdb973590d" - } - Frame { - msec: 3376 - hash: "62d877f18b8d3fcf6b076946f2ce05f7" - } - Frame { - msec: 3392 - hash: "efe3729cdeddc4bcee105b27e4062dcd" - } - Frame { - msec: 3408 - hash: "a2eb63f12d434925d0780f4992155556" - } - Frame { - msec: 3424 - hash: "5eee7ec87bb399e1395a8d337ede021b" - } - Frame { - msec: 3440 - hash: "59769ae407be01b016df8d7fbf484243" - } - Frame { - msec: 3456 - hash: "bbadb689ec5b76f76340905252b2376a" - } - Frame { - msec: 3472 - hash: "97cd4f34259ac8370e8557ef3ecf5a96" - } - Frame { - msec: 3488 - hash: "17c1513fe4c0132e15355378c6a6ee11" - } - Frame { - msec: 3504 - hash: "7b19041638fc7d1cf60512f579f388dd" - } - Frame { - msec: 3520 - hash: "4d23bbf68cb8b32638b73ac20551ee50" - } - Frame { - msec: 3536 - hash: "3f0326db5a851887a534e80cc29dc21d" - } - Frame { - msec: 3552 - hash: "df5902d22a31c4deac1428d2758a0ffa" - } - Frame { - msec: 3568 - hash: "21badb1464775fa935c2619b91aa6e6e" - } - Frame { - msec: 3584 - hash: "e8cf87f4a65f6915addc16de29c90108" - } - Frame { - msec: 3600 - hash: "d3d4487b887695b7bba8e0af7756a0f8" - } - Frame { - msec: 3616 - hash: "d7f52590e4f51621ad2d62c975a5d1ef" - } - Frame { - msec: 3632 - hash: "9ebdc2b3ef05748e2cc8988f968f7a37" - } - Frame { - msec: 3648 - hash: "74bb7974f9315e70e976c21955390b9e" - } - Frame { - msec: 3664 - hash: "59e16a89e523160f2a482c22f003f87f" - } - Frame { - msec: 3680 - hash: "d8284c216df0fdd37525f26b88707572" - } - Frame { - msec: 3696 - hash: "d8711b4444eea59acc544652cea3c4ce" - } - Frame { - msec: 3712 - hash: "12148c3f2b5f41a4ac4801e990b20114" - } - Frame { - msec: 3728 - hash: "34429cbdfe581a524b1f9072cc404539" - } - Frame { - msec: 3744 - hash: "1f6a17b91d73e10bcbdd166d97546822" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 195; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3760 - hash: "bccd4f135f27199b3a710576e0013c53" - } - Frame { - msec: 3776 - hash: "6aa4db9ecb8fa4ad4d4f81434c369759" - } - Frame { - msec: 3792 - hash: "a7f2951411d8f5322ce91b3da7e86d64" - } - Frame { - msec: 3808 - hash: "25fe19f3398d3d1a74ad8ed4114149d7" - } - Frame { - msec: 3824 - hash: "05c3dae68897a461de2923824bef9390" - } - Frame { - msec: 3840 - image: "follow.3.png" - } - Frame { - msec: 3856 - hash: "db6265c30dd614720d1532ffc411a28f" - } - Frame { - msec: 3872 - hash: "f5de8e4ba755bc0a1e4c3f36ed3e6a93" - } - Frame { - msec: 3888 - hash: "ad68229e5fe9a2570074648005c5e5df" - } - Frame { - msec: 3904 - hash: "02d894680766289fe659a86b02d6c9ca" - } - Frame { - msec: 3920 - hash: "4f228534dd909207e8d149c74bd8fd90" - } - Frame { - msec: 3936 - hash: "f0b5c64f6a50e156452caf6a352c11e1" - } - Frame { - msec: 3952 - hash: "64d46ff443534dbdb3cca88b7fc3e758" - } - Frame { - msec: 3968 - hash: "717ad4b8012a21c6ed38dee5ea978f36" - } - Frame { - msec: 3984 - hash: "ed38c7b528bcbb3e291761104bf1e86e" - } - Frame { - msec: 4000 - hash: "8cc8674d325a2c72c41654ffbe5bce1f" - } - Frame { - msec: 4016 - hash: "ab66dd60cc0e58d23bef5c709fe901ad" - } - Frame { - msec: 4032 - hash: "b3b824cae4ddaac4a224e84f0e282fa4" - } - Frame { - msec: 4048 - hash: "ead7fe4bec7987c24c305e114797284c" - } - Frame { - msec: 4064 - hash: "e5e9501f1ca61ea9f99aadfc5ca02214" - } - Frame { - msec: 4080 - hash: "f74a00eb31e1604f13a6ffb29fbd91b7" - } - Frame { - msec: 4096 - hash: "539aca62492408ccc1815c67b55cb399" - } - Frame { - msec: 4112 - hash: "4f548ad0eb7c4ce88a777e3b7ce2d3a8" - } - Frame { - msec: 4128 - hash: "b0190c5ed53ff812988dd7a2152ffa61" - } - Frame { - msec: 4144 - hash: "48214bdfbdcba256043e2cec7f5e321b" - } - Frame { - msec: 4160 - hash: "952614329111d1d83b0304aa919af177" - } - Frame { - msec: 4176 - hash: "fd874a73062dedfe7b904ad4c9fbcbc9" - } - Frame { - msec: 4192 - hash: "365b9a18cf37521718ef98589ac23933" - } - Frame { - msec: 4208 - hash: "32bbbf93d78925ef12f830386f0dbe2b" - } - Frame { - msec: 4224 - hash: "835d391a498b7d470b317e91453ba2f9" - } - Frame { - msec: 4240 - hash: "07d0cd82a39bfea2567587745f1e330d" - } - Frame { - msec: 4256 - hash: "9560a63581007038e1c463b906a4b346" - } - Frame { - msec: 4272 - hash: "076d25daafe8b582aeff39e247653285" - } - Frame { - msec: 4288 - hash: "f2e66dad3231250b951388396705c839" - } - Frame { - msec: 4304 - hash: "f168773343e928b60aad5430b9ca739d" - } - Frame { - msec: 4320 - hash: "99ed4dc4be1a0e8d98e1a54d51208da3" - } - Frame { - msec: 4336 - hash: "23b3e73a966f52ce6166bc91955570a1" - } - Frame { - msec: 4352 - hash: "00cdb999f3d2c6fcad708c37c3059c3d" - } - Frame { - msec: 4368 - hash: "96f1bef93ba1768afcc42924145d49ff" - } - Frame { - msec: 4384 - hash: "0a76f6d5ec710e4046f32f76be8e0d68" - } - Frame { - msec: 4400 - hash: "98f97a6c7eac1a493e81e79956177668" - } - Frame { - msec: 4416 - hash: "9424ca6ba64d0d0c0bd1ee9da1b5085a" - } - Frame { - msec: 4432 - hash: "2049a22079ac590aad3c9f6496879bcb" - } - Frame { - msec: 4448 - hash: "f70f9f6bd3abf3bdcb70038cda5ed311" - } - Frame { - msec: 4464 - hash: "48d6d01e1d80fea8eb05572ca26b692c" - } - Frame { - msec: 4480 - hash: "af152dc6de929a8231687611cc301f28" - } - Frame { - msec: 4496 - hash: "2ec869cd61570b570586870f80ba3832" - } - Frame { - msec: 4512 - hash: "42be0431c015dcd0f5f6dd59ba7c2d7d" - } - Frame { - msec: 4528 - hash: "abc112f396c5e504a19dce255437720c" - } - Frame { - msec: 4544 - hash: "a371c4f49af16bdacc5ab5abbfc99e99" - } - Frame { - msec: 4560 - hash: "1ebfd139bfabbbaf522acd63e3f47462" - } - Frame { - msec: 4576 - hash: "b36086718a3dd89500adbf67aa7b0f1d" - } - Frame { - msec: 4592 - hash: "e3ea2ad4955cb2ab8d503b331b3594c3" - } - Frame { - msec: 4608 - hash: "4214c9f474d7f11bed74e32f5b3a0e9f" - } - Frame { - msec: 4624 - hash: "f290e1dbf13ae399a2644eea3715804a" - } - Frame { - msec: 4640 - hash: "6538c60446e3303dc1126c3c9c47ae42" - } - Frame { - msec: 4656 - hash: "5319667f181eb5647710ccc6eddf43c9" - } - Frame { - msec: 4672 - hash: "b98b68ea99d5a107115b50c32aa45c35" - } - Frame { - msec: 4688 - hash: "2cc38e2915f77a46082c32c9393ae0c5" - } - Frame { - msec: 4704 - hash: "40c695b17834cbba86d4dde0729f620b" - } - Frame { - msec: 4720 - hash: "e8d5a95cfc726ce2626951ef1c68a948" - } - Frame { - msec: 4736 - hash: "ab96c1668890ceffba74219d83e15e99" - } - Frame { - msec: 4752 - hash: "4d69a73b3940911940b419028dabd223" - } - Frame { - msec: 4768 - hash: "281043e3c045df177cbfae1abf51a8d1" - } - Frame { - msec: 4784 - hash: "8adf6d8154d7950efe6b5bd7e2b760b6" - } - Frame { - msec: 4800 - image: "follow.4.png" - } - Frame { - msec: 4816 - hash: "7fba4249c76b7f81c2b88cf906ce8ce6" - } - Frame { - msec: 4832 - hash: "50b3c89d4d783469843b3acacb9690dd" - } - Frame { - msec: 4848 - hash: "29f950ab7e6299036e78c8f37d114990" - } - Frame { - msec: 4864 - hash: "3f8aecc5453406c9d8160eeb9691ed91" - } - Frame { - msec: 4880 - hash: "ad7ff48fed4ca9e236271d169c3bf696" - } - Frame { - msec: 4896 - hash: "2a2f872e4ef5c062a61fb59238df8794" - } - Frame { - msec: 4912 - hash: "87cf2e21d7e56a82437a8ff3fa2bdc8c" - } - Frame { - msec: 4928 - hash: "c3b04bb24d86d2aebd8fde7845f114cf" - } - Frame { - msec: 4944 - hash: "3ad95d59a1f1841e3ff2324055ca23c0" - } - Frame { - msec: 4960 - hash: "b91068fdce1fb2be9a64902a3dfa6b0d" - } - Frame { - msec: 4976 - hash: "30f0118eb0bba40927a8038da03b652b" - } - Frame { - msec: 4992 - hash: "ce5f3d15d3536be16b960f02a7335b99" - } - Frame { - msec: 5008 - hash: "85b853c3f48b915ed6e80815709e8ac2" - } - Frame { - msec: 5024 - hash: "c3511a76aa6dc2f1422a473ca4d80d0f" - } - Frame { - msec: 5040 - hash: "deb1df70b4e1801c635356c65c0a5a46" - } - Frame { - msec: 5056 - hash: "d04983df9b0ffc45e629af55a8e5cc95" - } - Frame { - msec: 5072 - hash: "2a55c97509819657f5f8604d4789d9d4" - } - Frame { - msec: 5088 - hash: "94589d594fa2e5ed621459ec2c8bd7e8" - } - Frame { - msec: 5104 - hash: "a8a1bd7c15a5bdfe15d6580d719bdba6" - } - Frame { - msec: 5120 - hash: "b4e1a4b1b649820be217c46b5086c8a4" - } - Frame { - msec: 5136 - hash: "4de7d7ce85717eb9a67c61745ea26c0a" - } - Frame { - msec: 5152 - hash: "c8ee53b7e659e10c7dbcf44e1a45f794" - } - Frame { - msec: 5168 - hash: "f46ce03bc5a932c39862577c5a5cd24c" - } - Frame { - msec: 5184 - hash: "d417370ed6fb99ccfa443eb97e6de331" - } - Frame { - msec: 5200 - hash: "336af06572992960c829d4a209048263" - } - Frame { - msec: 5216 - hash: "4066e8eef292abf9b58bc89b4b5f3ce9" - } - Frame { - msec: 5232 - hash: "360f037a02bf4a337b278886266ff2f1" - } - Frame { - msec: 5248 - hash: "79e9f387b0ce164057640c0caab8d10d" - } - Frame { - msec: 5264 - hash: "ee8741d1810303cfe5ecff39c7d52fdd" - } - Frame { - msec: 5280 - hash: "4cba1c857f0af49d7fe68584f99c89d7" - } - Frame { - msec: 5296 - hash: "c0ae482a2fbb9f15a2c2ff631cc85c2c" - } - Frame { - msec: 5312 - hash: "3b6bf6d6a0aeebdc92eff4e336fd3b6e" - } - Frame { - msec: 5328 - hash: "43033eb8aeba6b49c135a1702f6b8f47" - } - Frame { - msec: 5344 - hash: "1319c7e3a84484723891ee43a80bc765" - } - Frame { - msec: 5360 - hash: "838ec693c923565d77b060f262beb1e8" - } - Frame { - msec: 5376 - hash: "74306669836425de03cec617d4ed849a" - } - Frame { - msec: 5392 - hash: "c063f4951755c8939399d0d560a0f762" - } - Frame { - msec: 5408 - hash: "512c739e0ff25f7d6b983a193f7fc2c3" - } - Frame { - msec: 5424 - hash: "6c5f69cc2ce2992fd2ecb0ea3691e2b8" - } - Frame { - msec: 5440 - hash: "f5dbc5ce0ba00eafb9379ee86de67150" - } - Frame { - msec: 5456 - hash: "f62bb7d8d9749272ca3e2bd1931598fb" - } - Frame { - msec: 5472 - hash: "052fdac05286edcdd7fcd4d6d9582f39" - } - Frame { - msec: 5488 - hash: "ac4702306e5be156fe7b069cb90e1038" - } - Frame { - msec: 5504 - hash: "127e94c79f4d33e5f223a0853629245f" - } - Frame { - msec: 5520 - hash: "dd77216b0a90c46dd5c264d38ab0fd74" - } - Frame { - msec: 5536 - hash: "a4e50b39aa367d4cd7650d088d186856" - } - Frame { - msec: 5552 - hash: "6e14946b9b23f0fc137bd61c02af1ca5" - } - Frame { - msec: 5568 - hash: "8c550d5e4cfbcee2c7bd6c20dba53f41" - } - Frame { - msec: 5584 - hash: "9f2385fb614bdaafe022712148f786d2" - } - Frame { - msec: 5600 - hash: "c87903c96ae5a4b91c5bda524bfd4a4f" - } - Frame { - msec: 5616 - hash: "9a98de9b4237b7c0ccb4468344d410bc" - } - Frame { - msec: 5632 - hash: "7ff448f395ff50cde1f6e6cfaf0c1541" - } - Frame { - msec: 5648 - hash: "ab7a6998a5b26e3d58bd1d0a949f3709" - } - Frame { - msec: 5664 - hash: "ab7a6998a5b26e3d58bd1d0a949f3709" - } - Frame { - msec: 5680 - hash: "2e1b5636ab75af91bd5b0d48c04828f5" - } - Frame { - msec: 5696 - hash: "0976b605c78f6f8512acdfb61b9d123a" - } - Frame { - msec: 5712 - hash: "bb816bfd8bd3972c80c3a76c9ddf785e" - } - Frame { - msec: 5728 - hash: "c3518990fc7aa5660a9e86034cf4c46f" - } - Frame { - msec: 5744 - hash: "b27230d8aeb214e18b43de167213ef7b" - } - Frame { - msec: 5760 - image: "follow.5.png" - } - Frame { - msec: 5776 - hash: "fc55f00ae456c2687ed05ab4b6906a33" - } - Frame { - msec: 5792 - hash: "50051a48d1fae3bc9c9d1f0a964d9561" - } - Frame { - msec: 5808 - hash: "279a38d7261241c744c2317ea9843567" - } - Frame { - msec: 5824 - hash: "0b3ed3960713dbda36326b7de492c42e" - } - Frame { - msec: 5840 - hash: "fff5737541317406c4a0ef06f1cdc041" - } - Frame { - msec: 5856 - hash: "47aef0d79da45139a3981a75290cc9b8" - } - Frame { - msec: 5872 - hash: "d79f9f9371c76a855ea4f2cdeed97acd" - } - Frame { - msec: 5888 - hash: "66610a0d5b926d419da26e20b04b55a5" - } - Frame { - msec: 5904 - hash: "9891ad954da8535b44cc234bb2588f30" - } - Frame { - msec: 5920 - hash: "b53056146701fae1598ab49e6399db01" - } - Frame { - msec: 5936 - hash: "064799027a3f60458a3797c6c87d3e29" - } - Frame { - msec: 5952 - hash: "81ad252f10e6f8f2a08e7df1d25e8a47" - } - Frame { - msec: 5968 - hash: "09fbd923da02844f50ad25059f82560c" - } - Frame { - msec: 5984 - hash: "f41d8370afdce8a154ab42204ca8d92d" - } - Frame { - msec: 6000 - hash: "748b2d020c28b3ac36b08377b4a2544b" - } - Frame { - msec: 6016 - hash: "748b2d020c28b3ac36b08377b4a2544b" - } - Frame { - msec: 6032 - hash: "d8c02a54c0d1df20127025d547c741af" - } - Frame { - msec: 6048 - hash: "d8c02a54c0d1df20127025d547c741af" - } - Frame { - msec: 6064 - hash: "d7fd0dab22fec0f68ed01cfd6d32e7f5" - } - Frame { - msec: 6080 - hash: "f0b035eda10c07f5c3c825784ad96437" - } - Frame { - msec: 6096 - hash: "54b83800f8a01e1a4d57b8b1d371fb09" - } - Frame { - msec: 6112 - hash: "19ad51c31e9cfdb314c76f323574806c" - } - Frame { - msec: 6128 - hash: "dcf269a115781eb4df232a527de87a87" - } - Frame { - msec: 6144 - hash: "95053206702a6118c23b541ff7fbef0d" - } - Frame { - msec: 6160 - hash: "933a158398ee746c0465c2e7af9b6b4d" - } - Frame { - msec: 6176 - hash: "ade4a4aa03f5787dce1331ed27ff9c6e" - } - Frame { - msec: 6192 - hash: "9ecc7d4cb5cf0dd815e208e13e2c932a" - } - Frame { - msec: 6208 - hash: "98e40cba2e717e57a5dcd3413e166f65" - } - Frame { - msec: 6224 - hash: "f68f45b71f6d596eaa76fa2bc46cfe1b" - } - Frame { - msec: 6240 - hash: "9230c9b1013b83b073ccb90d2633043f" - } - Frame { - msec: 6256 - hash: "5d0fc4842b75703d29816fa0330624ba" - } - Frame { - msec: 6272 - hash: "5d0fc4842b75703d29816fa0330624ba" - } - Frame { - msec: 6288 - hash: "5d0fc4842b75703d29816fa0330624ba" - } - Frame { - msec: 6304 - hash: "96008d5b8446f67e07129d02300d122d" - } - Frame { - msec: 6320 - hash: "96008d5b8446f67e07129d02300d122d" - } - Frame { - msec: 6336 - hash: "96008d5b8446f67e07129d02300d122d" - } - Frame { - msec: 6352 - hash: "96008d5b8446f67e07129d02300d122d" - } - Frame { - msec: 6368 - hash: "96008d5b8446f67e07129d02300d122d" - } - Frame { - msec: 6384 - hash: "478be760047d33bd66017bdd304ff3ae" - } - Frame { - msec: 6400 - hash: "478be760047d33bd66017bdd304ff3ae" - } - Frame { - msec: 6416 - hash: "478be760047d33bd66017bdd304ff3ae" - } - Frame { - msec: 6432 - hash: "478be760047d33bd66017bdd304ff3ae" - } - Frame { - msec: 6448 - hash: "478be760047d33bd66017bdd304ff3ae" - } - Frame { - msec: 6464 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6480 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6496 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6512 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6528 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6544 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6560 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6576 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6592 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6608 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6624 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6640 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6656 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6672 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6688 - hash: "8ff11dfe2642dc099c240e8aef8285df" - } - Frame { - msec: 6704 - hash: "01ac8ff953f8f83c6fa2252fe6ff6698" - } - Frame { - msec: 6720 - image: "follow.6.png" - } - Frame { - msec: 6736 - hash: "01ac8ff953f8f83c6fa2252fe6ff6698" - } - Frame { - msec: 6752 - hash: "01ac8ff953f8f83c6fa2252fe6ff6698" - } - Frame { - msec: 6768 - hash: "01ac8ff953f8f83c6fa2252fe6ff6698" - } - Frame { - msec: 6784 - hash: "01ac8ff953f8f83c6fa2252fe6ff6698" - } - Frame { - msec: 6800 - hash: "01ac8ff953f8f83c6fa2252fe6ff6698" - } - Frame { - msec: 6816 - hash: "01ac8ff953f8f83c6fa2252fe6ff6698" - } - Frame { - msec: 6832 - hash: "96008d5b8446f67e07129d02300d122d" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 6848 - hash: "5d0fc4842b75703d29816fa0330624ba" - } - Frame { - msec: 6864 - hash: "5d0fc4842b75703d29816fa0330624ba" - } - Frame { - msec: 6880 - hash: "5d0fc4842b75703d29816fa0330624ba" - } - Frame { - msec: 6896 - hash: "5d0fc4842b75703d29816fa0330624ba" - } - Frame { - msec: 6912 - hash: "5d0fc4842b75703d29816fa0330624ba" - } - Frame { - msec: 6928 - hash: "5d0fc4842b75703d29816fa0330624ba" - } -} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml b/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml deleted file mode 100644 index 0097449..0000000 --- a/tests/auto/declarative/qmlvisual/qdeclarativespringfollow/follow.qml +++ /dev/null @@ -1,79 +0,0 @@ -import QtQuick 1.0 - -Rectangle { - color: "#ffffff" - width: 320; height: 240 - - Rectangle { - id: rect - color: "#00ff00" - y: 200; width: 60; height: 20 - SequentialAnimation on y { - loops: Animation.Infinite - NumberAnimation { - to: 20; duration: 500 - easing.type: "InOutQuad" - } - NumberAnimation { - to: 200; duration: 2000 - easing.type: "OutBounce" - } - PauseAnimation { duration: 1000 } - } - } - - // Velocity - Rectangle { - color: "#ff0000" - x: rect.width; width: rect.width; height: 20 - y: rect.y - Behavior on y { SpringAnimation { velocity: 200 } } - } - - // Spring - Rectangle { - color: "#ff0000" - x: rect.width * 2; width: rect.width/2; height: 20 - y: rect.y - Behavior on y { SpringAnimation { spring: 1.0; damping: 0.2 } } - } - Rectangle { - color: "#880000" - x: rect.width * 2.5; width: rect.width/2; height: 20 - y: rect.y - Behavior on y { SpringAnimation { spring: 1.0; damping: 0.2; mass: 3.0 } } // "heavier" object - } - - // Follow mouse - MouseArea { - id: mouseRegion - anchors.fill: parent - Rectangle { - id: ball - property int targetX: mouseRegion.mouseX - 10 - property int targetY: mouseRegion.mouseY - 10 - - x: targetX - y: targetY - width: 20; height: 20 - radius: 10 - color: "#0000ff" - - Behavior on x { SpringAnimation { spring: 1.0; damping: 0.05; epsilon: 0.25 } } - Behavior on y { SpringAnimation { spring: 1.0; damping: 0.05; epsilon: 0.25 } } - - states: [ - State { - name: "following" - when: ball.x != ball.targetX || ball.y != ball.targetY - PropertyChanges { target: ball; color: "#ff0000" } - } - ] - transitions: [ - Transition { - ColorAnimation { duration: 200 } - } - ] - } - } -} -- cgit v0.12 From 8daae0d2ba5d3aca1d0ab640f30afe8ddc1146f7 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 13:22:15 +1000 Subject: Clean up QML Rect visual tests Mostly just creating the test scripts. Task-number: QTBUG-14792 --- .../qmlvisual/rect/data/GradientRect.0.png | Bin 0 -> 248 bytes .../qmlvisual/rect/data/GradientRect.qml | 11 + .../declarative/qmlvisual/rect/data/MyRect.0.png | Bin 0 -> 135 bytes .../declarative/qmlvisual/rect/data/MyRect.qml | 11 + .../qmlvisual/rect/data/rect-painting.0.png | Bin 29725 -> 25197 bytes .../qmlvisual/rect/data/rect-painting.qml | 276 --------------------- 6 files changed, 22 insertions(+), 276 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/rect/data/GradientRect.0.png create mode 100644 tests/auto/declarative/qmlvisual/rect/data/GradientRect.qml create mode 100644 tests/auto/declarative/qmlvisual/rect/data/MyRect.0.png create mode 100644 tests/auto/declarative/qmlvisual/rect/data/MyRect.qml diff --git a/tests/auto/declarative/qmlvisual/rect/data/GradientRect.0.png b/tests/auto/declarative/qmlvisual/rect/data/GradientRect.0.png new file mode 100644 index 0000000..2ca5d28 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/rect/data/GradientRect.0.png differ diff --git a/tests/auto/declarative/qmlvisual/rect/data/GradientRect.qml b/tests/auto/declarative/qmlvisual/rect/data/GradientRect.qml new file mode 100644 index 0000000..116ab2a --- /dev/null +++ b/tests/auto/declarative/qmlvisual/rect/data/GradientRect.qml @@ -0,0 +1,11 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "GradientRect.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/rect/data/MyRect.0.png b/tests/auto/declarative/qmlvisual/rect/data/MyRect.0.png new file mode 100644 index 0000000..3eb9a8d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/rect/data/MyRect.0.png differ diff --git a/tests/auto/declarative/qmlvisual/rect/data/MyRect.qml b/tests/auto/declarative/qmlvisual/rect/data/MyRect.qml new file mode 100644 index 0000000..72141c8 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/rect/data/MyRect.qml @@ -0,0 +1,11 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "MyRect.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png b/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png index 3b7970d..391e760 100644 Binary files a/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png and b/tests/auto/declarative/qmlvisual/rect/data/rect-painting.0.png differ diff --git a/tests/auto/declarative/qmlvisual/rect/data/rect-painting.qml b/tests/auto/declarative/qmlvisual/rect/data/rect-painting.qml index 7c42d13..9fc073c 100644 --- a/tests/auto/declarative/qmlvisual/rect/data/rect-painting.qml +++ b/tests/auto/declarative/qmlvisual/rect/data/rect-painting.qml @@ -6,282 +6,6 @@ VisualTest { } Frame { msec: 16 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 32 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 48 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 64 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 80 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 96 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 112 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 128 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 144 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 160 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 176 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 192 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 208 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 224 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 240 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 256 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 272 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 288 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 304 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 320 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 336 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 352 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 368 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 384 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 400 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 416 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 432 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 448 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 464 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 480 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 496 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 512 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 528 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 544 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 560 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 576 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 592 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 608 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 624 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 640 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 656 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 672 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 688 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 704 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 720 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 736 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 752 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 768 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 784 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 800 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 816 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 832 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 848 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 864 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 880 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 896 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 912 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 928 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 944 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 960 image: "rect-painting.0.png" } - Frame { - msec: 976 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 992 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 1008 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 1024 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 1040 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 1056 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 1072 - hash: "79998980caccd4eb479fbd9f2a13c860" - } - Frame { - msec: 1088 - hash: "79998980caccd4eb479fbd9f2a13c860" - } } -- cgit v0.12 From 0f09354da8595b39685076f5da79f6820eb6705a Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 13:31:53 +1000 Subject: Clean up repeater visual tests Replace text with coloured rectangles, for more cross platform stability Task-number: QTBUG-14792 --- .../auto/declarative/qmlvisual/repeater/basic1.qml | 24 +- .../auto/declarative/qmlvisual/repeater/basic2.qml | 24 +- .../auto/declarative/qmlvisual/repeater/basic3.qml | 28 +- .../auto/declarative/qmlvisual/repeater/basic4.qml | 28 +- .../qmlvisual/repeater/data-MAC/basic1.0.png | Bin 1550 -> 0 bytes .../qmlvisual/repeater/data-MAC/basic1.qml | 323 ---------------- .../qmlvisual/repeater/data-MAC/basic2.0.png | Bin 1550 -> 0 bytes .../qmlvisual/repeater/data-MAC/basic2.qml | 331 ---------------- .../qmlvisual/repeater/data-MAC/basic3.0.png | Bin 1550 -> 0 bytes .../qmlvisual/repeater/data-MAC/basic3.qml | 347 ----------------- .../qmlvisual/repeater/data-MAC/basic4.0.png | Bin 1550 -> 0 bytes .../qmlvisual/repeater/data-MAC/basic4.qml | 419 --------------------- .../qmlvisual/repeater/data-X11/basic1.0.png | Bin 1354 -> 0 bytes .../qmlvisual/repeater/data-X11/basic1.qml | 323 ---------------- .../qmlvisual/repeater/data-X11/basic2.0.png | Bin 1354 -> 0 bytes .../qmlvisual/repeater/data-X11/basic2.qml | 331 ---------------- .../qmlvisual/repeater/data-X11/basic3.0.png | Bin 1354 -> 0 bytes .../qmlvisual/repeater/data-X11/basic3.qml | 347 ----------------- .../qmlvisual/repeater/data-X11/basic4.0.png | Bin 1354 -> 0 bytes .../qmlvisual/repeater/data-X11/basic4.qml | 419 --------------------- .../qmlvisual/repeater/data/basic1.0.png | Bin 1513 -> 707 bytes .../declarative/qmlvisual/repeater/data/basic1.qml | 312 --------------- .../qmlvisual/repeater/data/basic2.0.png | Bin 1513 -> 707 bytes .../declarative/qmlvisual/repeater/data/basic2.qml | 320 ---------------- .../qmlvisual/repeater/data/basic3.0.png | Bin 1513 -> 707 bytes .../declarative/qmlvisual/repeater/data/basic3.qml | 336 ----------------- .../qmlvisual/repeater/data/basic4.0.png | Bin 1513 -> 707 bytes .../declarative/qmlvisual/repeater/data/basic4.qml | 408 -------------------- 28 files changed, 60 insertions(+), 4260 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.0.png delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.qml delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.0.png delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.qml delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.0.png delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.qml delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.0.png delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.qml delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.0.png delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.qml delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.0.png delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.qml delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.0.png delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.qml delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.0.png delete mode 100644 tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.qml diff --git a/tests/auto/declarative/qmlvisual/repeater/basic1.qml b/tests/auto/declarative/qmlvisual/repeater/basic1.qml index 7f1ba84..5d994b9 100644 --- a/tests/auto/declarative/qmlvisual/repeater/basic1.qml +++ b/tests/auto/declarative/qmlvisual/repeater/basic1.qml @@ -1,25 +1,29 @@ import QtQuick 1.0 Rectangle { - color: "blue" - width: 300 - height: 200 - Row { - Repeater { + color: "white" + width: 120 + height: 240 + id: page + Column{ + Repeater{ delegate: Rectangle { - color: "red" + color: "thistle" width: 100 height: 100 - Text { - text: name + Rectangle { + anchors.centerIn: parent + width: 60 + height: 60 + color: name } } model: ListModel { ListElement { - name: "January" + name: "palegoldenrod" } ListElement { - name: "February" + name: "lightsteelblue" } } } diff --git a/tests/auto/declarative/qmlvisual/repeater/basic2.qml b/tests/auto/declarative/qmlvisual/repeater/basic2.qml index b10420c..ea14e92 100644 --- a/tests/auto/declarative/qmlvisual/repeater/basic2.qml +++ b/tests/auto/declarative/qmlvisual/repeater/basic2.qml @@ -1,29 +1,33 @@ import QtQuick 1.0 Rectangle { - color: "blue" - width: 300 - height: 200 + color: "white" + width: 120 + height: 240 + id: page Component { id: delegate Rectangle { - color: "red" + color: "thistle" width: 100 height: 100 - Text { - text: name + Rectangle { + anchors.centerIn: parent + width: 60 + height: 60 + color: name } } } - Row { - Repeater { + Column{ + Repeater{ delegate: delegate model: ListModel { ListElement { - name: "January" + name: "palegoldenrod" } ListElement { - name: "February" + name: "lightsteelblue" } } } diff --git a/tests/auto/declarative/qmlvisual/repeater/basic3.qml b/tests/auto/declarative/qmlvisual/repeater/basic3.qml index a296801..0193db3 100644 --- a/tests/auto/declarative/qmlvisual/repeater/basic3.qml +++ b/tests/auto/declarative/qmlvisual/repeater/basic3.qml @@ -1,27 +1,31 @@ import QtQuick 1.0 Rectangle { - color: "blue" - width: 300 - height: 200 + color: "white" + width: 120 + height: 240 + id: page ListModel { - id: dataSource + id: model ListElement { - name: "January" + name: "palegoldenrod" } ListElement { - name: "February" + name: "lightsteelblue" } } - Row { - Repeater { - model: dataSource + Column{ + Repeater{ + model: model delegate: Rectangle { - color: "red" + color: "thistle" width: 100 height: 100 - Text { - text: name + Rectangle { + anchors.centerIn: parent + width: 60 + height: 60 + color: name } } } diff --git a/tests/auto/declarative/qmlvisual/repeater/basic4.qml b/tests/auto/declarative/qmlvisual/repeater/basic4.qml index fa85835..c7c0d29 100644 --- a/tests/auto/declarative/qmlvisual/repeater/basic4.qml +++ b/tests/auto/declarative/qmlvisual/repeater/basic4.qml @@ -1,32 +1,36 @@ import QtQuick 1.0 Rectangle { - color: "blue" - width: 300 - height: 200 + color: "white" + width: 120 + height: 240 + id: page ListModel { - id: dataSource + id: model ListElement { - name: "January" + name: "palegoldenrod" } ListElement { - name: "February" + name: "lightsteelblue" } } Component { id: delegate Rectangle { - color: "red" + color: "thistle" width: 100 height: 100 - Text { - text: name + Rectangle { + anchors.centerIn: parent + width: 60 + height: 60 + color: name } } } - Row { - Repeater { - model: dataSource + Column{ + Repeater{ + model: model delegate: delegate } } diff --git a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.0.png b/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.0.png deleted file mode 100644 index 2658b6b..0000000 Binary files a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.qml b/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.qml deleted file mode 100644 index d11a9dd..0000000 --- a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic1.qml +++ /dev/null @@ -1,323 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 32 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 48 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 64 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 80 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 96 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 112 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 128 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 144 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 160 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 176 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 192 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 208 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 224 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 240 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 256 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 272 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 288 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 304 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 320 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 336 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 352 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 368 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 384 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 400 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 416 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 432 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 448 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 464 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 480 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 496 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 512 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 528 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 544 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 560 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 576 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 592 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 608 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 624 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 640 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 656 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 672 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 688 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 704 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 720 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 736 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 752 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 768 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 784 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 800 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 816 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 832 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 848 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 864 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 880 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 896 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 912 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 928 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 944 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 960 - image: "basic1.0.png" - } - Frame { - msec: 976 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 992 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1008 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1024 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1040 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1056 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1072 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1088 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1104 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1120 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1136 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1152 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1168 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1184 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1200 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1216 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1232 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } -} diff --git a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.0.png b/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.0.png deleted file mode 100644 index 2658b6b..0000000 Binary files a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.qml b/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.qml deleted file mode 100644 index 9b36f60..0000000 --- a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic2.qml +++ /dev/null @@ -1,331 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 32 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 48 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 64 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 80 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 96 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 112 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 128 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 144 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 160 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 176 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 192 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 208 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 224 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 240 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 256 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 272 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 288 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 304 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 320 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 336 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 352 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 368 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 384 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 400 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 416 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 432 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 448 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 464 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 480 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 496 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 512 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 528 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 544 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 560 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 576 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 592 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 608 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 624 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 640 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 656 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 672 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 688 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 704 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 720 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 736 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 752 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 768 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 784 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 800 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 816 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 832 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 848 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 864 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 880 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 896 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 912 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 928 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 944 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 960 - image: "basic2.0.png" - } - Frame { - msec: 976 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 992 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1008 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1024 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1040 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1056 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1072 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1088 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1104 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1120 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1136 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1152 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1168 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1184 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1200 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1216 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1232 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1248 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1264 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } -} diff --git a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.0.png b/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.0.png deleted file mode 100644 index 2658b6b..0000000 Binary files a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.qml b/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.qml deleted file mode 100644 index 9752b72..0000000 --- a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic3.qml +++ /dev/null @@ -1,347 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 32 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 48 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 64 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 80 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 96 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 112 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 128 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 144 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 160 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 176 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 192 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 208 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 224 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 240 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 256 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 272 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 288 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 304 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 320 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 336 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 352 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 368 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 384 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 400 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 416 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 432 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 448 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 464 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 480 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 496 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 512 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 528 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 544 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 560 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 576 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 592 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 608 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 624 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 640 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 656 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 672 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 688 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 704 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 720 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 736 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 752 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 768 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 784 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 800 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 816 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 832 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 848 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 864 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 880 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 896 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 912 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 928 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 944 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 960 - image: "basic3.0.png" - } - Frame { - msec: 976 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 992 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1008 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1024 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1040 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1056 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1072 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1088 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1104 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1120 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1136 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1152 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1168 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1184 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1200 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1216 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1232 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1248 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1264 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1280 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1296 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1312 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1328 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } -} diff --git a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.0.png b/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.0.png deleted file mode 100644 index 2658b6b..0000000 Binary files a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.qml b/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.qml deleted file mode 100644 index 8492621..0000000 --- a/tests/auto/declarative/qmlvisual/repeater/data-MAC/basic4.qml +++ /dev/null @@ -1,419 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 32 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 48 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 64 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 80 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 96 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 112 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 128 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 144 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 160 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 176 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 192 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 208 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 224 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 240 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 256 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 272 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 288 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 304 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 320 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 336 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 352 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 368 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 384 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 400 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 416 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 432 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 448 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 464 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 480 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 496 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 512 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 528 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 544 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 560 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 576 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 592 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 608 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 624 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 640 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 656 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 672 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 688 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 704 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 720 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 736 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 752 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 768 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 784 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 800 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 816 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 832 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 848 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 864 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 880 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 896 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 912 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 928 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 944 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 960 - image: "basic4.0.png" - } - Frame { - msec: 976 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 992 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1008 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1024 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1040 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1056 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1072 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1088 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1104 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1120 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1136 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1152 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1168 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1184 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1200 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1216 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1232 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1248 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1264 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1280 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1296 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1312 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1328 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1344 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1360 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1376 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1392 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1408 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1424 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1440 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1456 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1472 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1488 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1504 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1520 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1536 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1552 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1568 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1584 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1600 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } - Frame { - msec: 1616 - hash: "2ab8ff9a9fb09111ac07d3966aac9d94" - } -} diff --git a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.0.png b/tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.0.png deleted file mode 100644 index 18ab543..0000000 Binary files a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.qml b/tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.qml deleted file mode 100644 index f9880f8..0000000 --- a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic1.qml +++ /dev/null @@ -1,323 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 32 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 48 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 64 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 80 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 96 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 112 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 128 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 144 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 160 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 176 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 192 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 208 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 224 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 240 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 256 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 272 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 288 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 304 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 320 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 336 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 352 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 368 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 384 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 400 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 416 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 432 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 448 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 464 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 480 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 496 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 512 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 528 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 544 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 560 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 576 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 592 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 608 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 624 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 640 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 656 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 672 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 688 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 704 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 720 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 736 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 752 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 768 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 784 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 800 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 816 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 832 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 848 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 864 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 880 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 896 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 912 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 928 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 944 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 960 - image: "basic1.0.png" - } - Frame { - msec: 976 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 992 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1008 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1024 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1040 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1056 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1072 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1088 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1104 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1120 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1136 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1152 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1168 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1184 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1200 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1216 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1232 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } -} diff --git a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.0.png b/tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.0.png deleted file mode 100644 index 18ab543..0000000 Binary files a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.qml b/tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.qml deleted file mode 100644 index cc980e1..0000000 --- a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic2.qml +++ /dev/null @@ -1,331 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 32 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 48 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 64 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 80 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 96 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 112 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 128 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 144 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 160 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 176 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 192 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 208 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 224 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 240 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 256 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 272 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 288 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 304 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 320 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 336 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 352 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 368 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 384 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 400 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 416 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 432 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 448 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 464 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 480 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 496 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 512 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 528 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 544 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 560 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 576 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 592 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 608 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 624 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 640 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 656 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 672 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 688 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 704 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 720 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 736 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 752 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 768 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 784 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 800 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 816 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 832 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 848 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 864 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 880 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 896 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 912 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 928 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 944 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 960 - image: "basic2.0.png" - } - Frame { - msec: 976 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 992 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1008 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1024 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1040 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1056 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1072 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1088 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1104 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1120 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1136 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1152 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1168 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1184 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1200 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1216 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1232 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1248 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1264 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } -} diff --git a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.0.png b/tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.0.png deleted file mode 100644 index 18ab543..0000000 Binary files a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.qml b/tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.qml deleted file mode 100644 index e395dde..0000000 --- a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic3.qml +++ /dev/null @@ -1,347 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 32 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 48 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 64 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 80 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 96 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 112 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 128 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 144 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 160 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 176 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 192 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 208 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 224 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 240 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 256 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 272 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 288 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 304 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 320 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 336 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 352 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 368 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 384 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 400 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 416 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 432 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 448 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 464 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 480 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 496 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 512 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 528 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 544 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 560 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 576 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 592 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 608 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 624 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 640 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 656 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 672 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 688 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 704 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 720 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 736 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 752 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 768 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 784 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 800 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 816 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 832 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 848 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 864 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 880 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 896 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 912 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 928 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 944 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 960 - image: "basic3.0.png" - } - Frame { - msec: 976 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 992 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1008 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1024 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1040 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1056 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1072 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1088 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1104 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1120 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1136 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1152 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1168 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1184 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1200 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1216 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1232 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1248 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1264 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1280 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1296 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1312 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1328 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } -} diff --git a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.0.png b/tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.0.png deleted file mode 100644 index 18ab543..0000000 Binary files a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.0.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.qml b/tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.qml deleted file mode 100644 index b0dc6b8..0000000 --- a/tests/auto/declarative/qmlvisual/repeater/data-X11/basic4.qml +++ /dev/null @@ -1,419 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 32 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 48 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 64 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 80 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 96 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 112 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 128 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 144 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 160 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 176 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 192 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 208 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 224 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 240 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 256 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 272 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 288 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 304 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 320 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 336 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 352 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 368 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 384 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 400 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 416 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 432 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 448 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 464 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 480 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 496 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 512 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 528 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 544 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 560 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 576 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 592 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 608 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 624 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 640 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 656 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 672 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 688 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 704 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 720 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 736 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 752 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 768 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 784 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 800 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 816 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 832 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 848 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 864 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 880 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 896 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 912 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 928 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 944 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 960 - image: "basic4.0.png" - } - Frame { - msec: 976 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 992 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1008 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1024 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1040 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1056 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1072 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1088 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1104 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1120 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1136 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1152 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1168 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1184 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1200 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1216 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1232 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1248 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1264 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1280 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1296 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1312 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1328 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1344 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1360 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1376 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1392 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1408 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Key { - type: 6 - key: 16777249 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1424 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1440 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1456 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1472 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1488 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1504 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1520 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1536 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1552 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1568 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1584 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1600 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } - Frame { - msec: 1616 - hash: "71dedc2f057c660fa5089de2dd6313a4" - } -} diff --git a/tests/auto/declarative/qmlvisual/repeater/data/basic1.0.png b/tests/auto/declarative/qmlvisual/repeater/data/basic1.0.png index aea0e98..3e8043a 100644 Binary files a/tests/auto/declarative/qmlvisual/repeater/data/basic1.0.png and b/tests/auto/declarative/qmlvisual/repeater/data/basic1.0.png differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data/basic1.qml b/tests/auto/declarative/qmlvisual/repeater/data/basic1.qml index f0950d7..aad4858 100644 --- a/tests/auto/declarative/qmlvisual/repeater/data/basic1.qml +++ b/tests/auto/declarative/qmlvisual/repeater/data/basic1.qml @@ -6,318 +6,6 @@ VisualTest { } Frame { msec: 16 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 32 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 48 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 64 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 80 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 96 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 112 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 128 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 144 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 160 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 176 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 192 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 208 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 224 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 240 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 256 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 272 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 288 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 304 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 320 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 336 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 352 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 368 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 384 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 400 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 416 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 432 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 448 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 464 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 480 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 496 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 512 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 528 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 544 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 560 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 576 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 592 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 608 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 624 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 640 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 656 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 672 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 688 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 704 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 720 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 736 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 752 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 768 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 784 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 800 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 816 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 832 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 848 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 864 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 880 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 896 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 912 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 928 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 944 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 960 image: "basic1.0.png" } - Frame { - msec: 976 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 992 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1008 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1024 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1040 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1056 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1072 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1088 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1104 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1120 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1136 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1152 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1168 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1184 - hash: "539de20cf149353d2677111ea3de5681" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1200 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1216 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1232 - hash: "539de20cf149353d2677111ea3de5681" - } } diff --git a/tests/auto/declarative/qmlvisual/repeater/data/basic2.0.png b/tests/auto/declarative/qmlvisual/repeater/data/basic2.0.png index aea0e98..3e8043a 100644 Binary files a/tests/auto/declarative/qmlvisual/repeater/data/basic2.0.png and b/tests/auto/declarative/qmlvisual/repeater/data/basic2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data/basic2.qml b/tests/auto/declarative/qmlvisual/repeater/data/basic2.qml index fcf3fee..373ad27 100644 --- a/tests/auto/declarative/qmlvisual/repeater/data/basic2.qml +++ b/tests/auto/declarative/qmlvisual/repeater/data/basic2.qml @@ -6,326 +6,6 @@ VisualTest { } Frame { msec: 16 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 32 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 48 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 64 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 80 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 96 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 112 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 128 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 144 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 160 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 176 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 192 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 208 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 224 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 240 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 256 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 272 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 288 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 304 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 320 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 336 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 352 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 368 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 384 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 400 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 416 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 432 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 448 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 464 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 480 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 496 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 512 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 528 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 544 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 560 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 576 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 592 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 608 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 624 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 640 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 656 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 672 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 688 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 704 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 720 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 736 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 752 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 768 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 784 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 800 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 816 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 832 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 848 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 864 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 880 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 896 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 912 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 928 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 944 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 960 image: "basic2.0.png" } - Frame { - msec: 976 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 992 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1008 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1024 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1040 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1056 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1072 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1088 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1104 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1120 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1136 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1152 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1168 - hash: "539de20cf149353d2677111ea3de5681" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1184 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1200 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1216 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1232 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1248 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1264 - hash: "539de20cf149353d2677111ea3de5681" - } } diff --git a/tests/auto/declarative/qmlvisual/repeater/data/basic3.0.png b/tests/auto/declarative/qmlvisual/repeater/data/basic3.0.png index aea0e98..3e8043a 100644 Binary files a/tests/auto/declarative/qmlvisual/repeater/data/basic3.0.png and b/tests/auto/declarative/qmlvisual/repeater/data/basic3.0.png differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data/basic3.qml b/tests/auto/declarative/qmlvisual/repeater/data/basic3.qml index 8447aca..f5dbf65 100644 --- a/tests/auto/declarative/qmlvisual/repeater/data/basic3.qml +++ b/tests/auto/declarative/qmlvisual/repeater/data/basic3.qml @@ -6,342 +6,6 @@ VisualTest { } Frame { msec: 16 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 32 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 48 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 64 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 80 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 96 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 112 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 128 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 144 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 160 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 176 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 192 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 208 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 224 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 240 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 256 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 272 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 288 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 304 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 320 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 336 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 352 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 368 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 384 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 400 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 416 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 432 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 448 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 464 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 480 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 496 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 512 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 528 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 544 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 560 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 576 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 592 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 608 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 624 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 640 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 656 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 672 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 688 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 704 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 720 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 736 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 752 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 768 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 784 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 800 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 816 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 832 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 848 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 864 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 880 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 896 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 912 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 928 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 944 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 960 image: "basic3.0.png" } - Frame { - msec: 976 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 992 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1008 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1024 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1040 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1056 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1072 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1088 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1104 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1120 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1136 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1152 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1168 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1184 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1200 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1216 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1232 - hash: "539de20cf149353d2677111ea3de5681" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1248 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1264 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1280 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1296 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1312 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1328 - hash: "539de20cf149353d2677111ea3de5681" - } } diff --git a/tests/auto/declarative/qmlvisual/repeater/data/basic4.0.png b/tests/auto/declarative/qmlvisual/repeater/data/basic4.0.png index aea0e98..3e8043a 100644 Binary files a/tests/auto/declarative/qmlvisual/repeater/data/basic4.0.png and b/tests/auto/declarative/qmlvisual/repeater/data/basic4.0.png differ diff --git a/tests/auto/declarative/qmlvisual/repeater/data/basic4.qml b/tests/auto/declarative/qmlvisual/repeater/data/basic4.qml index eeb60fa..5e494d1 100644 --- a/tests/auto/declarative/qmlvisual/repeater/data/basic4.qml +++ b/tests/auto/declarative/qmlvisual/repeater/data/basic4.qml @@ -6,414 +6,6 @@ VisualTest { } Frame { msec: 16 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 32 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 48 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 64 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 80 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 96 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 112 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 128 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 144 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 160 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 176 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 192 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 208 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 224 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 240 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 256 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 272 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 288 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 304 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 320 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 336 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 352 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 368 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 384 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 400 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 416 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 432 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 448 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 464 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 480 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 496 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 512 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 528 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 544 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 560 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 576 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 592 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 608 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 624 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 640 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 656 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 672 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 688 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 704 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 720 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 736 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 752 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 768 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 784 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 800 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 816 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 832 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 848 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 864 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 880 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 896 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 912 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 928 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 944 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 960 image: "basic4.0.png" } - Frame { - msec: 976 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 992 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1008 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1024 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1040 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1056 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1072 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1088 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1104 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1120 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1136 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1152 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1168 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1184 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1200 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1216 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1232 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1248 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1264 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1280 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1296 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1312 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1328 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1344 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1360 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1376 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1392 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1408 - hash: "539de20cf149353d2677111ea3de5681" - } - Key { - type: 6 - key: 16777249 - modifiers: 67108864 - text: "" - autorep: false - count: 1 - } - Frame { - msec: 1424 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1440 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1456 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1472 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1488 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1504 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1520 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1536 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1552 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1568 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1584 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1600 - hash: "539de20cf149353d2677111ea3de5681" - } - Frame { - msec: 1616 - hash: "539de20cf149353d2677111ea3de5681" - } } -- cgit v0.12 From 8ba02a8f5a537b9f7e1ff671abe6eed67029db58 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 13:41:51 +1000 Subject: Disable WebView visualtests Until this element is maintained, all tests are entering expectFail state. Task-number: QTBUG-14792 --- .../qmlvisual/webview/autosize/data/autosize.qml | 115 - .../webview/javascript/data/evaluateJavaScript.qml | 3759 -------------------- .../webview/javascript/data/windowObjects.qml | 2643 -------------- .../qmlvisual/webview/settings/data/fontFamily.qml | 395 -- .../qmlvisual/webview/settings/data/fontSize.qml | 339 -- .../webview/settings/data/noAutoLoadImages.qml | 595 ---- .../webview/settings/data/setFontFamily.qml | 351 -- .../qmlvisual/webview/zooming/data/pageWidth.qml | 227 -- .../webview/zooming/data/renderControl.qml | 415 --- .../qmlvisual/webview/zooming/data/resolution.qml | 1319 ------- .../webview/zooming/data/zoomTextOnly.qml | 655 ---- .../qmlvisual/webview/zooming/data/zooming.qml | 2115 ----------- 12 files changed, 12928 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/webview/autosize/data/autosize.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml diff --git a/tests/auto/declarative/qmlvisual/webview/autosize/data/autosize.qml b/tests/auto/declarative/qmlvisual/webview/autosize/data/autosize.qml deleted file mode 100644 index 6122138..0000000 --- a/tests/auto/declarative/qmlvisual/webview/autosize/data/autosize.qml +++ /dev/null @@ -1,115 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "b2d863e57dee2a297d038e18acc70f92" - } - Frame { - msec: 32 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 48 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 64 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 80 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 96 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 112 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 128 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 144 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 160 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 176 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 192 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 208 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 224 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 240 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 256 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 272 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 288 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 304 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 320 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 336 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 352 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 368 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 384 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 400 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 416 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 432 - hash: "903a4c7e619abba5342c8c827f26a722" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml b/tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml deleted file mode 100644 index bfe40da..0000000 --- a/tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml +++ /dev/null @@ -1,3759 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 32 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 48 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 64 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 80 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 96 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 112 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 128 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 144 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 160 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 176 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 192 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 208 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 224 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 240 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 256 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 272 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 288 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 304 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 320 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 336 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 352 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 368 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 384 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 400 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 416 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 195; y: 25 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 187; y: 35 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 432 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 153; y: 77 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 448 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 145; y: 87 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 139; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 464 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 135; y: 111 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 129; y: 121 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 480 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 125; y: 131 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 121; y: 139 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 117; y: 149 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 496 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 111; y: 157 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 512 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 107; y: 165 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 101; y: 171 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 528 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 97; y: 177 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 95; y: 185 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 544 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 189 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 89; y: 195 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 560 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 85; y: 199 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 84; y: 201 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 576 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 83; y: 203 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 82; y: 204 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 81; y: 204 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 592 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 80; y: 204 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 608 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 79; y: 205 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 78; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 624 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 77; y: 207 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 76; y: 208 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 75; y: 210 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 640 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 71; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 656 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 70; y: 218 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 70; y: 220 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 672 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 69; y: 222 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 68; y: 224 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 688 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 67; y: 225 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 704 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 720 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 736 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 752 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 768 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 784 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 67; y: 225 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 800 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 66; y: 224 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 816 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 66; y: 222 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 832 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 65; y: 221 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 61; y: 217 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 848 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 60; y: 215 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 864 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 59; y: 214 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 57; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 880 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 55; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 896 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 912 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 928 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 944 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 960 - image: "evaluateJavaScript.0.png" - } - Frame { - msec: 976 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 992 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1008 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 55; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1024 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1040 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1056 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1072 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1088 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 55; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1104 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1120 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1136 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1152 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1168 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1184 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1200 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1216 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1232 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1248 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1264 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1280 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1296 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 57; y: 212 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 63; y: 210 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1312 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 65; y: 210 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 67; y: 209 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1328 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 69; y: 208 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 71; y: 207 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1344 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 73; y: 207 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 74; y: 206 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 75; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1360 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1376 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1392 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1408 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1424 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1440 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1456 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1472 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1488 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1504 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1520 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1536 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1552 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1568 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1584 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1600 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1616 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1632 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1648 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1664 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1680 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Frame { - msec: 1696 - hash: "f35c69aed43a795ff02b46d7b01ef64a" - } - Key { - type: 6 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 1712 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1728 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1744 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1760 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1776 - hash: "244200622435603a75f58366496daf8b" - } - Key { - type: 7 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 1792 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1808 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1824 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1840 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1856 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1872 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1888 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1904 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1920 - image: "evaluateJavaScript.1.png" - } - Frame { - msec: 1936 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1952 - hash: "244200622435603a75f58366496daf8b" - } - Frame { - msec: 1968 - hash: "244200622435603a75f58366496daf8b" - } - Key { - type: 6 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 1984 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2000 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2016 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2032 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2048 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Key { - type: 7 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 2064 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2080 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2096 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2112 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2128 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2144 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2160 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2176 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Frame { - msec: 2192 - hash: "44dc10a2914a391b57e68c2002a95adf" - } - Key { - type: 6 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 2208 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2224 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2240 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2256 - hash: "c93921d0611e95373338c14cfcc17481" - } - Key { - type: 7 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 2272 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2288 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2304 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2320 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2336 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2352 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2368 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2384 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2400 - hash: "c93921d0611e95373338c14cfcc17481" - } - Frame { - msec: 2416 - hash: "c93921d0611e95373338c14cfcc17481" - } - Key { - type: 6 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 2432 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2448 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2464 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2480 - hash: "9266775c7f2156977ff56fcd45246229" - } - Key { - type: 7 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 2496 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2512 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2528 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2544 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2560 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2576 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2592 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2608 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2624 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2640 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2656 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2672 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2688 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2704 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2720 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2736 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2752 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2768 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2784 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2800 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2816 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2832 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2848 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2864 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2880 - image: "evaluateJavaScript.2.png" - } - Frame { - msec: 2896 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2912 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2928 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2944 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2960 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2976 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 2992 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3008 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3024 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3040 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3056 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3072 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3088 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3104 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3120 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3136 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3152 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3168 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3184 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3200 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3216 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3232 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3248 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3264 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3280 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3296 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3312 - hash: "9266775c7f2156977ff56fcd45246229" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 74; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3328 - hash: "9266775c7f2156977ff56fcd45246229" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 72; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3344 - hash: "9266775c7f2156977ff56fcd45246229" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 70; y: 206 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 68; y: 206 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 65; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3360 - hash: "9266775c7f2156977ff56fcd45246229" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 63; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3376 - hash: "9266775c7f2156977ff56fcd45246229" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 61; y: 206 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 59; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3392 - hash: "9266775c7f2156977ff56fcd45246229" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 57; y: 206 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 55; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3408 - hash: "9266775c7f2156977ff56fcd45246229" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 54; y: 206 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 53; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3424 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3440 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3456 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3472 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3488 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3504 - hash: "9266775c7f2156977ff56fcd45246229" - } - Frame { - msec: 3520 - hash: "9266775c7f2156977ff56fcd45246229" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 52; y: 206 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 52; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3536 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3552 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3568 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3584 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3600 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3616 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3632 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3648 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 52; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3664 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3680 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3696 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3712 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3728 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3744 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3760 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3776 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3792 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3808 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3824 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3840 - image: "evaluateJavaScript.3.png" - } - Frame { - msec: 3856 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3872 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3888 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3904 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3920 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3936 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3952 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3968 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Frame { - msec: 3984 - hash: "b62d9027299daa6ab8304d812ed00f83" - } - Key { - type: 6 - key: 65 - modifiers: 0 - text: "61" - autorep: false - count: 1 - } - Frame { - msec: 4000 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4016 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4032 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4048 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4064 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4080 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4096 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4112 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Key { - type: 7 - key: 65 - modifiers: 0 - text: "61" - autorep: false - count: 1 - } - Frame { - msec: 4128 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4144 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4160 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4176 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4192 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4208 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4224 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4240 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4256 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4272 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4288 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4304 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4320 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4336 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4352 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4368 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4384 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4400 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4416 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4432 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4448 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4464 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4480 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4496 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4512 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4528 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4544 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4560 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4576 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4592 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4608 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4624 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4640 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4656 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4672 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4688 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4704 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4720 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4736 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4752 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4768 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Frame { - msec: 4784 - hash: "6cea5b700e402072a9953c81b605ef22" - } - Key { - type: 6 - key: 65 - modifiers: 0 - text: "61" - autorep: false - count: 1 - } - Frame { - msec: 4800 - image: "evaluateJavaScript.4.png" - } - Frame { - msec: 4816 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4832 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4848 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4864 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4880 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4896 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4912 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4928 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Key { - type: 7 - key: 65 - modifiers: 0 - text: "61" - autorep: false - count: 1 - } - Frame { - msec: 4944 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4960 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4976 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 4992 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5008 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5024 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5040 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5056 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5072 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5088 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5104 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5120 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5136 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5152 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5168 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5184 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5200 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5216 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5232 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5248 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5264 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5280 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5296 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5312 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5328 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5344 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5360 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5376 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5392 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5408 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5424 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5440 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5456 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5472 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5488 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5504 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5520 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5536 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5552 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5568 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5584 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5600 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5616 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5632 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5648 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5664 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5680 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5696 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5712 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5728 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5744 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5760 - image: "evaluateJavaScript.5.png" - } - Frame { - msec: 5776 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5792 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5808 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 5824 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 54; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5840 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 56; y: 206 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 204 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 65; y: 204 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5856 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 71; y: 202 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 79; y: 200 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5872 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 82; y: 200 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 90; y: 196 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5888 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 192 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 102; y: 188 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5904 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 108; y: 182 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 112; y: 176 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5920 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 116; y: 168 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 120; y: 158 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5936 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 124; y: 148 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 128; y: 136 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5952 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 130; y: 124 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 134; y: 112 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5968 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 138; y: 100 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 142; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5984 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 144; y: 78 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6000 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 150; y: 68 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 154; y: 62 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 158; y: 56 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6016 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 162; y: 48 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6032 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 166; y: 44 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 168; y: 38 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 172; y: 32 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6048 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 174; y: 26 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 176; y: 20 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6064 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 177; y: 18 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6080 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 178; y: 16 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 178; y: 14 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6096 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 178; y: 12 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6112 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 178; y: 11 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6128 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 178; y: 10 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6144 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 179; y: 9 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6160 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 180; y: 7 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6176 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 181; y: 5 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 181; y: 4 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6192 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 182; y: 2 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 183; y: 1 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6208 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6224 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6240 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6256 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6272 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6288 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6304 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6320 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6336 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6352 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6368 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6384 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6400 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6416 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6432 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6448 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6464 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6480 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6496 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6512 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6528 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6544 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6560 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6576 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6592 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6608 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6624 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6640 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6656 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6672 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6688 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6704 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6720 - image: "evaluateJavaScript.6.png" - } - Frame { - msec: 6736 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6752 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6768 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6784 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6800 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6816 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6832 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6848 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6864 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 176; y: 1 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 174; y: 15 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 172; y: 31 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6880 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 166; y: 47 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 162; y: 63 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6896 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 156; y: 81 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 150; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6912 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 144; y: 107 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 138; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6928 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 132; y: 127 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 126; y: 133 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6944 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 122; y: 137 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 120; y: 138 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6960 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 120; y: 139 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6976 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 6992 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7008 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7024 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7040 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7056 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7072 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 119; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7088 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7104 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7120 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 117; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7136 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 116; y: 139 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 115; y: 141 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7152 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 113; y: 149 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 109; y: 155 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7168 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 107; y: 165 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 103; y: 171 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7184 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 99; y: 179 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 98; y: 181 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7200 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 187 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 95; y: 189 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7216 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 95; y: 190 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7232 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7248 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7264 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7280 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 188 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7296 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 187 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 186 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7312 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 185 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 97; y: 184 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7328 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 97; y: 183 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 97; y: 182 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7344 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 98; y: 180 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7360 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 98; y: 178 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7376 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 99; y: 177 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 99; y: 176 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 99; y: 174 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7392 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7408 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 100; y: 172 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 100; y: 171 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7424 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 100; y: 170 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7440 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 100; y: 169 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7456 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 101; y: 167 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7472 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7488 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7504 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 101; y: 167 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7520 - hash: "04e2e16813a9cafc37077a675e279f5f" - } - Frame { - msec: 7536 - hash: "04e2e16813a9cafc37077a675e279f5f" - } - Frame { - msec: 7552 - hash: "04e2e16813a9cafc37077a675e279f5f" - } - Frame { - msec: 7568 - hash: "04e2e16813a9cafc37077a675e279f5f" - } - Frame { - msec: 7584 - hash: "04e2e16813a9cafc37077a675e279f5f" - } - Frame { - msec: 7600 - hash: "04e2e16813a9cafc37077a675e279f5f" - } - Frame { - msec: 7616 - hash: "04e2e16813a9cafc37077a675e279f5f" - } - Frame { - msec: 7632 - hash: "04e2e16813a9cafc37077a675e279f5f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 166 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 101; y: 166 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7648 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7664 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7680 - image: "evaluateJavaScript.7.png" - } - Frame { - msec: 7696 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7712 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7728 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7744 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7760 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7776 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7792 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7808 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7824 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 103; y: 166 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7840 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 7856 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 166 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7872 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 106; y: 165 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 107; y: 164 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7888 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 108; y: 164 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 109; y: 163 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7904 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 111; y: 163 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 112; y: 162 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7920 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 116; y: 158 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7936 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 118; y: 157 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 122; y: 153 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7952 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 128; y: 147 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 134; y: 139 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7968 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 140; y: 133 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 146; y: 125 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 150; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7984 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 156; y: 109 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 160; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8000 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 164; y: 89 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 166; y: 77 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8016 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 170; y: 67 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 172; y: 55 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8032 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 176; y: 45 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8048 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 178; y: 35 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 178; y: 27 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 180; y: 19 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8064 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 180; y: 11 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 182; y: 5 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8080 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8096 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8112 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8128 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8144 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8160 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8176 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8192 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8208 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8224 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8240 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8256 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8272 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8288 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8304 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8320 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8336 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8352 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8368 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8384 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8400 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8416 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8432 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8448 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8464 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8480 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8496 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8512 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8528 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8544 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8560 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8576 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8592 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8608 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8624 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8640 - image: "evaluateJavaScript.8.png" - } - Frame { - msec: 8656 - hash: "792140067e09d04b31e78be1fc9a40a2" - } - Frame { - msec: 8672 - hash: "792140067e09d04b31e78be1fc9a40a2" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml b/tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml deleted file mode 100644 index 07aa13d..0000000 --- a/tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml +++ /dev/null @@ -1,2643 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 32 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 48 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 64 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 80 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 96 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 112 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 128 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 144 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 160 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 176 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 192 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 208 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 224 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 240 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 256 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 272 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 288 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 304 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 320 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 336 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 352 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 368 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 384 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 400 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 416 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 432 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 448 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 464 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 480 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 496 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 512 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 528 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 544 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 560 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 576 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 592 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 608 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 624 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 640 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 656 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 672 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 688 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 704 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 720 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 736 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 752 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 768 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 784 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 800 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 816 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 832 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 848 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 864 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 880 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 896 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 912 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 928 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 944 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 960 - image: "windowObjects.0.png" - } - Frame { - msec: 976 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 992 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1008 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1024 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1040 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 155; y: 9 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 145; y: 23 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1056 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 137; y: 37 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 127; y: 53 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1072 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 119; y: 67 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 111; y: 77 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1088 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 103; y: 87 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1104 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 97; y: 93 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 101 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 87; y: 109 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1120 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 83; y: 117 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 81; y: 125 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1136 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 81; y: 133 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 79; y: 139 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1152 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 79; y: 142 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 79; y: 145 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1168 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 78; y: 146 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 78; y: 147 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1184 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1200 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1216 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1232 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1248 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 82; y: 143 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1264 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1280 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 83; y: 142 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 83; y: 141 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 84; y: 139 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1296 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 85; y: 138 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1312 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1328 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1344 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 86; y: 137 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 87; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1360 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 88; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1376 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 89; y: 138 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 89; y: 139 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1392 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 90; y: 141 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 90; y: 142 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1408 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 144 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1424 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 146 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 148 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 149 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1440 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 151 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 153 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1456 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 90; y: 154 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 90; y: 155 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1472 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 89; y: 156 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1488 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1504 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1520 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1536 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1552 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1568 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1584 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1600 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1616 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1632 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1648 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1664 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1680 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1696 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1712 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1728 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1744 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1760 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1776 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1792 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1808 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1824 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1840 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1856 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1872 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1888 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1904 - hash: "b1a19797afefa71e30f4594064aa4951" - } - Frame { - msec: 1920 - image: "windowObjects.1.png" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 89; y: 156 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1936 - hash: "fca76207a4fa6f2c4bb01d28aa018f0c" - } - Frame { - msec: 1952 - hash: "fca76207a4fa6f2c4bb01d28aa018f0c" - } - Frame { - msec: 1968 - hash: "fca76207a4fa6f2c4bb01d28aa018f0c" - } - Frame { - msec: 1984 - hash: "fca76207a4fa6f2c4bb01d28aa018f0c" - } - Frame { - msec: 2000 - hash: "fca76207a4fa6f2c4bb01d28aa018f0c" - } - Frame { - msec: 2016 - hash: "fca76207a4fa6f2c4bb01d28aa018f0c" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 89; y: 156 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2032 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2048 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2064 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2080 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2096 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2112 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2128 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2144 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2160 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2176 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2192 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2208 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2224 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2240 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2256 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2272 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2288 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 89; y: 157 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 88; y: 158 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 87; y: 160 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2304 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 87; y: 161 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 83; y: 167 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2320 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 82; y: 169 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 80; y: 175 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2336 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 78; y: 183 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 74; y: 189 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2352 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 72; y: 195 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 68; y: 201 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2368 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 64; y: 207 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2384 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 61; y: 215 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 59; y: 221 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2400 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 58; y: 222 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 57; y: 224 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2416 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2432 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2448 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2464 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2480 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2496 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2512 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2528 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2544 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2560 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2576 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2592 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2608 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2624 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2640 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2656 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2672 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2688 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2704 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2720 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2736 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 49; y: 225 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 50; y: 224 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2752 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 50; y: 223 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2768 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 51; y: 222 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2784 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 51; y: 221 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 52; y: 220 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2800 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 52; y: 218 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2816 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 53; y: 217 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2832 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2848 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2864 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 54; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2880 - image: "windowObjects.2.png" - } - Frame { - msec: 2896 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 55; y: 215 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2912 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2928 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 56; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2944 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2960 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 2976 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 57; y: 214 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 57; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2992 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3008 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3024 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3040 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3056 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3072 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3088 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3104 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 57; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3120 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3136 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3152 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3168 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3184 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3200 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3216 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Frame { - msec: 3232 - hash: "6927f81ca01ef75d204994aa82c60c4d" - } - Key { - type: 6 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 3248 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Frame { - msec: 3264 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Frame { - msec: 3280 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Frame { - msec: 3296 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Key { - type: 7 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 3312 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Frame { - msec: 3328 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Frame { - msec: 3344 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Frame { - msec: 3360 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 57; y: 212 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3376 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Frame { - msec: 3392 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Frame { - msec: 3408 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 57; y: 211 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3424 - hash: "2165224e8f66a797ae5c991462fb56d8" - } - Key { - type: 6 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 3440 - hash: "c6ac7e0be8b7b2a80966344389def97a" - } - Frame { - msec: 3456 - hash: "c6ac7e0be8b7b2a80966344389def97a" - } - Frame { - msec: 3472 - hash: "c6ac7e0be8b7b2a80966344389def97a" - } - Frame { - msec: 3488 - hash: "40f333072bb9f1d334d5ae432d9641b9" - } - Frame { - msec: 3504 - hash: "40f333072bb9f1d334d5ae432d9641b9" - } - Key { - type: 7 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 3520 - hash: "40f333072bb9f1d334d5ae432d9641b9" - } - Frame { - msec: 3536 - hash: "40f333072bb9f1d334d5ae432d9641b9" - } - Frame { - msec: 3552 - hash: "40f333072bb9f1d334d5ae432d9641b9" - } - Frame { - msec: 3568 - hash: "40f333072bb9f1d334d5ae432d9641b9" - } - Frame { - msec: 3584 - hash: "40f333072bb9f1d334d5ae432d9641b9" - } - Frame { - msec: 3600 - hash: "40f333072bb9f1d334d5ae432d9641b9" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 58; y: 210 - modifiers: 0 - sendToViewport: true - } - Key { - type: 6 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 3616 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 60; y: 209 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 61; y: 207 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3632 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 205 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3648 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 204 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 63; y: 203 - modifiers: 0 - sendToViewport: true - } - Key { - type: 7 - key: 83 - modifiers: 0 - text: "73" - autorep: false - count: 1 - } - Frame { - msec: 3664 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 63; y: 202 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 64; y: 200 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3680 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Frame { - msec: 3696 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 65; y: 198 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 66; y: 197 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 67; y: 195 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3712 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 68; y: 194 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 69; y: 192 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3728 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 70; y: 190 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 70; y: 188 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3744 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 70; y: 186 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 70; y: 185 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3760 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 71; y: 183 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 71; y: 181 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3776 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 72; y: 179 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 73; y: 178 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3792 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 73; y: 176 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 73; y: 175 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3808 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 74; y: 174 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 74; y: 173 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3824 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 74; y: 172 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3840 - image: "windowObjects.3.png" - } - Frame { - msec: 3856 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Frame { - msec: 3872 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Frame { - msec: 3888 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Frame { - msec: 3904 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Frame { - msec: 3920 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 75; y: 171 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 76; y: 171 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3936 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Frame { - msec: 3952 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Frame { - msec: 3968 - hash: "96f727ef0dacfda9ea77fb5651493030" - } - Frame { - msec: 3984 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Frame { - msec: 4000 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Frame { - msec: 4016 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Frame { - msec: 4032 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 76; y: 170 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4048 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 77; y: 169 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 78; y: 168 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4064 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 79; y: 168 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4080 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 81; y: 167 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 81; y: 166 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4096 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 82; y: 165 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4112 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 83; y: 164 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4128 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Frame { - msec: 4144 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Frame { - msec: 4160 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Frame { - msec: 4176 - hash: "ed7b3d93d690df73be5cbee8c41a1931" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 83; y: 164 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4192 - hash: "5b3505be865f704640e81cea092d35ba" - } - Frame { - msec: 4208 - hash: "5b3505be865f704640e81cea092d35ba" - } - Frame { - msec: 4224 - hash: "5b3505be865f704640e81cea092d35ba" - } - Frame { - msec: 4240 - hash: "5b3505be865f704640e81cea092d35ba" - } - Frame { - msec: 4256 - hash: "5b3505be865f704640e81cea092d35ba" - } - Frame { - msec: 4272 - hash: "5b3505be865f704640e81cea092d35ba" - } - Frame { - msec: 4288 - hash: "5b3505be865f704640e81cea092d35ba" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 83; y: 164 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4304 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4320 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4336 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4352 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4368 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4384 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4400 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4416 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4432 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4448 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4464 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 85; y: 158 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 85; y: 156 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4480 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 86; y: 154 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 86; y: 152 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4496 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 87; y: 150 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 89; y: 144 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4512 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 93; y: 138 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 99; y: 134 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4528 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 101; y: 128 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 122 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4544 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 109; y: 114 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 113; y: 108 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4560 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 114; y: 106 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 114; y: 105 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4576 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 115; y: 104 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 115; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4592 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 115; y: 100 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 116; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4608 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 120; y: 92 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 122; y: 86 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4624 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 126; y: 76 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 130; y: 66 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4640 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 132; y: 56 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 134; y: 46 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4656 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 136; y: 38 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 138; y: 30 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4672 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 140; y: 22 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 141; y: 20 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4688 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 143; y: 14 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 144; y: 12 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4704 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 144; y: 11 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 144; y: 9 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4720 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 144; y: 7 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 144; y: 6 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4736 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 143; y: 4 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 143; y: 2 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4752 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 143; y: 1 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4768 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4784 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4800 - image: "windowObjects.4.png" - } - Frame { - msec: 4816 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4832 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4848 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4864 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4880 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4896 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4912 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4928 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4944 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4960 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4976 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 4992 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5008 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5024 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5040 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5056 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5072 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5088 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5104 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5120 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5136 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5152 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5168 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5184 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5200 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5216 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5232 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5248 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5264 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5280 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5296 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5312 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5328 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5344 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5360 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5376 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5392 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5408 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5424 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5440 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5456 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5472 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5488 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5504 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5520 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5536 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5552 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5568 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } - Frame { - msec: 5584 - hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml b/tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml deleted file mode 100644 index 34d1116..0000000 --- a/tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml +++ /dev/null @@ -1,395 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 32 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 48 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 64 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 80 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 96 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 112 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 128 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 144 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 160 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 176 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 192 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 208 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 224 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 240 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 256 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 272 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 288 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 304 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 320 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 336 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 352 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 368 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 384 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 400 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 416 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 432 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 448 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 464 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 480 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 496 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 512 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 528 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 544 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 560 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 576 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 592 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 608 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 624 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 640 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 656 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 672 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 688 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 196; y: 25 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 194; y: 19 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 190; y: 13 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 704 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 720 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 736 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 752 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 768 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 784 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 800 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 816 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 832 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 848 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 864 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 880 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 896 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 912 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 928 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 944 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 960 - image: "fontFamily.0.png" - } - Frame { - msec: 976 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 992 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1008 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1024 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1040 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1056 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1072 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1088 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1104 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1120 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1136 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1152 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1168 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1184 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1200 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1216 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1232 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1248 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1264 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1280 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1296 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1312 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1328 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1344 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1360 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1376 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1392 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1408 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1424 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1440 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } - Frame { - msec: 1456 - hash: "5d66fdee6a0a96bb24e89244f02eacc9" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml b/tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml deleted file mode 100644 index efe3875..0000000 --- a/tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml +++ /dev/null @@ -1,339 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 32 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 48 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 64 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 80 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 96 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 112 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 128 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 144 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 160 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 176 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 192 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 208 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 224 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 240 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 256 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 272 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 288 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 304 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 320 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 336 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 352 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 368 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 384 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 400 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 416 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 432 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 448 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 464 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 480 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 496 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 512 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 528 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 544 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 560 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 576 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 592 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 608 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 624 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 640 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 656 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 672 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 688 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 704 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 720 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 736 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 752 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 768 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 784 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 800 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 816 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 832 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 848 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 864 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 880 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 896 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 912 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 928 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 944 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 960 - image: "fontSize.0.png" - } - Frame { - msec: 976 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 992 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1008 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1024 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1040 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1056 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1072 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1088 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1104 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1120 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1136 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1152 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1168 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1184 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1200 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1216 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1232 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1248 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1264 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1280 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1296 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1312 - hash: "962e77f522956d38f3b1b890df749f0a" - } - Frame { - msec: 1328 - hash: "962e77f522956d38f3b1b890df749f0a" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml b/tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml deleted file mode 100644 index 624a16b..0000000 --- a/tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml +++ /dev/null @@ -1,595 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 32 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 48 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 64 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 80 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 96 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 112 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 128 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 144 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 160 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 176 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 192 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 208 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 224 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 240 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 256 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 272 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 288 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 304 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 320 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 336 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 352 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 368 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 384 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 400 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 416 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 432 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 448 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 464 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 480 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 496 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 512 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 528 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 544 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 560 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 576 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 592 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 608 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 624 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 640 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 656 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 672 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 688 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 704 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 720 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 736 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 752 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 768 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 784 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 800 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 816 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 832 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 848 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 864 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 880 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 896 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 912 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 928 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 944 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 960 - image: "noAutoLoadImages.0.png" - } - Frame { - msec: 976 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 992 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1008 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1024 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1040 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1056 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1072 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1088 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1104 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1120 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1136 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1152 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1168 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1184 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1200 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1216 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1232 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1248 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1264 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1280 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1296 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1312 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1328 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1344 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1360 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1376 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1392 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1408 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1424 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1440 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1456 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1472 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1488 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1504 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1520 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1536 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1552 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1568 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1584 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1600 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1616 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1632 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1648 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1664 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1680 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1696 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1712 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1728 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1744 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1760 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1776 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1792 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1808 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1824 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1840 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1856 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1872 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1888 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1904 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1920 - image: "noAutoLoadImages.1.png" - } - Frame { - msec: 1936 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1952 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1968 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 1984 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2000 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2016 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2032 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2048 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2064 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2080 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2096 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2112 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2128 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2144 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2160 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2176 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2192 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2208 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2224 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2240 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2256 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2272 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2288 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2304 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2320 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2336 - hash: "5146cfbeefc51268eca7717d84775750" - } - Frame { - msec: 2352 - hash: "5146cfbeefc51268eca7717d84775750" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml b/tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml deleted file mode 100644 index 414d64f..0000000 --- a/tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml +++ /dev/null @@ -1,351 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 32 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 48 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 64 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 80 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 96 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 112 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 128 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 144 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 160 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 176 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 192 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 208 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 224 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 240 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 256 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 272 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 288 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 304 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 320 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 336 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 352 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 368 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 384 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 400 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 416 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 432 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 448 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 464 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 480 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 496 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 512 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 528 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 544 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 560 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 576 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 592 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 608 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 624 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 640 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 656 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 672 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 688 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 704 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 720 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 736 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 752 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 768 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 784 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 800 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 816 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 832 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 848 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 864 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 880 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 896 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 912 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 928 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 944 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 960 - image: "setFontFamily.0.png" - } - Frame { - msec: 976 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 992 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1008 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1024 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1040 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1056 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1072 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1088 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1104 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1120 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1136 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1152 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1168 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1184 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1200 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1216 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1232 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1248 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1264 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1280 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1296 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1312 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1328 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1344 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1360 - hash: "7ef8bb83c146898bd75de8951a932b58" - } - Frame { - msec: 1376 - hash: "7ef8bb83c146898bd75de8951a932b58" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml deleted file mode 100644 index 2e60b7f..0000000 --- a/tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml +++ /dev/null @@ -1,227 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 32 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 48 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 64 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 80 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 96 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 112 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 128 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 144 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 160 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 176 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 192 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 208 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 224 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 240 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 256 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 272 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 288 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 304 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 320 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 336 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 352 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 368 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 384 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 400 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 416 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 432 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 448 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 464 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 480 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 496 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 512 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 528 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 544 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 560 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 576 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 592 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 608 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 624 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 640 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 656 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 672 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 688 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 704 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 720 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 736 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 752 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 768 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 784 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 800 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 816 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 832 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 848 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 864 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } - Frame { - msec: 880 - hash: "9a2554b1b322ea71115fa91d0100d2ff" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml deleted file mode 100644 index 464e009..0000000 --- a/tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml +++ /dev/null @@ -1,415 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "4f999826cd5ebe4f58bfd255e1c22be0" - } - Frame { - msec: 32 - hash: "3aa9bd1bd75219f82578689ac6d81c7e" - } - Frame { - msec: 48 - hash: "19d5f48f1c73d52483be96c887d3fd76" - } - Frame { - msec: 64 - hash: "9b85eef4e0746cc43aaefd442efdd824" - } - Frame { - msec: 80 - hash: "fca0034fb720e40198ede95a0ab0fadb" - } - Frame { - msec: 96 - hash: "9f63ddbd927a4b08242f3410a9ed7283" - } - Frame { - msec: 112 - hash: "4f5804c3c3ee195470a462293307cfd5" - } - Frame { - msec: 128 - hash: "d0434f08a8097b97b76c1194317a38ba" - } - Frame { - msec: 144 - hash: "921880d300e56f9605923a13fcd8b967" - } - Frame { - msec: 160 - hash: "f5dc87abf36332c68fd4450a6236dcb4" - } - Frame { - msec: 176 - hash: "c54f220cd5768afa1c12579007e17eff" - } - Frame { - msec: 192 - hash: "e1c70c3896d5a937296f205b09991b31" - } - Frame { - msec: 208 - hash: "d135f70f761add1358062a0386c62d18" - } - Frame { - msec: 224 - hash: "53cb2ed2b65e77cf0cd70530f32854ad" - } - Frame { - msec: 240 - hash: "2ff4feb61d958a800b38b282c3400293" - } - Frame { - msec: 256 - hash: "59f5585ec472efa29c5eba8b972ab3bd" - } - Frame { - msec: 272 - hash: "3aef5e1ff6da15e0e9f2e620dbabbab2" - } - Frame { - msec: 288 - hash: "2931299f667752efe9fca727534385e1" - } - Frame { - msec: 304 - hash: "2ed90e61c41b994ccea924191b66fc71" - } - Frame { - msec: 320 - hash: "1424c634067c896973c2c10793957933" - } - Frame { - msec: 336 - hash: "c4d30d511053a7caeefdae753236cf5b" - } - Frame { - msec: 352 - hash: "32300e07e34e8f316770c790a5ef9f6d" - } - Frame { - msec: 368 - hash: "95312dc2a4d88a48605fea170712354d" - } - Frame { - msec: 384 - hash: "3d146357d1532640cefb64fbae75bc0d" - } - Frame { - msec: 400 - hash: "5b78740511a456a3647d8392b2008f7f" - } - Frame { - msec: 416 - hash: "dddb065cefa27a862d108429c9984191" - } - Frame { - msec: 432 - hash: "0857067a0ee381e0f462ef8aceb0b696" - } - Frame { - msec: 448 - hash: "1f5e7e064cc62ff2e0585c98875351df" - } - Frame { - msec: 464 - hash: "c7f6bb852bdb2b99cbb5a8ca34f1585a" - } - Frame { - msec: 480 - hash: "f2284dea5812f167cae08c687fc1a3e9" - } - Frame { - msec: 496 - hash: "deec54bc32c46921e5032bce7daa1dad" - } - Frame { - msec: 512 - hash: "1271d3704de17bfe463c76fd73c3132b" - } - Frame { - msec: 528 - hash: "0568b0ecd47cd1c34b9de477e68e5751" - } - Frame { - msec: 544 - hash: "f070dd88e42697a9e43573f9f41b3540" - } - Frame { - msec: 560 - hash: "f5ced2827b06ea514f05866f1e4099f0" - } - Frame { - msec: 576 - hash: "59f5585ec472efa29c5eba8b972ab3bd" - } - Frame { - msec: 592 - hash: "2ff4feb61d958a800b38b282c3400293" - } - Frame { - msec: 608 - hash: "53cb2ed2b65e77cf0cd70530f32854ad" - } - Frame { - msec: 624 - hash: "d135f70f761add1358062a0386c62d18" - } - Frame { - msec: 640 - hash: "e1c70c3896d5a937296f205b09991b31" - } - Frame { - msec: 656 - hash: "c54f220cd5768afa1c12579007e17eff" - } - Frame { - msec: 672 - hash: "f5dc87abf36332c68fd4450a6236dcb4" - } - Frame { - msec: 688 - hash: "921880d300e56f9605923a13fcd8b967" - } - Frame { - msec: 704 - hash: "d0434f08a8097b97b76c1194317a38ba" - } - Frame { - msec: 720 - hash: "4f5804c3c3ee195470a462293307cfd5" - } - Frame { - msec: 736 - hash: "9f63ddbd927a4b08242f3410a9ed7283" - } - Frame { - msec: 752 - hash: "fca0034fb720e40198ede95a0ab0fadb" - } - Frame { - msec: 768 - hash: "9b85eef4e0746cc43aaefd442efdd824" - } - Frame { - msec: 784 - hash: "19d5f48f1c73d52483be96c887d3fd76" - } - Frame { - msec: 800 - hash: "3aa9bd1bd75219f82578689ac6d81c7e" - } - Frame { - msec: 816 - hash: "4f999826cd5ebe4f58bfd255e1c22be0" - } - Frame { - msec: 832 - hash: "3aa9bd1bd75219f82578689ac6d81c7e" - } - Frame { - msec: 848 - hash: "19d5f48f1c73d52483be96c887d3fd76" - } - Frame { - msec: 864 - hash: "9b85eef4e0746cc43aaefd442efdd824" - } - Frame { - msec: 880 - hash: "fca0034fb720e40198ede95a0ab0fadb" - } - Frame { - msec: 896 - hash: "9f63ddbd927a4b08242f3410a9ed7283" - } - Frame { - msec: 912 - hash: "4f5804c3c3ee195470a462293307cfd5" - } - Frame { - msec: 928 - hash: "d0434f08a8097b97b76c1194317a38ba" - } - Frame { - msec: 944 - hash: "921880d300e56f9605923a13fcd8b967" - } - Frame { - msec: 960 - image: "renderControl.0.png" - } - Frame { - msec: 976 - hash: "c54f220cd5768afa1c12579007e17eff" - } - Frame { - msec: 992 - hash: "e1c70c3896d5a937296f205b09991b31" - } - Frame { - msec: 1008 - hash: "d135f70f761add1358062a0386c62d18" - } - Frame { - msec: 1024 - hash: "53cb2ed2b65e77cf0cd70530f32854ad" - } - Frame { - msec: 1040 - hash: "2ff4feb61d958a800b38b282c3400293" - } - Frame { - msec: 1056 - hash: "59f5585ec472efa29c5eba8b972ab3bd" - } - Frame { - msec: 1072 - hash: "3aef5e1ff6da15e0e9f2e620dbabbab2" - } - Frame { - msec: 1088 - hash: "2931299f667752efe9fca727534385e1" - } - Frame { - msec: 1104 - hash: "2ed90e61c41b994ccea924191b66fc71" - } - Frame { - msec: 1120 - hash: "1424c634067c896973c2c10793957933" - } - Frame { - msec: 1136 - hash: "c4d30d511053a7caeefdae753236cf5b" - } - Frame { - msec: 1152 - hash: "32300e07e34e8f316770c790a5ef9f6d" - } - Frame { - msec: 1168 - hash: "95312dc2a4d88a48605fea170712354d" - } - Frame { - msec: 1184 - hash: "3d146357d1532640cefb64fbae75bc0d" - } - Frame { - msec: 1200 - hash: "5b78740511a456a3647d8392b2008f7f" - } - Frame { - msec: 1216 - hash: "dddb065cefa27a862d108429c9984191" - } - Frame { - msec: 1232 - hash: "0857067a0ee381e0f462ef8aceb0b696" - } - Frame { - msec: 1248 - hash: "1f5e7e064cc62ff2e0585c98875351df" - } - Frame { - msec: 1264 - hash: "c7f6bb852bdb2b99cbb5a8ca34f1585a" - } - Frame { - msec: 1280 - hash: "f2284dea5812f167cae08c687fc1a3e9" - } - Frame { - msec: 1296 - hash: "deec54bc32c46921e5032bce7daa1dad" - } - Frame { - msec: 1312 - hash: "1271d3704de17bfe463c76fd73c3132b" - } - Frame { - msec: 1328 - hash: "0568b0ecd47cd1c34b9de477e68e5751" - } - Frame { - msec: 1344 - hash: "f070dd88e42697a9e43573f9f41b3540" - } - Frame { - msec: 1360 - hash: "f5ced2827b06ea514f05866f1e4099f0" - } - Frame { - msec: 1376 - hash: "59f5585ec472efa29c5eba8b972ab3bd" - } - Frame { - msec: 1392 - hash: "2ff4feb61d958a800b38b282c3400293" - } - Frame { - msec: 1408 - hash: "53cb2ed2b65e77cf0cd70530f32854ad" - } - Frame { - msec: 1424 - hash: "d135f70f761add1358062a0386c62d18" - } - Frame { - msec: 1440 - hash: "e1c70c3896d5a937296f205b09991b31" - } - Frame { - msec: 1456 - hash: "c54f220cd5768afa1c12579007e17eff" - } - Frame { - msec: 1472 - hash: "f5dc87abf36332c68fd4450a6236dcb4" - } - Frame { - msec: 1488 - hash: "921880d300e56f9605923a13fcd8b967" - } - Frame { - msec: 1504 - hash: "d0434f08a8097b97b76c1194317a38ba" - } - Frame { - msec: 1520 - hash: "4f5804c3c3ee195470a462293307cfd5" - } - Frame { - msec: 1536 - hash: "9f63ddbd927a4b08242f3410a9ed7283" - } - Frame { - msec: 1552 - hash: "fca0034fb720e40198ede95a0ab0fadb" - } - Frame { - msec: 1568 - hash: "9b85eef4e0746cc43aaefd442efdd824" - } - Frame { - msec: 1584 - hash: "19d5f48f1c73d52483be96c887d3fd76" - } - Frame { - msec: 1600 - hash: "3aa9bd1bd75219f82578689ac6d81c7e" - } - Frame { - msec: 1616 - hash: "4f999826cd5ebe4f58bfd255e1c22be0" - } - Frame { - msec: 1632 - hash: "3aa9bd1bd75219f82578689ac6d81c7e" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml deleted file mode 100644 index edf8040..0000000 --- a/tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml +++ /dev/null @@ -1,1319 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "ac1d9c1cc13813b5e94c692a209a4e36" - } - Frame { - msec: 32 - hash: "1f189a436cf74ae83a03c3bb63c24ec2" - } - Frame { - msec: 48 - hash: "369f761053d5910e00672aa866f698ba" - } - Frame { - msec: 64 - hash: "30a191ae899121ae22d10acee6593415" - } - Frame { - msec: 80 - hash: "7af041898748bb5950643b057ca59eea" - } - Frame { - msec: 96 - hash: "e0a2ed91e78ff9a994deb9649a8afc16" - } - Frame { - msec: 112 - hash: "649ad1a3fb57fb088e4e5cfd749bf2e5" - } - Frame { - msec: 128 - hash: "9053a92e343ebb79bd2831f5ab94a1b5" - } - Frame { - msec: 144 - hash: "dc78b09e27bbc0a2cfec83436eef4446" - } - Frame { - msec: 160 - hash: "2aaa3749f93734dd203e1fea91a9f24a" - } - Frame { - msec: 176 - hash: "8df8dd33eada434231332b81e03430ce" - } - Frame { - msec: 192 - hash: "b5b1beb4dd4720eaa8b888fbef1ba875" - } - Frame { - msec: 208 - hash: "e531d33ef14b58ad843a6be6d7cb0961" - } - Frame { - msec: 224 - hash: "011c0bcca7717b08bc53738718203f7e" - } - Frame { - msec: 240 - hash: "412a630348aa44d56f36f04982035e36" - } - Frame { - msec: 256 - hash: "45528cdc62622b6d01e44466cd85bd38" - } - Frame { - msec: 272 - hash: "0901c99f959d6c10a0b6ea46a282d8fd" - } - Frame { - msec: 288 - hash: "3f200fca4815d555f22912d9fcdc20ee" - } - Frame { - msec: 304 - hash: "5e3c58e2f3a57f4ea48f4315d37ed813" - } - Frame { - msec: 320 - hash: "e8d98ec2d13ef4324feba11be95d0735" - } - Frame { - msec: 336 - hash: "4f3b79b341b63499a20f1e1e2cd979f9" - } - Frame { - msec: 352 - hash: "5ddbc3bc10292bec41531e83c0921c59" - } - Frame { - msec: 368 - hash: "9bc9801e83267689cd2750226f2b08ce" - } - Frame { - msec: 384 - hash: "f87195f2393914a0bbed9a454de01ff5" - } - Frame { - msec: 400 - hash: "4e0fd7f45e53a8d44c416eb9235ec877" - } - Frame { - msec: 416 - hash: "a579d6324fb4bf9ac5ceaba2aa708764" - } - Frame { - msec: 432 - hash: "b9f3f08168fb55ba01e56e670db565de" - } - Frame { - msec: 448 - hash: "cbd63ec868578e295a83170f42b23678" - } - Frame { - msec: 464 - hash: "2ed9d0e09b61dee8b2703e580007d7a5" - } - Frame { - msec: 480 - hash: "92fa2d9ef05140eb9d0fcf78b55f202e" - } - Frame { - msec: 496 - hash: "9a3f9dc04a900020f0e488309d7b4757" - } - Frame { - msec: 512 - hash: "93b4876c3e185ff4875a7447b0bf4f0f" - } - Frame { - msec: 528 - hash: "41b40e36f77d04e62f72ad34aa50709a" - } - Frame { - msec: 544 - hash: "2ea69aeb32fee61b61aa9c4efb2834bf" - } - Frame { - msec: 560 - hash: "0971ac1e05ea2ba387c78d4d103f5ea1" - } - Frame { - msec: 576 - hash: "98e46dff678f293fd6a4e9313ab3aec7" - } - Frame { - msec: 592 - hash: "82b94393071d6c32dd8028e1ee69e7fb" - } - Frame { - msec: 608 - hash: "240df67aa72a24546eb6e043e0d3d205" - } - Frame { - msec: 624 - hash: "56c4113cc341c254ccab66f3bc313154" - } - Frame { - msec: 640 - hash: "20d758c1537ed1a9aff657414b50926c" - } - Frame { - msec: 656 - hash: "ae252d835a05e01c2a12ae820335049a" - } - Frame { - msec: 672 - hash: "4d53256fbb012e738ba3868e2482250d" - } - Frame { - msec: 688 - hash: "261a341cab38986fb2f53b8e430f04a3" - } - Frame { - msec: 704 - hash: "1030f795d310f742ba491a2a90ff52d8" - } - Frame { - msec: 720 - hash: "59d24ebfedd2a87bdbd755d06c4361d2" - } - Frame { - msec: 736 - hash: "a6eaa480b3f93d33ae23bb36b7691b92" - } - Frame { - msec: 752 - hash: "cb6cf1e6e89da3fcbad323f744aef18d" - } - Frame { - msec: 768 - hash: "33a4f07cf7f5d16f006541c61ae2e4ee" - } - Frame { - msec: 784 - hash: "6e857b106486ea0aaa5321d4a7a07eae" - } - Frame { - msec: 800 - hash: "0f80edaf3eecf7a8c015d3fcecc0a494" - } - Frame { - msec: 816 - hash: "24b45d00d70904694c30ebd422c739ce" - } - Frame { - msec: 832 - hash: "c0ca66fefb19294852b9be0c4ba36481" - } - Frame { - msec: 848 - hash: "047846d243e7613193a8ddd526c4268e" - } - Frame { - msec: 864 - hash: "ca85f90e450ccda6b76e6a29a3187a63" - } - Frame { - msec: 880 - hash: "fcd803f5640d054190c2ddc9a6406bb9" - } - Frame { - msec: 896 - hash: "f81152b8a464bfa8343f52efcb0c8b8c" - } - Frame { - msec: 912 - hash: "e86be73d83699584dca986dfdb030b36" - } - Frame { - msec: 928 - hash: "d9798e4ebaf72c35b19a56b336d2ea93" - } - Frame { - msec: 944 - hash: "460f13d8e05b529c0e4fba39b1449ff1" - } - Frame { - msec: 960 - image: "resolution.0.png" - } - Frame { - msec: 976 - hash: "8b2f13580c6de9ec231809330d2d0362" - } - Frame { - msec: 992 - hash: "94a2cc520340573557e6a310f2ea125e" - } - Frame { - msec: 1008 - hash: "a8df78ab2e800349ec887ea6b1f5dcb8" - } - Frame { - msec: 1024 - hash: "0f3a56dbe26d453847ed4847c0e81d1a" - } - Frame { - msec: 1040 - hash: "96c89325862a982235b4b75922ec4669" - } - Frame { - msec: 1056 - hash: "ead6352a4ca47da59422e8d6a5844aa4" - } - Frame { - msec: 1072 - hash: "b50a6b14f15882e2c1ae6e3babeecdf8" - } - Frame { - msec: 1088 - hash: "2f32245c3388b86194e8183a290e99b8" - } - Frame { - msec: 1104 - hash: "2b54d49d30ccbf11ccb5ba8d62ba7d83" - } - Frame { - msec: 1120 - hash: "495b25d87cb6d1d4bdea4d5ec62c698e" - } - Frame { - msec: 1136 - hash: "3d45b061939783b6359fa4cdb908ecc0" - } - Frame { - msec: 1152 - hash: "e9e601c2a65a09b6354fff2c162106d6" - } - Frame { - msec: 1168 - hash: "8cfba8a724e85403b573caf7bbac9d83" - } - Frame { - msec: 1184 - hash: "5910765354645b724e14681cbdea227e" - } - Frame { - msec: 1200 - hash: "4358af7f2ccfc0919614351bfd5a7405" - } - Frame { - msec: 1216 - hash: "032e064336b458a6de03fdc98684cc34" - } - Frame { - msec: 1232 - hash: "c81d87bf83ee7e834a4b15dd103f7082" - } - Frame { - msec: 1248 - hash: "9d4416b55ed3b9e45a2314e9be5a5f2d" - } - Frame { - msec: 1264 - hash: "5b96da1a52a0413f9e8edbc9291a2502" - } - Frame { - msec: 1280 - hash: "aaa4008281ebc60b15616c818816e195" - } - Frame { - msec: 1296 - hash: "81ebf882aeb89648300dfc2e8e2cf11b" - } - Frame { - msec: 1312 - hash: "4e686e6cee12902f92e0ece915386fb3" - } - Frame { - msec: 1328 - hash: "6ff8d9bd6ec4dce414cdc7330646156e" - } - Frame { - msec: 1344 - hash: "dac6334e8b221527ef74b4f93eeef7c3" - } - Frame { - msec: 1360 - hash: "e58dbf419d1831e001e802600803aaa5" - } - Frame { - msec: 1376 - hash: "e8685f9b12c9ccb9d0e471946f1f6f9c" - } - Frame { - msec: 1392 - hash: "0936715ff8d38c2c813ebef0683a3246" - } - Frame { - msec: 1408 - hash: "37ad0a5532af8b083a7d4c4b044075ca" - } - Frame { - msec: 1424 - hash: "52ae25414d353d994cba36918644949a" - } - Frame { - msec: 1440 - hash: "07719485f9a7d0012eb0f3f211f0f21b" - } - Frame { - msec: 1456 - hash: "2d1a4f2c8d4a8d6316a31a81a2d20c61" - } - Frame { - msec: 1472 - hash: "3b279fb9e7b3efe05becc1651ba59493" - } - Frame { - msec: 1488 - hash: "4b9c126dcdf499f9de4e09d4f6ab86bf" - } - Frame { - msec: 1504 - hash: "6a1b8d8ea46949cb65e8f4155ab94819" - } - Frame { - msec: 1520 - hash: "6dbd2106b91ffbbb8a845e6cddbd47d7" - } - Frame { - msec: 1536 - hash: "8244eda92302f2b5cff01f05d438bf20" - } - Frame { - msec: 1552 - hash: "f939bd80ae865e365e554a532ade38f5" - } - Frame { - msec: 1568 - hash: "92d135616eee6737333b3d86d0aa5956" - } - Frame { - msec: 1584 - hash: "ca75854d6e5a77c8e609d65971b5671a" - } - Frame { - msec: 1600 - hash: "b0a113800cd05768b57bac6b9a338b1d" - } - Frame { - msec: 1616 - hash: "7af1a2aa6a201e36c3a969be4330af04" - } - Frame { - msec: 1632 - hash: "e54e8a2cfb0e6678b2a7cc64b8ae08bc" - } - Frame { - msec: 1648 - hash: "5d212c7efd9cf7d3eb5219b0bbe766d7" - } - Frame { - msec: 1664 - hash: "f4f2c95380c0f76c9e89820cdbeb5b31" - } - Frame { - msec: 1680 - hash: "b8eefbf5ade1a6b9eef9608f66a46474" - } - Frame { - msec: 1696 - hash: "d699ace9babbb152aad2fa852114c099" - } - Frame { - msec: 1712 - hash: "ceb3dea0d2b93cc5882a2b38ab3d1b95" - } - Frame { - msec: 1728 - hash: "08175810bfb80e1c5816b0d0aebbac4a" - } - Frame { - msec: 1744 - hash: "86abce93f50e7e7ebbd90690cfb20dd2" - } - Frame { - msec: 1760 - hash: "2918979f2682bd32beb5eaf7ecb3e463" - } - Frame { - msec: 1776 - hash: "b165ab96b0d51d41578bf99cbf7f6d02" - } - Frame { - msec: 1792 - hash: "d56cfdb2c65372cb36aeb13fd9c73deb" - } - Frame { - msec: 1808 - hash: "c53f0e4dc8204e5892ed4f367a6bade3" - } - Frame { - msec: 1824 - hash: "b3ae62e13149160f3695ed5c116411aa" - } - Frame { - msec: 1840 - hash: "057e4a0428ea2ff9893becd40e6d2977" - } - Frame { - msec: 1856 - hash: "10c050131093cc0d3f4b80c44eb1218b" - } - Frame { - msec: 1872 - hash: "17ce5a6dace37f4eb316f37ea26a8a2c" - } - Frame { - msec: 1888 - hash: "6e00c7e74bfaed5cf06aba54c8b73e57" - } - Frame { - msec: 1904 - hash: "5a03b1b698ca28d2afd9c67aef3bc2e9" - } - Frame { - msec: 1920 - image: "resolution.1.png" - } - Frame { - msec: 1936 - hash: "0fab102a33521e8893afdb6a11a3c5c9" - } - Frame { - msec: 1952 - hash: "232e8f1b060ef55e37a372bec4435d11" - } - Frame { - msec: 1968 - hash: "2107724eac0d1b8735060876f80d303a" - } - Frame { - msec: 1984 - hash: "cf5d12d2707975ad364750d5ba787944" - } - Frame { - msec: 2000 - hash: "2457c88828c2cb39feb1d34556077139" - } - Frame { - msec: 2016 - hash: "5f08d6dab8199b3f0f57d32cf2da4d67" - } - Frame { - msec: 2032 - hash: "2457c88828c2cb39feb1d34556077139" - } - Frame { - msec: 2048 - hash: "cf5d12d2707975ad364750d5ba787944" - } - Frame { - msec: 2064 - hash: "2107724eac0d1b8735060876f80d303a" - } - Frame { - msec: 2080 - hash: "232e8f1b060ef55e37a372bec4435d11" - } - Frame { - msec: 2096 - hash: "0a93c515cd328978ebd8103539a2fd63" - } - Frame { - msec: 2112 - hash: "63d6c7beac12e3bd83f9ef58c233c7d2" - } - Frame { - msec: 2128 - hash: "5a03b1b698ca28d2afd9c67aef3bc2e9" - } - Frame { - msec: 2144 - hash: "6e00c7e74bfaed5cf06aba54c8b73e57" - } - Frame { - msec: 2160 - hash: "17ce5a6dace37f4eb316f37ea26a8a2c" - } - Frame { - msec: 2176 - hash: "10c050131093cc0d3f4b80c44eb1218b" - } - Frame { - msec: 2192 - hash: "057e4a0428ea2ff9893becd40e6d2977" - } - Frame { - msec: 2208 - hash: "b3ae62e13149160f3695ed5c116411aa" - } - Frame { - msec: 2224 - hash: "c53f0e4dc8204e5892ed4f367a6bade3" - } - Frame { - msec: 2240 - hash: "d56cfdb2c65372cb36aeb13fd9c73deb" - } - Frame { - msec: 2256 - hash: "b165ab96b0d51d41578bf99cbf7f6d02" - } - Frame { - msec: 2272 - hash: "2918979f2682bd32beb5eaf7ecb3e463" - } - Frame { - msec: 2288 - hash: "86abce93f50e7e7ebbd90690cfb20dd2" - } - Frame { - msec: 2304 - hash: "08175810bfb80e1c5816b0d0aebbac4a" - } - Frame { - msec: 2320 - hash: "ceb3dea0d2b93cc5882a2b38ab3d1b95" - } - Frame { - msec: 2336 - hash: "d699ace9babbb152aad2fa852114c099" - } - Frame { - msec: 2352 - hash: "b8eefbf5ade1a6b9eef9608f66a46474" - } - Frame { - msec: 2368 - hash: "f4f2c95380c0f76c9e89820cdbeb5b31" - } - Frame { - msec: 2384 - hash: "5d212c7efd9cf7d3eb5219b0bbe766d7" - } - Frame { - msec: 2400 - hash: "e54e8a2cfb0e6678b2a7cc64b8ae08bc" - } - Frame { - msec: 2416 - hash: "d9408487f747ffb8eff5e1da92207285" - } - Frame { - msec: 2432 - hash: "e6b3fa1829535ac90d1548f45aadb9be" - } - Frame { - msec: 2448 - hash: "ca75854d6e5a77c8e609d65971b5671a" - } - Frame { - msec: 2464 - hash: "92d135616eee6737333b3d86d0aa5956" - } - Frame { - msec: 2480 - hash: "f939bd80ae865e365e554a532ade38f5" - } - Frame { - msec: 2496 - hash: "8244eda92302f2b5cff01f05d438bf20" - } - Frame { - msec: 2512 - hash: "6dbd2106b91ffbbb8a845e6cddbd47d7" - } - Frame { - msec: 2528 - hash: "6a1b8d8ea46949cb65e8f4155ab94819" - } - Frame { - msec: 2544 - hash: "4b9c126dcdf499f9de4e09d4f6ab86bf" - } - Frame { - msec: 2560 - hash: "3b279fb9e7b3efe05becc1651ba59493" - } - Frame { - msec: 2576 - hash: "bb40b884b56defb61ad86757fd51b9e6" - } - Frame { - msec: 2592 - hash: "07719485f9a7d0012eb0f3f211f0f21b" - } - Frame { - msec: 2608 - hash: "52ae25414d353d994cba36918644949a" - } - Frame { - msec: 2624 - hash: "37ad0a5532af8b083a7d4c4b044075ca" - } - Frame { - msec: 2640 - hash: "0936715ff8d38c2c813ebef0683a3246" - } - Frame { - msec: 2656 - hash: "e8685f9b12c9ccb9d0e471946f1f6f9c" - } - Frame { - msec: 2672 - hash: "e58dbf419d1831e001e802600803aaa5" - } - Frame { - msec: 2688 - hash: "dac6334e8b221527ef74b4f93eeef7c3" - } - Frame { - msec: 2704 - hash: "6ff8d9bd6ec4dce414cdc7330646156e" - } - Frame { - msec: 2720 - hash: "4e686e6cee12902f92e0ece915386fb3" - } - Frame { - msec: 2736 - hash: "81ebf882aeb89648300dfc2e8e2cf11b" - } - Frame { - msec: 2752 - hash: "aaa4008281ebc60b15616c818816e195" - } - Frame { - msec: 2768 - hash: "5b96da1a52a0413f9e8edbc9291a2502" - } - Frame { - msec: 2784 - hash: "9d4416b55ed3b9e45a2314e9be5a5f2d" - } - Frame { - msec: 2800 - hash: "c81d87bf83ee7e834a4b15dd103f7082" - } - Frame { - msec: 2816 - hash: "9fdf30d57c49a6644377ba40140b1969" - } - Frame { - msec: 2832 - hash: "4358af7f2ccfc0919614351bfd5a7405" - } - Frame { - msec: 2848 - hash: "5910765354645b724e14681cbdea227e" - } - Frame { - msec: 2864 - hash: "8cfba8a724e85403b573caf7bbac9d83" - } - Frame { - msec: 2880 - image: "resolution.2.png" - } - Frame { - msec: 2896 - hash: "3d45b061939783b6359fa4cdb908ecc0" - } - Frame { - msec: 2912 - hash: "495b25d87cb6d1d4bdea4d5ec62c698e" - } - Frame { - msec: 2928 - hash: "2b54d49d30ccbf11ccb5ba8d62ba7d83" - } - Frame { - msec: 2944 - hash: "2f32245c3388b86194e8183a290e99b8" - } - Frame { - msec: 2960 - hash: "b50a6b14f15882e2c1ae6e3babeecdf8" - } - Frame { - msec: 2976 - hash: "ead6352a4ca47da59422e8d6a5844aa4" - } - Frame { - msec: 2992 - hash: "96c89325862a982235b4b75922ec4669" - } - Frame { - msec: 3008 - hash: "0f3a56dbe26d453847ed4847c0e81d1a" - } - Frame { - msec: 3024 - hash: "a8df78ab2e800349ec887ea6b1f5dcb8" - } - Frame { - msec: 3040 - hash: "94a2cc520340573557e6a310f2ea125e" - } - Frame { - msec: 3056 - hash: "8b2f13580c6de9ec231809330d2d0362" - } - Frame { - msec: 3072 - hash: "5f76ef4f6b8e703fd0822859cd9a1353" - } - Frame { - msec: 3088 - hash: "460f13d8e05b529c0e4fba39b1449ff1" - } - Frame { - msec: 3104 - hash: "d9798e4ebaf72c35b19a56b336d2ea93" - } - Frame { - msec: 3120 - hash: "e86be73d83699584dca986dfdb030b36" - } - Frame { - msec: 3136 - hash: "f81152b8a464bfa8343f52efcb0c8b8c" - } - Frame { - msec: 3152 - hash: "fcd803f5640d054190c2ddc9a6406bb9" - } - Frame { - msec: 3168 - hash: "ca85f90e450ccda6b76e6a29a3187a63" - } - Frame { - msec: 3184 - hash: "047846d243e7613193a8ddd526c4268e" - } - Frame { - msec: 3200 - hash: "c0ca66fefb19294852b9be0c4ba36481" - } - Frame { - msec: 3216 - hash: "d4a075656790c4f2c50addcd2cc660b5" - } - Frame { - msec: 3232 - hash: "0f80edaf3eecf7a8c015d3fcecc0a494" - } - Frame { - msec: 3248 - hash: "6e857b106486ea0aaa5321d4a7a07eae" - } - Frame { - msec: 3264 - hash: "33a4f07cf7f5d16f006541c61ae2e4ee" - } - Frame { - msec: 3280 - hash: "cb6cf1e6e89da3fcbad323f744aef18d" - } - Frame { - msec: 3296 - hash: "a6eaa480b3f93d33ae23bb36b7691b92" - } - Frame { - msec: 3312 - hash: "59d24ebfedd2a87bdbd755d06c4361d2" - } - Frame { - msec: 3328 - hash: "1030f795d310f742ba491a2a90ff52d8" - } - Frame { - msec: 3344 - hash: "261a341cab38986fb2f53b8e430f04a3" - } - Frame { - msec: 3360 - hash: "4d53256fbb012e738ba3868e2482250d" - } - Frame { - msec: 3376 - hash: "ae252d835a05e01c2a12ae820335049a" - } - Frame { - msec: 3392 - hash: "20d758c1537ed1a9aff657414b50926c" - } - Frame { - msec: 3408 - hash: "56c4113cc341c254ccab66f3bc313154" - } - Frame { - msec: 3424 - hash: "240df67aa72a24546eb6e043e0d3d205" - } - Frame { - msec: 3440 - hash: "82b94393071d6c32dd8028e1ee69e7fb" - } - Frame { - msec: 3456 - hash: "98e46dff678f293fd6a4e9313ab3aec7" - } - Frame { - msec: 3472 - hash: "0971ac1e05ea2ba387c78d4d103f5ea1" - } - Frame { - msec: 3488 - hash: "2ea69aeb32fee61b61aa9c4efb2834bf" - } - Frame { - msec: 3504 - hash: "41b40e36f77d04e62f72ad34aa50709a" - } - Frame { - msec: 3520 - hash: "93b4876c3e185ff4875a7447b0bf4f0f" - } - Frame { - msec: 3536 - hash: "9a3f9dc04a900020f0e488309d7b4757" - } - Frame { - msec: 3552 - hash: "92fa2d9ef05140eb9d0fcf78b55f202e" - } - Frame { - msec: 3568 - hash: "2ed9d0e09b61dee8b2703e580007d7a5" - } - Frame { - msec: 3584 - hash: "cbd63ec868578e295a83170f42b23678" - } - Frame { - msec: 3600 - hash: "b9f3f08168fb55ba01e56e670db565de" - } - Frame { - msec: 3616 - hash: "a579d6324fb4bf9ac5ceaba2aa708764" - } - Frame { - msec: 3632 - hash: "4e0fd7f45e53a8d44c416eb9235ec877" - } - Frame { - msec: 3648 - hash: "f87195f2393914a0bbed9a454de01ff5" - } - Frame { - msec: 3664 - hash: "9bc9801e83267689cd2750226f2b08ce" - } - Frame { - msec: 3680 - hash: "5ddbc3bc10292bec41531e83c0921c59" - } - Frame { - msec: 3696 - hash: "4f3b79b341b63499a20f1e1e2cd979f9" - } - Frame { - msec: 3712 - hash: "e8d98ec2d13ef4324feba11be95d0735" - } - Frame { - msec: 3728 - hash: "5e3c58e2f3a57f4ea48f4315d37ed813" - } - Frame { - msec: 3744 - hash: "3f200fca4815d555f22912d9fcdc20ee" - } - Frame { - msec: 3760 - hash: "0901c99f959d6c10a0b6ea46a282d8fd" - } - Frame { - msec: 3776 - hash: "a186b8e984c999e8609472a7a5fa0610" - } - Frame { - msec: 3792 - hash: "412a630348aa44d56f36f04982035e36" - } - Frame { - msec: 3808 - hash: "011c0bcca7717b08bc53738718203f7e" - } - Frame { - msec: 3824 - hash: "e531d33ef14b58ad843a6be6d7cb0961" - } - Frame { - msec: 3840 - image: "resolution.3.png" - } - Frame { - msec: 3856 - hash: "8df8dd33eada434231332b81e03430ce" - } - Frame { - msec: 3872 - hash: "2aaa3749f93734dd203e1fea91a9f24a" - } - Frame { - msec: 3888 - hash: "dc78b09e27bbc0a2cfec83436eef4446" - } - Frame { - msec: 3904 - hash: "9053a92e343ebb79bd2831f5ab94a1b5" - } - Frame { - msec: 3920 - hash: "649ad1a3fb57fb088e4e5cfd749bf2e5" - } - Frame { - msec: 3936 - hash: "3579849956c1101000ef09949aa4c0f9" - } - Frame { - msec: 3952 - hash: "7af041898748bb5950643b057ca59eea" - } - Frame { - msec: 3968 - hash: "30a191ae899121ae22d10acee6593415" - } - Frame { - msec: 3984 - hash: "369f761053d5910e00672aa866f698ba" - } - Frame { - msec: 4000 - hash: "1f189a436cf74ae83a03c3bb63c24ec2" - } - Frame { - msec: 4016 - hash: "ac1d9c1cc13813b5e94c692a209a4e36" - } - Frame { - msec: 4032 - hash: "f0e0b5c041bcf38d8d9144d466ad74a9" - } - Frame { - msec: 4048 - hash: "38a35c94ebcf33f6720fea33821a54e1" - } - Frame { - msec: 4064 - hash: "061d139f43a3dd63daf887b82721f42f" - } - Frame { - msec: 4080 - hash: "623747b5fe99e5ffaa62f4daa3f840ef" - } - Frame { - msec: 4096 - hash: "4dd5081a387ffda296811b64b9235d7d" - } - Frame { - msec: 4112 - hash: "1598cf2fe996f99ab4c15f84d89cd7bd" - } - Frame { - msec: 4128 - hash: "30cac85bf1a622d438a64b6ccb59a8ca" - } - Frame { - msec: 4144 - hash: "114e54ae3e1493750a022f1c019e7f77" - } - Frame { - msec: 4160 - hash: "a585efc3aae3a426e6af5f4a8cc23b10" - } - Frame { - msec: 4176 - hash: "c0f315549baad93dd885d58b185e7ed7" - } - Frame { - msec: 4192 - hash: "3a00f5f034bef58ca341bf9e1056f46f" - } - Frame { - msec: 4208 - hash: "b3022d07dee989499a35aea21e07e4c1" - } - Frame { - msec: 4224 - hash: "e722464809e94fb7d8c752506f0d3ac2" - } - Frame { - msec: 4240 - hash: "82ea3d06367ce9dc582dbdbc186cc70a" - } - Frame { - msec: 4256 - hash: "359040facbe531c7f6b805b8bfc5b17a" - } - Frame { - msec: 4272 - hash: "264c7b65bae7e3945d87c17edfda6889" - } - Frame { - msec: 4288 - hash: "d941ec8e363942af02f36d4672521801" - } - Frame { - msec: 4304 - hash: "e46e145b4d07d1697c1d9efce80c80de" - } - Frame { - msec: 4320 - hash: "d8bed5c42bc5725d811db4dacdab1581" - } - Frame { - msec: 4336 - hash: "aa221160b4a11b30cb73eaa8ccaa9dfd" - } - Frame { - msec: 4352 - hash: "f411483477906d83f872b306cd021406" - } - Frame { - msec: 4368 - hash: "d9c52e4f99416fa1043a9c34a1c29f5a" - } - Frame { - msec: 4384 - hash: "ec2890446f34b8a5d47ae97ba2853d0f" - } - Frame { - msec: 4400 - hash: "6a3e6ef7d832fa7ec813b38171cb3602" - } - Frame { - msec: 4416 - hash: "6dfd75b6cb780f7d80466f3450d0b255" - } - Frame { - msec: 4432 - hash: "170774843dc6f28f51f07c445e046bd8" - } - Frame { - msec: 4448 - hash: "eab348bef656739d9723d3bd659c43ff" - } - Frame { - msec: 4464 - hash: "f06e546bb710002cdf1cefd51ffa47c4" - } - Frame { - msec: 4480 - hash: "52f7ff1348d9aa7cdf43cd81f0a71625" - } - Frame { - msec: 4496 - hash: "55a5b1befa3b7a4674a62d492b5527ea" - } - Frame { - msec: 4512 - hash: "699c093fddc6b9293a011d8d6eccd36d" - } - Frame { - msec: 4528 - hash: "b988e1ad7dc7d26ffeea8f71a69a9abf" - } - Frame { - msec: 4544 - hash: "8dea2b47492f83f961a47536a10aad0c" - } - Frame { - msec: 4560 - hash: "925ea8105779ffd801a3c62129d64bed" - } - Frame { - msec: 4576 - hash: "aa5d957c4f452b1f1c70ea672ce4a0b9" - } - Frame { - msec: 4592 - hash: "85d3ea97a1fb152ae8ad65a17693a16d" - } - Frame { - msec: 4608 - hash: "069b2bc8b86f822c5e7ceca3664e78a6" - } - Frame { - msec: 4624 - hash: "209071b7f72d8c25b9ce27c05397fe56" - } - Frame { - msec: 4640 - hash: "068dea708612620d34bd57c6affb44b1" - } - Frame { - msec: 4656 - hash: "36b53a0845220645059fed803a6ffcbc" - } - Frame { - msec: 4672 - hash: "2c84e15006a39a554eb2047bae9d4f6f" - } - Frame { - msec: 4688 - hash: "1bdab31534f4b5a7e9d27ede3e9acb57" - } - Frame { - msec: 4704 - hash: "688689eeb584b0c74f0322af35857dd5" - } - Frame { - msec: 4720 - hash: "024939fea5b6c6f9d3e26a0abf42ae3c" - } - Frame { - msec: 4736 - hash: "2efb2f47c6f0be3743f0f4dc7a66b08e" - } - Frame { - msec: 4752 - hash: "4631f3756af880693d3654c16cbe47bb" - } - Frame { - msec: 4768 - hash: "2fd77649c1e1ade97534ef530ad05612" - } - Frame { - msec: 4784 - hash: "5d13517bac111c8af49c444d41a42ea1" - } - Frame { - msec: 4800 - image: "resolution.4.png" - } - Frame { - msec: 4816 - hash: "8bd8efe405a42730304dcc120a6e718c" - } - Frame { - msec: 4832 - hash: "a83c543977e3f1dd4c020375eb3273fd" - } - Frame { - msec: 4848 - hash: "c52f38469fec77afc7f0a44b992e3d0d" - } - Frame { - msec: 4864 - hash: "af645449d6ec3f42449ffc59193aaaa4" - } - Frame { - msec: 4880 - hash: "2eb982cf754c77c109158076957775ae" - } - Frame { - msec: 4896 - hash: "9bf2fd4a4e45f302b34b7f038937d3d7" - } - Frame { - msec: 4912 - hash: "5520e309d68c8eedf76a9392714a6150" - } - Frame { - msec: 4928 - hash: "9dcd043a25e33b788729c0a0531301e7" - } - Frame { - msec: 4944 - hash: "1475b9bcfe08c66135673f4284c9bbcd" - } - Frame { - msec: 4960 - hash: "9af1f355bcf4d5f05b42040ebba75e09" - } - Frame { - msec: 4976 - hash: "8b6e04980ea60ca2ff06053d35c06881" - } - Frame { - msec: 4992 - hash: "def466e377a44afc4b2a9a9ebb258f86" - } - Frame { - msec: 5008 - hash: "18f6d6f5a3fdaee0037580df0f4f9ef0" - } - Frame { - msec: 5024 - hash: "ae2579498558f6f93489999c7c82cbcd" - } - Frame { - msec: 5040 - hash: "623d8e756c2c131150554272df231bf9" - } - Frame { - msec: 5056 - hash: "c13146576229848b8a1e1b382fbf749d" - } - Frame { - msec: 5072 - hash: "f963a399aeea1d34ec3bd30a5b991035" - } - Frame { - msec: 5088 - hash: "45a4db021ba0a53ad783c14a3b66aa38" - } - Frame { - msec: 5104 - hash: "2031618470e3bb3a3435fe0e270a15d4" - } - Frame { - msec: 5120 - hash: "f7cc01c301f29110db8364fecc8751f1" - } - Frame { - msec: 5136 - hash: "2d366fa500257ec0a12863f3637d0c47" - } - Frame { - msec: 5152 - hash: "4ba700e7f9ffba4889ca26d903a63029" - } - Frame { - msec: 5168 - hash: "329bec5e3d6a131b4bd9a056659bdb3e" - } - Frame { - msec: 5184 - hash: "48f7356707cdbcb401c135207ee38821" - } - Frame { - msec: 5200 - hash: "5314e448affe60d193d07a784035ecce" - } - Frame { - msec: 5216 - hash: "c87e98becdf99c214ad4987985b4af07" - } - Frame { - msec: 5232 - hash: "ea81d2a967b619980d7e42937ec74668" - } - Frame { - msec: 5248 - hash: "845319d4e0f6ee97697e59c606220e7a" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml deleted file mode 100644 index 4aab708..0000000 --- a/tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml +++ /dev/null @@ -1,655 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "4e401b5ebff6e442fa108e94a5dba668" - } - Frame { - msec: 32 - hash: "c2f8551d0442d0736b71c54fc965562b" - } - Frame { - msec: 48 - hash: "4fc1ef611b24ec5737310859b12c83d3" - } - Frame { - msec: 64 - hash: "7df07aea83bc5c3213e7871854661820" - } - Frame { - msec: 80 - hash: "0ae4ee18cc675749f008b897fe35cc40" - } - Frame { - msec: 96 - hash: "0ae4ee18cc675749f008b897fe35cc40" - } - Frame { - msec: 112 - hash: "f5c917c7ca26bb916dd4df84eafc8e94" - } - Frame { - msec: 128 - hash: "0696257de0441666bd264f8db6383d15" - } - Frame { - msec: 144 - hash: "0b43fdee23346c30c60b822a20131cc3" - } - Frame { - msec: 160 - hash: "98dbd004cf4809dbc90bfa9272378644" - } - Frame { - msec: 176 - hash: "32d0e9005ebb9dfd410d348e336bcd93" - } - Frame { - msec: 192 - hash: "8a64b18006ad0bd2c373a2a9395ce52e" - } - Frame { - msec: 208 - hash: "7dc26fd658f626b8fe18545cf93dc4ec" - } - Frame { - msec: 224 - hash: "6712be93cf1ed2b7b202367418b6d2d7" - } - Frame { - msec: 240 - hash: "524840a3453af4e97ac82b559308cce3" - } - Frame { - msec: 256 - hash: "11436091b24c02af94dfa75a5fd1a001" - } - Frame { - msec: 272 - hash: "d3689b53474b4b26630d70ba01c057b4" - } - Frame { - msec: 288 - hash: "16e2b66f28ed80d80d9b5264d89624d5" - } - Frame { - msec: 304 - hash: "87636076959de7e5a0a8bd8b31354ed4" - } - Frame { - msec: 320 - hash: "a6916da6bfac27aa87d75da2bbb73f31" - } - Frame { - msec: 336 - hash: "58cfba3aae4bf54a5b445e0e34571d2d" - } - Frame { - msec: 352 - hash: "1475ae722afd169cc0c8e1fde39eb6b7" - } - Frame { - msec: 368 - hash: "14d08c2ca430631af8ede1013f4f4da0" - } - Frame { - msec: 384 - hash: "ace9db9112d147569dc0cf1a1b680d6c" - } - Frame { - msec: 400 - hash: "08bc6815601417f3731eaae398d0861d" - } - Frame { - msec: 416 - hash: "809870dfd9b05ce07170edd945348ddf" - } - Frame { - msec: 432 - hash: "5784deb0f3270cf7a0d0964cd9d31458" - } - Frame { - msec: 448 - hash: "2f06ee407e5175d4b954e31c39c9522c" - } - Frame { - msec: 464 - hash: "48a7dbed293fbbd5ea202190837a411f" - } - Frame { - msec: 480 - hash: "abf3d90803cfa12d35d2752be7ea02d8" - } - Frame { - msec: 496 - hash: "a60edcf8d792f93a839e6ddbafbf993f" - } - Frame { - msec: 512 - hash: "7e8dfe86ea0849022355b12578d4cb1a" - } - Frame { - msec: 528 - hash: "3c84122b0933ee870f178d39469e51e2" - } - Frame { - msec: 544 - hash: "25f463e91febf5b6d8819fd5010bc1c2" - } - Frame { - msec: 560 - hash: "d423a9bc912237d0f20b924849ba0cb1" - } - Frame { - msec: 576 - hash: "5bd3cc309a5fce6183654975543250b2" - } - Frame { - msec: 592 - hash: "4e401b5ebff6e442fa108e94a5dba668" - } - Frame { - msec: 608 - hash: "9a4bf1400da038f2088dd4c49403d852" - } - Frame { - msec: 624 - hash: "a37024356613bd5d678e0b2f7b8f5959" - } - Frame { - msec: 640 - hash: "4f37d72c10e51f68a2359086094da249" - } - Frame { - msec: 656 - hash: "6093bcb7673f8e58fe5a7b0143638822" - } - Frame { - msec: 672 - hash: "c272aeea2b9c450fbd732305ccc01b93" - } - Frame { - msec: 688 - hash: "6a4e2ee45b26037421e2a5f2d6ee517e" - } - Frame { - msec: 704 - hash: "d912afcbce6c9d879a07ffc3c51b36d1" - } - Frame { - msec: 720 - hash: "2578335ac6f21c8aec2c87515562c321" - } - Frame { - msec: 736 - hash: "5b77af55f0a723ba762d283f41e91c98" - } - Frame { - msec: 752 - hash: "b420fc71b22fa608a9c0cdbbbc61c447" - } - Frame { - msec: 768 - hash: "3f7a9cecf2a590e8728137fabfd3f5f3" - } - Frame { - msec: 784 - hash: "c51f12a2f438f137785c70e3af4922fd" - } - Frame { - msec: 800 - hash: "5d97175fc4d986e5b21758d4ac785025" - } - Frame { - msec: 816 - hash: "94f922f3460ad76cd05cb5b321977a94" - } - Frame { - msec: 832 - hash: "5747adbc4f0b22ed359793d72d3e7d1f" - } - Frame { - msec: 848 - hash: "255d1d45d3343972f156dfab7d13ce41" - } - Frame { - msec: 864 - hash: "e5b54132ffb83acad30622e969405bc0" - } - Frame { - msec: 880 - hash: "2c05cf00e3417883e789f58c2728dc97" - } - Frame { - msec: 896 - hash: "9d66290b1aae1de3025d24d3efc4ca1c" - } - Frame { - msec: 912 - hash: "5e9b0783b1b4221145a4febbae56b30f" - } - Frame { - msec: 928 - hash: "21eea497c26600b03d868661232b3ebe" - } - Frame { - msec: 944 - hash: "2383c415170ac6444f1c193ed698f682" - } - Frame { - msec: 960 - image: "zoomTextOnly.0.png" - } - Frame { - msec: 976 - hash: "4ed0f85dec4eb0bb740ac3780b6872c0" - } - Frame { - msec: 992 - hash: "0a18bccca4efeadfced8e5cb1715a1f3" - } - Frame { - msec: 1008 - hash: "823e65df9075eb0e9a3aad6b15ec3342" - } - Frame { - msec: 1024 - hash: "823e65df9075eb0e9a3aad6b15ec3342" - } - Frame { - msec: 1040 - hash: "0a18bccca4efeadfced8e5cb1715a1f3" - } - Frame { - msec: 1056 - hash: "4ed0f85dec4eb0bb740ac3780b6872c0" - } - Frame { - msec: 1072 - hash: "fae77663566351fa3bb506b459496a9d" - } - Frame { - msec: 1088 - hash: "2383c415170ac6444f1c193ed698f682" - } - Frame { - msec: 1104 - hash: "2e05365256bebbdf3229f99b94263b6c" - } - Frame { - msec: 1120 - hash: "5e9b0783b1b4221145a4febbae56b30f" - } - Frame { - msec: 1136 - hash: "9d66290b1aae1de3025d24d3efc4ca1c" - } - Frame { - msec: 1152 - hash: "2c05cf00e3417883e789f58c2728dc97" - } - Frame { - msec: 1168 - hash: "e5b54132ffb83acad30622e969405bc0" - } - Frame { - msec: 1184 - hash: "255d1d45d3343972f156dfab7d13ce41" - } - Frame { - msec: 1200 - hash: "5747adbc4f0b22ed359793d72d3e7d1f" - } - Frame { - msec: 1216 - hash: "94f922f3460ad76cd05cb5b321977a94" - } - Frame { - msec: 1232 - hash: "5d97175fc4d986e5b21758d4ac785025" - } - Frame { - msec: 1248 - hash: "c51f12a2f438f137785c70e3af4922fd" - } - Frame { - msec: 1264 - hash: "3f7a9cecf2a590e8728137fabfd3f5f3" - } - Frame { - msec: 1280 - hash: "b420fc71b22fa608a9c0cdbbbc61c447" - } - Frame { - msec: 1296 - hash: "5b77af55f0a723ba762d283f41e91c98" - } - Frame { - msec: 1312 - hash: "2578335ac6f21c8aec2c87515562c321" - } - Frame { - msec: 1328 - hash: "a9b5438bd48dbafd307d571877416003" - } - Frame { - msec: 1344 - hash: "6a4e2ee45b26037421e2a5f2d6ee517e" - } - Frame { - msec: 1360 - hash: "c272aeea2b9c450fbd732305ccc01b93" - } - Frame { - msec: 1376 - hash: "37c7e50c270e8feb4dd9018580284a85" - } - Frame { - msec: 1392 - hash: "4f37d72c10e51f68a2359086094da249" - } - Frame { - msec: 1408 - hash: "a37024356613bd5d678e0b2f7b8f5959" - } - Frame { - msec: 1424 - hash: "9a4bf1400da038f2088dd4c49403d852" - } - Frame { - msec: 1440 - hash: "4e401b5ebff6e442fa108e94a5dba668" - } - Frame { - msec: 1456 - hash: "5bd3cc309a5fce6183654975543250b2" - } - Frame { - msec: 1472 - hash: "d423a9bc912237d0f20b924849ba0cb1" - } - Frame { - msec: 1488 - hash: "25f463e91febf5b6d8819fd5010bc1c2" - } - Frame { - msec: 1504 - hash: "3c84122b0933ee870f178d39469e51e2" - } - Frame { - msec: 1520 - hash: "7e8dfe86ea0849022355b12578d4cb1a" - } - Frame { - msec: 1536 - hash: "a60edcf8d792f93a839e6ddbafbf993f" - } - Frame { - msec: 1552 - hash: "abf3d90803cfa12d35d2752be7ea02d8" - } - Frame { - msec: 1568 - hash: "48a7dbed293fbbd5ea202190837a411f" - } - Frame { - msec: 1584 - hash: "2f06ee407e5175d4b954e31c39c9522c" - } - Frame { - msec: 1600 - hash: "5784deb0f3270cf7a0d0964cd9d31458" - } - Frame { - msec: 1616 - hash: "809870dfd9b05ce07170edd945348ddf" - } - Frame { - msec: 1632 - hash: "08bc6815601417f3731eaae398d0861d" - } - Frame { - msec: 1648 - hash: "ace9db9112d147569dc0cf1a1b680d6c" - } - Frame { - msec: 1664 - hash: "14d08c2ca430631af8ede1013f4f4da0" - } - Frame { - msec: 1680 - hash: "1475ae722afd169cc0c8e1fde39eb6b7" - } - Frame { - msec: 1696 - hash: "58cfba3aae4bf54a5b445e0e34571d2d" - } - Frame { - msec: 1712 - hash: "a6916da6bfac27aa87d75da2bbb73f31" - } - Frame { - msec: 1728 - hash: "87636076959de7e5a0a8bd8b31354ed4" - } - Frame { - msec: 1744 - hash: "16e2b66f28ed80d80d9b5264d89624d5" - } - Frame { - msec: 1760 - hash: "d3689b53474b4b26630d70ba01c057b4" - } - Frame { - msec: 1776 - hash: "11436091b24c02af94dfa75a5fd1a001" - } - Frame { - msec: 1792 - hash: "524840a3453af4e97ac82b559308cce3" - } - Frame { - msec: 1808 - hash: "6712be93cf1ed2b7b202367418b6d2d7" - } - Frame { - msec: 1824 - hash: "7dc26fd658f626b8fe18545cf93dc4ec" - } - Frame { - msec: 1840 - hash: "8a64b18006ad0bd2c373a2a9395ce52e" - } - Frame { - msec: 1856 - hash: "32d0e9005ebb9dfd410d348e336bcd93" - } - Frame { - msec: 1872 - hash: "98dbd004cf4809dbc90bfa9272378644" - } - Frame { - msec: 1888 - hash: "0b43fdee23346c30c60b822a20131cc3" - } - Frame { - msec: 1904 - hash: "0696257de0441666bd264f8db6383d15" - } - Frame { - msec: 1920 - image: "zoomTextOnly.1.png" - } - Frame { - msec: 1936 - hash: "0ae4ee18cc675749f008b897fe35cc40" - } - Frame { - msec: 1952 - hash: "0ae4ee18cc675749f008b897fe35cc40" - } - Frame { - msec: 1968 - hash: "7df07aea83bc5c3213e7871854661820" - } - Frame { - msec: 1984 - hash: "4fc1ef611b24ec5737310859b12c83d3" - } - Frame { - msec: 2000 - hash: "c2f8551d0442d0736b71c54fc965562b" - } - Frame { - msec: 2016 - hash: "4ec29787e437f9619ce0f0a0f4889d0f" - } - Frame { - msec: 2032 - hash: "c2f8551d0442d0736b71c54fc965562b" - } - Frame { - msec: 2048 - hash: "4fc1ef611b24ec5737310859b12c83d3" - } - Frame { - msec: 2064 - hash: "7df07aea83bc5c3213e7871854661820" - } - Frame { - msec: 2080 - hash: "0ae4ee18cc675749f008b897fe35cc40" - } - Frame { - msec: 2096 - hash: "0ae4ee18cc675749f008b897fe35cc40" - } - Frame { - msec: 2112 - hash: "f5c917c7ca26bb916dd4df84eafc8e94" - } - Frame { - msec: 2128 - hash: "0696257de0441666bd264f8db6383d15" - } - Frame { - msec: 2144 - hash: "0b43fdee23346c30c60b822a20131cc3" - } - Frame { - msec: 2160 - hash: "98dbd004cf4809dbc90bfa9272378644" - } - Frame { - msec: 2176 - hash: "32d0e9005ebb9dfd410d348e336bcd93" - } - Frame { - msec: 2192 - hash: "8a64b18006ad0bd2c373a2a9395ce52e" - } - Frame { - msec: 2208 - hash: "7dc26fd658f626b8fe18545cf93dc4ec" - } - Frame { - msec: 2224 - hash: "6712be93cf1ed2b7b202367418b6d2d7" - } - Frame { - msec: 2240 - hash: "524840a3453af4e97ac82b559308cce3" - } - Frame { - msec: 2256 - hash: "11436091b24c02af94dfa75a5fd1a001" - } - Frame { - msec: 2272 - hash: "d3689b53474b4b26630d70ba01c057b4" - } - Frame { - msec: 2288 - hash: "16e2b66f28ed80d80d9b5264d89624d5" - } - Frame { - msec: 2304 - hash: "87636076959de7e5a0a8bd8b31354ed4" - } - Frame { - msec: 2320 - hash: "a6916da6bfac27aa87d75da2bbb73f31" - } - Frame { - msec: 2336 - hash: "58cfba3aae4bf54a5b445e0e34571d2d" - } - Frame { - msec: 2352 - hash: "1475ae722afd169cc0c8e1fde39eb6b7" - } - Frame { - msec: 2368 - hash: "14d08c2ca430631af8ede1013f4f4da0" - } - Frame { - msec: 2384 - hash: "ace9db9112d147569dc0cf1a1b680d6c" - } - Frame { - msec: 2400 - hash: "08bc6815601417f3731eaae398d0861d" - } - Frame { - msec: 2416 - hash: "809870dfd9b05ce07170edd945348ddf" - } - Frame { - msec: 2432 - hash: "5784deb0f3270cf7a0d0964cd9d31458" - } - Frame { - msec: 2448 - hash: "2f06ee407e5175d4b954e31c39c9522c" - } - Frame { - msec: 2464 - hash: "48a7dbed293fbbd5ea202190837a411f" - } - Frame { - msec: 2480 - hash: "abf3d90803cfa12d35d2752be7ea02d8" - } - Frame { - msec: 2496 - hash: "a60edcf8d792f93a839e6ddbafbf993f" - } - Frame { - msec: 2512 - hash: "7e8dfe86ea0849022355b12578d4cb1a" - } - Frame { - msec: 2528 - hash: "3c84122b0933ee870f178d39469e51e2" - } - Frame { - msec: 2544 - hash: "25f463e91febf5b6d8819fd5010bc1c2" - } - Frame { - msec: 2560 - hash: "d423a9bc912237d0f20b924849ba0cb1" - } - Frame { - msec: 2576 - hash: "5bd3cc309a5fce6183654975543250b2" - } - Frame { - msec: 2592 - hash: "4e401b5ebff6e442fa108e94a5dba668" - } -} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml deleted file mode 100644 index 080d4d0..0000000 --- a/tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml +++ /dev/null @@ -1,2115 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 32 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 48 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 64 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 80 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 96 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 112 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 128 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 144 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 160 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 176 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 192 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 208 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 224 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 240 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 256 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 272 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 288 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 304 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 320 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 336 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 352 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 197; y: 34 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 185; y: 34 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 368 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 169; y: 38 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 384 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 161; y: 40 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 400 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 155; y: 44 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 147; y: 46 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 416 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 141; y: 48 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 138; y: 48 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 432 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 130; y: 48 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 127; y: 48 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 448 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 125; y: 48 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 123; y: 48 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 464 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 480 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 121; y: 49 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 496 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 512 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 117; y: 53 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 116; y: 53 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 528 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 115; y: 54 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 544 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 113; y: 54 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 560 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 111; y: 53 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 111; y: 52 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 576 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 110; y: 50 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 592 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 109; y: 48 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 608 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 108; y: 46 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 624 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 108; y: 45 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 107; y: 44 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 640 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 106; y: 43 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 656 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 42 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 672 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 41 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 688 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 704 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 720 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 736 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 40 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 752 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 39 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 768 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 37 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 36 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 784 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 35 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 34 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 800 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 816 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 106; y: 33 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 832 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 848 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 864 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 880 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 896 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 106; y: 33 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 912 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 928 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 944 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 960 - image: "zooming.0.png" - } - Frame { - msec: 976 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 106; y: 33 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 992 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1008 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1024 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1040 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1056 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 4 - button: 1 - buttons: 1 - x: 106; y: 33 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1072 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1088 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1104 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1120 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 106; y: 33 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1136 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1152 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1168 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1184 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 106; y: 34 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 106; y: 36 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1200 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 105; y: 38 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1216 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 103; y: 44 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1232 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 102; y: 46 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 98; y: 50 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1248 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 94; y: 56 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 90; y: 62 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1264 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 88; y: 70 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 84; y: 78 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1280 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 84; y: 86 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 84; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1296 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 84; y: 104 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 86; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1312 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 88; y: 124 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 92; y: 136 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1328 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 94; y: 146 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 156 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1344 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 164 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 172 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1360 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 180 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 188 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1376 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 190 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 96; y: 193 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1392 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 95; y: 195 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 95; y: 197 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1408 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 95; y: 198 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 95; y: 200 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1424 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 94; y: 201 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 94; y: 202 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1440 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 94; y: 204 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1456 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 93; y: 205 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1472 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 92; y: 206 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1488 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 92; y: 208 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1504 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 92; y: 210 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1520 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 92; y: 211 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 212 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1536 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1552 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1568 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1584 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1600 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1616 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1632 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1648 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1664 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1680 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1696 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1712 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 214 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 91; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1728 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1744 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1760 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1776 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 91; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1792 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1808 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1824 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1840 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 4 - button: 1 - buttons: 1 - x: 91; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1856 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1872 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1888 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1904 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1920 - image: "zooming.1.png" - } - Frame { - msec: 1936 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 91; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 1952 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1968 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 1984 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2000 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2016 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2032 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2048 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2064 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2080 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2096 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2112 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2128 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 91; y: 212 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2144 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2160 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2176 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2192 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 89; y: 211 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2208 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 88; y: 211 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2224 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2240 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 86; y: 211 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2256 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 85; y: 211 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 84; y: 211 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2272 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 82; y: 211 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 80; y: 211 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2288 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 77; y: 211 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 75; y: 211 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2304 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 69; y: 213 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 66; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2320 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 64; y: 213 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2336 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 60; y: 213 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 58; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2352 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 56; y: 213 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 55; y: 212 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2368 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2384 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2400 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2416 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2432 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2448 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2464 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2480 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 56; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2496 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 58; y: 214 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 59; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2512 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 61; y: 215 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2528 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 63; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2544 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2560 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2576 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2592 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 64; y: 216 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 64; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2608 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2624 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2640 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2656 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2672 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 63; y: 216 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 63; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2688 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2704 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2720 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2736 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2752 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 4 - button: 1 - buttons: 1 - x: 62; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2768 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2784 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2800 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2816 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 62; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2832 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2848 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 2864 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 215 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2880 - image: "zooming.2.png" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 214 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2896 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 213 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2912 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 62; y: 212 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 63; y: 211 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2928 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 63; y: 209 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 64; y: 208 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2944 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 66; y: 202 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 70; y: 198 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2960 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 72; y: 192 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 74; y: 186 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2976 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 76; y: 180 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 80; y: 170 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2992 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 84; y: 162 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 88; y: 152 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3008 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 94; y: 142 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 98; y: 130 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3024 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 102; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 108; y: 108 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3040 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 112; y: 98 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 114; y: 90 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3056 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 120; y: 80 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 122; y: 72 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3072 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 126; y: 66 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 128; y: 58 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3088 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 132; y: 52 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 134; y: 46 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3104 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 136; y: 40 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 140; y: 32 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3120 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 144; y: 24 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 150; y: 18 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3136 - hash: "c98df558c41f1837398eead42392b780" - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 154; y: 10 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 0 - x: 160; y: 4 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 3152 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3168 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3184 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3200 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3216 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3232 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3248 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3264 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3280 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3296 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3312 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3328 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3344 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3360 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3376 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3392 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3408 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3424 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3440 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3456 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3472 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3488 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3504 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3520 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3536 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3552 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3568 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3584 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3600 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3616 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3632 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3648 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3664 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3680 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3696 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3712 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3728 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3744 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3760 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3776 - hash: "c98df558c41f1837398eead42392b780" - } - Frame { - msec: 3792 - hash: "c98df558c41f1837398eead42392b780" - } -} -- cgit v0.12 From 03fa1fb439456428da883133d26038409462aca6 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 14:32:58 +1000 Subject: Almost all visual tests pass on linux Still looking into text/fonts/plaintext which just developed an issue. Task-number: QTBUG-14792 --- .../qmlvisual/ListView/data/listview.qml | 3079 -------------------- .../declarative/qmlvisual/ListView/listview.qml | 1 + tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 2 +- .../webview/autosize/data-X11/autosize.qml | 115 - 4 files changed, 2 insertions(+), 3195 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.qml delete mode 100644 tests/auto/declarative/qmlvisual/webview/autosize/data-X11/autosize.qml diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml deleted file mode 100644 index bf64029..0000000 --- a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml +++ /dev/null @@ -1,3079 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 32 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 48 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 64 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 80 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 96 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 112 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 128 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 144 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 160 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 176 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 192 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 208 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 224 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 240 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 256 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 272 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 288 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 304 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 320 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 336 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 352 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 368 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 384 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 400 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 416 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 432 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 448 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 464 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 480 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 496 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 512 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 528 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 544 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 560 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 576 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 592 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 608 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 624 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 640 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 656 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 672 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 688 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 704 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 720 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 736 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 752 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 768 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 784 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 800 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 816 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 832 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 848 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 864 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 880 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 896 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 912 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 928 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 944 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 960 - image: "listview.0.png" - } - Frame { - msec: 976 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 992 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1008 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1024 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1040 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1056 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1072 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1088 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1104 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1120 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1136 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1152 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1168 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1184 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1200 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1216 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1232 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1248 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1264 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1280 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1296 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1312 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1328 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1344 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1360 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1376 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1392 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1408 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1424 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1440 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1456 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1472 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1488 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1504 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1520 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1536 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1552 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1568 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1584 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1600 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1616 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1632 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1648 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1664 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1680 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1696 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1712 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1728 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1744 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1760 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1776 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1792 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1808 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1824 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1840 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1856 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1872 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1888 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1904 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1920 - image: "listview.1.png" - } - Frame { - msec: 1936 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1952 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1968 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 1984 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2000 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2016 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2032 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2048 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2064 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2080 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2096 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2112 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2128 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2144 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2160 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2176 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2192 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2208 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2224 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2240 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2256 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2272 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2288 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2304 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2320 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2336 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2352 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2368 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2384 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2400 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2416 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2432 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2448 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2464 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2480 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2496 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2512 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2528 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2544 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2560 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2576 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2592 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 553; y: 267 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2608 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 2624 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 554; y: 267 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 555; y: 266 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2640 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 556; y: 265 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 558; y: 260 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2656 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 560; y: 256 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2672 - hash: "c315e184c4dcb11d7e9fd4509a8b6a1f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 562; y: 250 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 566; y: 234 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2688 - hash: "aeef1cacca9518408519b670443e396f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 568; y: 216 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2704 - hash: "621626927f83bf7b36b78f5ca7ed4ed0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 572; y: 192 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 572; y: 192 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 2720 - hash: "b2aca965b745e98365195c52b9dd9a2c" - } - Frame { - msec: 2736 - hash: "b80cc493e604c42aca2367e26bc9e844" - } - Frame { - msec: 2752 - hash: "39165ad87fc687e0f165f8a2675173b5" - } - Frame { - msec: 2768 - hash: "edd1da7c34c3eb7f1f16b782dfa41a13" - } - Frame { - msec: 2784 - hash: "d31a7915cdb2a7f392e6edc3047a6606" - } - Frame { - msec: 2800 - hash: "3038dbb3fe3c255adcbecfc106bacb99" - } - Frame { - msec: 2816 - hash: "454137c508d76f2c38b8007247420b81" - } - Frame { - msec: 2832 - hash: "16eb385d3ce3b186745974500f855a97" - } - Frame { - msec: 2848 - hash: "8871fded1fbbdcb0fdfdaa2e6eecc3d1" - } - Frame { - msec: 2864 - hash: "f49955dab8341e7ca472c3f547cbeaab" - } - Frame { - msec: 2880 - image: "listview.2.png" - } - Frame { - msec: 2896 - hash: "c0ef41c682fa9802c9eb74fd249cfd40" - } - Frame { - msec: 2912 - hash: "6174fea6ef04fbcefd32d6a0b35a3514" - } - Frame { - msec: 2928 - hash: "7b2288a8be7b3c465e725aeb5788e91f" - } - Frame { - msec: 2944 - hash: "b39d8cb650ee00c245b556235843490b" - } - Frame { - msec: 2960 - hash: "9478ea0bf640924931d627cd8b607eba" - } - Frame { - msec: 2976 - hash: "39743788f56c6f5c29fa9549e586d1ae" - } - Frame { - msec: 2992 - hash: "ec8ab3547e10d18e9493b8fae5125591" - } - Frame { - msec: 3008 - hash: "169b115d03db8c901db4f4c2909a18d3" - } - Frame { - msec: 3024 - hash: "bf438b17a1e8df6d6bb05474cacd12a7" - } - Frame { - msec: 3040 - hash: "2aad06334128659e143c4c6c8415a30b" - } - Frame { - msec: 3056 - hash: "ea0e8d7387b9b54a47bb99c058093462" - } - Frame { - msec: 3072 - hash: "e483e585399a47490599ca265cf73000" - } - Frame { - msec: 3088 - hash: "43bed4aac1a2a9b66eafefc117424500" - } - Frame { - msec: 3104 - hash: "ba5c36add368938f8134a0a88e599c00" - } - Frame { - msec: 3120 - hash: "c905be5276a871bd1ac392580231c9e4" - } - Frame { - msec: 3136 - hash: "0c96d9b0119513c1f327f9e6651e89cd" - } - Frame { - msec: 3152 - hash: "c4ba0836dbb900600f8f4aed42eb1ea1" - } - Frame { - msec: 3168 - hash: "253d014f89a616032664f29f268cfd85" - } - Frame { - msec: 3184 - hash: "a5185192d7db7c4a4c8bec6cb5a2a73a" - } - Frame { - msec: 3200 - hash: "d453cc5b89d3fa00586cc41d5a9a8092" - } - Frame { - msec: 3216 - hash: "b3c39c0c06643612681b098101458d32" - } - Frame { - msec: 3232 - hash: "09beec410a0ca7c47fe08991341aea0c" - } - Frame { - msec: 3248 - hash: "c13c269b384029d04a05fd0170e5909e" - } - Frame { - msec: 3264 - hash: "cafe360c512ab92804dc1fddae9b8fb6" - } - Frame { - msec: 3280 - hash: "26dfe538a7edc8f43af1d78e678f3dfa" - } - Frame { - msec: 3296 - hash: "11e03f6901a4bdbc1eabe72b1ddbee4b" - } - Frame { - msec: 3312 - hash: "0ea8886b1256649665a1597f62cc633b" - } - Frame { - msec: 3328 - hash: "013c34be077fb689333df9b04a931b3a" - } - Frame { - msec: 3344 - hash: "d0e9f1d147e0767c12a89f33b5f2b5b3" - } - Frame { - msec: 3360 - hash: "9888bf29cd868bad6b2593842413b283" - } - Frame { - msec: 3376 - hash: "d8ec307a85cecaacaa908ceb34d5db5b" - } - Frame { - msec: 3392 - hash: "4afe1df3e802b41d1b89b5fab4e35190" - } - Frame { - msec: 3408 - hash: "e8f484ed8d2a6745ee87ac9544281d55" - } - Frame { - msec: 3424 - hash: "48eaa0644a27cb3e53c75bd0ce08bf47" - } - Frame { - msec: 3440 - hash: "f1523d82dfc5c136fbe8746449bb5013" - } - Frame { - msec: 3456 - hash: "d664786f1a79f851e72aa48ee6736374" - } - Frame { - msec: 3472 - hash: "e43bb6d0374c8bab67b5fafcaeb2a205" - } - Frame { - msec: 3488 - hash: "77ef61827c993b16691a023e99cc7f7e" - } - Frame { - msec: 3504 - hash: "6198e0d242db79e81fb81f621c78a3c9" - } - Frame { - msec: 3520 - hash: "a66b4773ef05ca78aa12e2c8a151c53a" - } - Frame { - msec: 3536 - hash: "52fa0b693c3de208e5943521eef5587c" - } - Frame { - msec: 3552 - hash: "0e237f706f9c2c4c616271f9b9d014e5" - } - Frame { - msec: 3568 - hash: "14edd1dc2371a9aadaa3c079d325fab6" - } - Frame { - msec: 3584 - hash: "1fe873b07ee24edaea224939e10830f1" - } - Frame { - msec: 3600 - hash: "30804b5eb2a6d99116475cbdc1a9c043" - } - Frame { - msec: 3616 - hash: "c892c17ec947a910b74f5b8704405e9f" - } - Frame { - msec: 3632 - hash: "696029b77512943001c9eba64191e633" - } - Frame { - msec: 3648 - hash: "4c26bb0ca28d74a2bb79d0bfc8127361" - } - Frame { - msec: 3664 - hash: "2d1539db88647d73b9c53cde7c424dd7" - } - Frame { - msec: 3680 - hash: "fd20e4259b44357c93f22f35c698fe1b" - } - Frame { - msec: 3696 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3712 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3728 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3744 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3760 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3776 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3792 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3808 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3824 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3840 - image: "listview.3.png" - } - Frame { - msec: 3856 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3872 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3888 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3904 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3920 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3936 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3952 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3968 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 3984 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4000 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4016 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4032 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4048 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4064 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4080 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4096 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4112 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4128 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Frame { - msec: 4144 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 521; y: 24 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4160 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 25 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4176 - hash: "5d49efe1383065f0b88f1bfdbbe5e165" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 32 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 37 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4192 - hash: "a5df688148c264de1d376c9b87ddfa6b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 46 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4208 - hash: "a4e2c1878b0afce0ee1eebd63e9c951a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 66 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4224 - hash: "2f9a79278d492790ef86a09c77e95ff4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 531; y: 136 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 531; y: 136 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 4240 - hash: "5b5ce7206b26528157c426f4e1e3e0a8" - } - Frame { - msec: 4256 - hash: "65a1e5f81ab89b163aed46b984cca45e" - } - Frame { - msec: 4272 - hash: "e28253ad5a2415251b68bcda1d7d4bd0" - } - Frame { - msec: 4288 - hash: "71aae5abb4a9e9077053ea21dd3ec315" - } - Frame { - msec: 4304 - hash: "33fcea38fc3b328b3294f9ac2a26aa1a" - } - Frame { - msec: 4320 - hash: "6299eb1d87f371966307668b92de6a0b" - } - Frame { - msec: 4336 - hash: "4f66d8c7cb6971d0fc24089d123c547b" - } - Frame { - msec: 4352 - hash: "d9906d61b31fabf968290ebcd6688f34" - } - Frame { - msec: 4368 - hash: "5a1945993ff8096ba6b933d45586044a" - } - Frame { - msec: 4384 - hash: "331535e54da9bbdbc2fbf2b244ad0199" - } - Frame { - msec: 4400 - hash: "4dc39de0c54f6e0b77f94f6ae6c345ec" - } - Frame { - msec: 4416 - hash: "ec309a298ce246c13eb666488eb75016" - } - Frame { - msec: 4432 - hash: "a133819f8adc6265eb0e438261c869e3" - } - Frame { - msec: 4448 - hash: "da4d64fd6b3ae7d49ee5c5c8d0117a37" - } - Frame { - msec: 4464 - hash: "620dd1c3fc41ce657eac9d1a5b765fd4" - } - Frame { - msec: 4480 - hash: "ff1c370bd1bf75a98ae7125e7dd5a9db" - } - Frame { - msec: 4496 - hash: "59c6e4297109b5cc7c197749867dddae" - } - Frame { - msec: 4512 - hash: "91b1719e86529d0c35a53a2d0a095dd6" - } - Frame { - msec: 4528 - hash: "2994663d35c9eb453a27c1a1fa9aeeb8" - } - Frame { - msec: 4544 - hash: "ae4ec37b9f6a00b3c9139e5cfe13d32e" - } - Frame { - msec: 4560 - hash: "a98340236d1b65f47e88684168c1429d" - } - Frame { - msec: 4576 - hash: "34848b483ea6a2bd412e29d26beb3ab0" - } - Frame { - msec: 4592 - hash: "dd9bae0e2fca84b265d8cb59686ff88d" - } - Frame { - msec: 4608 - hash: "18b6ef6f5913b0612b76e7b2e25073dd" - } - Frame { - msec: 4624 - hash: "9398aab9478279aed1bc40c9378f8da4" - } - Frame { - msec: 4640 - hash: "a297a304c12102f23bd1e0f0207e0df9" - } - Frame { - msec: 4656 - hash: "091db9138cd6ae801ad857105a83c8f9" - } - Frame { - msec: 4672 - hash: "253938ca4a4f13433ddd502eb94cb7cd" - } - Frame { - msec: 4688 - hash: "6002df1793d290e4e31ee0c91c37bbe6" - } - Frame { - msec: 4704 - hash: "212476fa1c3a52fb8eba03ec3aecdcd8" - } - Frame { - msec: 4720 - hash: "80d4d8434d4e96a2bc23f5ed060d6ddc" - } - Frame { - msec: 4736 - hash: "2d4add725f31a04558635ce4b73a758a" - } - Frame { - msec: 4752 - hash: "57c06022ec1e502c4f49f43063c433e7" - } - Frame { - msec: 4768 - hash: "8393e97990993f9d5f68ea65f8e4a2db" - } - Frame { - msec: 4784 - hash: "9a1fcd96dffaf5c79ecc7f9427e02499" - } - Frame { - msec: 4800 - image: "listview.4.png" - } - Frame { - msec: 4816 - hash: "5ae722cf541e3453e73bbee57dc379e9" - } - Frame { - msec: 4832 - hash: "fc7326c2e2e56d9c3036e8dfc2ea77a8" - } - Frame { - msec: 4848 - hash: "f22a2a68cea158f333b0457025d75490" - } - Frame { - msec: 4864 - hash: "d684c8aa9b835779080f170cafead40f" - } - Frame { - msec: 4880 - hash: "dd451e5e421f929d015981bc7aeb8c66" - } - Frame { - msec: 4896 - hash: "d066f228295db7f46520495167d3e946" - } - Frame { - msec: 4912 - hash: "ebf640a457e3498bade3220aafa70331" - } - Frame { - msec: 4928 - hash: "190f5b1f3ce9d200790c34c50bcc62c5" - } - Frame { - msec: 4944 - hash: "9d4ad865246eb008afa40740b5c9a208" - } - Frame { - msec: 4960 - hash: "81c8b2c0b4f9e74f24d328a1d9b40a9f" - } - Frame { - msec: 4976 - hash: "24acc300307e71bee79bce8de76f56cb" - } - Frame { - msec: 4992 - hash: "1f9d31f94cfce6f868bfcc8a104d2465" - } - Frame { - msec: 5008 - hash: "7a3cab008dcb7a893ae30797b33df6f2" - } - Frame { - msec: 5024 - hash: "38d561a2950434e59513439c7f1120ea" - } - Frame { - msec: 5040 - hash: "8d34131faa15bc126bd4d9ef3be39ef5" - } - Frame { - msec: 5056 - hash: "85d57ef15791b56deb537795dd87911e" - } - Frame { - msec: 5072 - hash: "71e932169915a6c8c2cef0b22febf316" - } - Frame { - msec: 5088 - hash: "8b3452981963aeebadc9ac2013150263" - } - Frame { - msec: 5104 - hash: "a3fb8abecfeb48ba1cd1fd8f40896fa0" - } - Frame { - msec: 5120 - hash: "f53ab533f6a58ae45139f3da4bf8ab4e" - } - Frame { - msec: 5136 - hash: "9ec7012404f3c1c7795810dcee5acc3b" - } - Frame { - msec: 5152 - hash: "99ca43bab532dd5d7566e596c65053ce" - } - Frame { - msec: 5168 - hash: "0af83ad2416821cc230cd2856d1a3e39" - } - Frame { - msec: 5184 - hash: "86fa23ddf2005bbf35238ae04ae554ac" - } - Frame { - msec: 5200 - hash: "bb52a748f1d85dde410cfa4f24e3ed20" - } - Frame { - msec: 5216 - hash: "898b96bc5ee9a3ac61764e5cd9af8cfb" - } - Frame { - msec: 5232 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5248 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5264 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5280 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5296 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5312 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5328 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5344 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5360 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5376 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5392 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5408 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5424 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5440 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5456 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5472 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5488 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5504 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5520 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5536 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5552 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5568 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5584 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5600 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5616 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5632 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5648 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5664 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5680 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5696 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5712 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5728 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5744 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5760 - image: "listview.5.png" - } - Frame { - msec: 5776 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5792 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5808 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5824 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5840 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5856 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5872 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5888 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5904 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5920 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5936 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5952 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Frame { - msec: 5968 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 111; y: 230 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 227 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5984 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 223 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6000 - hash: "3b88645092be28037fca4a6034f5b2f7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 216 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 210 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6016 - hash: "0076b55d3da4ca365688b6a2c984103f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 112; y: 205 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6032 - hash: "db846ad8e3200ca1fce36a38dc7beab8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 112; y: 192 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6048 - hash: "3cb6b25725b4285f9c096d595224c5ca" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 111; y: 180 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6064 - hash: "1832e12fdf3b464b02b296e727b33694" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 110; y: 173 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6080 - hash: "6d18d2b5f65cbba4915d0725d24b40f3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 109; y: 158 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 107; y: 140 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6096 - hash: "79bc7afc6b1aa5f8904b3e6d5d4a9389" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 124 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6112 - hash: "4436f2d15304c839aacec486c1fd6d96" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 111 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6128 - hash: "c3bffc7c95893cf9bbd8596208b7f657" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 105 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6144 - hash: "04231c2fdc02729aa34ed4e403dd373b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6160 - hash: "392d75c4b372825e78366eb63a618170" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 87 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 83 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6176 - hash: "7f91f7bdb0cb62d600ac4aa573681fe3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 79 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6192 - hash: "69207181a382650c5e33145555f0d9ba" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 76 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 72 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6208 - hash: "65a184b5c49b02e08114e437483f928d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 104; y: 68 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 105; y: 64 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6224 - hash: "c22da9ce54d04f51fb55da755753a509" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 105; y: 61 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6240 - hash: "59dbd5216847a62f60a1d0701a15bb62" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 57 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 53 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6256 - hash: "bbfc902db6e6ca253afb1c90306b2a63" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 47 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 106; y: 47 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6272 - hash: "5c41f194afec5f7e3db9d98673d03d5c" - } - Frame { - msec: 6288 - hash: "5c41f194afec5f7e3db9d98673d03d5c" - } - Frame { - msec: 6304 - hash: "deb06d0f915d5f6ec39b1820d57b6af6" - } - Frame { - msec: 6320 - hash: "deb06d0f915d5f6ec39b1820d57b6af6" - } - Frame { - msec: 6336 - hash: "2a1a1f9239a6ccb308e51796f9b0bb89" - } - Frame { - msec: 6352 - hash: "3c1b44201616b8271023bf05a3f3f0f7" - } - Frame { - msec: 6368 - hash: "87afcef49db8b2b547e85e834f8ec304" - } - Frame { - msec: 6384 - hash: "290081b4b1272ef09ec9964c128e61b5" - } - Frame { - msec: 6400 - hash: "19bb3b23ee4b14a5f0a313106ef7c8c1" - } - Frame { - msec: 6416 - hash: "65a184b5c49b02e08114e437483f928d" - } - Frame { - msec: 6432 - hash: "832d2aefbcaf776f35039be527d367c5" - } - Frame { - msec: 6448 - hash: "69207181a382650c5e33145555f0d9ba" - } - Frame { - msec: 6464 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6480 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6496 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6512 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6528 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6544 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6560 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6576 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6592 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6608 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6624 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6640 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6656 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6672 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6688 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6704 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6720 - image: "listview.6.png" - } - Frame { - msec: 6736 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6752 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6768 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6784 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6800 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6816 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6832 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6848 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6864 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6880 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6896 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6912 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6928 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6944 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6960 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6976 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 6992 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7008 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7024 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7040 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7056 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7072 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7088 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7104 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7120 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7136 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7152 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7168 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7184 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7200 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7216 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7232 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7248 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7264 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7280 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Frame { - msec: 7296 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 519; y: 276 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7312 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 519; y: 275 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7328 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 519; y: 274 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7344 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 273 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 272 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7360 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 271 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7376 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 268 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7392 - hash: "89fe95733476bd000457e36ee4ecfc73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 266 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 265 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7408 - hash: "9047f597b9e59ca652c172338bed6ef9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 262 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7424 - hash: "87476f78daecd6bb49e8d6e673d28100" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 260 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7440 - hash: "6bfd895c6b7d97e4102eb26608cdfeca" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 254 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7456 - hash: "e4c2b75beaee54a5781a5acbeb37ea64" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 249 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7472 - hash: "d5e816768e9c3db0631416bd86b1b461" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 243 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7488 - hash: "22cb512b302afc6c3c9dec1d47b3bf03" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 237 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7504 - hash: "a7e458e007954bd908cf27a1841d36ea" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 231 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7520 - hash: "0f9fa53b247f72e9a8ff6201b188b410" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 225 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7536 - hash: "c986ea3853dd33f7f2b5629f67429423" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 517; y: 219 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7552 - hash: "114ffaa5cf38e4884a1d477884541b44" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 518; y: 215 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7568 - hash: "7cdf1bb327484618909ded5411aca4ec" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 519; y: 208 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7584 - hash: "d4c005194ed510f5d54a811176943dc2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 520; y: 202 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7600 - hash: "3103351bc83675c877fb6dcd1a6ddbbc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 196 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7616 - hash: "2c13ddda8d89501c9487b83f8b115570" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 189 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7632 - hash: "476834b6d88077f9983ed358c06bd0c3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 185 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7648 - hash: "cc2148c6a7ba0bbe6ceea848b7e48621" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 177 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7664 - hash: "5b8824848dd1de3632b26e04e95b5899" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 169 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7680 - image: "listview.7.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 160 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7696 - hash: "d0a4a8b631e3494043f261fb8da67938" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 156 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7712 - hash: "985111215c3959a45b293879af701318" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 147 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7728 - hash: "ed5917a3fe95777f2efdaa154af0c489" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 144 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7744 - hash: "6fa9de2983f0e30cb96c035c28757b93" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 137 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7760 - hash: "fd568c7d27618a71b0f0882ca57b685b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 130 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7776 - hash: "f5b941f5741a9a78122605576809c395" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 124 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7792 - hash: "ffc96a85d7dbbed257b69a0c735e21b8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 122 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7808 - hash: "cfb6335c5449554e631d6e3106ea8a00" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7824 - hash: "ff9786e85ee8af6177ac8e5cc1307462" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 111 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7840 - hash: "3140b49dfee8e690b5c778044385e107" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 106 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7856 - hash: "0d899af24685a9998a6b961023286fde" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7872 - hash: "99ee1e8803c05e546a721b0c9ee39499" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 101 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7888 - hash: "96e7da2f895500a786ed36cb295e9003" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7904 - hash: "cd369fc5dc31814208e56cf7cd0decea" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 521; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7920 - hash: "5fee72994b65a45b4900a3073f86a3e1" - } - Frame { - msec: 7936 - hash: "9a2f8a65d842b8f92998e6411f7cd53c" - } - Frame { - msec: 7952 - hash: "2848d69017ce71ae101ccdfa7c67f933" - } - Frame { - msec: 7968 - hash: "6568aa88e81f988f65da435df7166167" - } - Frame { - msec: 7984 - hash: "d5f15ee08a2d7667786757a378a7a7f4" - } - Frame { - msec: 8000 - hash: "9b566bd02a561b32d1a4c1ec99c2e2c3" - } - Frame { - msec: 8016 - hash: "580419e1c9e91046547d913f6b8790a4" - } - Frame { - msec: 8032 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Frame { - msec: 8048 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Frame { - msec: 8064 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 521; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8080 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Frame { - msec: 8096 - hash: "a5a3cd610ec0b35af1295ee6c41e09e3" - } - Frame { - msec: 8112 - hash: "83b91a371d682a501bc3a3fceabe4f8c" - } - Frame { - msec: 8128 - hash: "798b1dbfa0cce362213f426e2c60ac0e" - } - Frame { - msec: 8144 - hash: "d71b6a693c430a618c23413cb65bb320" - } - Frame { - msec: 8160 - hash: "2baae394390da39447a67151bc503d65" - } - Frame { - msec: 8176 - hash: "06688b05c61a7b862d39534207a8adab" - } - Frame { - msec: 8192 - hash: "a1d3042e16709817906dcdc673ee52c7" - } - Frame { - msec: 8208 - hash: "236dd41feac1b1a8a4bd7911bb184da2" - } - Frame { - msec: 8224 - hash: "f3ec821bba1d32e90bdab0e85c07d7d8" - } - Frame { - msec: 8240 - hash: "e328c35adf7ffc3d7e3af97e798ec8a5" - } - Frame { - msec: 8256 - hash: "651101db68fd3ed1dc5f441c126dc31b" - } - Frame { - msec: 8272 - hash: "651101db68fd3ed1dc5f441c126dc31b" - } - Frame { - msec: 8288 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8304 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8320 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8336 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8352 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8368 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8384 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8400 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8416 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8432 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8448 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8464 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8480 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8496 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8512 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8528 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8544 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8560 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8576 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8592 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8608 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8624 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8640 - image: "listview.8.png" - } - Frame { - msec: 8656 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8672 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8688 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8704 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8720 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8736 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8752 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8768 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8784 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8800 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8816 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8832 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8848 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8864 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8880 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8896 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8912 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8928 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8944 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8960 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8976 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 8992 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9008 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9024 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9040 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9056 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9072 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9088 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9104 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9120 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9136 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9152 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9168 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9184 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9200 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9216 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9232 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9248 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9264 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9280 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9296 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9312 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9328 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9344 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9360 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9376 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9392 - hash: "1171be123a361d72859c25434573482c" - } - Frame { - msec: 9408 - hash: "1171be123a361d72859c25434573482c" - } -} diff --git a/tests/auto/declarative/qmlvisual/ListView/listview.qml b/tests/auto/declarative/qmlvisual/ListView/listview.qml index 7e7af59..35ec982 100644 --- a/tests/auto/declarative/qmlvisual/ListView/listview.qml +++ b/tests/auto/declarative/qmlvisual/ListView/listview.qml @@ -1,5 +1,6 @@ import QtQuick 1.0 +// Broken - QTBUG-14794 Rectangle { width: 600; height: 300; color: "white" diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index a2d3273..21c5aa0 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -143,7 +143,7 @@ void tst_qmlvisual::visual_data() foreach (const QString &file, files) { QString testdata = toTestScript(file); - if (testdata.isEmpty()) + if (testdata.isEmpty() || !QFile::exists(testdata+".qml")) continue; QTest::newRow(file.toLatin1().constData()) << file << testdata; diff --git a/tests/auto/declarative/qmlvisual/webview/autosize/data-X11/autosize.qml b/tests/auto/declarative/qmlvisual/webview/autosize/data-X11/autosize.qml deleted file mode 100644 index 6122138..0000000 --- a/tests/auto/declarative/qmlvisual/webview/autosize/data-X11/autosize.qml +++ /dev/null @@ -1,115 +0,0 @@ -import Qt.VisualTest 4.7 - -VisualTest { - Frame { - msec: 0 - } - Frame { - msec: 16 - hash: "b2d863e57dee2a297d038e18acc70f92" - } - Frame { - msec: 32 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 48 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 64 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 80 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 96 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 112 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 128 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 144 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 160 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 176 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 192 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 208 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 224 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 240 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 256 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 272 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 288 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 304 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 320 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 336 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 352 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 368 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 384 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 400 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 416 - hash: "903a4c7e619abba5342c8c827f26a722" - } - Frame { - msec: 432 - hash: "903a4c7e619abba5342c8c827f26a722" - } -} -- cgit v0.12 From 8e3a0c2df1cff2ca960555ad16654ff77f7efcc8 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 14:58:58 +1000 Subject: Add 'skip' property that QML visual tests can use This property can be set with a reason to skip the test (i.e. known bug) and the failure will not count for blocking purposes. This change also alters one of the failing tests to use the new property Task-number: QTBUG-14792 Reviewed-by: Michael Brasser --- .../qmlvisual/ListView/data/listview.0.png | Bin 1510 -> 1580 bytes .../qmlvisual/ListView/data/listview.1.png | Bin 1510 -> 1580 bytes .../qmlvisual/ListView/data/listview.10.png | Bin 1588 -> 0 bytes .../qmlvisual/ListView/data/listview.11.png | Bin 1575 -> 0 bytes .../qmlvisual/ListView/data/listview.12.png | Bin 1502 -> 0 bytes .../qmlvisual/ListView/data/listview.13.png | Bin 1583 -> 0 bytes .../qmlvisual/ListView/data/listview.14.png | Bin 1681 -> 0 bytes .../qmlvisual/ListView/data/listview.15.png | Bin 1524 -> 0 bytes .../qmlvisual/ListView/data/listview.16.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data/listview.17.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data/listview.18.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data/listview.19.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data/listview.2.png | Bin 1656 -> 1661 bytes .../qmlvisual/ListView/data/listview.3.png | Bin 1524 -> 1649 bytes .../qmlvisual/ListView/data/listview.4.png | Bin 1678 -> 1669 bytes .../qmlvisual/ListView/data/listview.5.png | Bin 1510 -> 1651 bytes .../qmlvisual/ListView/data/listview.6.png | Bin 1573 -> 1611 bytes .../qmlvisual/ListView/data/listview.7.png | Bin 1669 -> 1579 bytes .../qmlvisual/ListView/data/listview.8.png | Bin 1658 -> 1579 bytes .../qmlvisual/ListView/data/listview.9.png | Bin 1510 -> 0 bytes .../qmlvisual/ListView/data/listview.qml | 2227 ++++++++++++++++++++ .../declarative/qmlvisual/ListView/listview.qml | 2 +- tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 4 +- tools/qml/main.cpp | 3 + tools/qml/qdeclarativetester.cpp | 32 +- tools/qml/qdeclarativetester.h | 1 + tools/qml/qmlruntime.h | 3 +- 27 files changed, 2263 insertions(+), 9 deletions(-) delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.10.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.11.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.12.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.13.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.14.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.15.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.16.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.17.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.18.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.19.png delete mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.9.png create mode 100644 tests/auto/declarative/qmlvisual/ListView/data/listview.qml diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png index 581e824..78c1c27 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.0.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png index 581e824..ecd1e01 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.1.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png deleted file mode 100644 index dcfca3f..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.10.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png deleted file mode 100644 index 7cc4047..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.11.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png deleted file mode 100644 index a97f4ad..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.12.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png deleted file mode 100644 index 7a8c6bd..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.13.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png deleted file mode 100644 index ae47356..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.14.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png deleted file mode 100644 index b3a7260..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.15.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.16.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.17.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.18.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.19.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png index 579c68c..ba1733f 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.2.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png index b3a7260..7a393d1 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.3.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png index 19758b0..cb73ca9 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.4.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png index 581e824..cbbe6d7 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png index 82cac48..38ed525 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.6.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png index 9277a82..9e7bd6e 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.7.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png index 8c36da7..9e7bd6e 100644 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png and b/tests/auto/declarative/qmlvisual/ListView/data/listview.8.png differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png b/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png deleted file mode 100644 index 581e824..0000000 Binary files a/tests/auto/declarative/qmlvisual/ListView/data/listview.9.png and /dev/null differ diff --git a/tests/auto/declarative/qmlvisual/ListView/data/listview.qml b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml new file mode 100644 index 0000000..1db722f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/ListView/data/listview.qml @@ -0,0 +1,2227 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 32 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 48 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 64 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 80 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 96 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 112 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 128 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 144 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 160 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 176 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 192 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 208 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 224 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 240 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 256 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 272 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 288 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 304 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 320 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 336 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 352 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 368 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 384 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 400 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Frame { + msec: 416 + hash: "95c48087b681f0bcb09b2d7aad1a0299" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 432 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 448 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 464 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 480 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 496 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 512 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 528 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 544 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 560 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 576 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 592 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 608 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 624 + hash: "3b88645092be28037fca4a6034f5b2f7" + } + Frame { + msec: 640 + hash: "435ac0668ad4d0e196eb040d385053cb" + } + Frame { + msec: 656 + hash: "e9532fe1acc1c27a2119e6dde3e01637" + } + Frame { + msec: 672 + hash: "9c757feaf5a8d1e88c659fca97e3b7b2" + } + Frame { + msec: 688 + hash: "ccc7785a45a41615db01580835a4638e" + } + Frame { + msec: 704 + hash: "11ad92022bcd5d3fbd28ffb9f51c69eb" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 720 + hash: "a8a94e1f95216864c368b8c3d0ae682b" + } + Frame { + msec: 736 + hash: "d83e213d35e7fcff2580b4e197547f24" + } + Frame { + msec: 752 + hash: "9e5a57fabdc443e395cacbaf6e0c9bef" + } + Frame { + msec: 768 + hash: "9e5a57fabdc443e395cacbaf6e0c9bef" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 784 + hash: "0e9c577fa86d9b3734da0d50040624e0" + } + Frame { + msec: 800 + hash: "834cf83f0f8d613191cac775b5737664" + } + Frame { + msec: 816 + hash: "495ea7650b2ae45f9afd7f9f6ecdd793" + } + Frame { + msec: 832 + hash: "55c761ccee6543bb3b9564bb813df58e" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 848 + hash: "e29e5f86cb3b1fb5ec77fde696024812" + } + Frame { + msec: 864 + hash: "f24b7d5a8f5ab03460505d6203269d1b" + } + Frame { + msec: 880 + hash: "893473965efe9e0540b197cbaa3f765d" + } + Frame { + msec: 896 + hash: "a541b7be2f370f948048b2101b037ab7" + } + Frame { + msec: 912 + hash: "a541b7be2f370f948048b2101b037ab7" + } + Frame { + msec: 928 + hash: "a541b7be2f370f948048b2101b037ab7" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 944 + hash: "a541b7be2f370f948048b2101b037ab7" + } + Frame { + msec: 960 + image: "listview.0.png" + } + Frame { + msec: 976 + hash: "e97f78604c0c6d468c8dd225642e2ebd" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 992 + hash: "7b9d4b14eedfa4ff10dd7e3747c4a7f5" + } + Frame { + msec: 1008 + hash: "6d55ba6287c720614854d36bb681a9f3" + } + Frame { + msec: 1024 + hash: "3e7a44811f59bfb81de2f4f884a7af17" + } + Frame { + msec: 1040 + hash: "101113a7723b9d09275f66152b82142f" + } + Frame { + msec: 1056 + hash: "0044e068522f912630868476f8bf49f8" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1072 + hash: "4a50079d15b51758bf39b6d3fc51f337" + } + Frame { + msec: 1088 + hash: "df659ebf6a5926943de92d6838127b9c" + } + Frame { + msec: 1104 + hash: "0aa422c4af139023817465090f42f264" + } + Frame { + msec: 1120 + hash: "fb598a01e5cd9e3655f86a47ff7bda0d" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1136 + hash: "83a63dfcdbb27035d3e5208b066a2e1e" + } + Frame { + msec: 1152 + hash: "c8250f4cf69642e78523412b7b75501c" + } + Frame { + msec: 1168 + hash: "c57e421c803e8bfa1a85409cbb858829" + } + Frame { + msec: 1184 + hash: "f7611692216c0519b9188924e8a6b92e" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1200 + hash: "0f9495c9f9f91c409f868959854824ed" + } + Frame { + msec: 1216 + hash: "d4a752aa1c4112a3b60f40468932945d" + } + Frame { + msec: 1232 + hash: "fbe2d7c160132f312911aabe4cad8bf5" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1248 + hash: "2d3c7dc0d0efac613a32860968d166ac" + } + Frame { + msec: 1264 + hash: "fa0891d8c22dd26c1cb27d86864a8225" + } + Frame { + msec: 1280 + hash: "5d26f27061b319c391961dc30d985593" + } + Frame { + msec: 1296 + hash: "e038ae877e8dddd3d99bf97475f59b3d" + } + Frame { + msec: 1312 + hash: "f44adc5e46d320c62095e1285ca8848b" + } + Frame { + msec: 1328 + hash: "f44adc5e46d320c62095e1285ca8848b" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1344 + hash: "17f6b13e0556ac07dc527a9013a307a1" + } + Frame { + msec: 1360 + hash: "70a1cc3b6dd3be4e30bb6763344fb980" + } + Frame { + msec: 1376 + hash: "097c37d2243a27b8e800b5d4ec94b2e3" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1392 + hash: "15839227c002b1c71eb516f6653a7531" + } + Frame { + msec: 1408 + hash: "f4a8103ef9010c651368d325fe9eee98" + } + Frame { + msec: 1424 + hash: "d158ec1c83719c58c1d0a2e4cc90998f" + } + Frame { + msec: 1440 + hash: "6f66a44f5dc3fe150db2291b8cbc7327" + } + Frame { + msec: 1456 + hash: "8a016eac5befb215a157f7fe5bc743de" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1472 + hash: "807129a4c578b1a5f0d3d84686eb0553" + } + Frame { + msec: 1488 + hash: "f9f2da990518048f0b050cc193567a20" + } + Frame { + msec: 1504 + hash: "762de7b1f4e56df6d7a245a23446884b" + } + Frame { + msec: 1520 + hash: "84ba7354badc3dca92974933c3610010" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1536 + hash: "36c3018870d74cff638d00acd03a0cf0" + } + Frame { + msec: 1552 + hash: "82b756a14eb0e802cd3e2d2d2a07f28e" + } + Frame { + msec: 1568 + hash: "74af1c12613130dc53533fe1178d5534" + } + Frame { + msec: 1584 + hash: "c32818b0ba24f11295580d1ccffffdc0" + } + Frame { + msec: 1600 + hash: "c32818b0ba24f11295580d1ccffffdc0" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1616 + hash: "b858be109fac6852234bf1db161e515b" + } + Frame { + msec: 1632 + hash: "9b3f8cffd3e79241d8a3b1f7d80790db" + } + Frame { + msec: 1648 + hash: "840dc72aabc4a9b28bae641354676324" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1664 + hash: "c60bfd5cc8b26a841035db29baba5dab" + } + Frame { + msec: 1680 + hash: "88d80dc8b0d968aa718ff464e507f53b" + } + Frame { + msec: 1696 + hash: "f7ffc82d3448c415b4997401fb61b96b" + } + Frame { + msec: 1712 + hash: "df8e9a09752fe2b2eff9184ba8e88ef1" + } + Frame { + msec: 1728 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Frame { + msec: 1744 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1760 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Frame { + msec: 1776 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1792 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Frame { + msec: 1808 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Frame { + msec: 1824 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Frame { + msec: 1840 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Frame { + msec: 1856 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Frame { + msec: 1872 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Key { + type: 6 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1888 + hash: "97330e949a609f5f33832dd17e0c3716" + } + Frame { + msec: 1904 + hash: "15e45e1f64438d7c31e79a9602e1db7a" + } + Frame { + msec: 1920 + image: "listview.1.png" + } + Frame { + msec: 1936 + hash: "fae571933c4eafb33bb764bd1cddfc30" + } + Key { + type: 7 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1952 + hash: "33091359f9e6f21a14bf415d32d4d3b1" + } + Frame { + msec: 1968 + hash: "0fdcffa304f3eadde5cd7866d0a74e72" + } + Frame { + msec: 1984 + hash: "024539dbf8e66f1ba7d5d8c91bd278f0" + } + Frame { + msec: 2000 + hash: "4900babcc0a7bbd622a72590dcb0eea4" + } + Frame { + msec: 2016 + hash: "d6f68d576fe46bb832accf5e9e590f7e" + } + Key { + type: 6 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2032 + hash: "5a54bcb9a59268d70a2bb99bd32395be" + } + Frame { + msec: 2048 + hash: "72fbb18da8c5ef3e98390796dad31390" + } + Frame { + msec: 2064 + hash: "ac073b398e3d50ef10c92d8e6b4b3fa0" + } + Frame { + msec: 2080 + hash: "41e38d866d65bf1d42448b07a133cd93" + } + Key { + type: 7 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2096 + hash: "c45310b94cd2ff276e97be1706e1d432" + } + Frame { + msec: 2112 + hash: "aefc6994644d266d4be0310f01c28be7" + } + Frame { + msec: 2128 + hash: "f07bcb1d8ad693e1ddd79bf651126554" + } + Frame { + msec: 2144 + hash: "62ff227caab71d2d98daf0da302ec796" + } + Key { + type: 6 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2160 + hash: "72350eeeaefd043354c82ca2039cff59" + } + Frame { + msec: 2176 + hash: "d89f288f0b231b4ec4a634b3856ecf8e" + } + Frame { + msec: 2192 + hash: "bc7d7e2253651cb3ea1cdebf9f188ae0" + } + Frame { + msec: 2208 + hash: "7c89cdb693489708fe2db327ae66d083" + } + Frame { + msec: 2224 + hash: "8ca778c1812ede19545c3c70020faa67" + } + Key { + type: 7 + key: 16777235 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2240 + hash: "bd50cd99f177eb3f70b2ffad9f7a49e1" + } + Frame { + msec: 2256 + hash: "b439c3576cad17689e7b6b134bb04e14" + } + Frame { + msec: 2272 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2288 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2304 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2320 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2336 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2352 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2368 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2384 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2400 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2416 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 488; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2432 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Frame { + msec: 2448 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 489; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2464 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 490; y: 59 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 491; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2480 + hash: "9489c0e1e8cc5675bbc42b78e567eab6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 494; y: 74 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2496 + hash: "6502b3a17af7ebca92d4794f0c2a62ac" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 499; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 501; y: 126 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2512 + hash: "8a7ac12d59126b2784fd0af8d6b762a5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 505; y: 170 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2528 + hash: "12fa9c4e2d6681f3a0643d8243d83e23" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 509; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2544 + hash: "ccf18952f7c9686bd12fa196af9919e6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 516; y: 289 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2560 + hash: "70d654eecaf2163971596a503d2925a0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 316 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 518; y: 316 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2576 + hash: "01ef888104f290f25612970a91e64620" + } + Frame { + msec: 2592 + hash: "25b730c7c126875078c64cce118f6277" + } + Frame { + msec: 2608 + hash: "85c0127315a489cfcf14ec7e16e43f4c" + } + Frame { + msec: 2624 + hash: "65f1be6c38fa9e024671bfe612c585b4" + } + Frame { + msec: 2640 + hash: "74b7b60a048d37c38f179d071e9d9730" + } + Frame { + msec: 2656 + hash: "13c96d066af31d75647b0be21f1ae68d" + } + Frame { + msec: 2672 + hash: "a1f880a95596f6c82385e51a4853327e" + } + Frame { + msec: 2688 + hash: "8596123a6b0f234d90869d823448ff8e" + } + Frame { + msec: 2704 + hash: "1ca65b63eea4034e3889f53c86ac95b7" + } + Frame { + msec: 2720 + hash: "b847b515d89ad0394ef0fd4954158940" + } + Frame { + msec: 2736 + hash: "f73f7747115fdda2f0a13734a0dc9446" + } + Frame { + msec: 2752 + hash: "5b31a1aca62cf654428e4d7fc25208b6" + } + Frame { + msec: 2768 + hash: "f797d3c0364515138059967e17e185ed" + } + Frame { + msec: 2784 + hash: "dff0266adf50e30bc2a7674b001d19dc" + } + Frame { + msec: 2800 + hash: "610c72005c1aa83306fecc9ca34bf5a4" + } + Frame { + msec: 2816 + hash: "542587ab3dff0cfb3f724096871e925a" + } + Frame { + msec: 2832 + hash: "fd79c9159a77b1be25d9cfde2e6cecb6" + } + Frame { + msec: 2848 + hash: "e3d4bb451d6210e6006c54178d406068" + } + Frame { + msec: 2864 + hash: "3dd3c57049bddb206c0204d7fbf673b0" + } + Frame { + msec: 2880 + image: "listview.2.png" + } + Frame { + msec: 2896 + hash: "44008e30de01ecb1893a0fe4b06ec63a" + } + Frame { + msec: 2912 + hash: "c593c7e7edab1a034b96f778259b5b91" + } + Frame { + msec: 2928 + hash: "9ac483cb720fef5783abd4e0072cf71e" + } + Frame { + msec: 2944 + hash: "bed738f1883a76c5169dd2726456b9ea" + } + Frame { + msec: 2960 + hash: "c80c45be3189269d8edc5be22db7227d" + } + Frame { + msec: 2976 + hash: "3dcb08dd8ac8f083ad6aacbafaae05f4" + } + Frame { + msec: 2992 + hash: "38850ecc15cdcd55b758f94e8ac7fe55" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 517; y: 241 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3008 + hash: "033c44c51b8ab8f1555e153e20a80699" + } + Frame { + msec: 3024 + hash: "b6dc510369c679a028bb059e74796f6c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 518; y: 240 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 519; y: 239 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3040 + hash: "f3606887493ee9c0db86b1c6cc6fef6d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 524; y: 229 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3056 + hash: "79975f978ebf4556381d08b500dcab72" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 530; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3072 + hash: "1345974969c1a56c4c14c74301985289" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 532; y: 167 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3088 + hash: "fd623f2bf161f326da6dec8b5d8bf16f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 530; y: 117 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 530; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3104 + hash: "f1dfb47c5d4449e6cf7e2e6a2e86b1c5" + } + Frame { + msec: 3120 + hash: "26b31d08a1d50614771bec0458a2776b" + } + Frame { + msec: 3136 + hash: "dd017925e34f942c279ceb18b5e222da" + } + Frame { + msec: 3152 + hash: "be400b4ad1d9a1ccca56b8ff6b809272" + } + Frame { + msec: 3168 + hash: "4a4faa75155bb2c260f3a35675bd113e" + } + Frame { + msec: 3184 + hash: "3884c5d0d4c127876ba92a7b3a416339" + } + Frame { + msec: 3200 + hash: "b3d15196484410e24084b0f0d8fd683f" + } + Frame { + msec: 3216 + hash: "ed636ae433d185338ddbf7bffae731e1" + } + Frame { + msec: 3232 + hash: "45bacd56ecaeefd9c80c7bd77e79cff0" + } + Frame { + msec: 3248 + hash: "ad5239583e3924c98358e0ec7d12fd39" + } + Frame { + msec: 3264 + hash: "8e0fbae41165c553af4a49ed5691dfbb" + } + Frame { + msec: 3280 + hash: "c697930f45e23628c83a248de44472fb" + } + Frame { + msec: 3296 + hash: "840e1f8ba5fe6e42d6dc41c1e42dc3dc" + } + Frame { + msec: 3312 + hash: "e071cd254b69da678997eeb7ac0a13f8" + } + Frame { + msec: 3328 + hash: "27954d55c9772aa0ba237e7bdff75517" + } + Frame { + msec: 3344 + hash: "5879feff61f02a9322b8620c84be4462" + } + Frame { + msec: 3360 + hash: "feba016bdcdc3f59b70000375a5b4242" + } + Frame { + msec: 3376 + hash: "e57ae7048209884fb024481318c88080" + } + Frame { + msec: 3392 + hash: "93707dc8ec5e02adb691d0c6f3ff7772" + } + Frame { + msec: 3408 + hash: "ab2d8b822a4e2cd7c6a9cfa2e81d2113" + } + Frame { + msec: 3424 + hash: "a9d0e39b30b16eafec85e08a75e2b50f" + } + Frame { + msec: 3440 + hash: "8c94d16c8cde9b3d0ac8ccfb1374387d" + } + Frame { + msec: 3456 + hash: "7f4873f6c773b3d2d814bb1ea5c5dec6" + } + Frame { + msec: 3472 + hash: "77f91f90744a23bbe172629f311d1a4e" + } + Frame { + msec: 3488 + hash: "3963753a90d6cbf74bc21c9d06f4227b" + } + Frame { + msec: 3504 + hash: "042adc29907ca50187d4aad772a7500d" + } + Frame { + msec: 3520 + hash: "90accd1b4f5bbe5cc59f3a73d697ea18" + } + Frame { + msec: 3536 + hash: "3ce26e9c0b2ee1b4cb3dc19bbac92736" + } + Frame { + msec: 3552 + hash: "ca976ad1590e156e155cdba452dbc0ce" + } + Frame { + msec: 3568 + hash: "b342477cedfb2a3839aa145703f33cb4" + } + Frame { + msec: 3584 + hash: "8fccdb3fbf637426b8b3df088a5a24a5" + } + Frame { + msec: 3600 + hash: "973c8d2d2496c5cc871aecc0b6be0bbb" + } + Frame { + msec: 3616 + hash: "6af9574467c7b565450dc6533dddb0f2" + } + Frame { + msec: 3632 + hash: "ced3d8a93bf564c0ebec837f1655c202" + } + Frame { + msec: 3648 + hash: "0a38fe8ac9024b4a30b8efbcf155bbd8" + } + Frame { + msec: 3664 + hash: "2421dc73fe95e8abb246ae894ac255b2" + } + Frame { + msec: 3680 + hash: "98789298fcc85a0b3307036c800d80af" + } + Frame { + msec: 3696 + hash: "6361b512cfd9aa5f97529089ad7d902c" + } + Frame { + msec: 3712 + hash: "5f26400f45140d634ac49ae5ce6bc2cf" + } + Frame { + msec: 3728 + hash: "49586dcf6a4c7a80563e9cc67b16a520" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 487; y: 34 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3744 + hash: "fa8827f2a5eefaa9f740e36e4eb05083" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 488; y: 40 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3760 + hash: "5f2e33f8b436686840a124ba71f7d203" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 489; y: 49 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3776 + hash: "b0093a1f538381e79f43c91192437be5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 490; y: 55 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3792 + hash: "9a8e645817c214a0353beadc0bc2e3f8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 490; y: 60 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3808 + hash: "3f059fefcb7908e6f89a4b245bd0c948" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 491; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3824 + hash: "48ccbb037ebe01dc9c73fafa54aa6175" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 491; y: 72 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3840 + image: "listview.3.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 493; y: 93 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3856 + hash: "3398c59636fc02358fc0b22d7bc2afd3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 493; y: 123 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3872 + hash: "86ebc9911fc2da29a1960ae3999e4329" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 494; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 494; y: 141 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3888 + hash: "7e910c843f531af6d08a0c7ea890c823" + } + Frame { + msec: 3904 + hash: "7e92be7beeba33541e16305d5cb7b3b6" + } + Frame { + msec: 3920 + hash: "1e7caa1bb4627bea028cdd2ef2260d9f" + } + Frame { + msec: 3936 + hash: "a7d77ec36935d8d8c8a6120d373d714c" + } + Frame { + msec: 3952 + hash: "770e16a5c7bf17522445bdae41d170df" + } + Frame { + msec: 3968 + hash: "d5c93bb61aeef777bb91dd504e91ecf6" + } + Frame { + msec: 3984 + hash: "2247494cb67e7f0cade508b6ef46cb3e" + } + Frame { + msec: 4000 + hash: "61a480c3a29f37b4383b430b02eb5dc1" + } + Frame { + msec: 4016 + hash: "f741ede20b0ad51f81c7aba44705a08e" + } + Frame { + msec: 4032 + hash: "73bb52725e3906ac3074371936e9f3f3" + } + Frame { + msec: 4048 + hash: "a915081e3c6ca9397567cb3df2aed517" + } + Frame { + msec: 4064 + hash: "79b514577bcc36db6de4db2e8b284a4c" + } + Frame { + msec: 4080 + hash: "5412571baa69b8e0c3b4daf52796482a" + } + Frame { + msec: 4096 + hash: "7f739333fdc9c3457461e7fcf49bf650" + } + Frame { + msec: 4112 + hash: "ed9a9fdd4bea6e9f7f7078934337b4a6" + } + Frame { + msec: 4128 + hash: "4fbc687f1a5b4364a90441134162c817" + } + Frame { + msec: 4144 + hash: "7c91ad050f31e30b7f16b99dd1ed19df" + } + Frame { + msec: 4160 + hash: "44777e9a08d5f112b922272227b22558" + } + Frame { + msec: 4176 + hash: "c4f7523d0a214e188c95d7cbd4455a9d" + } + Frame { + msec: 4192 + hash: "7703b85f0bda71fa8ff84a557b015458" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 491; y: 193 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4208 + hash: "0bd445389e69d1d758a9b17eee69d584" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 491; y: 189 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4224 + hash: "13bfb19a05b5aef65f7f70b2c0b01424" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 493; y: 187 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4240 + hash: "9d6a81d6f7df8aa93c9421fa3cdc3a7d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 494; y: 182 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 495; y: 180 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4256 + hash: "4d88acb157fdeb0c608b6c9d75e999e8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 496; y: 174 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4272 + hash: "fe506e31923e1feb2d2b3c105444f61f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 496; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4288 + hash: "72c0ccbbf296742f67139bd9a4abcf6b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 159 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4304 + hash: "75b083e391afb3cdb8e4bcd885f17966" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 147 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4320 + hash: "2babcf0e4d434120e0a7eb7d8716baa7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4336 + hash: "676e6a7587781146f58f82ca1ceac2b3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 128 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4352 + hash: "58ecd6234c3c0f7ceec942098e3ae0fc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 120 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4368 + hash: "25a8af71ba1cf4581682cbec3b9baf8a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4384 + hash: "11c305643f2ed535a6dc0a7a54caf17c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 498; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4400 + hash: "29b33349f90286b2c078ae8d5896a338" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 498; y: 112 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4416 + hash: "af917864d02b49bef4190ee1fca607dc" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 498; y: 110 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4432 + hash: "7b1af6cddd2f78615354f747dfd016b9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 498; y: 109 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 498; y: 108 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4448 + hash: "84f1757af8c26b4f00298090e09f7f68" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 498; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4464 + hash: "fd214ddbd1f60dc733994ba7a2048951" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 499; y: 105 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4480 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4496 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4512 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4528 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4544 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4560 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4576 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4592 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4608 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4624 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4640 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4656 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4672 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4688 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4704 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4720 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4736 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4752 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4768 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4784 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4800 + image: "listview.4.png" + } + Frame { + msec: 4816 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4832 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Frame { + msec: 4848 + hash: "01f209a3b5e9adaa32ad55c7d1f1d4c7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 499; y: 106 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 498; y: 107 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4864 + hash: "1dc57bc129f3a6d5287ec0fa2a99d62e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 497; y: 110 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4880 + hash: "7b1af6cddd2f78615354f747dfd016b9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 496; y: 113 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4896 + hash: "a890208c702b9fde41584a33b3038940" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 495; y: 115 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4912 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 494; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4928 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 4944 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 4960 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 4976 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 4992 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5008 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5024 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5040 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5056 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 494; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5072 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5088 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5104 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5120 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5136 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5152 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5168 + hash: "cdc2d0868771429226c74e77676f55f1" + } + Frame { + msec: 5184 + hash: "768d6d504470ce841e51022dd514edc5" + } + Frame { + msec: 5200 + hash: "768d6d504470ce841e51022dd514edc5" + } + Frame { + msec: 5216 + hash: "768d6d504470ce841e51022dd514edc5" + } + Frame { + msec: 5232 + hash: "768d6d504470ce841e51022dd514edc5" + } + Frame { + msec: 5248 + hash: "768d6d504470ce841e51022dd514edc5" + } + Frame { + msec: 5264 + hash: "768d6d504470ce841e51022dd514edc5" + } + Frame { + msec: 5280 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5296 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5312 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5328 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5344 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5360 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5376 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5392 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5408 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5424 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5440 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5456 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5472 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5488 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5504 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5520 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5536 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5552 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5568 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5584 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5600 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5616 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5632 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5648 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5664 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5680 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5696 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5712 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5728 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5744 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5760 + image: "listview.5.png" + } + Frame { + msec: 5776 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5792 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5808 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5824 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5840 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5856 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5872 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5888 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5904 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5920 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5936 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5952 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5968 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 5984 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6000 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6016 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6032 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6048 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6064 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6080 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6096 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6112 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } + Frame { + msec: 6128 + hash: "6df3f8000a0d390b89d41c6ece6ea221" + } +} diff --git a/tests/auto/declarative/qmlvisual/ListView/listview.qml b/tests/auto/declarative/qmlvisual/ListView/listview.qml index 35ec982..43c86a0 100644 --- a/tests/auto/declarative/qmlvisual/ListView/listview.qml +++ b/tests/auto/declarative/qmlvisual/ListView/listview.qml @@ -1,7 +1,7 @@ import QtQuick 1.0 -// Broken - QTBUG-14794 Rectangle { + property string skip: "Incorrect start: QTBUG-14794" width: 600; height: 300; color: "white" ListModel { diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index 21c5aa0..7cd96e2 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -157,7 +157,7 @@ void tst_qmlvisual::visual() QStringList arguments; arguments << "-script" << testdata - << "-scriptopts" << "play,testimages,testerror,exitoncomplete,exitonfailure" + << "-scriptopts" << "play,testimages,testerror,testskip,exitoncomplete,exitonfailure" << file; #ifdef Q_WS_QWS arguments << "-qws"; @@ -278,7 +278,7 @@ void action(Mode mode, const QString &file) break; case Play: arguments << "-script" << testdata - << "-scriptopts" << "play,testimages,testerror,exitoncomplete" + << "-scriptopts" << "play,testimages,testerror,testskip,exitoncomplete" << file; break; case TestVisuals: diff --git a/tools/qml/main.cpp b/tools/qml/main.cpp index 00d43c1..579f1ab 100644 --- a/tools/qml/main.cpp +++ b/tools/qml/main.cpp @@ -172,6 +172,7 @@ void scriptOptsUsage() qWarning(" play ..................................... playback an existing script"); qWarning(" testimages ............................... record images or compare images on playback"); qWarning(" testerror ................................ test 'error' property of root item on playback"); + qWarning(" testskip ................................ test 'skip' property of root item on playback"); qWarning(" snapshot ................................. file being recorded is static,"); qWarning(" only one frame will be recorded or tested"); qWarning(" exitoncomplete ........................... cleanly exit the viewer on script completion"); @@ -305,6 +306,8 @@ static void parseScriptOptions() scriptOptions |= QDeclarativeViewer::TestImages; } else if (option == QLatin1String("testerror")) { scriptOptions |= QDeclarativeViewer::TestErrorProperty; + } else if (option == QLatin1String("testskip")) { + scriptOptions |= QDeclarativeViewer::TestSkipProperty; } else if (option == QLatin1String("exitoncomplete")) { scriptOptions |= QDeclarativeViewer::ExitOnComplete; } else if (option == QLatin1String("exitonfailure")) { diff --git a/tools/qml/qdeclarativetester.cpp b/tools/qml/qdeclarativetester.cpp index 9864df6..a0ef4a1 100644 --- a/tools/qml/qdeclarativetester.cpp +++ b/tools/qml/qdeclarativetester.cpp @@ -128,16 +128,35 @@ void QDeclarativeTester::executefailure() { hasFailed = true; - if (options & QDeclarativeViewer::ExitOnFailure) - exit(-1); + if (options & QDeclarativeViewer::ExitOnFailure){ + testSkip(); + exit(hasFailed?-1:0); + } } void QDeclarativeTester::imagefailure() { hasFailed = true; - if (options & QDeclarativeViewer::ExitOnFailure) - exit(-1); + if (options & QDeclarativeViewer::ExitOnFailure){ + testSkip(); + exit(hasFailed?-1:0); + } +} + +void QDeclarativeTester::testSkip() +{ + if (options & QDeclarativeViewer::TestSkipProperty){ + QString e = m_view->rootObject()->property("skip").toString(); + if (!e.isEmpty()) { + if(hasFailed){ + qWarning() << "Test failed, but skipping it: " << e; + }else{ + qWarning() << "Test skipped: " << e; + } + hasFailed = 0; + } + } } void QDeclarativeTester::complete() @@ -149,7 +168,10 @@ void QDeclarativeTester::complete() hasFailed = true; } } - if (options & QDeclarativeViewer::ExitOnComplete) + + + testSkip(); + if (options & QDeclarativeViewer::ExitOnComplete) QApplication::exit(hasFailed?-1:0); if (hasCompleted) diff --git a/tools/qml/qdeclarativetester.h b/tools/qml/qdeclarativetester.h index 021869d..0cf508a 100644 --- a/tools/qml/qdeclarativetester.h +++ b/tools/qml/qdeclarativetester.h @@ -228,6 +228,7 @@ private: void imagefailure(); void complete(); + void testSkip(); enum Destination { View, ViewPort }; void addKeyEvent(Destination, QKeyEvent *); diff --git a/tools/qml/qmlruntime.h b/tools/qml/qmlruntime.h index d1ec26d..b43aa54 100644 --- a/tools/qml/qmlruntime.h +++ b/tools/qml/qmlruntime.h @@ -83,7 +83,8 @@ public: SaveOnExit = 0x00000010, ExitOnComplete = 0x00000020, ExitOnFailure = 0x00000040, - Snapshot = 0x00000080 + Snapshot = 0x00000080, + TestSkipProperty = 0x00000100 }; Q_DECLARE_FLAGS(ScriptOptions, ScriptOption) void setScript(const QString &s) { m_script = s; } -- cgit v0.12 From ef7906d0c89cf155aec89dac4a8655911eb055e5 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 15:14:40 +1000 Subject: Revert "Mark qdeclarativegridview autotests as expect-fail" This reverts commit b6ee57e14e145d9caa3f572d55447ec92f78cea4. Changed our mind about how to mark tests as expect-fail --- .../qdeclarativegridview/data/gridview.0.png | Bin 0 -> 1303 bytes .../qdeclarativegridview/data/gridview.1.png | Bin 0 -> 1317 bytes .../qdeclarativegridview/data/gridview.2.png | Bin 0 -> 1318 bytes .../qdeclarativegridview/data/gridview.3.png | Bin 0 -> 1306 bytes .../qdeclarativegridview/data/gridview.4.png | Bin 0 -> 1308 bytes .../qdeclarativegridview/data/gridview.5.png | Bin 0 -> 1303 bytes .../qdeclarativegridview/data/gridview.6.png | Bin 0 -> 1323 bytes .../qdeclarativegridview/data/gridview.7.png | Bin 0 -> 1325 bytes .../qdeclarativegridview/data/gridview.8.png | Bin 0 -> 1346 bytes .../qdeclarativegridview/data/gridview.9.png | Bin 0 -> 1303 bytes .../qdeclarativegridview/data/gridview.qml | 2859 ++++++++++++++++++++ .../qdeclarativegridview/data/gridview2.0.png | Bin 0 -> 1310 bytes .../qdeclarativegridview/data/gridview2.1.png | Bin 0 -> 1322 bytes .../qdeclarativegridview/data/gridview2.10.png | Bin 0 -> 1313 bytes .../qdeclarativegridview/data/gridview2.2.png | Bin 0 -> 1341 bytes .../qdeclarativegridview/data/gridview2.3.png | Bin 0 -> 1368 bytes .../qdeclarativegridview/data/gridview2.4.png | Bin 0 -> 1319 bytes .../qdeclarativegridview/data/gridview2.5.png | Bin 0 -> 1352 bytes .../qdeclarativegridview/data/gridview2.6.png | Bin 0 -> 1309 bytes .../qdeclarativegridview/data/gridview2.7.png | Bin 0 -> 1347 bytes .../qdeclarativegridview/data/gridview2.8.png | Bin 0 -> 1310 bytes .../qdeclarativegridview/data/gridview2.9.png | Bin 0 -> 1354 bytes .../qdeclarativegridview/data/gridview2.qml | 2479 +++++++++++++++++ .../qmlvisual/qdeclarativegridview/gridview.qml | 2 - .../qmlvisual/qdeclarativegridview/gridview2.qml | 2 - 25 files changed, 5338 insertions(+), 4 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png new file mode 100644 index 0000000..6c82777 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png new file mode 100644 index 0000000..07b1f7c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png new file mode 100644 index 0000000..f2f08c0 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png new file mode 100644 index 0000000..08649f9 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png new file mode 100644 index 0000000..f9c2f17 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png new file mode 100644 index 0000000..52ec0bd Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png new file mode 100644 index 0000000..3fe25be Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png new file mode 100644 index 0000000..4cc12a6 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png new file mode 100644 index 0000000..2267f23 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png new file mode 100644 index 0000000..6c82777 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml new file mode 100644 index 0000000..67aa10a --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml @@ -0,0 +1,2859 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 32 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 48 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 64 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 80 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 96 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 112 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 128 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 144 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 160 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 176 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 192 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 208 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 224 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 240 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 256 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 272 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 288 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 304 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 320 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 336 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 352 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 368 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 384 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 400 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 416 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Frame { + msec: 432 + hash: "c33447c78ea64452ec3cd1696fb502eb" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 448 + hash: "96ad89eafa7f99269518a192573af91b" + } + Frame { + msec: 464 + hash: "735b00b968d0e2ea1f34cc0bdc028a8e" + } + Frame { + msec: 480 + hash: "ce37c8e15fbb1aea72aff9629683fa96" + } + Frame { + msec: 496 + hash: "a3f2471ef4ceac77a1c20ac327550d8d" + } + Frame { + msec: 512 + hash: "28f120bd3bda9552dbc8cc908409c67d" + } + Frame { + msec: 528 + hash: "f21cf0ed746fa48e67dc90c70c5bbae8" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "485d55730366b68e01582879f6970fa1" + } + Frame { + msec: 560 + hash: "700e53c78b28993dce5dafb4035f4760" + } + Frame { + msec: 576 + hash: "1e538e175a5e402e2334cf354392e8a7" + } + Frame { + msec: 592 + hash: "0fbfba93eebaf05ae60067b365b6b4bc" + } + Frame { + msec: 608 + hash: "7b1893397b76b0c95094eeca1dd21446" + } + Frame { + msec: 624 + hash: "7b1893397b76b0c95094eeca1dd21446" + } + Frame { + msec: 640 + hash: "7b1893397b76b0c95094eeca1dd21446" + } + Frame { + msec: 656 + hash: "7b1893397b76b0c95094eeca1dd21446" + } + Frame { + msec: 672 + hash: "7b1893397b76b0c95094eeca1dd21446" + } + Frame { + msec: 688 + hash: "7b1893397b76b0c95094eeca1dd21446" + } + Frame { + msec: 704 + hash: "7b1893397b76b0c95094eeca1dd21446" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 720 + hash: "25e48099a8194ed2674651818d854c61" + } + Frame { + msec: 736 + hash: "b75d02dfc238ba2292306ca1421279c3" + } + Frame { + msec: 752 + hash: "7e48b7d9c1291b4e438c81f44228d8ad" + } + Frame { + msec: 768 + hash: "fe4b009abe081a6eaeab6ef9e996f3fd" + } + Frame { + msec: 784 + hash: "edea8c305fe88708dbafc03e427caa09" + } + Frame { + msec: 800 + hash: "7b58803f12d0ab893acf539799d79e31" + } + Frame { + msec: 816 + hash: "9b56c3d1d140114dcc57d0a8568e9b95" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 832 + hash: "35e38e273dbc8e565917b21d00fc1530" + } + Frame { + msec: 848 + hash: "116e294391333e8780daeca54c3d51ea" + } + Frame { + msec: 864 + hash: "6219676215f82540d7a53b2a8aa60279" + } + Frame { + msec: 880 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 896 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 912 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 928 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 944 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 960 + image: "gridview.0.png" + } + Frame { + msec: 976 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 992 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1008 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1024 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1040 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1056 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1072 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1088 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1104 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1120 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1136 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 1152 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1168 + hash: "2667c2596de97dc15353158eba03495f" + } + Frame { + msec: 1184 + hash: "6a7b64e1427dcb7e438aa09a739cbc7b" + } + Frame { + msec: 1200 + hash: "5bad6dc745958f5827403ea593c78752" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1216 + hash: "b393401219ada7d094a451dba8af3f1a" + } + Frame { + msec: 1232 + hash: "ba656452f8adf3d1ca7db9286274c37f" + } + Frame { + msec: 1248 + hash: "1e9725c8c364a491f34035fad1f77c63" + } + Frame { + msec: 1264 + hash: "a0aef0b65446dec0673b5cec3a260390" + } + Frame { + msec: 1280 + hash: "d60c11a5d376af0831d6f05f2a839a92" + } + Frame { + msec: 1296 + hash: "1dd2c456c6ee9cc8f9be0e9f3617d44b" + } + Frame { + msec: 1312 + hash: "56208e6551e2f4202bab2d62a1cf46a2" + } + Frame { + msec: 1328 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1344 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1360 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1376 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1392 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1408 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1424 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1440 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1456 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1472 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1488 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1504 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1520 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1536 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1552 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1568 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1584 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1600 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1616 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1632 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Frame { + msec: 1648 + hash: "caa3c1a106d549e6bb94a1746bd7a53c" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1664 + hash: "f0f00d22d15ed9828db7b5f3a3669fe9" + } + Frame { + msec: 1680 + hash: "153e7984089530bbd052c9e4f62eb14c" + } + Frame { + msec: 1696 + hash: "0525d40cc58d054a3abd7ee2486576f8" + } + Frame { + msec: 1712 + hash: "8c23d5245774ab5252c98c19c33f8171" + } + Frame { + msec: 1728 + hash: "5ca243794d1350f04cf973d4bfc8ab89" + } + Frame { + msec: 1744 + hash: "d19b7f4c0897aba498e122d83b4cbbf1" + } + Frame { + msec: 1760 + hash: "99e41460dd8efc6e5c3faf54b14c3d43" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1776 + hash: "703469f8b133156ed3aabe02762d66c3" + } + Frame { + msec: 1792 + hash: "1cc2c383e988048db76a80d8d7f5a0e2" + } + Frame { + msec: 1808 + hash: "8e87117c19eb9d6e600c44e0f3869ae1" + } + Frame { + msec: 1824 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1840 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1856 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1872 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1888 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1904 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1920 + image: "gridview.1.png" + } + Frame { + msec: 1936 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1952 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1968 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Frame { + msec: 1984 + hash: "8304d2432168a2ea8a887d9a135b40b4" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2000 + hash: "4924037ce643d0748b8b2c666e61fd62" + } + Frame { + msec: 2016 + hash: "ef9750584e669a8b2d415d13854e12a6" + } + Frame { + msec: 2032 + hash: "69937eacef6e6b11ad1d5741c69a1faa" + } + Frame { + msec: 2048 + hash: "a1bd870fffd95a0604dd8e170e571632" + } + Frame { + msec: 2064 + hash: "a3a72386594aacc88977cdaa6441df48" + } + Frame { + msec: 2080 + hash: "6d8e89de38d52f0f0f871dfa18361cb5" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2096 + hash: "96cfb1eb6893fac86c9434d1ffb82fcb" + } + Frame { + msec: 2112 + hash: "5e11df1660634ff317be474118174ec5" + } + Frame { + msec: 2128 + hash: "2eb75858b50c3a9a80673ab89014ed63" + } + Frame { + msec: 2144 + hash: "3ff5d66f7902af92d49ebebf04d16c26" + } + Frame { + msec: 2160 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2176 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2192 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2208 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2224 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2240 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2256 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2272 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2288 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2304 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2320 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Frame { + msec: 2336 + hash: "570da61e2d48acd11474fe005110ab4b" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2352 + hash: "efeda5b2d97e1b7c22e2308250501cb7" + } + Frame { + msec: 2368 + hash: "d6158379b699279f66b94a8418e53af1" + } + Frame { + msec: 2384 + hash: "ab960b0669fa594e0552df623a9136ea" + } + Frame { + msec: 2400 + hash: "0ebf6be1305ee1eb8740f4d0365ef4c5" + } + Frame { + msec: 2416 + hash: "46cde47dffc6f2687c8c643eca09b95d" + } + Frame { + msec: 2432 + hash: "2b8698ce02a6964115d960ae19f40c37" + } + Frame { + msec: 2448 + hash: "ff1e7d800bb27b41710c50554adc1091" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2464 + hash: "5837b3aca09038cae23dcb149acc8b0b" + } + Frame { + msec: 2480 + hash: "dbe7c571cdbdb9de4fd01faa6d5374cf" + } + Frame { + msec: 2496 + hash: "f431abcaf05f49ead909296d7649f8a9" + } + Frame { + msec: 2512 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2528 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2544 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2560 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2576 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2592 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2608 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2624 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2640 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2656 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2672 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2688 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2704 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2720 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2736 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2752 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2768 + hash: "043583b19c921740dbc990afd4f508ed" + } + Frame { + msec: 2784 + hash: "043583b19c921740dbc990afd4f508ed" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2800 + hash: "4f2fafdb59db544352e3067d67c0a714" + } + Frame { + msec: 2816 + hash: "4dcd4cdf6f4e305732185ec52cd2f2f6" + } + Frame { + msec: 2832 + hash: "dfd3c29b0520edbbee57dfacfa7e2b30" + } + Frame { + msec: 2848 + hash: "257d3d8bcf78671d35a898befec091cb" + } + Frame { + msec: 2864 + hash: "20e89c544284603943396694abe86756" + } + Frame { + msec: 2880 + image: "gridview.2.png" + } + Frame { + msec: 2896 + hash: "b88c6af89423b32b3a4413035711df03" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2912 + hash: "e34de13af44c449c9ecc86e06ce01ed2" + } + Frame { + msec: 2928 + hash: "98ffe81129aa7cc7325764221f1dae59" + } + Frame { + msec: 2944 + hash: "db2d545de9879362738e71a02a3d1d26" + } + Frame { + msec: 2960 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 2976 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 2992 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 3008 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 3024 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 3040 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 3056 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 3072 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 3088 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Frame { + msec: 3104 + hash: "e67ae32a47213b360c1a445bf645dde2" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3120 + hash: "02d8c90faf56c65252e4f938944bda7b" + } + Frame { + msec: 3136 + hash: "a32994e2320e357241f63b956b6db236" + } + Frame { + msec: 3152 + hash: "9ada466c26c217adbcd7a93df264ed75" + } + Frame { + msec: 3168 + hash: "79d1a3489be95d113e8c611a2ba63456" + } + Frame { + msec: 3184 + hash: "d3aa82455c4ae3ac25097354e132a30f" + } + Frame { + msec: 3200 + hash: "62d12e5933ed4ed048ccafd229f4b2b7" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3216 + hash: "5bc4ac94ae20e425084d0811dee1ba08" + } + Frame { + msec: 3232 + hash: "6d5113e3732dc7a9172eea3667a01f7b" + } + Frame { + msec: 3248 + hash: "e435a2588b25d3336f290331931f5981" + } + Frame { + msec: 3264 + hash: "bce201adbeb319b181cce139f179d7f0" + } + Frame { + msec: 3280 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3296 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3312 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3328 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3344 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3360 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3376 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3392 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3408 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3424 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3440 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Frame { + msec: 3456 + hash: "5fa3ec31176bed2de8cb076b87e0be74" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3472 + hash: "8f0f3cd35ae92047f23084f447046eb8" + } + Frame { + msec: 3488 + hash: "ceb12e6c5e9f0566039040d9f3ff587f" + } + Frame { + msec: 3504 + hash: "dfd0c89c3ea73aceefcdafa71609c720" + } + Frame { + msec: 3520 + hash: "8d8ed1a9dc6a9f74dfc81b79f02af4c5" + } + Frame { + msec: 3536 + hash: "d450bd62e03e1e4c7cb66e98ece05f97" + } + Frame { + msec: 3552 + hash: "d1ece2210cd24eedd5361e5c3a162236" + } + Frame { + msec: 3568 + hash: "77589e48b9db95e702055753046319e5" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3584 + hash: "7793263ecb831a1e63fbd76c8addde03" + } + Frame { + msec: 3600 + hash: "bfa9675f981c37fed27dea100226f61a" + } + Frame { + msec: 3616 + hash: "9780849fe8abd22c32ccafcdd46b0d65" + } + Frame { + msec: 3632 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3648 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3664 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3680 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3696 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3712 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3728 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3744 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3760 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3776 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3792 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3808 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3824 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3840 + image: "gridview.3.png" + } + Frame { + msec: 3856 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3872 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3888 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3904 + hash: "e63d987ba303a42046827f14941b444a" + } + Frame { + msec: 3920 + hash: "e63d987ba303a42046827f14941b444a" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3936 + hash: "a61dbcb7d914afe34009085bf37fb8e2" + } + Frame { + msec: 3952 + hash: "89175b83b4f7ee4b5d99219cdc97aa59" + } + Frame { + msec: 3968 + hash: "f524421286503f6175e4ad71dd89145f" + } + Frame { + msec: 3984 + hash: "ca5af7d98a008eccba1e21be0da61f3c" + } + Frame { + msec: 4000 + hash: "77c19e7e17e00787ff0d7a4e7bad7bc8" + } + Frame { + msec: 4016 + hash: "04c8db761e324101ad92e0ac9ceed7d4" + } + Frame { + msec: 4032 + hash: "97a3dcb81349efab6b44d458e83ce5c4" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4048 + hash: "e86ebc276b88705c97cc9efb66ccc6b2" + } + Frame { + msec: 4064 + hash: "a134bbfd14879f13b288a04d23382348" + } + Frame { + msec: 4080 + hash: "9530ad3f58ad1c66401572869f7d91bc" + } + Frame { + msec: 4096 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Frame { + msec: 4112 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Frame { + msec: 4128 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Frame { + msec: 4144 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Frame { + msec: 4160 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Frame { + msec: 4176 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Frame { + msec: 4192 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Frame { + msec: 4208 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Frame { + msec: 4224 + hash: "db3d030de94b19ea1db5c60be7c7ca5c" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4240 + hash: "980e0fa84fd3bab496623936f5f220a2" + } + Frame { + msec: 4256 + hash: "ed3268911723d664699bbc31317befc1" + } + Frame { + msec: 4272 + hash: "3bfda4b3b0b2d2a97ec1c0b5b3f4da63" + } + Frame { + msec: 4288 + hash: "1616c6def28659d51905564ff83cc112" + } + Frame { + msec: 4304 + hash: "68342f34c18956d3a093f8eeeae6977e" + } + Frame { + msec: 4320 + hash: "ac1b12959e9055a28fe2bda0a12b75bc" + } + Frame { + msec: 4336 + hash: "009b85ff6b86e418c78ed33a5e88d3f1" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4352 + hash: "59753bc7dc69767fe2109fdc41f20dae" + } + Frame { + msec: 4368 + hash: "1c87d3d8c8d564d4d95a26f57fd28f38" + } + Frame { + msec: 4384 + hash: "4e43b7b6787002c9013010dd74c83f49" + } + Frame { + msec: 4400 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4416 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4432 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4448 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4464 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4480 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4496 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4512 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4528 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4544 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4560 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4576 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Frame { + msec: 4592 + hash: "2476aa1a7191b485a76c76e98c9be2b0" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4608 + hash: "84de5b5e8b0fba190a783c72967661c7" + } + Frame { + msec: 4624 + hash: "60b696f4913379d28f300fd1b531c6cb" + } + Frame { + msec: 4640 + hash: "d01e651d9094332fd82ad1cea3e93e9d" + } + Frame { + msec: 4656 + hash: "87be4cd7c894b03b2b64c996e915d71f" + } + Frame { + msec: 4672 + hash: "b07fccb0c5565d2feed5a9fcdf8acead" + } + Frame { + msec: 4688 + hash: "3dca3165fd34be549d21fb6c414c67d8" + } + Frame { + msec: 4704 + hash: "5f69f3298f8ca73fa9b3b6e630c60186" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4720 + hash: "d7f41e9a29d550a7d9a41bb947569abe" + } + Frame { + msec: 4736 + hash: "4ede2e90ad216a2d44580c50a25dea23" + } + Frame { + msec: 4752 + hash: "9b339845ee588b789dc9095c272e0bdf" + } + Frame { + msec: 4768 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4784 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4800 + image: "gridview.4.png" + } + Frame { + msec: 4816 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4832 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4848 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4864 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4880 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4896 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4912 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4928 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4944 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4960 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4976 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 4992 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5008 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5024 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5040 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5056 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5072 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5088 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5104 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5120 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5136 + hash: "9cdea4790972efaecabd52b435107e69" + } + Frame { + msec: 5152 + hash: "9cdea4790972efaecabd52b435107e69" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 5168 + hash: "d6f0a6d7604bad811eeba13fd7c45368" + } + Frame { + msec: 5184 + hash: "5f92e1531a3f6c21ec82e3c908167fc7" + } + Frame { + msec: 5200 + hash: "5214e99ff052dcdc8f85bad29de92e03" + } + Frame { + msec: 5216 + hash: "d4abed9f0f1115c9a45b0b9b4f54754e" + } + Frame { + msec: 5232 + hash: "cfae8a0281e704b0e62f6bf31b32800f" + } + Frame { + msec: 5248 + hash: "c203f0674596ae690bf19f2d49be62ac" + } + Frame { + msec: 5264 + hash: "2e2c7e05aade104bdc4f6c489b6f0601" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 5280 + hash: "b4b2148b0557dcab3a441165e5e4de5f" + } + Frame { + msec: 5296 + hash: "c5e791d27a42a63d25cdbd492b4af29a" + } + Frame { + msec: 5312 + hash: "0f94ebcb407f8e6ae263bd954f2c8177" + } + Frame { + msec: 5328 + hash: "d9b56b817a411812789881697a28fe4c" + } + Frame { + msec: 5344 + hash: "d9b56b817a411812789881697a28fe4c" + } + Frame { + msec: 5360 + hash: "d9b56b817a411812789881697a28fe4c" + } + Frame { + msec: 5376 + hash: "d9b56b817a411812789881697a28fe4c" + } + Frame { + msec: 5392 + hash: "d9b56b817a411812789881697a28fe4c" + } + Frame { + msec: 5408 + hash: "d9b56b817a411812789881697a28fe4c" + } + Frame { + msec: 5424 + hash: "d9b56b817a411812789881697a28fe4c" + } + Frame { + msec: 5440 + hash: "d9b56b817a411812789881697a28fe4c" + } + Frame { + msec: 5456 + hash: "d9b56b817a411812789881697a28fe4c" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 5472 + hash: "6fdfe69e377da72e04dc130f5677ed2c" + } + Frame { + msec: 5488 + hash: "c041d26d43766fa1735f2ada2a43225b" + } + Frame { + msec: 5504 + hash: "aa62dbd6c6256665ee1b4ef468607978" + } + Frame { + msec: 5520 + hash: "987fcdf6483a83b1242053f4e7fb7a26" + } + Frame { + msec: 5536 + hash: "fbde70c34709b68eb22f5460a8815fba" + } + Frame { + msec: 5552 + hash: "911ddc838ebaf5ade1bb026dff2741ba" + } + Frame { + msec: 5568 + hash: "120bbf35b2a3b756bdeaea0df43e49b2" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 5584 + hash: "ea93e33c079d6dc5fb18c69fb4fed441" + } + Frame { + msec: 5600 + hash: "b9ac8ab01cb59b1fee11967bdb6d2dd6" + } + Frame { + msec: 5616 + hash: "3ff266bf29cbcaa30bc1e7af5dd9866b" + } + Frame { + msec: 5632 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5648 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5664 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5680 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5696 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5712 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5728 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5744 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5760 + image: "gridview.5.png" + } + Frame { + msec: 5776 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5792 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Frame { + msec: 5808 + hash: "edd6c3a9493a63674e2d7af5f3e8467e" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 5824 + hash: "de1f83d25751639dff42f1755a6534c3" + } + Frame { + msec: 5840 + hash: "edefdea8b2461d03fb97cf5ed66e9b6d" + } + Frame { + msec: 5856 + hash: "cef1886397e3932a511f37571b5011f4" + } + Frame { + msec: 5872 + hash: "05589ad354314d9e04ef90c1addd99f5" + } + Frame { + msec: 5888 + hash: "ff88b52e3755b9b4785d2719ddd4f090" + } + Frame { + msec: 5904 + hash: "f59edc3016b177a2e8faa6612d718b17" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 5920 + hash: "dc673a7cdd927f70b28ebcfe51cd3d89" + } + Frame { + msec: 5936 + hash: "3abec0da85fb663e63ab22188e092827" + } + Frame { + msec: 5952 + hash: "50c2c8ac68cafad7c47b576cd8f4a037" + } + Frame { + msec: 5968 + hash: "06c31b861e2b96e6595b2244d7b3f4d5" + } + Frame { + msec: 5984 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6000 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6016 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6032 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6048 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6064 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6080 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6096 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6112 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6128 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6144 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6160 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6176 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6192 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6208 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6224 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6240 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6256 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6272 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6288 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6304 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6320 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6336 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6352 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6368 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6384 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6400 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Frame { + msec: 6416 + hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 6432 + hash: "7f52a770775c19e10784b4c5f7874210" + } + Frame { + msec: 6448 + hash: "827cfb74286a2a80aca8b6c5277d6cfd" + } + Frame { + msec: 6464 + hash: "8399231eda9b66821d43a3d8c4c7d645" + } + Frame { + msec: 6480 + hash: "fc163583671f3c4023361460b436c895" + } + Frame { + msec: 6496 + hash: "893dea6496c95c32095ad1d673e500c2" + } + Frame { + msec: 6512 + hash: "808c7403b2cdcc882059da56a2f806fe" + } + Frame { + msec: 6528 + hash: "7466b2e5b86ba8ad46be75818659786c" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 6544 + hash: "dd2561cd780e24401130305d47757a53" + } + Frame { + msec: 6560 + hash: "bee89299532d43fc3e6c3e69c343b381" + } + Frame { + msec: 6576 + hash: "94f8474aedee94098592c05d8fc7d868" + } + Frame { + msec: 6592 + hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + } + Frame { + msec: 6608 + hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + } + Frame { + msec: 6624 + hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + } + Frame { + msec: 6640 + hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + } + Frame { + msec: 6656 + hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + } + Frame { + msec: 6672 + hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + } + Frame { + msec: 6688 + hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + } + Frame { + msec: 6704 + hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 6720 + image: "gridview.6.png" + } + Frame { + msec: 6736 + hash: "ccd58be20d47422121d6ef799b927a7a" + } + Frame { + msec: 6752 + hash: "e090c7f39649786a1796870e25bd0f0d" + } + Frame { + msec: 6768 + hash: "acf3dcd9f4a869169dbc1ae7fe60e9d0" + } + Frame { + msec: 6784 + hash: "51795e9a720845e8305d23507785e1ca" + } + Frame { + msec: 6800 + hash: "0d34a43e177e6b73e2ff9155747d0385" + } + Frame { + msec: 6816 + hash: "1876c3cdffc1af01da1aaa0ac636d0a8" + } + Frame { + msec: 6832 + hash: "3131296b6edf4190520e2cdb3f8b936e" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 6848 + hash: "ee92f0a764e5081b130e205a5c362b07" + } + Frame { + msec: 6864 + hash: "8737ea2c60aeb215228c00a7fddd1baa" + } + Frame { + msec: 6880 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 6896 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 6912 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 6928 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 6944 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 6960 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 6976 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 6992 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7008 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7024 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 7040 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7056 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7072 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7088 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7104 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7120 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7136 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7152 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 7168 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7184 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7200 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7216 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7232 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7248 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7264 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7280 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7296 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7312 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7328 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7344 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7360 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7376 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7392 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7408 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7424 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7440 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7456 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7472 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7488 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7504 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7520 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7536 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7552 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7568 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7584 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Key { + type: 6 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 7600 + hash: "ac036f1f5c5ae23ddfca3060dff83f15" + } + Frame { + msec: 7616 + hash: "eb0d1be15f63af6eaf6634b02e5f240a" + } + Frame { + msec: 7632 + hash: "2423c305bebb3449e87c78e8fb447c88" + } + Frame { + msec: 7648 + hash: "f0ede6ea85647728db80878b3e525edc" + } + Frame { + msec: 7664 + hash: "387d127b2b000dc344ee4768cf2d29b2" + } + Frame { + msec: 7680 + image: "gridview.7.png" + } + Frame { + msec: 7696 + hash: "1d0d8100e994c16d7973ad9a97b0068f" + } + Key { + type: 7 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 7712 + hash: "95fb4a6d0331ffc4773e39ec8c3e6511" + } + Frame { + msec: 7728 + hash: "34738f16150228d971972833d4bd5c8f" + } + Frame { + msec: 7744 + hash: "9b71c8dacc530f32d7c6f409928caf5c" + } + Frame { + msec: 7760 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7776 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7792 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7808 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7824 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7840 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7856 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7872 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7888 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7904 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7920 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7936 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7952 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 7968 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Key { + type: 6 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 7984 + hash: "831efd0970c5c29fbe10b3be7707f915" + } + Frame { + msec: 8000 + hash: "0587fc809c38c3bbe1fbac2960596974" + } + Frame { + msec: 8016 + hash: "d20eba806cf4730a850db4c095fa36f9" + } + Key { + type: 7 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 8032 + hash: "c1663e75ba05b341e1e970a451958ea0" + } + Frame { + msec: 8048 + hash: "ea40cc33b689d6b42fc5a69fa30178e4" + } + Frame { + msec: 8064 + hash: "a07a1c61de1813158ff743cd326ee427" + } + Frame { + msec: 8080 + hash: "6dfddaa340df8999ca77f6a6e4c6c3ce" + } + Frame { + msec: 8096 + hash: "76ca40bb169c1ddc291847d4be2d38d7" + } + Frame { + msec: 8112 + hash: "e44778541b76208981a3944a64235cac" + } + Frame { + msec: 8128 + hash: "fdf45ea650d31957cc675c3bec8bf53e" + } + Frame { + msec: 8144 + hash: "b78cdb727535ab7e567af08abf25e64c" + } + Frame { + msec: 8160 + hash: "b78cdb727535ab7e567af08abf25e64c" + } + Frame { + msec: 8176 + hash: "b78cdb727535ab7e567af08abf25e64c" + } + Frame { + msec: 8192 + hash: "b78cdb727535ab7e567af08abf25e64c" + } + Frame { + msec: 8208 + hash: "b78cdb727535ab7e567af08abf25e64c" + } + Frame { + msec: 8224 + hash: "b78cdb727535ab7e567af08abf25e64c" + } + Frame { + msec: 8240 + hash: "b78cdb727535ab7e567af08abf25e64c" + } + Key { + type: 6 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 8256 + hash: "b78cdb727535ab7e567af08abf25e64c" + } + Frame { + msec: 8272 + hash: "338481e6390f2a61e975084c16427584" + } + Frame { + msec: 8288 + hash: "8923c45c23b1f4250b7d1e483b07a4da" + } + Frame { + msec: 8304 + hash: "b21de834906d0eecea985561e2e41e4f" + } + Frame { + msec: 8320 + hash: "a8c9761cfb20631520ed890cd2648c4b" + } + Frame { + msec: 8336 + hash: "abf96a042ef12190bc48ff49732ef55a" + } + Key { + type: 7 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 8352 + hash: "5b9506dfb038cd26dfc81ecd2406ada9" + } + Frame { + msec: 8368 + hash: "be75b8d39f81b2fdaff01469bfc67d4a" + } + Frame { + msec: 8384 + hash: "488aa2977f349df82b5f6ae5e3619d35" + } + Frame { + msec: 8400 + hash: "d69f17f0ce8537511353d20b59d20de0" + } + Frame { + msec: 8416 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8432 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8448 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8464 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8480 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8496 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8512 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8528 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8544 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Key { + type: 6 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 8560 + hash: "7647efcc0152cc3d6544106f969ace26" + } + Frame { + msec: 8576 + hash: "8f74d33bf95cbf37fdb4521c69373a64" + } + Frame { + msec: 8592 + hash: "e33bb4cd12790c9d9992efdd3e23bee9" + } + Frame { + msec: 8608 + hash: "36f32e34b4093091c4707f26c52896ad" + } + Frame { + msec: 8624 + hash: "5ab5e142f8dc883287c116cedbacfd55" + } + Frame { + msec: 8640 + image: "gridview.8.png" + } + Key { + type: 7 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 8656 + hash: "c74212e45a6c4b6a18caeb6a22350609" + } + Frame { + msec: 8672 + hash: "8919643a7d13677dd902941860093209" + } + Frame { + msec: 8688 + hash: "6f2ab4400fadf51b994351f0975e31fc" + } + Frame { + msec: 8704 + hash: "4798559ce6f9bd7455ed5385d0030763" + } + Frame { + msec: 8720 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8736 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8752 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8768 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8784 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8800 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8816 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8832 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8848 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8864 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Key { + type: 6 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 8880 + hash: "72759bd1e2618c61c42bbe4de3ad3a96" + } + Frame { + msec: 8896 + hash: "fac81cf6f45cb47abc1fa36d23e39d34" + } + Frame { + msec: 8912 + hash: "862f4deee01183fd38b094da59048b23" + } + Frame { + msec: 8928 + hash: "2f3b147221da30d8857d25fc788b3eac" + } + Frame { + msec: 8944 + hash: "5b295b187c6cfc6aefa51e5efc2c27e3" + } + Frame { + msec: 8960 + hash: "fe3139ddc8fdbc1b0c25bd641f83e833" + } + Key { + type: 7 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 8976 + hash: "8f2a9585dc6248a403aafd0f151d6ba0" + } + Frame { + msec: 8992 + hash: "39eca8cc6bb8ea30cc452dc24f8e46dc" + } + Frame { + msec: 9008 + hash: "8dbbc6026942cb6e572f1cb7e2675713" + } + Frame { + msec: 9024 + hash: "62dfa07b96dd18c6be89822654bf09f3" + } + Frame { + msec: 9040 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9056 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9072 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9088 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9104 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9120 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9136 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9152 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9168 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9184 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9200 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9216 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9232 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9248 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9264 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Key { + type: 6 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 9280 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9296 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9312 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9328 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9344 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9360 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9376 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Key { + type: 7 + key: 16777235 + modifiers: 536870912 + text: "1e" + autorep: false + count: 1 + } + Frame { + msec: 9392 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9408 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9424 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9440 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9456 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9472 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9488 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9504 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9520 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9536 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9552 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9568 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9584 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9600 + image: "gridview.9.png" + } + Frame { + msec: 9616 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9632 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9648 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9664 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9680 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9696 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9712 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9728 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9744 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9760 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 9776 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9792 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9808 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9824 + hash: "02c632713d0dc64bff9d8e58f745df95" + } + Frame { + msec: 9840 + hash: "02c632713d0dc64bff9d8e58f745df95" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png new file mode 100644 index 0000000..3021d58 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png new file mode 100644 index 0000000..baeb1a6 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png new file mode 100644 index 0000000..b0486e5 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.10.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png new file mode 100644 index 0000000..2d0c731 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png new file mode 100644 index 0000000..af9ed05 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png new file mode 100644 index 0000000..0b0945d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png new file mode 100644 index 0000000..618ae0c Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png new file mode 100644 index 0000000..fc31262 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png new file mode 100644 index 0000000..22291ac Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png new file mode 100644 index 0000000..3021d58 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png new file mode 100644 index 0000000..2f2f5b9 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml new file mode 100644 index 0000000..1c90af9 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview2.qml @@ -0,0 +1,2479 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "dba2f6f1c773bd4cd9523108fca861c4" + } + Frame { + msec: 32 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 48 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 64 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 80 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 96 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 112 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 128 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 144 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 160 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 176 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 192 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 208 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 224 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 240 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 256 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 272 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 288 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 304 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 320 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 336 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 352 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 368 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 384 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 400 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 416 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 432 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 448 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 464 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 480 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 496 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 512 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 528 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 544 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 560 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 576 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 592 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 608 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 624 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 640 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 656 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 672 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 688 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 704 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 720 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 736 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 752 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 768 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 784 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 800 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 816 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 832 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 848 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 864 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 880 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 896 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 912 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 928 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 944 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 960 + image: "gridview2.0.png" + } + Frame { + msec: 976 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 992 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1008 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1024 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1040 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1056 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1072 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1088 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1104 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1120 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1136 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1152 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1168 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1184 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1200 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1216 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1232 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1248 + hash: "33d81c39d16c6a326012499796e50e03" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1264 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 1280 + hash: "aaec7184a27e6700d96ffff376b8fa53" + } + Frame { + msec: 1296 + hash: "3fa3a890a4ff4a59336a9a2d478d0dde" + } + Frame { + msec: 1312 + hash: "3711c6c2f4f9aba7f2c72bd1f1d85016" + } + Frame { + msec: 1328 + hash: "23da2f9a800b805ce7b77ff08218907d" + } + Frame { + msec: 1344 + hash: "12e4bc953b06cdaad0720f87fb96a37e" + } + Frame { + msec: 1360 + hash: "46e69658bda69bab202a2790a76ba1cd" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 1376 + hash: "44608e67c69b92ccbb45e119e1158fe3" + } + Frame { + msec: 1392 + hash: "97a309b47017d38294644a486a7ce68e" + } + Frame { + msec: 1408 + hash: "41f42b50b22e0496c8aca5019b24b9cb" + } + Frame { + msec: 1424 + hash: "8603ea1cb60c804563f50bc41c0180fe" + } + Frame { + msec: 1440 + hash: "e29777fa70daafe9640c6e9bb7bd63d6" + } + Frame { + msec: 1456 + hash: "2c4c360320f527e99fee799e68c2c0aa" + } + Frame { + msec: 1472 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Frame { + msec: 1488 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Frame { + msec: 1504 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Frame { + msec: 1520 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Frame { + msec: 1536 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Frame { + msec: 1552 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Frame { + msec: 1568 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Frame { + msec: 1584 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Key { + type: 6 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 1600 + hash: "0d30916c7e05ff8609af5894f47a89bb" + } + Frame { + msec: 1616 + hash: "17027b7c099b11cb5382f30dbbd1e647" + } + Frame { + msec: 1632 + hash: "0e17461a4ca843f9903b7f03e99a0b00" + } + Frame { + msec: 1648 + hash: "a5e61901920553e59892fa405beea15a" + } + Frame { + msec: 1664 + hash: "310eaf71fe8d3807606e58a666c65ccd" + } + Frame { + msec: 1680 + hash: "76f556d05fb77082f33eb1836c10587a" + } + Key { + type: 7 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 1696 + hash: "4e7e4b7790a96396e7ea3533b5c32ed9" + } + Frame { + msec: 1712 + hash: "b065287b6490f58ca6f0e9eb2027cf20" + } + Frame { + msec: 1728 + hash: "907cd9dbdffa1d395caaabd466dc8e86" + } + Frame { + msec: 1744 + hash: "3b144e5b4867328beafa3020ce931480" + } + Frame { + msec: 1760 + hash: "b59b2b60b7d55424b61b1b0ed3e227b8" + } + Frame { + msec: 1776 + hash: "4032e934871b315b68c7c2abea42efee" + } + Frame { + msec: 1792 + hash: "8f80127b2f8d6fc10aa84062544cc381" + } + Frame { + msec: 1808 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1824 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1840 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1856 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1872 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1888 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1904 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1920 + image: "gridview2.1.png" + } + Frame { + msec: 1936 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1952 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1968 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 1984 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 2000 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 2016 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2032 + hash: "77d5193bc5f53fe5cb98a236c55f841e" + } + Frame { + msec: 2048 + hash: "a45d2630872a14541f39b862e15ff461" + } + Frame { + msec: 2064 + hash: "714711d7382ef8bba5fb39e2e44bd59c" + } + Frame { + msec: 2080 + hash: "63deed0356e761f94f88be18a7d10053" + } + Frame { + msec: 2096 + hash: "d5b4fc1b568a4a1b63a91b422272c704" + } + Frame { + msec: 2112 + hash: "b6d2c80925cc6b4b7b297bd6ee903c7c" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 2128 + hash: "38117482196360353586cb7ace593894" + } + Frame { + msec: 2144 + hash: "2301f3a148bf4e311cc8ce011ddf65f8" + } + Frame { + msec: 2160 + hash: "2a4982a0961f89a15618f8d4c2081f5a" + } + Frame { + msec: 2176 + hash: "acf8666d6a8a29925f3895aa8e93f713" + } + Frame { + msec: 2192 + hash: "967ed026bc92a6d2747c5227105543a6" + } + Frame { + msec: 2208 + hash: "ff72f3fb95f25990c99c1c14cfef57da" + } + Frame { + msec: 2224 + hash: "0874a4f863596c3860dcf5b1f7f6ceb2" + } + Frame { + msec: 2240 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2256 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2272 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2288 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2304 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2320 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2336 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2352 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2368 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Key { + type: 6 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 2384 + hash: "520445d8619ad9bdde0db0e61f17567c" + } + Frame { + msec: 2400 + hash: "7c4bbf0423d63d7642d218cac56a6215" + } + Frame { + msec: 2416 + hash: "e8c77dbc89721b51549f8d46453fe09d" + } + Frame { + msec: 2432 + hash: "7953503590b639872ac12215695e8cea" + } + Frame { + msec: 2448 + hash: "edaee946a2e25fed6de9acfda0d44a14" + } + Frame { + msec: 2464 + hash: "4996ef39bb0122c10d65f8dd8674b386" + } + Frame { + msec: 2480 + hash: "ede7c6ca9d6deb7819c3715e98755d6e" + } + Frame { + msec: 2496 + hash: "e703fad2fcf9244ec9865200c7d17ce3" + } + Key { + type: 7 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 2512 + hash: "e2bfc16fd893bb3eb0e5df89a0169af3" + } + Frame { + msec: 2528 + hash: "cfd0eb2bc378bd46644f3f7820150685" + } + Frame { + msec: 2544 + hash: "442b05b04762c2bcda291aaa0341398e" + } + Frame { + msec: 2560 + hash: "55842a6503057eea98e2075ef160873e" + } + Frame { + msec: 2576 + hash: "730f80233dacf1119660a76d2a34c5fc" + } + Frame { + msec: 2592 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2608 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2624 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2640 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2656 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2672 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2688 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2704 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2720 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2736 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Key { + type: 6 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 2752 + hash: "d4a48ee79a18cc5c0bc123fbb40c3efd" + } + Frame { + msec: 2768 + hash: "4d04c12bc7fab0b22df3135bf3a87a22" + } + Frame { + msec: 2784 + hash: "fdca5a3f8312452feba7f37b1caa6419" + } + Frame { + msec: 2800 + hash: "97b955e0f8cde30299b238d9ac0eb308" + } + Frame { + msec: 2816 + hash: "19664de1a738458810896959ba4087ad" + } + Frame { + msec: 2832 + hash: "4f9a4b6de6a2969e4639076a8f7c258e" + } + Key { + type: 7 + key: 16777234 + modifiers: 536870912 + text: "1c" + autorep: false + count: 1 + } + Frame { + msec: 2848 + hash: "a10f18aa686be2681a48082ec9f01df7" + } + Frame { + msec: 2864 + hash: "b8f39a6cca377dd573429d879286dd63" + } + Frame { + msec: 2880 + image: "gridview2.2.png" + } + Frame { + msec: 2896 + hash: "3301e52a46efbc49882401c77853ffde" + } + Frame { + msec: 2912 + hash: "0c614597f17496ebc701efe7b0c1fbb6" + } + Frame { + msec: 2928 + hash: "6dda2d6b034c932e279cf216c9b3e6ad" + } + Frame { + msec: 2944 + hash: "7bf08cd5fe3ad3f83bbef28f452e0545" + } + Frame { + msec: 2960 + hash: "1b7ebcf0e3d68e429cb04966120985e5" + } + Frame { + msec: 2976 + hash: "1b7ebcf0e3d68e429cb04966120985e5" + } + Frame { + msec: 2992 + hash: "1b7ebcf0e3d68e429cb04966120985e5" + } + Frame { + msec: 3008 + hash: "1b7ebcf0e3d68e429cb04966120985e5" + } + Frame { + msec: 3024 + hash: "1b7ebcf0e3d68e429cb04966120985e5" + } + Key { + type: 6 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 3040 + hash: "1b7ebcf0e3d68e429cb04966120985e5" + } + Frame { + msec: 3056 + hash: "0fe7d46e7c18ce7bb5a098c5c662d557" + } + Frame { + msec: 3072 + hash: "cd5df541cc1ed545bc27da9e4a937261" + } + Frame { + msec: 3088 + hash: "35762467b83fee1870cff9b0436994d3" + } + Frame { + msec: 3104 + hash: "75a620b42caabf5b1576041dbd4c2808" + } + Frame { + msec: 3120 + hash: "f1b06290a6cbd48b8d3d4ce1e42ed754" + } + Frame { + msec: 3136 + hash: "8e1a50dc082828587a4656117760a852" + } + Frame { + msec: 3152 + hash: "aae8e5f166e736040138d8e222a844dd" + } + Frame { + msec: 3168 + hash: "f69e5cf2bcb26fe49126776695b0b7e0" + } + Key { + type: 7 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 3184 + hash: "7b482fece0255ea07496ef0545b008a2" + } + Frame { + msec: 3200 + hash: "3f96eaebfebe8d4eeb347b201b59ab11" + } + Frame { + msec: 3216 + hash: "9943626d2226c3be711c8213906133f0" + } + Frame { + msec: 3232 + hash: "fd5fd8177b3957c27f1de0d95621351a" + } + Frame { + msec: 3248 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3264 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3280 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3296 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3312 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3328 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3344 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3360 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3376 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3392 + hash: "506283ccfe9670633ce0bf60b437b37b" + } + Frame { + msec: 3408 + hash: "fb437f6c23561092a124e498f1604ff2" + } + Frame { + msec: 3424 + hash: "402ba144bbb7260eec4553e68eb35cda" + } + Frame { + msec: 3440 + hash: "76a983de9e85e0c81dfb8908252bd6c9" + } + Frame { + msec: 3456 + hash: "09219f55fae47a0afed887ebf68a36bc" + } + Frame { + msec: 3472 + hash: "344e81cc262093facef2f6a235a734dc" + } + Frame { + msec: 3488 + hash: "8f1c5544eb537555b1c59a377b15e31d" + } + Frame { + msec: 3504 + hash: "606b9bb549fe2e4bbd09d67b7dea0d1a" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3520 + hash: "63e239c97bd01a61cb31ef2869e7f47c" + } + Frame { + msec: 3536 + hash: "f7c176550c39f8a1ad64590cf33a60a4" + } + Frame { + msec: 3552 + hash: "8581cb14ed81efdf9abb638b5e542cc3" + } + Frame { + msec: 3568 + hash: "7a1e9354ecc49d8bc27d303c7bdc81f9" + } + Frame { + msec: 3584 + hash: "610288b97276ee03702ed8a814ef333d" + } + Frame { + msec: 3600 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3616 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3632 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3648 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3664 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3680 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3696 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3712 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3728 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3744 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3760 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3776 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3792 + hash: "8d36bc2f3ab614d19f3ec8821f3e81ed" + } + Frame { + msec: 3808 + hash: "9713c6b9aff051dd0cc45c545d34b688" + } + Frame { + msec: 3824 + hash: "1f8fd4d759e343720a8681b6ad126b72" + } + Frame { + msec: 3840 + image: "gridview2.3.png" + } + Frame { + msec: 3856 + hash: "8550d916d91a40b0c3a886b962e07ffc" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 3872 + hash: "df0c2e474139e79429bfc19c79a65ef8" + } + Frame { + msec: 3888 + hash: "acfb99d081d754276e5ed59bd590aeab" + } + Frame { + msec: 3904 + hash: "2b34cd101b442f7a3de2893fd5514c16" + } + Frame { + msec: 3920 + hash: "df92ced66faa1d59354d8010278438ec" + } + Frame { + msec: 3936 + hash: "dd39a8e6fa3784453461193a6da416cd" + } + Frame { + msec: 3952 + hash: "5670e8f91ea2df451f0974a51cd77d7d" + } + Frame { + msec: 3968 + hash: "74b97a09bfe7400872a2c6214e04a5ac" + } + Frame { + msec: 3984 + hash: "cfd55b963506ab54cf09a7311e84bcc9" + } + Frame { + msec: 4000 + hash: "59657ee9293c03f064d62de826931435" + } + Frame { + msec: 4016 + hash: "31f6a4adf31be5ed0af0ea4097e3acee" + } + Frame { + msec: 4032 + hash: "8f5bfc40c8cdb2f8ce69adb72e7efe76" + } + Frame { + msec: 4048 + hash: "9dc38985113124130e2ca7950e0bd144" + } + Frame { + msec: 4064 + hash: "786e6e8b9e74876a6f393d61a78b8fc7" + } + Frame { + msec: 4080 + hash: "1f4d59a4e4684aab309363a711b30006" + } + Frame { + msec: 4096 + hash: "a11e332de151b43051796e16dbcf75c3" + } + Frame { + msec: 4112 + hash: "1a0e82029ae107cb2a018786752433ff" + } + Frame { + msec: 4128 + hash: "b14c51977c7fbf51f9cf6fec309bff6a" + } + Frame { + msec: 4144 + hash: "2b418f811992399c3f87c268db745632" + } + Frame { + msec: 4160 + hash: "0e9a056207053ca98c4e9f42de244c62" + } + Frame { + msec: 4176 + hash: "1945c3f9e3a1337e7d111e15adea345f" + } + Frame { + msec: 4192 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4208 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4224 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4240 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4256 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4272 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4288 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4304 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4320 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4336 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4352 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4368 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4384 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4400 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4416 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4432 + hash: "d8cf36b6cc15a01ead815d814ae81cb4" + } + Frame { + msec: 4448 + hash: "1945c3f9e3a1337e7d111e15adea345f" + } + Frame { + msec: 4464 + hash: "0e9a056207053ca98c4e9f42de244c62" + } + Frame { + msec: 4480 + hash: "2b418f811992399c3f87c268db745632" + } + Frame { + msec: 4496 + hash: "b14c51977c7fbf51f9cf6fec309bff6a" + } + Frame { + msec: 4512 + hash: "1a0e82029ae107cb2a018786752433ff" + } + Frame { + msec: 4528 + hash: "a11e332de151b43051796e16dbcf75c3" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4544 + hash: "1f4d59a4e4684aab309363a711b30006" + } + Frame { + msec: 4560 + hash: "786e6e8b9e74876a6f393d61a78b8fc7" + } + Frame { + msec: 4576 + hash: "9dc38985113124130e2ca7950e0bd144" + } + Frame { + msec: 4592 + hash: "8f5bfc40c8cdb2f8ce69adb72e7efe76" + } + Frame { + msec: 4608 + hash: "31f6a4adf31be5ed0af0ea4097e3acee" + } + Frame { + msec: 4624 + hash: "59657ee9293c03f064d62de826931435" + } + Frame { + msec: 4640 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4656 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4672 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4688 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4704 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4720 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4736 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4752 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4768 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4784 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4800 + image: "gridview2.4.png" + } + Frame { + msec: 4816 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Key { + type: 6 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4832 + hash: "23aa652a0de7fced4a780d72f0940a1b" + } + Frame { + msec: 4848 + hash: "d46eea049d6156a5e85d9c6811d9d367" + } + Frame { + msec: 4864 + hash: "d5796ae85247cb8502f92f0d044e4e1f" + } + Frame { + msec: 4880 + hash: "90987ac49c1a4e6b668436e3ff631e6c" + } + Frame { + msec: 4896 + hash: "c38d69759ad80242b1fe83ba191cd421" + } + Frame { + msec: 4912 + hash: "09d08aed76a04e492d8a39cc4dd2b8f5" + } + Key { + type: 7 + key: 16777236 + modifiers: 536870912 + text: "1d" + autorep: false + count: 1 + } + Frame { + msec: 4928 + hash: "9671d2ff9a2ef46ce3c750a1965404a4" + } + Frame { + msec: 4944 + hash: "f55857816d666ece4a7987a70883b3d1" + } + Frame { + msec: 4960 + hash: "a2d80527b30316d9120b057bbfcfa666" + } + Frame { + msec: 4976 + hash: "87ca69287c1469cbc7e65d1673016de7" + } + Frame { + msec: 4992 + hash: "51588c7ebbe2dcd87a3c9bebf028aee3" + } + Frame { + msec: 5008 + hash: "917a9a171273fe9fd4c450eeed6f58ed" + } + Frame { + msec: 5024 + hash: "6e7ade250a9a9692caee2a220dd2ac53" + } + Frame { + msec: 5040 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5056 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5072 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5088 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5104 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5120 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5136 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5152 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5168 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5184 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5200 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5216 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5232 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5248 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5264 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5280 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5296 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5312 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5328 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5344 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5360 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5376 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5392 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5408 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5424 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5440 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5456 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5472 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5488 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5504 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5520 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5536 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5552 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5568 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5584 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5600 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Key { + type: 6 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 5616 + hash: "ca2dcb16d553889a3a57b48700c2a595" + } + Frame { + msec: 5632 + hash: "c5c9aab9bea757f1c451e89df72bd836" + } + Frame { + msec: 5648 + hash: "a8cf3085f8c3b743f3f15db1ad7b8801" + } + Frame { + msec: 5664 + hash: "c25a92050eced1c304506572723273a3" + } + Frame { + msec: 5680 + hash: "cff981039c1a3eb6c3c1a20f142fbae2" + } + Frame { + msec: 5696 + hash: "930765587fe3355873bbdff66b812b74" + } + Frame { + msec: 5712 + hash: "6a60f97c7b39add465e1bd366e9c644b" + } + Key { + type: 7 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 5728 + hash: "7a1fd3c488d1064a75dc598c9a773291" + } + Frame { + msec: 5744 + hash: "e2ecd7e68e27eb3d2dcb5e368d3ee5a0" + } + Frame { + msec: 5760 + image: "gridview2.5.png" + } + Frame { + msec: 5776 + hash: "20f3aaca2efc3066076e73d1d95e5363" + } + Frame { + msec: 5792 + hash: "b18d476cadc36e22dddc3185f595c123" + } + Frame { + msec: 5808 + hash: "8cbc47555178c8ee355774eab17b4b19" + } + Frame { + msec: 5824 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5840 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5856 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5872 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5888 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5904 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5920 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5936 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5952 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5968 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 5984 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 6000 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 6016 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 6032 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 6048 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 6064 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 6080 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 6096 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Key { + type: 6 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 6112 + hash: "e488fb76fb550fba51b95bee3fee80d5" + } + Frame { + msec: 6128 + hash: "8c2fab0c73d1cfbeeb0ec937085d6b3b" + } + Frame { + msec: 6144 + hash: "5d9353517177ef7c6314d8a65cb009ec" + } + Frame { + msec: 6160 + hash: "ed8de504f7e2028cd369c1555314fd81" + } + Frame { + msec: 6176 + hash: "8fe84d8badbe5bd08d097ba6bda10611" + } + Frame { + msec: 6192 + hash: "d77419a55a3cf933505e793bb258e6af" + } + Frame { + msec: 6208 + hash: "457ac82be02e2f5e08e51ccc78c94781" + } + Frame { + msec: 6224 + hash: "e57e2852f065afff9c24c5bc9f29edee" + } + Frame { + msec: 6240 + hash: "f72cd6ad3324936c3a18c264e23e05a9" + } + Key { + type: 7 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 6256 + hash: "a4bf7eae6fc7a05239d09421ae95304a" + } + Frame { + msec: 6272 + hash: "423f3bd07df8bee25818644c07201a3c" + } + Frame { + msec: 6288 + hash: "225e9c698424f287b9458b7839b4479b" + } + Frame { + msec: 6304 + hash: "0f463db7e4acc184a4efb7b5e5c0d397" + } + Frame { + msec: 6320 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6336 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6352 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6368 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6384 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6400 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6416 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6432 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6448 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6464 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6480 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6496 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6512 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6528 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6544 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6560 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6576 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6592 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6608 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6624 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6640 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6656 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6672 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6688 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6704 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6720 + image: "gridview2.6.png" + } + Frame { + msec: 6736 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Key { + type: 6 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 6752 + hash: "b92ad1c3be35c46c0d12bf7701c56f23" + } + Frame { + msec: 6768 + hash: "738f6bcc043d221488285c7e529b1d1c" + } + Frame { + msec: 6784 + hash: "cb0a4e8e79372dd67e8ecfea2143a47c" + } + Frame { + msec: 6800 + hash: "544d1825b36f4e7950c1a62b26c1fd9b" + } + Frame { + msec: 6816 + hash: "df99396622342b4f092b0db34a224c3d" + } + Frame { + msec: 6832 + hash: "47391f51e5df2249a6ca1f1f6e8e80e0" + } + Key { + type: 7 + key: 16777237 + modifiers: 536870912 + text: "1f" + autorep: false + count: 1 + } + Frame { + msec: 6848 + hash: "d8079a874ca18d00aeeb611effcbeb8b" + } + Frame { + msec: 6864 + hash: "4cfd9264af6935aca425da75ebb2d7cc" + } + Frame { + msec: 6880 + hash: "aee6547cb653cd2d56d07285d836149d" + } + Frame { + msec: 6896 + hash: "969720f17eae51258e2e143e14bfa737" + } + Frame { + msec: 6912 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 6928 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 6944 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 6960 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 6976 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 6992 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7008 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7024 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7040 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7056 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7072 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7088 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7104 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7120 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7136 + hash: "b6a0ee0b24737bc0045ff3fb68cfe3ad" + } + Frame { + msec: 7152 + hash: "beeaec4b983c970ae448e33047dfdfea" + } + Frame { + msec: 7168 + hash: "7c415ab1b7d8e25b71af75d3eec8ee4a" + } + Frame { + msec: 7184 + hash: "8913037e57b9a6a58b68f2d6e69b1bd1" + } + Frame { + msec: 7200 + hash: "19e59e9409fdaf90ccf75606b58688b7" + } + Frame { + msec: 7216 + hash: "1ae71ef5b1006f637bd8df0769af65a6" + } + Frame { + msec: 7232 + hash: "1f0aa8b368b2dbccafd54b923d8cce95" + } + Frame { + msec: 7248 + hash: "c5079fb25a8c80a995d7aa5fbbd91428" + } + Frame { + msec: 7264 + hash: "59f41220fa5d23db298c9e94f115c17b" + } + Frame { + msec: 7280 + hash: "48259dfe8b266d9e7f50b187be98c3cb" + } + Frame { + msec: 7296 + hash: "f7554552598351c3b8dfcbe3ebc32b3b" + } + Frame { + msec: 7312 + hash: "219e9cd84d7e5c5c0e6cb80100aa3ab5" + } + Frame { + msec: 7328 + hash: "5578e870ee8ce00bce5a59bb25e3d0a9" + } + Frame { + msec: 7344 + hash: "4d9cebbf750c03380694245e0e22ab94" + } + Frame { + msec: 7360 + hash: "a60a8032e97ed0a3caa05012c1283de5" + } + Frame { + msec: 7376 + hash: "3bee20b349a7e9d67f7770ede6da8673" + } + Frame { + msec: 7392 + hash: "d8c34576c25fb8b5e4fa12680ac32e99" + } + Frame { + msec: 7408 + hash: "cd1360aa7db7c3b2f2012dfc44de2198" + } + Frame { + msec: 7424 + hash: "cd82782f63c9a7d21d51b3440c2f038b" + } + Frame { + msec: 7440 + hash: "e59061967a841aa45607c0828b687527" + } + Frame { + msec: 7456 + hash: "01962406c9aaf1aa8bf3ab49e30ddf5f" + } + Frame { + msec: 7472 + hash: "5a5732a568189e598c7985ee806bc67e" + } + Frame { + msec: 7488 + hash: "54775aed3a6283c1fa330d65de5bc70c" + } + Frame { + msec: 7504 + hash: "66640b4a5c1e68924b25de24e3c3f008" + } + Frame { + msec: 7520 + hash: "76999d3125f20ba47dbdff38ee722a8a" + } + Frame { + msec: 7536 + hash: "5159c81533bee8825cff11910bcb90dc" + } + Frame { + msec: 7552 + hash: "ac0295495345987d1e000f6bb2436927" + } + Frame { + msec: 7568 + hash: "d56b4a04f1d2835a0852ea20e8e2f451" + } + Frame { + msec: 7584 + hash: "ae41fe23e2ab508d7642973c0d9d35b0" + } + Frame { + msec: 7600 + hash: "730ca01fbee6ec4928715ec52773c06c" + } + Frame { + msec: 7616 + hash: "ad1fa52c617a2b119d61eb9fb7d58a82" + } + Frame { + msec: 7632 + hash: "c74321a822b515a393e8e218bd45e8e3" + } + Frame { + msec: 7648 + hash: "a9e2f3bee1d47166204c74bdf90cd8c8" + } + Frame { + msec: 7664 + hash: "e10d4bf08980ea7d079a2f359ee62b95" + } + Frame { + msec: 7680 + image: "gridview2.7.png" + } + Frame { + msec: 7696 + hash: "9f0ba6051e684e54ff4e36d980a7e600" + } + Frame { + msec: 7712 + hash: "aa6268d8d7fb3d2b91db3e225e8c818a" + } + Frame { + msec: 7728 + hash: "8e547e55279b1929f42bf51e753f142e" + } + Frame { + msec: 7744 + hash: "5386c71f8d6701379e177f161d714da2" + } + Frame { + msec: 7760 + hash: "a184e9e6012c72fc1aeaed9f98b0fb1e" + } + Frame { + msec: 7776 + hash: "777a6b70ca77c45e2e5e3914cc328dcb" + } + Frame { + msec: 7792 + hash: "424f73f25a1e91126f951838d45adc3b" + } + Frame { + msec: 7808 + hash: "3f7f2eb6b9a5d19fbfcd700baf566dfb" + } + Frame { + msec: 7824 + hash: "c3c4c72b25c2295b82a5fd7454942f77" + } + Frame { + msec: 7840 + hash: "3b35e93d3eb9d28c5c03d6d353f805d2" + } + Frame { + msec: 7856 + hash: "5dcad019a1c0eaaab381a7602e1914ff" + } + Frame { + msec: 7872 + hash: "602a5c569555767413bf445af44c744f" + } + Frame { + msec: 7888 + hash: "3e9facab95dae772f695b6f7c5175063" + } + Frame { + msec: 7904 + hash: "0921220ec36ca7b25eaae699872a2006" + } + Frame { + msec: 7920 + hash: "1d5fa7fd630af62bcc805bdc6686df37" + } + Frame { + msec: 7936 + hash: "165c02de63604aa118d9f8995e6b45af" + } + Frame { + msec: 7952 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 7968 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 7984 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8000 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8016 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8032 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8048 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8064 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8080 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8096 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8112 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8128 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8144 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8160 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8176 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8192 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8208 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8224 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8240 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8256 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8272 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8288 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8304 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8320 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8336 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8352 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8368 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8384 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8400 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8416 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8432 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8448 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8464 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8480 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8496 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8512 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8528 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8544 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8560 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8576 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8592 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8608 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8624 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8640 + image: "gridview2.8.png" + } + Frame { + msec: 8656 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8672 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8688 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8704 + hash: "33d81c39d16c6a326012499796e50e03" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8720 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8736 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8752 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8768 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8784 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8800 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8816 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8832 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8848 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8864 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8880 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8896 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8912 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8928 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8944 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8960 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8976 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 8992 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 9008 + hash: "33d81c39d16c6a326012499796e50e03" + } + Frame { + msec: 9024 + hash: "33d81c39d16c6a326012499796e50e03" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml index 4dac63e..c79e19f 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml @@ -1,7 +1,5 @@ import QtQuick 1.0 -//Currently doesn't behave right, see QTBUG-14837 - Rectangle { width: 300; height: 400; color: "black" diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml index e27b4df..811e0e4 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml @@ -1,7 +1,5 @@ import QtQuick 1.0 -//Currently doesn't behave right: see QTBUG-14838 - Rectangle { width: 300; height: 400; color: "black" -- cgit v0.12 From f513381e22a56dedd340df83bed8a50b7c9591f0 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 15:21:22 +1000 Subject: Update gridview visual tests The bug found in gridview.qml doesn't actually stop the test from passing, so it's now updated. Task-number: QTBUG-14792 --- .../qdeclarativegridview/data/gridview.0.png | Bin 1303 -> 1318 bytes .../qdeclarativegridview/data/gridview.1.png | Bin 1317 -> 1332 bytes .../qdeclarativegridview/data/gridview.2.png | Bin 1318 -> 1331 bytes .../qdeclarativegridview/data/gridview.3.png | Bin 1306 -> 1321 bytes .../qdeclarativegridview/data/gridview.4.png | Bin 1308 -> 1325 bytes .../qdeclarativegridview/data/gridview.5.png | Bin 1303 -> 1321 bytes .../qdeclarativegridview/data/gridview.6.png | Bin 1323 -> 1341 bytes .../qdeclarativegridview/data/gridview.7.png | Bin 1325 -> 1341 bytes .../qdeclarativegridview/data/gridview.8.png | Bin 1346 -> 1359 bytes .../qdeclarativegridview/data/gridview.9.png | Bin 1303 -> 1318 bytes .../qdeclarativegridview/data/gridview.qml | 742 ++++++++++----------- .../qmlvisual/qdeclarativegridview/gridview.qml | 2 +- .../qmlvisual/qdeclarativegridview/gridview2.qml | 3 +- 13 files changed, 374 insertions(+), 373 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png index 6c82777..c675be7 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png index 07b1f7c..9f605c3 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png index f2f08c0..35572c5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png index 08649f9..20146c9 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png index f9c2f17..85fac89 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png index 52ec0bd..e522bae 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png index 3fe25be..ec0ba86 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png index 4cc12a6..20cacc81 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png index 2267f23..b2b187d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png index 6c82777..c675be7 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png and b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml index 67aa10a..a3e5ea0 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/data/gridview.qml @@ -122,27 +122,27 @@ VisualTest { } Frame { msec: 448 - hash: "96ad89eafa7f99269518a192573af91b" + hash: "c33447c78ea64452ec3cd1696fb502eb" } Frame { msec: 464 - hash: "735b00b968d0e2ea1f34cc0bdc028a8e" + hash: "159004854f8c07144034e1265cf6f44a" } Frame { msec: 480 - hash: "ce37c8e15fbb1aea72aff9629683fa96" + hash: "a3f2471ef4ceac77a1c20ac327550d8d" } Frame { msec: 496 - hash: "a3f2471ef4ceac77a1c20ac327550d8d" + hash: "1121efa0df5057387be08fced62fe9eb" } Frame { msec: 512 - hash: "28f120bd3bda9552dbc8cc908409c67d" + hash: "67ad85cda0b8fb382cb536ef880f715b" } Frame { msec: 528 - hash: "f21cf0ed746fa48e67dc90c70c5bbae8" + hash: "4de18d32c93ca5cd77cb45c8c4f3b4fc" } Key { type: 7 @@ -154,19 +154,19 @@ VisualTest { } Frame { msec: 544 - hash: "485d55730366b68e01582879f6970fa1" + hash: "de26f0243101d57f4acf42b256ad75f9" } Frame { msec: 560 - hash: "700e53c78b28993dce5dafb4035f4760" + hash: "119ea359724d5f4ba1e1aa120cddf3ea" } Frame { msec: 576 - hash: "1e538e175a5e402e2334cf354392e8a7" + hash: "65fbee28f9ea68a6f2736d75a65b3ee2" } Frame { msec: 592 - hash: "0fbfba93eebaf05ae60067b365b6b4bc" + hash: "7b1893397b76b0c95094eeca1dd21446" } Frame { msec: 608 @@ -206,31 +206,31 @@ VisualTest { } Frame { msec: 720 - hash: "25e48099a8194ed2674651818d854c61" + hash: "7b1893397b76b0c95094eeca1dd21446" } Frame { msec: 736 - hash: "b75d02dfc238ba2292306ca1421279c3" + hash: "6123118055b4d0678eb2b7cdf8b12592" } Frame { msec: 752 - hash: "7e48b7d9c1291b4e438c81f44228d8ad" + hash: "fe4b009abe081a6eaeab6ef9e996f3fd" } Frame { msec: 768 - hash: "fe4b009abe081a6eaeab6ef9e996f3fd" + hash: "2f23f647daa1c11637d6a21c2668be49" } Frame { msec: 784 - hash: "edea8c305fe88708dbafc03e427caa09" + hash: "62d995a1feb7f600669c1c7ef5f6a5da" } Frame { msec: 800 - hash: "7b58803f12d0ab893acf539799d79e31" + hash: "66e881ee93f4722605a63dccd083635d" } Frame { msec: 816 - hash: "9b56c3d1d140114dcc57d0a8568e9b95" + hash: "27ac08cc4f62552a9d1c1cbf781a00f9" } Key { type: 7 @@ -242,15 +242,15 @@ VisualTest { } Frame { msec: 832 - hash: "35e38e273dbc8e565917b21d00fc1530" + hash: "792be2ec5a08ad74cda4c19b6bc209d0" } Frame { msec: 848 - hash: "116e294391333e8780daeca54c3d51ea" + hash: "0d28add40afd81f768603ea3e396f0b3" } Frame { msec: 864 - hash: "6219676215f82540d7a53b2a8aa60279" + hash: "02c632713d0dc64bff9d8e58f745df95" } Frame { msec: 880 @@ -334,15 +334,15 @@ VisualTest { } Frame { msec: 1168 - hash: "2667c2596de97dc15353158eba03495f" + hash: "02c632713d0dc64bff9d8e58f745df95" } Frame { msec: 1184 - hash: "6a7b64e1427dcb7e438aa09a739cbc7b" + hash: "eac6b1299cb386f2be244b43a0be26ae" } Frame { msec: 1200 - hash: "5bad6dc745958f5827403ea593c78752" + hash: "14350c877f5259a3cb3836fa5f8ff563" } Key { type: 7 @@ -354,31 +354,31 @@ VisualTest { } Frame { msec: 1216 - hash: "b393401219ada7d094a451dba8af3f1a" + hash: "582bfeca87cba0dee21b9551e583ec93" } Frame { msec: 1232 - hash: "ba656452f8adf3d1ca7db9286274c37f" + hash: "cefe1139141fa381e55f1254713a1380" } Frame { msec: 1248 - hash: "1e9725c8c364a491f34035fad1f77c63" + hash: "72e966a995c818b16b48bb193eda241a" } Frame { msec: 1264 - hash: "a0aef0b65446dec0673b5cec3a260390" + hash: "8dfeefd93687861158ca4496e56cdbb9" } Frame { msec: 1280 - hash: "d60c11a5d376af0831d6f05f2a839a92" + hash: "daf8474f1f583039f6a14b822e5dff5e" } Frame { msec: 1296 - hash: "1dd2c456c6ee9cc8f9be0e9f3617d44b" + hash: "eb2b4ba7ffab22660d0b9de4226ea88f" } Frame { msec: 1312 - hash: "56208e6551e2f4202bab2d62a1cf46a2" + hash: "f0f00d22d15ed9828db7b5f3a3669fe9" } Frame { msec: 1328 @@ -474,31 +474,31 @@ VisualTest { } Frame { msec: 1664 - hash: "f0f00d22d15ed9828db7b5f3a3669fe9" + hash: "caa3c1a106d549e6bb94a1746bd7a53c" } Frame { msec: 1680 - hash: "153e7984089530bbd052c9e4f62eb14c" + hash: "66e158aa7dd78362dffddf2a9e7375ef" } Frame { msec: 1696 - hash: "0525d40cc58d054a3abd7ee2486576f8" + hash: "8c23d5245774ab5252c98c19c33f8171" } Frame { msec: 1712 - hash: "8c23d5245774ab5252c98c19c33f8171" + hash: "bf37dc941e49af9bd1e0e182a4ef6f0a" } Frame { msec: 1728 - hash: "5ca243794d1350f04cf973d4bfc8ab89" + hash: "3fc025193fa6d6db0428ae1fa179bf55" } Frame { msec: 1744 - hash: "d19b7f4c0897aba498e122d83b4cbbf1" + hash: "9efef22e6e29e18b2896982440c7bbae" } Frame { msec: 1760 - hash: "99e41460dd8efc6e5c3faf54b14c3d43" + hash: "380e92b30430d3f589a88e67b7b959bd" } Key { type: 7 @@ -510,15 +510,15 @@ VisualTest { } Frame { msec: 1776 - hash: "703469f8b133156ed3aabe02762d66c3" + hash: "80329cd1548c4ff9ee589d56e9d8cd90" } Frame { msec: 1792 - hash: "1cc2c383e988048db76a80d8d7f5a0e2" + hash: "6030c139032fc80abb5aabb85d8dfa4d" } Frame { msec: 1808 - hash: "8e87117c19eb9d6e600c44e0f3869ae1" + hash: "8304d2432168a2ea8a887d9a135b40b4" } Frame { msec: 1824 @@ -574,27 +574,27 @@ VisualTest { } Frame { msec: 2000 - hash: "4924037ce643d0748b8b2c666e61fd62" + hash: "8304d2432168a2ea8a887d9a135b40b4" } Frame { msec: 2016 - hash: "ef9750584e669a8b2d415d13854e12a6" + hash: "719eabf9ad7e15d5429630c7f7136980" } Frame { msec: 2032 - hash: "69937eacef6e6b11ad1d5741c69a1faa" + hash: "a1bd870fffd95a0604dd8e170e571632" } Frame { msec: 2048 - hash: "a1bd870fffd95a0604dd8e170e571632" + hash: "b406160dda839ee34002190e05ceffac" } Frame { msec: 2064 - hash: "a3a72386594aacc88977cdaa6441df48" + hash: "a139784af7675281f0f3760a932aef0c" } Frame { msec: 2080 - hash: "6d8e89de38d52f0f0f871dfa18361cb5" + hash: "2c7d2f857919deae0a8ad6dc2f7d806f" } Key { type: 7 @@ -606,19 +606,19 @@ VisualTest { } Frame { msec: 2096 - hash: "96cfb1eb6893fac86c9434d1ffb82fcb" + hash: "80af5431f6d9a77f98c23d913c6caad4" } Frame { msec: 2112 - hash: "5e11df1660634ff317be474118174ec5" + hash: "b3ccaf648e09dbfcbaa7609440c63fc9" } Frame { msec: 2128 - hash: "2eb75858b50c3a9a80673ab89014ed63" + hash: "d267f9f4dd471be1cf4718d212c79887" } Frame { msec: 2144 - hash: "3ff5d66f7902af92d49ebebf04d16c26" + hash: "570da61e2d48acd11474fe005110ab4b" } Frame { msec: 2160 @@ -678,31 +678,31 @@ VisualTest { } Frame { msec: 2352 - hash: "efeda5b2d97e1b7c22e2308250501cb7" + hash: "570da61e2d48acd11474fe005110ab4b" } Frame { msec: 2368 - hash: "d6158379b699279f66b94a8418e53af1" + hash: "db27d4cc92c09148675e76459d8ecb15" } Frame { msec: 2384 - hash: "ab960b0669fa594e0552df623a9136ea" + hash: "2c6f60eb170588a8450c679f3b16a6a4" } Frame { msec: 2400 - hash: "0ebf6be1305ee1eb8740f4d0365ef4c5" + hash: "024a4d4fc9a11d352d1e0f5ee7f7dbc8" } Frame { msec: 2416 - hash: "46cde47dffc6f2687c8c643eca09b95d" + hash: "c966b518b881f85a2d1cc86f5284ee1b" } Frame { msec: 2432 - hash: "2b8698ce02a6964115d960ae19f40c37" + hash: "db15811f2d2cff0949213823649ef1d4" } Frame { msec: 2448 - hash: "ff1e7d800bb27b41710c50554adc1091" + hash: "bbd9fad235aa2843bf2b64f3cf24f4e3" } Key { type: 7 @@ -714,15 +714,15 @@ VisualTest { } Frame { msec: 2464 - hash: "5837b3aca09038cae23dcb149acc8b0b" + hash: "ccbc2f09ed263375e7b52f556fb2836f" } Frame { msec: 2480 - hash: "dbe7c571cdbdb9de4fd01faa6d5374cf" + hash: "c3b74e90fa99f4357762b57b9317b6f5" } Frame { msec: 2496 - hash: "f431abcaf05f49ead909296d7649f8a9" + hash: "4f2fafdb59db544352e3067d67c0a714" } Frame { msec: 2512 @@ -806,23 +806,23 @@ VisualTest { } Frame { msec: 2800 - hash: "4f2fafdb59db544352e3067d67c0a714" + hash: "043583b19c921740dbc990afd4f508ed" } Frame { msec: 2816 - hash: "4dcd4cdf6f4e305732185ec52cd2f2f6" + hash: "64fdbc9a930e44dcc38542f720b41b0a" } Frame { msec: 2832 - hash: "dfd3c29b0520edbbee57dfacfa7e2b30" + hash: "257d3d8bcf78671d35a898befec091cb" } Frame { msec: 2848 - hash: "257d3d8bcf78671d35a898befec091cb" + hash: "92a51faf52bdc7f895bdc08f049f6ed3" } Frame { msec: 2864 - hash: "20e89c544284603943396694abe86756" + hash: "5aec71e84a4e9c4962ed73c39d337910" } Frame { msec: 2880 @@ -830,7 +830,7 @@ VisualTest { } Frame { msec: 2896 - hash: "b88c6af89423b32b3a4413035711df03" + hash: "534973232974b7ee999172269d16c499" } Key { type: 7 @@ -842,15 +842,15 @@ VisualTest { } Frame { msec: 2912 - hash: "e34de13af44c449c9ecc86e06ce01ed2" + hash: "32faa54e636773747a2ec4065a11c337" } Frame { msec: 2928 - hash: "98ffe81129aa7cc7325764221f1dae59" + hash: "ebe24b814e27cd8a8db78da58c8f86d7" } Frame { msec: 2944 - hash: "db2d545de9879362738e71a02a3d1d26" + hash: "e67ae32a47213b360c1a445bf645dde2" } Frame { msec: 2960 @@ -902,27 +902,27 @@ VisualTest { } Frame { msec: 3120 - hash: "02d8c90faf56c65252e4f938944bda7b" + hash: "e67ae32a47213b360c1a445bf645dde2" } Frame { msec: 3136 - hash: "a32994e2320e357241f63b956b6db236" + hash: "d446b94a2e3d9f7091c5520852d1a215" } Frame { msec: 3152 - hash: "9ada466c26c217adbcd7a93df264ed75" + hash: "79d1a3489be95d113e8c611a2ba63456" } Frame { msec: 3168 - hash: "79d1a3489be95d113e8c611a2ba63456" + hash: "95601b7d8ab689142ca89343743b55b2" } Frame { msec: 3184 - hash: "d3aa82455c4ae3ac25097354e132a30f" + hash: "ad67049e51eafbbc33d1e3763d78b5f9" } Frame { msec: 3200 - hash: "62d12e5933ed4ed048ccafd229f4b2b7" + hash: "69b1d558065ee9b9719c3ae8f08b52ab" } Key { type: 7 @@ -934,19 +934,19 @@ VisualTest { } Frame { msec: 3216 - hash: "5bc4ac94ae20e425084d0811dee1ba08" + hash: "858fd65adb231bf2002bcc25075be261" } Frame { msec: 3232 - hash: "6d5113e3732dc7a9172eea3667a01f7b" + hash: "2dc6fb114e1d2a606efe48f349251504" } Frame { msec: 3248 - hash: "e435a2588b25d3336f290331931f5981" + hash: "e4819f09d6640021408e03c50090e849" } Frame { msec: 3264 - hash: "bce201adbeb319b181cce139f179d7f0" + hash: "5fa3ec31176bed2de8cb076b87e0be74" } Frame { msec: 3280 @@ -1006,31 +1006,31 @@ VisualTest { } Frame { msec: 3472 - hash: "8f0f3cd35ae92047f23084f447046eb8" + hash: "5fa3ec31176bed2de8cb076b87e0be74" } Frame { msec: 3488 - hash: "ceb12e6c5e9f0566039040d9f3ff587f" + hash: "6c84f5e6d352ed345a0bed12c50bf7a9" } Frame { msec: 3504 - hash: "dfd0c89c3ea73aceefcdafa71609c720" + hash: "15690df807a7c1e9aa9d7e9154c1a492" } Frame { msec: 3520 - hash: "8d8ed1a9dc6a9f74dfc81b79f02af4c5" + hash: "3d6cc3e0d93ddf4b66321fda361f05c0" } Frame { msec: 3536 - hash: "d450bd62e03e1e4c7cb66e98ece05f97" + hash: "8e3526ffeb9873b55b3bae2827391628" } Frame { msec: 3552 - hash: "d1ece2210cd24eedd5361e5c3a162236" + hash: "33097267d43a7e16a78102cb91c9fd42" } Frame { msec: 3568 - hash: "77589e48b9db95e702055753046319e5" + hash: "17ab2623432bba92dc9d99e5764e626e" } Key { type: 7 @@ -1042,15 +1042,15 @@ VisualTest { } Frame { msec: 3584 - hash: "7793263ecb831a1e63fbd76c8addde03" + hash: "9945a723d9a3399bb5311eea3d9b0b77" } Frame { msec: 3600 - hash: "bfa9675f981c37fed27dea100226f61a" + hash: "e6e9251cd6d941a050beaa36b851e314" } Frame { msec: 3616 - hash: "9780849fe8abd22c32ccafcdd46b0d65" + hash: "a61dbcb7d914afe34009085bf37fb8e2" } Frame { msec: 3632 @@ -1138,31 +1138,31 @@ VisualTest { } Frame { msec: 3936 - hash: "a61dbcb7d914afe34009085bf37fb8e2" + hash: "e63d987ba303a42046827f14941b444a" } Frame { msec: 3952 - hash: "89175b83b4f7ee4b5d99219cdc97aa59" + hash: "9942059cb380dbae191850d2e7175906" } Frame { msec: 3968 - hash: "f524421286503f6175e4ad71dd89145f" + hash: "ca5af7d98a008eccba1e21be0da61f3c" } Frame { msec: 3984 - hash: "ca5af7d98a008eccba1e21be0da61f3c" + hash: "abb95ac1408d34e2eb319e5396511d65" } Frame { msec: 4000 - hash: "77c19e7e17e00787ff0d7a4e7bad7bc8" + hash: "183df6d4be489280181f01a0c0ed3cde" } Frame { msec: 4016 - hash: "04c8db761e324101ad92e0ac9ceed7d4" + hash: "64733a4d609c621765d114a6b482dc57" } Frame { msec: 4032 - hash: "97a3dcb81349efab6b44d458e83ce5c4" + hash: "897aa5b42e48a7235ab4fdded5876da2" } Key { type: 7 @@ -1174,15 +1174,15 @@ VisualTest { } Frame { msec: 4048 - hash: "e86ebc276b88705c97cc9efb66ccc6b2" + hash: "c80f01a1e683d84bfa0821832c113820" } Frame { msec: 4064 - hash: "a134bbfd14879f13b288a04d23382348" + hash: "e7065bf6934c7fb7b160ae5c169633e4" } Frame { msec: 4080 - hash: "9530ad3f58ad1c66401572869f7d91bc" + hash: "db3d030de94b19ea1db5c60be7c7ca5c" } Frame { msec: 4096 @@ -1230,31 +1230,31 @@ VisualTest { } Frame { msec: 4240 - hash: "980e0fa84fd3bab496623936f5f220a2" + hash: "db3d030de94b19ea1db5c60be7c7ca5c" } Frame { msec: 4256 - hash: "ed3268911723d664699bbc31317befc1" + hash: "917c11b16c6286bea7a37990d7fa078f" } Frame { msec: 4272 - hash: "3bfda4b3b0b2d2a97ec1c0b5b3f4da63" + hash: "1616c6def28659d51905564ff83cc112" } Frame { msec: 4288 - hash: "1616c6def28659d51905564ff83cc112" + hash: "fce04972557736a8dfa8de5f1a605ddb" } Frame { msec: 4304 - hash: "68342f34c18956d3a093f8eeeae6977e" + hash: "6acffcea115f8a777f62c1f68cd25fa6" } Frame { msec: 4320 - hash: "ac1b12959e9055a28fe2bda0a12b75bc" + hash: "f96ae6a4f437cf98b268fc0b0611ddc4" } Frame { msec: 4336 - hash: "009b85ff6b86e418c78ed33a5e88d3f1" + hash: "c9e14157dca547623497a6107f14b73d" } Key { type: 7 @@ -1266,15 +1266,15 @@ VisualTest { } Frame { msec: 4352 - hash: "59753bc7dc69767fe2109fdc41f20dae" + hash: "6489766ed84c4b6ff26de24cb74848cb" } Frame { msec: 4368 - hash: "1c87d3d8c8d564d4d95a26f57fd28f38" + hash: "9d229c10853b30ed048b892953c5d86c" } Frame { msec: 4384 - hash: "4e43b7b6787002c9013010dd74c83f49" + hash: "2476aa1a7191b485a76c76e98c9be2b0" } Frame { msec: 4400 @@ -1338,31 +1338,31 @@ VisualTest { } Frame { msec: 4608 - hash: "84de5b5e8b0fba190a783c72967661c7" + hash: "2476aa1a7191b485a76c76e98c9be2b0" } Frame { msec: 4624 - hash: "60b696f4913379d28f300fd1b531c6cb" + hash: "12f17d727d70269fd98a0f6524c9f750" } Frame { msec: 4640 - hash: "d01e651d9094332fd82ad1cea3e93e9d" + hash: "e73d64ebe242eae0f412ca463c76085d" } Frame { msec: 4656 - hash: "87be4cd7c894b03b2b64c996e915d71f" + hash: "f37a468e04155c880e707d1d12f71f94" } Frame { msec: 4672 - hash: "b07fccb0c5565d2feed5a9fcdf8acead" + hash: "3789293a6b8791d8e60b5160fc457345" } Frame { msec: 4688 - hash: "3dca3165fd34be549d21fb6c414c67d8" + hash: "7d8377c816f19fa32d847a30d1c71da9" } Frame { msec: 4704 - hash: "5f69f3298f8ca73fa9b3b6e630c60186" + hash: "b9867dbb6f03d5970076251e10e47f16" } Key { type: 7 @@ -1374,23 +1374,23 @@ VisualTest { } Frame { msec: 4720 - hash: "d7f41e9a29d550a7d9a41bb947569abe" + hash: "0604bbd1afdfee5881d9d9d79a67a3df" } Frame { msec: 4736 - hash: "4ede2e90ad216a2d44580c50a25dea23" + hash: "93401cdfa6cc7fbbfc479faa0bc1d63f" } Frame { msec: 4752 - hash: "9b339845ee588b789dc9095c272e0bdf" + hash: "aa379c70dd6a94a55fd8c065331ad47b" } Frame { msec: 4768 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4784 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4800 @@ -1398,91 +1398,91 @@ VisualTest { } Frame { msec: 4816 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4832 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4848 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4864 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4880 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4896 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4912 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4928 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4944 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4960 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4976 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 4992 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5008 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5024 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5040 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5056 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5072 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5088 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5104 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5120 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5136 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5152 - hash: "9cdea4790972efaecabd52b435107e69" + hash: "11150995098af8516513230360d40108" } Key { type: 6 @@ -1494,31 +1494,31 @@ VisualTest { } Frame { msec: 5168 - hash: "d6f0a6d7604bad811eeba13fd7c45368" + hash: "11150995098af8516513230360d40108" } Frame { msec: 5184 - hash: "5f92e1531a3f6c21ec82e3c908167fc7" + hash: "c58f071ae4efde5cd265fa6e82dda56b" } Frame { msec: 5200 - hash: "5214e99ff052dcdc8f85bad29de92e03" + hash: "bea9eadda7b015d0e9a0f05924e723f7" } Frame { msec: 5216 - hash: "d4abed9f0f1115c9a45b0b9b4f54754e" + hash: "c255da63dc59ca7555c91701ed373fd5" } Frame { msec: 5232 - hash: "cfae8a0281e704b0e62f6bf31b32800f" + hash: "fa0a697341baae4b3aa4dee721ef10a2" } Frame { msec: 5248 - hash: "c203f0674596ae690bf19f2d49be62ac" + hash: "2d2148840143772fab6b2405bf5eb609" } Frame { msec: 5264 - hash: "2e2c7e05aade104bdc4f6c489b6f0601" + hash: "3716705b5f7caa86eecc1dfafe31ebcf" } Key { type: 7 @@ -1530,51 +1530,51 @@ VisualTest { } Frame { msec: 5280 - hash: "b4b2148b0557dcab3a441165e5e4de5f" + hash: "35cfea054566eae3bcc9c8a41caadcdc" } Frame { msec: 5296 - hash: "c5e791d27a42a63d25cdbd492b4af29a" + hash: "916858ff0ca4370840d072c389242a2b" } Frame { msec: 5312 - hash: "0f94ebcb407f8e6ae263bd954f2c8177" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5328 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5344 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5360 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5376 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5392 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5408 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5424 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5440 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5456 - hash: "d9b56b817a411812789881697a28fe4c" + hash: "417f4bce58783f0e677b17b05147a663" } Key { type: 6 @@ -1586,31 +1586,31 @@ VisualTest { } Frame { msec: 5472 - hash: "6fdfe69e377da72e04dc130f5677ed2c" + hash: "417f4bce58783f0e677b17b05147a663" } Frame { msec: 5488 - hash: "c041d26d43766fa1735f2ada2a43225b" + hash: "191f2c80617cef61a2890977c3079ad2" } Frame { msec: 5504 - hash: "aa62dbd6c6256665ee1b4ef468607978" + hash: "0902ef220363ad2c08f09199278cecf8" } Frame { msec: 5520 - hash: "987fcdf6483a83b1242053f4e7fb7a26" + hash: "d28ea1b1e01588bbb767a5599c5345d2" } Frame { msec: 5536 - hash: "fbde70c34709b68eb22f5460a8815fba" + hash: "36eeaf2755fffefc32bcd580fade6305" } Frame { msec: 5552 - hash: "911ddc838ebaf5ade1bb026dff2741ba" + hash: "51560b23e44e5548875b13ff6dc6ee8d" } Frame { msec: 5568 - hash: "120bbf35b2a3b756bdeaea0df43e49b2" + hash: "082abbc9ecd0bf39619819aa526c021c" } Key { type: 7 @@ -1622,47 +1622,47 @@ VisualTest { } Frame { msec: 5584 - hash: "ea93e33c079d6dc5fb18c69fb4fed441" + hash: "ab956d21f8ea55dad590b3cafc887585" } Frame { msec: 5600 - hash: "b9ac8ab01cb59b1fee11967bdb6d2dd6" + hash: "9501050f547de1de0d280a839e35e120" } Frame { msec: 5616 - hash: "3ff266bf29cbcaa30bc1e7af5dd9866b" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5632 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5648 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5664 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5680 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5696 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5712 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5728 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5744 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5760 @@ -1670,15 +1670,15 @@ VisualTest { } Frame { msec: 5776 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5792 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5808 - hash: "edd6c3a9493a63674e2d7af5f3e8467e" + hash: "3de570332e8a1e01f409d892feb7930e" } Key { type: 6 @@ -1690,27 +1690,27 @@ VisualTest { } Frame { msec: 5824 - hash: "de1f83d25751639dff42f1755a6534c3" + hash: "3de570332e8a1e01f409d892feb7930e" } Frame { msec: 5840 - hash: "edefdea8b2461d03fb97cf5ed66e9b6d" + hash: "6aefcf9976f5910376a583b020c8dd4b" } Frame { msec: 5856 - hash: "cef1886397e3932a511f37571b5011f4" + hash: "971ca1e2537d52f352c889817e353736" } Frame { msec: 5872 - hash: "05589ad354314d9e04ef90c1addd99f5" + hash: "f1f0599e7f4ba2fb869e886a2e7ff216" } Frame { msec: 5888 - hash: "ff88b52e3755b9b4785d2719ddd4f090" + hash: "8bf62b11cd4ec99ae41752e1a9a9c7ca" } Frame { msec: 5904 - hash: "f59edc3016b177a2e8faa6612d718b17" + hash: "f2fcf6ad484b240373822c2450dd5305" } Key { type: 7 @@ -1722,131 +1722,131 @@ VisualTest { } Frame { msec: 5920 - hash: "dc673a7cdd927f70b28ebcfe51cd3d89" + hash: "f999073e6303ff5658012dabbef4ee8e" } Frame { msec: 5936 - hash: "3abec0da85fb663e63ab22188e092827" + hash: "c35ef3056155d8d30dd4b9e6299ac68f" } Frame { msec: 5952 - hash: "50c2c8ac68cafad7c47b576cd8f4a037" + hash: "0326908135c0d693f2fc99c9e02d8f94" } Frame { msec: 5968 - hash: "06c31b861e2b96e6595b2244d7b3f4d5" + hash: "b0def7204463648dac117ddcc2241c3e" } Frame { msec: 5984 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6000 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6016 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6032 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6048 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6064 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6080 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6096 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6112 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6128 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6144 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6160 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6176 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6192 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6208 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6224 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6240 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6256 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6272 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6288 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6304 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6320 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6336 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6352 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6368 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6384 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6400 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6416 - hash: "0aa7ce5ba9c875619a6e4629a0eb4065" + hash: "5e88aeab16a0ccca400163889851bc45" } Key { type: 6 @@ -1858,31 +1858,31 @@ VisualTest { } Frame { msec: 6432 - hash: "7f52a770775c19e10784b4c5f7874210" + hash: "5e88aeab16a0ccca400163889851bc45" } Frame { msec: 6448 - hash: "827cfb74286a2a80aca8b6c5277d6cfd" + hash: "5531bf9affacf58945c6c54c5d14c9c9" } Frame { msec: 6464 - hash: "8399231eda9b66821d43a3d8c4c7d645" + hash: "ebc8f36eb0fc7d40bf9f268ef03522a0" } Frame { msec: 6480 - hash: "fc163583671f3c4023361460b436c895" + hash: "621a3c318fc259ed27ae050d70d46d39" } Frame { msec: 6496 - hash: "893dea6496c95c32095ad1d673e500c2" + hash: "688bea0c0c864d9bc4204cf06b480d3a" } Frame { msec: 6512 - hash: "808c7403b2cdcc882059da56a2f806fe" + hash: "8419262c19c40172b93c74d34cad12cb" } Frame { msec: 6528 - hash: "7466b2e5b86ba8ad46be75818659786c" + hash: "57ce65a4ebe51c14ee69083f90ed5b80" } Key { type: 7 @@ -1894,47 +1894,47 @@ VisualTest { } Frame { msec: 6544 - hash: "dd2561cd780e24401130305d47757a53" + hash: "43827ad5cb4173a8a5d434b167f68761" } Frame { msec: 6560 - hash: "bee89299532d43fc3e6c3e69c343b381" + hash: "13e3e00ec3c11d6ca3e51a7aba0e1a97" } Frame { msec: 6576 - hash: "94f8474aedee94098592c05d8fc7d868" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Frame { msec: 6592 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Frame { msec: 6608 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Frame { msec: 6624 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Frame { msec: 6640 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Frame { msec: 6656 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Frame { msec: 6672 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Frame { msec: 6688 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Frame { msec: 6704 - hash: "b6ee51bfa4d4ab7a83cca5c18453f0b8" + hash: "dcf8c3078973ad99fbbcc763e433de11" } Key { type: 6 @@ -1950,31 +1950,31 @@ VisualTest { } Frame { msec: 6736 - hash: "ccd58be20d47422121d6ef799b927a7a" + hash: "b6c7ad2c8e305ea5478a2307aa71b16b" } Frame { msec: 6752 - hash: "e090c7f39649786a1796870e25bd0f0d" + hash: "bb4674d0de11e4f625e6db940b4ec06c" } Frame { msec: 6768 - hash: "acf3dcd9f4a869169dbc1ae7fe60e9d0" + hash: "26f602a711cea77e5c7be08a93981306" } Frame { msec: 6784 - hash: "51795e9a720845e8305d23507785e1ca" + hash: "5346bc8b1711a6679867d81efb9da563" } Frame { msec: 6800 - hash: "0d34a43e177e6b73e2ff9155747d0385" + hash: "3aa4d335a91be2bf2616d61fa7719ce5" } Frame { msec: 6816 - hash: "1876c3cdffc1af01da1aaa0ac636d0a8" + hash: "2bad8dd039a35f11ba86b409bbcea6fe" } Frame { msec: 6832 - hash: "3131296b6edf4190520e2cdb3f8b936e" + hash: "20e4b381a6bed27e9e64d2eeda7870da" } Key { type: 7 @@ -1986,51 +1986,51 @@ VisualTest { } Frame { msec: 6848 - hash: "ee92f0a764e5081b130e205a5c362b07" + hash: "e96eb16671f26f04a72498bc3ab54f06" } Frame { msec: 6864 - hash: "8737ea2c60aeb215228c00a7fddd1baa" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 6880 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 6896 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 6912 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 6928 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 6944 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 6960 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 6976 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 6992 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7008 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7024 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Key { type: 6 @@ -2042,35 +2042,35 @@ VisualTest { } Frame { msec: 7040 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7056 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7072 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7088 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7104 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7120 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7136 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7152 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Key { type: 7 @@ -2082,111 +2082,111 @@ VisualTest { } Frame { msec: 7168 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7184 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7200 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7216 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7232 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7248 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7264 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7280 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7296 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7312 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7328 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7344 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7360 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7376 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7392 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7408 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7424 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7440 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7456 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7472 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7488 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7504 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7520 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7536 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7552 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7568 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7584 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Key { type: 6 @@ -2198,23 +2198,23 @@ VisualTest { } Frame { msec: 7600 - hash: "ac036f1f5c5ae23ddfca3060dff83f15" + hash: "f0e0fe7c155bbee3957a80077703fadc" } Frame { msec: 7616 - hash: "eb0d1be15f63af6eaf6634b02e5f240a" + hash: "6e26f05f7a2531620ed4a25073e0f0c5" } Frame { msec: 7632 - hash: "2423c305bebb3449e87c78e8fb447c88" + hash: "9fe693b6b53763ffc1b94d157252b18c" } Frame { msec: 7648 - hash: "f0ede6ea85647728db80878b3e525edc" + hash: "49aae47da204d4104757b4420df7413e" } Frame { msec: 7664 - hash: "387d127b2b000dc344ee4768cf2d29b2" + hash: "ecd7456cb5ba2034c766e1ec298c2ebf" } Frame { msec: 7680 @@ -2222,7 +2222,7 @@ VisualTest { } Frame { msec: 7696 - hash: "1d0d8100e994c16d7973ad9a97b0068f" + hash: "e8b6316baae781ca5390bc86528194c0" } Key { type: 7 @@ -2234,71 +2234,71 @@ VisualTest { } Frame { msec: 7712 - hash: "95fb4a6d0331ffc4773e39ec8c3e6511" + hash: "e11fcb0e62d7f6bfb40b7336e89ff014" } Frame { msec: 7728 - hash: "34738f16150228d971972833d4bd5c8f" + hash: "5a07fa8768ebfb938204e500f4a09253" } Frame { msec: 7744 - hash: "9b71c8dacc530f32d7c6f409928caf5c" + hash: "1ee3a4780979f69cd7926df3d4c18731" } Frame { msec: 7760 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7776 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7792 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7808 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7824 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7840 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7856 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7872 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7888 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7904 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7920 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7936 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7952 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 7968 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Key { type: 6 @@ -2310,15 +2310,15 @@ VisualTest { } Frame { msec: 7984 - hash: "831efd0970c5c29fbe10b3be7707f915" + hash: "ca4edfecdfc410aca6557b9a3095d92b" } Frame { msec: 8000 - hash: "0587fc809c38c3bbe1fbac2960596974" + hash: "1306bb76c161e84e2e5307a0ebc34393" } Frame { msec: 8016 - hash: "d20eba806cf4730a850db4c095fa36f9" + hash: "a97cbb851cf1fdeb428ee36042be52e1" } Key { type: 7 @@ -2330,59 +2330,59 @@ VisualTest { } Frame { msec: 8032 - hash: "c1663e75ba05b341e1e970a451958ea0" + hash: "e79ccbe112066ded3276aa7feb2e7848" } Frame { msec: 8048 - hash: "ea40cc33b689d6b42fc5a69fa30178e4" + hash: "9cc673f743e2018cf9a6d815fe76dc80" } Frame { msec: 8064 - hash: "a07a1c61de1813158ff743cd326ee427" + hash: "8179262829f88ee4bbb9537b29ab56ee" } Frame { msec: 8080 - hash: "6dfddaa340df8999ca77f6a6e4c6c3ce" + hash: "3810cc1b5902259c22bce0118497aaf3" } Frame { msec: 8096 - hash: "76ca40bb169c1ddc291847d4be2d38d7" + hash: "d41c5a6fdfafb2263e7c35a927f7753c" } Frame { msec: 8112 - hash: "e44778541b76208981a3944a64235cac" + hash: "e54d0179d62b7cdec96218c3a0ef110d" } Frame { msec: 8128 - hash: "fdf45ea650d31957cc675c3bec8bf53e" + hash: "da89e8408417b99582ffd825c2226bf4" } Frame { msec: 8144 - hash: "b78cdb727535ab7e567af08abf25e64c" + hash: "5d7b9247aecd4adc939c6fb89d5eac2c" } Frame { msec: 8160 - hash: "b78cdb727535ab7e567af08abf25e64c" + hash: "5d7b9247aecd4adc939c6fb89d5eac2c" } Frame { msec: 8176 - hash: "b78cdb727535ab7e567af08abf25e64c" + hash: "5d7b9247aecd4adc939c6fb89d5eac2c" } Frame { msec: 8192 - hash: "b78cdb727535ab7e567af08abf25e64c" + hash: "5d7b9247aecd4adc939c6fb89d5eac2c" } Frame { msec: 8208 - hash: "b78cdb727535ab7e567af08abf25e64c" + hash: "5d7b9247aecd4adc939c6fb89d5eac2c" } Frame { msec: 8224 - hash: "b78cdb727535ab7e567af08abf25e64c" + hash: "5d7b9247aecd4adc939c6fb89d5eac2c" } Frame { msec: 8240 - hash: "b78cdb727535ab7e567af08abf25e64c" + hash: "5d7b9247aecd4adc939c6fb89d5eac2c" } Key { type: 6 @@ -2394,27 +2394,27 @@ VisualTest { } Frame { msec: 8256 - hash: "b78cdb727535ab7e567af08abf25e64c" + hash: "5d7b9247aecd4adc939c6fb89d5eac2c" } Frame { msec: 8272 - hash: "338481e6390f2a61e975084c16427584" + hash: "2fcac6c204d45d6fbab76c3d07e2c8ad" } Frame { msec: 8288 - hash: "8923c45c23b1f4250b7d1e483b07a4da" + hash: "78602c9ac9dbd6c34ef539799513d874" } Frame { msec: 8304 - hash: "b21de834906d0eecea985561e2e41e4f" + hash: "02f8d434d50af8fa6063a4f03dabe2b1" } Frame { msec: 8320 - hash: "a8c9761cfb20631520ed890cd2648c4b" + hash: "ff5da7b1a1467418bc712c0ac33c878f" } Frame { msec: 8336 - hash: "abf96a042ef12190bc48ff49732ef55a" + hash: "2aed8048e5040ebda3bdfdf4a57d08eb" } Key { type: 7 @@ -2426,55 +2426,55 @@ VisualTest { } Frame { msec: 8352 - hash: "5b9506dfb038cd26dfc81ecd2406ada9" + hash: "c6b50c1a6a843aa9484c48e4bf073e4b" } Frame { msec: 8368 - hash: "be75b8d39f81b2fdaff01469bfc67d4a" + hash: "a08ef172dfb72151108e81cacfaa964f" } Frame { msec: 8384 - hash: "488aa2977f349df82b5f6ae5e3619d35" + hash: "a2a755231d0eee686aa38cd4d4b417f2" } Frame { msec: 8400 - hash: "d69f17f0ce8537511353d20b59d20de0" + hash: "5c598e26c1b65796b8e68c7d27abbc0f" } Frame { msec: 8416 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8432 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8448 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8464 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8480 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8496 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8512 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8528 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8544 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Key { type: 6 @@ -2486,23 +2486,23 @@ VisualTest { } Frame { msec: 8560 - hash: "7647efcc0152cc3d6544106f969ace26" + hash: "290662cda876fccc87971d2cebc69d52" } Frame { msec: 8576 - hash: "8f74d33bf95cbf37fdb4521c69373a64" + hash: "1aface9c3746488496af48caf23af1a5" } Frame { msec: 8592 - hash: "e33bb4cd12790c9d9992efdd3e23bee9" + hash: "c08f9756c9cc453a2544052b15beab5d" } Frame { msec: 8608 - hash: "36f32e34b4093091c4707f26c52896ad" + hash: "b70544dc0d5cc18181f0bf40c068410b" } Frame { msec: 8624 - hash: "5ab5e142f8dc883287c116cedbacfd55" + hash: "7e8fbce1337b0b04beda76ee54c98285" } Frame { msec: 8640 @@ -2518,19 +2518,19 @@ VisualTest { } Frame { msec: 8656 - hash: "c74212e45a6c4b6a18caeb6a22350609" + hash: "4724d0bfd63f248914f18117ba0c6119" } Frame { msec: 8672 - hash: "8919643a7d13677dd902941860093209" + hash: "16013089bfe18b35efbd8cd36d37bb0a" } Frame { msec: 8688 - hash: "6f2ab4400fadf51b994351f0975e31fc" + hash: "57a857a48922cb252bb4ddc77b29825e" } Frame { msec: 8704 - hash: "4798559ce6f9bd7455ed5385d0030763" + hash: "10a46ba67a0c7abe08ea8f80a75040e8" } Frame { msec: 8720 @@ -2586,23 +2586,23 @@ VisualTest { } Frame { msec: 8896 - hash: "fac81cf6f45cb47abc1fa36d23e39d34" + hash: "df1797772003dc3dbdd0e245c447bf20" } Frame { msec: 8912 - hash: "862f4deee01183fd38b094da59048b23" + hash: "70dd7fd50388196706f72a48ac96963c" } Frame { msec: 8928 - hash: "2f3b147221da30d8857d25fc788b3eac" + hash: "439e43c26fc22a6c3a2b8568bfddbfa3" } Frame { msec: 8944 - hash: "5b295b187c6cfc6aefa51e5efc2c27e3" + hash: "77e9ea697690a3e5c3965c0bf76055b0" } Frame { msec: 8960 - hash: "fe3139ddc8fdbc1b0c25bd641f83e833" + hash: "30226190fa4466b3450ff1f810e85635" } Key { type: 7 @@ -2614,19 +2614,19 @@ VisualTest { } Frame { msec: 8976 - hash: "8f2a9585dc6248a403aafd0f151d6ba0" + hash: "9a69afa4de272f00d8a26141fa974f6e" } Frame { msec: 8992 - hash: "39eca8cc6bb8ea30cc452dc24f8e46dc" + hash: "1883a34a21ecc690022a6623c67c8ba1" } Frame { msec: 9008 - hash: "8dbbc6026942cb6e572f1cb7e2675713" + hash: "e5be5b7e7060fffacaf93b6bf8d051a4" } Frame { msec: 9024 - hash: "62dfa07b96dd18c6be89822654bf09f3" + hash: "2667c2596de97dc15353158eba03495f" } Frame { msec: 9040 @@ -2831,7 +2831,7 @@ VisualTest { Key { type: 6 key: 16777249 - modifiers: 67108864 + modifiers: 0 text: "" autorep: false count: 1 diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml index c79e19f..95556f1 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview.qml @@ -38,7 +38,7 @@ Rectangle { Component { id: appHighlight - Rectangle { width: 100; height: 100; color: "white"; z: 3000 } + Rectangle { width: 100; height: 100; color: "white"; z: 0 } } GridView { diff --git a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml index 811e0e4..0dd9d0e 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativegridview/gridview2.qml @@ -1,6 +1,7 @@ import QtQuick 1.0 Rectangle { + property string skip: "Last bit is wrong (rest is probably right, just bitrot). QTBUG-14838" width: 300; height: 400; color: "black" ListModel { @@ -45,7 +46,7 @@ Rectangle { model: appModel; delegate: appDelegate; focus: true keyNavigationWraps: true - flickableData: [ + flickableData: [//Presumably the different way of doing highlight tests more things Rectangle { color: "transparent"; border.color: "white"; border.width: 8; z: 3000 height: 100; width: 100 -- cgit v0.12 From 95ef9a3d7eb851d47dabe3248672ea03e5faa0ce Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Fri, 29 Oct 2010 15:26:50 +1000 Subject: Regression: horizontal alignment bug with single line text Task-number: QTBUG-14841 --- src/declarative/graphicsitems/qdeclarativetext.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/declarative/graphicsitems/qdeclarativetext.cpp b/src/declarative/graphicsitems/qdeclarativetext.cpp index 865af2d..03c9765 100644 --- a/src/declarative/graphicsitems/qdeclarativetext.cpp +++ b/src/declarative/graphicsitems/qdeclarativetext.cpp @@ -292,12 +292,12 @@ QSize QDeclarativeTextPrivate::setupTextLayout() qreal lineWidth = 0; //set manual width - if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid()) + if (q->widthValid()) lineWidth = q->width(); QTextOption textOption = layout.textOption(); textOption.setWrapMode(QTextOption::WrapMode(wrapMode)); - textOption.setAlignment((Qt::Alignment)hAlign); + textOption.setAlignment(Qt::Alignment(hAlign)); layout.setTextOption(textOption); layout.beginLayout(); @@ -306,7 +306,7 @@ QSize QDeclarativeTextPrivate::setupTextLayout() if (!line.isValid()) break; - if ((wrapMode != QDeclarativeText::NoWrap || elideMode != QDeclarativeText::ElideNone) && q->widthValid()) { + if (q->widthValid()) { line.setLineWidth(lineWidth); line.setPosition(QPointF(0, height)); height += line.height(); -- cgit v0.12 From 099a041a69c5c2d27fab0ee70a98107e8a5ae0dc Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 15:32:16 +1000 Subject: Mark dynamic.qml as expect-fail the new way Also remove the check for the old way in tst_qmlvisual Task-number: QTBUG-14792 --- .../qdeclarativepositioners/data/dynamic.0.png | Bin 0 -> 1429 bytes .../qdeclarativepositioners/data/dynamic.1.png | Bin 0 -> 1433 bytes .../qdeclarativepositioners/data/dynamic.2.png | Bin 0 -> 1431 bytes .../qdeclarativepositioners/data/dynamic.3.png | Bin 0 -> 1428 bytes .../qdeclarativepositioners/data/dynamic.4.png | Bin 0 -> 1432 bytes .../qdeclarativepositioners/data/dynamic.5.png | Bin 0 -> 1434 bytes .../qdeclarativepositioners/data/dynamic.qml | 1603 ++++++++++++++++++++ .../qmlvisual/qdeclarativepositioners/dynamic.qml | 2 +- tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp | 2 +- 9 files changed, 1605 insertions(+), 2 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png new file mode 100644 index 0000000..f474afe Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png new file mode 100644 index 0000000..8b7ae74 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png new file mode 100644 index 0000000..9088bb4 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png new file mode 100644 index 0000000..18cd429 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png new file mode 100644 index 0000000..739afc1 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png new file mode 100644 index 0000000..93f0682 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml new file mode 100644 index 0000000..4b36e16 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/data/dynamic.qml @@ -0,0 +1,1603 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 32 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 48 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 64 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 80 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 96 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 112 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 128 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 144 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 160 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 176 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 192 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 208 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 224 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 240 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 256 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 272 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 288 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 304 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 320 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 336 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 352 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 368 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 384 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 400 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 416 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 432 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 448 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 464 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 480 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 496 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 512 + hash: "ee42cfa8cbbd67becb7d50998d26fe73" + } + Frame { + msec: 528 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 544 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 560 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 576 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 592 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 608 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 624 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 640 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 656 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 672 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 688 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 704 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 720 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 736 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 752 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 768 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 784 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 800 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 816 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 832 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 848 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 864 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 880 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 896 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 912 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 928 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 944 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 960 + image: "dynamic.0.png" + } + Frame { + msec: 976 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 992 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 1008 + hash: "62727b1025930e19bb03c8f533a12ced" + } + Frame { + msec: 1024 + hash: "3e52e7d7d428cf1b850cb9c60dbb3c21" + } + Frame { + msec: 1040 + hash: "64f75ab14c979d33d6e0c0d86b76cd35" + } + Frame { + msec: 1056 + hash: "c198a48f4050f176465649d203d6e09a" + } + Frame { + msec: 1072 + hash: "6dd8cee5a585a96e78f2cf7478c4da62" + } + Frame { + msec: 1088 + hash: "09edfbce2ea4b8a547f769ce709dcb6b" + } + Frame { + msec: 1104 + hash: "e93d01aa6e4f5d3fc82cf5a008e3ea17" + } + Frame { + msec: 1120 + hash: "0e2e7b5eec0e62853972b0139b8c17c6" + } + Frame { + msec: 1136 + hash: "26d4f54628ce20f5665bdc6ddc7f3b6a" + } + Frame { + msec: 1152 + hash: "59836aa6eff85b0152be352b97076d89" + } + Frame { + msec: 1168 + hash: "47cc9894096731a52ca342ab04df9aad" + } + Frame { + msec: 1184 + hash: "ec95dd3b34a0f17f6fb9b5bedab73653" + } + Frame { + msec: 1200 + hash: "e32c2b70882828b5082ca3ec889a0dde" + } + Frame { + msec: 1216 + hash: "68d3f8e9c9d5388a6f8360368c8f4d2f" + } + Frame { + msec: 1232 + hash: "17378b2bd8bde7f357fa5463f457c7b2" + } + Frame { + msec: 1248 + hash: "03db786cd54ec34ce8db15953a5fc847" + } + Frame { + msec: 1264 + hash: "9e22a82a622ed0287c44cc629059d5bd" + } + Frame { + msec: 1280 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1296 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1312 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1328 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1344 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1360 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1376 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1392 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1408 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1424 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1440 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1456 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1472 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1488 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1504 + hash: "42955cd23747f7c37d0f0229c0955e90" + } + Frame { + msec: 1520 + hash: "981fb1ee75e307b548a32df08a86f4cd" + } + Frame { + msec: 1536 + hash: "f77568307e93d8cd9f0ae417cc19d6e3" + } + Frame { + msec: 1552 + hash: "3bdd4468e26aceee0dad6b3b97b1c1ea" + } + Frame { + msec: 1568 + hash: "252c9ebc2c32755b2289ee1b03877fe3" + } + Frame { + msec: 1584 + hash: "64169b7eb7b7ae8573556c5f80230965" + } + Frame { + msec: 1600 + hash: "4965dfa709a9ac7d8f7dfb4bf8303c65" + } + Frame { + msec: 1616 + hash: "8c53cf92510154087341ac65a93aae5a" + } + Frame { + msec: 1632 + hash: "4dd7502e3e238743d2f3cf038270491e" + } + Frame { + msec: 1648 + hash: "cd9a58316837eb92f4ac92dbd86bdba3" + } + Frame { + msec: 1664 + hash: "5de043e3ac8696b59293a2fa60ed7e65" + } + Frame { + msec: 1680 + hash: "1bf42a6f6be5a3468d2f47cccfac761e" + } + Frame { + msec: 1696 + hash: "ca05510c1ad25e5d3b002603f4379a09" + } + Frame { + msec: 1712 + hash: "f6904a918a6475f1965d74372e52a4b1" + } + Frame { + msec: 1728 + hash: "9e2312ddfc1648b615288107a06c9f9c" + } + Frame { + msec: 1744 + hash: "95c470273b1cb08d4d602efcce339554" + } + Frame { + msec: 1760 + hash: "dade96f707d4a21885480e13b258b7e9" + } + Frame { + msec: 1776 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1792 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1808 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1824 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1840 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1856 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1872 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1888 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1904 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1920 + image: "dynamic.1.png" + } + Frame { + msec: 1936 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1952 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1968 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 1984 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 2000 + hash: "0bfbd46f1d4cf562253fb383776cb601" + } + Frame { + msec: 2016 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2032 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2048 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2064 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2080 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2096 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2112 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2128 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2144 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2160 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2176 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2192 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2208 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2224 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2240 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2256 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2272 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2288 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2304 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2320 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2336 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2352 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2368 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2384 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2400 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2416 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2432 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2448 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2464 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2480 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2496 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2512 + hash: "6fc83e8d4ac99b34062c122a8f7f1850" + } + Frame { + msec: 2528 + hash: "fabf4e535bc4cc17497939d2eeae4a2d" + } + Frame { + msec: 2544 + hash: "a7981035f46869f5ae824d0c58b263b2" + } + Frame { + msec: 2560 + hash: "86d8e369bdceb499b244f84ed9e80ba3" + } + Frame { + msec: 2576 + hash: "e28a7dc7ea8690da75670b5a6e93a26b" + } + Frame { + msec: 2592 + hash: "bf4e815360a67bd80732bd8812269b21" + } + Frame { + msec: 2608 + hash: "a6f8c56cb93da8acc0c90e35596a60d4" + } + Frame { + msec: 2624 + hash: "1e60656f0758605169e51b57bd03af36" + } + Frame { + msec: 2640 + hash: "c069b26b9fae47e0104070d702ba9562" + } + Frame { + msec: 2656 + hash: "457eb2ca1adff6cbb158afa140b2f20b" + } + Frame { + msec: 2672 + hash: "4e5e750b0d94b6777aebff85d38225d9" + } + Frame { + msec: 2688 + hash: "96d9840c2354a8786a8470309be97544" + } + Frame { + msec: 2704 + hash: "ac7570cc7eeff1acd8c47f2d9328f8be" + } + Frame { + msec: 2720 + hash: "887f937bb263c54f29659f27f2b7a3e3" + } + Frame { + msec: 2736 + hash: "616371183c82b97f69a4c6e2367b8066" + } + Frame { + msec: 2752 + hash: "36de8ffa9abe850fb681b37aea45ef8b" + } + Frame { + msec: 2768 + hash: "0505101f0edaaf7ff17deeaaddc6bbf9" + } + Frame { + msec: 2784 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2800 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2816 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2832 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2848 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2864 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2880 + image: "dynamic.2.png" + } + Frame { + msec: 2896 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2912 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2928 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2944 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2960 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2976 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 2992 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 3008 + hash: "e8c53dd8343d7d4c384c2f8507ff0631" + } + Frame { + msec: 3024 + hash: "99e4d853d64a381e8db27707b5ff2b25" + } + Frame { + msec: 3040 + hash: "ab0e62aeffc0d57a5e1d63e6cf49b809" + } + Frame { + msec: 3056 + hash: "4ab11bbf1fb6adb0eec8895f78a24a41" + } + Frame { + msec: 3072 + hash: "634ff2ceb39a3f263a3362238a4ae252" + } + Frame { + msec: 3088 + hash: "7f4856873dc23a02297b2497101de9b9" + } + Frame { + msec: 3104 + hash: "bca3919e9d8e6dc5badd8090401dc934" + } + Frame { + msec: 3120 + hash: "824bfe40c3657cfe1368563640e4cfce" + } + Frame { + msec: 3136 + hash: "f831c1600f68bda139697c406ca70c5e" + } + Frame { + msec: 3152 + hash: "f8102ca251a9ff46a8fe5a24cff0d2d6" + } + Frame { + msec: 3168 + hash: "f33407ad684aa16efc6615d1cf6fa4b9" + } + Frame { + msec: 3184 + hash: "a73d27f776a6ebfc90309b34421700e5" + } + Frame { + msec: 3200 + hash: "ff2a4e2663fc50dfec35152f0e79f935" + } + Frame { + msec: 3216 + hash: "4935f5f58f2672e9d240625151044bda" + } + Frame { + msec: 3232 + hash: "f3ad5c203f621fe4d5d321c3c1880743" + } + Frame { + msec: 3248 + hash: "d4fb7cd2e1f6a533dae65ddbb50da8ac" + } + Frame { + msec: 3264 + hash: "91705e9234c4f02d0a730f6270f9e95f" + } + Frame { + msec: 3280 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3296 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3312 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3328 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3344 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3360 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3376 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3392 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3408 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3424 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3440 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3456 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3472 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3488 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3504 + hash: "41e177bec783497b996d6d5f6dac1a15" + } + Frame { + msec: 3520 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3536 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3552 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3568 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3584 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3600 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3616 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3632 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3648 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3664 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3680 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3696 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3712 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3728 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3744 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3760 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3776 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3792 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3808 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3824 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3840 + image: "dynamic.3.png" + } + Frame { + msec: 3856 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3872 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3888 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3904 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3920 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3936 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3952 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3968 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 3984 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4000 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4016 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4032 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4048 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4064 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4080 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4096 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4112 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4128 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4144 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4160 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4176 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4192 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4208 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4224 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4240 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4256 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4272 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4288 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4304 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4320 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4336 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4352 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4368 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4384 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4400 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4416 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4432 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4448 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4464 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4480 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4496 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4512 + hash: "496dc6261695bcf04a8e574146544e98" + } + Frame { + msec: 4528 + hash: "9681be99003f8a14cc5654d06d2c8255" + } + Frame { + msec: 4544 + hash: "bcb592a2335aa2e35956881fd028f4e6" + } + Frame { + msec: 4560 + hash: "f914b25fdcb02a02b71220d82b7b2a75" + } + Frame { + msec: 4576 + hash: "63c82c08eb7f2bd50b54b94c952df3f2" + } + Frame { + msec: 4592 + hash: "8a8dc82be81fa55605c6c2e749895120" + } + Frame { + msec: 4608 + hash: "271f8d79b8052dfcd840ffa9ba9ffeec" + } + Frame { + msec: 4624 + hash: "8f77bbd0585b57e69ac1919bd81ee3b1" + } + Frame { + msec: 4640 + hash: "b974260a2f90e141ebc33ced98fbca88" + } + Frame { + msec: 4656 + hash: "77ada180f8a45652a6fa636d7ece4d9d" + } + Frame { + msec: 4672 + hash: "4c8dc2e33cd989cb3b0938c6c75b5f95" + } + Frame { + msec: 4688 + hash: "a145954989508b925a444e14f0c27a20" + } + Frame { + msec: 4704 + hash: "8d27ff203819174747ae4a5cee8d0ae8" + } + Frame { + msec: 4720 + hash: "830f34b0dab780c6efe2294872ba8508" + } + Frame { + msec: 4736 + hash: "5d70a4bbd815569cfe5735b596bad080" + } + Frame { + msec: 4752 + hash: "964527bb82ea006e03b030c787a8597c" + } + Frame { + msec: 4768 + hash: "1ad54954b818fa9e6032ac4b6114e7db" + } + Frame { + msec: 4784 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4800 + image: "dynamic.4.png" + } + Frame { + msec: 4816 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4832 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4848 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4864 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4880 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4896 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4912 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4928 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4944 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4960 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4976 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 4992 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 5008 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 5024 + hash: "47865243cc252aef67774001af70c54c" + } + Frame { + msec: 5040 + hash: "baeb8adffc13e230e797e0437f2ad5fa" + } + Frame { + msec: 5056 + hash: "d2e440fcad0ee2b7b35d7e5c4e581f73" + } + Frame { + msec: 5072 + hash: "fb8acb2f69234d3ee089281d0297ad7c" + } + Frame { + msec: 5088 + hash: "7fda29a83dc535ed8d6b35e999400311" + } + Frame { + msec: 5104 + hash: "6482e3eb10cfdbdeb57dd38ba3e3d67e" + } + Frame { + msec: 5120 + hash: "4d222549bc2565c1598a532460aae4e6" + } + Frame { + msec: 5136 + hash: "776d1b0f9945c0e1ceda0cf117264919" + } + Frame { + msec: 5152 + hash: "f2c362b34a0982ee1a11dea6b063945e" + } + Frame { + msec: 5168 + hash: "115f02b8893972b5b1d63525ce70762e" + } + Frame { + msec: 5184 + hash: "7f2d53581fe2c6c45a628fa4cd9b5742" + } + Frame { + msec: 5200 + hash: "b5ed1120c4edf842b15d5144adbd93b0" + } + Frame { + msec: 5216 + hash: "3511938df57c4cdce316692de204b057" + } + Frame { + msec: 5232 + hash: "99583918d068ab5d132fe7a699c2a7a6" + } + Frame { + msec: 5248 + hash: "c0ce9df18479dbb57fb1dbc777f4f0e5" + } + Frame { + msec: 5264 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5280 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5296 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5312 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5328 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5344 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5360 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5376 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5392 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5408 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5424 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5440 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5456 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5472 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5488 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5504 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5520 + hash: "b24db7b5c406328380fcf9927fb26c5c" + } + Frame { + msec: 5536 + hash: "98cc64411264d8a635a6afe6b11cee6e" + } + Frame { + msec: 5552 + hash: "b86434b7af8ad1db946c43a2791d69ab" + } + Frame { + msec: 5568 + hash: "f45616f9e33658d1dddb537e842c8768" + } + Frame { + msec: 5584 + hash: "e49d8955e27cdc19a37c331e56c81af1" + } + Frame { + msec: 5600 + hash: "b2dbe764906b50195f65dc11a5842515" + } + Frame { + msec: 5616 + hash: "71ce7c63d65c29cdffd83f5ae07f0b93" + } + Frame { + msec: 5632 + hash: "901d01e1fc777ec185cd023ad0ace4c1" + } + Frame { + msec: 5648 + hash: "a3f31de30fc2e92bae1f735504216216" + } + Frame { + msec: 5664 + hash: "0fc52dd8102506e3e7671fa548551b23" + } + Frame { + msec: 5680 + hash: "fb92809e728416035dbb91116ad8fe0e" + } + Frame { + msec: 5696 + hash: "9003dc8ca4f781909035cb03dc45864f" + } + Frame { + msec: 5712 + hash: "2bff1de793ad8521fd54413849c3cf29" + } + Frame { + msec: 5728 + hash: "8362e4db7c4446282d844a4fc6632d19" + } + Frame { + msec: 5744 + hash: "b874fa274c6ec77c106ff4a0288f9169" + } + Frame { + msec: 5760 + image: "dynamic.5.png" + } + Frame { + msec: 5776 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5792 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5808 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5824 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5840 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5856 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5872 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5888 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5904 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5920 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5936 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5952 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5968 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 5984 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 6000 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 6016 + hash: "e64ac8e11e36cafb25c947c5802d54b9" + } + Frame { + msec: 6032 + hash: "7621e64568058b82bcb6f6b46cee3ebc" + } + Frame { + msec: 6048 + hash: "f77f6de6fc88813f49427b4888a59dbf" + } + Frame { + msec: 6064 + hash: "d3a48f596219372ac25941e4c5ec5b2b" + } + Frame { + msec: 6080 + hash: "d572d932b613f9ca1e0acf144f127dd1" + } + Frame { + msec: 6096 + hash: "edf317eaf51d933bcd0f57f214921a81" + } + Frame { + msec: 6112 + hash: "e0cee7959a5a8a08ad03d75e7b5c6ca1" + } + Frame { + msec: 6128 + hash: "96877a15f44d4a2c8d9974cb28b9e1b6" + } + Frame { + msec: 6144 + hash: "c0ffb0ef6dd9d007d201feebd2f68e44" + } + Frame { + msec: 6160 + hash: "209fb930223243fa19c5dde9e85ec518" + } + Frame { + msec: 6176 + hash: "ae98ac4dba0e78eb8fb7f7dbe29b2832" + } + Frame { + msec: 6192 + hash: "c94a7d68ce007d83df77a595a5815a96" + } + Frame { + msec: 6208 + hash: "4c28e409bf5a6c1289bcab8cd59a9e42" + } + Frame { + msec: 6224 + hash: "ea1009f1a3446dd5ce937e6949794794" + } + Frame { + msec: 6240 + hash: "940c16766c2f87feef48e1187672ca9b" + } + Frame { + msec: 6256 + hash: "93664c87c8dcfadc0345f646b2508625" + } + Frame { + msec: 6272 + hash: "93664c87c8dcfadc0345f646b2508625" + } + Frame { + msec: 6288 + hash: "93664c87c8dcfadc0345f646b2508625" + } + Frame { + msec: 6304 + hash: "93664c87c8dcfadc0345f646b2508625" + } + Frame { + msec: 6320 + hash: "93664c87c8dcfadc0345f646b2508625" + } + Frame { + msec: 6336 + hash: "93664c87c8dcfadc0345f646b2508625" + } + Frame { + msec: 6352 + hash: "93664c87c8dcfadc0345f646b2508625" + } + Frame { + msec: 6368 + hash: "93664c87c8dcfadc0345f646b2508625" + } + Frame { + msec: 6384 + hash: "93664c87c8dcfadc0345f646b2508625" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml index 8a522a5..b5685d1 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativepositioners/dynamic.qml @@ -1,7 +1,7 @@ import QtQuick 1.0 -//Expected to fail until QTBUG-14839 is resolved Item { + property string skip: "Expected to fail until QTBUG-14839 is resolved" width: 120; height: 60; property int step: 0 function tick() diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index 7cd96e2..b52b430 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -143,7 +143,7 @@ void tst_qmlvisual::visual_data() foreach (const QString &file, files) { QString testdata = toTestScript(file); - if (testdata.isEmpty() || !QFile::exists(testdata+".qml")) + if (testdata.isEmpty()) continue; QTest::newRow(file.toLatin1().constData()) << file << testdata; -- cgit v0.12 From 05701150d5d8c619288486593363f0b52a8eda49 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 15:33:26 +1000 Subject: Revert "Disable WebView visualtests" This reverts commit 8ba02a8f5a537b9f7e1ff671abe6eed67029db58. ExpectFail state has been altered. Redoing that commit. This commit also adds the new line to indicate tests we don't care about --- .../qmlvisual/webview/autosize/autosize.qml | 1 + .../qmlvisual/webview/autosize/data/autosize.qml | 115 + .../webview/javascript/data/evaluateJavaScript.qml | 3759 ++++++++++++++++++++ .../webview/javascript/data/windowObjects.qml | 2643 ++++++++++++++ .../webview/javascript/evaluateJavaScript.qml | 1 + .../qmlvisual/webview/javascript/windowObjects.qml | 1 + .../qmlvisual/webview/settings/data/fontFamily.qml | 395 ++ .../qmlvisual/webview/settings/data/fontSize.qml | 339 ++ .../webview/settings/data/noAutoLoadImages.qml | 595 ++++ .../webview/settings/data/setFontFamily.qml | 351 ++ .../qmlvisual/webview/settings/fontFamily.qml | 1 + .../qmlvisual/webview/settings/fontSize.qml | 1 + .../webview/settings/noAutoLoadImages.qml | 1 + .../qmlvisual/webview/settings/setFontFamily.qml | 1 + .../qmlvisual/webview/zooming/data/pageWidth.qml | 227 ++ .../webview/zooming/data/renderControl.qml | 415 +++ .../qmlvisual/webview/zooming/data/resolution.qml | 1319 +++++++ .../webview/zooming/data/zoomTextOnly.qml | 655 ++++ .../qmlvisual/webview/zooming/data/zooming.qml | 2115 +++++++++++ .../qmlvisual/webview/zooming/pageWidth.qml | 1 + .../qmlvisual/webview/zooming/renderControl.qml | 1 + .../qmlvisual/webview/zooming/resolution.qml | 1 + .../qmlvisual/webview/zooming/zoomTextOnly.qml | 1 + .../qmlvisual/webview/zooming/zooming.qml | 1 + 24 files changed, 12940 insertions(+) create mode 100644 tests/auto/declarative/qmlvisual/webview/autosize/data/autosize.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml create mode 100644 tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml diff --git a/tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml b/tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml index b6280a6..d3b4e6b 100644 --- a/tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml +++ b/tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml @@ -4,6 +4,7 @@ import org.webkit 1.0 // The WebView size is determined by the width, height, // preferredWidth, and preferredHeight properties. Rectangle { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" id: rect color: "white" width: 200 diff --git a/tests/auto/declarative/qmlvisual/webview/autosize/data/autosize.qml b/tests/auto/declarative/qmlvisual/webview/autosize/data/autosize.qml new file mode 100644 index 0000000..6122138 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/autosize/data/autosize.qml @@ -0,0 +1,115 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "b2d863e57dee2a297d038e18acc70f92" + } + Frame { + msec: 32 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 48 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 64 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 80 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 96 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 112 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 128 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 144 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 160 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 176 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 192 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 208 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 224 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 240 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 256 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 272 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 288 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 304 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 320 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 336 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 352 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 368 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 384 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 400 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 416 + hash: "903a4c7e619abba5342c8c827f26a722" + } + Frame { + msec: 432 + hash: "903a4c7e619abba5342c8c827f26a722" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml b/tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml new file mode 100644 index 0000000..bfe40da --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/javascript/data/evaluateJavaScript.qml @@ -0,0 +1,3759 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 32 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 48 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 64 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 80 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 96 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 112 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 128 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 144 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 160 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 176 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 192 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 208 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 224 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 240 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 256 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 272 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 288 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 304 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 320 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 336 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 352 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 368 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 384 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 400 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 416 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 195; y: 25 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 187; y: 35 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 432 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 153; y: 77 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 448 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 145; y: 87 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 139; y: 99 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 464 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 135; y: 111 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 129; y: 121 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 480 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 125; y: 131 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 121; y: 139 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 117; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 496 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 111; y: 157 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 512 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 165 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 171 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 528 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 177 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 185 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 544 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 189 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 195 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 560 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 199 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 201 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 576 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 203 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 204 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 592 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 608 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 205 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 624 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 77; y: 207 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 208 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 640 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 656 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 218 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 220 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 672 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 222 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 688 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 704 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 720 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 736 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 752 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 768 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 784 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 800 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 816 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 222 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 832 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 221 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 217 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 848 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 60; y: 215 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 864 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 59; y: 214 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 880 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 896 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 912 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 928 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 944 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 960 + image: "evaluateJavaScript.0.png" + } + Frame { + msec: 976 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 992 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1008 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 55; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1024 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1040 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1056 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1072 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1088 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 55; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1104 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1120 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1136 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1152 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1168 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1184 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1200 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1216 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1232 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1248 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1264 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1280 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1296 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 212 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1312 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 210 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 209 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1328 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 208 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 207 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1344 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 207 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1360 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1376 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1392 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1408 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1424 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1440 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1456 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1472 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1488 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1504 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1520 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1536 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1552 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1568 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1584 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1600 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1616 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1632 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1648 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1664 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1680 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1696 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1712 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1728 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1744 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1760 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1776 + hash: "244200622435603a75f58366496daf8b" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1792 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1808 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1824 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1840 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1856 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1872 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1888 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1904 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1920 + image: "evaluateJavaScript.1.png" + } + Frame { + msec: 1936 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1952 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1968 + hash: "244200622435603a75f58366496daf8b" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1984 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2000 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2016 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2032 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2048 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2064 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2080 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2096 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2112 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2128 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2144 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2160 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2176 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2192 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2208 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2224 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2240 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2256 + hash: "c93921d0611e95373338c14cfcc17481" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2272 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2288 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2304 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2320 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2336 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2352 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2368 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2384 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2400 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2416 + hash: "c93921d0611e95373338c14cfcc17481" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2432 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2448 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2464 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2480 + hash: "9266775c7f2156977ff56fcd45246229" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2496 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2512 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2528 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2544 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2560 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2576 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2592 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2608 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2624 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2640 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2656 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2672 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2688 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2704 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2720 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2736 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2752 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2768 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2784 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2800 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2816 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2832 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2848 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2864 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2880 + image: "evaluateJavaScript.2.png" + } + Frame { + msec: 2896 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2912 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2928 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2944 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2960 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2976 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2992 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3008 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3024 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3040 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3056 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3072 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3088 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3104 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3120 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3136 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3152 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3168 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3184 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3200 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3216 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3232 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3248 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3264 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3280 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3296 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3312 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3328 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3344 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3360 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3376 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 59; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3392 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3408 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 54; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 53; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3424 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3440 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3456 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3472 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3488 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3504 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3520 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 52; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 52; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3536 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3552 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3568 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3584 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3600 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3616 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3632 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3648 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 52; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3664 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3680 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3696 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3712 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3728 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3744 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3760 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3776 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3792 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3808 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3824 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3840 + image: "evaluateJavaScript.3.png" + } + Frame { + msec: 3856 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3872 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3888 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3904 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3920 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3936 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3952 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3968 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3984 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 4000 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4016 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4032 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4048 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4064 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4080 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4096 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4112 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 4128 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4144 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4160 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4176 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4192 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4208 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4224 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4240 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4256 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4272 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4288 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4304 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4320 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4336 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4352 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4368 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4384 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4400 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4416 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4432 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4448 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4464 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4480 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4496 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4512 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4528 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4544 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4560 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4576 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4592 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4608 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4624 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4640 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4656 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4672 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4688 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4704 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4720 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4736 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4752 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4768 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4784 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 4800 + image: "evaluateJavaScript.4.png" + } + Frame { + msec: 4816 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4832 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4848 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4864 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4880 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4896 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4912 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4928 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 4944 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4960 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4976 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4992 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5008 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5024 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5040 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5056 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5072 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5088 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5104 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5120 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5136 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5152 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5168 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5184 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5200 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5216 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5232 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5248 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5264 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5280 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5296 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5312 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5328 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5344 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5360 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5376 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5392 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5408 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5424 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5440 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5456 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5472 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5488 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5504 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5520 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5536 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5552 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5568 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5584 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5600 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5616 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5632 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5648 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5664 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5680 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5696 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5712 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5728 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5744 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5760 + image: "evaluateJavaScript.5.png" + } + Frame { + msec: 5776 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5792 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5808 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5824 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 54; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5840 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 56; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 204 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5856 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 202 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 200 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5872 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 200 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5888 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 192 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 102; y: 188 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5904 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 108; y: 182 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 112; y: 176 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5920 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 168 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 158 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5936 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 124; y: 148 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 128; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5952 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 130; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 134; y: 112 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5968 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 138; y: 100 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 142; y: 88 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 150; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 154; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 158; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 162; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 166; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 168; y: 38 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 172; y: 32 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 174; y: 26 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 176; y: 20 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 177; y: 18 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 16 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 14 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 11 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 10 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 179; y: 9 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 180; y: 7 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 181; y: 5 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 181; y: 4 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 182; y: 2 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 183; y: 1 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6208 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6224 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6240 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6256 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6272 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6288 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6304 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6320 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6336 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6352 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6368 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6384 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6400 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6416 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6432 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6448 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6464 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6480 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6496 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6512 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6528 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6544 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6560 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6576 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6592 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6608 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6624 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6640 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6656 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6672 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6688 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6704 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6720 + image: "evaluateJavaScript.6.png" + } + Frame { + msec: 6736 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6752 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6768 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6784 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6800 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6816 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6832 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6848 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6864 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 176; y: 1 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 174; y: 15 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 172; y: 31 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6880 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 166; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 162; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6896 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 156; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 150; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6912 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 107 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 138; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6928 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 132; y: 127 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 126; y: 133 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6944 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 122; y: 137 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 138 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6960 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6976 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6992 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7008 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7024 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7040 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7056 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7072 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 119; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7088 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7104 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7120 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 117; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7136 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 139 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 141 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7152 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 113; y: 149 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 109; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7168 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 165 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 171 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7184 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 179 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 181 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7200 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 187 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 189 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7216 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 190 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7232 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7248 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7264 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7280 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 188 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7296 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 187 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 186 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7312 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 185 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 184 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7328 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 183 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 182 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7344 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 180 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7360 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 178 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7376 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 177 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 176 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 174 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7392 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7408 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 172 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 171 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7424 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 170 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7440 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 169 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7456 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 167 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7472 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7488 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7504 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 101; y: 167 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7520 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7536 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7552 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7568 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7584 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7600 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7616 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7632 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 166 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 101; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7648 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7664 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7680 + image: "evaluateJavaScript.7.png" + } + Frame { + msec: 7696 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7712 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7728 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7744 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7760 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7776 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7792 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7808 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7824 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7840 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7856 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7872 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 106; y: 165 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7888 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 108; y: 164 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 109; y: 163 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7904 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 111; y: 163 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 112; y: 162 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7920 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 158 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7936 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 118; y: 157 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 122; y: 153 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7952 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 128; y: 147 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 134; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7968 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 140; y: 133 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 146; y: 125 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 150; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7984 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 156; y: 109 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 160; y: 99 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8000 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 164; y: 89 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 166; y: 77 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8016 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 170; y: 67 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 172; y: 55 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8032 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 176; y: 45 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8048 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 35 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 27 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 180; y: 19 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8064 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 180; y: 11 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 182; y: 5 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8080 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8096 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8112 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8128 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8144 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8160 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8176 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8192 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8208 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8224 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8240 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8256 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8272 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8288 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8304 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8320 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8336 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8352 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8368 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8384 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8400 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8416 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8432 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8448 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8464 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8480 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8496 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8512 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8528 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8544 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8560 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8576 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8592 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8608 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8624 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8640 + image: "evaluateJavaScript.8.png" + } + Frame { + msec: 8656 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8672 + hash: "792140067e09d04b31e78be1fc9a40a2" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml b/tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml new file mode 100644 index 0000000..07aa13d --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/javascript/data/windowObjects.qml @@ -0,0 +1,2643 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 32 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 48 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 64 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 80 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 96 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 112 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 128 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 144 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 160 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 176 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 192 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 208 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 224 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 240 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 256 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 272 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 288 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 304 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 320 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 336 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 352 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 368 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 384 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 400 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 416 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 432 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 448 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 464 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 480 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 496 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 512 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 528 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 544 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 560 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 576 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 592 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 608 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 624 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 640 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 656 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 672 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 688 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 704 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 720 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 736 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 752 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 768 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 784 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 800 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 816 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 832 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 848 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 864 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 880 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 896 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 912 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 928 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 944 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 960 + image: "windowObjects.0.png" + } + Frame { + msec: 976 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 992 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1008 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1024 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1040 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 155; y: 9 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 145; y: 23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1056 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 137; y: 37 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 127; y: 53 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1072 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 119; y: 67 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 111; y: 77 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1088 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 87 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1104 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 93 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 109 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1120 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 117 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 125 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1136 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 133 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1152 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 142 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 145 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1168 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 146 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 147 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1184 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1200 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1216 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1232 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1248 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 143 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1264 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1280 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 142 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1296 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 138 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1312 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1328 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1344 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 137 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1360 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1376 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1392 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 142 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1408 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1424 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 146 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 148 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1440 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 151 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 153 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1456 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 154 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1472 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1488 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1504 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1520 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1536 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1552 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1568 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1584 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1600 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1616 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1632 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1648 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1664 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1680 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1696 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1712 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1728 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1744 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1760 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1776 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1792 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1808 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1824 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1840 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1856 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1872 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1888 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1904 + hash: "b1a19797afefa71e30f4594064aa4951" + } + Frame { + msec: 1920 + image: "windowObjects.1.png" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 89; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1936 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 1952 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 1968 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 1984 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 2000 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Frame { + msec: 2016 + hash: "fca76207a4fa6f2c4bb01d28aa018f0c" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 89; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2032 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2048 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2064 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2080 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2096 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2112 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2128 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2144 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2160 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2176 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2192 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2208 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2224 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2240 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2256 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2272 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2288 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 157 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 158 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 160 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2304 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 161 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 167 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2320 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 169 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 175 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2336 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 183 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 189 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2352 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 195 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 201 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2368 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 207 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2384 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 215 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 59; y: 221 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2400 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 58; y: 222 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2416 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2432 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2448 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2464 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2480 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2496 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2512 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2528 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2544 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2560 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2576 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2592 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2608 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2624 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2640 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2656 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2672 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2688 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2704 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2720 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2736 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 49; y: 225 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 50; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2752 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 50; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2768 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 51; y: 222 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2784 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 51; y: 221 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 52; y: 220 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2800 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 52; y: 218 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2816 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 53; y: 217 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2832 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2848 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2864 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 54; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2880 + image: "windowObjects.2.png" + } + Frame { + msec: 2896 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 215 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2912 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2928 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 56; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2944 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2960 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 2976 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 214 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 57; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2992 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3008 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3024 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3040 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3056 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3072 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3088 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3104 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 57; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3120 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3136 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3152 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3168 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3184 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3200 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3216 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Frame { + msec: 3232 + hash: "6927f81ca01ef75d204994aa82c60c4d" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3248 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3264 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3280 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3296 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3312 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3328 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3344 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3360 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 212 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3376 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3392 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Frame { + msec: 3408 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3424 + hash: "2165224e8f66a797ae5c991462fb56d8" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3440 + hash: "c6ac7e0be8b7b2a80966344389def97a" + } + Frame { + msec: 3456 + hash: "c6ac7e0be8b7b2a80966344389def97a" + } + Frame { + msec: 3472 + hash: "c6ac7e0be8b7b2a80966344389def97a" + } + Frame { + msec: 3488 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3504 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3520 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3536 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3552 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3568 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3584 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Frame { + msec: 3600 + hash: "40f333072bb9f1d334d5ae432d9641b9" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 58; y: 210 + modifiers: 0 + sendToViewport: true + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3616 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 60; y: 209 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 207 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3632 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 205 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3648 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 204 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 203 + modifiers: 0 + sendToViewport: true + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3664 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 202 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 200 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3680 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3696 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 198 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 197 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 195 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3712 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 194 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 192 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3728 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 190 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 188 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3744 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 186 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 185 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3760 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 183 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 181 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3776 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 179 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 178 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3792 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 176 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 175 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3808 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 174 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 173 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3824 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 172 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3840 + image: "windowObjects.3.png" + } + Frame { + msec: 3856 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3872 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3888 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3904 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3920 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 171 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 171 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3936 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3952 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3968 + hash: "96f727ef0dacfda9ea77fb5651493030" + } + Frame { + msec: 3984 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4000 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4016 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4032 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 170 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4048 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 77; y: 169 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4064 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 168 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4080 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 167 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4096 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 165 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4112 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4128 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4144 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4160 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Frame { + msec: 4176 + hash: "ed7b3d93d690df73be5cbee8c41a1931" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 83; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4192 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4208 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4224 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4240 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4256 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4272 + hash: "5b3505be865f704640e81cea092d35ba" + } + Frame { + msec: 4288 + hash: "5b3505be865f704640e81cea092d35ba" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 83; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4304 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4320 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4336 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4352 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4368 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4384 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4400 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4416 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4432 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4448 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4464 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 158 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4480 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 154 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 152 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4496 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 87; y: 150 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4512 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 93; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 134 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4528 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 128 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4544 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 109; y: 114 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 113; y: 108 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4560 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 114; y: 106 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 114; y: 105 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4576 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 104 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4592 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 100 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 98 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4608 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 92 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 122; y: 86 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4624 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 126; y: 76 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 130; y: 66 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4640 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 132; y: 56 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 134; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4656 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 136; y: 38 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 138; y: 30 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4672 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 140; y: 22 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 141; y: 20 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4688 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 143; y: 14 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4704 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 11 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 9 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4720 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 7 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 6 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4736 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 143; y: 4 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 143; y: 2 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4752 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 143; y: 1 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4768 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4784 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4800 + image: "windowObjects.4.png" + } + Frame { + msec: 4816 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4832 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4848 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4864 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4880 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4896 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4912 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4928 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4944 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4960 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4976 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 4992 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5008 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5024 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5040 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5056 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5072 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5088 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5104 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5120 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5136 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5152 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5168 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5184 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5200 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5216 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5232 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5248 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5264 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5280 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5296 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5312 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5328 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5344 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5360 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5376 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5392 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5408 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5424 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5440 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5456 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5472 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5488 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5504 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5520 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5536 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5552 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5568 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } + Frame { + msec: 5584 + hash: "cb5a42e7ab70e05a8bbecabb587f9e5e" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml b/tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml index bee2618..916aa99 100644 --- a/tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml +++ b/tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 Column { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" WebView { id: webview width: 200 diff --git a/tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml b/tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml index 9e22e20..250c80d 100644 --- a/tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml +++ b/tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 Column { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" WebView { width: 200 height: 200 diff --git a/tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml b/tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml new file mode 100644 index 0000000..34d1116 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/settings/data/fontFamily.qml @@ -0,0 +1,395 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 32 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 48 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 64 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 80 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 96 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 112 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 128 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 144 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 160 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 176 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 192 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 208 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 224 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 240 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 256 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 272 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 288 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 304 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 320 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 336 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 352 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 368 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 384 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 400 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 416 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 432 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 448 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 464 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 480 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 496 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 512 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 528 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 544 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 560 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 576 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 592 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 608 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 624 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 640 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 656 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 672 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 688 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 196; y: 25 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 194; y: 19 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 190; y: 13 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 704 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 720 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 736 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 752 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 768 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 784 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 800 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 816 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 832 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 848 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 864 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 880 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 896 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 912 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 928 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 944 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 960 + image: "fontFamily.0.png" + } + Frame { + msec: 976 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 992 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1008 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1024 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1040 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1056 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1072 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1088 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1104 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1120 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1136 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1152 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1168 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1184 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1200 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1216 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1232 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1248 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1264 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1280 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1296 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1312 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1328 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1344 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1360 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1376 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1392 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1408 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1424 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1440 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } + Frame { + msec: 1456 + hash: "5d66fdee6a0a96bb24e89244f02eacc9" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml b/tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml new file mode 100644 index 0000000..efe3875 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/settings/data/fontSize.qml @@ -0,0 +1,339 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 32 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 48 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 64 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 80 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 96 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 112 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 128 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 144 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 160 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 176 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 192 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 208 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 224 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 240 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 256 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 272 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 288 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 304 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 320 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 336 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 352 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 368 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 384 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 400 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 416 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 432 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 448 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 464 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 480 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 496 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 512 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 528 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 544 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 560 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 576 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 592 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 608 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 624 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 640 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 656 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 672 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 688 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 704 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 720 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 736 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 752 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 768 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 784 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 800 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 816 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 832 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 848 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 864 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 880 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 896 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 912 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 928 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 944 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 960 + image: "fontSize.0.png" + } + Frame { + msec: 976 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 992 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1008 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1024 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1040 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1056 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1072 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1088 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1104 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1120 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1136 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1152 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1168 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1184 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1200 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1216 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1232 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1248 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1264 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1280 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1296 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1312 + hash: "962e77f522956d38f3b1b890df749f0a" + } + Frame { + msec: 1328 + hash: "962e77f522956d38f3b1b890df749f0a" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml b/tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml new file mode 100644 index 0000000..624a16b --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/settings/data/noAutoLoadImages.qml @@ -0,0 +1,595 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 32 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 48 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 64 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 80 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 96 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 112 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 128 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 144 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 160 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 176 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 192 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 208 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 224 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 240 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 256 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 272 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 288 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 304 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 320 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 336 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 352 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 368 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 384 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 400 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 416 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 432 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 448 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 464 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 480 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 496 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 512 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 528 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 544 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 560 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 576 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 592 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 608 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 624 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 640 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 656 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 672 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 688 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 704 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 720 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 736 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 752 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 768 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 784 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 800 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 816 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 832 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 848 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 864 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 880 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 896 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 912 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 928 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 944 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 960 + image: "noAutoLoadImages.0.png" + } + Frame { + msec: 976 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 992 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1008 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1024 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1040 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1056 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1072 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1088 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1104 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1120 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1136 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1152 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1168 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1184 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1200 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1216 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1232 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1248 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1264 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1280 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1296 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1312 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1328 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1344 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1360 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1376 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1392 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1408 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1424 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1440 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1456 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1472 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1488 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1504 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1520 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1536 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1552 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1568 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1584 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1600 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1616 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1632 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1648 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1664 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1680 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1696 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1712 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1728 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1744 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1760 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1776 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1792 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1808 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1824 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1840 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1856 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1872 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1888 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1904 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1920 + image: "noAutoLoadImages.1.png" + } + Frame { + msec: 1936 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1952 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1968 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 1984 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2000 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2016 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2032 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2048 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2064 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2080 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2096 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2112 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2128 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2144 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2160 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2176 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2192 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2208 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2224 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2240 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2256 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2272 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2288 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2304 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2320 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2336 + hash: "5146cfbeefc51268eca7717d84775750" + } + Frame { + msec: 2352 + hash: "5146cfbeefc51268eca7717d84775750" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml b/tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml new file mode 100644 index 0000000..414d64f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/settings/data/setFontFamily.qml @@ -0,0 +1,351 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 32 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 48 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 64 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 80 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 96 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 112 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 128 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 144 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 160 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 176 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 192 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 208 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 224 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 240 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 256 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 272 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 288 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 304 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 320 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 336 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 352 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 368 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 384 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 400 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 416 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 432 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 448 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 464 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 480 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 496 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 512 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 528 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 544 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 560 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 576 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 592 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 608 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 624 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 640 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 656 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 672 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 688 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 704 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 720 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 736 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 752 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 768 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 784 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 800 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 816 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 832 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 848 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 864 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 880 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 896 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 912 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 928 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 944 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 960 + image: "setFontFamily.0.png" + } + Frame { + msec: 976 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 992 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1008 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1024 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1040 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1056 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1072 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1088 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1104 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1120 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1136 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1152 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1168 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1184 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1200 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1216 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1232 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1248 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1264 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1280 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1296 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1312 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1328 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1344 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1360 + hash: "7ef8bb83c146898bd75de8951a932b58" + } + Frame { + msec: 1376 + hash: "7ef8bb83c146898bd75de8951a932b58" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml b/tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml index 68acced..df08666 100644 --- a/tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml +++ b/tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 WebView { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" id: web width: 200 height: 200 diff --git a/tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml b/tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml index 4a0db01..2403616 100644 --- a/tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml +++ b/tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 Grid { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" columns: 3 Rectangle { Text { color: "green"; text: "Normal" } diff --git a/tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml b/tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml index 3d50664..ec503bf 100644 --- a/tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml +++ b/tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 Grid { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" columns: 2 Rectangle { Text { id: label; x:10; y:170; color: "green"; text: "No image" } diff --git a/tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml b/tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml index ae5ddd2..f353fb4 100644 --- a/tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml +++ b/tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 WebView { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" url: "test.html" width: 300 height: 300 diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml new file mode 100644 index 0000000..2e60b7f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/zooming/data/pageWidth.qml @@ -0,0 +1,227 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 32 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 48 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 64 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 80 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 96 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 112 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 128 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 144 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 160 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 176 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 192 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 208 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 224 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 240 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 256 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 272 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 288 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 304 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 320 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 336 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 352 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 368 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 384 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 400 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 416 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 432 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 448 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 464 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 480 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 496 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 512 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 528 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 544 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 560 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 576 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 592 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 608 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 624 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 640 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 656 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 672 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 688 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 704 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 720 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 736 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 752 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 768 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 784 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 800 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 816 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 832 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 848 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 864 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 880 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml new file mode 100644 index 0000000..464e009 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/zooming/data/renderControl.qml @@ -0,0 +1,415 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "4f999826cd5ebe4f58bfd255e1c22be0" + } + Frame { + msec: 32 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } + Frame { + msec: 48 + hash: "19d5f48f1c73d52483be96c887d3fd76" + } + Frame { + msec: 64 + hash: "9b85eef4e0746cc43aaefd442efdd824" + } + Frame { + msec: 80 + hash: "fca0034fb720e40198ede95a0ab0fadb" + } + Frame { + msec: 96 + hash: "9f63ddbd927a4b08242f3410a9ed7283" + } + Frame { + msec: 112 + hash: "4f5804c3c3ee195470a462293307cfd5" + } + Frame { + msec: 128 + hash: "d0434f08a8097b97b76c1194317a38ba" + } + Frame { + msec: 144 + hash: "921880d300e56f9605923a13fcd8b967" + } + Frame { + msec: 160 + hash: "f5dc87abf36332c68fd4450a6236dcb4" + } + Frame { + msec: 176 + hash: "c54f220cd5768afa1c12579007e17eff" + } + Frame { + msec: 192 + hash: "e1c70c3896d5a937296f205b09991b31" + } + Frame { + msec: 208 + hash: "d135f70f761add1358062a0386c62d18" + } + Frame { + msec: 224 + hash: "53cb2ed2b65e77cf0cd70530f32854ad" + } + Frame { + msec: 240 + hash: "2ff4feb61d958a800b38b282c3400293" + } + Frame { + msec: 256 + hash: "59f5585ec472efa29c5eba8b972ab3bd" + } + Frame { + msec: 272 + hash: "3aef5e1ff6da15e0e9f2e620dbabbab2" + } + Frame { + msec: 288 + hash: "2931299f667752efe9fca727534385e1" + } + Frame { + msec: 304 + hash: "2ed90e61c41b994ccea924191b66fc71" + } + Frame { + msec: 320 + hash: "1424c634067c896973c2c10793957933" + } + Frame { + msec: 336 + hash: "c4d30d511053a7caeefdae753236cf5b" + } + Frame { + msec: 352 + hash: "32300e07e34e8f316770c790a5ef9f6d" + } + Frame { + msec: 368 + hash: "95312dc2a4d88a48605fea170712354d" + } + Frame { + msec: 384 + hash: "3d146357d1532640cefb64fbae75bc0d" + } + Frame { + msec: 400 + hash: "5b78740511a456a3647d8392b2008f7f" + } + Frame { + msec: 416 + hash: "dddb065cefa27a862d108429c9984191" + } + Frame { + msec: 432 + hash: "0857067a0ee381e0f462ef8aceb0b696" + } + Frame { + msec: 448 + hash: "1f5e7e064cc62ff2e0585c98875351df" + } + Frame { + msec: 464 + hash: "c7f6bb852bdb2b99cbb5a8ca34f1585a" + } + Frame { + msec: 480 + hash: "f2284dea5812f167cae08c687fc1a3e9" + } + Frame { + msec: 496 + hash: "deec54bc32c46921e5032bce7daa1dad" + } + Frame { + msec: 512 + hash: "1271d3704de17bfe463c76fd73c3132b" + } + Frame { + msec: 528 + hash: "0568b0ecd47cd1c34b9de477e68e5751" + } + Frame { + msec: 544 + hash: "f070dd88e42697a9e43573f9f41b3540" + } + Frame { + msec: 560 + hash: "f5ced2827b06ea514f05866f1e4099f0" + } + Frame { + msec: 576 + hash: "59f5585ec472efa29c5eba8b972ab3bd" + } + Frame { + msec: 592 + hash: "2ff4feb61d958a800b38b282c3400293" + } + Frame { + msec: 608 + hash: "53cb2ed2b65e77cf0cd70530f32854ad" + } + Frame { + msec: 624 + hash: "d135f70f761add1358062a0386c62d18" + } + Frame { + msec: 640 + hash: "e1c70c3896d5a937296f205b09991b31" + } + Frame { + msec: 656 + hash: "c54f220cd5768afa1c12579007e17eff" + } + Frame { + msec: 672 + hash: "f5dc87abf36332c68fd4450a6236dcb4" + } + Frame { + msec: 688 + hash: "921880d300e56f9605923a13fcd8b967" + } + Frame { + msec: 704 + hash: "d0434f08a8097b97b76c1194317a38ba" + } + Frame { + msec: 720 + hash: "4f5804c3c3ee195470a462293307cfd5" + } + Frame { + msec: 736 + hash: "9f63ddbd927a4b08242f3410a9ed7283" + } + Frame { + msec: 752 + hash: "fca0034fb720e40198ede95a0ab0fadb" + } + Frame { + msec: 768 + hash: "9b85eef4e0746cc43aaefd442efdd824" + } + Frame { + msec: 784 + hash: "19d5f48f1c73d52483be96c887d3fd76" + } + Frame { + msec: 800 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } + Frame { + msec: 816 + hash: "4f999826cd5ebe4f58bfd255e1c22be0" + } + Frame { + msec: 832 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } + Frame { + msec: 848 + hash: "19d5f48f1c73d52483be96c887d3fd76" + } + Frame { + msec: 864 + hash: "9b85eef4e0746cc43aaefd442efdd824" + } + Frame { + msec: 880 + hash: "fca0034fb720e40198ede95a0ab0fadb" + } + Frame { + msec: 896 + hash: "9f63ddbd927a4b08242f3410a9ed7283" + } + Frame { + msec: 912 + hash: "4f5804c3c3ee195470a462293307cfd5" + } + Frame { + msec: 928 + hash: "d0434f08a8097b97b76c1194317a38ba" + } + Frame { + msec: 944 + hash: "921880d300e56f9605923a13fcd8b967" + } + Frame { + msec: 960 + image: "renderControl.0.png" + } + Frame { + msec: 976 + hash: "c54f220cd5768afa1c12579007e17eff" + } + Frame { + msec: 992 + hash: "e1c70c3896d5a937296f205b09991b31" + } + Frame { + msec: 1008 + hash: "d135f70f761add1358062a0386c62d18" + } + Frame { + msec: 1024 + hash: "53cb2ed2b65e77cf0cd70530f32854ad" + } + Frame { + msec: 1040 + hash: "2ff4feb61d958a800b38b282c3400293" + } + Frame { + msec: 1056 + hash: "59f5585ec472efa29c5eba8b972ab3bd" + } + Frame { + msec: 1072 + hash: "3aef5e1ff6da15e0e9f2e620dbabbab2" + } + Frame { + msec: 1088 + hash: "2931299f667752efe9fca727534385e1" + } + Frame { + msec: 1104 + hash: "2ed90e61c41b994ccea924191b66fc71" + } + Frame { + msec: 1120 + hash: "1424c634067c896973c2c10793957933" + } + Frame { + msec: 1136 + hash: "c4d30d511053a7caeefdae753236cf5b" + } + Frame { + msec: 1152 + hash: "32300e07e34e8f316770c790a5ef9f6d" + } + Frame { + msec: 1168 + hash: "95312dc2a4d88a48605fea170712354d" + } + Frame { + msec: 1184 + hash: "3d146357d1532640cefb64fbae75bc0d" + } + Frame { + msec: 1200 + hash: "5b78740511a456a3647d8392b2008f7f" + } + Frame { + msec: 1216 + hash: "dddb065cefa27a862d108429c9984191" + } + Frame { + msec: 1232 + hash: "0857067a0ee381e0f462ef8aceb0b696" + } + Frame { + msec: 1248 + hash: "1f5e7e064cc62ff2e0585c98875351df" + } + Frame { + msec: 1264 + hash: "c7f6bb852bdb2b99cbb5a8ca34f1585a" + } + Frame { + msec: 1280 + hash: "f2284dea5812f167cae08c687fc1a3e9" + } + Frame { + msec: 1296 + hash: "deec54bc32c46921e5032bce7daa1dad" + } + Frame { + msec: 1312 + hash: "1271d3704de17bfe463c76fd73c3132b" + } + Frame { + msec: 1328 + hash: "0568b0ecd47cd1c34b9de477e68e5751" + } + Frame { + msec: 1344 + hash: "f070dd88e42697a9e43573f9f41b3540" + } + Frame { + msec: 1360 + hash: "f5ced2827b06ea514f05866f1e4099f0" + } + Frame { + msec: 1376 + hash: "59f5585ec472efa29c5eba8b972ab3bd" + } + Frame { + msec: 1392 + hash: "2ff4feb61d958a800b38b282c3400293" + } + Frame { + msec: 1408 + hash: "53cb2ed2b65e77cf0cd70530f32854ad" + } + Frame { + msec: 1424 + hash: "d135f70f761add1358062a0386c62d18" + } + Frame { + msec: 1440 + hash: "e1c70c3896d5a937296f205b09991b31" + } + Frame { + msec: 1456 + hash: "c54f220cd5768afa1c12579007e17eff" + } + Frame { + msec: 1472 + hash: "f5dc87abf36332c68fd4450a6236dcb4" + } + Frame { + msec: 1488 + hash: "921880d300e56f9605923a13fcd8b967" + } + Frame { + msec: 1504 + hash: "d0434f08a8097b97b76c1194317a38ba" + } + Frame { + msec: 1520 + hash: "4f5804c3c3ee195470a462293307cfd5" + } + Frame { + msec: 1536 + hash: "9f63ddbd927a4b08242f3410a9ed7283" + } + Frame { + msec: 1552 + hash: "fca0034fb720e40198ede95a0ab0fadb" + } + Frame { + msec: 1568 + hash: "9b85eef4e0746cc43aaefd442efdd824" + } + Frame { + msec: 1584 + hash: "19d5f48f1c73d52483be96c887d3fd76" + } + Frame { + msec: 1600 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } + Frame { + msec: 1616 + hash: "4f999826cd5ebe4f58bfd255e1c22be0" + } + Frame { + msec: 1632 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml new file mode 100644 index 0000000..edf8040 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/zooming/data/resolution.qml @@ -0,0 +1,1319 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "ac1d9c1cc13813b5e94c692a209a4e36" + } + Frame { + msec: 32 + hash: "1f189a436cf74ae83a03c3bb63c24ec2" + } + Frame { + msec: 48 + hash: "369f761053d5910e00672aa866f698ba" + } + Frame { + msec: 64 + hash: "30a191ae899121ae22d10acee6593415" + } + Frame { + msec: 80 + hash: "7af041898748bb5950643b057ca59eea" + } + Frame { + msec: 96 + hash: "e0a2ed91e78ff9a994deb9649a8afc16" + } + Frame { + msec: 112 + hash: "649ad1a3fb57fb088e4e5cfd749bf2e5" + } + Frame { + msec: 128 + hash: "9053a92e343ebb79bd2831f5ab94a1b5" + } + Frame { + msec: 144 + hash: "dc78b09e27bbc0a2cfec83436eef4446" + } + Frame { + msec: 160 + hash: "2aaa3749f93734dd203e1fea91a9f24a" + } + Frame { + msec: 176 + hash: "8df8dd33eada434231332b81e03430ce" + } + Frame { + msec: 192 + hash: "b5b1beb4dd4720eaa8b888fbef1ba875" + } + Frame { + msec: 208 + hash: "e531d33ef14b58ad843a6be6d7cb0961" + } + Frame { + msec: 224 + hash: "011c0bcca7717b08bc53738718203f7e" + } + Frame { + msec: 240 + hash: "412a630348aa44d56f36f04982035e36" + } + Frame { + msec: 256 + hash: "45528cdc62622b6d01e44466cd85bd38" + } + Frame { + msec: 272 + hash: "0901c99f959d6c10a0b6ea46a282d8fd" + } + Frame { + msec: 288 + hash: "3f200fca4815d555f22912d9fcdc20ee" + } + Frame { + msec: 304 + hash: "5e3c58e2f3a57f4ea48f4315d37ed813" + } + Frame { + msec: 320 + hash: "e8d98ec2d13ef4324feba11be95d0735" + } + Frame { + msec: 336 + hash: "4f3b79b341b63499a20f1e1e2cd979f9" + } + Frame { + msec: 352 + hash: "5ddbc3bc10292bec41531e83c0921c59" + } + Frame { + msec: 368 + hash: "9bc9801e83267689cd2750226f2b08ce" + } + Frame { + msec: 384 + hash: "f87195f2393914a0bbed9a454de01ff5" + } + Frame { + msec: 400 + hash: "4e0fd7f45e53a8d44c416eb9235ec877" + } + Frame { + msec: 416 + hash: "a579d6324fb4bf9ac5ceaba2aa708764" + } + Frame { + msec: 432 + hash: "b9f3f08168fb55ba01e56e670db565de" + } + Frame { + msec: 448 + hash: "cbd63ec868578e295a83170f42b23678" + } + Frame { + msec: 464 + hash: "2ed9d0e09b61dee8b2703e580007d7a5" + } + Frame { + msec: 480 + hash: "92fa2d9ef05140eb9d0fcf78b55f202e" + } + Frame { + msec: 496 + hash: "9a3f9dc04a900020f0e488309d7b4757" + } + Frame { + msec: 512 + hash: "93b4876c3e185ff4875a7447b0bf4f0f" + } + Frame { + msec: 528 + hash: "41b40e36f77d04e62f72ad34aa50709a" + } + Frame { + msec: 544 + hash: "2ea69aeb32fee61b61aa9c4efb2834bf" + } + Frame { + msec: 560 + hash: "0971ac1e05ea2ba387c78d4d103f5ea1" + } + Frame { + msec: 576 + hash: "98e46dff678f293fd6a4e9313ab3aec7" + } + Frame { + msec: 592 + hash: "82b94393071d6c32dd8028e1ee69e7fb" + } + Frame { + msec: 608 + hash: "240df67aa72a24546eb6e043e0d3d205" + } + Frame { + msec: 624 + hash: "56c4113cc341c254ccab66f3bc313154" + } + Frame { + msec: 640 + hash: "20d758c1537ed1a9aff657414b50926c" + } + Frame { + msec: 656 + hash: "ae252d835a05e01c2a12ae820335049a" + } + Frame { + msec: 672 + hash: "4d53256fbb012e738ba3868e2482250d" + } + Frame { + msec: 688 + hash: "261a341cab38986fb2f53b8e430f04a3" + } + Frame { + msec: 704 + hash: "1030f795d310f742ba491a2a90ff52d8" + } + Frame { + msec: 720 + hash: "59d24ebfedd2a87bdbd755d06c4361d2" + } + Frame { + msec: 736 + hash: "a6eaa480b3f93d33ae23bb36b7691b92" + } + Frame { + msec: 752 + hash: "cb6cf1e6e89da3fcbad323f744aef18d" + } + Frame { + msec: 768 + hash: "33a4f07cf7f5d16f006541c61ae2e4ee" + } + Frame { + msec: 784 + hash: "6e857b106486ea0aaa5321d4a7a07eae" + } + Frame { + msec: 800 + hash: "0f80edaf3eecf7a8c015d3fcecc0a494" + } + Frame { + msec: 816 + hash: "24b45d00d70904694c30ebd422c739ce" + } + Frame { + msec: 832 + hash: "c0ca66fefb19294852b9be0c4ba36481" + } + Frame { + msec: 848 + hash: "047846d243e7613193a8ddd526c4268e" + } + Frame { + msec: 864 + hash: "ca85f90e450ccda6b76e6a29a3187a63" + } + Frame { + msec: 880 + hash: "fcd803f5640d054190c2ddc9a6406bb9" + } + Frame { + msec: 896 + hash: "f81152b8a464bfa8343f52efcb0c8b8c" + } + Frame { + msec: 912 + hash: "e86be73d83699584dca986dfdb030b36" + } + Frame { + msec: 928 + hash: "d9798e4ebaf72c35b19a56b336d2ea93" + } + Frame { + msec: 944 + hash: "460f13d8e05b529c0e4fba39b1449ff1" + } + Frame { + msec: 960 + image: "resolution.0.png" + } + Frame { + msec: 976 + hash: "8b2f13580c6de9ec231809330d2d0362" + } + Frame { + msec: 992 + hash: "94a2cc520340573557e6a310f2ea125e" + } + Frame { + msec: 1008 + hash: "a8df78ab2e800349ec887ea6b1f5dcb8" + } + Frame { + msec: 1024 + hash: "0f3a56dbe26d453847ed4847c0e81d1a" + } + Frame { + msec: 1040 + hash: "96c89325862a982235b4b75922ec4669" + } + Frame { + msec: 1056 + hash: "ead6352a4ca47da59422e8d6a5844aa4" + } + Frame { + msec: 1072 + hash: "b50a6b14f15882e2c1ae6e3babeecdf8" + } + Frame { + msec: 1088 + hash: "2f32245c3388b86194e8183a290e99b8" + } + Frame { + msec: 1104 + hash: "2b54d49d30ccbf11ccb5ba8d62ba7d83" + } + Frame { + msec: 1120 + hash: "495b25d87cb6d1d4bdea4d5ec62c698e" + } + Frame { + msec: 1136 + hash: "3d45b061939783b6359fa4cdb908ecc0" + } + Frame { + msec: 1152 + hash: "e9e601c2a65a09b6354fff2c162106d6" + } + Frame { + msec: 1168 + hash: "8cfba8a724e85403b573caf7bbac9d83" + } + Frame { + msec: 1184 + hash: "5910765354645b724e14681cbdea227e" + } + Frame { + msec: 1200 + hash: "4358af7f2ccfc0919614351bfd5a7405" + } + Frame { + msec: 1216 + hash: "032e064336b458a6de03fdc98684cc34" + } + Frame { + msec: 1232 + hash: "c81d87bf83ee7e834a4b15dd103f7082" + } + Frame { + msec: 1248 + hash: "9d4416b55ed3b9e45a2314e9be5a5f2d" + } + Frame { + msec: 1264 + hash: "5b96da1a52a0413f9e8edbc9291a2502" + } + Frame { + msec: 1280 + hash: "aaa4008281ebc60b15616c818816e195" + } + Frame { + msec: 1296 + hash: "81ebf882aeb89648300dfc2e8e2cf11b" + } + Frame { + msec: 1312 + hash: "4e686e6cee12902f92e0ece915386fb3" + } + Frame { + msec: 1328 + hash: "6ff8d9bd6ec4dce414cdc7330646156e" + } + Frame { + msec: 1344 + hash: "dac6334e8b221527ef74b4f93eeef7c3" + } + Frame { + msec: 1360 + hash: "e58dbf419d1831e001e802600803aaa5" + } + Frame { + msec: 1376 + hash: "e8685f9b12c9ccb9d0e471946f1f6f9c" + } + Frame { + msec: 1392 + hash: "0936715ff8d38c2c813ebef0683a3246" + } + Frame { + msec: 1408 + hash: "37ad0a5532af8b083a7d4c4b044075ca" + } + Frame { + msec: 1424 + hash: "52ae25414d353d994cba36918644949a" + } + Frame { + msec: 1440 + hash: "07719485f9a7d0012eb0f3f211f0f21b" + } + Frame { + msec: 1456 + hash: "2d1a4f2c8d4a8d6316a31a81a2d20c61" + } + Frame { + msec: 1472 + hash: "3b279fb9e7b3efe05becc1651ba59493" + } + Frame { + msec: 1488 + hash: "4b9c126dcdf499f9de4e09d4f6ab86bf" + } + Frame { + msec: 1504 + hash: "6a1b8d8ea46949cb65e8f4155ab94819" + } + Frame { + msec: 1520 + hash: "6dbd2106b91ffbbb8a845e6cddbd47d7" + } + Frame { + msec: 1536 + hash: "8244eda92302f2b5cff01f05d438bf20" + } + Frame { + msec: 1552 + hash: "f939bd80ae865e365e554a532ade38f5" + } + Frame { + msec: 1568 + hash: "92d135616eee6737333b3d86d0aa5956" + } + Frame { + msec: 1584 + hash: "ca75854d6e5a77c8e609d65971b5671a" + } + Frame { + msec: 1600 + hash: "b0a113800cd05768b57bac6b9a338b1d" + } + Frame { + msec: 1616 + hash: "7af1a2aa6a201e36c3a969be4330af04" + } + Frame { + msec: 1632 + hash: "e54e8a2cfb0e6678b2a7cc64b8ae08bc" + } + Frame { + msec: 1648 + hash: "5d212c7efd9cf7d3eb5219b0bbe766d7" + } + Frame { + msec: 1664 + hash: "f4f2c95380c0f76c9e89820cdbeb5b31" + } + Frame { + msec: 1680 + hash: "b8eefbf5ade1a6b9eef9608f66a46474" + } + Frame { + msec: 1696 + hash: "d699ace9babbb152aad2fa852114c099" + } + Frame { + msec: 1712 + hash: "ceb3dea0d2b93cc5882a2b38ab3d1b95" + } + Frame { + msec: 1728 + hash: "08175810bfb80e1c5816b0d0aebbac4a" + } + Frame { + msec: 1744 + hash: "86abce93f50e7e7ebbd90690cfb20dd2" + } + Frame { + msec: 1760 + hash: "2918979f2682bd32beb5eaf7ecb3e463" + } + Frame { + msec: 1776 + hash: "b165ab96b0d51d41578bf99cbf7f6d02" + } + Frame { + msec: 1792 + hash: "d56cfdb2c65372cb36aeb13fd9c73deb" + } + Frame { + msec: 1808 + hash: "c53f0e4dc8204e5892ed4f367a6bade3" + } + Frame { + msec: 1824 + hash: "b3ae62e13149160f3695ed5c116411aa" + } + Frame { + msec: 1840 + hash: "057e4a0428ea2ff9893becd40e6d2977" + } + Frame { + msec: 1856 + hash: "10c050131093cc0d3f4b80c44eb1218b" + } + Frame { + msec: 1872 + hash: "17ce5a6dace37f4eb316f37ea26a8a2c" + } + Frame { + msec: 1888 + hash: "6e00c7e74bfaed5cf06aba54c8b73e57" + } + Frame { + msec: 1904 + hash: "5a03b1b698ca28d2afd9c67aef3bc2e9" + } + Frame { + msec: 1920 + image: "resolution.1.png" + } + Frame { + msec: 1936 + hash: "0fab102a33521e8893afdb6a11a3c5c9" + } + Frame { + msec: 1952 + hash: "232e8f1b060ef55e37a372bec4435d11" + } + Frame { + msec: 1968 + hash: "2107724eac0d1b8735060876f80d303a" + } + Frame { + msec: 1984 + hash: "cf5d12d2707975ad364750d5ba787944" + } + Frame { + msec: 2000 + hash: "2457c88828c2cb39feb1d34556077139" + } + Frame { + msec: 2016 + hash: "5f08d6dab8199b3f0f57d32cf2da4d67" + } + Frame { + msec: 2032 + hash: "2457c88828c2cb39feb1d34556077139" + } + Frame { + msec: 2048 + hash: "cf5d12d2707975ad364750d5ba787944" + } + Frame { + msec: 2064 + hash: "2107724eac0d1b8735060876f80d303a" + } + Frame { + msec: 2080 + hash: "232e8f1b060ef55e37a372bec4435d11" + } + Frame { + msec: 2096 + hash: "0a93c515cd328978ebd8103539a2fd63" + } + Frame { + msec: 2112 + hash: "63d6c7beac12e3bd83f9ef58c233c7d2" + } + Frame { + msec: 2128 + hash: "5a03b1b698ca28d2afd9c67aef3bc2e9" + } + Frame { + msec: 2144 + hash: "6e00c7e74bfaed5cf06aba54c8b73e57" + } + Frame { + msec: 2160 + hash: "17ce5a6dace37f4eb316f37ea26a8a2c" + } + Frame { + msec: 2176 + hash: "10c050131093cc0d3f4b80c44eb1218b" + } + Frame { + msec: 2192 + hash: "057e4a0428ea2ff9893becd40e6d2977" + } + Frame { + msec: 2208 + hash: "b3ae62e13149160f3695ed5c116411aa" + } + Frame { + msec: 2224 + hash: "c53f0e4dc8204e5892ed4f367a6bade3" + } + Frame { + msec: 2240 + hash: "d56cfdb2c65372cb36aeb13fd9c73deb" + } + Frame { + msec: 2256 + hash: "b165ab96b0d51d41578bf99cbf7f6d02" + } + Frame { + msec: 2272 + hash: "2918979f2682bd32beb5eaf7ecb3e463" + } + Frame { + msec: 2288 + hash: "86abce93f50e7e7ebbd90690cfb20dd2" + } + Frame { + msec: 2304 + hash: "08175810bfb80e1c5816b0d0aebbac4a" + } + Frame { + msec: 2320 + hash: "ceb3dea0d2b93cc5882a2b38ab3d1b95" + } + Frame { + msec: 2336 + hash: "d699ace9babbb152aad2fa852114c099" + } + Frame { + msec: 2352 + hash: "b8eefbf5ade1a6b9eef9608f66a46474" + } + Frame { + msec: 2368 + hash: "f4f2c95380c0f76c9e89820cdbeb5b31" + } + Frame { + msec: 2384 + hash: "5d212c7efd9cf7d3eb5219b0bbe766d7" + } + Frame { + msec: 2400 + hash: "e54e8a2cfb0e6678b2a7cc64b8ae08bc" + } + Frame { + msec: 2416 + hash: "d9408487f747ffb8eff5e1da92207285" + } + Frame { + msec: 2432 + hash: "e6b3fa1829535ac90d1548f45aadb9be" + } + Frame { + msec: 2448 + hash: "ca75854d6e5a77c8e609d65971b5671a" + } + Frame { + msec: 2464 + hash: "92d135616eee6737333b3d86d0aa5956" + } + Frame { + msec: 2480 + hash: "f939bd80ae865e365e554a532ade38f5" + } + Frame { + msec: 2496 + hash: "8244eda92302f2b5cff01f05d438bf20" + } + Frame { + msec: 2512 + hash: "6dbd2106b91ffbbb8a845e6cddbd47d7" + } + Frame { + msec: 2528 + hash: "6a1b8d8ea46949cb65e8f4155ab94819" + } + Frame { + msec: 2544 + hash: "4b9c126dcdf499f9de4e09d4f6ab86bf" + } + Frame { + msec: 2560 + hash: "3b279fb9e7b3efe05becc1651ba59493" + } + Frame { + msec: 2576 + hash: "bb40b884b56defb61ad86757fd51b9e6" + } + Frame { + msec: 2592 + hash: "07719485f9a7d0012eb0f3f211f0f21b" + } + Frame { + msec: 2608 + hash: "52ae25414d353d994cba36918644949a" + } + Frame { + msec: 2624 + hash: "37ad0a5532af8b083a7d4c4b044075ca" + } + Frame { + msec: 2640 + hash: "0936715ff8d38c2c813ebef0683a3246" + } + Frame { + msec: 2656 + hash: "e8685f9b12c9ccb9d0e471946f1f6f9c" + } + Frame { + msec: 2672 + hash: "e58dbf419d1831e001e802600803aaa5" + } + Frame { + msec: 2688 + hash: "dac6334e8b221527ef74b4f93eeef7c3" + } + Frame { + msec: 2704 + hash: "6ff8d9bd6ec4dce414cdc7330646156e" + } + Frame { + msec: 2720 + hash: "4e686e6cee12902f92e0ece915386fb3" + } + Frame { + msec: 2736 + hash: "81ebf882aeb89648300dfc2e8e2cf11b" + } + Frame { + msec: 2752 + hash: "aaa4008281ebc60b15616c818816e195" + } + Frame { + msec: 2768 + hash: "5b96da1a52a0413f9e8edbc9291a2502" + } + Frame { + msec: 2784 + hash: "9d4416b55ed3b9e45a2314e9be5a5f2d" + } + Frame { + msec: 2800 + hash: "c81d87bf83ee7e834a4b15dd103f7082" + } + Frame { + msec: 2816 + hash: "9fdf30d57c49a6644377ba40140b1969" + } + Frame { + msec: 2832 + hash: "4358af7f2ccfc0919614351bfd5a7405" + } + Frame { + msec: 2848 + hash: "5910765354645b724e14681cbdea227e" + } + Frame { + msec: 2864 + hash: "8cfba8a724e85403b573caf7bbac9d83" + } + Frame { + msec: 2880 + image: "resolution.2.png" + } + Frame { + msec: 2896 + hash: "3d45b061939783b6359fa4cdb908ecc0" + } + Frame { + msec: 2912 + hash: "495b25d87cb6d1d4bdea4d5ec62c698e" + } + Frame { + msec: 2928 + hash: "2b54d49d30ccbf11ccb5ba8d62ba7d83" + } + Frame { + msec: 2944 + hash: "2f32245c3388b86194e8183a290e99b8" + } + Frame { + msec: 2960 + hash: "b50a6b14f15882e2c1ae6e3babeecdf8" + } + Frame { + msec: 2976 + hash: "ead6352a4ca47da59422e8d6a5844aa4" + } + Frame { + msec: 2992 + hash: "96c89325862a982235b4b75922ec4669" + } + Frame { + msec: 3008 + hash: "0f3a56dbe26d453847ed4847c0e81d1a" + } + Frame { + msec: 3024 + hash: "a8df78ab2e800349ec887ea6b1f5dcb8" + } + Frame { + msec: 3040 + hash: "94a2cc520340573557e6a310f2ea125e" + } + Frame { + msec: 3056 + hash: "8b2f13580c6de9ec231809330d2d0362" + } + Frame { + msec: 3072 + hash: "5f76ef4f6b8e703fd0822859cd9a1353" + } + Frame { + msec: 3088 + hash: "460f13d8e05b529c0e4fba39b1449ff1" + } + Frame { + msec: 3104 + hash: "d9798e4ebaf72c35b19a56b336d2ea93" + } + Frame { + msec: 3120 + hash: "e86be73d83699584dca986dfdb030b36" + } + Frame { + msec: 3136 + hash: "f81152b8a464bfa8343f52efcb0c8b8c" + } + Frame { + msec: 3152 + hash: "fcd803f5640d054190c2ddc9a6406bb9" + } + Frame { + msec: 3168 + hash: "ca85f90e450ccda6b76e6a29a3187a63" + } + Frame { + msec: 3184 + hash: "047846d243e7613193a8ddd526c4268e" + } + Frame { + msec: 3200 + hash: "c0ca66fefb19294852b9be0c4ba36481" + } + Frame { + msec: 3216 + hash: "d4a075656790c4f2c50addcd2cc660b5" + } + Frame { + msec: 3232 + hash: "0f80edaf3eecf7a8c015d3fcecc0a494" + } + Frame { + msec: 3248 + hash: "6e857b106486ea0aaa5321d4a7a07eae" + } + Frame { + msec: 3264 + hash: "33a4f07cf7f5d16f006541c61ae2e4ee" + } + Frame { + msec: 3280 + hash: "cb6cf1e6e89da3fcbad323f744aef18d" + } + Frame { + msec: 3296 + hash: "a6eaa480b3f93d33ae23bb36b7691b92" + } + Frame { + msec: 3312 + hash: "59d24ebfedd2a87bdbd755d06c4361d2" + } + Frame { + msec: 3328 + hash: "1030f795d310f742ba491a2a90ff52d8" + } + Frame { + msec: 3344 + hash: "261a341cab38986fb2f53b8e430f04a3" + } + Frame { + msec: 3360 + hash: "4d53256fbb012e738ba3868e2482250d" + } + Frame { + msec: 3376 + hash: "ae252d835a05e01c2a12ae820335049a" + } + Frame { + msec: 3392 + hash: "20d758c1537ed1a9aff657414b50926c" + } + Frame { + msec: 3408 + hash: "56c4113cc341c254ccab66f3bc313154" + } + Frame { + msec: 3424 + hash: "240df67aa72a24546eb6e043e0d3d205" + } + Frame { + msec: 3440 + hash: "82b94393071d6c32dd8028e1ee69e7fb" + } + Frame { + msec: 3456 + hash: "98e46dff678f293fd6a4e9313ab3aec7" + } + Frame { + msec: 3472 + hash: "0971ac1e05ea2ba387c78d4d103f5ea1" + } + Frame { + msec: 3488 + hash: "2ea69aeb32fee61b61aa9c4efb2834bf" + } + Frame { + msec: 3504 + hash: "41b40e36f77d04e62f72ad34aa50709a" + } + Frame { + msec: 3520 + hash: "93b4876c3e185ff4875a7447b0bf4f0f" + } + Frame { + msec: 3536 + hash: "9a3f9dc04a900020f0e488309d7b4757" + } + Frame { + msec: 3552 + hash: "92fa2d9ef05140eb9d0fcf78b55f202e" + } + Frame { + msec: 3568 + hash: "2ed9d0e09b61dee8b2703e580007d7a5" + } + Frame { + msec: 3584 + hash: "cbd63ec868578e295a83170f42b23678" + } + Frame { + msec: 3600 + hash: "b9f3f08168fb55ba01e56e670db565de" + } + Frame { + msec: 3616 + hash: "a579d6324fb4bf9ac5ceaba2aa708764" + } + Frame { + msec: 3632 + hash: "4e0fd7f45e53a8d44c416eb9235ec877" + } + Frame { + msec: 3648 + hash: "f87195f2393914a0bbed9a454de01ff5" + } + Frame { + msec: 3664 + hash: "9bc9801e83267689cd2750226f2b08ce" + } + Frame { + msec: 3680 + hash: "5ddbc3bc10292bec41531e83c0921c59" + } + Frame { + msec: 3696 + hash: "4f3b79b341b63499a20f1e1e2cd979f9" + } + Frame { + msec: 3712 + hash: "e8d98ec2d13ef4324feba11be95d0735" + } + Frame { + msec: 3728 + hash: "5e3c58e2f3a57f4ea48f4315d37ed813" + } + Frame { + msec: 3744 + hash: "3f200fca4815d555f22912d9fcdc20ee" + } + Frame { + msec: 3760 + hash: "0901c99f959d6c10a0b6ea46a282d8fd" + } + Frame { + msec: 3776 + hash: "a186b8e984c999e8609472a7a5fa0610" + } + Frame { + msec: 3792 + hash: "412a630348aa44d56f36f04982035e36" + } + Frame { + msec: 3808 + hash: "011c0bcca7717b08bc53738718203f7e" + } + Frame { + msec: 3824 + hash: "e531d33ef14b58ad843a6be6d7cb0961" + } + Frame { + msec: 3840 + image: "resolution.3.png" + } + Frame { + msec: 3856 + hash: "8df8dd33eada434231332b81e03430ce" + } + Frame { + msec: 3872 + hash: "2aaa3749f93734dd203e1fea91a9f24a" + } + Frame { + msec: 3888 + hash: "dc78b09e27bbc0a2cfec83436eef4446" + } + Frame { + msec: 3904 + hash: "9053a92e343ebb79bd2831f5ab94a1b5" + } + Frame { + msec: 3920 + hash: "649ad1a3fb57fb088e4e5cfd749bf2e5" + } + Frame { + msec: 3936 + hash: "3579849956c1101000ef09949aa4c0f9" + } + Frame { + msec: 3952 + hash: "7af041898748bb5950643b057ca59eea" + } + Frame { + msec: 3968 + hash: "30a191ae899121ae22d10acee6593415" + } + Frame { + msec: 3984 + hash: "369f761053d5910e00672aa866f698ba" + } + Frame { + msec: 4000 + hash: "1f189a436cf74ae83a03c3bb63c24ec2" + } + Frame { + msec: 4016 + hash: "ac1d9c1cc13813b5e94c692a209a4e36" + } + Frame { + msec: 4032 + hash: "f0e0b5c041bcf38d8d9144d466ad74a9" + } + Frame { + msec: 4048 + hash: "38a35c94ebcf33f6720fea33821a54e1" + } + Frame { + msec: 4064 + hash: "061d139f43a3dd63daf887b82721f42f" + } + Frame { + msec: 4080 + hash: "623747b5fe99e5ffaa62f4daa3f840ef" + } + Frame { + msec: 4096 + hash: "4dd5081a387ffda296811b64b9235d7d" + } + Frame { + msec: 4112 + hash: "1598cf2fe996f99ab4c15f84d89cd7bd" + } + Frame { + msec: 4128 + hash: "30cac85bf1a622d438a64b6ccb59a8ca" + } + Frame { + msec: 4144 + hash: "114e54ae3e1493750a022f1c019e7f77" + } + Frame { + msec: 4160 + hash: "a585efc3aae3a426e6af5f4a8cc23b10" + } + Frame { + msec: 4176 + hash: "c0f315549baad93dd885d58b185e7ed7" + } + Frame { + msec: 4192 + hash: "3a00f5f034bef58ca341bf9e1056f46f" + } + Frame { + msec: 4208 + hash: "b3022d07dee989499a35aea21e07e4c1" + } + Frame { + msec: 4224 + hash: "e722464809e94fb7d8c752506f0d3ac2" + } + Frame { + msec: 4240 + hash: "82ea3d06367ce9dc582dbdbc186cc70a" + } + Frame { + msec: 4256 + hash: "359040facbe531c7f6b805b8bfc5b17a" + } + Frame { + msec: 4272 + hash: "264c7b65bae7e3945d87c17edfda6889" + } + Frame { + msec: 4288 + hash: "d941ec8e363942af02f36d4672521801" + } + Frame { + msec: 4304 + hash: "e46e145b4d07d1697c1d9efce80c80de" + } + Frame { + msec: 4320 + hash: "d8bed5c42bc5725d811db4dacdab1581" + } + Frame { + msec: 4336 + hash: "aa221160b4a11b30cb73eaa8ccaa9dfd" + } + Frame { + msec: 4352 + hash: "f411483477906d83f872b306cd021406" + } + Frame { + msec: 4368 + hash: "d9c52e4f99416fa1043a9c34a1c29f5a" + } + Frame { + msec: 4384 + hash: "ec2890446f34b8a5d47ae97ba2853d0f" + } + Frame { + msec: 4400 + hash: "6a3e6ef7d832fa7ec813b38171cb3602" + } + Frame { + msec: 4416 + hash: "6dfd75b6cb780f7d80466f3450d0b255" + } + Frame { + msec: 4432 + hash: "170774843dc6f28f51f07c445e046bd8" + } + Frame { + msec: 4448 + hash: "eab348bef656739d9723d3bd659c43ff" + } + Frame { + msec: 4464 + hash: "f06e546bb710002cdf1cefd51ffa47c4" + } + Frame { + msec: 4480 + hash: "52f7ff1348d9aa7cdf43cd81f0a71625" + } + Frame { + msec: 4496 + hash: "55a5b1befa3b7a4674a62d492b5527ea" + } + Frame { + msec: 4512 + hash: "699c093fddc6b9293a011d8d6eccd36d" + } + Frame { + msec: 4528 + hash: "b988e1ad7dc7d26ffeea8f71a69a9abf" + } + Frame { + msec: 4544 + hash: "8dea2b47492f83f961a47536a10aad0c" + } + Frame { + msec: 4560 + hash: "925ea8105779ffd801a3c62129d64bed" + } + Frame { + msec: 4576 + hash: "aa5d957c4f452b1f1c70ea672ce4a0b9" + } + Frame { + msec: 4592 + hash: "85d3ea97a1fb152ae8ad65a17693a16d" + } + Frame { + msec: 4608 + hash: "069b2bc8b86f822c5e7ceca3664e78a6" + } + Frame { + msec: 4624 + hash: "209071b7f72d8c25b9ce27c05397fe56" + } + Frame { + msec: 4640 + hash: "068dea708612620d34bd57c6affb44b1" + } + Frame { + msec: 4656 + hash: "36b53a0845220645059fed803a6ffcbc" + } + Frame { + msec: 4672 + hash: "2c84e15006a39a554eb2047bae9d4f6f" + } + Frame { + msec: 4688 + hash: "1bdab31534f4b5a7e9d27ede3e9acb57" + } + Frame { + msec: 4704 + hash: "688689eeb584b0c74f0322af35857dd5" + } + Frame { + msec: 4720 + hash: "024939fea5b6c6f9d3e26a0abf42ae3c" + } + Frame { + msec: 4736 + hash: "2efb2f47c6f0be3743f0f4dc7a66b08e" + } + Frame { + msec: 4752 + hash: "4631f3756af880693d3654c16cbe47bb" + } + Frame { + msec: 4768 + hash: "2fd77649c1e1ade97534ef530ad05612" + } + Frame { + msec: 4784 + hash: "5d13517bac111c8af49c444d41a42ea1" + } + Frame { + msec: 4800 + image: "resolution.4.png" + } + Frame { + msec: 4816 + hash: "8bd8efe405a42730304dcc120a6e718c" + } + Frame { + msec: 4832 + hash: "a83c543977e3f1dd4c020375eb3273fd" + } + Frame { + msec: 4848 + hash: "c52f38469fec77afc7f0a44b992e3d0d" + } + Frame { + msec: 4864 + hash: "af645449d6ec3f42449ffc59193aaaa4" + } + Frame { + msec: 4880 + hash: "2eb982cf754c77c109158076957775ae" + } + Frame { + msec: 4896 + hash: "9bf2fd4a4e45f302b34b7f038937d3d7" + } + Frame { + msec: 4912 + hash: "5520e309d68c8eedf76a9392714a6150" + } + Frame { + msec: 4928 + hash: "9dcd043a25e33b788729c0a0531301e7" + } + Frame { + msec: 4944 + hash: "1475b9bcfe08c66135673f4284c9bbcd" + } + Frame { + msec: 4960 + hash: "9af1f355bcf4d5f05b42040ebba75e09" + } + Frame { + msec: 4976 + hash: "8b6e04980ea60ca2ff06053d35c06881" + } + Frame { + msec: 4992 + hash: "def466e377a44afc4b2a9a9ebb258f86" + } + Frame { + msec: 5008 + hash: "18f6d6f5a3fdaee0037580df0f4f9ef0" + } + Frame { + msec: 5024 + hash: "ae2579498558f6f93489999c7c82cbcd" + } + Frame { + msec: 5040 + hash: "623d8e756c2c131150554272df231bf9" + } + Frame { + msec: 5056 + hash: "c13146576229848b8a1e1b382fbf749d" + } + Frame { + msec: 5072 + hash: "f963a399aeea1d34ec3bd30a5b991035" + } + Frame { + msec: 5088 + hash: "45a4db021ba0a53ad783c14a3b66aa38" + } + Frame { + msec: 5104 + hash: "2031618470e3bb3a3435fe0e270a15d4" + } + Frame { + msec: 5120 + hash: "f7cc01c301f29110db8364fecc8751f1" + } + Frame { + msec: 5136 + hash: "2d366fa500257ec0a12863f3637d0c47" + } + Frame { + msec: 5152 + hash: "4ba700e7f9ffba4889ca26d903a63029" + } + Frame { + msec: 5168 + hash: "329bec5e3d6a131b4bd9a056659bdb3e" + } + Frame { + msec: 5184 + hash: "48f7356707cdbcb401c135207ee38821" + } + Frame { + msec: 5200 + hash: "5314e448affe60d193d07a784035ecce" + } + Frame { + msec: 5216 + hash: "c87e98becdf99c214ad4987985b4af07" + } + Frame { + msec: 5232 + hash: "ea81d2a967b619980d7e42937ec74668" + } + Frame { + msec: 5248 + hash: "845319d4e0f6ee97697e59c606220e7a" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml new file mode 100644 index 0000000..4aab708 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/zooming/data/zoomTextOnly.qml @@ -0,0 +1,655 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "4e401b5ebff6e442fa108e94a5dba668" + } + Frame { + msec: 32 + hash: "c2f8551d0442d0736b71c54fc965562b" + } + Frame { + msec: 48 + hash: "4fc1ef611b24ec5737310859b12c83d3" + } + Frame { + msec: 64 + hash: "7df07aea83bc5c3213e7871854661820" + } + Frame { + msec: 80 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 96 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 112 + hash: "f5c917c7ca26bb916dd4df84eafc8e94" + } + Frame { + msec: 128 + hash: "0696257de0441666bd264f8db6383d15" + } + Frame { + msec: 144 + hash: "0b43fdee23346c30c60b822a20131cc3" + } + Frame { + msec: 160 + hash: "98dbd004cf4809dbc90bfa9272378644" + } + Frame { + msec: 176 + hash: "32d0e9005ebb9dfd410d348e336bcd93" + } + Frame { + msec: 192 + hash: "8a64b18006ad0bd2c373a2a9395ce52e" + } + Frame { + msec: 208 + hash: "7dc26fd658f626b8fe18545cf93dc4ec" + } + Frame { + msec: 224 + hash: "6712be93cf1ed2b7b202367418b6d2d7" + } + Frame { + msec: 240 + hash: "524840a3453af4e97ac82b559308cce3" + } + Frame { + msec: 256 + hash: "11436091b24c02af94dfa75a5fd1a001" + } + Frame { + msec: 272 + hash: "d3689b53474b4b26630d70ba01c057b4" + } + Frame { + msec: 288 + hash: "16e2b66f28ed80d80d9b5264d89624d5" + } + Frame { + msec: 304 + hash: "87636076959de7e5a0a8bd8b31354ed4" + } + Frame { + msec: 320 + hash: "a6916da6bfac27aa87d75da2bbb73f31" + } + Frame { + msec: 336 + hash: "58cfba3aae4bf54a5b445e0e34571d2d" + } + Frame { + msec: 352 + hash: "1475ae722afd169cc0c8e1fde39eb6b7" + } + Frame { + msec: 368 + hash: "14d08c2ca430631af8ede1013f4f4da0" + } + Frame { + msec: 384 + hash: "ace9db9112d147569dc0cf1a1b680d6c" + } + Frame { + msec: 400 + hash: "08bc6815601417f3731eaae398d0861d" + } + Frame { + msec: 416 + hash: "809870dfd9b05ce07170edd945348ddf" + } + Frame { + msec: 432 + hash: "5784deb0f3270cf7a0d0964cd9d31458" + } + Frame { + msec: 448 + hash: "2f06ee407e5175d4b954e31c39c9522c" + } + Frame { + msec: 464 + hash: "48a7dbed293fbbd5ea202190837a411f" + } + Frame { + msec: 480 + hash: "abf3d90803cfa12d35d2752be7ea02d8" + } + Frame { + msec: 496 + hash: "a60edcf8d792f93a839e6ddbafbf993f" + } + Frame { + msec: 512 + hash: "7e8dfe86ea0849022355b12578d4cb1a" + } + Frame { + msec: 528 + hash: "3c84122b0933ee870f178d39469e51e2" + } + Frame { + msec: 544 + hash: "25f463e91febf5b6d8819fd5010bc1c2" + } + Frame { + msec: 560 + hash: "d423a9bc912237d0f20b924849ba0cb1" + } + Frame { + msec: 576 + hash: "5bd3cc309a5fce6183654975543250b2" + } + Frame { + msec: 592 + hash: "4e401b5ebff6e442fa108e94a5dba668" + } + Frame { + msec: 608 + hash: "9a4bf1400da038f2088dd4c49403d852" + } + Frame { + msec: 624 + hash: "a37024356613bd5d678e0b2f7b8f5959" + } + Frame { + msec: 640 + hash: "4f37d72c10e51f68a2359086094da249" + } + Frame { + msec: 656 + hash: "6093bcb7673f8e58fe5a7b0143638822" + } + Frame { + msec: 672 + hash: "c272aeea2b9c450fbd732305ccc01b93" + } + Frame { + msec: 688 + hash: "6a4e2ee45b26037421e2a5f2d6ee517e" + } + Frame { + msec: 704 + hash: "d912afcbce6c9d879a07ffc3c51b36d1" + } + Frame { + msec: 720 + hash: "2578335ac6f21c8aec2c87515562c321" + } + Frame { + msec: 736 + hash: "5b77af55f0a723ba762d283f41e91c98" + } + Frame { + msec: 752 + hash: "b420fc71b22fa608a9c0cdbbbc61c447" + } + Frame { + msec: 768 + hash: "3f7a9cecf2a590e8728137fabfd3f5f3" + } + Frame { + msec: 784 + hash: "c51f12a2f438f137785c70e3af4922fd" + } + Frame { + msec: 800 + hash: "5d97175fc4d986e5b21758d4ac785025" + } + Frame { + msec: 816 + hash: "94f922f3460ad76cd05cb5b321977a94" + } + Frame { + msec: 832 + hash: "5747adbc4f0b22ed359793d72d3e7d1f" + } + Frame { + msec: 848 + hash: "255d1d45d3343972f156dfab7d13ce41" + } + Frame { + msec: 864 + hash: "e5b54132ffb83acad30622e969405bc0" + } + Frame { + msec: 880 + hash: "2c05cf00e3417883e789f58c2728dc97" + } + Frame { + msec: 896 + hash: "9d66290b1aae1de3025d24d3efc4ca1c" + } + Frame { + msec: 912 + hash: "5e9b0783b1b4221145a4febbae56b30f" + } + Frame { + msec: 928 + hash: "21eea497c26600b03d868661232b3ebe" + } + Frame { + msec: 944 + hash: "2383c415170ac6444f1c193ed698f682" + } + Frame { + msec: 960 + image: "zoomTextOnly.0.png" + } + Frame { + msec: 976 + hash: "4ed0f85dec4eb0bb740ac3780b6872c0" + } + Frame { + msec: 992 + hash: "0a18bccca4efeadfced8e5cb1715a1f3" + } + Frame { + msec: 1008 + hash: "823e65df9075eb0e9a3aad6b15ec3342" + } + Frame { + msec: 1024 + hash: "823e65df9075eb0e9a3aad6b15ec3342" + } + Frame { + msec: 1040 + hash: "0a18bccca4efeadfced8e5cb1715a1f3" + } + Frame { + msec: 1056 + hash: "4ed0f85dec4eb0bb740ac3780b6872c0" + } + Frame { + msec: 1072 + hash: "fae77663566351fa3bb506b459496a9d" + } + Frame { + msec: 1088 + hash: "2383c415170ac6444f1c193ed698f682" + } + Frame { + msec: 1104 + hash: "2e05365256bebbdf3229f99b94263b6c" + } + Frame { + msec: 1120 + hash: "5e9b0783b1b4221145a4febbae56b30f" + } + Frame { + msec: 1136 + hash: "9d66290b1aae1de3025d24d3efc4ca1c" + } + Frame { + msec: 1152 + hash: "2c05cf00e3417883e789f58c2728dc97" + } + Frame { + msec: 1168 + hash: "e5b54132ffb83acad30622e969405bc0" + } + Frame { + msec: 1184 + hash: "255d1d45d3343972f156dfab7d13ce41" + } + Frame { + msec: 1200 + hash: "5747adbc4f0b22ed359793d72d3e7d1f" + } + Frame { + msec: 1216 + hash: "94f922f3460ad76cd05cb5b321977a94" + } + Frame { + msec: 1232 + hash: "5d97175fc4d986e5b21758d4ac785025" + } + Frame { + msec: 1248 + hash: "c51f12a2f438f137785c70e3af4922fd" + } + Frame { + msec: 1264 + hash: "3f7a9cecf2a590e8728137fabfd3f5f3" + } + Frame { + msec: 1280 + hash: "b420fc71b22fa608a9c0cdbbbc61c447" + } + Frame { + msec: 1296 + hash: "5b77af55f0a723ba762d283f41e91c98" + } + Frame { + msec: 1312 + hash: "2578335ac6f21c8aec2c87515562c321" + } + Frame { + msec: 1328 + hash: "a9b5438bd48dbafd307d571877416003" + } + Frame { + msec: 1344 + hash: "6a4e2ee45b26037421e2a5f2d6ee517e" + } + Frame { + msec: 1360 + hash: "c272aeea2b9c450fbd732305ccc01b93" + } + Frame { + msec: 1376 + hash: "37c7e50c270e8feb4dd9018580284a85" + } + Frame { + msec: 1392 + hash: "4f37d72c10e51f68a2359086094da249" + } + Frame { + msec: 1408 + hash: "a37024356613bd5d678e0b2f7b8f5959" + } + Frame { + msec: 1424 + hash: "9a4bf1400da038f2088dd4c49403d852" + } + Frame { + msec: 1440 + hash: "4e401b5ebff6e442fa108e94a5dba668" + } + Frame { + msec: 1456 + hash: "5bd3cc309a5fce6183654975543250b2" + } + Frame { + msec: 1472 + hash: "d423a9bc912237d0f20b924849ba0cb1" + } + Frame { + msec: 1488 + hash: "25f463e91febf5b6d8819fd5010bc1c2" + } + Frame { + msec: 1504 + hash: "3c84122b0933ee870f178d39469e51e2" + } + Frame { + msec: 1520 + hash: "7e8dfe86ea0849022355b12578d4cb1a" + } + Frame { + msec: 1536 + hash: "a60edcf8d792f93a839e6ddbafbf993f" + } + Frame { + msec: 1552 + hash: "abf3d90803cfa12d35d2752be7ea02d8" + } + Frame { + msec: 1568 + hash: "48a7dbed293fbbd5ea202190837a411f" + } + Frame { + msec: 1584 + hash: "2f06ee407e5175d4b954e31c39c9522c" + } + Frame { + msec: 1600 + hash: "5784deb0f3270cf7a0d0964cd9d31458" + } + Frame { + msec: 1616 + hash: "809870dfd9b05ce07170edd945348ddf" + } + Frame { + msec: 1632 + hash: "08bc6815601417f3731eaae398d0861d" + } + Frame { + msec: 1648 + hash: "ace9db9112d147569dc0cf1a1b680d6c" + } + Frame { + msec: 1664 + hash: "14d08c2ca430631af8ede1013f4f4da0" + } + Frame { + msec: 1680 + hash: "1475ae722afd169cc0c8e1fde39eb6b7" + } + Frame { + msec: 1696 + hash: "58cfba3aae4bf54a5b445e0e34571d2d" + } + Frame { + msec: 1712 + hash: "a6916da6bfac27aa87d75da2bbb73f31" + } + Frame { + msec: 1728 + hash: "87636076959de7e5a0a8bd8b31354ed4" + } + Frame { + msec: 1744 + hash: "16e2b66f28ed80d80d9b5264d89624d5" + } + Frame { + msec: 1760 + hash: "d3689b53474b4b26630d70ba01c057b4" + } + Frame { + msec: 1776 + hash: "11436091b24c02af94dfa75a5fd1a001" + } + Frame { + msec: 1792 + hash: "524840a3453af4e97ac82b559308cce3" + } + Frame { + msec: 1808 + hash: "6712be93cf1ed2b7b202367418b6d2d7" + } + Frame { + msec: 1824 + hash: "7dc26fd658f626b8fe18545cf93dc4ec" + } + Frame { + msec: 1840 + hash: "8a64b18006ad0bd2c373a2a9395ce52e" + } + Frame { + msec: 1856 + hash: "32d0e9005ebb9dfd410d348e336bcd93" + } + Frame { + msec: 1872 + hash: "98dbd004cf4809dbc90bfa9272378644" + } + Frame { + msec: 1888 + hash: "0b43fdee23346c30c60b822a20131cc3" + } + Frame { + msec: 1904 + hash: "0696257de0441666bd264f8db6383d15" + } + Frame { + msec: 1920 + image: "zoomTextOnly.1.png" + } + Frame { + msec: 1936 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 1952 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 1968 + hash: "7df07aea83bc5c3213e7871854661820" + } + Frame { + msec: 1984 + hash: "4fc1ef611b24ec5737310859b12c83d3" + } + Frame { + msec: 2000 + hash: "c2f8551d0442d0736b71c54fc965562b" + } + Frame { + msec: 2016 + hash: "4ec29787e437f9619ce0f0a0f4889d0f" + } + Frame { + msec: 2032 + hash: "c2f8551d0442d0736b71c54fc965562b" + } + Frame { + msec: 2048 + hash: "4fc1ef611b24ec5737310859b12c83d3" + } + Frame { + msec: 2064 + hash: "7df07aea83bc5c3213e7871854661820" + } + Frame { + msec: 2080 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 2096 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 2112 + hash: "f5c917c7ca26bb916dd4df84eafc8e94" + } + Frame { + msec: 2128 + hash: "0696257de0441666bd264f8db6383d15" + } + Frame { + msec: 2144 + hash: "0b43fdee23346c30c60b822a20131cc3" + } + Frame { + msec: 2160 + hash: "98dbd004cf4809dbc90bfa9272378644" + } + Frame { + msec: 2176 + hash: "32d0e9005ebb9dfd410d348e336bcd93" + } + Frame { + msec: 2192 + hash: "8a64b18006ad0bd2c373a2a9395ce52e" + } + Frame { + msec: 2208 + hash: "7dc26fd658f626b8fe18545cf93dc4ec" + } + Frame { + msec: 2224 + hash: "6712be93cf1ed2b7b202367418b6d2d7" + } + Frame { + msec: 2240 + hash: "524840a3453af4e97ac82b559308cce3" + } + Frame { + msec: 2256 + hash: "11436091b24c02af94dfa75a5fd1a001" + } + Frame { + msec: 2272 + hash: "d3689b53474b4b26630d70ba01c057b4" + } + Frame { + msec: 2288 + hash: "16e2b66f28ed80d80d9b5264d89624d5" + } + Frame { + msec: 2304 + hash: "87636076959de7e5a0a8bd8b31354ed4" + } + Frame { + msec: 2320 + hash: "a6916da6bfac27aa87d75da2bbb73f31" + } + Frame { + msec: 2336 + hash: "58cfba3aae4bf54a5b445e0e34571d2d" + } + Frame { + msec: 2352 + hash: "1475ae722afd169cc0c8e1fde39eb6b7" + } + Frame { + msec: 2368 + hash: "14d08c2ca430631af8ede1013f4f4da0" + } + Frame { + msec: 2384 + hash: "ace9db9112d147569dc0cf1a1b680d6c" + } + Frame { + msec: 2400 + hash: "08bc6815601417f3731eaae398d0861d" + } + Frame { + msec: 2416 + hash: "809870dfd9b05ce07170edd945348ddf" + } + Frame { + msec: 2432 + hash: "5784deb0f3270cf7a0d0964cd9d31458" + } + Frame { + msec: 2448 + hash: "2f06ee407e5175d4b954e31c39c9522c" + } + Frame { + msec: 2464 + hash: "48a7dbed293fbbd5ea202190837a411f" + } + Frame { + msec: 2480 + hash: "abf3d90803cfa12d35d2752be7ea02d8" + } + Frame { + msec: 2496 + hash: "a60edcf8d792f93a839e6ddbafbf993f" + } + Frame { + msec: 2512 + hash: "7e8dfe86ea0849022355b12578d4cb1a" + } + Frame { + msec: 2528 + hash: "3c84122b0933ee870f178d39469e51e2" + } + Frame { + msec: 2544 + hash: "25f463e91febf5b6d8819fd5010bc1c2" + } + Frame { + msec: 2560 + hash: "d423a9bc912237d0f20b924849ba0cb1" + } + Frame { + msec: 2576 + hash: "5bd3cc309a5fce6183654975543250b2" + } + Frame { + msec: 2592 + hash: "4e401b5ebff6e442fa108e94a5dba668" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml b/tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml new file mode 100644 index 0000000..080d4d0 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/webview/zooming/data/zooming.qml @@ -0,0 +1,2115 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 32 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 48 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 64 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 80 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 96 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 112 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 128 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 144 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 160 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 176 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 192 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 208 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 224 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 240 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 256 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 272 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 288 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 304 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 320 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 336 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 352 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 197; y: 34 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 185; y: 34 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 368 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 169; y: 38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 384 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 161; y: 40 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 400 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 155; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 147; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 416 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 141; y: 48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 138; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 432 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 130; y: 48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 127; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 448 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 125; y: 48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 123; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 464 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 480 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 121; y: 49 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 496 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 512 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 117; y: 53 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 53 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 528 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 54 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 544 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 113; y: 54 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 560 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 111; y: 53 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 111; y: 52 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 576 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 110; y: 50 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 592 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 109; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 608 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 108; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 624 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 108; y: 45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 640 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 106; y: 43 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 656 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 42 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 672 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 41 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 688 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 704 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 720 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 736 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 40 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 752 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 39 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 768 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 37 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 36 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 784 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 35 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 34 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 800 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 816 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 106; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 832 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 848 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 864 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 880 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 896 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 106; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 912 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 928 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 944 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 960 + image: "zooming.0.png" + } + Frame { + msec: 976 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 106; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 992 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1008 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1024 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1040 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1056 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 4 + button: 1 + buttons: 1 + x: 106; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1072 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1088 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1104 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1120 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 106; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1136 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1152 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1168 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1184 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 106; y: 34 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 106; y: 36 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1200 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1216 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1232 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 102; y: 46 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 50 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1248 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 94; y: 56 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1264 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 70 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1280 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 94 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1296 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 104 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 114 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1312 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1328 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 94; y: 146 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 156 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1344 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 164 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 172 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1360 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 180 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 188 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1376 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 190 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 193 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1392 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 195 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 197 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1408 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 198 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 200 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1424 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 94; y: 201 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 94; y: 202 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1440 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 94; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1456 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 93; y: 205 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1472 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1488 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 208 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1504 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1520 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 92; y: 211 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 212 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1536 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1552 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1568 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1584 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1600 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1616 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1632 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1648 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1664 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1680 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1696 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1712 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 214 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 91; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1728 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1744 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1760 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1776 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 91; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1792 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1808 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1824 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1840 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 4 + button: 1 + buttons: 1 + x: 91; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1856 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1872 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1888 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1904 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1920 + image: "zooming.1.png" + } + Frame { + msec: 1936 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 91; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1952 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1968 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 1984 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2000 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2016 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2032 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2048 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2064 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2080 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2096 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2112 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2128 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 212 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2144 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2160 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2176 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2192 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2208 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2224 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2240 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 86; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2256 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 211 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2272 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 211 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2288 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 77; y: 211 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2304 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 213 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2320 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 213 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2336 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 60; y: 213 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 58; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2352 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 56; y: 213 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 212 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2368 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2384 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2400 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2416 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2432 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2448 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2464 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2480 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 56; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2496 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 58; y: 214 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 59; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2512 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 215 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2528 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2544 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2560 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2576 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2592 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 216 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 64; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2608 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2624 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2640 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2656 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2672 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 63; y: 216 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 63; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2688 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2704 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2720 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2736 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2752 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 4 + button: 1 + buttons: 1 + x: 62; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2768 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2784 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2800 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2816 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 62; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2832 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2848 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 2864 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 215 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2880 + image: "zooming.2.png" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2896 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2912 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 212 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 211 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2928 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 209 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 64; y: 208 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2944 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 202 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 198 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2960 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 192 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 186 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2976 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 180 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 170 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2992 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 162 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 88; y: 152 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3008 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 94; y: 142 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 130 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3024 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 102; y: 118 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 108; y: 108 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3040 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 112; y: 98 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 114; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3056 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 80 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 122; y: 72 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3072 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 126; y: 66 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 128; y: 58 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3088 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 132; y: 52 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 134; y: 46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3104 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 136; y: 40 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 140; y: 32 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3120 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 24 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 150; y: 18 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3136 + hash: "c98df558c41f1837398eead42392b780" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 154; y: 10 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 160; y: 4 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3152 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3168 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3184 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3200 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3216 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3232 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3248 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3264 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3280 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3296 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3312 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3328 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3344 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3360 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3376 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3392 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3408 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3424 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3440 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3456 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3472 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3488 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3504 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3520 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3536 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3552 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3568 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3584 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3600 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3616 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3632 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3648 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3664 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3680 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3696 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3712 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3728 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3744 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3760 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3776 + hash: "c98df558c41f1837398eead42392b780" + } + Frame { + msec: 3792 + hash: "c98df558c41f1837398eead42392b780" + } +} diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml b/tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml index 1617bda..5e55d46 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 WebView { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" width: 200 height: 250 url: "resolution.html" diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml b/tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml index e46f726..a8e5b59 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 Rectangle { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" width: 200 height: 250 clip: true diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml b/tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml index e9189db..fe33f3f 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 WebView { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" width: 200 * zoomFactor height: 250 * zoomFactor scale: 1/zoomFactor diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml b/tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml index 52222be..43551e5 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml @@ -2,6 +2,7 @@ import QtQuick 1.0 import org.webkit 1.0 WebView { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" width: 200 height: 250 url: "zoomTextOnly.html" diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml b/tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml index dc973c2..6cfd5eb 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml @@ -5,6 +5,7 @@ import org.webkit 1.0 // control of rendering to avoid excessive re-rendering during // zoom animations. This test is written for simplicity. WebView { + property string skip: "WebView tests not counting until resources allocated to WebView maintenance" width: 200 height: 250 Behavior on x { NumberAnimation { } } -- cgit v0.12 From 3e6349e6b23d1ac5a8991370f0866ebd95556111 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Fri, 29 Oct 2010 15:58:48 +1000 Subject: Update visual tests for Mac Task-number: QTBUG-14792 --- .../qdeclarativetext/font/data-MAC/plaintext.0.png | Bin 0 -> 98050 bytes .../qdeclarativetext/font/data-MAC/plaintext.qml | 11 +++++++++++ .../qdeclarativetext/font/data-MAC/richtext.0.png | Bin 0 -> 125068 bytes .../qdeclarativetext/font/data-MAC/richtext.qml | 11 +++++++++++ 4 files changed, 22 insertions(+) create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png new file mode 100644 index 0000000..6c610ea Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml new file mode 100644 index 0000000..fdf2310 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.qml @@ -0,0 +1,11 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "plaintext.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png new file mode 100644 index 0000000..c4c56f3 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml new file mode 100644 index 0000000..3da391d --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.qml @@ -0,0 +1,11 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + image: "richtext.0.png" + } +} -- cgit v0.12 From 5ad00389fd411992b042c07990dd681018f58c36 Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Fri, 29 Oct 2010 14:10:11 +1000 Subject: Remove unnecessary QML import project dependency to Symbian deployment pri file used by Qt demos Task-number: QT-4197 Reviewed-by: Jason Barron * breaks compilation of releases that omit Qt demos directory * qt import plugins have different deployment configuration than demo applications * declarative import plugins already get their symbian-related settings from src\imports\qimportbase.pri that is basically a copy from qpluginbase.pri written for plugins --- src/imports/folderlistmodel/folderlistmodel.pro | 1 - src/imports/gestures/gestures.pro | 1 - src/imports/particles/particles.pro | 1 - 3 files changed, 3 deletions(-) diff --git a/src/imports/folderlistmodel/folderlistmodel.pro b/src/imports/folderlistmodel/folderlistmodel.pro index b2e5360..8964ab0 100644 --- a/src/imports/folderlistmodel/folderlistmodel.pro +++ b/src/imports/folderlistmodel/folderlistmodel.pro @@ -15,7 +15,6 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH symbian:{ TARGET.UID3 = 0x20021320 - include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) isEmpty(DESTDIR):importFiles.sources = qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir else:importFiles.sources = $$DESTDIR/qmlfolderlistmodelplugin$${QT_LIBINFIX}.dll qmldir diff --git a/src/imports/gestures/gestures.pro b/src/imports/gestures/gestures.pro index 18ffcb9..a4c914d 100644 --- a/src/imports/gestures/gestures.pro +++ b/src/imports/gestures/gestures.pro @@ -15,7 +15,6 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH symbian:{ TARGET.UID3 = 0x2002131F - include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) isEmpty(DESTDIR):importFiles.sources = qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir else:importFiles.sources = $$DESTDIR/qmlgesturesplugin$${QT_LIBINFIX}.dll qmldir diff --git a/src/imports/particles/particles.pro b/src/imports/particles/particles.pro index a3eb0d1..bb9da01 100644 --- a/src/imports/particles/particles.pro +++ b/src/imports/particles/particles.pro @@ -19,7 +19,6 @@ qmldir.path += $$[QT_INSTALL_IMPORTS]/$$TARGETPATH symbian:{ TARGET.UID3 = 0x2002131E - include($$QT_SOURCE_TREE/demos/symbianpkgrules.pri) isEmpty(DESTDIR):importFiles.sources = qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir else:importFiles.sources = $$DESTDIR/qmlparticlesplugin$${QT_LIBINFIX}.dll qmldir -- cgit v0.12 From 2ce656569946f31d0da6b4f5877b69d7afe06d93 Mon Sep 17 00:00:00 2001 From: Alan Alpert Date: Fri, 29 Oct 2010 18:03:21 +1000 Subject: Update webview visual tests to new skip mode New mode requires them to at least compile. Now that I've noticed this, removing that check on compile failures in QDeclarativeTester. Task-number: QTBUG-14792 --- .../auto/declarative/qmlvisual/webview/autosize/autosize.qml | 2 +- .../qmlvisual/webview/javascript/evaluateJavaScript.qml | 2 +- .../qmlvisual/webview/javascript/windowObjects.qml | 2 +- .../declarative/qmlvisual/webview/settings/fontFamily.qml | 2 +- .../auto/declarative/qmlvisual/webview/settings/fontSize.qml | 2 +- .../qmlvisual/webview/settings/noAutoLoadImages.qml | 2 +- .../declarative/qmlvisual/webview/settings/setFontFamily.qml | 2 +- .../auto/declarative/qmlvisual/webview/zooming/pageWidth.qml | 12 ++++++------ .../declarative/qmlvisual/webview/zooming/renderControl.qml | 2 +- .../declarative/qmlvisual/webview/zooming/resolution.qml | 4 +++- .../declarative/qmlvisual/webview/zooming/zoomTextOnly.qml | 4 +++- tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml | 2 +- tools/qml/qdeclarativetester.cpp | 6 ++---- 13 files changed, 23 insertions(+), 21 deletions(-) diff --git a/tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml b/tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml index d3b4e6b..1cd0c7b 100644 --- a/tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml +++ b/tests/auto/declarative/qmlvisual/webview/autosize/autosize.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 // The WebView size is determined by the width, height, // preferredWidth, and preferredHeight properties. diff --git a/tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml b/tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml index 916aa99..9ea2b64 100644 --- a/tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml +++ b/tests/auto/declarative/qmlvisual/webview/javascript/evaluateJavaScript.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 Column { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" diff --git a/tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml b/tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml index 250c80d..0b78539 100644 --- a/tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml +++ b/tests/auto/declarative/qmlvisual/webview/javascript/windowObjects.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 Column { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" diff --git a/tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml b/tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml index df08666..7c32704 100644 --- a/tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml +++ b/tests/auto/declarative/qmlvisual/webview/settings/fontFamily.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 WebView { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" diff --git a/tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml b/tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml index 2403616..988ff64 100644 --- a/tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml +++ b/tests/auto/declarative/qmlvisual/webview/settings/fontSize.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 Grid { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" diff --git a/tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml b/tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml index ec503bf..c465be8 100644 --- a/tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml +++ b/tests/auto/declarative/qmlvisual/webview/settings/noAutoLoadImages.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 Grid { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" diff --git a/tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml b/tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml index f353fb4..11de161 100644 --- a/tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml +++ b/tests/auto/declarative/qmlvisual/webview/settings/setFontFamily.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 WebView { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml b/tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml index 5e55d46..a2b11ac 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/pageWidth.qml @@ -1,11 +1,11 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 WebView { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" - width: 200 - height: 250 - url: "resolution.html" - webPageWidth: 400 - preferredWidth: 200 + //width: 200 + //height: 250 + //url: "resolution.html" + // webPageWidth: 400 + // preferredWidth: 200 } diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml b/tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml index a8e5b59..c07f1e1 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/renderControl.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 Rectangle { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml b/tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml index fe33f3f..cf5f50f 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/resolution.qml @@ -1,8 +1,9 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 WebView { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" + /* width: 200 * zoomFactor height: 250 * zoomFactor scale: 1/zoomFactor @@ -14,4 +15,5 @@ WebView { NumberAnimation { from: 1; to: 5; duration: 2000 } NumberAnimation { from: 5; to: 1; duration: 2000 } } + */ } diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml b/tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml index 43551e5..03c925f 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/zoomTextOnly.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 WebView { property string skip: "WebView tests not counting until resources allocated to WebView maintenance" @@ -7,9 +7,11 @@ WebView { height: 250 url: "zoomTextOnly.html" settings.zoomTextOnly: true + /* SequentialAnimation on zoomFactor { loops: Animation.Infinite NumberAnimation { from: 2; to: 0.25; duration: 1000 } NumberAnimation { from: 0.25; to: 2; duration: 1000 } } + */ } diff --git a/tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml b/tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml index 6cfd5eb..03fd780 100644 --- a/tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml +++ b/tests/auto/declarative/qmlvisual/webview/zooming/zooming.qml @@ -1,5 +1,5 @@ import QtQuick 1.0 -import org.webkit 1.0 +import QtWebKit 1.0 // Note that zooming is better done using zoomFactor and careful // control of rendering to avoid excessive re-rendering during diff --git a/tools/qml/qdeclarativetester.cpp b/tools/qml/qdeclarativetester.cpp index a0ef4a1..67ea03d 100644 --- a/tools/qml/qdeclarativetester.cpp +++ b/tools/qml/qdeclarativetester.cpp @@ -128,10 +128,8 @@ void QDeclarativeTester::executefailure() { hasFailed = true; - if (options & QDeclarativeViewer::ExitOnFailure){ - testSkip(); - exit(hasFailed?-1:0); - } + if (options & QDeclarativeViewer::ExitOnFailure) + exit(-1); } void QDeclarativeTester::imagefailure() -- cgit v0.12 From 60948c48adc376cefa774bd101de34c60db52dea Mon Sep 17 00:00:00 2001 From: Markus Goetz Date: Fri, 29 Oct 2010 10:23:07 +0200 Subject: QNAM: Fix doc rendering of QNetworkRequest Reviewed-by: Morten Engvoldsen --- src/network/access/qnetworkrequest.cpp | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index d3084cf..b761af5 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -194,16 +194,12 @@ QT_BEGIN_NAMESPACE \value CookieLoadControlAttribute Requests only, type: QVariant::Int (default: QNetworkRequest::Automatic) Indicates whether to send 'Cookie' headers in the request. - This attribute is set to false by QtWebKit when creating a cross-origin XMLHttpRequest where withCredentials has not been set explicitly to true by the Javascript that created the request. - See \l{http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag}{here} for more information. - (This value was introduced in 4.7.) - \value CookieSaveControlAttribute Requests only, type: QVariant::Int (default: QNetworkRequest::Automatic) Indicates whether to save 'Cookie' headers received from the server in reply @@ -211,9 +207,7 @@ QT_BEGIN_NAMESPACE This attribute is set to false by QtWebKit when creating a cross-origin XMLHttpRequest where withCredentials has not been set explicitly to true by the Javascript that created the request. - See \l{http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag} {here} for more information. - (This value was introduced in 4.7.) \value AuthenticationReuseAttribute @@ -225,16 +219,12 @@ QT_BEGIN_NAMESPACE This attribute is set to QNetworkRequest::Manual by QtWebKit when creating a cross-origin XMLHttpRequest where withCredentials has not been set explicitly to true by the Javascript that created the request. - See \l{http://www.w3.org/TR/XMLHttpRequest2/#credentials-flag} {here} for more information. - (This value was introduced in 4.7.) \omitvalue MaximumDownloadBufferSizeAttribute - (This value was introduced in 4.7.) \omitvalue DownloadBufferAttribute - (This value was introduced in 4.7.) \value User Special type. Additional information can be passed in -- cgit v0.12 From 4bfd68ccbda50fa3336d6ee6875d87b1b308b870 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Thu, 28 Oct 2010 11:59:32 +0200 Subject: qSwap: use std::swap as implementation, and specialize std::swap for our container std::swap might be reimplemented for many types. That might speedup our Qt algorithms that uses qSwap. (std::swap also use std::move) Specialize std::swap for our shared type, so stl algorithls work faster Reviewed-by: Joao --- src/corelib/global/qglobal.h | 25 ++++++++++++++++++++++--- src/corelib/tools/qscopedpointer.h | 12 ++++++++++++ src/corelib/tools/qshareddata.h | 14 ++++++++++++++ src/corelib/tools/qsharedpointer_impl.h | 10 ++++++++++ tests/auto/qalgorithms/tst_qalgorithms.cpp | 23 +++++++++++++++++++++++ 5 files changed, 81 insertions(+), 3 deletions(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 547ad8d..90dd43e 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -43,6 +43,9 @@ #define QGLOBAL_H #include +#ifndef QT_NO_STL +#include +#endif #define QT_VERSION_STR "4.8.0" /* @@ -2062,9 +2065,14 @@ Q_DECLARE_TYPEINFO_BODY(TYPE, FLAGS) template inline void qSwap(T &value1, T &value2) { +#ifdef QT_NO_STL const T t = value1; value1 = value2; value2 = t; +#else + using std::swap; + swap(value1, value2); +#endif } /* @@ -2076,12 +2084,23 @@ inline void qSwap(T &value1, T &value2) types must declare a 'bool isDetached(void) const;' member for this to work. */ +#ifdef QT_NO_STL +#define Q_DECLARE_SHARED_STL(TYPE) +#else +#define Q_DECLARE_SHARED_STL(TYPE) \ +QT_END_NAMESPACE \ +namespace std { \ + template<> inline void swap(TYPE &value1, TYPE &value2) \ + { swap(value1.data_ptr(), value2.data_ptr()); } \ +} \ +QT_BEGIN_NAMESPACE +#endif + #define Q_DECLARE_SHARED(TYPE) \ template <> inline bool qIsDetached(TYPE &t) { return t.isDetached(); } \ template <> inline void qSwap(TYPE &value1, TYPE &value2) \ -{ \ - qSwap(value1.data_ptr(), value2.data_ptr()); \ -} +{ qSwap(value1.data_ptr(), value2.data_ptr()); } \ +Q_DECLARE_SHARED_STL(TYPE) /* QTypeInfo primitive specializations diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h index 40d3851..a24cc71 100644 --- a/src/corelib/tools/qscopedpointer.h +++ b/src/corelib/tools/qscopedpointer.h @@ -186,6 +186,18 @@ template Q_INLINE_TEMPLATE void qSwap(QScopedPointer &p1, QScopedPointer &p2) { p1.swap(p2); } +#ifndef QT_NO_STL +QT_END_NAMESPACE +namespace std { + template + Q_INLINE_TEMPLATE void swap(QScopedPointer &p1, QScopedPointer &p2) + { p1.swap(p2); } +} +QT_BEGIN_NAMESPACE +#endif + + + namespace QtPrivate { template struct QScopedArrayEnsureSameType; template struct QScopedArrayEnsureSameType { typedef X* Type; }; diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h index b646a9d..1079595 100644 --- a/src/corelib/tools/qshareddata.h +++ b/src/corelib/tools/qshareddata.h @@ -263,6 +263,20 @@ template Q_INLINE_TEMPLATE void qSwap(QExplicitlySharedDataPointer &p1, QExplicitlySharedDataPointer &p2) { p1.swap(p2); } +#ifndef QT_NO_STL +QT_END_NAMESPACE +namespace std { + template + Q_INLINE_TEMPLATE void swap(QSharedDataPointer &p1, QSharedDataPointer &p2) + { p1.swap(p2); } + + template + Q_INLINE_TEMPLATE void swap(QExplicitlySharedDataPointer &p1, QExplicitlySharedDataPointer &p2) + { p1.swap(p2); } +} +QT_BEGIN_NAMESPACE +#endif + QT_END_NAMESPACE QT_END_HEADER diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 4b47713..965ac14 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -784,6 +784,16 @@ inline void qSwap(QSharedPointer &p1, QSharedPointer &p2) p1.swap(p2); } +#ifndef QT_NO_STL +QT_END_NAMESPACE +namespace std { + template + inline void swap(QSharedPointer &p1, QSharedPointer &p2) + { p1.swap(p2); } +} +QT_BEGIN_NAMESPACE +#endif + namespace QtSharedPointer { // helper functions: template diff --git a/tests/auto/qalgorithms/tst_qalgorithms.cpp b/tests/auto/qalgorithms/tst_qalgorithms.cpp index 690bbbd..17e6c04 100644 --- a/tests/auto/qalgorithms/tst_qalgorithms.cpp +++ b/tests/auto/qalgorithms/tst_qalgorithms.cpp @@ -81,6 +81,7 @@ private slots: void test_qBinaryFind(); void qBinaryFindOneEntry(); void swap(); + void swap2(); void sortEmptyList(); void sortedList(); void sortAPItest(); @@ -521,6 +522,28 @@ void tst_QAlgorithms::swap() } } +namespace SwapTest { + struct ST { int i; int j; }; + void swap(ST &a, ST &b) { + a.i = b.j; + b.i = a.j; + } +} + +void tst_QAlgorithms::swap2() +{ + { +#ifndef QT_NO_SQL + //check the namespace lookup works correctly + SwapTest::ST a = { 45, 65 }; + SwapTest::ST b = { 48, 68 }; + qSwap(a, b); + QCOMPARE(a.i, 68); + QCOMPARE(b.i, 65); +#endif + } +} + void tst_QAlgorithms::sortEmptyList() { // Only test if it crashes -- cgit v0.12 From b0768d0822e53a9608222d5dd6810c939cd4aa6a Mon Sep 17 00:00:00 2001 From: Iain Date: Fri, 29 Oct 2010 12:50:55 +0300 Subject: Correct RVCT4 parameter so it applies to all 4.x versions, not just 4.0 Task-number: QTBUG-14851 Reviewed-by: Miikka Heikkinen Reviewed-by: Jason Barron --- mkspecs/common/symbian/symbian.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkspecs/common/symbian/symbian.conf b/mkspecs/common/symbian/symbian.conf index 2fb799d..5c4a385 100644 --- a/mkspecs/common/symbian/symbian.conf +++ b/mkspecs/common/symbian/symbian.conf @@ -27,7 +27,7 @@ QMAKE_CFLAGS_DEBUG = QMAKE_CFLAGS_YACC = -Wno-unused -Wno-parentheses MMP_OPTION_KEYWORDS = CW ARMCC GCCE -VERSION_FLAGS.ARMCC = ARMCC_4_0 +VERSION_FLAGS.ARMCC = ARMCC_4 QMAKE_CXXFLAGS = $$QMAKE_CFLAGS # Symbian build system applies -cwd source on the MWCC command line. # this causes problems with include paths, -cwd include uses the same @@ -36,7 +36,7 @@ QMAKE_CXXFLAGS = $$QMAKE_CFLAGS # both on the command line and rely on the compiler using the last specified QMAKE_CXXFLAGS.CW = -cwd include QMAKE_CXXFLAGS.ARMCC = --visibility_inlines_hidden -QMAKE_CXXFLAGS.ARMCC_4_0 = --import_all_vtbl +QMAKE_CXXFLAGS.ARMCC_4 = --import_all_vtbl QMAKE_CXXFLAGS.GCCE = -fvisibility-inlines-hidden QMAKE_CXXFLAGS_DEPS = $$QMAKE_CFLAGS_DEPS QMAKE_CXXFLAGS_WARN_ON = $$QMAKE_CFLAGS_WARN_ON -- cgit v0.12 From 177960b77ce7b02b853c45278b7c7068783be49f Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Fri, 29 Oct 2010 12:52:21 +0300 Subject: Support tactile feeedback from QS60Style for QWidgets Currently tactile feedback is not given for QWidgets running on Symbian even if the native side supports this (Sym^3 and 5th Edition devices). This task adds support for QWidgets having QS60Style. The tactile feedback has been implemented as a plugin that the style loads when instantiating itself for touch devices. NOTE that the feedback is NOT supported by the emulated style, nor is the plugin interface public, so it cannot be used outside of style. The implementation is simplistic, since we only want to provide stop-gap solution until 4.8 when real Qt feedback implementation is ready. The implementation will only give feedback for touch-down events for visible, interactive and enabled widgets. Sliders and scrollbars will use sensitive feedback (slightly less aggressive) and all others will use basic feedback. Note that Sym^3 adds tens of different feedback categories, which this plugin ignores as we want to share the same implementation for Sym^3 and 5th ed. In distributed Qt package there is no tactile feedback for 5th edition, due to package creation limitations. Support can be added manually by re-compiling Qt on top of 5th Edition SDK. Task-number: QT-4037 Reviewed-by: Jani Hautakangas Reviewed-by: Janne Koskinen --- src/gui/styles/qs60style.cpp | 5 +- src/gui/styles/qs60style_feedbackinterface_p.h | 50 ++++++++++++++ src/gui/styles/qs60style_p.h | 4 ++ src/gui/styles/qs60style_s60.cpp | 24 ++++++- src/plugins/s60/feedback/feedback.pro | 16 +++++ src/plugins/s60/feedback/qtactileFeedback.h | 54 +++++++++++++++ src/plugins/s60/feedback/qtactileFeedback_s60.cpp | 83 +++++++++++++++++++++++ src/plugins/s60/s60.pro | 4 ++ src/s60installs/qt.iby | 5 ++ src/s60installs/s60installs.pro | 6 ++ 10 files changed, 249 insertions(+), 2 deletions(-) create mode 100644 src/gui/styles/qs60style_feedbackinterface_p.h create mode 100644 src/plugins/s60/feedback/feedback.pro create mode 100644 src/plugins/s60/feedback/qtactileFeedback.h create mode 100644 src/plugins/s60/feedback/qtactileFeedback_s60.cpp diff --git a/src/gui/styles/qs60style.cpp b/src/gui/styles/qs60style.cpp index ca3a9d0..d39a2ba 100644 --- a/src/gui/styles/qs60style.cpp +++ b/src/gui/styles/qs60style.cpp @@ -3424,8 +3424,11 @@ bool QS60Style::eventFilter(QObject *object, QEvent *event) qobject_cast(w)) d->m_pressedWidget = w; - if ( d->m_pressedWidget) + if (d->m_pressedWidget) d->m_pressedWidget->update(); +#ifdef Q_WS_S60 + d->touchFeedback(event, w); +#endif } break; } diff --git a/src/gui/styles/qs60style_feedbackinterface_p.h b/src/gui/styles/qs60style_feedbackinterface_p.h new file mode 100644 index 0000000..81fcdc3 --- /dev/null +++ b/src/gui/styles/qs60style_feedbackinterface_p.h @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include + +class TactileFeedbackInterface : public QObject +{ + public: + virtual void touchFeedback(QEvent *event, const QWidget *widget) = 0; +}; + +Q_DECLARE_INTERFACE(TactileFeedbackInterface, "com.trolltech.Qt.TactileFeedbackInterface/1.0") diff --git a/src/gui/styles/qs60style_p.h b/src/gui/styles/qs60style_p.h index b3f4160..b46f75e 100644 --- a/src/gui/styles/qs60style_p.h +++ b/src/gui/styles/qs60style_p.h @@ -387,6 +387,7 @@ private: //data members class QFocusFrame; class QProgressBar; class QS60StyleAnimation; +class TactileFeedbackInterface; // Private class #ifdef Q_OS_SYMBIAN @@ -572,6 +573,8 @@ public: void stopAnimation(QS60StyleEnums::SkinParts animation); static QS60StyleAnimation* animationDefinition(QS60StyleEnums::SkinParts part); static void removeAnimations(); + //No support for tactile feedback in emulated style + void touchFeedback(QEvent *event, const QWidget *widget); #endif @@ -626,6 +629,7 @@ private: #ifdef Q_WS_S60 //list of progress bars having animation running QList m_bars; + TactileFeedbackInterface *m_feedbackPlugin; #endif }; diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp index 5dda42e..a1ea308 100644 --- a/src/gui/styles/qs60style_s60.cpp +++ b/src/gui/styles/qs60style_s60.cpp @@ -49,6 +49,10 @@ #include "private/qcore_symbian_p.h" #include "qapplication.h" +#include "qpluginloader.h" +#include "qlibraryinfo.h" +#include "private/qs60style_feedbackinterface_p.h" + #include #include #include @@ -1143,13 +1147,25 @@ void QS60StylePrivate::setActiveLayout() Q_GLOBAL_STATIC(QList, m_animations) -QS60StylePrivate::QS60StylePrivate() +QS60StylePrivate::QS60StylePrivate() : m_feedbackPlugin(0) { //Animation defaults need to be created when style is instantiated QS60StyleAnimation* progressBarAnimation = new QS60StyleAnimation(QS60StyleEnums::SP_QgnGrafBarWaitAnim, 7, 100); m_animations()->append(progressBarAnimation); // No need to set active layout, if dynamic metrics API is available setActiveLayout(); + + //Tactile feedback plugin is only available for touch devices. + if (isTouchSupported()) { + QString pluginsPath = QLibraryInfo::location(QLibraryInfo::PluginsPath); + pluginsPath += QLatin1String("/feedback/qtactilefeedback.dll"); + + // Create plugin loader + QPluginLoader pluginLoader(pluginsPath); + // Load plugin and store pointer to the plugin implementation + if (pluginLoader.load()) + m_feedbackPlugin = qobject_cast(pluginLoader.instance()); + } } void QS60StylePrivate::removeAnimations() @@ -1439,6 +1455,12 @@ void QS60StylePrivate::stopAnimation(QS60StyleEnums::SkinParts animationPart) } } +void QS60StylePrivate::touchFeedback(QEvent *event, const QWidget *widget) +{ + if (m_feedbackPlugin) + m_feedbackPlugin->touchFeedback(event, widget); +} + QVariant QS60StyleModeSpecifics::themeDefinition( QS60StyleEnums::ThemeDefinitions definition, QS60StyleEnums::SkinParts part) { diff --git a/src/plugins/s60/feedback/feedback.pro b/src/plugins/s60/feedback/feedback.pro new file mode 100644 index 0000000..32ddf6f --- /dev/null +++ b/src/plugins/s60/feedback/feedback.pro @@ -0,0 +1,16 @@ +include(../../qpluginbase.pri) + +TARGET = qtactilefeedback$${QT_LIBINFIX} + +INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE + +contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) { + HEADERS += qtactileFeedback.h + SOURCES += qtactileFeedback_s60.cpp + + LIBS += -ltouchfeedback +} + +load(data_caging_paths) + +TARGET.UID3=0x200315B4 diff --git a/src/plugins/s60/feedback/qtactileFeedback.h b/src/plugins/s60/feedback/qtactileFeedback.h new file mode 100644 index 0000000..7c4cc29 --- /dev/null +++ b/src/plugins/s60/feedback/qtactileFeedback.h @@ -0,0 +1,54 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include + +#include "private/qs60style_feedbackinterface_p.h" + +class QTactileFeedback : public TactileFeedbackInterface +{ + Q_OBJECT + Q_INTERFACES(TactileFeedbackInterface) + + public: + void touchFeedback(QEvent *event, const QWidget *widget); + }; diff --git a/src/plugins/s60/feedback/qtactileFeedback_s60.cpp b/src/plugins/s60/feedback/qtactileFeedback_s60.cpp new file mode 100644 index 0000000..c2f1d34 --- /dev/null +++ b/src/plugins/s60/feedback/qtactileFeedback_s60.cpp @@ -0,0 +1,83 @@ +/**************************************************************************** +** +** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (qt-info@nokia.com) +** +** This file is part of the QtGui module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the Technology Preview License Agreement accompanying +** this package. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain additional +** rights. These rights are described in the Nokia Qt LGPL Exception +** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include +#include +#include +#include + +#include +#include "qtactileFeedback.h" + +#include + +void QTactileFeedback::touchFeedback(QEvent *event, const QWidget *widget) +{ + //Lets share the global instance for touch feedback (you are NOT allowed to try and delete it!). + MTouchFeedback* feedback = MTouchFeedback::Instance(); + + //If the widget itself is not handling focus, try to use focusProxy widget. + const QWidget *w = ((widget->focusPolicy() == Qt::NoFocus) && (widget->focusProxy())) ? widget->focusProxy() : widget; + + //Only give tactile feedback for enabled widgets that take focus. + if (feedback && w && w->isEnabled() && w->isWidgetType() && w->isVisible()) { + //Scrollbars are 'special' that they don't take focus (nor they have focusProxy), yet we'd like to have tactile feedback for them + if (w->focusPolicy() == Qt::NoFocus) + if (!qobject_cast(w)) + return; + + //Don't give tactile feedback for widgets that are outside topmost dialog. + QWidget *dialog = QApplication::activeModalWidget(); + if (dialog) { + QList allChildren = dialog->findChildren(); + if (!allChildren.contains(w)) + return; + } + + //Widget specific tactile feedback. + if (qobject_cast(w) || qobject_cast(w)) + feedback->InstantFeedback(ETouchFeedbackSensitive); + else + feedback->InstantFeedback(ETouchFeedbackBasic); + } +} + +Q_EXPORT_PLUGIN2("feedback", QTactileFeedback); diff --git a/src/plugins/s60/s60.pro b/src/plugins/s60/s60.pro index c999fff..ffcd170 100644 --- a/src/plugins/s60/s60.pro +++ b/src/plugins/s60/s60.pro @@ -6,6 +6,10 @@ symbian { SUBDIRS += 3_1 3_2 } + contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) { + SUBDIRS += feedback + } + # 5.0 is used also for Symbian3 and later SUBDIRS += 5_0 } \ No newline at end of file diff --git a/src/s60installs/qt.iby b/src/s60installs/qt.iby index 4afbf05..2b3be0a 100644 --- a/src/s60installs/qt.iby +++ b/src/s60installs/qt.iby @@ -60,6 +60,8 @@ file=ABI_DIR\BUILD_DIR\qsymbianbearer.dll SHARED_LIB_DIR\qsymbianbearer.dll // so don't bother including those plugins file=ABI_DIR\BUILD_DIR\qts60plugin_5_0.dll SHARED_LIB_DIR\qts60plugin_5_0.dll +file=ABI_DIR\BUILD_DIR\qtactilefeedback.dll SHARED_LIB_DIR\qtactilefeedback.dll + S60_APP_RESOURCE(s60main) // imageformats stubs @@ -105,6 +107,9 @@ data=\epoc32\data\z\resource\qt\plugins\graphicssystems\qglgraphicssystem.qtplug // bearer stub data=\epoc32\data\z\resource\qt\plugins\bearer\qsymbianbearer.qtplugin resource\qt\plugins\bearer\qsymbianbearer.qtplugin +// feedback +data=\epoc32\data\z\resource\qt\plugins\feedback\qtactilefeedback.qtplugin resource\qt\plugins\feedback\qtactilefeedback.qtplugin + // Stub sis file data=ZSYSTEM\install\qt_stub.sis System\Install\qt_stub.sis data=ZSYSTEM\install\qtwebkit_stub.sis System\Install\qtwebkit_stub.sis diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 9559da6..23b3d8f 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -86,6 +86,12 @@ symbian: { bearer_plugin.path = c:$$QT_PLUGINS_BASE_DIR/bearer DEPLOYMENT += bearer_plugin } + + contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) { + feedback_plugin.sources = $$QT_BUILD_TREE/plugins/s60/feedback/qtactilefeedback$${QT_LIBINFIX}.dll + feedback_plugin.path = c:$$QT_PLUGINS_BASE_DIR/feedback + DEPLOYMENT += feedback_plugin + } qtlibraries.pkg_postrules += qts60plugindeployment -- cgit v0.12 From 30524cf5c745d07372b66df90235bab0080148a3 Mon Sep 17 00:00:00 2001 From: Sami Merila Date: Fri, 29 Oct 2010 13:12:47 +0300 Subject: Support tactile feedback in QWidgets from QS60Style Addition to previous task. Remove white-space from .pro-file. Task-number: QT-4037 Reviewed-by: Janne Koskinen --- src/s60installs/s60installs.pro | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/s60installs/s60installs.pro b/src/s60installs/s60installs.pro index 23b3d8f..65b8781 100644 --- a/src/s60installs/s60installs.pro +++ b/src/s60installs/s60installs.pro @@ -86,7 +86,7 @@ symbian: { bearer_plugin.path = c:$$QT_PLUGINS_BASE_DIR/bearer DEPLOYMENT += bearer_plugin } - + contains(S60_VERSION, 5.0)|contains(S60_VERSION, symbian3) { feedback_plugin.sources = $$QT_BUILD_TREE/plugins/s60/feedback/qtactilefeedback$${QT_LIBINFIX}.dll feedback_plugin.path = c:$$QT_PLUGINS_BASE_DIR/feedback -- cgit v0.12 From 7955c4351e163a98d78cf419b44ab6ce231cb6dc Mon Sep 17 00:00:00 2001 From: Jani Hautakangas Date: Fri, 29 Oct 2010 13:23:45 +0300 Subject: Revert function renaming in QtOpenVG. Functions were accidentally thought to be in private scope. Renaming broke BC. Reviewed-by: Jason Barron --- src/openvg/qpixmapdata_vg.cpp | 18 +++++++++--------- src/openvg/qpixmapdata_vg_p.h | 4 ++-- src/openvg/qvg_symbian.cpp | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/openvg/qpixmapdata_vg.cpp b/src/openvg/qpixmapdata_vg.cpp index 724d06d..509882b 100644 --- a/src/openvg/qpixmapdata_vg.cpp +++ b/src/openvg/qpixmapdata_vg.cpp @@ -75,13 +75,13 @@ QVGPixmapData::QVGPixmapData(PixelType type) QVGPixmapData::~QVGPixmapData() { - destroyVGImageAndVGContext(); + destroyImageAndContext(); #if !defined(QT_NO_EGL) qt_vg_unregister_pixmap(this); #endif } -void QVGPixmapData::destroyVGImages() +void QVGPixmapData::destroyImages() { if (inImagePool) { QVGImagePool *pool = QVGImagePool::instance(); @@ -100,23 +100,23 @@ void QVGPixmapData::destroyVGImages() inImagePool = false; } -void QVGPixmapData::destroyVGImageAndVGContext() +void QVGPixmapData::destroyImageAndContext() { if (vgImage != VG_INVALID_HANDLE) { // We need to have a context current to destroy the image. #if !defined(QT_NO_EGL) if (context->isCurrent()) { - destroyVGImages(); + destroyImages(); } else { // We don't currently have a widget surface active, but we // need a surface to make the context current. So use the // shared pbuffer surface instead. context->makeCurrent(qt_vg_shared_surface()); - destroyVGImages(); + destroyImages(); context->lazyDoneCurrent(); } #else - destroyVGImages(); + destroyImages(); #endif } #if !defined(QT_NO_EGL) @@ -301,7 +301,7 @@ VGImage QVGPixmapData::toVGImage() #endif if (recreate && prevSize != QSize(w, h)) - destroyVGImages(); + destroyImages(); else if (recreate) cachedOpacity = -1.0f; // Force opacity image to be refreshed later. @@ -393,7 +393,7 @@ void QVGPixmapData::hibernate() return; forceToImage(); - destroyVGImageAndVGContext(); + destroyImageAndContext(); } void QVGPixmapData::reclaimImages() @@ -401,7 +401,7 @@ void QVGPixmapData::reclaimImages() if (!inImagePool) return; forceToImage(); - destroyVGImages(); + destroyImages(); } Q_DECL_IMPORT extern int qt_defaultDpiX(); diff --git a/src/openvg/qpixmapdata_vg_p.h b/src/openvg/qpixmapdata_vg_p.h index b8f01eb..7ffdc85 100644 --- a/src/openvg/qpixmapdata_vg_p.h +++ b/src/openvg/qpixmapdata_vg_p.h @@ -171,8 +171,8 @@ protected: void forceToImage(); QImage::Format sourceFormat() const; - void destroyVGImageAndVGContext(); - void destroyVGImages(); + void destroyImageAndContext(); + void destroyImages(); }; QT_END_NAMESPACE diff --git a/src/openvg/qvg_symbian.cpp b/src/openvg/qvg_symbian.cpp index b6bf858..c608c81 100644 --- a/src/openvg/qvg_symbian.cpp +++ b/src/openvg/qvg_symbian.cpp @@ -144,7 +144,7 @@ void QVGPixmapData::fromNativeType(void* pixmap, NativeType type) if (type == QPixmapData::SgImage && pixmap) { #if defined(QT_SYMBIAN_SUPPORTS_SGIMAGE) && !defined(QT_NO_EGL) RSgImage *sgImage = reinterpret_cast(pixmap); - destroyVGImages(); + destroyImages(); prevSize = QSize(); VGImage vgImage = sgImageToVGImage(context, *sgImage); -- cgit v0.12 From aaba8c808d02bfd8a5208260320ce522b84954a1 Mon Sep 17 00:00:00 2001 From: Harald Fernengel Date: Fri, 29 Oct 2010 13:57:18 +0200 Subject: Fix memory leak on exit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The confFile was lost if the cache was already gone (e.g. on app exit). This patch ensures that the confFile is always deleted. Reviewed-by: João Abecasis --- src/corelib/io/qsettings.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/corelib/io/qsettings.cpp b/src/corelib/io/qsettings.cpp index 53af822..8ee42e7 100644 --- a/src/corelib/io/qsettings.cpp +++ b/src/corelib/io/qsettings.cpp @@ -1231,16 +1231,21 @@ QConfFileSettingsPrivate::~QConfFileSettingsPrivate() if (confFiles[i] && !confFiles[i]->ref.deref()) { if (confFiles[i]->size == 0) { delete confFiles[i].take(); - } else if (unusedCache) { + } else { if (usedHash) usedHash->remove(confFiles[i]->name); - QT_TRY { - // compute a better size? - unusedCache->insert(confFiles[i]->name, confFiles[i].data(), - 10 + (confFiles[i]->originalKeys.size() / 4)); - confFiles[i].take(); - } QT_CATCH(...) { - // out of memory. Do not cache the file. + if (unusedCache) { + QT_TRY { + // compute a better size? + unusedCache->insert(confFiles[i]->name, confFiles[i].data(), + 10 + (confFiles[i]->originalKeys.size() / 4)); + confFiles[i].take(); + } QT_CATCH(...) { + // out of memory. Do not cache the file. + delete confFiles[i].take(); + } + } else { + // unusedCache is gone - delete the entry to prevent a memory leak delete confFiles[i].take(); } } -- cgit v0.12 From e78a4b092c86e56099dbed3c3f423028506129d5 Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Fri, 29 Oct 2010 09:40:00 +0200 Subject: Avoid being killed by graphics out-of-memory monitor. When an application requests more graphics memory, the GOOM monitor will start looking for other applications to kill in order to recover the requested graphics memory. The first step in this process is to send a custom event to the application indicating that it is a candidate for termination. If the application does not acknowledge this event, it will be killed immediately. However, since Qt releases its graphics memory when the app is obscured, we should indicate that we handle this event such that Qt has a chance to finish freeing resources. If after a certain time, the app has not freed its resources it will be killed anyway. This essentially buys Qt some time to avoid the case where Qt apps are killed while they are cleaning up. Task: QTBUG-14858 Reviewed-by: Jani Hautakangas --- src/gui/kernel/qapplication_s60.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/gui/kernel/qapplication_s60.cpp b/src/gui/kernel/qapplication_s60.cpp index 5ff2fd4..ae7070e 100644 --- a/src/gui/kernel/qapplication_s60.cpp +++ b/src/gui/kernel/qapplication_s60.cpp @@ -2055,6 +2055,17 @@ int QApplicationPrivate::symbianProcessWsEvent(const QSymbianEvent *symbianEvent } #endif break; +#ifdef Q_SYMBIAN_SUPPORTS_SURFACES + case EEventUser: + { + // GOOM is looking for candidates to kill so indicate that we are + // capable of cleaning up by handling this event + TInt32 *data = reinterpret_cast(event->EventData()); + if (data[0] == EApaSystemEventShutdown && data[1] == KGoomMemoryLowEvent) + return 1; + } + break; +#endif default: break; } -- cgit v0.12 From dd5ec222ce0285bd9419c9a47a8329bda41b5dd8 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Wed, 27 Oct 2010 11:22:31 +0100 Subject: Set SpectrumAnalyserThread parent to 0 before calling moveToThread() QObjects with a parent cannot be moved to a different thread. --- demos/spectrum/app/spectrumanalyser.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/demos/spectrum/app/spectrumanalyser.cpp b/demos/spectrum/app/spectrumanalyser.cpp index 1cc47a6..2fa17b1 100644 --- a/demos/spectrum/app/spectrumanalyser.cpp +++ b/demos/spectrum/app/spectrumanalyser.cpp @@ -64,6 +64,8 @@ SpectrumAnalyserThread::SpectrumAnalyserThread(QObject *parent) #endif { #ifdef SPECTRUM_ANALYSER_SEPARATE_THREAD + // moveToThread() cannot be called on a QObject with a parent + setParent(0); moveToThread(m_thread); m_thread->start(); #endif -- cgit v0.12 From a53df3596e2061c202845f9f1c183177ca8a7eda Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 26 Oct 2010 15:15:14 +0100 Subject: Do not unnecessarily reset state of spectrum demo This patch ensures that the state of the application is not reset when: - Any of the 'Play generated tone', 'Play file' or settings dialogs are opened - Any of the 'Play generated tone', 'Play file' or settings dialogs are dismissed by pressing the Cancel button - A new input or output device is selected via the settings dialog, and that new device supports the data format which is currently being used within the application - The window function is changed via the settings dialog Note that the application is still reset if a new input or output device is selected via the settings dialog, and this device does not support the current data format. Task-number: QTBUG-12935 Task-number: QTBUG-14810 --- demos/spectrum/app/engine.cpp | 84 +++++++++++++++++++++------------------ demos/spectrum/app/mainwidget.cpp | 21 ++++++---- demos/spectrum/app/mainwidget.h | 1 + 3 files changed, 61 insertions(+), 45 deletions(-) diff --git a/demos/spectrum/app/engine.cpp b/demos/spectrum/app/engine.cpp index 119a0e3..0495fe3 100644 --- a/demos/spectrum/app/engine.cpp +++ b/demos/spectrum/app/engine.cpp @@ -453,44 +453,50 @@ bool Engine::initialize() { bool result = false; - reset(); + QAudioFormat format = m_format; if (selectFormat()) { - const qint64 bufferLength = audioLength(m_format, BufferDurationUs); - m_buffer.resize(bufferLength); - m_buffer.fill(0); - emit bufferDurationChanged(BufferDurationUs); - - if (m_generateTone) { - if (0 == m_tone.endFreq) { - const qreal nyquist = nyquistFrequency(m_format); - m_tone.endFreq = qMin(qreal(SpectrumHighFreq), nyquist); - } + if (m_format != format) { + format = m_format; + reset(); + m_format = format; + + const qint64 bufferLength = audioLength(m_format, BufferDurationUs); + m_buffer.resize(bufferLength); + m_buffer.fill(0); + emit bufferDurationChanged(BufferDurationUs); + + if (m_generateTone) { + if (0 == m_tone.endFreq) { + const qreal nyquist = nyquistFrequency(m_format); + m_tone.endFreq = qMin(qreal(SpectrumHighFreq), nyquist); + } - // Call function defined in utils.h, at global scope - ::generateTone(m_tone, m_format, m_buffer); - m_dataLength = m_buffer.size(); - emit dataDurationChanged(bufferDuration()); - setRecordPosition(bufferDuration()); - result = true; - } else if (m_file) { - const qint64 length = m_wavFile.readData(*m_file, m_buffer, m_format); - if (length) { - m_dataLength = length; - emit dataDurationChanged(dataDuration()); - setRecordPosition(dataDuration()); + // Call function defined in utils.h, at global scope + ::generateTone(m_tone, m_format, m_buffer); + m_dataLength = m_buffer.size(); + emit dataDurationChanged(bufferDuration()); + setRecordPosition(bufferDuration()); + result = true; + } else if (m_file) { + const qint64 length = m_wavFile.readData(*m_file, m_buffer, m_format); + if (length) { + m_dataLength = length; + emit dataDurationChanged(dataDuration()); + setRecordPosition(dataDuration()); + result = true; + } + } else { + m_audioInput = new QAudioInput(m_audioInputDevice, m_format, this); + m_audioInput->setNotifyInterval(NotifyIntervalMs); result = true; } - } else { - m_audioInput = new QAudioInput(m_audioInputDevice, m_format, this); - m_audioInput->setNotifyInterval(NotifyIntervalMs); - result = true; - } - m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this); - m_audioOutput->setNotifyInterval(NotifyIntervalMs); - m_spectrumLengthBytes = SpectrumLengthSamples * - (m_format.sampleSize() / 8) * m_format.channels(); + m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this); + m_audioOutput->setNotifyInterval(NotifyIntervalMs); + m_spectrumLengthBytes = SpectrumLengthSamples * + (m_format.sampleSize() / 8) * m_format.channels(); + } } else { if (m_file) emit errorMessage(tr("Audio format not supported"), @@ -510,12 +516,14 @@ bool Engine::selectFormat() { bool foundSupportedFormat = false; - if (m_file) { - // Header is read from the WAV file; just need to check whether - // it is supported by the audio output device - QAudioFormat format = m_wavFile.format(); - if (m_audioOutputDevice.isFormatSupported(m_wavFile.format())) { - setFormat(m_wavFile.format()); + if (m_file || QAudioFormat() != m_format) { + QAudioFormat format = m_format; + if (m_file) + // Header is read from the WAV file; just need to check whether + // it is supported by the audio output device + format = m_wavFile.format(); + if (m_audioOutputDevice.isFormatSupported(format)) { + setFormat(format); foundSupportedFormat = true; } else { // Try flipping mono <-> stereo diff --git a/demos/spectrum/app/mainwidget.cpp b/demos/spectrum/app/mainwidget.cpp index dd51a91..fba28c6 100644 --- a/demos/spectrum/app/mainwidget.cpp +++ b/demos/spectrum/app/mainwidget.cpp @@ -200,19 +200,20 @@ void MainWidget::dataDurationChanged(qint64 duration) void MainWidget::showFileDialog() { - reset(); const QString dir; const QStringList fileNames = QFileDialog::getOpenFileNames(this, tr("Open WAV file"), dir, "*.wav"); if (fileNames.count()) { + reset(); setMode(LoadFileMode); m_engine->loadFile(fileNames.front()); updateButtonStates(); + } else { + updateModeMenu(); } } void MainWidget::showSettingsDialog() { - reset(); m_settingsDialog->exec(); if (m_settingsDialog->result() == QDialog::Accepted) { m_engine->setAudioInputDevice(m_settingsDialog->inputDevice()); @@ -223,9 +224,9 @@ void MainWidget::showSettingsDialog() void MainWidget::showToneGeneratorDialog() { - reset(); m_toneGeneratorDialog->exec(); if (m_toneGeneratorDialog->result() == QDialog::Accepted) { + reset(); setMode(GenerateToneMode); const qreal amplitude = m_toneGeneratorDialog->amplitude(); if (m_toneGeneratorDialog->isFrequencySweepEnabled()) { @@ -236,6 +237,8 @@ void MainWidget::showToneGeneratorDialog() m_engine->generateTone(tone); updateButtonStates(); } + } else { + updateModeMenu(); } } @@ -445,10 +448,14 @@ void MainWidget::reset() void MainWidget::setMode(Mode mode) { - m_mode = mode; - m_loadFileAction->setChecked(LoadFileMode == mode); - m_generateToneAction->setChecked(GenerateToneMode == mode); - m_recordAction->setChecked(RecordMode == mode); + updateModeMenu(); +} + +void MainWidget::updateModeMenu() +{ + m_loadFileAction->setChecked(LoadFileMode == m_mode); + m_generateToneAction->setChecked(GenerateToneMode == m_mode); + m_recordAction->setChecked(RecordMode == m_mode); } diff --git a/demos/spectrum/app/mainwidget.h b/demos/spectrum/app/mainwidget.h index ddab8b7..cc1f9ed 100644 --- a/demos/spectrum/app/mainwidget.h +++ b/demos/spectrum/app/mainwidget.h @@ -89,6 +89,7 @@ private slots: void showToneGeneratorDialog(); void initializeRecord(); void dataDurationChanged(qint64 duration); + void updateModeMenu(); private: void createUi(); -- cgit v0.12 From 3cf35876400cb008fb25c8a3191c996af6059264 Mon Sep 17 00:00:00 2001 From: Gareth Stockwell Date: Tue, 26 Oct 2010 17:15:29 +0100 Subject: Play whole file in spectrum analyzer demo This change required a significant refactoring of the application, including: * Re-write WavFile class so that it inherits from QFile rather than taking a QIODevice as an argument to its method calls. * Modified Engine class so that its internal QByteArray buffer (m_buffer) need not correspond to the entire clip. This was done by introducing the m_bufferPosition variable, which indicates the offset from the start of the clip to the start of the region of the clip which is currently held in memory. For tone generation and record/playback modes, the buffer does still map directly to the whole clip, so m_bufferPosition is always zero. For file playback, the WavFile instance is the QIODevice which is passed to QAudioOutput; m_buffer is just the part of the file which is currently in memory for spectrum analysis, level calculation and waveform rendering. * For file playback, introduced a second WavFile instance as a member of the Engine class. This is because QFile::seek() is called in order to read the part of the file currently required for analysis. If the QAudioOutput implementation passes its QIODevice across a thread boundary, this seeking causes playback to jump around within the file rather than progressing smoothly forward. * Modified the audioLength utility function so that its return value is always a multiple of the sample size. In the process of making the above changes, a few other minor modifications were made: * Modify all internal APIs concerned with buffer offsets and lengths to deal in bytes. Previously, some calls passed values in microseconds and others in bytes, which was confusing. * Remove write functionality from WavFile class, since it is not used in this application. Task-number: QTBUG-12936 --- demos/spectrum/app/engine.cpp | 315 +++++++++++++++++++------------------ demos/spectrum/app/engine.h | 57 +++---- demos/spectrum/app/mainwidget.cpp | 46 +++--- demos/spectrum/app/mainwidget.h | 9 +- demos/spectrum/app/progressbar.cpp | 26 +-- demos/spectrum/app/progressbar.h | 4 +- demos/spectrum/app/utils.cpp | 4 +- demos/spectrum/app/waveform.cpp | 120 ++++++++------ demos/spectrum/app/waveform.h | 14 +- demos/spectrum/app/wavfile.cpp | 205 ++++++------------------ demos/spectrum/app/wavfile.h | 36 ++--- 11 files changed, 369 insertions(+), 467 deletions(-) diff --git a/demos/spectrum/app/engine.cpp b/demos/spectrum/app/engine.cpp index 0495fe3..cd847fe 100644 --- a/demos/spectrum/app/engine.cpp +++ b/demos/spectrum/app/engine.cpp @@ -85,6 +85,7 @@ Engine::Engine(QObject *parent) , m_state(QAudio::StoppedState) , m_generateTone(false) , m_file(0) + , m_analysisFile(0) , m_availableAudioInputDevices (QAudioDeviceInfo::availableDevices(QAudio::AudioInput)) , m_audioInputDevice(QAudioDeviceInfo::defaultInputDevice()) @@ -96,15 +97,19 @@ Engine::Engine(QObject *parent) , m_audioOutputDevice(QAudioDeviceInfo::defaultOutputDevice()) , m_audioOutput(0) , m_playPosition(0) + , m_bufferPosition(0) + , m_bufferLength(0) , m_dataLength(0) + , m_levelBufferLength(0) , m_rmsLevel(0.0) , m_peakLevel(0.0) - , m_spectrumLengthBytes(0) + , m_spectrumBufferLength(0) , m_spectrumAnalyser() , m_spectrumPosition(0) , m_count(0) { qRegisterMetaType("FrequencySpectrum"); + qRegisterMetaType("WindowFunction"); CHECKED_CONNECT(&m_spectrumAnalyser, SIGNAL(spectrumChanged(FrequencySpectrum)), this, @@ -132,34 +137,33 @@ Engine::~Engine() bool Engine::loadFile(const QString &fileName) { + reset(); bool result = false; - m_generateTone = false; - - Q_ASSERT(!fileName.isEmpty()); + Q_ASSERT(!m_generateTone); Q_ASSERT(!m_file); - m_file = new QFile(fileName, this); - m_file->setFileName(fileName); - Q_ASSERT(m_file->exists()); - if (m_file->open(QFile::ReadOnly)) { - m_wavFile.readHeader(*m_file); - if (isPCMS16LE(m_wavFile.format())) { + Q_ASSERT(!fileName.isEmpty()); + m_file = new WavFile(this); + if (m_file->open(fileName)) { + if (isPCMS16LE(m_file->fileFormat())) { result = initialize(); } else { emit errorMessage(tr("Audio format not supported"), - formatToString(m_wavFile.format())); + formatToString(m_file->fileFormat())); } } else { emit errorMessage(tr("Could not open file"), fileName); } - - delete m_file; - m_file = 0; - + if (result) { + m_analysisFile = new WavFile(this); + m_analysisFile->open(fileName); + } return result; } bool Engine::generateTone(const Tone &tone) { + reset(); + Q_ASSERT(!m_generateTone); Q_ASSERT(!m_file); m_generateTone = true; m_tone = tone; @@ -172,6 +176,7 @@ bool Engine::generateTone(const Tone &tone) bool Engine::generateSweptTone(qreal amplitude) { + Q_ASSERT(!m_generateTone); Q_ASSERT(!m_file); m_generateTone = true; m_tone.startFreq = 1; @@ -185,41 +190,18 @@ bool Engine::generateSweptTone(qreal amplitude) bool Engine::initializeRecord() { + reset(); ENGINE_DEBUG << "Engine::initializeRecord"; + Q_ASSERT(!m_generateTone); Q_ASSERT(!m_file); m_generateTone = false; m_tone = SweptTone(); return initialize(); } -qint64 Engine::bufferDuration() const -{ - return BufferDurationUs; -} - -qint64 Engine::dataDuration() const -{ - qint64 result = 0; - if (QAudioFormat() != m_format) - result = audioDuration(m_format, m_dataLength); - return result; -} - -qint64 Engine::audioBufferLength() const +qint64 Engine::bufferLength() const { - qint64 length = 0; - if (QAudio::ActiveState == m_state || QAudio::IdleState == m_state) { - Q_ASSERT(QAudioFormat() != m_format); - switch (m_mode) { - case QAudio::AudioInput: - length = m_audioInput->bufferSize(); - break; - case QAudio::AudioOutput: - length = m_audioOutput->bufferSize(); - break; - } - } - return length; + return m_file ? m_file->size() : m_bufferLength; } void Engine::setWindowFunction(WindowFunction type) @@ -252,7 +234,7 @@ void Engine::startRecording() this, SLOT(audioNotify())); m_count = 0; m_dataLength = 0; - emit dataDurationChanged(0); + emit dataLengthChanged(0); m_audioInputIODevice = m_audioInput->start(); CHECKED_CONNECT(m_audioInputIODevice, SIGNAL(readyRead()), this, SLOT(audioDataReady())); @@ -275,7 +257,6 @@ void Engine::startPlayback() } else { m_spectrumAnalyser.cancelCalculation(); spectrumChanged(0, 0, FrequencySpectrum()); - setPlayPosition(0, true); stopRecording(); m_mode = QAudio::AudioOutput; @@ -284,10 +265,17 @@ void Engine::startPlayback() CHECKED_CONNECT(m_audioOutput, SIGNAL(notify()), this, SLOT(audioNotify())); m_count = 0; - m_audioOutputIODevice.close(); - m_audioOutputIODevice.setBuffer(&m_buffer); - m_audioOutputIODevice.open(QIODevice::ReadOnly); - m_audioOutput->start(&m_audioOutputIODevice); + if (m_file) { + m_file->seek(0); + m_bufferPosition = 0; + m_dataLength = 0; + m_audioOutput->start(m_file); + } else { + m_audioOutputIODevice.close(); + m_audioOutputIODevice.setBuffer(&m_buffer); + m_audioOutputIODevice.open(QIODevice::ReadOnly); + m_audioOutput->start(&m_audioOutputIODevice); + } } } } @@ -332,40 +320,55 @@ void Engine::audioNotify() { switch (m_mode) { case QAudio::AudioInput: { - const qint64 recordPosition = - qMin(BufferDurationUs, m_audioInput->processedUSecs()); + const qint64 recordPosition = qMin(m_bufferLength, audioLength(m_format, m_audioInput->processedUSecs())); setRecordPosition(recordPosition); - - // Calculate level of most recently captured data - qint64 levelLength = audioLength(m_format, LevelWindowUs); - levelLength = qMin(m_dataLength, levelLength); - const qint64 levelPosition = m_dataLength - levelLength; - calculateLevel(levelPosition, levelLength); - - // Calculate spectrum of most recently captured data - if (m_dataLength >= m_spectrumLengthBytes) { - const qint64 spectrumPosition = m_dataLength - m_spectrumLengthBytes; + const qint64 levelPosition = m_dataLength - m_levelBufferLength; + if (levelPosition >= 0) + calculateLevel(levelPosition, m_levelBufferLength); + if (m_dataLength >= m_spectrumBufferLength) { + const qint64 spectrumPosition = m_dataLength - m_spectrumBufferLength; calculateSpectrum(spectrumPosition); } + emit bufferChanged(0, m_dataLength, m_buffer); } break; case QAudio::AudioOutput: { - const qint64 playPosition = - qMin(dataDuration(), m_audioOutput->processedUSecs()); - setPlayPosition(playPosition); - - qint64 analysisPosition = audioLength(m_format, playPosition); - - // Calculate level of data starting at current playback position - const qint64 levelLength = audioLength(m_format, LevelWindowUs); - if (analysisPosition + levelLength < m_dataLength) - calculateLevel(analysisPosition, levelLength); - - if (analysisPosition + m_spectrumLengthBytes < m_dataLength) - calculateSpectrum(analysisPosition); - - if (dataDuration() == playPosition) - stopPlayback(); + const qint64 playPosition = audioLength(m_format, m_audioOutput->processedUSecs()); + setPlayPosition(qMin(bufferLength(), playPosition)); + const qint64 levelPosition = playPosition - m_levelBufferLength; + const qint64 spectrumPosition = playPosition - m_spectrumBufferLength; + if (m_file) { + if (levelPosition > m_bufferPosition || + spectrumPosition > m_bufferPosition || + qMax(m_levelBufferLength, m_spectrumBufferLength) > m_dataLength) { + m_bufferPosition = 0; + m_dataLength = 0; + // Data needs to be read into m_buffer in order to be analysed + const qint64 readPos = qMax(qint64(0), qMin(levelPosition, spectrumPosition)); + const qint64 readEnd = qMin(m_analysisFile->size(), qMax(levelPosition + m_levelBufferLength, spectrumPosition + m_spectrumBufferLength)); + const qint64 readLen = readEnd - readPos + audioLength(m_format, WaveformWindowDuration); + qDebug() << "Engine::audioNotify [1]" + << "analysisFileSize" << m_analysisFile->size() + << "readPos" << readPos + << "readLen" << readLen; + if (m_analysisFile->seek(readPos + m_analysisFile->headerLength())) { + m_buffer.resize(readLen); + m_bufferPosition = readPos; + m_dataLength = m_analysisFile->read(m_buffer.data(), readLen); + qDebug() << "Engine::audioNotify [2]" << "bufferPosition" << m_bufferPosition << "dataLength" << m_dataLength; + } else { + qDebug() << "Engine::audioNotify [2]" << "file seek error"; + } + emit bufferChanged(m_bufferPosition, m_dataLength, m_buffer); + } + } else { + if (playPosition >= m_dataLength) + stopPlayback(); + } + if (levelPosition >= 0 && levelPosition + m_levelBufferLength < m_bufferPosition + m_dataLength) + calculateLevel(levelPosition, m_levelBufferLength); + if (spectrumPosition >= 0 && spectrumPosition + m_spectrumBufferLength < m_bufferPosition + m_dataLength) + calculateSpectrum(spectrumPosition); } break; } @@ -376,27 +379,32 @@ void Engine::audioStateChanged(QAudio::State state) ENGINE_DEBUG << "Engine::audioStateChanged from" << m_state << "to" << state; - if (QAudio::StoppedState == state) { - // Check error - QAudio::Error error = QAudio::NoError; - switch (m_mode) { - case QAudio::AudioInput: - error = m_audioInput->error(); - break; - case QAudio::AudioOutput: - error = m_audioOutput->error(); - break; - } - if (QAudio::NoError != error) { - reset(); - return; + if (QAudio::IdleState == state && m_file && m_file->pos() == m_file->size()) { + stopPlayback(); + } else { + if (QAudio::StoppedState == state) { + // Check error + QAudio::Error error = QAudio::NoError; + switch (m_mode) { + case QAudio::AudioInput: + error = m_audioInput->error(); + break; + case QAudio::AudioOutput: + error = m_audioOutput->error(); + break; + } + if (QAudio::NoError != error) { + reset(); + return; + } } + setState(state); } - setState(state); } void Engine::audioDataReady() { + Q_ASSERT(0 == m_bufferPosition); const qint64 bytesReady = m_audioInput->bytesReady(); const qint64 bytesSpace = m_buffer.size() - m_dataLength; const qint64 bytesToRead = qMin(bytesReady, bytesSpace); @@ -407,9 +415,7 @@ void Engine::audioDataReady() if (bytesRead) { m_dataLength += bytesRead; - - const qint64 duration = audioDuration(m_format, m_dataLength); - emit dataDurationChanged(duration); + emit dataLengthChanged(dataLength()); } if (m_buffer.size() == m_dataLength) @@ -419,9 +425,7 @@ void Engine::audioDataReady() void Engine::spectrumChanged(const FrequencySpectrum &spectrum) { ENGINE_DEBUG << "Engine::spectrumChanged" << "pos" << m_spectrumPosition; - const qint64 positionUs = audioDuration(m_format, m_spectrumPosition); - const qint64 lengthUs = audioDuration(m_format, m_spectrumLengthBytes); - emit spectrumChanged(positionUs, lengthUs, spectrum); + emit spectrumChanged(m_spectrumPosition, m_spectrumBufferLength, spectrum); } @@ -429,12 +433,8 @@ void Engine::spectrumChanged(const FrequencySpectrum &spectrum) // Private functions //----------------------------------------------------------------------------- -void Engine::reset() +void Engine::resetAudioDevices() { - stopRecording(); - stopPlayback(); - setState(QAudio::AudioInput, QAudio::StoppedState); - setFormat(QAudioFormat()); delete m_audioInput; m_audioInput = 0; m_audioInputIODevice = 0; @@ -442,13 +442,29 @@ void Engine::reset() delete m_audioOutput; m_audioOutput = 0; setPlayPosition(0); - m_buffer.clear(); - m_dataLength = 0; m_spectrumPosition = 0; - emit dataDurationChanged(0); setLevel(0.0, 0.0, 0); } +void Engine::reset() +{ + stopRecording(); + stopPlayback(); + setState(QAudio::AudioInput, QAudio::StoppedState); + setFormat(QAudioFormat()); + m_generateTone = false; + delete m_file; + m_file = 0; + delete m_analysisFile; + m_analysisFile = 0; + m_buffer.clear(); + m_bufferPosition = 0; + m_bufferLength = 0; + m_dataLength = 0; + emit dataLengthChanged(0); + resetAudioDevices(); +} + bool Engine::initialize() { bool result = false; @@ -457,45 +473,39 @@ bool Engine::initialize() if (selectFormat()) { if (m_format != format) { - format = m_format; - reset(); - m_format = format; - - const qint64 bufferLength = audioLength(m_format, BufferDurationUs); - m_buffer.resize(bufferLength); - m_buffer.fill(0); - emit bufferDurationChanged(BufferDurationUs); - - if (m_generateTone) { - if (0 == m_tone.endFreq) { - const qreal nyquist = nyquistFrequency(m_format); - m_tone.endFreq = qMin(qreal(SpectrumHighFreq), nyquist); - } - - // Call function defined in utils.h, at global scope - ::generateTone(m_tone, m_format, m_buffer); - m_dataLength = m_buffer.size(); - emit dataDurationChanged(bufferDuration()); - setRecordPosition(bufferDuration()); + resetAudioDevices(); + if (m_file) { + emit bufferLengthChanged(bufferLength()); + emit dataLengthChanged(dataLength()); + emit bufferChanged(0, 0, m_buffer); + setRecordPosition(bufferLength()); result = true; - } else if (m_file) { - const qint64 length = m_wavFile.readData(*m_file, m_buffer, m_format); - if (length) { - m_dataLength = length; - emit dataDurationChanged(dataDuration()); - setRecordPosition(dataDuration()); + } else { + m_bufferLength = audioLength(m_format, BufferDurationUs); + m_buffer.resize(m_bufferLength); + m_buffer.fill(0); + emit bufferLengthChanged(bufferLength()); + if (m_generateTone) { + if (0 == m_tone.endFreq) { + const qreal nyquist = nyquistFrequency(m_format); + m_tone.endFreq = qMin(qreal(SpectrumHighFreq), nyquist); + } + // Call function defined in utils.h, at global scope + ::generateTone(m_tone, m_format, m_buffer); + m_dataLength = m_bufferLength; + emit dataLengthChanged(dataLength()); + emit bufferChanged(0, m_dataLength, m_buffer); + setRecordPosition(m_bufferLength); + result = true; + } else { + emit bufferChanged(0, 0, m_buffer); + m_audioInput = new QAudioInput(m_audioInputDevice, m_format, this); + m_audioInput->setNotifyInterval(NotifyIntervalMs); result = true; } - } else { - m_audioInput = new QAudioInput(m_audioInputDevice, m_format, this); - m_audioInput->setNotifyInterval(NotifyIntervalMs); - result = true; } - m_audioOutput = new QAudioOutput(m_audioOutputDevice, m_format, this); m_audioOutput->setNotifyInterval(NotifyIntervalMs); - m_spectrumLengthBytes = SpectrumLengthSamples * - (m_format.sampleSize() / 8) * m_format.channels(); } } else { if (m_file) @@ -507,6 +517,8 @@ bool Engine::initialize() emit errorMessage(tr("No common input / output format found"), ""); } + ENGINE_DEBUG << "Engine::initialize" << "m_bufferLength" << m_bufferLength; + ENGINE_DEBUG << "Engine::initialize" << "m_dataLength" << m_dataLength; ENGINE_DEBUG << "Engine::initialize" << "format" << m_format; return result; @@ -521,18 +533,10 @@ bool Engine::selectFormat() if (m_file) // Header is read from the WAV file; just need to check whether // it is supported by the audio output device - format = m_wavFile.format(); + format = m_file->fileFormat(); if (m_audioOutputDevice.isFormatSupported(format)) { setFormat(format); foundSupportedFormat = true; - } else { - // Try flipping mono <-> stereo - const int channels = (format.channels() == 1) ? 2 : 1; - format.setChannels(channels); - if (m_audioOutputDevice.isFormatSupported(format)) { - setFormat(format); - foundSupportedFormat = true; - } } } else { @@ -656,12 +660,12 @@ void Engine::calculateLevel(qint64 position, qint64 length) Q_UNUSED(position) Q_UNUSED(length) #else - Q_ASSERT(position + length <= m_dataLength); + Q_ASSERT(position + length <= m_bufferPosition + m_dataLength); qreal peakLevel = 0.0; qreal sum = 0.0; - const char *ptr = m_buffer.constData() + position; + const char *ptr = m_buffer.constData() + position - m_bufferPosition; const char *const end = ptr + length; while (ptr < end) { const qint16 value = *reinterpret_cast(ptr); @@ -687,18 +691,18 @@ void Engine::calculateSpectrum(qint64 position) #ifdef DISABLE_SPECTRUM Q_UNUSED(position) #else - Q_ASSERT(position + m_spectrumLengthBytes <= m_dataLength); - Q_ASSERT(0 == m_spectrumLengthBytes % 2); // constraint of FFT algorithm + Q_ASSERT(position + m_spectrumBufferLength <= m_bufferPosition + m_dataLength); + Q_ASSERT(0 == m_spectrumBufferLength % 2); // constraint of FFT algorithm // QThread::currentThread is marked 'for internal use only', but // we're only using it for debug output here, so it's probably OK :) ENGINE_DEBUG << "Engine::calculateSpectrum" << QThread::currentThread() - << "count" << m_count << "pos" << position << "len" << m_spectrumLengthBytes + << "count" << m_count << "pos" << position << "len" << m_spectrumBufferLength << "spectrumAnalyser.isReady" << m_spectrumAnalyser.isReady(); if(m_spectrumAnalyser.isReady()) { - m_spectrumBuffer = QByteArray::fromRawData(m_buffer.constData() + position, - m_spectrumLengthBytes); + m_spectrumBuffer = QByteArray::fromRawData(m_buffer.constData() + position - m_bufferPosition, + m_spectrumBufferLength); m_spectrumPosition = position; m_spectrumAnalyser.calculate(m_spectrumBuffer, m_format); } @@ -709,6 +713,9 @@ void Engine::setFormat(const QAudioFormat &format) { const bool changed = (format != m_format); m_format = format; + m_levelBufferLength = audioLength(m_format, LevelWindowUs); + m_spectrumBufferLength = SpectrumLengthSamples * + (m_format.sampleSize() / 8) * m_format.channels(); if (changed) emit formatChanged(m_format); } diff --git a/demos/spectrum/app/engine.h b/demos/spectrum/app/engine.h index e14ac83..c97083e 100644 --- a/demos/spectrum/app/engine.h +++ b/demos/spectrum/app/engine.h @@ -91,12 +91,6 @@ public: QAudio::State state() const { return m_state; } /** - * \return Reference to internal audio buffer - * \note This reference is valid for the lifetime of the Engine - */ - const QByteArray& buffer() const { return m_buffer; } - - /** * \return Current audio format * \note May be QAudioFormat() if engine is not initialized */ @@ -129,7 +123,7 @@ public: /** * Position of the audio input device. - * \return Position in microseconds. + * \return Position in bytes. */ qint64 recordPosition() const { return m_recordPosition; } @@ -147,27 +141,21 @@ public: /** * Position of the audio output device. - * \return Position in microseconds. + * \return Position in bytes. */ qint64 playPosition() const { return m_playPosition; } /** * Length of the internal engine buffer. - * \return Buffer length in microseconds. + * \return Buffer length in bytes. */ - qint64 bufferDuration() const; + qint64 bufferLength() const; /** * Amount of data held in the buffer. - * \return Data duration in microseconds. + * \return Data length in bytes. */ - qint64 dataDuration() const; - - /** - * Returns the size of the underlying audio buffer in bytes. - * This should be an approximation of the capture latency. - */ - qint64 audioBufferLength() const; + qint64 dataLength() const { return m_dataLength; } /** * Set window function applied to audio data before spectral analysis. @@ -203,23 +191,23 @@ signals: * Length of buffer has changed. * \param duration Duration in microseconds */ - void bufferDurationChanged(qint64 duration); + void bufferLengthChanged(qint64 duration); /** * Amount of data in buffer has changed. - * \param duration Duration of data in microseconds + * \param Length of data in bytes */ - void dataDurationChanged(qint64 duration); + void dataLengthChanged(qint64 duration); /** * Position of the audio input device has changed. - * \param position Position in microseconds + * \param position Position in bytes */ void recordPositionChanged(qint64 position); /** * Position of the audio output device has changed. - * \param position Position in microseconds + * \param position Position in bytes */ void playPositionChanged(qint64 position); @@ -233,12 +221,19 @@ signals: /** * Spectrum has changed. - * \param position Position of start of window in microseconds - * \param length Length of window in microseconds + * \param position Position of start of window in bytes + * \param length Length of window in bytes * \param spectrum Resulting frequency spectrum */ void spectrumChanged(qint64 position, qint64 length, const FrequencySpectrum &spectrum); + /** + * Buffer containing audio data has changed. + * \param position Position of start of buffer in bytes + * \param buffer Buffer + */ + void bufferChanged(qint64 position, qint64 length, const QByteArray &buffer); + private slots: void audioNotify(); void audioStateChanged(QAudio::State state); @@ -246,6 +241,7 @@ private slots: void spectrumChanged(const FrequencySpectrum &spectrum); private: + void resetAudioDevices(); bool initialize(); bool selectFormat(); void stopRecording(); @@ -275,8 +271,10 @@ private: bool m_generateTone; SweptTone m_tone; - QFile* m_file; - WavFile m_wavFile; + WavFile* m_file; + // We need a second file handle via which to read data into m_buffer + // for analysis + WavFile* m_analysisFile; QAudioFormat m_format; @@ -293,12 +291,15 @@ private: QBuffer m_audioOutputIODevice; QByteArray m_buffer; + qint64 m_bufferPosition; + qint64 m_bufferLength; qint64 m_dataLength; + int m_levelBufferLength; qreal m_rmsLevel; qreal m_peakLevel; - int m_spectrumLengthBytes; + int m_spectrumBufferLength; QByteArray m_spectrumBuffer; SpectrumAnalyser m_spectrumAnalyser; qint64 m_spectrumPosition; diff --git a/demos/spectrum/app/mainwidget.cpp b/demos/spectrum/app/mainwidget.cpp index fba28c6..4b53bbe 100644 --- a/demos/spectrum/app/mainwidget.cpp +++ b/demos/spectrum/app/mainwidget.cpp @@ -65,7 +65,7 @@ MainWidget::MainWidget(QWidget *parent) , m_mode(NoMode) , m_engine(new Engine(this)) #ifndef DISABLE_WAVEFORM - , m_waveform(new Waveform(m_engine->buffer(), this)) + , m_waveform(new Waveform(this)) #endif , m_progressBar(new ProgressBar(this)) , m_spectrograph(new Spectrograph(this)) @@ -166,19 +166,18 @@ void MainWidget::timerEvent(QTimerEvent *event) m_infoMessage->setText(""); } -void MainWidget::positionChanged(qint64 positionUs) +void MainWidget::audioPositionChanged(qint64 position) { #ifndef DISABLE_WAVEFORM - qint64 positionBytes = audioLength(m_engine->format(), positionUs); - m_waveform->positionChanged(positionBytes); + m_waveform->audioPositionChanged(position); #else - Q_UNUSED(positionUs) + Q_UNUSED(position) #endif } -void MainWidget::bufferDurationChanged(qint64 durationUs) +void MainWidget::bufferLengthChanged(qint64 length) { - m_progressBar->bufferDurationChanged(durationUs); + m_progressBar->bufferLengthChanged(length); } @@ -186,18 +185,6 @@ void MainWidget::bufferDurationChanged(qint64 durationUs) // Private slots //----------------------------------------------------------------------------- -void MainWidget::dataDurationChanged(qint64 duration) -{ -#ifndef DISABLE_WAVEFORM - const qint64 dataLength = audioLength(m_engine->format(), duration); - m_waveform->dataLengthChanged(dataLength); -#else - Q_UNUSED(duration) -#endif - - updateButtonStates(); -} - void MainWidget::showFileDialog() { const QString dir; @@ -363,13 +350,13 @@ void MainWidget::connectUi() CHECKED_CONNECT(m_engine, SIGNAL(formatChanged(const QAudioFormat &)), this, SLOT(formatChanged(const QAudioFormat &))); - m_progressBar->bufferDurationChanged(m_engine->bufferDuration()); + m_progressBar->bufferLengthChanged(m_engine->bufferLength()); - CHECKED_CONNECT(m_engine, SIGNAL(bufferDurationChanged(qint64)), - this, SLOT(bufferDurationChanged(qint64))); + CHECKED_CONNECT(m_engine, SIGNAL(bufferLengthChanged(qint64)), + this, SLOT(bufferLengthChanged(qint64))); - CHECKED_CONNECT(m_engine, SIGNAL(dataDurationChanged(qint64)), - this, SLOT(dataDurationChanged(qint64))); + CHECKED_CONNECT(m_engine, SIGNAL(dataLengthChanged(qint64)), + this, SLOT(updateButtonStates())); CHECKED_CONNECT(m_engine, SIGNAL(recordPositionChanged(qint64)), m_progressBar, SLOT(recordPositionChanged(qint64))); @@ -378,10 +365,10 @@ void MainWidget::connectUi() m_progressBar, SLOT(playPositionChanged(qint64))); CHECKED_CONNECT(m_engine, SIGNAL(recordPositionChanged(qint64)), - this, SLOT(positionChanged(qint64))); + this, SLOT(audioPositionChanged(qint64))); CHECKED_CONNECT(m_engine, SIGNAL(playPositionChanged(qint64)), - this, SLOT(positionChanged(qint64))); + this, SLOT(audioPositionChanged(qint64))); CHECKED_CONNECT(m_engine, SIGNAL(levelChanged(qreal, qreal, int)), m_levelMeter, SLOT(levelChanged(qreal, qreal, int))); @@ -397,6 +384,11 @@ void MainWidget::connectUi() CHECKED_CONNECT(m_spectrograph, SIGNAL(infoMessage(QString, int)), this, SLOT(infoMessage(QString, int))); + +#ifndef DISABLE_WAVEFORM + CHECKED_CONNECT(m_engine, SIGNAL(bufferChanged(qint64, qint64, const QByteArray &)), + m_waveform, SLOT(bufferChanged(qint64, qint64, const QByteArray &))); +#endif } void MainWidget::createMenus() @@ -428,7 +420,7 @@ void MainWidget::updateButtonStates() QAudio::IdleState == m_engine->state()); m_pauseButton->setEnabled(pauseEnabled); - const bool playEnabled = (m_engine->dataDuration() && + const bool playEnabled = (/*m_engine->dataLength() &&*/ (QAudio::AudioOutput != m_engine->mode() || (QAudio::ActiveState != m_engine->state() && QAudio::IdleState != m_engine->state()))); diff --git a/demos/spectrum/app/mainwidget.h b/demos/spectrum/app/mainwidget.h index cc1f9ed..13131c0 100644 --- a/demos/spectrum/app/mainwidget.h +++ b/demos/spectrum/app/mainwidget.h @@ -80,22 +80,21 @@ public slots: const FrequencySpectrum &spectrum); void infoMessage(const QString &message, int timeoutMs); void errorMessage(const QString &heading, const QString &detail); - void positionChanged(qint64 position); - void bufferDurationChanged(qint64 duration); + void audioPositionChanged(qint64 position); + void bufferLengthChanged(qint64 length); private slots: void showFileDialog(); void showSettingsDialog(); void showToneGeneratorDialog(); void initializeRecord(); - void dataDurationChanged(qint64 duration); void updateModeMenu(); + void updateButtonStates(); private: void createUi(); void createMenus(); void connectUi(); - void updateButtonStates(); void reset(); enum Mode { @@ -112,7 +111,9 @@ private: Engine* m_engine; +#ifndef DISABLE_WAVEFORM Waveform* m_waveform; +#endif ProgressBar* m_progressBar; Spectrograph* m_spectrograph; LevelMeter* m_levelMeter; diff --git a/demos/spectrum/app/progressbar.cpp b/demos/spectrum/app/progressbar.cpp index 6bfc690..0ac76f1 100644 --- a/demos/spectrum/app/progressbar.cpp +++ b/demos/spectrum/app/progressbar.cpp @@ -44,7 +44,7 @@ ProgressBar::ProgressBar(QWidget *parent) : QWidget(parent) - , m_bufferDuration(0) + , m_bufferLength(0) , m_recordPosition(0) , m_playPosition(0) , m_windowPosition(0) @@ -64,7 +64,7 @@ ProgressBar::~ProgressBar() void ProgressBar::reset() { - m_bufferDuration = 0; + m_bufferLength = 0; m_recordPosition = 0; m_playPosition = 0; m_windowPosition = 0; @@ -86,26 +86,26 @@ void ProgressBar::paintEvent(QPaintEvent * /*event*/) painter.fillRect(rect(), Qt::black); #endif - if (m_bufferDuration) { + if (m_bufferLength) { QRect bar = rect(); - const qreal play = qreal(m_playPosition) / m_bufferDuration; + const qreal play = qreal(m_playPosition) / m_bufferLength; bar.setLeft(rect().left() + play * rect().width()); - const qreal record = qreal(m_recordPosition) / m_bufferDuration; + const qreal record = qreal(m_recordPosition) / m_bufferLength; bar.setRight(rect().left() + record * rect().width()); painter.fillRect(bar, bufferColor); QRect window = rect(); - const qreal windowLeft = qreal(m_windowPosition) / m_bufferDuration; + const qreal windowLeft = qreal(m_windowPosition) / m_bufferLength; window.setLeft(rect().left() + windowLeft * rect().width()); - const qreal windowWidth = qreal(m_windowLength) / m_bufferDuration; + const qreal windowWidth = qreal(m_windowLength) / m_bufferLength; window.setWidth(windowWidth * rect().width()); painter.fillRect(window, windowColor); } } -void ProgressBar::bufferDurationChanged(qint64 bufferSize) +void ProgressBar::bufferLengthChanged(qint64 bufferSize) { - m_bufferDuration = bufferSize; + m_bufferLength = bufferSize; m_recordPosition = 0; m_playPosition = 0; m_windowPosition = 0; @@ -116,7 +116,7 @@ void ProgressBar::bufferDurationChanged(qint64 bufferSize) void ProgressBar::recordPositionChanged(qint64 recordPosition) { Q_ASSERT(recordPosition >= 0); - Q_ASSERT(recordPosition <= m_bufferDuration); + Q_ASSERT(recordPosition <= m_bufferLength); m_recordPosition = recordPosition; repaint(); } @@ -124,7 +124,7 @@ void ProgressBar::recordPositionChanged(qint64 recordPosition) void ProgressBar::playPositionChanged(qint64 playPosition) { Q_ASSERT(playPosition >= 0); - Q_ASSERT(playPosition <= m_bufferDuration); + Q_ASSERT(playPosition <= m_bufferLength); m_playPosition = playPosition; repaint(); } @@ -132,8 +132,8 @@ void ProgressBar::playPositionChanged(qint64 playPosition) void ProgressBar::windowChanged(qint64 position, qint64 length) { Q_ASSERT(position >= 0); - Q_ASSERT(position <= m_bufferDuration); - Q_ASSERT(position + length <= m_bufferDuration); + Q_ASSERT(position <= m_bufferLength); + Q_ASSERT(position + length <= m_bufferLength); m_windowPosition = position; m_windowLength = length; repaint(); diff --git a/demos/spectrum/app/progressbar.h b/demos/spectrum/app/progressbar.h index 8514adb..e715cf5 100644 --- a/demos/spectrum/app/progressbar.h +++ b/demos/spectrum/app/progressbar.h @@ -57,13 +57,13 @@ public: void paintEvent(QPaintEvent *event); public slots: - void bufferDurationChanged(qint64 bufferSize); + void bufferLengthChanged(qint64 length); void recordPositionChanged(qint64 recordPosition); void playPositionChanged(qint64 playPosition); void windowChanged(qint64 position, qint64 length); private: - qint64 m_bufferDuration; + qint64 m_bufferLength; qint64 m_recordPosition; qint64 m_playPosition; qint64 m_windowPosition; diff --git a/demos/spectrum/app/utils.cpp b/demos/spectrum/app/utils.cpp index 4ead6c2..49a7626 100644 --- a/demos/spectrum/app/utils.cpp +++ b/demos/spectrum/app/utils.cpp @@ -49,8 +49,10 @@ qint64 audioDuration(const QAudioFormat &format, qint64 bytes) qint64 audioLength(const QAudioFormat &format, qint64 microSeconds) { - return (format.frequency() * format.channels() * (format.sampleSize() / 8)) + qint64 result = (format.frequency() * format.channels() * (format.sampleSize() / 8)) * microSeconds / 1000000; + result -= result % (format.channelCount() * format.sampleSize()); + return result; } qreal nyquistFrequency(const QAudioFormat &format) diff --git a/demos/spectrum/app/waveform.cpp b/demos/spectrum/app/waveform.cpp index 1f7d315..bd854c0 100644 --- a/demos/spectrum/app/waveform.cpp +++ b/demos/spectrum/app/waveform.cpp @@ -44,12 +44,18 @@ #include #include - -Waveform::Waveform(const QByteArray &buffer, QWidget *parent) +//#define PAINT_EVENT_TRACE +#ifdef PAINT_EVENT_TRACE +# define WAVEFORM_PAINT_DEBUG qDebug() +#else +# define WAVEFORM_PAINT_DEBUG nullDebug() +#endif + +Waveform::Waveform(QWidget *parent) : QWidget(parent) - , m_buffer(buffer) - , m_dataLength(0) - , m_position(0) + , m_bufferPosition(0) + , m_bufferLength(0) + , m_audioPosition(0) , m_active(false) , m_tileLength(0) , m_tileArrayStart(0) @@ -72,19 +78,19 @@ void Waveform::paintEvent(QPaintEvent * /*event*/) painter.fillRect(rect(), Qt::black); if (m_active) { - WAVEFORM_DEBUG << "Waveform::paintEvent" - << "windowPosition" << m_windowPosition - << "windowLength" << m_windowLength; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" + << "windowPosition" << m_windowPosition + << "windowLength" << m_windowLength; qint64 pos = m_windowPosition; const qint64 windowEnd = m_windowPosition + m_windowLength; int destLeft = 0; int destRight = 0; while (pos < windowEnd) { const TilePoint point = tilePoint(pos); - WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos" << pos - << "tileIndex" << point.index - << "positionOffset" << point.positionOffset - << "pixelOffset" << point.pixelOffset; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos" << pos + << "tileIndex" << point.index + << "positionOffset" << point.positionOffset + << "pixelOffset" << point.pixelOffset; if (point.index != NullIndex) { const Tile &tile = m_tiles[point.index]; @@ -104,9 +110,9 @@ void Waveform::paintEvent(QPaintEvent * /*event*/) sourceRect.setLeft(point.pixelOffset); sourceRect.setRight(sourceRight); - WAVEFORM_DEBUG << "Waveform::paintEvent" << "tileIndex" << point.index - << "source" << point.pixelOffset << sourceRight - << "dest" << destLeft << destRight; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "tileIndex" << point.index + << "source" << point.pixelOffset << sourceRight + << "dest" << destLeft << destRight; painter.drawPixmap(destRect, *tile.pixmap, sourceRect); @@ -114,25 +120,25 @@ void Waveform::paintEvent(QPaintEvent * /*event*/) if (point.index < m_tiles.count()) { pos = tilePosition(point.index + 1); - WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos ->" << pos; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos ->" << pos; } else { // Reached end of tile array - WAVEFORM_DEBUG << "Waveform::paintEvent" << "reached end of tile array"; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "reached end of tile array"; break; } } else { // Passed last tile which is painted - WAVEFORM_DEBUG << "Waveform::paintEvent" << "tile" << point.index << "not painted"; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "tile" << point.index << "not painted"; break; } } else { // pos is past end of tile array - WAVEFORM_DEBUG << "Waveform::paintEvent" << "pos" << pos << "past end of tile array"; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "pos" << pos << "past end of tile array"; break; } } - WAVEFORM_DEBUG << "Waveform::paintEvent" << "final pos" << pos << "final x" << destRight; + WAVEFORM_PAINT_DEBUG << "Waveform::paintEvent" << "final pos" << pos << "final x" << destRight; } } @@ -146,7 +152,6 @@ void Waveform::initialize(const QAudioFormat &format, qint64 audioBufferSize, qi { WAVEFORM_DEBUG << "Waveform::initialize" << "audioBufferSize" << audioBufferSize - << "m_buffer.size()" << m_buffer.size() << "windowDurationUs" << windowDurationUs; reset(); @@ -186,8 +191,9 @@ void Waveform::reset() { WAVEFORM_DEBUG << "Waveform::reset"; - m_dataLength = 0; - m_position = 0; + m_bufferPosition = 0; + m_buffer = QByteArray(); + m_audioPosition = 0; m_format = QAudioFormat(); m_active = false; deletePixmaps(); @@ -198,30 +204,31 @@ void Waveform::reset() m_windowLength = 0; } -void Waveform::dataLengthChanged(qint64 length) +void Waveform::bufferChanged(qint64 position, qint64 length, const QByteArray &buffer) { - WAVEFORM_DEBUG << "Waveform::dataLengthChanged" << length; - const qint64 oldLength = m_dataLength; - m_dataLength = length; - - if (m_active) { - if (m_dataLength < oldLength) - positionChanged(m_dataLength); - else - paintTiles(); - } + WAVEFORM_DEBUG << "Waveform::bufferChanged" + << "audioPosition" << m_audioPosition + << "bufferPosition" << position + << "bufferLength" << length; + m_bufferPosition = position; + m_bufferLength = length; + m_buffer = buffer; + paintTiles(); } -void Waveform::positionChanged(qint64 position) +void Waveform::audioPositionChanged(qint64 position) { - WAVEFORM_DEBUG << "Waveform::positionChanged" << position; - - if (position + m_windowLength > m_dataLength) - position = m_dataLength - m_windowLength; - - m_position = position; - - setWindowPosition(position); + WAVEFORM_DEBUG << "Waveform::audioPositionChanged" + << "audioPosition" << position + << "bufferPosition" << m_bufferPosition + << "bufferLength" << m_bufferLength; + + if (position >= m_bufferPosition) { + if (position + m_windowLength > m_bufferPosition + m_bufferLength) + position = qMax(qint64(0), m_bufferPosition + m_bufferLength - m_windowLength); + m_audioPosition = position; + setWindowPosition(position); + } } void Waveform::deletePixmaps() @@ -255,8 +262,6 @@ void Waveform::createPixmaps(const QSize &widgetSize) m_tiles[i].pixmap = m_pixmaps[i]; m_tiles[i].painted = false; } - - paintTiles(); } void Waveform::setWindowPosition(qint64 position) @@ -327,8 +332,9 @@ bool Waveform::paintTiles() for (int i=0; i= tileEnd) { + const qint64 tileStart = m_tileArrayStart + i * m_tileLength; + const qint64 tileEnd = tileStart + m_tileLength; + if (m_bufferPosition <= tileStart && m_bufferPosition + m_bufferLength >= tileEnd) { paintTile(i); updateRequired = true; } @@ -343,16 +349,23 @@ bool Waveform::paintTiles() void Waveform::paintTile(int index) { - WAVEFORM_DEBUG << "Waveform::paintTile" << "index" << index; - const qint64 tileStart = m_tileArrayStart + index * m_tileLength; - Q_ASSERT(m_dataLength >= tileStart + m_tileLength); + + WAVEFORM_DEBUG << "Waveform::paintTile" + << "index" << index + << "bufferPosition" << m_bufferPosition + << "bufferLength" << m_bufferLength + << "start" << tileStart + << "end" << tileStart + m_tileLength; + + Q_ASSERT(m_bufferPosition <= tileStart); + Q_ASSERT(m_bufferPosition + m_bufferLength >= tileStart + m_tileLength); Tile &tile = m_tiles[index]; Q_ASSERT(!tile.painted); const qint16* base = reinterpret_cast(m_buffer.constData()); - const qint16* buffer = base + (tileStart / 2); + const qint16* buffer = base + ((tileStart - m_bufferPosition) / 2); const int numSamples = m_tileLength / (2 * m_format.channels()); QPainter painter(tile.pixmap); @@ -376,6 +389,11 @@ void Waveform::paintTile(int index) for (int i=0; i(ptr) - m_buffer.constData(); + Q_ASSERT(offset >= 0); + Q_ASSERT(offset < m_bufferLength); + const qint16 pcmValue = *ptr; const qreal realValue = pcmToReal(pcmValue); diff --git a/demos/spectrum/app/waveform.h b/demos/spectrum/app/waveform.h index 57c9eec..1c54c86 100644 --- a/demos/spectrum/app/waveform.h +++ b/demos/spectrum/app/waveform.h @@ -60,7 +60,7 @@ QT_FORWARD_DECLARE_CLASS(QByteArray) class Waveform : public QWidget { Q_OBJECT public: - Waveform(const QByteArray &buffer, QWidget *parent = 0); + Waveform(QWidget *parent = 0); ~Waveform(); // QWidget @@ -73,8 +73,8 @@ public: void setAutoUpdatePosition(bool enabled); public slots: - void dataLengthChanged(qint64 length); - void positionChanged(qint64 position); + void bufferChanged(qint64 position, qint64 length, const QByteArray &buffer); + void audioPositionChanged(qint64 position); private: static const int NullIndex = -1; @@ -167,9 +167,11 @@ private: void resetTiles(qint64 newStartPos); private: - const QByteArray& m_buffer; - qint64 m_dataLength; - qint64 m_position; + qint64 m_bufferPosition; + qint64 m_bufferLength; + QByteArray m_buffer; + + qint64 m_audioPosition; QAudioFormat m_format; bool m_active; diff --git a/demos/spectrum/app/wavfile.cpp b/demos/spectrum/app/wavfile.cpp index 74d5918..44c3ac5 100644 --- a/demos/spectrum/app/wavfile.cpp +++ b/demos/spectrum/app/wavfile.cpp @@ -78,179 +78,74 @@ struct CombinedHeader WAVEHeader wave; }; - - -WavFile::WavFile(const QAudioFormat &format, qint64 dataLength) - : m_format(format) - , m_dataLength(dataLength) - , m_dataPosition(0) -{ -} - -bool WavFile::readHeader(QIODevice &device) -{ - if (!device.isSequential()) { - if (!device.seek(0)) - return false; - // XXX: else, assume that current position is the start of the header - } - - CombinedHeader header; - if (device.read(reinterpret_cast(&header), sizeof(CombinedHeader)) != sizeof(CombinedHeader)) - return false; - - if ((memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0 - || memcmp(&header.riff.descriptor.id, "RIFX", 4) == 0) - && memcmp(&header.riff.type, "WAVE", 4) == 0 - && memcmp(&header.wave.descriptor.id, "fmt ", 4) == 0 - && (header.wave.audioFormat == 1 || header.wave.audioFormat == 0)) { - - // Read off remaining header information - DATAHeader dataHeader; - - if (qFromLittleEndian(header.wave.descriptor.size) > sizeof(WAVEHeader)) { - // Extended data available - quint16 extraFormatBytes; - if (device.peek((char*)&extraFormatBytes, sizeof(quint16)) != sizeof(quint16)) - return false; - const qint64 throwAwayBytes = sizeof(quint16) + qFromLittleEndian(extraFormatBytes); - if (device.read(throwAwayBytes).size() != throwAwayBytes) - return false; - } - - if (device.read((char*)&dataHeader, sizeof(DATAHeader)) != sizeof(DATAHeader)) - return false; - - // Establish format - if (memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0) - m_format.setByteOrder(QAudioFormat::LittleEndian); - else - m_format.setByteOrder(QAudioFormat::BigEndian); - - int bps = qFromLittleEndian(header.wave.bitsPerSample); - m_format.setChannels(qFromLittleEndian(header.wave.numChannels)); - m_format.setCodec("audio/pcm"); - m_format.setFrequency(qFromLittleEndian(header.wave.sampleRate)); - m_format.setSampleSize(qFromLittleEndian(header.wave.bitsPerSample)); - m_format.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt); - - m_dataLength = qFromLittleEndian(dataHeader.descriptor.size); - m_dataPosition = 0; - } - - return true; -} - -bool WavFile::writeHeader(QIODevice &device) +WavFile::WavFile(QObject *parent) + : QFile(parent) + , m_headerLength(0) { - CombinedHeader header; - DATAHeader dataHeader; - - memset(&header, 0, sizeof(CombinedHeader)); - - // RIFF header - if (m_format.byteOrder() == QAudioFormat::LittleEndian) - strncpy(&header.riff.descriptor.id[0], "RIFF", 4); - else - strncpy(&header.riff.descriptor.id[0], "RIFX", 4); - qToLittleEndian(quint32(m_dataLength + sizeof(CombinedHeader) + sizeof(DATAHeader) - sizeof(chunk)), - reinterpret_cast(&header.riff.descriptor.size)); - strncpy(&header.riff.type[0], "WAVE", 4); - - // WAVE header - strncpy(&header.wave.descriptor.id[0], "fmt ", 4); - qToLittleEndian(quint32(16), - reinterpret_cast(&header.wave.descriptor.size)); - qToLittleEndian(quint16(1), - reinterpret_cast(&header.wave.audioFormat)); - qToLittleEndian(quint16(m_format.channels()), - reinterpret_cast(&header.wave.numChannels)); - qToLittleEndian(quint32(m_format.frequency()), - reinterpret_cast(&header.wave.sampleRate)); - qToLittleEndian(quint32(m_format.frequency() * m_format.channels() * m_format.sampleSize() / 8), - reinterpret_cast(&header.wave.byteRate)); - qToLittleEndian(quint16(m_format.channels() * m_format.sampleSize() / 8), - reinterpret_cast(&header.wave.blockAlign)); - qToLittleEndian(quint16(m_format.sampleSize()), - reinterpret_cast(&header.wave.bitsPerSample)); - - // DATA header - strncpy(dataHeader.descriptor.id, "data", 4); - qToLittleEndian(quint32(m_dataLength), - reinterpret_cast(&dataHeader.descriptor.size)); - return device.write(reinterpret_cast(&header), sizeof(CombinedHeader)) == sizeof(CombinedHeader) - && device.write(reinterpret_cast(&dataHeader), sizeof(DATAHeader)) == sizeof(DATAHeader); } -const QAudioFormat& WavFile::format() const +bool WavFile::open(const QString &fileName) { - return m_format; + close(); + setFileName(fileName); + return QFile::open(QIODevice::ReadOnly) && readHeader(); } -qint64 WavFile::dataLength() const +const QAudioFormat &WavFile::fileFormat() const { - return m_dataLength; + return m_fileFormat; } -qint64 WavFile::headerLength() +qint64 WavFile::headerLength() const { - return sizeof(CombinedHeader); -} - -bool WavFile::writeDataLength(QIODevice &device, qint64 dataLength) -{ - bool result = false; - if (!device.isSequential()) { - device.seek(40); - unsigned char dataLengthLE[4]; - qToLittleEndian(quint32(dataLength), dataLengthLE); - result = (device.write(reinterpret_cast(dataLengthLE), 4) == 4); - } - return result; +return m_headerLength; } -qint64 WavFile::readData(QIODevice &device, QByteArray &buffer, - QAudioFormat outputFormat) +bool WavFile::readHeader() { - // Sanity checks - if (!outputFormat.isValid()) - outputFormat = m_format; - - if (!isPCMS16LE(outputFormat) || !isPCMS16LE(m_format)) - return 0; - - if (m_dataPosition == m_dataLength) - return 0; - - // Process - qint64 result = 0; - - const int frameSize = 2 * m_format.channels(); // 16 bit samples - QVector inputSample(frameSize); - - qint16 *output = reinterpret_cast(buffer.data()); + seek(0); + CombinedHeader header; + bool result = read(reinterpret_cast(&header), sizeof(CombinedHeader)) == sizeof(CombinedHeader); + if (result) { + if ((memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0 + || memcmp(&header.riff.descriptor.id, "RIFX", 4) == 0) + && memcmp(&header.riff.type, "WAVE", 4) == 0 + && memcmp(&header.wave.descriptor.id, "fmt ", 4) == 0 + && (header.wave.audioFormat == 1 || header.wave.audioFormat == 0)) { + + // Read off remaining header information + DATAHeader dataHeader; + + if (qFromLittleEndian(header.wave.descriptor.size) > sizeof(WAVEHeader)) { + // Extended data available + quint16 extraFormatBytes; + if (peek((char*)&extraFormatBytes, sizeof(quint16)) != sizeof(quint16)) + return false; + const qint64 throwAwayBytes = sizeof(quint16) + qFromLittleEndian(extraFormatBytes); + if (read(throwAwayBytes).size() != throwAwayBytes) + return false; + } - while (result < buffer.size()) { - if (m_dataPosition == m_dataLength) - break; + if (read((char*)&dataHeader, sizeof(DATAHeader)) != sizeof(DATAHeader)) + return false; - // XXX only working with particular alignments - if (device.read(inputSample.data(), inputSample.count())) { - int inputIdx = 0; - for (int outputIdx = 0; outputIdx < outputFormat.channels(); ++outputIdx) { - const qint16* input = reinterpret_cast(inputSample.data() + 2 * inputIdx); - *output++ = qFromLittleEndian(*input); - result += 2; - if (inputIdx < m_format.channels()) - ++inputIdx; - } - m_dataPosition += frameSize; + // Establish format + if (memcmp(&header.riff.descriptor.id, "RIFF", 4) == 0) + m_fileFormat.setByteOrder(QAudioFormat::LittleEndian); + else + m_fileFormat.setByteOrder(QAudioFormat::BigEndian); + + int bps = qFromLittleEndian(header.wave.bitsPerSample); + m_fileFormat.setChannels(qFromLittleEndian(header.wave.numChannels)); + m_fileFormat.setCodec("audio/pcm"); + m_fileFormat.setFrequency(qFromLittleEndian(header.wave.sampleRate)); + m_fileFormat.setSampleSize(qFromLittleEndian(header.wave.bitsPerSample)); + m_fileFormat.setSampleType(bps == 8 ? QAudioFormat::UnSignedInt : QAudioFormat::SignedInt); } else { - break; + result = false; } } - + m_headerLength = pos(); return result; } - diff --git a/demos/spectrum/app/wavfile.h b/demos/spectrum/app/wavfile.h index fc14b08..935e935 100644 --- a/demos/spectrum/app/wavfile.h +++ b/demos/spectrum/app/wavfile.h @@ -46,38 +46,22 @@ #include #include -/** - * Helper class for reading WAV files - * - * See https://ccrma.stanford.edu/courses/422/projects/WaveFormat/ - */ -class WavFile +class WavFile : public QFile { public: - WavFile(const QAudioFormat &format = QAudioFormat(), - qint64 dataLength = 0); + WavFile(QObject *parent = 0); - // Reads WAV header and seeks to start of data - bool readHeader(QIODevice &device); + bool open(const QString &fileName); + const QAudioFormat &fileFormat() const; + qint64 headerLength() const; - // Writes WAV header - bool writeHeader(QIODevice &device); - - // Read PCM data - qint64 readData(QIODevice &device, QByteArray &buffer, - QAudioFormat outputFormat = QAudioFormat()); - - const QAudioFormat& format() const; - qint64 dataLength() const; - - static qint64 headerLength(); - - static bool writeDataLength(QIODevice &device, qint64 dataLength); +private: + bool readHeader(); private: - QAudioFormat m_format; - qint64 m_dataLength; - qint64 m_dataPosition; + QAudioFormat m_fileFormat; + qint64 m_headerLength; + }; #endif -- cgit v0.12 From 41afd00317922946ca2539d0be565bd8f917d239 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Fri, 29 Oct 2010 16:00:41 +0200 Subject: Fix compilation in namespace Reviewed-by: Joao --- src/corelib/global/qglobal.h | 2 +- src/corelib/tools/qscopedpointer.h | 2 +- src/corelib/tools/qshareddata.h | 4 ++-- src/corelib/tools/qsharedpointer_impl.h | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 4e78ab1..50f1538 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -2092,7 +2092,7 @@ inline void qSwap(T &value1, T &value2) #define Q_DECLARE_SHARED_STL(TYPE) \ QT_END_NAMESPACE \ namespace std { \ - template<> inline void swap(TYPE &value1, TYPE &value2) \ + template<> inline void swap(QT_PREPEND_NAMESPACE(TYPE) &value1, QT_PREPEND_NAMESPACE(TYPE) &value2) \ { swap(value1.data_ptr(), value2.data_ptr()); } \ } \ QT_BEGIN_NAMESPACE diff --git a/src/corelib/tools/qscopedpointer.h b/src/corelib/tools/qscopedpointer.h index a24cc71..b3a6db6 100644 --- a/src/corelib/tools/qscopedpointer.h +++ b/src/corelib/tools/qscopedpointer.h @@ -190,7 +190,7 @@ Q_INLINE_TEMPLATE void qSwap(QScopedPointer &p1, QScopedPointer - Q_INLINE_TEMPLATE void swap(QScopedPointer &p1, QScopedPointer &p2) + Q_INLINE_TEMPLATE void swap(QT_PREPEND_NAMESPACE(QScopedPointer) &p1, QT_PREPEND_NAMESPACE(QScopedPointer) &p2) { p1.swap(p2); } } QT_BEGIN_NAMESPACE diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h index 1079595..45456fe 100644 --- a/src/corelib/tools/qshareddata.h +++ b/src/corelib/tools/qshareddata.h @@ -267,11 +267,11 @@ Q_INLINE_TEMPLATE void qSwap(QExplicitlySharedDataPointer &p1, QExplicitlySha QT_END_NAMESPACE namespace std { template - Q_INLINE_TEMPLATE void swap(QSharedDataPointer &p1, QSharedDataPointer &p2) + Q_INLINE_TEMPLATE void swap(QT_PREPEND_NAMESPACE(QSharedDataPointer) &p1, QT_PREPEND_NAMESPACE(QSharedDataPointer) &p2) { p1.swap(p2); } template - Q_INLINE_TEMPLATE void swap(QExplicitlySharedDataPointer &p1, QExplicitlySharedDataPointer &p2) + Q_INLINE_TEMPLATE void swap(QT_PREPEND_NAMESPACE(QExplicitlySharedDataPointer) &p1, QT_PREPEND_NAMESPACE(QExplicitlySharedDataPointer) &p2) { p1.swap(p2); } } QT_BEGIN_NAMESPACE diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 965ac14..ef8c454 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -788,7 +788,7 @@ inline void qSwap(QSharedPointer &p1, QSharedPointer &p2) QT_END_NAMESPACE namespace std { template - inline void swap(QSharedPointer &p1, QSharedPointer &p2) + inline void swap(QT_PREPEND_NAMESPACE(QSharedPointer) &p1, QT_PREPEND_NAMESPACE(QSharedPointer) &p2) { p1.swap(p2); } } QT_BEGIN_NAMESPACE -- cgit v0.12 From 66b9f79a9577ee50ca0a9ef8a2ac7a09a3e68a50 Mon Sep 17 00:00:00 2001 From: Lorn Potter Date: Sat, 30 Oct 2010 05:15:30 +1000 Subject: dbus does not use this. fix build. Reviewed-by: trust me --- src/plugins/bearer/connman/qconnmanservice_linux.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/plugins/bearer/connman/qconnmanservice_linux.cpp b/src/plugins/bearer/connman/qconnmanservice_linux.cpp index 46b6e80..952a444 100644 --- a/src/plugins/bearer/connman/qconnmanservice_linux.cpp +++ b/src/plugins/bearer/connman/qconnmanservice_linux.cpp @@ -79,7 +79,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QLatin1String(CONNMAN_MANAGER_PATH), QLatin1String(CONNMAN_MANAGER_INTERFACE), QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(const QString &, const QDBusVariant & ))), Qt::UniqueConnection) { + this,SIGNAL(propertyChanged(const QString &, const QDBusVariant & )))) { qWarning() << "PropertyCHanged not connected"; } } @@ -89,7 +89,7 @@ if (QLatin1String(signal) == SIGNAL(propertyChanged(QString,QDBusVariant))) { QLatin1String(CONNMAN_MANAGER_PATH), QLatin1String(CONNMAN_MANAGER_INTERFACE), QLatin1String("StateChanged"), - this,SIGNAL(stateChanged(const QString&))), Qt::UniqueConnection) { + this,SIGNAL(stateChanged(const QString&)))) { qWarning() << "StateChanged not connected"; } @@ -338,7 +338,7 @@ void QConnmanNetworkInterface::connectNotify(const char *signal) this->path(), QLatin1String(CONNMAN_NETWORK_INTERFACE), QLatin1String("PropertyChanged"), - this,SIGNAL(propertyChanged(QString,QDBusVariant))), Qt::UniqueConnection) { + this,SIGNAL(propertyChanged(QString,QDBusVariant)))) { qWarning() << "network properties not connected"; } } @@ -350,7 +350,7 @@ void QConnmanNetworkInterface::connectNotify(const char *signal) this->path(), QLatin1String(CONNMAN_NETWORK_INTERFACE), QLatin1String("PropertyChanged"), - helper,SLOT(propertyChanged(QString,QDBusVariant))), Qt::UniqueConnection; + helper,SLOT(propertyChanged(QString,QDBusVariant))); QObject::connect(helper,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), this,SIGNAL(propertyChangedContext(const QString &,const QString &,const QDBusVariant &)), Qt::UniqueConnection); -- cgit v0.12 From d548fe325f8293a9bb444a317e5191a9b639d24e Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Sat, 30 Oct 2010 16:12:22 +0200 Subject: Fix compilation in qglobal.h when included from a .c file We cannot include c++ header from C files --- src/corelib/global/qglobal.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h index 50f1538..b75a3d8 100644 --- a/src/corelib/global/qglobal.h +++ b/src/corelib/global/qglobal.h @@ -43,9 +43,6 @@ #define QGLOBAL_H #include -#ifndef QT_NO_STL -#include -#endif #define QT_VERSION_STR "4.8.0" /* @@ -67,6 +64,10 @@ #ifdef __cplusplus +#ifndef QT_NO_STL +#include +#endif + #ifndef QT_NAMESPACE /* user namespace */ # define QT_PREPEND_NAMESPACE(name) ::name -- cgit v0.12 From 95e00f7d712ee51389948a018b27c0d1dde4fa99 Mon Sep 17 00:00:00 2001 From: Yann Bodson Date: Mon, 1 Nov 2010 11:11:58 +1000 Subject: Fix QML visual tests on Mac. Task-number: QTBUG-14792 --- .../qmlvisual/focusscope/data-MAC/test3.0.png | Bin 0 -> 1549 bytes .../qmlvisual/focusscope/data-MAC/test3.1.png | Bin 0 -> 1140 bytes .../qmlvisual/focusscope/data-MAC/test3.2.png | Bin 0 -> 1338 bytes .../qmlvisual/focusscope/data-MAC/test3.3.png | Bin 0 -> 1221 bytes .../qmlvisual/focusscope/data-MAC/test3.qml | 1327 ++++++ .../align/data-MAC/multilineAlign.0.png | Bin 0 -> 2434 bytes .../align/data-MAC/multilineAlign.qml | 247 ++ .../baseline/data-MAC/parentanchor.qml | 131 + .../qdeclarativetext/elide/data-MAC/elide.0.png | Bin 2276 -> 1613 bytes .../qdeclarativetext/elide/data-MAC/elide.qml | 132 +- .../qdeclarativetext/elide/data-MAC/elide2.0.png | Bin 4818 -> 3477 bytes .../qdeclarativetext/elide/data-MAC/elide2.1.png | Bin 4089 -> 3080 bytes .../qdeclarativetext/elide/data-MAC/elide2.2.png | Bin 3128 -> 2501 bytes .../qdeclarativetext/elide/data-MAC/elide2.3.png | Bin 1963 -> 1574 bytes .../qdeclarativetext/elide/data-MAC/elide2.qml | 482 +- .../elide/data-MAC/multilength.0.png | Bin 736 -> 2877 bytes .../elide/data-MAC/multilength.qml | 146 +- .../qdeclarativetext/font/data-MAC/plaintext.0.png | Bin 98050 -> 95506 bytes .../qdeclarativetext/font/data-MAC/richtext.0.png | Bin 125068 -> 121473 bytes .../data-MAC/cursorDelegate.0.png | Bin 793 -> 3542 bytes .../data-MAC/cursorDelegate.1.png | Bin 795 -> 3566 bytes .../data-MAC/cursorDelegate.2.png | Bin 803 -> 3592 bytes .../data-MAC/cursorDelegate.3.png | Bin 805 -> 3570 bytes .../data-MAC/cursorDelegate.4.png | Bin 805 -> 3569 bytes .../data-MAC/cursorDelegate.5.png | Bin 805 -> 3147 bytes .../data-MAC/cursorDelegate.6.png | Bin 799 -> 3145 bytes .../data-MAC/cursorDelegate.7.png | Bin 799 -> 3146 bytes .../data-MAC/cursorDelegate.8.png | Bin 803 -> 3144 bytes .../data-MAC/cursorDelegate.9.png | Bin 0 -> 3135 bytes .../data-MAC/cursorDelegate.qml | 3050 +++---------- .../qdeclarativetextedit/data-MAC/qt-669.0.png | Bin 365 -> 3293 bytes .../qdeclarativetextedit/data-MAC/qt-669.1.png | Bin 365 -> 3298 bytes .../qdeclarativetextedit/data-MAC/qt-669.2.png | Bin 366 -> 3290 bytes .../qdeclarativetextedit/data-MAC/qt-669.3.png | Bin 362 -> 3295 bytes .../qdeclarativetextedit/data-MAC/qt-669.qml | 530 +-- .../data-MAC/usingMultilineEdit.0.png | Bin 0 -> 4954 bytes .../data-MAC/usingMultilineEdit.1.png | Bin 0 -> 5289 bytes .../data-MAC/usingMultilineEdit.10.png | Bin 0 -> 8028 bytes .../data-MAC/usingMultilineEdit.11.png | Bin 0 -> 8028 bytes .../data-MAC/usingMultilineEdit.2.png | Bin 0 -> 5820 bytes .../data-MAC/usingMultilineEdit.3.png | Bin 0 -> 6293 bytes .../data-MAC/usingMultilineEdit.4.png | Bin 0 -> 6484 bytes .../data-MAC/usingMultilineEdit.5.png | Bin 0 -> 6657 bytes .../data-MAC/usingMultilineEdit.6.png | Bin 0 -> 7006 bytes .../data-MAC/usingMultilineEdit.7.png | Bin 0 -> 6792 bytes .../data-MAC/usingMultilineEdit.8.png | Bin 0 -> 7844 bytes .../data-MAC/usingMultilineEdit.9.png | Bin 0 -> 8028 bytes .../data-MAC/usingMultilineEdit.qml | 4687 ++++++++++++++++++++ .../qdeclarativetextedit/data-MAC/wrap.0.png | Bin 0 -> 11729 bytes .../qdeclarativetextedit/data-MAC/wrap.1.png | Bin 0 -> 11956 bytes .../qdeclarativetextedit/data-MAC/wrap.2.png | Bin 0 -> 12323 bytes .../qdeclarativetextedit/data-MAC/wrap.3.png | Bin 0 -> 12931 bytes .../qdeclarativetextedit/data-MAC/wrap.4.png | Bin 0 -> 13447 bytes .../qdeclarativetextedit/data-MAC/wrap.5.png | Bin 0 -> 13478 bytes .../qdeclarativetextedit/data-MAC/wrap.6.png | Bin 0 -> 13478 bytes .../qdeclarativetextedit/data-MAC/wrap.qml | 2467 +++++++++++ .../data-MAC/cursorDelegate.0.png | Bin 793 -> 3557 bytes .../data-MAC/cursorDelegate.1.png | Bin 796 -> 4062 bytes .../data-MAC/cursorDelegate.2.png | Bin 804 -> 3529 bytes .../data-MAC/cursorDelegate.3.png | Bin 805 -> 3563 bytes .../data-MAC/cursorDelegate.4.png | Bin 805 -> 3566 bytes .../data-MAC/cursorDelegate.qml | 2966 +++---------- .../qdeclarativetextinput/data-MAC/echoMode.0.png | Bin 0 -> 681 bytes .../qdeclarativetextinput/data-MAC/echoMode.1.png | Bin 0 -> 1299 bytes .../qdeclarativetextinput/data-MAC/echoMode.2.png | Bin 0 -> 1968 bytes .../qdeclarativetextinput/data-MAC/echoMode.qml | 1043 +++++ .../qdeclarativetextinput/data-MAC/hAlign.qml | 107 + tools/qml/qdeclarativetester.cpp | 8 + 68 files changed, 11728 insertions(+), 5595 deletions(-) create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png create mode 100644 tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.10.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.11.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.7.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.8.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.9.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.3.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.4.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.5.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.6.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.0.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.png create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml create mode 100644 tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/hAlign.qml diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png new file mode 100644 index 0000000..e469a79 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.0.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png new file mode 100644 index 0000000..905603f Binary files /dev/null and b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.1.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png new file mode 100644 index 0000000..5cbd3bd Binary files /dev/null and b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.2.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png new file mode 100644 index 0000000..851c1ba Binary files /dev/null and b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.3.png differ diff --git a/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml new file mode 100644 index 0000000..0c9747e --- /dev/null +++ b/tests/auto/declarative/qmlvisual/focusscope/data-MAC/test3.qml @@ -0,0 +1,1327 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 32 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 48 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 64 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 80 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 96 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 112 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 128 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 144 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 160 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 176 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 192 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 208 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 224 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 240 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 256 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 272 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 288 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 304 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 320 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 336 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 352 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 368 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 384 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 400 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 416 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 432 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 448 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 464 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 480 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 496 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 512 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 528 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "be06cc567f08fbc0cd60d753a19df162" + } + Frame { + msec: 560 + hash: "c4cf6807b423553872e848146e79efb3" + } + Frame { + msec: 576 + hash: "b83923f1eef68a4a8dd36acad0f4b592" + } + Frame { + msec: 592 + hash: "5599829a04f2c2a6c6181c5857762ba0" + } + Frame { + msec: 608 + hash: "95da52b5add95150dd446bc5055a2b60" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 624 + hash: "9bb2757c3b1bbc051edd9ebd240611f8" + } + Frame { + msec: 640 + hash: "25213fbced4c67f42ce35d07db93bb32" + } + Frame { + msec: 656 + hash: "2a9ded25ed2dbb9563f9c14084234a22" + } + Frame { + msec: 672 + hash: "2f532511a50d743aa1c7ebcc9b2b7350" + } + Frame { + msec: 688 + hash: "2f532511a50d743aa1c7ebcc9b2b7350" + } + Frame { + msec: 704 + hash: "2f532511a50d743aa1c7ebcc9b2b7350" + } + Frame { + msec: 720 + hash: "2f532511a50d743aa1c7ebcc9b2b7350" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 736 + hash: "8c9f7d72e077a7e75d185a2ecbdcc77c" + } + Frame { + msec: 752 + hash: "55a417e91f182ebd28dd7264d8b76363" + } + Frame { + msec: 768 + hash: "01a637de9f60c82bfd9140e852e17574" + } + Frame { + msec: 784 + hash: "01194b2c3489ea7298e961979064aab3" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 800 + hash: "f6126328d483536d3f161f71d40821df" + } + Frame { + msec: 816 + hash: "b99dd9793a63bbdab37cfe236d56c589" + } + Frame { + msec: 832 + hash: "825f39b42d0b2e0d894874713b731cfc" + } + Frame { + msec: 848 + hash: "7729b9c2133c52e50f43d6100a24e9c2" + } + Frame { + msec: 864 + hash: "e2f3bec9571b08b451309221b34ace5e" + } + Frame { + msec: 880 + hash: "e2f3bec9571b08b451309221b34ace5e" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 896 + hash: "8e59b002437ec17043d11c92556365fd" + } + Frame { + msec: 912 + hash: "3809a54af9c9a4b15aa8b82caa5b703f" + } + Frame { + msec: 928 + hash: "96cb1ab7123c54d4fa0d93b6501a439d" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 944 + hash: "de74cd5be709954522dd02945d6da9c9" + } + Frame { + msec: 960 + image: "test3.0.png" + } + Frame { + msec: 976 + hash: "d3ff94471da3620701d62b87f37fca8b" + } + Frame { + msec: 992 + hash: "15bccb078b9061ef50c73a974e2f43fa" + } + Frame { + msec: 1008 + hash: "ea2059d511fdab60e77e9261f81aadfb" + } + Frame { + msec: 1024 + hash: "ea2059d511fdab60e77e9261f81aadfb" + } + Frame { + msec: 1040 + hash: "ea2059d511fdab60e77e9261f81aadfb" + } + Frame { + msec: 1056 + hash: "ea2059d511fdab60e77e9261f81aadfb" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1072 + hash: "5b68568968d0de3a9bad8d053045f45c" + } + Frame { + msec: 1088 + hash: "6b6da385fbc00e3542d7007524ff87f6" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1104 + hash: "bba5021ad78a5a142cf54d4db8d8689e" + } + Frame { + msec: 1120 + hash: "5c223d5dcf028cd3bac18b21359253f3" + } + Frame { + msec: 1136 + hash: "c5b09a11d466fd90e1014f58755ec77b" + } + Frame { + msec: 1152 + hash: "f4ba8fcc4f955e25c2364d8ee1054d0d" + } + Frame { + msec: 1168 + hash: "2a6009e790cd98e3a67c107b0f08e00b" + } + Frame { + msec: 1184 + hash: "caa1b5ee40dc20c87516b7292a86f79b" + } + Frame { + msec: 1200 + hash: "200dd4ac9c40c6eb32ad43570995f17d" + } + Frame { + msec: 1216 + hash: "200dd4ac9c40c6eb32ad43570995f17d" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1232 + hash: "2333dcdf0f46ade554e036caa5e3cb31" + } + Frame { + msec: 1248 + hash: "9b09c65db96f483dec7ba3a55b5a91e6" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1264 + hash: "49fc76245e741968095ab689195da40c" + } + Frame { + msec: 1280 + hash: "4e991b92348d813f5a3a1080270a88a3" + } + Frame { + msec: 1296 + hash: "1e4a07fc966dab9ee0d39b25a4c43c09" + } + Frame { + msec: 1312 + hash: "ade33b908f2a5e6916a74bc00b08414e" + } + Frame { + msec: 1328 + hash: "481b41b7bc8fafcb40b7d09fcfc2e86e" + } + Frame { + msec: 1344 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1360 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1376 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1392 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1408 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1424 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1440 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1456 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1472 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 1488 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1504 + hash: "2a8a2867f38ff05a9ef5fa50fe7de229" + } + Frame { + msec: 1520 + hash: "824ec4f9e596a67fe6ca17ea03529c1f" + } + Frame { + msec: 1536 + hash: "bf7d9c49d0a0ff4d03ceadf8d797a774" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1552 + hash: "3e3c62601c2965e851e8b5c0adb73651" + } + Frame { + msec: 1568 + hash: "ed7357b2596da4683bb19cbf1dcd6458" + } + Frame { + msec: 1584 + hash: "32ed0774f926341af504b716bd9394e1" + } + Frame { + msec: 1600 + hash: "2d4ffbd7cf53ca4824d206d4a4608ebb" + } + Frame { + msec: 1616 + hash: "a7a0b6bd336f00a10818bdd9992a29bb" + } + Frame { + msec: 1632 + hash: "55801794958126a1890bc0122084ee20" + } + Frame { + msec: 1648 + hash: "55801794958126a1890bc0122084ee20" + } + Frame { + msec: 1664 + hash: "55801794958126a1890bc0122084ee20" + } + Frame { + msec: 1680 + hash: "55801794958126a1890bc0122084ee20" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1696 + hash: "49573efd5a0bc65107a074fb35d67f63" + } + Frame { + msec: 1712 + hash: "c9bf07bc12f97c6d0eef816ce4423f5b" + } + Frame { + msec: 1728 + hash: "ab91f24c27d52123502815381e926cdc" + } + Frame { + msec: 1744 + hash: "32ca7e06569a63d56ab71c67c9f82d60" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1760 + hash: "9e5f04f019ccd1f27b511faeb7470e10" + } + Frame { + msec: 1776 + hash: "5544186a3338dd788367fa4262815204" + } + Frame { + msec: 1792 + hash: "c01aa7b7363faf99f69b90be8843f059" + } + Frame { + msec: 1808 + hash: "6bd1ec848b817ef978b4dfae4eb23c1e" + } + Frame { + msec: 1824 + hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b" + } + Frame { + msec: 1840 + hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b" + } + Frame { + msec: 1856 + hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b" + } + Frame { + msec: 1872 + hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1888 + hash: "04a3efd4b810417632726048bdffa904" + } + Frame { + msec: 1904 + hash: "c347e7d3dccba41102e2b669c9e9c0a0" + } + Frame { + msec: 1920 + image: "test3.1.png" + } + Frame { + msec: 1936 + hash: "47c9794374c383e1f595e60ea6890e11" + } + Frame { + msec: 1952 + hash: "73cdfe34edab93baea779896169b4195" + } + Key { + type: 7 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1968 + hash: "53add51d9e11a1fc4d0f6e3d1c6a70bc" + } + Frame { + msec: 1984 + hash: "90143346b171faf5bdb7d4d0c0556b24" + } + Frame { + msec: 2000 + hash: "e4e642507d3a631f5813a11cb7673c91" + } + Frame { + msec: 2016 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2032 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2048 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2064 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2080 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2096 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2112 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2128 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2144 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2160 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2176 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2192 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2208 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2224 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2240 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2256 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2272 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2288 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2304 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2320 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2336 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2352 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2368 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2384 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2400 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2416 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2432 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2448 + hash: "f5f1725edd19f1735139d178955533f8" + } + Frame { + msec: 2464 + hash: "f5f1725edd19f1735139d178955533f8" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2480 + hash: "512e992c6d621225735c37e2626714ad" + } + Frame { + msec: 2496 + hash: "1a708d62af48302e93dda0ef0822aebb" + } + Frame { + msec: 2512 + hash: "220660969092ba1b17addc6ba7148e06" + } + Frame { + msec: 2528 + hash: "9dcdd42efc9beb957abdeaf2ee01fc43" + } + Frame { + msec: 2544 + hash: "5995ac01ee680d6747dc78c36f70b577" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2560 + hash: "c6eb964d8f4bf849df63eebdfbf6e286" + } + Frame { + msec: 2576 + hash: "cff1925a172e278a36068886f0efbcbf" + } + Frame { + msec: 2592 + hash: "4c725a05332806387713ab54302c559f" + } + Frame { + msec: 2608 + hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b" + } + Frame { + msec: 2624 + hash: "b75bd8d4e4f3fb5067b05ebf37f92e9b" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2640 + hash: "0cb7eeb24a6845d43ce0662c91b72bd3" + } + Frame { + msec: 2656 + hash: "6dedbf7dc59b05dc57355141de0b660d" + } + Frame { + msec: 2672 + hash: "5f82259afdabef688dd76729b5f847c7" + } + Frame { + msec: 2688 + hash: "b67d418427db34726ddada60f76178a6" + } + Frame { + msec: 2704 + hash: "780c9551f55fd46d294a1eef3b34aa34" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2720 + hash: "521efe1778b2d2031071b55f30999de9" + } + Frame { + msec: 2736 + hash: "49539356de68b7cd2cea52986ed2bb67" + } + Frame { + msec: 2752 + hash: "55801794958126a1890bc0122084ee20" + } + Frame { + msec: 2768 + hash: "55801794958126a1890bc0122084ee20" + } + Frame { + msec: 2784 + hash: "55801794958126a1890bc0122084ee20" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2800 + hash: "b08ee15bfd1916b9619a0a3eeeec90b6" + } + Frame { + msec: 2816 + hash: "3b4e65a0d4ee764d418d82a055ba9c87" + } + Frame { + msec: 2832 + hash: "269d37497b0cd292a5b03124d1687ff6" + } + Frame { + msec: 2848 + hash: "59fecd7ec62bf8c89e2222744d36e194" + } + Frame { + msec: 2864 + hash: "71deceeac8b42a70868bb3ff788543b5" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2880 + image: "test3.2.png" + } + Frame { + msec: 2896 + hash: "ad790d242e84fec0bd75e1d7771682d7" + } + Frame { + msec: 2912 + hash: "c09f4fca4ae14e0e41d9b58c1b83096f" + } + Frame { + msec: 2928 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Frame { + msec: 2944 + hash: "68b528414ba662f14ea71511a01f8d33" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 2960 + hash: "015bf8203d45e5d477242055a3f19bfb" + } + Frame { + msec: 2976 + hash: "ba2fb1258a2f3a81882780d3c7d5320a" + } + Frame { + msec: 2992 + hash: "3637ffd219d403ed433fd72cd68a9b23" + } + Frame { + msec: 3008 + hash: "b0d858f1d51872969022f717c12480ed" + } + Frame { + msec: 3024 + hash: "0504b13a8f7cd68a1d64a22e46ea8654" + } + Frame { + msec: 3040 + hash: "d07cffa36609433e4a677e373ee7a3ff" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3056 + hash: "c1fd98ebc22e512f7199e0f319e88728" + } + Frame { + msec: 3072 + hash: "200dd4ac9c40c6eb32ad43570995f17d" + } + Frame { + msec: 3088 + hash: "200dd4ac9c40c6eb32ad43570995f17d" + } + Frame { + msec: 3104 + hash: "200dd4ac9c40c6eb32ad43570995f17d" + } + Frame { + msec: 3120 + hash: "200dd4ac9c40c6eb32ad43570995f17d" + } + Frame { + msec: 3136 + hash: "200dd4ac9c40c6eb32ad43570995f17d" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3152 + hash: "5822b744b64944c515e8a01f52c7429f" + } + Frame { + msec: 3168 + hash: "7d4ab5a17e7d6184f124299053cf94e3" + } + Frame { + msec: 3184 + hash: "253cfd5001e4e4541d9cfd6370291cd2" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3200 + hash: "1b1cab9d331c613dde896829027110f5" + } + Frame { + msec: 3216 + hash: "8127f681a5c475133cfca95483fef2ce" + } + Frame { + msec: 3232 + hash: "1a944877735fe3531d95b418dd75d576" + } + Frame { + msec: 3248 + hash: "47ddcfaed130bf7dd539d965ebebedc1" + } + Frame { + msec: 3264 + hash: "d0c37d1a7e97034d0f41ea6c2fff8f34" + } + Frame { + msec: 3280 + hash: "ea2059d511fdab60e77e9261f81aadfb" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3296 + hash: "11a907436350afa5ff592880303b4344" + } + Frame { + msec: 3312 + hash: "39801aef92c2b1e0ca39bede36840911" + } + Frame { + msec: 3328 + hash: "93463b61a00078f488f3941bc4729100" + } + Frame { + msec: 3344 + hash: "f8d9cbe20b87017d81fbf627f3a3b2cd" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3360 + hash: "2b8d37e7dcfb14394caf19aa8bc4b956" + } + Frame { + msec: 3376 + hash: "bf91006930a3f22f12b62787c57bb91b" + } + Frame { + msec: 3392 + hash: "7ce1d106e9d78a4a64f35f5982d32298" + } + Frame { + msec: 3408 + hash: "e2f3bec9571b08b451309221b34ace5e" + } + Frame { + msec: 3424 + hash: "e2f3bec9571b08b451309221b34ace5e" + } + Frame { + msec: 3440 + hash: "e2f3bec9571b08b451309221b34ace5e" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3456 + hash: "71cd749e039a54aaaa05e1d3ccc738b4" + } + Frame { + msec: 3472 + hash: "39e7afb00d53e098c005a1d96a8cc727" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3488 + hash: "a9d2fa99fc70919e55293c07427147a2" + } + Frame { + msec: 3504 + hash: "96bb62cd9ebc2eba9797605190820349" + } + Frame { + msec: 3520 + hash: "111b0d230c44d5d156e082a50c2a2a66" + } + Frame { + msec: 3536 + hash: "1085cebcc8fdaefb2ec03392763c7657" + } + Frame { + msec: 3552 + hash: "451d670f44ae42d8cbb6a12cc6469d61" + } + Frame { + msec: 3568 + hash: "5c65a7b6ed7b4e85bb883c671aae5136" + } + Frame { + msec: 3584 + hash: "2f532511a50d743aa1c7ebcc9b2b7350" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3600 + hash: "41424200cb76a0d5d64f8919645f6afb" + } + Frame { + msec: 3616 + hash: "7a910e4b17fb7f5d10308e07ea8ce0a3" + } + Frame { + msec: 3632 + hash: "4d9cc5670105acf3bc080cba8e100376" + } + Frame { + msec: 3648 + hash: "a09d3b45bef532ed86d737839592ffc8" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3664 + hash: "70179b7be24acd6d5d0d0de9d8fff74d" + } + Frame { + msec: 3680 + hash: "95964eef01bfc86216a8e91261b867ed" + } + Frame { + msec: 3696 + hash: "12b5e2bbfd573b2b8e33a745cd5af5a6" + } + Frame { + msec: 3712 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3728 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3744 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3760 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3776 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3792 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3808 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3824 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3840 + image: "test3.3.png" + } + Frame { + msec: 3856 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3872 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3888 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3904 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3920 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3936 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3952 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3968 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 3984 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4000 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4016 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4032 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4048 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4064 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4080 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4096 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4112 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4128 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4144 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4160 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4176 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4192 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4208 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4224 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4240 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } + Frame { + msec: 4256 + hash: "cb8a5743fd3c5093740bb2a4f57ade81" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.png new file mode 100644 index 0000000..5243f4a Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml new file mode 100644 index 0000000..ad7f35e --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/align/data-MAC/multilineAlign.qml @@ -0,0 +1,247 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 32 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 48 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 64 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 80 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 96 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 112 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 128 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 144 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 160 + hash: "5033bd624cd855ba10da39e6cb30e7d2" + } + Frame { + msec: 176 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 192 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 208 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 224 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 240 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 256 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 272 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 288 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 304 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 320 + hash: "d0d1afd7d8ff38e033cec4fa68978767" + } + Frame { + msec: 336 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 352 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 368 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 384 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 400 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 416 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 432 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 448 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 464 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 480 + hash: "26eed73af37b01ebecb4ee98ed9d67c6" + } + Frame { + msec: 496 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 512 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 528 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 544 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 560 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 576 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 592 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 608 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 624 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 640 + hash: "f046b9aaa9f1eba08386a160e2f281ca" + } + Frame { + msec: 656 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 672 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 688 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 704 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 720 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 736 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 752 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 768 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 784 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 800 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 816 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 832 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 848 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 864 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 880 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 896 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 912 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 928 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 944 + hash: "52f90c22e44475fac04559164c044aee" + } + Frame { + msec: 960 + image: "multilineAlign.0.png" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml new file mode 100644 index 0000000..56527d1 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/baseline/data-MAC/parentanchor.qml @@ -0,0 +1,131 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 32 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 48 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 64 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 80 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 96 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 112 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 128 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 144 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 160 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 176 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 192 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 208 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 224 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 240 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 256 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 272 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 288 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 304 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 320 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 336 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 352 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 368 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 384 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 400 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 416 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 432 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 448 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 464 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 480 + hash: "01ef07707e44ea079350128454209892" + } + Frame { + msec: 496 + hash: "01ef07707e44ea079350128454209892" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png index eea3362..91ee2e5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml index 9439f73..718375a 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 32 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 48 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 64 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 80 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 96 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 112 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 128 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 144 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 160 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 176 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 192 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 208 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 224 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 240 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 256 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 272 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 288 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 304 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 320 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 336 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 352 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 368 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 384 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 400 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 416 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 432 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 448 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 464 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 480 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 496 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 512 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 528 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 544 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 560 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 576 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 592 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 608 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 624 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 640 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 656 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 672 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 688 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 704 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 720 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 736 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 752 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 768 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 784 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 800 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 816 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 832 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 848 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 864 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 880 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 896 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 912 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 928 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 944 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 960 @@ -246,34 +246,34 @@ VisualTest { } Frame { msec: 976 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Key { type: 6 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { msec: 992 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 1008 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 1024 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 1040 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } Frame { msec: 1056 - hash: "1678890d66761a30100c37132ccec9a2" + hash: "10e33a5f4c2161281d5a6b4481a17921" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png index 3dfade5..0f9a0aa 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png index 1ee2076..f3bb7b9 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png index ae680be..b2f09de 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png index c2859be..bca63db 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml index 3e34f04..48a0ff4 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/elide2.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 32 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 48 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 64 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 80 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 96 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 112 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 128 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 144 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 160 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 176 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 192 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 208 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 224 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 240 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 256 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 272 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 288 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 304 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 320 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 336 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 352 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 368 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 384 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 400 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 416 - hash: "086a46352aa1221b5e57f5624b0c256b" + hash: "083c607c9b66240f445611a18f3025b3" } Frame { msec: 432 - hash: "fc3a7e898d6bfa2af4d774b20609f967" + hash: "57993cfe25ba9e6f3dcdcea5fab6545c" } Frame { msec: 448 - hash: "fc3a7e898d6bfa2af4d774b20609f967" + hash: "57993cfe25ba9e6f3dcdcea5fab6545c" } Frame { msec: 464 - hash: "fc3a7e898d6bfa2af4d774b20609f967" + hash: "57993cfe25ba9e6f3dcdcea5fab6545c" } Frame { msec: 480 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" + hash: "45086d8e81c178855fc1e8fd283b7157" } Frame { msec: 496 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" + hash: "45086d8e81c178855fc1e8fd283b7157" } Frame { msec: 512 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" + hash: "45086d8e81c178855fc1e8fd283b7157" } Frame { msec: 528 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" + hash: "45086d8e81c178855fc1e8fd283b7157" } Frame { msec: 544 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" + hash: "45086d8e81c178855fc1e8fd283b7157" } Frame { msec: 560 - hash: "3bcaa6426796bc9097e0aeba90dd5e39" + hash: "45086d8e81c178855fc1e8fd283b7157" } Frame { msec: 576 - hash: "4daa612cd7e7ee455ff1a93329202865" + hash: "c859ff5a516792a614008d0d3d096060" } Frame { msec: 592 - hash: "4daa612cd7e7ee455ff1a93329202865" + hash: "c859ff5a516792a614008d0d3d096060" } Frame { msec: 608 - hash: "4daa612cd7e7ee455ff1a93329202865" + hash: "c859ff5a516792a614008d0d3d096060" } Frame { msec: 624 - hash: "4daa612cd7e7ee455ff1a93329202865" + hash: "c859ff5a516792a614008d0d3d096060" } Frame { msec: 640 - hash: "4daa612cd7e7ee455ff1a93329202865" + hash: "c859ff5a516792a614008d0d3d096060" } Frame { msec: 656 - hash: "3f362ad550db910f1d9f261557c65913" + hash: "02d4eb733c7249f2c38c1768a9988739" } Frame { msec: 672 - hash: "3f362ad550db910f1d9f261557c65913" + hash: "02d4eb733c7249f2c38c1768a9988739" } Frame { msec: 688 - hash: "f159011c2b85fe212a32a7b5d2a57016" + hash: "f87a38e5ef6cfe9d5c131671fecb7903" } Frame { msec: 704 - hash: "f159011c2b85fe212a32a7b5d2a57016" + hash: "f87a38e5ef6cfe9d5c131671fecb7903" } Frame { msec: 720 - hash: "f159011c2b85fe212a32a7b5d2a57016" + hash: "f87a38e5ef6cfe9d5c131671fecb7903" } Frame { msec: 736 - hash: "f159011c2b85fe212a32a7b5d2a57016" + hash: "f87a38e5ef6cfe9d5c131671fecb7903" } Frame { msec: 752 - hash: "f159011c2b85fe212a32a7b5d2a57016" + hash: "f87a38e5ef6cfe9d5c131671fecb7903" } Frame { msec: 768 - hash: "f159011c2b85fe212a32a7b5d2a57016" + hash: "f87a38e5ef6cfe9d5c131671fecb7903" } Frame { msec: 784 - hash: "a892c67199c23e5d9012a6a24cb45d16" + hash: "3262cf6b60e56028056b81db17cfef61" } Frame { msec: 800 - hash: "a892c67199c23e5d9012a6a24cb45d16" + hash: "3262cf6b60e56028056b81db17cfef61" } Frame { msec: 816 - hash: "a892c67199c23e5d9012a6a24cb45d16" + hash: "3262cf6b60e56028056b81db17cfef61" } Frame { msec: 832 - hash: "532e01ed6ede95eca68e641e2edb7f1c" + hash: "31c337926e645ad93699a223c7ad223e" } Frame { msec: 848 - hash: "532e01ed6ede95eca68e641e2edb7f1c" + hash: "31c337926e645ad93699a223c7ad223e" } Frame { msec: 864 - hash: "532e01ed6ede95eca68e641e2edb7f1c" + hash: "31c337926e645ad93699a223c7ad223e" } Frame { msec: 880 - hash: "532e01ed6ede95eca68e641e2edb7f1c" + hash: "31c337926e645ad93699a223c7ad223e" } Frame { msec: 896 - hash: "532e01ed6ede95eca68e641e2edb7f1c" + hash: "31c337926e645ad93699a223c7ad223e" } Frame { msec: 912 - hash: "a7dc1d7dde956d62834de0968261386f" + hash: "64253f08448ad6884b76271afe7831ab" } Frame { msec: 928 - hash: "a7dc1d7dde956d62834de0968261386f" + hash: "64253f08448ad6884b76271afe7831ab" } Frame { msec: 944 - hash: "a7dc1d7dde956d62834de0968261386f" + hash: "64253f08448ad6884b76271afe7831ab" } Frame { msec: 960 @@ -246,247 +246,247 @@ VisualTest { } Frame { msec: 976 - hash: "a7dc1d7dde956d62834de0968261386f" + hash: "64253f08448ad6884b76271afe7831ab" } Frame { msec: 992 - hash: "a590e1358fac567dda9fdfc6bfe4ab89" + hash: "f463cbd97856cd3cb0316cfbbc4c960f" } Frame { msec: 1008 - hash: "a590e1358fac567dda9fdfc6bfe4ab89" + hash: "f463cbd97856cd3cb0316cfbbc4c960f" } Frame { msec: 1024 - hash: "778d34ca89b5db88fe26619576e9d337" + hash: "06731429ea2d012364b2fd6177e4fcb1" } Frame { msec: 1040 - hash: "778d34ca89b5db88fe26619576e9d337" + hash: "06731429ea2d012364b2fd6177e4fcb1" } Frame { msec: 1056 - hash: "778d34ca89b5db88fe26619576e9d337" + hash: "06731429ea2d012364b2fd6177e4fcb1" } Frame { msec: 1072 - hash: "778d34ca89b5db88fe26619576e9d337" + hash: "06731429ea2d012364b2fd6177e4fcb1" } Frame { msec: 1088 - hash: "778d34ca89b5db88fe26619576e9d337" + hash: "06731429ea2d012364b2fd6177e4fcb1" } Frame { msec: 1104 - hash: "9424caee019aa9bccd4156b0b9ca2723" + hash: "a3f1acd84b5fc99e8ffa3c900013ca0d" } Frame { msec: 1120 - hash: "9424caee019aa9bccd4156b0b9ca2723" + hash: "a3f1acd84b5fc99e8ffa3c900013ca0d" } Frame { msec: 1136 - hash: "9424caee019aa9bccd4156b0b9ca2723" + hash: "a3f1acd84b5fc99e8ffa3c900013ca0d" } Frame { msec: 1152 - hash: "000061a140ab71a44c0480a92ad3bc70" + hash: "2cb79791e784739b5c4a12578df47205" } Frame { msec: 1168 - hash: "000061a140ab71a44c0480a92ad3bc70" + hash: "2cb79791e784739b5c4a12578df47205" } Frame { msec: 1184 - hash: "000061a140ab71a44c0480a92ad3bc70" + hash: "2cb79791e784739b5c4a12578df47205" } Frame { msec: 1200 - hash: "5dec9638853165428cd15ae02e1d03ce" + hash: "c040d9e9494193164206890e8dd79508" } Frame { msec: 1216 - hash: "5dec9638853165428cd15ae02e1d03ce" + hash: "c040d9e9494193164206890e8dd79508" } Frame { msec: 1232 - hash: "5dec9638853165428cd15ae02e1d03ce" + hash: "c040d9e9494193164206890e8dd79508" } Frame { msec: 1248 - hash: "ecb69bdbd13114715f738b1ace3ecf51" + hash: "daaa92c4049a1ef9d290d99b0c83306e" } Frame { msec: 1264 - hash: "ecb69bdbd13114715f738b1ace3ecf51" + hash: "daaa92c4049a1ef9d290d99b0c83306e" } Frame { msec: 1280 - hash: "ecb69bdbd13114715f738b1ace3ecf51" + hash: "daaa92c4049a1ef9d290d99b0c83306e" } Frame { msec: 1296 - hash: "ecb69bdbd13114715f738b1ace3ecf51" + hash: "daaa92c4049a1ef9d290d99b0c83306e" } Frame { msec: 1312 - hash: "ecb69bdbd13114715f738b1ace3ecf51" + hash: "daaa92c4049a1ef9d290d99b0c83306e" } Frame { msec: 1328 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" + hash: "afedb8f328ae31f2e5d68cd917d652ff" } Frame { msec: 1344 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" + hash: "afedb8f328ae31f2e5d68cd917d652ff" } Frame { msec: 1360 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" + hash: "afedb8f328ae31f2e5d68cd917d652ff" } Frame { msec: 1376 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" + hash: "afedb8f328ae31f2e5d68cd917d652ff" } Frame { msec: 1392 - hash: "923b4f4f4a3dbaefbf003859067b2ea9" + hash: "afedb8f328ae31f2e5d68cd917d652ff" } Frame { msec: 1408 - hash: "d4230a476237f9e13a132e775f1b960c" + hash: "1a7c95dcd5dd375a01179626d3e1bb4b" } Frame { msec: 1424 - hash: "d4230a476237f9e13a132e775f1b960c" + hash: "1a7c95dcd5dd375a01179626d3e1bb4b" } Frame { msec: 1440 - hash: "d4230a476237f9e13a132e775f1b960c" + hash: "1a7c95dcd5dd375a01179626d3e1bb4b" } Frame { msec: 1456 - hash: "d4230a476237f9e13a132e775f1b960c" + hash: "1a7c95dcd5dd375a01179626d3e1bb4b" } Frame { msec: 1472 - hash: "d4230a476237f9e13a132e775f1b960c" + hash: "1a7c95dcd5dd375a01179626d3e1bb4b" } Frame { msec: 1488 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" + hash: "79e56686d52dad27374fe45933f7e045" } Frame { msec: 1504 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" + hash: "79e56686d52dad27374fe45933f7e045" } Frame { msec: 1520 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" + hash: "79e56686d52dad27374fe45933f7e045" } Frame { msec: 1536 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" + hash: "79e56686d52dad27374fe45933f7e045" } Frame { msec: 1552 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" + hash: "79e56686d52dad27374fe45933f7e045" } Frame { msec: 1568 - hash: "504ad2ba8543f7ad6490bd45d86fbef9" + hash: "79e56686d52dad27374fe45933f7e045" } Frame { msec: 1584 - hash: "dd412c6a2e5cb8890cb43142c84a5673" + hash: "ad8f8e33731a8861016c3c9567419fff" } Frame { msec: 1600 - hash: "dd412c6a2e5cb8890cb43142c84a5673" + hash: "ad8f8e33731a8861016c3c9567419fff" } Frame { msec: 1616 - hash: "dd412c6a2e5cb8890cb43142c84a5673" + hash: "ad8f8e33731a8861016c3c9567419fff" } Frame { msec: 1632 - hash: "38b1fa7bd4e2f13b05caa62903c56ab6" + hash: "609e9d64c3e376b37cf0833333d57a0b" } Frame { msec: 1648 - hash: "38b1fa7bd4e2f13b05caa62903c56ab6" + hash: "609e9d64c3e376b37cf0833333d57a0b" } Frame { msec: 1664 - hash: "38b1fa7bd4e2f13b05caa62903c56ab6" + hash: "609e9d64c3e376b37cf0833333d57a0b" } Frame { msec: 1680 - hash: "38b1fa7bd4e2f13b05caa62903c56ab6" + hash: "609e9d64c3e376b37cf0833333d57a0b" } Frame { msec: 1696 - hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8" + hash: "f3a64e17c082529f753292a722a2b3e8" } Frame { msec: 1712 - hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8" + hash: "f3a64e17c082529f753292a722a2b3e8" } Frame { msec: 1728 - hash: "ffb2cb01c868c1dfa6b5154c4e8a7fd8" + hash: "f3a64e17c082529f753292a722a2b3e8" } Frame { msec: 1744 - hash: "9effd5fc19246cfe3d2f5968c5caaa4e" + hash: "76627f7257d24b08a9011c806d4c8458" } Key { type: 6 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { msec: 1760 - hash: "9effd5fc19246cfe3d2f5968c5caaa4e" + hash: "76627f7257d24b08a9011c806d4c8458" } Frame { msec: 1776 - hash: "9effd5fc19246cfe3d2f5968c5caaa4e" + hash: "76627f7257d24b08a9011c806d4c8458" } Frame { msec: 1792 - hash: "9effd5fc19246cfe3d2f5968c5caaa4e" + hash: "76627f7257d24b08a9011c806d4c8458" } Frame { msec: 1808 - hash: "4fa14ae57d170b16fd90d59d5ec83561" + hash: "4275796ca36c974f6ba7ba2fc7c3d68f" } Frame { msec: 1824 - hash: "4fa14ae57d170b16fd90d59d5ec83561" + hash: "4275796ca36c974f6ba7ba2fc7c3d68f" } Frame { msec: 1840 - hash: "4fa14ae57d170b16fd90d59d5ec83561" + hash: "4275796ca36c974f6ba7ba2fc7c3d68f" } Frame { msec: 1856 - hash: "4fa14ae57d170b16fd90d59d5ec83561" + hash: "4275796ca36c974f6ba7ba2fc7c3d68f" } Frame { msec: 1872 - hash: "4fa14ae57d170b16fd90d59d5ec83561" + hash: "4275796ca36c974f6ba7ba2fc7c3d68f" } Frame { msec: 1888 - hash: "976dd5bc154522438f92790f28639512" + hash: "9005e33c220aaadb6c1b756c496140b5" } Frame { msec: 1904 - hash: "976dd5bc154522438f92790f28639512" + hash: "9005e33c220aaadb6c1b756c496140b5" } Frame { msec: 1920 @@ -494,239 +494,239 @@ VisualTest { } Frame { msec: 1936 - hash: "976dd5bc154522438f92790f28639512" + hash: "9005e33c220aaadb6c1b756c496140b5" } Frame { msec: 1952 - hash: "976dd5bc154522438f92790f28639512" + hash: "9005e33c220aaadb6c1b756c496140b5" } Frame { msec: 1968 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" + hash: "1664ce25b0e427b89e64c00668797dc1" } Frame { msec: 1984 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" + hash: "1664ce25b0e427b89e64c00668797dc1" } Frame { msec: 2000 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" + hash: "1664ce25b0e427b89e64c00668797dc1" } Frame { msec: 2016 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" + hash: "1664ce25b0e427b89e64c00668797dc1" } Frame { msec: 2032 - hash: "4ae1d6ddb9a78cc2f4e81b58fcca6a20" + hash: "1664ce25b0e427b89e64c00668797dc1" } Frame { msec: 2048 - hash: "84bdf634cfd4de588f2b0984aa3e97bd" + hash: "4421ad90c93cca320b790c0432745a5e" } Frame { msec: 2064 - hash: "84bdf634cfd4de588f2b0984aa3e97bd" + hash: "4421ad90c93cca320b790c0432745a5e" } Frame { msec: 2080 - hash: "84bdf634cfd4de588f2b0984aa3e97bd" + hash: "4421ad90c93cca320b790c0432745a5e" } Frame { msec: 2096 - hash: "1a978ed6951afe40912efcfb54dcce65" + hash: "c21285318beec99e9afd1dde46a5497b" } Frame { msec: 2112 - hash: "1a978ed6951afe40912efcfb54dcce65" + hash: "c21285318beec99e9afd1dde46a5497b" } Frame { msec: 2128 - hash: "1a978ed6951afe40912efcfb54dcce65" + hash: "c21285318beec99e9afd1dde46a5497b" } Frame { msec: 2144 - hash: "a57eea59fe6475164e24688489977869" + hash: "ec4f44aa4f4b7de7e597cab376c1f82f" } Frame { msec: 2160 - hash: "a57eea59fe6475164e24688489977869" + hash: "ec4f44aa4f4b7de7e597cab376c1f82f" } Frame { msec: 2176 - hash: "a57eea59fe6475164e24688489977869" + hash: "ec4f44aa4f4b7de7e597cab376c1f82f" } Frame { msec: 2192 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" + hash: "ad984149e44b3be55e420b1be3c0b8c3" } Frame { msec: 2208 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" + hash: "ad984149e44b3be55e420b1be3c0b8c3" } Frame { msec: 2224 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" + hash: "ad984149e44b3be55e420b1be3c0b8c3" } Frame { msec: 2240 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" + hash: "ad984149e44b3be55e420b1be3c0b8c3" } Frame { msec: 2256 - hash: "69ac1d93bd51f495783dbc6a0f7b27be" + hash: "ad984149e44b3be55e420b1be3c0b8c3" } Frame { msec: 2272 - hash: "04c62a4d01e9309eaeea87902013c8b9" + hash: "cd016ce04572119cf89263091ae55b2f" } Frame { msec: 2288 - hash: "04c62a4d01e9309eaeea87902013c8b9" + hash: "cd016ce04572119cf89263091ae55b2f" } Frame { msec: 2304 - hash: "fac2f5730a600d6b69280d5e6962c1d2" + hash: "e621ae81e0da861323efe03d1a6f2ac4" } Frame { msec: 2320 - hash: "fac2f5730a600d6b69280d5e6962c1d2" + hash: "e621ae81e0da861323efe03d1a6f2ac4" } Frame { msec: 2336 - hash: "fac2f5730a600d6b69280d5e6962c1d2" + hash: "e621ae81e0da861323efe03d1a6f2ac4" } Frame { msec: 2352 - hash: "fac2f5730a600d6b69280d5e6962c1d2" + hash: "e621ae81e0da861323efe03d1a6f2ac4" } Frame { msec: 2368 - hash: "fac2f5730a600d6b69280d5e6962c1d2" + hash: "e621ae81e0da861323efe03d1a6f2ac4" } Frame { msec: 2384 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" + hash: "b9f9502b8acbd59927b78104dc39b3ea" } Frame { msec: 2400 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" + hash: "b9f9502b8acbd59927b78104dc39b3ea" } Frame { msec: 2416 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" + hash: "b9f9502b8acbd59927b78104dc39b3ea" } Frame { msec: 2432 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" + hash: "b9f9502b8acbd59927b78104dc39b3ea" } Frame { msec: 2448 - hash: "13f7ce73c0a2f1c7958294e4fbf3d30d" + hash: "b9f9502b8acbd59927b78104dc39b3ea" } Frame { msec: 2464 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" + hash: "69bc7470ddd917ec73a075ba16715ccf" } Frame { msec: 2480 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" + hash: "69bc7470ddd917ec73a075ba16715ccf" } Frame { msec: 2496 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" + hash: "69bc7470ddd917ec73a075ba16715ccf" } Frame { msec: 2512 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" + hash: "69bc7470ddd917ec73a075ba16715ccf" } Frame { msec: 2528 - hash: "96a5678ee5bcbf28df6a2bf66b2b6189" + hash: "69bc7470ddd917ec73a075ba16715ccf" } Frame { msec: 2544 - hash: "abb220abcd579abd988b6f9f7e0bc2b7" + hash: "9d2d1ad3db3f80ffc6fcd321a4f5adfa" } Frame { msec: 2560 - hash: "abb220abcd579abd988b6f9f7e0bc2b7" + hash: "9d2d1ad3db3f80ffc6fcd321a4f5adfa" } Frame { msec: 2576 - hash: "abb220abcd579abd988b6f9f7e0bc2b7" + hash: "9d2d1ad3db3f80ffc6fcd321a4f5adfa" } Frame { msec: 2592 - hash: "abb220abcd579abd988b6f9f7e0bc2b7" + hash: "9d2d1ad3db3f80ffc6fcd321a4f5adfa" } Frame { msec: 2608 - hash: "8a8585eb9a5cd1d6c38dc7076923e7f7" + hash: "c82742c641c411df5d9ecb4d19b7a30d" } Frame { msec: 2624 - hash: "8a8585eb9a5cd1d6c38dc7076923e7f7" + hash: "c82742c641c411df5d9ecb4d19b7a30d" } Frame { msec: 2640 - hash: "8a8585eb9a5cd1d6c38dc7076923e7f7" + hash: "c82742c641c411df5d9ecb4d19b7a30d" } Frame { msec: 2656 - hash: "c13ec1d294921e6a56f6ac4198e084eb" + hash: "ae50d41ef5289fc31b5cd18462905379" } Frame { msec: 2672 - hash: "c13ec1d294921e6a56f6ac4198e084eb" + hash: "ae50d41ef5289fc31b5cd18462905379" } Frame { msec: 2688 - hash: "c13ec1d294921e6a56f6ac4198e084eb" + hash: "ae50d41ef5289fc31b5cd18462905379" } Frame { msec: 2704 - hash: "c13ec1d294921e6a56f6ac4198e084eb" + hash: "ae50d41ef5289fc31b5cd18462905379" } Frame { msec: 2720 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" + hash: "38d393df298826121109b6bd2d454bc0" } Frame { msec: 2736 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" + hash: "38d393df298826121109b6bd2d454bc0" } Frame { msec: 2752 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" + hash: "38d393df298826121109b6bd2d454bc0" } Frame { msec: 2768 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" + hash: "38d393df298826121109b6bd2d454bc0" } Frame { msec: 2784 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" + hash: "38d393df298826121109b6bd2d454bc0" } Frame { msec: 2800 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" + hash: "38d393df298826121109b6bd2d454bc0" } Frame { msec: 2816 - hash: "53295720dbabe6fbfff56bea0e0ba7f1" + hash: "38d393df298826121109b6bd2d454bc0" } Frame { msec: 2832 - hash: "f44b88b80219497370b5d2ad380d03bf" + hash: "50a47e20ff34a2935b1dde36c85f7f54" } Frame { msec: 2848 - hash: "f44b88b80219497370b5d2ad380d03bf" + hash: "50a47e20ff34a2935b1dde36c85f7f54" } Frame { msec: 2864 - hash: "a093510751799f3466156f9775988044" + hash: "4daa350f9385217b9eef714f40b4e6d0" } Frame { msec: 2880 @@ -734,239 +734,239 @@ VisualTest { } Frame { msec: 2896 - hash: "a093510751799f3466156f9775988044" + hash: "4daa350f9385217b9eef714f40b4e6d0" } Frame { msec: 2912 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" + hash: "0e36ea4104aa509455555796262ea30d" } Frame { msec: 2928 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" + hash: "0e36ea4104aa509455555796262ea30d" } Frame { msec: 2944 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" + hash: "0e36ea4104aa509455555796262ea30d" } Frame { msec: 2960 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" + hash: "0e36ea4104aa509455555796262ea30d" } Frame { msec: 2976 - hash: "6327bcbb2d78d3c33eb964643b0d09a5" + hash: "0e36ea4104aa509455555796262ea30d" } Frame { msec: 2992 - hash: "d7da3826914ad1d2696803b659992e73" + hash: "4dd59519884c4aa19834430b2b0a3040" } Frame { msec: 3008 - hash: "d7da3826914ad1d2696803b659992e73" + hash: "4dd59519884c4aa19834430b2b0a3040" } Frame { msec: 3024 - hash: "d7da3826914ad1d2696803b659992e73" + hash: "4dd59519884c4aa19834430b2b0a3040" } Frame { msec: 3040 - hash: "d7da3826914ad1d2696803b659992e73" + hash: "4dd59519884c4aa19834430b2b0a3040" } Frame { msec: 3056 - hash: "d7da3826914ad1d2696803b659992e73" + hash: "4dd59519884c4aa19834430b2b0a3040" } Frame { msec: 3072 - hash: "ad40dc153a57c35ea62d9d044f08c9ac" + hash: "5e2e943b2ab6f798660b32e132ec6bef" } Frame { msec: 3088 - hash: "ad40dc153a57c35ea62d9d044f08c9ac" + hash: "5e2e943b2ab6f798660b32e132ec6bef" } Frame { msec: 3104 - hash: "ad40dc153a57c35ea62d9d044f08c9ac" + hash: "5e2e943b2ab6f798660b32e132ec6bef" } Frame { msec: 3120 - hash: "df90afe882b18f3fd7b12e52ff36e66f" + hash: "a64b8d6bae4b6445d5de78b126e3af63" } Frame { msec: 3136 - hash: "df90afe882b18f3fd7b12e52ff36e66f" + hash: "a64b8d6bae4b6445d5de78b126e3af63" } Frame { msec: 3152 - hash: "5b84785ffe15c15c3b94c845db7a4a44" + hash: "8732d4c3b6ea276079794d2c892d14a9" } Frame { msec: 3168 - hash: "5b84785ffe15c15c3b94c845db7a4a44" + hash: "8732d4c3b6ea276079794d2c892d14a9" } Frame { msec: 3184 - hash: "5b84785ffe15c15c3b94c845db7a4a44" + hash: "8732d4c3b6ea276079794d2c892d14a9" } Frame { msec: 3200 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" + hash: "931f767d8c733d2262b8c73003629fd1" } Frame { msec: 3216 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" + hash: "931f767d8c733d2262b8c73003629fd1" } Frame { msec: 3232 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" + hash: "931f767d8c733d2262b8c73003629fd1" } Frame { msec: 3248 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" + hash: "931f767d8c733d2262b8c73003629fd1" } Frame { msec: 3264 - hash: "f5ca71af8d9fa1809ab88b60f9170bb5" + hash: "931f767d8c733d2262b8c73003629fd1" } Frame { msec: 3280 - hash: "39f1b201715413f13a60f449eef29706" + hash: "526f7d87bdce834a8d4396df4406d4c7" } Frame { msec: 3296 - hash: "39f1b201715413f13a60f449eef29706" + hash: "526f7d87bdce834a8d4396df4406d4c7" } Frame { msec: 3312 - hash: "39f1b201715413f13a60f449eef29706" + hash: "526f7d87bdce834a8d4396df4406d4c7" } Frame { msec: 3328 - hash: "39f1b201715413f13a60f449eef29706" + hash: "526f7d87bdce834a8d4396df4406d4c7" } Frame { msec: 3344 - hash: "39f1b201715413f13a60f449eef29706" + hash: "526f7d87bdce834a8d4396df4406d4c7" } Frame { msec: 3360 - hash: "4baf5c1227de45f9e620fe6eb0590014" + hash: "0c9bb37ebb01a6127b60d26792cc3524" } Frame { msec: 3376 - hash: "4baf5c1227de45f9e620fe6eb0590014" + hash: "0c9bb37ebb01a6127b60d26792cc3524" } Frame { msec: 3392 - hash: "4baf5c1227de45f9e620fe6eb0590014" + hash: "0c9bb37ebb01a6127b60d26792cc3524" } Frame { msec: 3408 - hash: "e1ce9c06e59fb6348fff3ce650c7943e" + hash: "04b580975c168ef07b11496a18b55582" } Frame { msec: 3424 - hash: "e1ce9c06e59fb6348fff3ce650c7943e" + hash: "04b580975c168ef07b11496a18b55582" } Frame { msec: 3440 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" + hash: "c4abe8e74b0a0a61ee671b4d7047b244" } Frame { msec: 3456 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" + hash: "c4abe8e74b0a0a61ee671b4d7047b244" } Frame { msec: 3472 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" + hash: "c4abe8e74b0a0a61ee671b4d7047b244" } Frame { msec: 3488 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" + hash: "c4abe8e74b0a0a61ee671b4d7047b244" } Frame { msec: 3504 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" + hash: "c4abe8e74b0a0a61ee671b4d7047b244" } Frame { msec: 3520 - hash: "ad812bdef31b4f1f42c35f7d56b3af83" + hash: "c4abe8e74b0a0a61ee671b4d7047b244" } Frame { msec: 3536 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" + hash: "179c36c797dfd91fdc6bd373f5331cbb" } Frame { msec: 3552 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" + hash: "179c36c797dfd91fdc6bd373f5331cbb" } Frame { msec: 3568 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" + hash: "179c36c797dfd91fdc6bd373f5331cbb" } Frame { msec: 3584 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" + hash: "179c36c797dfd91fdc6bd373f5331cbb" } Frame { msec: 3600 - hash: "c08c8bcfc8c23f5e0e89d7f632fde2ca" + hash: "179c36c797dfd91fdc6bd373f5331cbb" } Frame { msec: 3616 - hash: "b8853dc109d063d982952780aa80419a" + hash: "49b9d5168c3fa5e09953251ffb509743" } Frame { msec: 3632 - hash: "b8853dc109d063d982952780aa80419a" + hash: "49b9d5168c3fa5e09953251ffb509743" } Frame { msec: 3648 - hash: "b8853dc109d063d982952780aa80419a" + hash: "49b9d5168c3fa5e09953251ffb509743" } Frame { msec: 3664 - hash: "b8853dc109d063d982952780aa80419a" + hash: "49b9d5168c3fa5e09953251ffb509743" } Frame { msec: 3680 - hash: "b8853dc109d063d982952780aa80419a" + hash: "49b9d5168c3fa5e09953251ffb509743" } Frame { msec: 3696 - hash: "6bfd7cfd6369df1eb570fda103d9e009" + hash: "da74be0adb46300cac7ba9bfe3660c33" } Frame { msec: 3712 - hash: "6bfd7cfd6369df1eb570fda103d9e009" + hash: "da74be0adb46300cac7ba9bfe3660c33" } Frame { msec: 3728 - hash: "b6dba4a456cd8d1b62501039cb796625" + hash: "9276749ab90c7da1eb62c6277613f75a" } Frame { msec: 3744 - hash: "b6dba4a456cd8d1b62501039cb796625" + hash: "9276749ab90c7da1eb62c6277613f75a" } Frame { msec: 3760 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" + hash: "b85b7f367d4da5bd01fe87a292a356fd" } Frame { msec: 3776 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" + hash: "b85b7f367d4da5bd01fe87a292a356fd" } Frame { msec: 3792 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" + hash: "b85b7f367d4da5bd01fe87a292a356fd" } Frame { msec: 3808 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" + hash: "b85b7f367d4da5bd01fe87a292a356fd" } Frame { msec: 3824 - hash: "f43892fffe4a8ce005b60ec43ce0aa4a" + hash: "b85b7f367d4da5bd01fe87a292a356fd" } Frame { msec: 3840 @@ -974,18 +974,18 @@ VisualTest { } Frame { msec: 3856 - hash: "d2e873e69aed3e0b6e53123cd63e386c" + hash: "e871d5f9d6437154ef85a60fe5a6a08e" } Frame { msec: 3872 - hash: "d2e873e69aed3e0b6e53123cd63e386c" + hash: "e871d5f9d6437154ef85a60fe5a6a08e" } Frame { msec: 3888 - hash: "baa8edfce77628c7a1ec83adce96e2c6" + hash: "f66f5d470e913f4bec6c8982702b8a60" } Frame { msec: 3904 - hash: "baa8edfce77628c7a1ec83adce96e2c6" + hash: "f66f5d470e913f4bec6c8982702b8a60" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png index 80549b4..944208b 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml index 76c2ee1..e76ad11 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetext/elide/data-MAC/multilength.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "17f39c541a0b5bf958c3fdaa51b72fec" + hash: "fa4edc25cc530be81c5c18c089c76643" } Frame { msec: 32 - hash: "da61bb1afef532688045116bcce1da40" + hash: "d543f734101d89c6d4e4a5992bd34cb3" } Frame { msec: 48 - hash: "04ddcb158ce8ade4ea9ad16405c7d81a" + hash: "fc96f61ab3f8235d96c815f8876728f5" } Frame { msec: 64 - hash: "7ca43ec7a6e630c9bc07478abf5c2686" + hash: "0bdeb73a4cfbe216ca795756baa353c8" } Frame { msec: 80 - hash: "ae2c4e73395cf4a5663110ba1b9996b2" + hash: "4451049db7f7d0b62325af6d27073f16" } Frame { msec: 96 - hash: "5059426cced6ff6f92102100416b34d8" + hash: "ef51f1424db831f962960e468b547cc5" } Frame { msec: 112 - hash: "e816cb366ba9498d0ae194b789c25f12" + hash: "c79ffb52d5aa11e2ee99e9db57c58c3e" } Frame { msec: 128 - hash: "fd8cd9b2916b7045086df92d19e8b436" + hash: "3827b0ca877b214ceffdc7444f9eae14" } Frame { msec: 144 - hash: "965dfe4cad0a3d07c0b086d6351a43a1" + hash: "8e375f05606f04f81c2ff0551ce7a290" } Frame { msec: 160 - hash: "56759a670c864d5f2ae392fa8545f3a4" + hash: "8d48743f9d3c02cdb342c57b080ab52a" } Frame { msec: 176 - hash: "8d3c2be4fcef526650cc84b5c2d29170" + hash: "a8d1cae0e817ca059a73594f35eeccaf" } Frame { msec: 192 - hash: "6d9f995bef186a69b259b8d18470f0e7" + hash: "71d024907815100b5ea74e072e167384" } Frame { msec: 208 - hash: "670c68a0943c5f037f8bf4c9ca0df501" + hash: "8f294501a7d0dff60233c922161f0b8d" } Frame { msec: 224 - hash: "6218cf02cb762aa6c33985fe1b2e47bb" + hash: "303deae49dd99baba31af8915dd43d4d" } Frame { msec: 240 - hash: "6e3424f2b72d6582ceb5a6c1bfe3dba4" + hash: "41f34af1ca4417e546d40057727a24b8" } Frame { msec: 256 - hash: "fb819344ab1d2966b043be790831e680" + hash: "baf5102132a01cb44925f7fc1532f8fb" } Frame { msec: 272 - hash: "a729845b780cc708ddd578eab3bc0ab1" + hash: "559c5e92b2cc8f20c2289bdabc7d2a3c" } Frame { msec: 288 - hash: "543f6566c4dfaecb70007848cc4f8525" + hash: "39a50d44ae47e6c358d6ebaa2234cbfb" } Frame { msec: 304 - hash: "5497699414bd8a428ead9703dc7273d5" + hash: "4bdfe9e04c2ee21a584dc7612603fe62" } Frame { msec: 320 - hash: "e9230e525bb0ce33fe4bf3a2c948357d" + hash: "e3ff2c98c9309964ccc612c4499817ff" } Frame { msec: 336 - hash: "ef6a6989f013d444547c0b98a65a34bf" + hash: "f3509a8a9fe255e30e1b23ca36803169" } Frame { msec: 352 - hash: "ee89f5163fe269884d59acac7fc23336" + hash: "644629a42f8a2c8dc1f84e274e25df52" } Frame { msec: 368 - hash: "0ffb11ceccdc607c1a072dde4aa40f93" + hash: "e169e2e67b0ebffc2181463a1e155e5c" } Frame { msec: 384 - hash: "97a51d7916e04815724506e289040e2a" + hash: "74ccb97fe629c48211543e885930f18e" } Frame { msec: 400 - hash: "a63d6d73827e1b40a7fec76e6555d7ab" + hash: "14d97918485475971a832002a333722d" } Frame { msec: 416 - hash: "d3eaf72442852317a48dc2b638ad48be" + hash: "4e768d02555701df2109d07259228b05" } Frame { msec: 432 - hash: "fa867a486d51089ddfeb60b9d44b329e" + hash: "ceeeeffb00e1f74ace1a11832d183c81" } Frame { msec: 448 - hash: "834ee944cfc63209bcba94153ccd2c4e" + hash: "3e6660aff9dfd72e5bd7e67d547af8b5" } Frame { msec: 464 - hash: "6d637d4763ae457233ab669f9f124bc1" + hash: "991a782f939dbfe96b316254177f34ad" } Frame { msec: 480 - hash: "66c60bd9de1870f46b726c404ab924d5" + hash: "ce4adfec222428d3fd7dd6069c69674c" } Frame { msec: 496 - hash: "088499b53390e3a2c3ca7f42cac101a4" + hash: "27d658710bdeb0395052291bb736fdac" } Frame { msec: 512 - hash: "19d41f7696c86120460c4db7a0f9be1a" + hash: "a448c7c9fc2b4cf62f57ced461e39a05" } Frame { msec: 528 - hash: "cd3ae14964e174db94e3e6c8609f366a" + hash: "0e1fd2a517db3a3fafb2840bbe550592" } Frame { msec: 544 - hash: "0c2172e091c2fb42d7c016779fa543d7" + hash: "2ff7fe0c183fddc88d0daaabb866d78b" } Frame { msec: 560 - hash: "7534175e24b2cbab08518de8fc691003" + hash: "73c952ed17daaf19755728185d999f96" } Frame { msec: 576 - hash: "a9ef64d20b4f93e60f25753e2d7dd2e0" + hash: "85e9928b19d66b8ab1ee6b10d8b2b401" } Frame { msec: 592 - hash: "d8e62a9fec27bfc892b0f3034bc73c3f" + hash: "0c6fa7c70f98d53f2f0425e79083dc2c" } Frame { msec: 608 - hash: "f8eee41f72e17693074a2ac250bb850e" + hash: "589813b70ea86dd5ebe47ccf2121b5a8" } Frame { msec: 624 - hash: "3a08b62a8aa1f410415afbd7b8ee8728" + hash: "7b94db2fd4f35fda4183a4351581a931" } Frame { msec: 640 - hash: "0c4fba2bc8b7e440736f4a23d048c23c" + hash: "5769822d37ed1e88aacbbaaddbd7520a" } Frame { msec: 656 - hash: "521264dbeec0fbe3a467739f0c3f7b85" + hash: "36ab6549d745c1d0e7a7b47b9d1f6887" } Frame { msec: 672 - hash: "2c455560a624acfb7f316eae8926d765" + hash: "d130cecb02cdacc0cdbcce80e492d21b" } Frame { msec: 688 - hash: "c9fa632a0998cfae39d434b623b3060d" + hash: "d1395dbf450e90c4f18c872cd50fca8f" } Frame { msec: 704 - hash: "506ea16572fa0ee72cddcedfe5b4b9ea" + hash: "7415bda155a9287ba22eac9c0548f10e" } Frame { msec: 720 - hash: "83ae06a3ad24d2a6d49c71df2a287716" + hash: "b65b886a632b042c00317a4013071f6c" } Frame { msec: 736 - hash: "d4b11b45b4f97de0c0b878b97b804f09" + hash: "cf4289cd85cb18bbf1a677008d8f1f0a" } Frame { msec: 752 - hash: "868aac6c273b7cc90c31c14298ab9a3b" + hash: "97a6e76519c522854ec88cc9e40165da" } Frame { msec: 768 - hash: "03d4222586194bb6513305d1837d3467" + hash: "bb80a571507cdc994f79ef05b0ad3b68" } Frame { msec: 784 - hash: "21e6cd89f06077bd5d346c7ccb8fa1e9" + hash: "823d647182b73e0f57ff7aca373160f1" } Frame { msec: 800 - hash: "326092c4c29217f5afb5730ab3984353" + hash: "29b649d6cc3510a904561050bea9aa5b" } Frame { msec: 816 - hash: "4963d64093e65fe1973ffab5b7a15abc" + hash: "195089eb803c1eef039bac097e446ae6" } Frame { msec: 832 - hash: "3125e6e553bbf3f2fcf8fbf797a0c1f8" + hash: "eb5d4b8a47cec6940c5c5019e1ca2fae" } Frame { msec: 848 - hash: "879b24c994d4a9854d08bda2bbf2ceda" + hash: "e8aebb115dba21f631ad6bce87615fd3" } Frame { msec: 864 - hash: "03c4320dc2aa030c341d54899869b561" + hash: "15c9982c4c71542788e563db6e069fd1" } Frame { msec: 880 - hash: "ae0e91975aecc6a416b4a23504fced32" + hash: "8124924f33282195f0a04cb178a332b1" } Frame { msec: 896 - hash: "e4150bdf0d4bab9bddc4605a9bde5b69" + hash: "0134d4df0b3b524107baa4068c64af7f" } Frame { msec: 912 - hash: "dc961cb82a0e58603b3914f16f0a3f52" + hash: "bd3015b94540bafebfc9a7190b0e3d6c" } Frame { msec: 928 - hash: "5339507c303e42ecab853ca1688881f3" + hash: "3edcdf689225edcba379775c86390609" } Frame { msec: 944 - hash: "a7c616c57f98eb03c1501747ea1a8b45" + hash: "407d4d439efec4cb07c80a5bc6638b51" } Frame { msec: 960 @@ -246,58 +246,58 @@ VisualTest { } Frame { msec: 976 - hash: "773ad6bc56f80bd5f6ce346ae0bc79c9" + hash: "7b58d2d0726bb994d9e651411d76cbe4" } Frame { msec: 992 - hash: "18b9ebfb9e5beac337143cc625fdfad7" + hash: "15801c5e1e470c8c45c24debfb9b478b" } Frame { msec: 1008 - hash: "efb9f12a98ea137e2b50d344c21c4a89" + hash: "e257158a1da8908df7522bede4e9c4d9" } Frame { msec: 1024 - hash: "5b880958b3d20c09a10189cfc5f7b671" + hash: "3cb21bef1761c2f70b880b54ca9234fc" } Frame { msec: 1040 - hash: "edf2d8c174ac6e2e3a887336dc04df8c" + hash: "b5effa369f0ab095f4345e2b9f6caa5f" } Frame { msec: 1056 - hash: "ad04b9e0e88695a13032abae8fef6f32" + hash: "aaafb43e6290a9e7b351dd7c13b8aaaf" } Frame { msec: 1072 - hash: "e4ad91c9da3e954cac33ce98832fee1c" + hash: "8a4b622539868188f40f8c7fe75c6ddf" } Frame { msec: 1088 - hash: "a853212cf0ddc17cb0eb9be7f2ac5475" + hash: "365c2f7c0d1c718cf326864c3ba75d2e" } Frame { msec: 1104 - hash: "a03f7ac2553fe114c4591ed98dab3ceb" + hash: "bac17384d4f375652bbc574459554835" } Frame { msec: 1120 - hash: "5de7491803582e0d13d2ff3e2eb3df82" + hash: "6bf6917ee323a05824bd6d071459d0b2" } Frame { msec: 1136 - hash: "0685263ac468ce39b468d37a20f7e5f8" + hash: "7aee8af3ef6b6592011b29281fb0e545" } Frame { msec: 1152 - hash: "14d4ab3f40dc6a0835c56c0f84256182" + hash: "5351b508cbd2e0352f230d211b864c4f" } Frame { msec: 1168 - hash: "6a8c61c31c3d00592863ad356c45b354" + hash: "5a051f26ba6287707dbff8422d1eb9f3" } Frame { msec: 1184 - hash: "08b3e3388469b1a62d3fc7f7a94f85a2" + hash: "67611596f75fe97b13a9cf0dc0313727" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png index 6c610ea..22863cf 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/plaintext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png index c4c56f3..aac7c8d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetext/font/data-MAC/richtext.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.0.png index 464a578..3f2c403 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.1.png index 9beb1ca..e94c97b 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.2.png index 001be30..847f8a5 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.3.png index fc3e4b3..9002e80 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.4.png index 24f43e6..0a399c8 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.5.png index 001223b..3d8709f 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.5.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.6.png index 7126e07..80b960c 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.6.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.7.png index f0bea88..7247277 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.7.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.8.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.8.png index 4381b8d..af5a996 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.8.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.9.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.9.png new file mode 100644 index 0000000..b254164 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.qml index 1241d14..f714adc 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/cursorDelegate.qml @@ -6,239 +6,287 @@ VisualTest { } Frame { msec: 16 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "fd83046af94eac26d394a5da986e734c" } Frame { msec: 32 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "c9bf546976fc17de9ea9e877f4978f02" } Frame { msec: 48 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "c711fd5d0c3900494493f8309b79ad0c" } Frame { msec: 64 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "b297d098f02fbbeac830b20b0a5194c5" } Frame { msec: 80 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "b5e956f236ba52cb673af22417d1aabc" } Frame { msec: 96 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "e8cd9511f073ff40a6645ad6aa2b5bee" } Frame { msec: 112 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "315734f8f38efbc810ca2e65bd752ddd" } Frame { msec: 128 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "fa7d20c99cb8c20494b558ce8ef860a2" } Frame { msec: 144 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "56cc00965e12254e0133fe1d914fffb2" } Frame { msec: 160 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "690aa50862a887edcc9392d1c3ca0424" } Frame { msec: 176 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "c3df3735586ed103d137d4902d7a1cc3" } Frame { msec: 192 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "0a2c07dc17922651d2abd6400fff6e43" } Frame { msec: 208 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "8004e4ab3ed02f68f6f5f7f5fb9fe6c6" } Frame { msec: 224 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "7937850b86f3611ee1d75da9deb7420d" } Frame { msec: 240 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "ecd42368bf2a9058185b9b25b659f4c6" } Frame { msec: 256 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "e545c6ba42edd1e6a055b48f162315ab" } Frame { msec: 272 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "f8b28cd90fe0c4aa90e8a69d2d9cdce7" } Frame { msec: 288 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "49de66674e8f38f925f3505c64201076" } Frame { msec: 304 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "b33880917cae07d038620065ec2c1d1c" } Frame { msec: 320 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "97c8af8dc7e5372a3a0f5bed0050127e" } Frame { msec: 336 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "b0236b8c44398cb9f97324f6ca9ce5c4" + } + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 352 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "2695b45a1ea89518d236ef3b8dccd89e" } Frame { msec: 368 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "61370b1d04626facfd243176cb4bb79b" } Frame { msec: 384 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "53c53e501469ca0ef0f0325a13aa4aa4" } Frame { msec: 400 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "c56717a79ccffe756c5423bc5e44a53f" } Frame { msec: 416 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "e5ec3e6d4a7a527e8f2c0afa5fd66c4b" } Frame { msec: 432 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "4ccb9af28572e13f961f2057eb98482d" + } + Key { + type: 6 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 448 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "0b8ce455fd40c3cd74fb05d4b603cceb" } Frame { msec: 464 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "f5c3754201dbb6f4ca4f4c1611036c5a" } Frame { msec: 480 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 496 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "0173dd60a64da4c06fa9a398d2c98206" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 512 - hash: "e0366dbd264ca453f5dad3a7966f17a2" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 528 - hash: "84cad44c4cccf8a0942865719d05c2eb" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 544 - hash: "60d24c160adb8e074c04d4f40bf140a8" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 560 - hash: "ff5fac70804eb01da28c2988aba520a4" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 576 - hash: "a6bdf56b4f8783969935488e1955e59c" + hash: "9e887b7206f31bbb95573ea4ff157579" } Frame { msec: 592 - hash: "d0ad97647c5092a64426187406ec5316" + hash: "0d66c3a6c2df2a2ffe95901e55a5f945" } Frame { msec: 608 - hash: "77e7a4a4a9c38cd7b5ef734d39089e3f" + hash: "af497d287a3cc1637da43f3cad97a479" } Frame { msec: 624 - hash: "0285340a2e03568810a76d840369f5c8" + hash: "e7c4f22fcc84e1fdf09191b3ae8529fa" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 640 - hash: "6ba6a1a05c5a9ec0d2897b3454affd09" + hash: "ec6b2062c0dc274febc63aa3a2313299" } Frame { msec: 656 - hash: "3caa36cc3857803248d12ec09ea357df" + hash: "de8e8c97aef11ee03bec315fc82a46f8" } Frame { msec: 672 - hash: "500f7b72acc877fc1662e4f4ceb090e1" + hash: "2f9e1a13c276282fd70b3242ec136b22" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 688 - hash: "aadc71923926885ccce87e6be1c742d7" + hash: "60e390b7bb10dc756c83d5d52c7832f7" } Frame { msec: 704 - hash: "9b7503189ecf2999934716f227469463" + hash: "76bf44fbfcac0c8a6615ef4ba67ee91d" } Frame { msec: 720 - hash: "874296e182abe96e58f9c0463a0f32c9" + hash: "614e3712c8b91bcbadaedca209fc80dc" } Frame { msec: 736 - hash: "4262c79b6844d4d62aa9fb02c335fb95" + hash: "eb2204890d51b1112ea79f37768bb74e" } Frame { msec: 752 - hash: "a5862eaf12cc342054fd3f8d1f4c91c3" + hash: "d5b0d7d19ae4d9df059002e619726266" } Frame { msec: 768 - hash: "0034ef8851c9810ed5d50496aea367da" + hash: "9bd5a7fde4e26a5913c41c61175a2fba" } Frame { msec: 784 - hash: "24cebf60ade86469a154abaa64f3b40d" + hash: "533e6355f554cfc324f90c70484632ab" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 800 - hash: "1100ef4e2db234ea77ff4c70df6bfbe7" + hash: "bf05da75483bdc6c4945c1c3a4f8b72a" } Frame { msec: 816 - hash: "c40d8d42a55dde7dbbcae2dda9aaccb8" + hash: "9b7468ba9c2d9e354d15f60ca7ecf6b6" } Frame { msec: 832 - hash: "5c1000fdc279742cbe46987045c0a92b" + hash: "5d57dbc8d8996c2275da30a6f22ea37f" } Frame { msec: 848 - hash: "bcef4a0ff72330f05f2bf5042e414fde" + hash: "3efa002ab3b856b0b8d4849b8bb6e567" } Frame { msec: 864 - hash: "228551c38b567f1550b44f9dac08786b" + hash: "84471ddf06c2c90a17bbef9d634ffabc" } Frame { msec: 880 - hash: "531c5ca6992c4a12927c61e22c02dd6b" + hash: "cf8460f68815510416dc1cd86dd80c19" } Frame { msec: 896 - hash: "127cc30967f95cb88f4238e0b33c741d" + hash: "7e1e02e0795e695a423ee3518c9e8e8f" } Frame { msec: 912 - hash: "3c3fb1d8dbe7443f80550a30ada7f120" + hash: "ca5ea92767f31f7fb7e04894edadb73b" } Frame { msec: 928 - hash: "edca065d42bf9b63a79d1e97d1a1eed0" + hash: "616e57b513b4e950803c49584de106bd" } Frame { msec: 944 - hash: "1e4424f1f40bfce3205e1d1401ab0dcf" + hash: "718badb44982d10fe92b646aa5dc3d96" } Frame { msec: 960 @@ -246,271 +294,287 @@ VisualTest { } Frame { msec: 976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4acc383cecec9d65dafa3b75b2711577" } Frame { msec: 992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e26dd446fe8ed2b8a57888bc7f2f643" } Frame { msec: 1008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "369f454d8f387320423f2b2e568d6ad6" } Frame { msec: 1024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "369f454d8f387320423f2b2e568d6ad6" + } + Key { + type: 7 + key: 16777249 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "9e26dd446fe8ed2b8a57888bc7f2f643" } Frame { msec: 1056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4acc383cecec9d65dafa3b75b2711577" } Frame { msec: 1072 - hash: "90ac5ad7ce23786fe838426605e737e1" + hash: "2909eabaad28f76c37c780d0e0d9e357" } Frame { msec: 1088 - hash: "1e4424f1f40bfce3205e1d1401ab0dcf" + hash: "718badb44982d10fe92b646aa5dc3d96" } Frame { msec: 1104 - hash: "edca065d42bf9b63a79d1e97d1a1eed0" + hash: "616e57b513b4e950803c49584de106bd" } Frame { msec: 1120 - hash: "3c3fb1d8dbe7443f80550a30ada7f120" + hash: "ca5ea92767f31f7fb7e04894edadb73b" } Frame { msec: 1136 - hash: "127cc30967f95cb88f4238e0b33c741d" + hash: "7e1e02e0795e695a423ee3518c9e8e8f" } Frame { msec: 1152 - hash: "531c5ca6992c4a12927c61e22c02dd6b" + hash: "cf8460f68815510416dc1cd86dd80c19" } Frame { msec: 1168 - hash: "228551c38b567f1550b44f9dac08786b" + hash: "84471ddf06c2c90a17bbef9d634ffabc" + } + Key { + type: 6 + key: 16777234 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 1184 - hash: "bcef4a0ff72330f05f2bf5042e414fde" + hash: "0e4120f723b1b1d879065f0324ba18fa" } Frame { msec: 1200 - hash: "5c1000fdc279742cbe46987045c0a92b" + hash: "2a8c575dbe68797c8a909df9f1166ff8" } Frame { msec: 1216 - hash: "c40d8d42a55dde7dbbcae2dda9aaccb8" + hash: "e26abb9311a2b25ed32efb0da41a4d53" } Frame { msec: 1232 - hash: "1100ef4e2db234ea77ff4c70df6bfbe7" + hash: "d35ae7b04e8ddf1962a20f8593c9c18c" } Frame { msec: 1248 - hash: "24cebf60ade86469a154abaa64f3b40d" + hash: "afbbcee5ea4c854aebb7ba56856cf9c8" } Frame { msec: 1264 - hash: "0034ef8851c9810ed5d50496aea367da" + hash: "2d97ae4f3657617d4f4df55090c2d0e1" } Frame { msec: 1280 - hash: "a5862eaf12cc342054fd3f8d1f4c91c3" + hash: "dc024030252b263dc7dd3c05580d7ec6" + } + Key { + type: 7 + key: 16777234 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 1296 - hash: "4262c79b6844d4d62aa9fb02c335fb95" + hash: "c9072651fd565ed8c6d69a258e464fca" } Frame { msec: 1312 - hash: "874296e182abe96e58f9c0463a0f32c9" + hash: "bb6a90fd1cb94ed4b590c9ae65d31f86" } Frame { msec: 1328 - hash: "9b7503189ecf2999934716f227469463" + hash: "d3e5054c8b0a25adb9bd0fe78bd72153" } Frame { msec: 1344 - hash: "aadc71923926885ccce87e6be1c742d7" + hash: "158e31266eae1718958d37d2096b32af" } Frame { msec: 1360 - hash: "500f7b72acc877fc1662e4f4ceb090e1" + hash: "6986bbfaedae3838de7a92f911d1e4d1" } Frame { msec: 1376 - hash: "3caa36cc3857803248d12ec09ea357df" - } - Key { - type: 6 - key: 16777232 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "8ab83b3b3038150036d6d6135d6e2d8d" } Frame { msec: 1392 - hash: "6ba6a1a05c5a9ec0d2897b3454affd09" + hash: "6749a62f9d9eadc33e2d109c140bfdde" } Frame { msec: 1408 - hash: "0285340a2e03568810a76d840369f5c8" + hash: "7519758a28f49b3a669f6676a1b47253" } Frame { msec: 1424 - hash: "77e7a4a4a9c38cd7b5ef734d39089e3f" + hash: "a8470fa7ddf69b4f86c5933f85256684" } Frame { msec: 1440 - hash: "d0ad97647c5092a64426187406ec5316" + hash: "1f2f34e0dfeb38bd568915718627abf5" } Frame { msec: 1456 - hash: "a6bdf56b4f8783969935488e1955e59c" - } - Key { - type: 7 - key: 16777232 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "d843ec499de0a7c0094a479f75cab4c6" } Frame { msec: 1472 - hash: "ff5fac70804eb01da28c2988aba520a4" + hash: "25cf1c1efce5ad53695099ffeb93d27f" } Frame { msec: 1488 - hash: "60d24c160adb8e074c04d4f40bf140a8" + hash: "25cf1c1efce5ad53695099ffeb93d27f" } Frame { msec: 1504 - hash: "84cad44c4cccf8a0942865719d05c2eb" + hash: "25cf1c1efce5ad53695099ffeb93d27f" } Frame { msec: 1520 - hash: "907c6363d1e524f391d001944febe1ac" + hash: "25cf1c1efce5ad53695099ffeb93d27f" } Frame { msec: 1536 - hash: "313a06d40274e46453342e66236f09f8" + hash: "25cf1c1efce5ad53695099ffeb93d27f" } Frame { msec: 1552 - hash: "0d410f7bfa3e4c58948a8f1e7c7695c4" + hash: "25cf1c1efce5ad53695099ffeb93d27f" } Frame { msec: 1568 - hash: "a9911e076af337fe30e322f03d84a528" + hash: "444090b334e856ff4f9b9938c7676666" } Frame { msec: 1584 - hash: "4a8efcc341bba9ba621ce0f785a75432" + hash: "6064d9310e5d660c8e1aae9e9cfc6bd3" } Frame { msec: 1600 - hash: "479f192c8cf7b8e4407655382402700f" + hash: "fc562db867e30ac63a9992b3cf554553" } Frame { msec: 1616 - hash: "63dc16e66def35abba5159d5650f165d" + hash: "e127594d11d3e4c0d1f3e4585ef3a901" } Frame { msec: 1632 - hash: "26e88aae512304c28d425c311febce1b" + hash: "6d3d43b6a38cf1c64289282bbcaf2ac2" + } + Frame { + msec: 1648 + hash: "bd58d75020a5272ae3cdcb0ed780e496" } Key { type: 6 - key: 16777233 - modifiers: 0 + key: 16777249 + modifiers: 33554432 text: "" autorep: false count: 1 } Frame { - msec: 1648 - hash: "8dca7a7912ddaa853dff9c09882082b1" - } - Frame { msec: 1664 - hash: "5c3ebee155e29a0ba4a45706dd87396a" + hash: "655cdefae8b30a40e6baaa04b790f811" } Frame { msec: 1680 - hash: "29a517a66867f6f527c6db5bb5651f92" + hash: "a654e6c9c5414593425bd2ccc6a0f916" } Frame { msec: 1696 - hash: "a4fde31f55f866224eca2b51586b601f" + hash: "88e3865dcb7da6be36cff12a1da7c94b" } Frame { msec: 1712 - hash: "9c9c7fb9fb8aab8c24f2eb03df791a00" + hash: "4d85866e40d8118081d2747af7343c42" } Frame { msec: 1728 - hash: "dd972e37166d1186a717a956343a7758" - } - Key { - type: 7 - key: 16777233 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "d84111903e76a53be7b55d7dc3847914" } Frame { msec: 1744 - hash: "1af5e24651ef422ff93dab7bd2a8f832" + hash: "4f7b708a511dc7a882af661ca3282404" } Frame { msec: 1760 - hash: "885473be4e44bb1f4b014f9b3d4d2e74" + hash: "29d940c479f0c76c6f4d88e417672878" } Frame { msec: 1776 - hash: "1f6e0407392322c34567caaecae5b449" + hash: "ade916241f4b2a50e6b84f8ae41369ef" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1792 - hash: "dcae85a4b05c450b6b1619f9fd7e17b0" + hash: "ecd42368bf2a9058185b9b25b659f4c6" } Frame { msec: 1808 - hash: "3b872e5030e34edf678ac2547df48699" + hash: "7937850b86f3611ee1d75da9deb7420d" } Frame { msec: 1824 - hash: "5d76b324496297d08cff57b4c21ce592" + hash: "8004e4ab3ed02f68f6f5f7f5fb9fe6c6" } Frame { msec: 1840 - hash: "4acfe3c4cf2f4e477f1a72817af556d2" + hash: "0a2c07dc17922651d2abd6400fff6e43" } Frame { msec: 1856 - hash: "a04671fe8d28cfb629f2090e342747fb" + hash: "c3df3735586ed103d137d4902d7a1cc3" } Frame { msec: 1872 - hash: "2474db802c7d8e0ec8fa7f958c04bf30" + hash: "690aa50862a887edcc9392d1c3ca0424" } Frame { msec: 1888 - hash: "11a1e1f38c407de4bc069aa192319fe4" + hash: "56cc00965e12254e0133fe1d914fffb2" } Frame { msec: 1904 - hash: "ec8aacc8d2280068dd7f020e8648afea" + hash: "fa7d20c99cb8c20494b558ce8ef860a2" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1920 @@ -518,271 +582,271 @@ VisualTest { } Frame { msec: 1936 - hash: "fbbe4d0fed6274968a89e02bb1ca5685" + hash: "e8cd9511f073ff40a6645ad6aa2b5bee" } Frame { msec: 1952 - hash: "13d478424a8f0cab8bab6a157efce318" + hash: "b5e956f236ba52cb673af22417d1aabc" } Frame { msec: 1968 - hash: "ea6bc9ec217fb80b86276a2675c08a0f" + hash: "b297d098f02fbbeac830b20b0a5194c5" } Frame { msec: 1984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c711fd5d0c3900494493f8309b79ad0c" } Frame { msec: 2000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c9bf546976fc17de9ea9e877f4978f02" } Frame { msec: 2016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "fd83046af94eac26d394a5da986e734c" } Frame { msec: 2032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c9bf546976fc17de9ea9e877f4978f02" } Frame { msec: 2048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c711fd5d0c3900494493f8309b79ad0c" } Frame { msec: 2064 - hash: "ea6bc9ec217fb80b86276a2675c08a0f" + hash: "b297d098f02fbbeac830b20b0a5194c5" } Frame { msec: 2080 - hash: "13d478424a8f0cab8bab6a157efce318" + hash: "b5e956f236ba52cb673af22417d1aabc" } Frame { msec: 2096 - hash: "fbbe4d0fed6274968a89e02bb1ca5685" + hash: "e8cd9511f073ff40a6645ad6aa2b5bee" } Frame { msec: 2112 - hash: "00dedd48bd6861cb4bf4953162a67cc0" - } - Key { - type: 6 - key: 16777248 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "315734f8f38efbc810ca2e65bd752ddd" } Frame { msec: 2128 - hash: "ec8aacc8d2280068dd7f020e8648afea" + hash: "fa7d20c99cb8c20494b558ce8ef860a2" } Frame { msec: 2144 - hash: "11a1e1f38c407de4bc069aa192319fe4" + hash: "56cc00965e12254e0133fe1d914fffb2" } Frame { msec: 2160 - hash: "2474db802c7d8e0ec8fa7f958c04bf30" + hash: "690aa50862a887edcc9392d1c3ca0424" } Frame { msec: 2176 - hash: "a04671fe8d28cfb629f2090e342747fb" + hash: "c3df3735586ed103d137d4902d7a1cc3" } Frame { msec: 2192 - hash: "4acfe3c4cf2f4e477f1a72817af556d2" + hash: "0a2c07dc17922651d2abd6400fff6e43" } Frame { msec: 2208 - hash: "5d76b324496297d08cff57b4c21ce592" + hash: "8004e4ab3ed02f68f6f5f7f5fb9fe6c6" } Frame { msec: 2224 - hash: "3b872e5030e34edf678ac2547df48699" + hash: "7937850b86f3611ee1d75da9deb7420d" + } + Key { + type: 7 + key: 16777248 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2240 - hash: "dcae85a4b05c450b6b1619f9fd7e17b0" + hash: "ecd42368bf2a9058185b9b25b659f4c6" } Frame { msec: 2256 - hash: "1f6e0407392322c34567caaecae5b449" + hash: "e545c6ba42edd1e6a055b48f162315ab" } Frame { msec: 2272 - hash: "885473be4e44bb1f4b014f9b3d4d2e74" + hash: "f8b28cd90fe0c4aa90e8a69d2d9cdce7" } Frame { msec: 2288 - hash: "1af5e24651ef422ff93dab7bd2a8f832" + hash: "49de66674e8f38f925f3505c64201076" } Frame { msec: 2304 - hash: "dd972e37166d1186a717a956343a7758" + hash: "b33880917cae07d038620065ec2c1d1c" } Frame { msec: 2320 - hash: "9c9c7fb9fb8aab8c24f2eb03df791a00" - } - Key { - type: 6 - key: 16777232 - modifiers: 33554432 - text: "" - autorep: false - count: 1 + hash: "97c8af8dc7e5372a3a0f5bed0050127e" } Frame { msec: 2336 - hash: "aec9683f3a677dab781bdf3bbf7cce5e" + hash: "b0236b8c44398cb9f97324f6ca9ce5c4" } Frame { msec: 2352 - hash: "63c6a7810dec832f1b8288807f1d932a" + hash: "2695b45a1ea89518d236ef3b8dccd89e" + } + Key { + type: 6 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2368 - hash: "70409eeee50fbb54097a3c430e1e1f21" + hash: "61370b1d04626facfd243176cb4bb79b" } Frame { msec: 2384 - hash: "efc77b82c0ffd7f3fbe5fed06ea418bd" + hash: "53c53e501469ca0ef0f0325a13aa4aa4" } Frame { msec: 2400 - hash: "26e88aae512304c28d425c311febce1b" + hash: "c56717a79ccffe756c5423bc5e44a53f" } Frame { msec: 2416 - hash: "63dc16e66def35abba5159d5650f165d" + hash: "e5ec3e6d4a7a527e8f2c0afa5fd66c4b" } Frame { msec: 2432 - hash: "479f192c8cf7b8e4407655382402700f" - } - Key { - type: 7 - key: 16777232 - modifiers: 33554432 - text: "" - autorep: false - count: 1 + hash: "4ccb9af28572e13f961f2057eb98482d" } Frame { msec: 2448 - hash: "4a8efcc341bba9ba621ce0f785a75432" + hash: "0b8ce455fd40c3cd74fb05d4b603cceb" } Frame { msec: 2464 - hash: "a9911e076af337fe30e322f03d84a528" + hash: "f5c3754201dbb6f4ca4f4c1611036c5a" } Frame { msec: 2480 - hash: "0d410f7bfa3e4c58948a8f1e7c7695c4" + hash: "0173dd60a64da4c06fa9a398d2c98206" + } + Key { + type: 7 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2496 - hash: "313a06d40274e46453342e66236f09f8" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 2512 - hash: "907c6363d1e524f391d001944febe1ac" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 2528 - hash: "84cad44c4cccf8a0942865719d05c2eb" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 2544 - hash: "60d24c160adb8e074c04d4f40bf140a8" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 2560 - hash: "ff5fac70804eb01da28c2988aba520a4" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 2576 - hash: "a6bdf56b4f8783969935488e1955e59c" + hash: "3c1972940b70a388ebfd007b0b5d9860" } Frame { msec: 2592 - hash: "d0ad97647c5092a64426187406ec5316" + hash: "674707d6ae5ef5109940f1bd62427a63" } Frame { msec: 2608 - hash: "77e7a4a4a9c38cd7b5ef734d39089e3f" + hash: "8f512390b74d7a545eb60a86d4b8dee6" } Frame { msec: 2624 - hash: "0285340a2e03568810a76d840369f5c8" + hash: "0502cfe70da38a6ebccd7fdf799be464" } Frame { msec: 2640 - hash: "6ba6a1a05c5a9ec0d2897b3454affd09" + hash: "23c45beae15b893ec4450b0d380aeb17" } Frame { msec: 2656 - hash: "3caa36cc3857803248d12ec09ea357df" + hash: "45de58892db757e76c95ddb76e267f6f" } Frame { msec: 2672 - hash: "500f7b72acc877fc1662e4f4ceb090e1" + hash: "ff3f1529c937c4d95cf4dfb8592759dc" } Frame { msec: 2688 - hash: "aadc71923926885ccce87e6be1c742d7" + hash: "236c6e16bbfab9268f488d6dbf9544be" } Frame { msec: 2704 - hash: "9b7503189ecf2999934716f227469463" + hash: "3bb19cbddf5e66c08bdd5c881e93db3e" } Frame { msec: 2720 - hash: "874296e182abe96e58f9c0463a0f32c9" + hash: "057ea6d1007993908c9c398391b85072" } Frame { msec: 2736 - hash: "4262c79b6844d4d62aa9fb02c335fb95" + hash: "faa124cd5d0a027dc5e3b92125bc9cc5" } Frame { msec: 2752 - hash: "a5862eaf12cc342054fd3f8d1f4c91c3" + hash: "234ac2e7f0b87a86e0678e3cbc5a1e30" } Frame { msec: 2768 - hash: "0034ef8851c9810ed5d50496aea367da" + hash: "bdee3016f1811188691786bafe305196" } Frame { msec: 2784 - hash: "24cebf60ade86469a154abaa64f3b40d" - } - Key { - type: 7 - key: 16777248 - modifiers: 33554432 - text: "" - autorep: false - count: 1 + hash: "9ecc192aec9b15314132b16dd3f43860" } Frame { msec: 2800 - hash: "1100ef4e2db234ea77ff4c70df6bfbe7" + hash: "26dc03cf86d6812cfb788599b1c34de0" } Frame { msec: 2816 - hash: "c40d8d42a55dde7dbbcae2dda9aaccb8" + hash: "8752b33ae49ea6d1ee27376d8585776e" } Frame { msec: 2832 - hash: "5c1000fdc279742cbe46987045c0a92b" + hash: "a181b264ba729ad1d8ff91a0c56fb98a" } Frame { msec: 2848 - hash: "bcef4a0ff72330f05f2bf5042e414fde" + hash: "af426cd28c90ac2d46d2b2478ce616f3" + } + Key { + type: 6 + key: 16777236 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2864 - hash: "228551c38b567f1550b44f9dac08786b" + hash: "7462f7f9c339fc4d8b0c08e54b0ed71d" } Frame { msec: 2880 @@ -790,511 +854,527 @@ VisualTest { } Frame { msec: 2896 - hash: "127cc30967f95cb88f4238e0b33c741d" + hash: "10f5b360c3809fbe51de55f47199c541" } Frame { msec: 2912 - hash: "3c3fb1d8dbe7443f80550a30ada7f120" + hash: "ecab3f62c89e1cb9ff9b10ace4cdb40b" } Frame { msec: 2928 - hash: "edca065d42bf9b63a79d1e97d1a1eed0" + hash: "d3eac9d8cd01bbb44fd61fca497230c0" } Frame { msec: 2944 - hash: "1e4424f1f40bfce3205e1d1401ab0dcf" + hash: "33ff6af85e783c617a42ca5021d1463b" } Frame { msec: 2960 - hash: "90ac5ad7ce23786fe838426605e737e1" + hash: "a53cccc463d6f6fc24dc0d6309246640" } Frame { msec: 2976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8fc354dd6ddbd829240a3c2c9dcafdeb" + } + Key { + type: 7 + key: 16777236 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 2992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0529a6cb7083caf513de4677970ed33f" } Frame { msec: 3008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "bb38f9cdd67d18bc9297b353d499bb35" } Frame { msec: 3024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "bb38f9cdd67d18bc9297b353d499bb35" } Frame { msec: 3040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0529a6cb7083caf513de4677970ed33f" } Frame { msec: 3056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "8fc354dd6ddbd829240a3c2c9dcafdeb" } Frame { msec: 3072 - hash: "90ac5ad7ce23786fe838426605e737e1" - } - Key { - type: 6 - key: 16777236 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "a53cccc463d6f6fc24dc0d6309246640" } Frame { msec: 3088 - hash: "cf467854dfde9b2111bc6e7e4442aab5" + hash: "33ff6af85e783c617a42ca5021d1463b" } Frame { msec: 3104 - hash: "df6f025130dc82f4764def81cec5fa7b" + hash: "d3eac9d8cd01bbb44fd61fca497230c0" } Frame { msec: 3120 - hash: "bdcafed4ae9c890eec2e3e0cb2ff5a14" + hash: "ecab3f62c89e1cb9ff9b10ace4cdb40b" } Frame { msec: 3136 - hash: "14b328c8ec6276e022643102af80fa44" + hash: "10f5b360c3809fbe51de55f47199c541" } Frame { msec: 3152 - hash: "078d75d72bff036574b85ac0aeaaf2b6" + hash: "2a0b3f5170c31a2f2ae512ab3c4268fc" } Frame { msec: 3168 - hash: "fbefb1e0801f4578ab93dd7ff4062e68" + hash: "7462f7f9c339fc4d8b0c08e54b0ed71d" } Frame { msec: 3184 - hash: "eac8375d9b9cf0afbf232e27c6ceb037" - } - Key { - type: 7 - key: 16777236 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "0367ee5e3204a54d225791fbd833fc21" } Frame { msec: 3200 - hash: "3462a3e166120515e67430600e4653f8" + hash: "86f96b2b846cad8660d80f7dbda24806" } Frame { msec: 3216 - hash: "7f2d9959323f0707e36ecb2252c89727" - } - Frame { - msec: 3232 - hash: "0a1c2eb8a7451a5e37fefb96a58a88a1" - } - Frame { - msec: 3248 - hash: "4a02aaca12e3fd86ee3b516b3a307f86" + hash: "ce05bb9e0a7bd884c12f100b9d219461" } Key { type: 6 - key: 16777234 - modifiers: 0 + key: 16777236 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { + msec: 3232 + hash: "8b04473fad0ffec6b56d2dca8d4dd81c" + } + Frame { + msec: 3248 + hash: "cedcf233a83047beef7a8aa3486df671" + } + Frame { msec: 3264 - hash: "0034ef8851c9810ed5d50496aea367da" + hash: "8117b9590a36bbb4fd0d73c1df2e655e" } Frame { msec: 3280 - hash: "a5862eaf12cc342054fd3f8d1f4c91c3" + hash: "5c3168c676a7dc35913e365b2acafea1" } Frame { msec: 3296 - hash: "4262c79b6844d4d62aa9fb02c335fb95" + hash: "4314ebdafbfbad5f108a4cb9874ed06c" } Frame { msec: 3312 - hash: "874296e182abe96e58f9c0463a0f32c9" + hash: "d2ffe99b443ecf1188bd3639ddbccda3" } Frame { msec: 3328 - hash: "9b7503189ecf2999934716f227469463" - } - Frame { - msec: 3344 - hash: "aadc71923926885ccce87e6be1c742d7" - } - Frame { - msec: 3360 - hash: "500f7b72acc877fc1662e4f4ceb090e1" + hash: "a0894a3492ed7e5bf5b834db890325e2" } Key { type: 7 - key: 16777234 - modifiers: 0 + key: 16777236 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { + msec: 3344 + hash: "57498e86bdc3cfd37bf29505c289d100" + } + Frame { + msec: 3360 + hash: "57d77411f30c4733f2afec2fc99f3d0b" + } + Frame { msec: 3376 - hash: "3caa36cc3857803248d12ec09ea357df" + hash: "a3c4b4fef44c4019daba366c1e3a58b1" } Frame { msec: 3392 - hash: "6ba6a1a05c5a9ec0d2897b3454affd09" + hash: "f8461558248b7da3bdf2df641154171a" } Frame { msec: 3408 - hash: "0285340a2e03568810a76d840369f5c8" + hash: "13e84656ef70bf07e2a444d60ac933e1" } Frame { msec: 3424 - hash: "77e7a4a4a9c38cd7b5ef734d39089e3f" + hash: "186d8a59092cfe4128b46a3c87eb347b" } Frame { msec: 3440 - hash: "d0ad97647c5092a64426187406ec5316" + hash: "ac4898002fdc5ea7894d741cac863c8d" } Frame { msec: 3456 - hash: "a6bdf56b4f8783969935488e1955e59c" + hash: "2e95c1966c94acccd2a44a6c2942d36d" } Frame { msec: 3472 - hash: "ff5fac70804eb01da28c2988aba520a4" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 3488 - hash: "60d24c160adb8e074c04d4f40bf140a8" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 3504 - hash: "84cad44c4cccf8a0942865719d05c2eb" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 3520 - hash: "907c6363d1e524f391d001944febe1ac" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 3536 - hash: "313a06d40274e46453342e66236f09f8" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 3552 - hash: "0d410f7bfa3e4c58948a8f1e7c7695c4" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 3568 - hash: "a9911e076af337fe30e322f03d84a528" + hash: "7f83ba29fd27aa4817b7b84afbc8d6d7" } Frame { msec: 3584 - hash: "4a8efcc341bba9ba621ce0f785a75432" + hash: "8575a99b28bb5b8c2d01a5ed91f25d47" } Frame { msec: 3600 - hash: "479f192c8cf7b8e4407655382402700f" + hash: "eda67cb2d32f3f605a74a01148f04c99" } Frame { msec: 3616 - hash: "63dc16e66def35abba5159d5650f165d" + hash: "1d65e6e7160f092fe65f683df7c10f92" } Frame { msec: 3632 - hash: "26e88aae512304c28d425c311febce1b" + hash: "274c59f268f667a1f11b8ea04a4f88a0" } Frame { msec: 3648 - hash: "efc77b82c0ffd7f3fbe5fed06ea418bd" + hash: "e46d917e79910b3319c4579776bbdd60" } Frame { msec: 3664 - hash: "70409eeee50fbb54097a3c430e1e1f21" + hash: "42b7662aad44804653101117ca698023" } Frame { msec: 3680 - hash: "63c6a7810dec832f1b8288807f1d932a" + hash: "dda5147cb6e4e8f61819de6a90dcb165" } Frame { msec: 3696 - hash: "aec9683f3a677dab781bdf3bbf7cce5e" + hash: "b4a5dcd0bb667d3a42c8f0703d753ed6" } Frame { msec: 3712 - hash: "2e6dd79fc23acbf710e757f3d0999ab8" + hash: "4ae70de6785fdbecf7650637c8e99a71" } Frame { msec: 3728 - hash: "4d9dd9e515a21478cb3364032acf8c15" + hash: "22dc8343eab28b0526d5486405b68478" + } + Key { + type: 6 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 3744 - hash: "5dc2129cac6e667d39da3304a37a76f2" + hash: "49de66674e8f38f925f3505c64201076" } Frame { msec: 3760 - hash: "ab5eb4750139875586a346b1c3a84f42" + hash: "f8b28cd90fe0c4aa90e8a69d2d9cdce7" } Frame { msec: 3776 - hash: "96d3bd62d4a0bf39a672b97fcc050bd5" + hash: "e545c6ba42edd1e6a055b48f162315ab" } Frame { msec: 3792 - hash: "546cec655631b5802eb4d7008093eb69" + hash: "ecd42368bf2a9058185b9b25b659f4c6" } Frame { msec: 3808 - hash: "85f33f1bf1b1e11be450ab85bf6dab3d" + hash: "7937850b86f3611ee1d75da9deb7420d" } Frame { msec: 3824 - hash: "44b195297acd1bf59e43751df8dc1c1d" + hash: "8004e4ab3ed02f68f6f5f7f5fb9fe6c6" } Frame { msec: 3840 image: "cursorDelegate.3.png" } + Key { + type: 7 + key: 16777234 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } Frame { msec: 3856 - hash: "47942253c07fd39894445ff5e5b9608c" + hash: "c3df3735586ed103d137d4902d7a1cc3" } Frame { msec: 3872 - hash: "d26d71b1c03fb21550820dd1586a7a8e" + hash: "690aa50862a887edcc9392d1c3ca0424" } Frame { msec: 3888 - hash: "37ec2ed29006575e8bd41a1989b75e27" + hash: "56cc00965e12254e0133fe1d914fffb2" } Frame { msec: 3904 - hash: "5ad1ab34572f9ef339774134bc0ab407" + hash: "fa7d20c99cb8c20494b558ce8ef860a2" } Frame { msec: 3920 - hash: "a4f68f6ee46642e7cc5a542b9f8a2464" + hash: "315734f8f38efbc810ca2e65bd752ddd" } Frame { msec: 3936 - hash: "fce95d18a0efee74554209ca39637062" + hash: "e8cd9511f073ff40a6645ad6aa2b5bee" } Frame { msec: 3952 - hash: "1587fc2668f1f44e76f252bfd75f2708" + hash: "b5e956f236ba52cb673af22417d1aabc" } Frame { msec: 3968 - hash: "e0a6eb42de552281e297ca5c50c1df23" + hash: "b297d098f02fbbeac830b20b0a5194c5" } Frame { msec: 3984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c711fd5d0c3900494493f8309b79ad0c" } Frame { msec: 4000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c9bf546976fc17de9ea9e877f4978f02" } Frame { msec: 4016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "fd83046af94eac26d394a5da986e734c" } Frame { msec: 4032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c9bf546976fc17de9ea9e877f4978f02" } Frame { msec: 4048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "c711fd5d0c3900494493f8309b79ad0c" } Frame { msec: 4064 - hash: "e0a6eb42de552281e297ca5c50c1df23" + hash: "b297d098f02fbbeac830b20b0a5194c5" + } + Key { + type: 7 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 4080 - hash: "1587fc2668f1f44e76f252bfd75f2708" + hash: "b5e956f236ba52cb673af22417d1aabc" } Frame { msec: 4096 - hash: "fce95d18a0efee74554209ca39637062" + hash: "e8cd9511f073ff40a6645ad6aa2b5bee" } Frame { msec: 4112 - hash: "a4f68f6ee46642e7cc5a542b9f8a2464" + hash: "315734f8f38efbc810ca2e65bd752ddd" } Frame { msec: 4128 - hash: "5ad1ab34572f9ef339774134bc0ab407" + hash: "fa7d20c99cb8c20494b558ce8ef860a2" } Frame { msec: 4144 - hash: "37ec2ed29006575e8bd41a1989b75e27" + hash: "56cc00965e12254e0133fe1d914fffb2" } Frame { msec: 4160 - hash: "d26d71b1c03fb21550820dd1586a7a8e" + hash: "690aa50862a887edcc9392d1c3ca0424" } Frame { msec: 4176 - hash: "47942253c07fd39894445ff5e5b9608c" + hash: "c3df3735586ed103d137d4902d7a1cc3" } Frame { msec: 4192 - hash: "a62f1cbf43da0381c7c9099d47ded882" + hash: "0a2c07dc17922651d2abd6400fff6e43" } Frame { msec: 4208 - hash: "44b195297acd1bf59e43751df8dc1c1d" + hash: "8004e4ab3ed02f68f6f5f7f5fb9fe6c6" } Frame { msec: 4224 - hash: "85f33f1bf1b1e11be450ab85bf6dab3d" + hash: "7937850b86f3611ee1d75da9deb7420d" } Frame { msec: 4240 - hash: "546cec655631b5802eb4d7008093eb69" + hash: "ecd42368bf2a9058185b9b25b659f4c6" } Frame { msec: 4256 - hash: "96d3bd62d4a0bf39a672b97fcc050bd5" + hash: "e545c6ba42edd1e6a055b48f162315ab" } Frame { msec: 4272 - hash: "ab5eb4750139875586a346b1c3a84f42" + hash: "f8b28cd90fe0c4aa90e8a69d2d9cdce7" } Frame { msec: 4288 - hash: "5dc2129cac6e667d39da3304a37a76f2" + hash: "49de66674e8f38f925f3505c64201076" } Frame { msec: 4304 - hash: "4d9dd9e515a21478cb3364032acf8c15" + hash: "b33880917cae07d038620065ec2c1d1c" } Frame { msec: 4320 - hash: "2e6dd79fc23acbf710e757f3d0999ab8" + hash: "97c8af8dc7e5372a3a0f5bed0050127e" } Frame { msec: 4336 - hash: "aec9683f3a677dab781bdf3bbf7cce5e" + hash: "b0236b8c44398cb9f97324f6ca9ce5c4" } Frame { msec: 4352 - hash: "63c6a7810dec832f1b8288807f1d932a" + hash: "2695b45a1ea89518d236ef3b8dccd89e" } Frame { msec: 4368 - hash: "70409eeee50fbb54097a3c430e1e1f21" + hash: "61370b1d04626facfd243176cb4bb79b" } Frame { msec: 4384 - hash: "efc77b82c0ffd7f3fbe5fed06ea418bd" + hash: "53c53e501469ca0ef0f0325a13aa4aa4" } Frame { msec: 4400 - hash: "26e88aae512304c28d425c311febce1b" + hash: "c56717a79ccffe756c5423bc5e44a53f" } Frame { msec: 4416 - hash: "63dc16e66def35abba5159d5650f165d" + hash: "e5ec3e6d4a7a527e8f2c0afa5fd66c4b" } Frame { msec: 4432 - hash: "479f192c8cf7b8e4407655382402700f" + hash: "4ccb9af28572e13f961f2057eb98482d" } Frame { msec: 4448 - hash: "4a8efcc341bba9ba621ce0f785a75432" + hash: "0b8ce455fd40c3cd74fb05d4b603cceb" } Frame { msec: 4464 - hash: "a9911e076af337fe30e322f03d84a528" + hash: "f5c3754201dbb6f4ca4f4c1611036c5a" } Frame { msec: 4480 - hash: "0d410f7bfa3e4c58948a8f1e7c7695c4" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4496 - hash: "313a06d40274e46453342e66236f09f8" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4512 - hash: "907c6363d1e524f391d001944febe1ac" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4528 - hash: "84cad44c4cccf8a0942865719d05c2eb" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4544 - hash: "60d24c160adb8e074c04d4f40bf140a8" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4560 - hash: "ff5fac70804eb01da28c2988aba520a4" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4576 - hash: "a6bdf56b4f8783969935488e1955e59c" + hash: "3c1972940b70a388ebfd007b0b5d9860" } Frame { msec: 4592 - hash: "d0ad97647c5092a64426187406ec5316" + hash: "674707d6ae5ef5109940f1bd62427a63" } Frame { msec: 4608 - hash: "77e7a4a4a9c38cd7b5ef734d39089e3f" + hash: "8f512390b74d7a545eb60a86d4b8dee6" } Frame { msec: 4624 - hash: "0285340a2e03568810a76d840369f5c8" + hash: "0502cfe70da38a6ebccd7fdf799be464" } Frame { msec: 4640 - hash: "6ba6a1a05c5a9ec0d2897b3454affd09" + hash: "23c45beae15b893ec4450b0d380aeb17" } Frame { msec: 4656 - hash: "3caa36cc3857803248d12ec09ea357df" + hash: "45de58892db757e76c95ddb76e267f6f" } Frame { msec: 4672 - hash: "500f7b72acc877fc1662e4f4ceb090e1" + hash: "ff3f1529c937c4d95cf4dfb8592759dc" } Frame { msec: 4688 - hash: "aadc71923926885ccce87e6be1c742d7" + hash: "236c6e16bbfab9268f488d6dbf9544be" } Frame { msec: 4704 - hash: "9b7503189ecf2999934716f227469463" + hash: "3bb19cbddf5e66c08bdd5c881e93db3e" } Frame { msec: 4720 - hash: "874296e182abe96e58f9c0463a0f32c9" + hash: "057ea6d1007993908c9c398391b85072" } Frame { msec: 4736 - hash: "4262c79b6844d4d62aa9fb02c335fb95" + hash: "faa124cd5d0a027dc5e3b92125bc9cc5" } Frame { msec: 4752 - hash: "a5862eaf12cc342054fd3f8d1f4c91c3" + hash: "234ac2e7f0b87a86e0678e3cbc5a1e30" } Frame { msec: 4768 - hash: "0034ef8851c9810ed5d50496aea367da" + hash: "bdee3016f1811188691786bafe305196" } Frame { msec: 4784 - hash: "24cebf60ade86469a154abaa64f3b40d" + hash: "9ecc192aec9b15314132b16dd3f43860" } Frame { msec: 4800 @@ -1302,2254 +1382,118 @@ VisualTest { } Frame { msec: 4816 - hash: "c40d8d42a55dde7dbbcae2dda9aaccb8" + hash: "8752b33ae49ea6d1ee27376d8585776e" } Frame { msec: 4832 - hash: "5c1000fdc279742cbe46987045c0a92b" + hash: "a181b264ba729ad1d8ff91a0c56fb98a" } Frame { msec: 4848 - hash: "bcef4a0ff72330f05f2bf5042e414fde" + hash: "af426cd28c90ac2d46d2b2478ce616f3" } Frame { msec: 4864 - hash: "228551c38b567f1550b44f9dac08786b" + hash: "d062f03ccc0eb1f56aba411e1078c4ab" } Frame { msec: 4880 - hash: "531c5ca6992c4a12927c61e22c02dd6b" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 130; y: 101 - modifiers: 0 - sendToViewport: true + hash: "793cb0a98cac4a0f5d9a1dc5df5cd0ce" } Frame { msec: 4896 - hash: "14b328c8ec6276e022643102af80fa44" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 130; y: 102 - modifiers: 0 - sendToViewport: true + hash: "da1f9732e1d7cd0b82f0c0949937067e" } Frame { msec: 4912 - hash: "bdcafed4ae9c890eec2e3e0cb2ff5a14" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 131; y: 102 - modifiers: 0 - sendToViewport: true + hash: "35d38ce67e19453f255241473294f7e9" } Frame { msec: 4928 - hash: "df6f025130dc82f4764def81cec5fa7b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 132; y: 103 - modifiers: 0 - sendToViewport: true + hash: "e8c5d9895119167f2fcb4a15b0f1b65e" } Frame { msec: 4944 - hash: "cf467854dfde9b2111bc6e7e4442aab5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 133; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 134; y: 103 - modifiers: 0 - sendToViewport: true + hash: "26c0d91942f1cb3313d604804d1e4b9e" } Frame { msec: 4960 - hash: "cfcdf63ca06c2b9ab197821bc1e48c7c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 135; y: 103 - modifiers: 0 - sendToViewport: true + hash: "eaf1ba458119f6d3dedcd581d5c04f8c" } Frame { msec: 4976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 136; y: 103 - modifiers: 0 - sendToViewport: true + hash: "a54c778d78c9a715ce0429e9c366ef8b" } Frame { msec: 4992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 137; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 138; y: 102 - modifiers: 0 - sendToViewport: true + hash: "f3a8edba1311c54a12024dbcf1656b85" } Frame { msec: 5008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 139; y: 101 - modifiers: 0 - sendToViewport: true + hash: "7c5c30318c41ab5c5874239bbcfbaae2" } Frame { msec: 5024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 140; y: 101 - modifiers: 0 - sendToViewport: true + hash: "7c5c30318c41ab5c5874239bbcfbaae2" } Frame { msec: 5040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 141; y: 100 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 143; y: 100 - modifiers: 0 - sendToViewport: true + hash: "f3a8edba1311c54a12024dbcf1656b85" } Frame { msec: 5056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 100 - modifiers: 0 - sendToViewport: true + hash: "a54c778d78c9a715ce0429e9c366ef8b" } Frame { msec: 5072 - hash: "cfcdf63ca06c2b9ab197821bc1e48c7c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 146; y: 99 - modifiers: 0 - sendToViewport: true + hash: "eaf1ba458119f6d3dedcd581d5c04f8c" } Frame { msec: 5088 - hash: "cf467854dfde9b2111bc6e7e4442aab5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 148; y: 99 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 149; y: 99 - modifiers: 0 - sendToViewport: true + hash: "26c0d91942f1cb3313d604804d1e4b9e" } Frame { msec: 5104 - hash: "7643fcfb740d33b87915300684e85a44" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 150; y: 99 - modifiers: 0 - sendToViewport: true + hash: "e8c5d9895119167f2fcb4a15b0f1b65e" } Frame { msec: 5120 - hash: "1bd041a5e8d2237b51720fed82250303" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 151; y: 99 - modifiers: 0 - sendToViewport: true + hash: "35d38ce67e19453f255241473294f7e9" } Frame { msec: 5136 - hash: "1a00c9d3ce747e3bc7ee5878d21260b4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 99 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 98 - modifiers: 0 - sendToViewport: true + hash: "da1f9732e1d7cd0b82f0c0949937067e" } Frame { msec: 5152 - hash: "803896c1be68588ba2cddd7effbb8d62" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 153; y: 98 - modifiers: 0 - sendToViewport: true + hash: "793cb0a98cac4a0f5d9a1dc5df5cd0ce" } Frame { msec: 5168 - hash: "282ab572698088fba3aba8e6a091aa38" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 98 - modifiers: 0 - sendToViewport: true + hash: "d062f03ccc0eb1f56aba411e1078c4ab" } Frame { msec: 5184 - hash: "24402d9e4fabd78bc8f3921db82e554e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 155; y: 98 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 156; y: 98 - modifiers: 0 - sendToViewport: true + hash: "af426cd28c90ac2d46d2b2478ce616f3" } Frame { msec: 5200 - hash: "39a89e9ca7c4edd9c8503927d639df0f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 98 - modifiers: 0 - sendToViewport: true + hash: "a181b264ba729ad1d8ff91a0c56fb98a" } Frame { msec: 5216 - hash: "b984b7d032544acd4dab8901e0af1ef5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 158; y: 98 - modifiers: 0 - sendToViewport: true + hash: "8752b33ae49ea6d1ee27376d8585776e" } Frame { msec: 5232 - hash: "e014414626407b0446939ad2ce38b7dd" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 98 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 161; y: 98 - modifiers: 0 - sendToViewport: true + hash: "26dc03cf86d6812cfb788599b1c34de0" } Frame { msec: 5248 - hash: "beccb93613279e2f48507ddc9a4418e8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 163; y: 97 - modifiers: 0 - sendToViewport: true + hash: "9ecc192aec9b15314132b16dd3f43860" } Frame { msec: 5264 - hash: "dd861f8dc89587301e860217fdf2a701" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 164; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5280 - hash: "1ae0b7a18a7d3ebe4871a0045005e2b7" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 166; y: 96 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 168; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5296 - hash: "071e1f8bcc0e541b23d134f32c19d20b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 170; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5312 - hash: "e8ce2716f4595bc5bf68c24c8a63bbfe" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 174; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5328 - hash: "d36a35503af76b12fe5cec65e3f22eda" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 176; y: 96 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 178; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5344 - hash: "cea0f90a56fd5789b3e166f09f2bfcec" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 179; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5360 - hash: "151f5357d9c1a3f1fe09380a287abab0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 180; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5376 - hash: "bdab9d7077734087cb7f9516e9c517bc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 182; y: 95 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5392 - hash: "6d6d929a7c7be1d2e7d1b2f98a6866be" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5408 - hash: "3fbe3f45afc5aa40fff7f795ced8a05d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 187; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5424 - hash: "b35b4dc480aeb76912d927b0ff8676c6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 189; y: 93 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 191; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5440 - hash: "94e82e888280f20cce3ac38b353b79f4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 192; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5456 - hash: "4674fbd35e467bed780a5ea2fe2e258b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 194; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5472 - hash: "698827bfa7ff2eae6b0e0efa99bb15bb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 196; y: 92 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 198; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5488 - hash: "67c7adef5e41481d631f54d34423b93d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 199; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5504 - hash: "097512c005127fa3ebfcbc52808264a8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 200; y: 91 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5520 - hash: "ad64b5913350e6c6fda199ecb34278f4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 200; y: 91 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 201; y: 90 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5536 - hash: "3237e88e0f40595d2fde62723c00b7fa" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 202; y: 89 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5552 - hash: "18db89296849f22a7af0a1ffc9762a32" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 203; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5568 - hash: "7f6ac84baaa2c5fcd22ba45172611840" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 204; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5584 - hash: "7b887d3aa44229d9f25fdde8f5ccf471" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 207; y: 86 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 208; y: 85 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5600 - hash: "b0c08726d0f2a460d5862cd2d7ee6230" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 210; y: 85 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5616 - hash: "d99389a3287d453b942f070d8c1e86e8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5632 - hash: "a0751fa826b03cb25e615c6a1435d92a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 213; y: 84 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 214; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5648 - hash: "f33da88ae881c846bd86ab3dc4f12efc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5664 - hash: "7049bee9a984a2c2d3101eb6d3cce31e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5680 - hash: "72757a5099748b70241a0d4279e42313" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 84 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 217; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5696 - hash: "705feb098ebb2d689526d9271098d6b5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5712 - hash: "49de92770edb0aae82cf66ae42b31caa" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 84 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5728 - hash: "70fe89f9dce556ec1859f325aa27b7db" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 85 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 86 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 220; y: 86 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5744 - hash: "1ededcc625a0e9e317c5aefc238a175a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 221; y: 87 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5760 - image: "cursorDelegate.5.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 87 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5776 - hash: "f1ae53071836512830f7284c4ac884b3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 88 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5792 - hash: "f73c2b66b61bdcb080f8be6607079729" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 224; y: 90 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5808 - hash: "11da14806fbca5c7cd559286fb5d70ff" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 226; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5824 - hash: "b3ad82e900925227fb020009ae619d28" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 228; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5840 - hash: "d8cea4160f0044b09e595610ead01879" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 229; y: 96 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 231; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5856 - hash: "bdd0d1bea8590b40cdce2fb45e17901b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 232; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5872 - hash: "007a5d123eea589264e22f862f1bcac6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 233; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5888 - hash: "3a83635e8371f3e26baf83c285b7801d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 233; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5904 - hash: "6615931007ab0f9da070b6316068ad12" - } - Frame { - msec: 5920 - hash: "be695ab0dced25c1c498d977fc822cef" - } - Frame { - msec: 5936 - hash: "46dea7348473bc6ce4ea696292e5aae0" - } - Frame { - msec: 5952 - hash: "23ce0ba723ffe4253610fdc635df9ae2" - } - Frame { - msec: 5968 - hash: "9d6243396fd98b7efd14ae8a67297e79" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 233; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 5984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 232; y: 99 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 232; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 231; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 230; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 229; y: 99 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 228; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 227; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6064 - hash: "be488252ce6c39317c33706f7febe7b5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 225; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6080 - hash: "16c38b5dcd8ffbadc533d4fea8a85b0d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 224; y: 101 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 101 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6096 - hash: "a3ca6fa1bbc5ca3ff4cf281ae112102d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 220; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6112 - hash: "58e53a9cb886d6d90c0b5987d0693904" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6128 - hash: "a7f3e07ad0335e2852a156b5a3e1bd3d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 217; y: 102 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6144 - hash: "bea9d0338212c01474b25ee637aa8fd0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6160 - hash: "b509c0cdea6b1352ff1e146a8f243820" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 213; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6176 - hash: "9c968354773878009af2f176b1e38d42" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 102 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6192 - hash: "d8cea4160f0044b09e595610ead01879" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 210; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6208 - hash: "b3ad82e900925227fb020009ae619d28" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 210; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6224 - hash: "11da14806fbca5c7cd559286fb5d70ff" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 208; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 207; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6240 - hash: "707f51caadf24d3ed88b69c290d56971" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 206; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6256 - hash: "c23b2afed7fa0e3dbce1183cf8e8d724" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 205; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6272 - hash: "653b2e2d711c1abc1893d0068f4c531c" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 204; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 203; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6288 - hash: "246a73b19421f0ea8ec444429bd6704e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 202; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6304 - hash: "3878df64c0cecb2051e04dafe16ad407" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 201; y: 104 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6320 - hash: "1cf92a793a4d145acce08c61cca3ba4f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 200; y: 103 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 199; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6336 - hash: "6c5f70c941a04172aae855eed1516971" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 197; y: 102 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6352 - hash: "5f4b8d6ad49de0ea1a2ee057e783b363" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 196; y: 101 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 194; y: 101 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6368 - hash: "dc185cf4a14801d7bcc24ceadffe312b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 191; y: 101 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 188; y: 100 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6384 - hash: "6934c069d1b7daf1c2dd76739941c7c2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 187; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6400 - hash: "415510947b49a08459523fa2221d3609" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 185; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6416 - hash: "9586619df75f07cc1f01201abd0f1f43" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 182; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6432 - hash: "d016b14c9d5e5cd2545f1c85aa1edc4f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 176; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6448 - hash: "4100837adeaf1557534f5c243eeacc37" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 171; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6464 - hash: "a9351f624dc7de55ca8e799cf4371e75" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 166; y: 94 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 163; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6480 - hash: "8f2f9ba7de4e01767dda2c6d8f09e218" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 160; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6496 - hash: "fb9b7d7e1aa140efc7e39cbca7299d34" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 159; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6512 - hash: "eb1c2399d5779cc3382f02e69e5a31f1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 94 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 156; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6528 - hash: "3bd98dc8a8cfb7af8a5f2ab11f387065" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 156; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6544 - hash: "1eea9af6e5f359b96df86d56d74f8375" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 155; y: 94 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6560 - hash: "74c68b948d8e1d3c716eba5f1a186464" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 94 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 153; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6576 - hash: "7103ecc0c21208d210938b0cd86fa4e2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 95 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 151; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6592 - hash: "187b7801be7cd9643c707016166fcb38" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 149; y: 95 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6608 - hash: "571fe7704d5d95e91d4bd411ab00edf0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 148; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6624 - hash: "2b6fd25a47274ffa56c3d0020babfdfc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 146; y: 96 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6640 - hash: "febcd6b5fc1806ff57d1669c79aa4cb2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 145; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6656 - hash: "5c731fc4a2aeccf55a0af2b7171f25ce" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 145; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6672 - hash: "7d9df9dd9a99eabaa4b426438e44d612" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6688 - hash: "48278540489142f8a63ed120f4b956c2" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6704 - hash: "d08abdfb587a7ec07872cb662526b6d8" - } - Frame { - msec: 6720 - image: "cursorDelegate.6.png" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 144; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6736 - hash: "4622738082ac75e00b6c63e846b7e98b" - } - Frame { - msec: 6752 - hash: "87a9f2facbaba462c562f09947bb7ded" - } - Frame { - msec: 6768 - hash: "77e730ece9f195c3627508d1c2a126fc" - } - Frame { - msec: 6784 - hash: "4a02aaca12e3fd86ee3b516b3a307f86" - } - Frame { - msec: 6800 - hash: "0a1c2eb8a7451a5e37fefb96a58a88a1" - } - Frame { - msec: 6816 - hash: "7f2d9959323f0707e36ecb2252c89727" - } - Frame { - msec: 6832 - hash: "3462a3e166120515e67430600e4653f8" - } - Frame { - msec: 6848 - hash: "eac8375d9b9cf0afbf232e27c6ceb037" - } - Frame { - msec: 6864 - hash: "fbefb1e0801f4578ab93dd7ff4062e68" - } - Frame { - msec: 6880 - hash: "078d75d72bff036574b85ac0aeaaf2b6" - } - Frame { - msec: 6896 - hash: "14b328c8ec6276e022643102af80fa44" - } - Frame { - msec: 6912 - hash: "bdcafed4ae9c890eec2e3e0cb2ff5a14" - } - Frame { - msec: 6928 - hash: "df6f025130dc82f4764def81cec5fa7b" - } - Frame { - msec: 6944 - hash: "cf467854dfde9b2111bc6e7e4442aab5" - } - Frame { - msec: 6960 - hash: "cfcdf63ca06c2b9ab197821bc1e48c7c" - } - Frame { - msec: 6976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 6992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 7008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 7024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 7040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 7056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 7072 - hash: "cfcdf63ca06c2b9ab197821bc1e48c7c" - } - Frame { - msec: 7088 - hash: "cf467854dfde9b2111bc6e7e4442aab5" - } - Frame { - msec: 7104 - hash: "df6f025130dc82f4764def81cec5fa7b" - } - Frame { - msec: 7120 - hash: "bdcafed4ae9c890eec2e3e0cb2ff5a14" - } - Frame { - msec: 7136 - hash: "14b328c8ec6276e022643102af80fa44" - } - Frame { - msec: 7152 - hash: "078d75d72bff036574b85ac0aeaaf2b6" - } - Frame { - msec: 7168 - hash: "fbefb1e0801f4578ab93dd7ff4062e68" - } - Frame { - msec: 7184 - hash: "eac8375d9b9cf0afbf232e27c6ceb037" - } - Frame { - msec: 7200 - hash: "3462a3e166120515e67430600e4653f8" - } - Frame { - msec: 7216 - hash: "7f2d9959323f0707e36ecb2252c89727" - } - Frame { - msec: 7232 - hash: "0a1c2eb8a7451a5e37fefb96a58a88a1" - } - Frame { - msec: 7248 - hash: "4a02aaca12e3fd86ee3b516b3a307f86" - } - Frame { - msec: 7264 - hash: "77e730ece9f195c3627508d1c2a126fc" - } - Frame { - msec: 7280 - hash: "87a9f2facbaba462c562f09947bb7ded" - } - Frame { - msec: 7296 - hash: "4622738082ac75e00b6c63e846b7e98b" - } - Frame { - msec: 7312 - hash: "9fcec7616e28cb8317709656fd94f480" - } - Frame { - msec: 7328 - hash: "d08abdfb587a7ec07872cb662526b6d8" - } - Frame { - msec: 7344 - hash: "48278540489142f8a63ed120f4b956c2" - } - Frame { - msec: 7360 - hash: "7d9df9dd9a99eabaa4b426438e44d612" - } - Frame { - msec: 7376 - hash: "5c731fc4a2aeccf55a0af2b7171f25ce" - } - Frame { - msec: 7392 - hash: "febcd6b5fc1806ff57d1669c79aa4cb2" - } - Frame { - msec: 7408 - hash: "4ad2c0877360b0e1bf2212f9455f741e" - } - Frame { - msec: 7424 - hash: "4df1951aac4ed1957925c95e112b0766" - } - Frame { - msec: 7440 - hash: "bfbb624abe63639f2a7cb826b6b47393" - } - Frame { - msec: 7456 - hash: "538cf4ee98145b3801e198b036e24a46" - } - Frame { - msec: 7472 - hash: "5602c039a304ac0b1fd99957970a825b" - } - Frame { - msec: 7488 - hash: "9ddd7709269b9a008e15d942e156e13a" - } - Frame { - msec: 7504 - hash: "91d7c43f5f985d624e77da43ba5fb90f" - } - Frame { - msec: 7520 - hash: "9153b0419d28e3c8137b58f95451cd58" - } - Frame { - msec: 7536 - hash: "c5aad5ea4db81cf72f1ff390ed1dc868" - } - Frame { - msec: 7552 - hash: "47b52ce9e5c705017e94b419b53d20d9" - } - Frame { - msec: 7568 - hash: "f968e3289a2a6343cdb64e37b83f142a" - } - Frame { - msec: 7584 - hash: "6fe898a37b17b6b6fa9a2971b518d185" - } - Frame { - msec: 7600 - hash: "90ced2e487b6e760f2ad2c7d6375a36f" - } - Frame { - msec: 7616 - hash: "b2d87713d12a54d4d7b6fd6ba2671704" - } - Frame { - msec: 7632 - hash: "edce9857bd0e93ab841ae62ffba0149f" - } - Frame { - msec: 7648 - hash: "13ce69facee6bf01c9712db1781c5ef9" - } - Frame { - msec: 7664 - hash: "64924e43e004f0d9e90c23f61813c732" - } - Frame { - msec: 7680 - image: "cursorDelegate.7.png" - } - Frame { - msec: 7696 - hash: "9c384359c664a71b5b6b9f9d62dd38bf" - } - Frame { - msec: 7712 - hash: "5998579d228bcf0efdbcee805796ec23" - } - Frame { - msec: 7728 - hash: "fe69cab70ad5b25f757bc413b895ff94" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 227; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7744 - hash: "1ededcc625a0e9e317c5aefc238a175a" - } - Frame { - msec: 7760 - hash: "460a4cbee55ccdeda1941c8dccf08cbd" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 227; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7776 - hash: "f1ae53071836512830f7284c4ac884b3" - } - Frame { - msec: 7792 - hash: "f73c2b66b61bdcb080f8be6607079729" - } - Frame { - msec: 7808 - hash: "11da14806fbca5c7cd559286fb5d70ff" - } - Frame { - msec: 7824 - hash: "b3ad82e900925227fb020009ae619d28" - } - Frame { - msec: 7840 - hash: "d8cea4160f0044b09e595610ead01879" - } - Frame { - msec: 7856 - hash: "9c968354773878009af2f176b1e38d42" - } - Frame { - msec: 7872 - hash: "b509c0cdea6b1352ff1e146a8f243820" - } - Frame { - msec: 7888 - hash: "bea9d0338212c01474b25ee637aa8fd0" - } - Frame { - msec: 7904 - hash: "a7f3e07ad0335e2852a156b5a3e1bd3d" - } - Frame { - msec: 7920 - hash: "58e53a9cb886d6d90c0b5987d0693904" - } - Frame { - msec: 7936 - hash: "a3ca6fa1bbc5ca3ff4cf281ae112102d" - } - Frame { - msec: 7952 - hash: "16c38b5dcd8ffbadc533d4fea8a85b0d" - } - Frame { - msec: 7968 - hash: "be488252ce6c39317c33706f7febe7b5" - } - Frame { - msec: 7984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8064 - hash: "be488252ce6c39317c33706f7febe7b5" - } - Frame { - msec: 8080 - hash: "16c38b5dcd8ffbadc533d4fea8a85b0d" - } - Frame { - msec: 8096 - hash: "a3ca6fa1bbc5ca3ff4cf281ae112102d" - } - Frame { - msec: 8112 - hash: "58e53a9cb886d6d90c0b5987d0693904" - } - Frame { - msec: 8128 - hash: "a7f3e07ad0335e2852a156b5a3e1bd3d" - } - Frame { - msec: 8144 - hash: "bea9d0338212c01474b25ee637aa8fd0" - } - Frame { - msec: 8160 - hash: "b509c0cdea6b1352ff1e146a8f243820" - } - Frame { - msec: 8176 - hash: "9c968354773878009af2f176b1e38d42" - } - Frame { - msec: 8192 - hash: "d8cea4160f0044b09e595610ead01879" - } - Frame { - msec: 8208 - hash: "b3ad82e900925227fb020009ae619d28" - } - Frame { - msec: 8224 - hash: "11da14806fbca5c7cd559286fb5d70ff" - } - Frame { - msec: 8240 - hash: "f73c2b66b61bdcb080f8be6607079729" - } - Frame { - msec: 8256 - hash: "f1ae53071836512830f7284c4ac884b3" - } - Frame { - msec: 8272 - hash: "460a4cbee55ccdeda1941c8dccf08cbd" - } - Frame { - msec: 8288 - hash: "1ededcc625a0e9e317c5aefc238a175a" - } - Frame { - msec: 8304 - hash: "70fe89f9dce556ec1859f325aa27b7db" - } - Frame { - msec: 8320 - hash: "49de92770edb0aae82cf66ae42b31caa" - } - Frame { - msec: 8336 - hash: "705feb098ebb2d689526d9271098d6b5" - } - Frame { - msec: 8352 - hash: "72757a5099748b70241a0d4279e42313" - } - Frame { - msec: 8368 - hash: "7049bee9a984a2c2d3101eb6d3cce31e" - } - Frame { - msec: 8384 - hash: "f33da88ae881c846bd86ab3dc4f12efc" - } - Frame { - msec: 8400 - hash: "a0751fa826b03cb25e615c6a1435d92a" - } - Frame { - msec: 8416 - hash: "d99389a3287d453b942f070d8c1e86e8" - } - Frame { - msec: 8432 - hash: "e3219357e73a2dfd5b80dfbd6feb79e2" - } - Frame { - msec: 8448 - hash: "c0953accd856883c813d4ecf99fb632b" - } - Frame { - msec: 8464 - hash: "185743339cba9dfc1a2c2ff1efd23855" - } - Frame { - msec: 8480 - hash: "30a4419de779037fd84bd70a99c4d6de" - } - Frame { - msec: 8496 - hash: "1d9cbd0814831c518e9e8041fe8285c9" - } - Frame { - msec: 8512 - hash: "81d660df1b0eab7c382991b600f88ba3" - } - Frame { - msec: 8528 - hash: "7ee1467525b9fe3b6a32fba8c2454df1" - } - Frame { - msec: 8544 - hash: "28dd72957652cf130d28d30203b36c59" - } - Frame { - msec: 8560 - hash: "e9697d06a22958cea4f766dd3ec31ca9" - } - Frame { - msec: 8576 - hash: "81970c31a0a1e42929c83ef5140401c2" - } - Frame { - msec: 8592 - hash: "ebb5be43955725bef66bf99bd7288c04" - } - Frame { - msec: 8608 - hash: "afbf0645ea651b2c459eeb43bdc65992" - } - Frame { - msec: 8624 - hash: "42bf6ab3963652617f2feb96ee170af5" - } - Frame { - msec: 8640 - image: "cursorDelegate.8.png" - } - Frame { - msec: 8656 - hash: "4a5966f600f9b27bf7a65fcc6c1c5d17" - } - Frame { - msec: 8672 - hash: "ecdc1d89af1e76648c8298e2b9940549" - } - Frame { - msec: 8688 - hash: "0ba1e105a7ae41926e2106b60eafdec9" - } - Frame { - msec: 8704 - hash: "96e4f277d4ff76afe0c2d58b4aed3acb" - } - Frame { - msec: 8720 - hash: "f41c6fd9e22354b8f5c940c04930a591" - } - Frame { - msec: 8736 - hash: "00b522554cf6c0c09e5425f4d3c3fcf9" - } - Frame { - msec: 8752 - hash: "e8549c0c361f20d167cab128dc996274" - } - Frame { - msec: 8768 - hash: "976c61615250f9bfa3b4c02ee88bee03" - } - Frame { - msec: 8784 - hash: "06c95d2fa5e2b4751e5693b179e76eb4" - } - Frame { - msec: 8800 - hash: "a3d79197235c4717b1f9af3582118ca6" - } - Frame { - msec: 8816 - hash: "68b23db8f519aa161278074aa318eaa1" - } - Frame { - msec: 8832 - hash: "af967462be12d0b6ddd3571b00804c12" - } - Frame { - msec: 8848 - hash: "46f5c0baa2b95fd418984eebe308157e" - } - Frame { - msec: 8864 - hash: "0a7407c6c751b3f1380a99883e95f1dd" - } - Frame { - msec: 8880 - hash: "9969c206488671c45c43f3a3dd3f5994" - } - Frame { - msec: 8896 - hash: "89efa872ce2e71935b47cac101bf15c9" - } - Frame { - msec: 8912 - hash: "a4545a0c50fb071d267b06bf2d114802" - } - Frame { - msec: 8928 - hash: "f4df98459c18399e1c6b2d8a43bdd678" - } - Frame { - msec: 8944 - hash: "027eb091eea8bf51d7ad3ff44120e075" - } - Frame { - msec: 8960 - hash: "138ec35b850d20664f905a4eea6f7456" - } - Frame { - msec: 8976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9072 - hash: "138ec35b850d20664f905a4eea6f7456" - } - Frame { - msec: 9088 - hash: "027eb091eea8bf51d7ad3ff44120e075" - } - Frame { - msec: 9104 - hash: "f4df98459c18399e1c6b2d8a43bdd678" - } - Frame { - msec: 9120 - hash: "a4545a0c50fb071d267b06bf2d114802" - } - Frame { - msec: 9136 - hash: "89efa872ce2e71935b47cac101bf15c9" + hash: "bdee3016f1811188691786bafe305196" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.0.png index cc1774f..c4bf75d 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.1.png index 60eba16..f28b342 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.2.png index d4663f7..955aed7 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.3.png index dc1bb52..02ac575 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.qml index f1099c8..8d14a2b 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/qt-669.qml @@ -6,99 +6,99 @@ VisualTest { } Frame { msec: 16 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 32 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 48 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 64 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 80 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 96 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 112 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 128 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 144 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 160 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 176 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 192 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 208 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 224 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 240 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 256 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 272 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 288 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 304 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 320 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 336 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 352 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 368 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 384 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Key { type: 6 @@ -110,15 +110,15 @@ VisualTest { } Frame { msec: 400 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 416 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 432 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Key { type: 7 @@ -130,27 +130,27 @@ VisualTest { } Frame { msec: 448 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 464 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 480 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 496 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 512 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 528 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Key { type: 6 @@ -162,15 +162,15 @@ VisualTest { } Frame { msec: 544 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 560 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 576 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Key { type: 7 @@ -182,27 +182,27 @@ VisualTest { } Frame { msec: 592 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 608 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 624 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 640 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 656 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 672 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Key { type: 6 @@ -214,19 +214,19 @@ VisualTest { } Frame { msec: 688 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 704 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 720 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 736 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Key { type: 7 @@ -238,23 +238,23 @@ VisualTest { } Frame { msec: 752 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 768 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 784 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 800 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 816 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Key { type: 6 @@ -266,19 +266,19 @@ VisualTest { } Frame { msec: 832 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 848 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 864 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 880 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Key { type: 7 @@ -290,19 +290,19 @@ VisualTest { } Frame { msec: 896 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 912 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 928 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 944 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Key { type: 6 @@ -318,15 +318,15 @@ VisualTest { } Frame { msec: 976 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 992 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 1008 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Key { type: 7 @@ -338,23 +338,23 @@ VisualTest { } Frame { msec: 1024 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 1040 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 1056 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 1072 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 1088 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Key { type: 6 @@ -366,15 +366,15 @@ VisualTest { } Frame { msec: 1104 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 1120 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 1136 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Key { type: 7 @@ -386,23 +386,23 @@ VisualTest { } Frame { msec: 1152 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 1168 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 1184 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 1200 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 1216 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Key { type: 6 @@ -414,19 +414,19 @@ VisualTest { } Frame { msec: 1232 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 1248 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 1264 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 1280 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Key { type: 7 @@ -438,19 +438,19 @@ VisualTest { } Frame { msec: 1296 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 1312 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 1328 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 1344 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Key { type: 6 @@ -462,19 +462,19 @@ VisualTest { } Frame { msec: 1360 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1376 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1392 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1408 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Key { type: 7 @@ -486,23 +486,23 @@ VisualTest { } Frame { msec: 1424 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1440 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1456 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1472 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1488 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Key { type: 6 @@ -514,15 +514,15 @@ VisualTest { } Frame { msec: 1504 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1520 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1536 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Key { type: 7 @@ -534,79 +534,79 @@ VisualTest { } Frame { msec: 1552 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1568 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1584 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1600 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1616 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1632 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1648 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1664 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1680 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1696 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1712 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1728 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1744 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1760 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1776 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1792 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1808 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1824 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Frame { msec: 1840 - hash: "781a5a09fb6c6ca1fd38f63938f9c8d0" + hash: "2723a5a18241fd8787c2e298673e61e3" } Key { type: 6 @@ -618,19 +618,19 @@ VisualTest { } Frame { msec: 1856 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1872 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1888 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1904 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1920 @@ -638,19 +638,19 @@ VisualTest { } Frame { msec: 1936 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1952 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1968 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 1984 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Key { type: 7 @@ -662,23 +662,23 @@ VisualTest { } Frame { msec: 2000 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 2016 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 2032 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 2048 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Frame { msec: 2064 - hash: "2718ab36551a20d36664f26e408f8f24" + hash: "730ff91304bee489409ea616678a9877" } Key { type: 6 @@ -690,23 +690,23 @@ VisualTest { } Frame { msec: 2080 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 2096 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 2112 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 2128 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 2144 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Key { type: 7 @@ -718,23 +718,23 @@ VisualTest { } Frame { msec: 2160 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 2176 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 2192 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 2208 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Frame { msec: 2224 - hash: "823ccdc677997c96e4ae16891ffffa77" + hash: "8c9706e5cc1dd8cba4312aa07249ae74" } Key { type: 6 @@ -746,11 +746,11 @@ VisualTest { } Frame { msec: 2240 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 2256 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Key { type: 7 @@ -762,23 +762,23 @@ VisualTest { } Frame { msec: 2272 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 2288 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 2304 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 2320 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Frame { msec: 2336 - hash: "f90403e0b62f9579b5c5f591e75e9eb5" + hash: "d9af8bbbe324c23f69251847c64497d9" } Key { type: 6 @@ -790,15 +790,15 @@ VisualTest { } Frame { msec: 2352 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2368 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2384 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Key { type: 7 @@ -810,55 +810,55 @@ VisualTest { } Frame { msec: 2400 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2416 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2432 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2448 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2464 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2480 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2496 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2512 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2528 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2544 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2560 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2576 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Frame { msec: 2592 - hash: "1295bd1d94fe518d5a871e90cab88e0c" + hash: "9a3654cf08a913058fd47c072e09a5c8" } Key { type: 6 @@ -870,23 +870,23 @@ VisualTest { } Frame { msec: 2608 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 2624 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 2640 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 2656 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 2672 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Key { type: 7 @@ -898,23 +898,23 @@ VisualTest { } Frame { msec: 2688 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 2704 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 2720 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 2736 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Frame { msec: 2752 - hash: "c186352ed5d1539a45b3c9e1dfa408d6" + hash: "dc2b08893d3ec12e2da923215eedf2de" } Key { type: 6 @@ -926,15 +926,15 @@ VisualTest { } Frame { msec: 2768 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 2784 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 2800 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Key { type: 7 @@ -946,19 +946,19 @@ VisualTest { } Frame { msec: 2816 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 2832 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 2848 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Frame { msec: 2864 - hash: "c602a6535ef86125615307d9d187eb3f" + hash: "755c3478a46c430b058e99cf433942b8" } Key { type: 6 @@ -974,15 +974,15 @@ VisualTest { } Frame { msec: 2896 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 2912 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 2928 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Key { type: 7 @@ -994,23 +994,23 @@ VisualTest { } Frame { msec: 2944 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 2960 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 2976 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 2992 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Frame { msec: 3008 - hash: "fbc07fa31ab2022f3155bd1fb591fe6c" + hash: "dbc65e33a133cd8fa7669175de83d94a" } Key { type: 6 @@ -1022,23 +1022,23 @@ VisualTest { } Frame { msec: 3024 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3040 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3056 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3072 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3088 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Key { type: 7 @@ -1050,155 +1050,155 @@ VisualTest { } Frame { msec: 3104 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3120 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3136 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3152 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3168 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3184 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3200 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3216 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3232 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3248 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3264 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3280 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3296 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3312 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3328 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3344 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3360 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3376 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3392 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3408 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3424 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3440 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3456 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3472 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3488 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3504 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3520 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3536 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3552 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3568 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3584 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3600 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3616 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3632 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3648 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3664 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3680 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Frame { msec: 3696 - hash: "e64c3246a0f81e2df29ac276ac6d411f" + hash: "1e5621ab02591170fabc0d91c4a09c69" } Key { type: 6 @@ -1210,27 +1210,27 @@ VisualTest { } Frame { msec: 3712 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3728 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3744 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3760 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3776 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3792 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Key { type: 7 @@ -1242,11 +1242,11 @@ VisualTest { } Frame { msec: 3808 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3824 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3840 @@ -1254,118 +1254,118 @@ VisualTest { } Frame { msec: 3856 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3872 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3888 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3904 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3920 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3936 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3952 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3968 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 3984 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4000 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4016 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4032 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4048 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4064 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4080 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4096 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4112 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4128 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4144 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4160 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4176 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4192 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4208 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4224 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4240 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4256 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4272 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4288 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } Frame { msec: 4304 - hash: "c043ae4adb31cb53bfc089e7f2ed07b2" + hash: "7fc0cd5e044691bcef6a62d2fb6cd2d4" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.0.png new file mode 100644 index 0000000..a3f0089 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.1.png new file mode 100644 index 0000000..95772a9 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.10.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.10.png new file mode 100644 index 0000000..1b280eb Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.10.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.11.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.11.png new file mode 100644 index 0000000..1b280eb Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.11.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.2.png new file mode 100644 index 0000000..cdd3dc0 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.3.png new file mode 100644 index 0000000..a3115f6 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.4.png new file mode 100644 index 0000000..d2c895b Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.5.png new file mode 100644 index 0000000..e0e1ced Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.6.png new file mode 100644 index 0000000..bde3d7d Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.7.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.7.png new file mode 100644 index 0000000..38bf8be Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.7.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.8.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.8.png new file mode 100644 index 0000000..7475f96 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.8.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.9.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.9.png new file mode 100644 index 0000000..1b280eb Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.9.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.qml new file mode 100644 index 0000000..c12ee51 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/usingMultilineEdit.qml @@ -0,0 +1,4687 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 32 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 48 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 64 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 80 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 96 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 112 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 128 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 144 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 160 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 176 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 192 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 208 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 224 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 240 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 256 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 272 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 288 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 304 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 320 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 118; y: 70 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 336 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 352 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 368 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 384 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 400 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 118; y: 70 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 416 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 432 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 448 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 464 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 480 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 496 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 512 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 528 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 544 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 560 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 576 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 592 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 608 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 624 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Frame { + msec: 640 + hash: "e931c5f5d15e4f977e1822f2a6dd57df" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 117; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 656 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 672 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 117; y: 102 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 688 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 704 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 720 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 736 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 752 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 768 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 784 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 800 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 816 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 832 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 848 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 864 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 880 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 896 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 912 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 928 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 944 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 960 + image: "usingMultilineEdit.0.png" + } + Frame { + msec: 976 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 992 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1008 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1024 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1040 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1056 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1072 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1088 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1104 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1120 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1136 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1152 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1168 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1184 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1200 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1216 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1232 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1248 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1264 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1280 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Frame { + msec: 1296 + hash: "01cf9ccfc86504bc6efe5fec1e68e537" + } + Key { + type: 6 + key: 44 + modifiers: 0 + text: "2c" + autorep: false + count: 1 + } + Frame { + msec: 1312 + hash: "bac01431244974a1768d84318f49bf89" + } + Frame { + msec: 1328 + hash: "bac01431244974a1768d84318f49bf89" + } + Frame { + msec: 1344 + hash: "bac01431244974a1768d84318f49bf89" + } + Frame { + msec: 1360 + hash: "bac01431244974a1768d84318f49bf89" + } + Frame { + msec: 1376 + hash: "bac01431244974a1768d84318f49bf89" + } + Key { + type: 7 + key: 44 + modifiers: 0 + text: "2c" + autorep: false + count: 1 + } + Frame { + msec: 1392 + hash: "bac01431244974a1768d84318f49bf89" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1408 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Frame { + msec: 1424 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Frame { + msec: 1440 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Frame { + msec: 1456 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1472 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Frame { + msec: 1488 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Frame { + msec: 1504 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Frame { + msec: 1520 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Frame { + msec: 1536 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Frame { + msec: 1552 + hash: "e22c6376c05d52c8997a67bf21d82a83" + } + Key { + type: 6 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 1568 + hash: "47f630d2cc3a3fa15309f5f631a36690" + } + Frame { + msec: 1584 + hash: "47f630d2cc3a3fa15309f5f631a36690" + } + Frame { + msec: 1600 + hash: "47f630d2cc3a3fa15309f5f631a36690" + } + Key { + type: 7 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 1616 + hash: "47f630d2cc3a3fa15309f5f631a36690" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1632 + hash: "b03df007a2e778d3f055ceb12ab61ec1" + } + Frame { + msec: 1648 + hash: "b03df007a2e778d3f055ceb12ab61ec1" + } + Frame { + msec: 1664 + hash: "b03df007a2e778d3f055ceb12ab61ec1" + } + Frame { + msec: 1680 + hash: "b03df007a2e778d3f055ceb12ab61ec1" + } + Frame { + msec: 1696 + hash: "b03df007a2e778d3f055ceb12ab61ec1" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1712 + hash: "b03df007a2e778d3f055ceb12ab61ec1" + } + Frame { + msec: 1728 + hash: "b03df007a2e778d3f055ceb12ab61ec1" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1744 + hash: "f73e5dc997ddc56554f914014c376f24" + } + Frame { + msec: 1760 + hash: "f73e5dc997ddc56554f914014c376f24" + } + Frame { + msec: 1776 + hash: "f73e5dc997ddc56554f914014c376f24" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1792 + hash: "f73e5dc997ddc56554f914014c376f24" + } + Frame { + msec: 1808 + hash: "f73e5dc997ddc56554f914014c376f24" + } + Frame { + msec: 1824 + hash: "f73e5dc997ddc56554f914014c376f24" + } + Key { + type: 6 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 1840 + hash: "d089f840e514b68fad1edbbce686525f" + } + Frame { + msec: 1856 + hash: "d089f840e514b68fad1edbbce686525f" + } + Frame { + msec: 1872 + hash: "d089f840e514b68fad1edbbce686525f" + } + Frame { + msec: 1888 + hash: "d089f840e514b68fad1edbbce686525f" + } + Frame { + msec: 1904 + hash: "d089f840e514b68fad1edbbce686525f" + } + Key { + type: 7 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 1920 + image: "usingMultilineEdit.1.png" + } + Frame { + msec: 1936 + hash: "9751cdca40cadacfc28de757b20ed639" + } + Frame { + msec: 1952 + hash: "9751cdca40cadacfc28de757b20ed639" + } + Frame { + msec: 1968 + hash: "9751cdca40cadacfc28de757b20ed639" + } + Key { + type: 6 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 1984 + hash: "8fb457eb7c17974786ff239c09101d27" + } + Frame { + msec: 2000 + hash: "8fb457eb7c17974786ff239c09101d27" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 2016 + hash: "8fb457eb7c17974786ff239c09101d27" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2032 + hash: "eeb022c3dd997ce86c3a60146d19b540" + } + Frame { + msec: 2048 + hash: "eeb022c3dd997ce86c3a60146d19b540" + } + Key { + type: 7 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 2064 + hash: "eeb022c3dd997ce86c3a60146d19b540" + } + Frame { + msec: 2080 + hash: "eeb022c3dd997ce86c3a60146d19b540" + } + Frame { + msec: 2096 + hash: "eeb022c3dd997ce86c3a60146d19b540" + } + Frame { + msec: 2112 + hash: "eeb022c3dd997ce86c3a60146d19b540" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2128 + hash: "eeb022c3dd997ce86c3a60146d19b540" + } + Frame { + msec: 2144 + hash: "eeb022c3dd997ce86c3a60146d19b540" + } + Key { + type: 6 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 2160 + hash: "ba2033e83b5aef2408197ebf7db543a6" + } + Frame { + msec: 2176 + hash: "ba2033e83b5aef2408197ebf7db543a6" + } + Frame { + msec: 2192 + hash: "ba2033e83b5aef2408197ebf7db543a6" + } + Frame { + msec: 2208 + hash: "ba2033e83b5aef2408197ebf7db543a6" + } + Frame { + msec: 2224 + hash: "ba2033e83b5aef2408197ebf7db543a6" + } + Frame { + msec: 2240 + hash: "ba2033e83b5aef2408197ebf7db543a6" + } + Key { + type: 7 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Key { + type: 6 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 2256 + hash: "8a843083f0415f1e06bfe925b3bd7f52" + } + Frame { + msec: 2272 + hash: "8a843083f0415f1e06bfe925b3bd7f52" + } + Frame { + msec: 2288 + hash: "8a843083f0415f1e06bfe925b3bd7f52" + } + Frame { + msec: 2304 + hash: "8a843083f0415f1e06bfe925b3bd7f52" + } + Frame { + msec: 2320 + hash: "8a843083f0415f1e06bfe925b3bd7f52" + } + Key { + type: 7 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 2336 + hash: "8a843083f0415f1e06bfe925b3bd7f52" + } + Frame { + msec: 2352 + hash: "8a843083f0415f1e06bfe925b3bd7f52" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 2368 + hash: "c3d6b261447c0fa65722c697b60ef415" + } + Frame { + msec: 2384 + hash: "c3d6b261447c0fa65722c697b60ef415" + } + Frame { + msec: 2400 + hash: "c3d6b261447c0fa65722c697b60ef415" + } + Frame { + msec: 2416 + hash: "c3d6b261447c0fa65722c697b60ef415" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 2432 + hash: "c3d6b261447c0fa65722c697b60ef415" + } + Key { + type: 6 + key: 80 + modifiers: 0 + text: "70" + autorep: false + count: 1 + } + Frame { + msec: 2448 + hash: "7899672516311904cc7108f975290615" + } + Frame { + msec: 2464 + hash: "7899672516311904cc7108f975290615" + } + Frame { + msec: 2480 + hash: "7899672516311904cc7108f975290615" + } + Frame { + msec: 2496 + hash: "7899672516311904cc7108f975290615" + } + Frame { + msec: 2512 + hash: "7899672516311904cc7108f975290615" + } + Frame { + msec: 2528 + hash: "7899672516311904cc7108f975290615" + } + Key { + type: 7 + key: 80 + modifiers: 0 + text: "70" + autorep: false + count: 1 + } + Frame { + msec: 2544 + hash: "7899672516311904cc7108f975290615" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2560 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Frame { + msec: 2576 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Frame { + msec: 2592 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Frame { + msec: 2608 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2624 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Frame { + msec: 2640 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Frame { + msec: 2656 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Frame { + msec: 2672 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Frame { + msec: 2688 + hash: "4c9dc2d3538a47f0c5f4e5b8f1863583" + } + Key { + type: 6 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 2704 + hash: "0e583b5b8c82af7fe74ff845abb57069" + } + Frame { + msec: 2720 + hash: "0e583b5b8c82af7fe74ff845abb57069" + } + Frame { + msec: 2736 + hash: "0e583b5b8c82af7fe74ff845abb57069" + } + Frame { + msec: 2752 + hash: "0e583b5b8c82af7fe74ff845abb57069" + } + Frame { + msec: 2768 + hash: "0e583b5b8c82af7fe74ff845abb57069" + } + Frame { + msec: 2784 + hash: "0e583b5b8c82af7fe74ff845abb57069" + } + Key { + type: 6 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 2800 + hash: "5b282d8041386acfd94eab03a0d40fe8" + } + Key { + type: 7 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 2816 + hash: "5b282d8041386acfd94eab03a0d40fe8" + } + Frame { + msec: 2832 + hash: "5b282d8041386acfd94eab03a0d40fe8" + } + Frame { + msec: 2848 + hash: "5b282d8041386acfd94eab03a0d40fe8" + } + Frame { + msec: 2864 + hash: "5b282d8041386acfd94eab03a0d40fe8" + } + Key { + type: 7 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 2880 + image: "usingMultilineEdit.2.png" + } + Frame { + msec: 2896 + hash: "5b282d8041386acfd94eab03a0d40fe8" + } + Frame { + msec: 2912 + hash: "5b282d8041386acfd94eab03a0d40fe8" + } + Frame { + msec: 2928 + hash: "5b282d8041386acfd94eab03a0d40fe8" + } + Key { + type: 6 + key: 75 + modifiers: 0 + text: "6b" + autorep: false + count: 1 + } + Frame { + msec: 2944 + hash: "9b19fe7f4665fdbd471e22cac9d97bab" + } + Frame { + msec: 2960 + hash: "9b19fe7f4665fdbd471e22cac9d97bab" + } + Frame { + msec: 2976 + hash: "9b19fe7f4665fdbd471e22cac9d97bab" + } + Key { + type: 7 + key: 75 + modifiers: 0 + text: "6b" + autorep: false + count: 1 + } + Key { + type: 6 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 2992 + hash: "ed57767e75c850ad9bf2d08050419c56" + } + Frame { + msec: 3008 + hash: "ed57767e75c850ad9bf2d08050419c56" + } + Frame { + msec: 3024 + hash: "ed57767e75c850ad9bf2d08050419c56" + } + Frame { + msec: 3040 + hash: "ed57767e75c850ad9bf2d08050419c56" + } + Key { + type: 7 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 3056 + hash: "ed57767e75c850ad9bf2d08050419c56" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3072 + hash: "225820f0472a6af17f56687a655b382a" + } + Frame { + msec: 3088 + hash: "225820f0472a6af17f56687a655b382a" + } + Frame { + msec: 3104 + hash: "225820f0472a6af17f56687a655b382a" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 3120 + hash: "225820f0472a6af17f56687a655b382a" + } + Key { + type: 7 + key: 32 + modifiers: 33554432 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3136 + hash: "225820f0472a6af17f56687a655b382a" + } + Frame { + msec: 3152 + hash: "225820f0472a6af17f56687a655b382a" + } + Key { + type: 6 + key: 73 + modifiers: 33554432 + text: "49" + autorep: false + count: 1 + } + Frame { + msec: 3168 + hash: "719effbf9211edc87c56cb5628a57ded" + } + Frame { + msec: 3184 + hash: "719effbf9211edc87c56cb5628a57ded" + } + Frame { + msec: 3200 + hash: "719effbf9211edc87c56cb5628a57ded" + } + Frame { + msec: 3216 + hash: "719effbf9211edc87c56cb5628a57ded" + } + Key { + type: 7 + key: 73 + modifiers: 33554432 + text: "49" + autorep: false + count: 1 + } + Frame { + msec: 3232 + hash: "719effbf9211edc87c56cb5628a57ded" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3248 + hash: "5d8d2ba8c15937cc2f70414a71f87d24" + } + Frame { + msec: 3264 + hash: "5d8d2ba8c15937cc2f70414a71f87d24" + } + Frame { + msec: 3280 + hash: "5d8d2ba8c15937cc2f70414a71f87d24" + } + Frame { + msec: 3296 + hash: "5d8d2ba8c15937cc2f70414a71f87d24" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3312 + hash: "5d8d2ba8c15937cc2f70414a71f87d24" + } + Key { + type: 6 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 3328 + hash: "4df9946eb277ca403fd63a2e19535369" + } + Frame { + msec: 3344 + hash: "4df9946eb277ca403fd63a2e19535369" + } + Frame { + msec: 3360 + hash: "4df9946eb277ca403fd63a2e19535369" + } + Frame { + msec: 3376 + hash: "4df9946eb277ca403fd63a2e19535369" + } + Frame { + msec: 3392 + hash: "4df9946eb277ca403fd63a2e19535369" + } + Key { + type: 7 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 3408 + hash: "4df9946eb277ca403fd63a2e19535369" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 3424 + hash: "bb1bde5147f4f203f2af3787df0f0c7a" + } + Frame { + msec: 3440 + hash: "bb1bde5147f4f203f2af3787df0f0c7a" + } + Frame { + msec: 3456 + hash: "bb1bde5147f4f203f2af3787df0f0c7a" + } + Frame { + msec: 3472 + hash: "bb1bde5147f4f203f2af3787df0f0c7a" + } + Frame { + msec: 3488 + hash: "bb1bde5147f4f203f2af3787df0f0c7a" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Key { + type: 6 + key: 78 + modifiers: 0 + text: "6e" + autorep: false + count: 1 + } + Frame { + msec: 3504 + hash: "60225c94dc1e1485406d8ba59737d383" + } + Frame { + msec: 3520 + hash: "60225c94dc1e1485406d8ba59737d383" + } + Frame { + msec: 3536 + hash: "60225c94dc1e1485406d8ba59737d383" + } + Frame { + msec: 3552 + hash: "60225c94dc1e1485406d8ba59737d383" + } + Frame { + msec: 3568 + hash: "60225c94dc1e1485406d8ba59737d383" + } + Frame { + msec: 3584 + hash: "60225c94dc1e1485406d8ba59737d383" + } + Key { + type: 7 + key: 78 + modifiers: 0 + text: "6e" + autorep: false + count: 1 + } + Frame { + msec: 3600 + hash: "60225c94dc1e1485406d8ba59737d383" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 3616 + hash: "8321580dd92a92edbf12df43259999f4" + } + Frame { + msec: 3632 + hash: "8321580dd92a92edbf12df43259999f4" + } + Frame { + msec: 3648 + hash: "8321580dd92a92edbf12df43259999f4" + } + Frame { + msec: 3664 + hash: "8321580dd92a92edbf12df43259999f4" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3680 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 3696 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3712 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3728 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3744 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3760 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3776 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3792 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3808 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3824 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3840 + image: "usingMultilineEdit.3.png" + } + Frame { + msec: 3856 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3872 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3888 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3904 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3920 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3936 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3952 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Frame { + msec: 3968 + hash: "d704cc8d5bbdc8768d25372aa654925c" + } + Key { + type: 6 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 3984 + hash: "5a73c6a6df5bc4808fd4ed20e44f2ea3" + } + Frame { + msec: 4000 + hash: "5a73c6a6df5bc4808fd4ed20e44f2ea3" + } + Frame { + msec: 4016 + hash: "5a73c6a6df5bc4808fd4ed20e44f2ea3" + } + Frame { + msec: 4032 + hash: "5a73c6a6df5bc4808fd4ed20e44f2ea3" + } + Frame { + msec: 4048 + hash: "5a73c6a6df5bc4808fd4ed20e44f2ea3" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4064 + hash: "89613ce626a22573fa41191fcede3273" + } + Key { + type: 7 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 4080 + hash: "89613ce626a22573fa41191fcede3273" + } + Frame { + msec: 4096 + hash: "89613ce626a22573fa41191fcede3273" + } + Frame { + msec: 4112 + hash: "89613ce626a22573fa41191fcede3273" + } + Frame { + msec: 4128 + hash: "89613ce626a22573fa41191fcede3273" + } + Key { + type: 6 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 4144 + hash: "7d9ef94b610cc7e9bcfd04bfac91ae38" + } + Frame { + msec: 4160 + hash: "7d9ef94b610cc7e9bcfd04bfac91ae38" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4176 + hash: "7d9ef94b610cc7e9bcfd04bfac91ae38" + } + Frame { + msec: 4192 + hash: "7d9ef94b610cc7e9bcfd04bfac91ae38" + } + Frame { + msec: 4208 + hash: "7d9ef94b610cc7e9bcfd04bfac91ae38" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 4224 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Frame { + msec: 4240 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Key { + type: 7 + key: 85 + modifiers: 0 + text: "75" + autorep: false + count: 1 + } + Frame { + msec: 4256 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Frame { + msec: 4272 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 4288 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Frame { + msec: 4304 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Frame { + msec: 4320 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Frame { + msec: 4336 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Frame { + msec: 4352 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Frame { + msec: 4368 + hash: "9653692fe9292ef0d0559412f68e9cf7" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 4384 + hash: "902831b5d2a134629e04b53c87cdc709" + } + Frame { + msec: 4400 + hash: "902831b5d2a134629e04b53c87cdc709" + } + Frame { + msec: 4416 + hash: "902831b5d2a134629e04b53c87cdc709" + } + Frame { + msec: 4432 + hash: "902831b5d2a134629e04b53c87cdc709" + } + Frame { + msec: 4448 + hash: "902831b5d2a134629e04b53c87cdc709" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 4464 + hash: "902831b5d2a134629e04b53c87cdc709" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4480 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4496 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4512 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4528 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4544 + hash: "cc1dc01f123309c70743535f61b18278" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4560 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4576 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4592 + hash: "cc1dc01f123309c70743535f61b18278" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 4608 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4624 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4640 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4656 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4672 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4688 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4704 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4720 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4736 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4752 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4768 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4784 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4800 + image: "usingMultilineEdit.4.png" + } + Frame { + msec: 4816 + hash: "cc1dc01f123309c70743535f61b18278" + } + Frame { + msec: 4832 + hash: "cc1dc01f123309c70743535f61b18278" + } + Key { + type: 6 + key: 63 + modifiers: 33554432 + text: "3f" + autorep: false + count: 1 + } + Frame { + msec: 4848 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 4864 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 4880 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 4896 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 4912 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 4928 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 4944 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Key { + type: 7 + key: 63 + modifiers: 33554432 + text: "3f" + autorep: false + count: 1 + } + Frame { + msec: 4960 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 4976 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 4992 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5008 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 5024 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5040 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5056 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5072 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5088 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5104 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5120 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5136 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5152 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5168 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5184 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5200 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5216 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5232 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5248 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5264 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5280 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5296 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5312 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5328 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5344 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5360 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5376 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5392 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5408 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5424 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5440 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5456 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5472 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5488 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5504 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5520 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5536 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5552 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5568 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5584 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5600 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5616 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5632 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5648 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5664 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5680 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5696 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5712 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5728 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5744 + hash: "652b66d0b62e7fcf9d4fff50296966b0" + } + Frame { + msec: 5760 + image: "usingMultilineEdit.5.png" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 48; y: 19 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5776 + hash: "a8710131aa2cfcedeb1956319174bd44" + } + Frame { + msec: 5792 + hash: "a8710131aa2cfcedeb1956319174bd44" + } + Frame { + msec: 5808 + hash: "a8710131aa2cfcedeb1956319174bd44" + } + Frame { + msec: 5824 + hash: "a8710131aa2cfcedeb1956319174bd44" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: 21 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 22 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5840 + hash: "a8710131aa2cfcedeb1956319174bd44" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: 23 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: 26 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5856 + hash: "069e40e23640f303e24f8821907bf907" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 31 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 33 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5872 + hash: "069e40e23640f303e24f8821907bf907" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 36 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 41 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5888 + hash: "3aba0fbccdbbbfc6b452464a35941f01" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 56; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5904 + hash: "8d68c5797a7a3be6ab1bc83a1adea983" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 58; y: 52 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 58 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5920 + hash: "633201d777634e5a2e4ccc0ba7a84ada" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 69 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5936 + hash: "e1d36d4dbdff47e6b6f864dae077bc7f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 62; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5952 + hash: "905419e116b2c93145c85456e6e7ccac" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 90 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5968 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 97 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 101 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 67; y: 105 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 114 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 119 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 122 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 128 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 130 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 132 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 134 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 140 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 141 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 144 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 148 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 149 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 151 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 69; y: 153 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Frame { + msec: 6208 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Frame { + msec: 6224 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Frame { + msec: 6240 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Frame { + msec: 6256 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 154 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6272 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 152 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6288 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 68; y: 145 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6304 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 66; y: 126 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6320 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 64; y: 108 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 63; y: 98 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6336 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 88 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 61; y: 80 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6352 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 72 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 64 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6368 + hash: "f851ebbbab70e4f283caefc26f304946" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 59; y: 58 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 51 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6384 + hash: "ca385b53209d35e0c78e8124c782d03f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 57; y: 37 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6400 + hash: "ca385b53209d35e0c78e8124c782d03f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 30 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6416 + hash: "730fa19a0deb6e210ee7ca136ecfb4e0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 16 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 6 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6432 + hash: "e749a531bb6b30611bed794e2630555f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -2 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -9 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6448 + hash: "4d7a02eeb0d0ed7eb29fbfb72bce9ba1" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: -23 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6464 + hash: "2476a4d7038b9f1c50557cf077ea4412" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -31 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -38 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6480 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6496 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6512 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6528 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6544 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6560 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6576 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6592 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Frame { + msec: 6608 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Frame { + msec: 6624 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Frame { + msec: 6640 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Frame { + msec: 6656 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Frame { + msec: 6672 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -46 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6688 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 43; y: -45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: -42 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6704 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 44; y: -39 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -36 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6720 + image: "usingMultilineEdit.6.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 45; y: -33 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 46; y: -28 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6736 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -25 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 47; y: -21 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6752 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 48; y: -18 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: -14 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6768 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 49; y: -10 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -8 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6784 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 50; y: -6 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: -3 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6800 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 51; y: -1 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 0 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6816 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 2 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 52; y: 3 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6832 + hash: "ff9bdea73a03bc51f76b6732176a0bad" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 53; y: 5 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 7 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6848 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 54; y: 8 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 10 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6864 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 11 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 55; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6880 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 55; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6896 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 6912 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 6928 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 6944 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 6960 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 6976 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 6992 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 7008 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 7024 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 7040 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 7056 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 7072 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Frame { + msec: 7088 + hash: "2b0458102c2231777202e66e0eaa8c8c" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 59; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7104 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7120 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7136 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7152 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7168 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 59; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7184 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7200 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7216 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7232 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7248 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7264 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7280 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7296 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7312 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7328 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7344 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7360 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7376 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7392 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7408 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7424 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7440 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7456 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7472 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7488 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7504 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7520 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7536 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7552 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Frame { + msec: 7568 + hash: "2ca3f2d1e4673bd97d05b43c4b70174a" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7584 + hash: "ed7e9042cc805a60b1e8cf58a654ac66" + } + Frame { + msec: 7600 + hash: "ed7e9042cc805a60b1e8cf58a654ac66" + } + Frame { + msec: 7616 + hash: "ed7e9042cc805a60b1e8cf58a654ac66" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7632 + hash: "ed7e9042cc805a60b1e8cf58a654ac66" + } + Frame { + msec: 7648 + hash: "ed7e9042cc805a60b1e8cf58a654ac66" + } + Frame { + msec: 7664 + hash: "ed7e9042cc805a60b1e8cf58a654ac66" + } + Frame { + msec: 7680 + image: "usingMultilineEdit.7.png" + } + Frame { + msec: 7696 + hash: "ed7e9042cc805a60b1e8cf58a654ac66" + } + Frame { + msec: 7712 + hash: "ed7e9042cc805a60b1e8cf58a654ac66" + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 7728 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7744 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7760 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7776 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7792 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7808 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7824 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7840 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7856 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7872 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7888 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7904 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7920 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7936 + hash: "16829fffc675d304661b9ff844a675f3" + } + Frame { + msec: 7952 + hash: "16829fffc675d304661b9ff844a675f3" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 7968 + hash: "45cfab0823b20b5dc206b42781cd9fb0" + } + Frame { + msec: 7984 + hash: "45cfab0823b20b5dc206b42781cd9fb0" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8000 + hash: "01069fb12c399f4d22d4d4ec79779752" + } + Frame { + msec: 8016 + hash: "01069fb12c399f4d22d4d4ec79779752" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8032 + hash: "88b6c6cca32a6d4adfc51cc7cce5e4bb" + } + Frame { + msec: 8048 + hash: "88b6c6cca32a6d4adfc51cc7cce5e4bb" + } + Key { + type: 7 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Key { + type: 6 + key: 16777237 + modifiers: 0 + text: "" + autorep: true + count: 1 + } + Frame { + msec: 8064 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Frame { + msec: 8080 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Key { + type: 7 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8096 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Frame { + msec: 8112 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Frame { + msec: 8128 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Frame { + msec: 8144 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Frame { + msec: 8160 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Frame { + msec: 8176 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Frame { + msec: 8192 + hash: "7b8423cfd0806b7d29cdb366133ef828" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8208 + hash: "45feb9f7c516693224505726324e07f1" + } + Frame { + msec: 8224 + hash: "45feb9f7c516693224505726324e07f1" + } + Frame { + msec: 8240 + hash: "45feb9f7c516693224505726324e07f1" + } + Frame { + msec: 8256 + hash: "45feb9f7c516693224505726324e07f1" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8272 + hash: "45feb9f7c516693224505726324e07f1" + } + Frame { + msec: 8288 + hash: "45feb9f7c516693224505726324e07f1" + } + Frame { + msec: 8304 + hash: "45feb9f7c516693224505726324e07f1" + } + Frame { + msec: 8320 + hash: "45feb9f7c516693224505726324e07f1" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8336 + hash: "592811b385809e02c02e5925191fbc0c" + } + Frame { + msec: 8352 + hash: "592811b385809e02c02e5925191fbc0c" + } + Frame { + msec: 8368 + hash: "592811b385809e02c02e5925191fbc0c" + } + Frame { + msec: 8384 + hash: "592811b385809e02c02e5925191fbc0c" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8400 + hash: "592811b385809e02c02e5925191fbc0c" + } + Frame { + msec: 8416 + hash: "592811b385809e02c02e5925191fbc0c" + } + Frame { + msec: 8432 + hash: "592811b385809e02c02e5925191fbc0c" + } + Frame { + msec: 8448 + hash: "592811b385809e02c02e5925191fbc0c" + } + Frame { + msec: 8464 + hash: "592811b385809e02c02e5925191fbc0c" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8480 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8496 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8512 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8528 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8544 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8560 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8576 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8592 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8608 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8624 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8640 + image: "usingMultilineEdit.8.png" + } + Frame { + msec: 8656 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 8672 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8688 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8704 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8720 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8736 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8752 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8768 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8784 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8800 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8816 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8832 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8848 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8864 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8880 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8896 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8912 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8928 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8944 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8960 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8976 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 8992 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9008 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9024 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9040 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9056 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9072 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9088 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9104 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9120 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9136 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9152 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9168 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9184 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9200 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 70; y: 73 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9216 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9232 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 74 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9248 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 75 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 76 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9264 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 70; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9280 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 70; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9296 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9312 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9328 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9344 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9360 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9376 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9392 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9408 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9424 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Frame { + msec: 9440 + hash: "e9b5feff425d22a5dcecc57ebb3d5379" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 71; y: 94 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9456 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9472 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9488 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9504 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9520 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9536 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 71; y: 94 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9552 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9568 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9584 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9600 + image: "usingMultilineEdit.9.png" + } + Frame { + msec: 9616 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9632 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9648 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9664 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 9680 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9696 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9712 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9728 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9744 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9760 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9776 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9792 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9808 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9824 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9840 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9856 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9872 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9888 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9904 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9920 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9936 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9952 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9968 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 9984 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10000 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10016 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10032 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10048 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10064 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10080 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10096 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Key { + type: 6 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10112 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10128 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10144 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10160 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10176 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10192 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10208 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10224 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Key { + type: 7 + key: 16777237 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10240 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10256 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10272 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10288 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10304 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10320 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10336 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Frame { + msec: 10352 + hash: "f3e8f8174b1c995d76e68fea7f21f285" + } + Key { + type: 6 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10368 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10384 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10400 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10416 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10432 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10448 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Key { + type: 7 + key: 16777235 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10464 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10480 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10496 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10512 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10528 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10544 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10560 + image: "usingMultilineEdit.10.png" + } + Frame { + msec: 10576 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10592 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10608 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10624 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10640 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 10656 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10672 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10688 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10704 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10720 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10736 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10752 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10768 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10784 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10800 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10816 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10832 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10848 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10864 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10880 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10896 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10912 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10928 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10944 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10960 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10976 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 10992 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11008 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11024 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11040 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11056 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11072 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11088 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11104 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11120 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11136 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11152 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11168 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11184 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11200 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11216 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11232 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11248 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11264 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11280 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11296 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11312 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11328 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11344 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11360 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11376 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11392 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11408 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11424 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11440 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11456 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11472 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11488 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11504 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11520 + image: "usingMultilineEdit.11.png" + } + Frame { + msec: 11536 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11552 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11568 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11584 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11600 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } + Frame { + msec: 11616 + hash: "94c707f2778a4f327f0c49265a42dfb4" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.0.png new file mode 100644 index 0000000..0d1fa54 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.1.png new file mode 100644 index 0000000..bedf721 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.2.png new file mode 100644 index 0000000..f17abe2 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.3.png new file mode 100644 index 0000000..a98e8ef Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.4.png new file mode 100644 index 0000000..36801d8 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.5.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.5.png new file mode 100644 index 0000000..35c39e7 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.5.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.6.png b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.6.png new file mode 100644 index 0000000..35c39e7 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.6.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.qml new file mode 100644 index 0000000..3e36073 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextedit/data-MAC/wrap.qml @@ -0,0 +1,2467 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "2bfc2ce5462c1b2e8177159590e8bf9d" + } + Key { + type: 6 + key: 84 + modifiers: 33554432 + text: "54" + autorep: false + count: 1 + } + Frame { + msec: 32 + hash: "2aebd6f552933d74ad64e953728c44a6" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 48 + hash: "2aebd6f552933d74ad64e953728c44a6" + } + Frame { + msec: 64 + hash: "2aebd6f552933d74ad64e953728c44a6" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 80 + hash: "2aebd6f552933d74ad64e953728c44a6" + } + Frame { + msec: 96 + hash: "2aebd6f552933d74ad64e953728c44a6" + } + Key { + type: 6 + key: 72 + modifiers: 0 + text: "68" + autorep: false + count: 1 + } + Frame { + msec: 112 + hash: "96f0f1c8ddc760ddb454c374faa75239" + } + Frame { + msec: 128 + hash: "96f0f1c8ddc760ddb454c374faa75239" + } + Frame { + msec: 144 + hash: "96f0f1c8ddc760ddb454c374faa75239" + } + Key { + type: 6 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 160 + hash: "5660942e66cdc499a067b1209b46a593" + } + Frame { + msec: 176 + hash: "5660942e66cdc499a067b1209b46a593" + } + Frame { + msec: 192 + hash: "5660942e66cdc499a067b1209b46a593" + } + Key { + type: 7 + key: 72 + modifiers: 0 + text: "68" + autorep: false + count: 1 + } + Frame { + msec: 208 + hash: "5660942e66cdc499a067b1209b46a593" + } + Frame { + msec: 224 + hash: "5660942e66cdc499a067b1209b46a593" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 240 + hash: "dd3b01d6a2a829e6ba7404d5318f7d15" + } + Key { + type: 7 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 256 + hash: "dd3b01d6a2a829e6ba7404d5318f7d15" + } + Frame { + msec: 272 + hash: "dd3b01d6a2a829e6ba7404d5318f7d15" + } + Frame { + msec: 288 + hash: "dd3b01d6a2a829e6ba7404d5318f7d15" + } + Frame { + msec: 304 + hash: "dd3b01d6a2a829e6ba7404d5318f7d15" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 320 + hash: "dd3b01d6a2a829e6ba7404d5318f7d15" + } + Frame { + msec: 336 + hash: "dd3b01d6a2a829e6ba7404d5318f7d15" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 352 + hash: "1cf8dbc4358e3aa51c260a3a40143318" + } + Frame { + msec: 368 + hash: "1cf8dbc4358e3aa51c260a3a40143318" + } + Frame { + msec: 384 + hash: "1cf8dbc4358e3aa51c260a3a40143318" + } + Frame { + msec: 400 + hash: "1cf8dbc4358e3aa51c260a3a40143318" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 416 + hash: "1cf8dbc4358e3aa51c260a3a40143318" + } + Frame { + msec: 432 + hash: "1cf8dbc4358e3aa51c260a3a40143318" + } + Frame { + msec: 448 + hash: "1cf8dbc4358e3aa51c260a3a40143318" + } + Frame { + msec: 464 + hash: "c9f5b9e45b0bb040e669daccf8bb1eb0" + } + Key { + type: 6 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 480 + hash: "fc2972eca4ca510d23c92f712fd1ceb3" + } + Frame { + msec: 496 + hash: "fc2972eca4ca510d23c92f712fd1ceb3" + } + Frame { + msec: 512 + hash: "fc2972eca4ca510d23c92f712fd1ceb3" + } + Frame { + msec: 528 + hash: "fc2972eca4ca510d23c92f712fd1ceb3" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Key { + type: 7 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "15313caf999d43a079e51c69323682f3" + } + Frame { + msec: 560 + hash: "15313caf999d43a079e51c69323682f3" + } + Frame { + msec: 576 + hash: "15313caf999d43a079e51c69323682f3" + } + Frame { + msec: 592 + hash: "15313caf999d43a079e51c69323682f3" + } + Frame { + msec: 608 + hash: "15313caf999d43a079e51c69323682f3" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 624 + hash: "80cbbe525c033083248e4a5d636f875c" + } + Frame { + msec: 640 + hash: "80cbbe525c033083248e4a5d636f875c" + } + Frame { + msec: 656 + hash: "80cbbe525c033083248e4a5d636f875c" + } + Frame { + msec: 672 + hash: "80cbbe525c033083248e4a5d636f875c" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 688 + hash: "80cbbe525c033083248e4a5d636f875c" + } + Frame { + msec: 704 + hash: "80cbbe525c033083248e4a5d636f875c" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 720 + hash: "ccc8cfb1c79d043ec68b2174f3fb5b27" + } + Frame { + msec: 736 + hash: "ccc8cfb1c79d043ec68b2174f3fb5b27" + } + Frame { + msec: 752 + hash: "ccc8cfb1c79d043ec68b2174f3fb5b27" + } + Frame { + msec: 768 + hash: "ccc8cfb1c79d043ec68b2174f3fb5b27" + } + Frame { + msec: 784 + hash: "ccc8cfb1c79d043ec68b2174f3fb5b27" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 800 + hash: "ccc8cfb1c79d043ec68b2174f3fb5b27" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 816 + hash: "d13548c95a838350f2b3011e643e0182" + } + Frame { + msec: 832 + hash: "d13548c95a838350f2b3011e643e0182" + } + Frame { + msec: 848 + hash: "d13548c95a838350f2b3011e643e0182" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 864 + hash: "d13548c95a838350f2b3011e643e0182" + } + Frame { + msec: 880 + hash: "d13548c95a838350f2b3011e643e0182" + } + Frame { + msec: 896 + hash: "d13548c95a838350f2b3011e643e0182" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 912 + hash: "1c61611fc6386736782b7d61619ae9af" + } + Frame { + msec: 928 + hash: "1c61611fc6386736782b7d61619ae9af" + } + Frame { + msec: 944 + hash: "1c61611fc6386736782b7d61619ae9af" + } + Frame { + msec: 960 + image: "wrap.0.png" + } + Frame { + msec: 976 + hash: "224079eaeb708f8cd27326a06857f6aa" + } + Frame { + msec: 992 + hash: "224079eaeb708f8cd27326a06857f6aa" + } + Key { + type: 6 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 1008 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1024 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1040 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1056 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1072 + hash: "07681c5879322e7ac093c9324b45520d" + } + Key { + type: 7 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 1088 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1104 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1120 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1136 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1152 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1168 + hash: "07681c5879322e7ac093c9324b45520d" + } + Frame { + msec: 1184 + hash: "07681c5879322e7ac093c9324b45520d" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1200 + hash: "9dda4b5fa581a01608d9c3e2ce0bc33b" + } + Frame { + msec: 1216 + hash: "9dda4b5fa581a01608d9c3e2ce0bc33b" + } + Frame { + msec: 1232 + hash: "9dda4b5fa581a01608d9c3e2ce0bc33b" + } + Frame { + msec: 1248 + hash: "9dda4b5fa581a01608d9c3e2ce0bc33b" + } + Frame { + msec: 1264 + hash: "9dda4b5fa581a01608d9c3e2ce0bc33b" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 1280 + hash: "95c62fa8d99d29999ce84b975d6858bc" + } + Frame { + msec: 1296 + hash: "95c62fa8d99d29999ce84b975d6858bc" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1312 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Frame { + msec: 1328 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Frame { + msec: 1344 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 1360 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Frame { + msec: 1376 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1392 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Frame { + msec: 1408 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Frame { + msec: 1424 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Frame { + msec: 1440 + hash: "c98dada1c82e867bd0d0ff56de86574f" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 1456 + hash: "30d8ac1ed88cce3df5e8e5ef209caf45" + } + Frame { + msec: 1472 + hash: "30d8ac1ed88cce3df5e8e5ef209caf45" + } + Frame { + msec: 1488 + hash: "30d8ac1ed88cce3df5e8e5ef209caf45" + } + Frame { + msec: 1504 + hash: "30d8ac1ed88cce3df5e8e5ef209caf45" + } + Frame { + msec: 1520 + hash: "30d8ac1ed88cce3df5e8e5ef209caf45" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 1536 + hash: "30d8ac1ed88cce3df5e8e5ef209caf45" + } + Frame { + msec: 1552 + hash: "30d8ac1ed88cce3df5e8e5ef209caf45" + } + Key { + type: 6 + key: 72 + modifiers: 0 + text: "68" + autorep: false + count: 1 + } + Frame { + msec: 1568 + hash: "d0d0bd91c9ac756c43a0c0fe53797ee3" + } + Frame { + msec: 1584 + hash: "d0d0bd91c9ac756c43a0c0fe53797ee3" + } + Frame { + msec: 1600 + hash: "d0d0bd91c9ac756c43a0c0fe53797ee3" + } + Frame { + msec: 1616 + hash: "d0d0bd91c9ac756c43a0c0fe53797ee3" + } + Frame { + msec: 1632 + hash: "d0d0bd91c9ac756c43a0c0fe53797ee3" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Key { + type: 7 + key: 72 + modifiers: 0 + text: "68" + autorep: false + count: 1 + } + Frame { + msec: 1648 + hash: "8a2825dc4d2883fe491819ae34a2eff8" + } + Frame { + msec: 1664 + hash: "8a2825dc4d2883fe491819ae34a2eff8" + } + Frame { + msec: 1680 + hash: "8a2825dc4d2883fe491819ae34a2eff8" + } + Frame { + msec: 1696 + hash: "8a2825dc4d2883fe491819ae34a2eff8" + } + Frame { + msec: 1712 + hash: "8a2825dc4d2883fe491819ae34a2eff8" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 1728 + hash: "acf73c003e786ca1756f43a2e20962d3" + } + Frame { + msec: 1744 + hash: "acf73c003e786ca1756f43a2e20962d3" + } + Frame { + msec: 1760 + hash: "acf73c003e786ca1756f43a2e20962d3" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 1776 + hash: "acf73c003e786ca1756f43a2e20962d3" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1792 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Frame { + msec: 1808 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 1824 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Frame { + msec: 1840 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Frame { + msec: 1856 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Frame { + msec: 1872 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1888 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Frame { + msec: 1904 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Frame { + msec: 1920 + image: "wrap.1.png" + } + Frame { + msec: 1936 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Frame { + msec: 1952 + hash: "715cce5efb512e76e65b6dd53de988c6" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 1968 + hash: "eb9217410ea88877b037c9f8d38413ab" + } + Frame { + msec: 1984 + hash: "eb9217410ea88877b037c9f8d38413ab" + } + Frame { + msec: 2000 + hash: "eb9217410ea88877b037c9f8d38413ab" + } + Frame { + msec: 2016 + hash: "eb9217410ea88877b037c9f8d38413ab" + } + Frame { + msec: 2032 + hash: "eb9217410ea88877b037c9f8d38413ab" + } + Frame { + msec: 2048 + hash: "eb9217410ea88877b037c9f8d38413ab" + } + Key { + type: 6 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 2064 + hash: "d4b86b88d417e168139671f762a129a9" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 2080 + hash: "d4b86b88d417e168139671f762a129a9" + } + Frame { + msec: 2096 + hash: "d4b86b88d417e168139671f762a129a9" + } + Frame { + msec: 2112 + hash: "d4b86b88d417e168139671f762a129a9" + } + Key { + type: 7 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 2128 + hash: "d4b86b88d417e168139671f762a129a9" + } + Frame { + msec: 2144 + hash: "d4b86b88d417e168139671f762a129a9" + } + Frame { + msec: 2160 + hash: "d4b86b88d417e168139671f762a129a9" + } + Frame { + msec: 2176 + hash: "d4b86b88d417e168139671f762a129a9" + } + Frame { + msec: 2192 + hash: "d4b86b88d417e168139671f762a129a9" + } + Frame { + msec: 2208 + hash: "d4b86b88d417e168139671f762a129a9" + } + Key { + type: 6 + key: 88 + modifiers: 0 + text: "78" + autorep: false + count: 1 + } + Frame { + msec: 2224 + hash: "bce77452be7f54a1f42685acb79ca5a3" + } + Frame { + msec: 2240 + hash: "bce77452be7f54a1f42685acb79ca5a3" + } + Frame { + msec: 2256 + hash: "bce77452be7f54a1f42685acb79ca5a3" + } + Frame { + msec: 2272 + hash: "bce77452be7f54a1f42685acb79ca5a3" + } + Frame { + msec: 2288 + hash: "bce77452be7f54a1f42685acb79ca5a3" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 2304 + hash: "c8040808e2d582a32d447eb885b6a72d" + } + Key { + type: 7 + key: 88 + modifiers: 0 + text: "78" + autorep: false + count: 1 + } + Frame { + msec: 2320 + hash: "c8040808e2d582a32d447eb885b6a72d" + } + Frame { + msec: 2336 + hash: "c8040808e2d582a32d447eb885b6a72d" + } + Frame { + msec: 2352 + hash: "c8040808e2d582a32d447eb885b6a72d" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2368 + hash: "5beb32a23637b51f1c9b117e93b2c1d0" + } + Frame { + msec: 2384 + hash: "5beb32a23637b51f1c9b117e93b2c1d0" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 2400 + hash: "5beb32a23637b51f1c9b117e93b2c1d0" + } + Frame { + msec: 2416 + hash: "5beb32a23637b51f1c9b117e93b2c1d0" + } + Frame { + msec: 2432 + hash: "5beb32a23637b51f1c9b117e93b2c1d0" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2448 + hash: "5beb32a23637b51f1c9b117e93b2c1d0" + } + Frame { + msec: 2464 + hash: "e1020b6bb8ca2e9f0ce93f9047695f48" + } + Frame { + msec: 2480 + hash: "e1020b6bb8ca2e9f0ce93f9047695f48" + } + Key { + type: 6 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 2496 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Frame { + msec: 2512 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Frame { + msec: 2528 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Frame { + msec: 2544 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Key { + type: 7 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 2560 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Frame { + msec: 2576 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Frame { + msec: 2592 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Frame { + msec: 2608 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Frame { + msec: 2624 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Frame { + msec: 2640 + hash: "429296196c5ebf0094d5e76379f929c5" + } + Key { + type: 6 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 2656 + hash: "83a910a91a9c1ca60e8f021b7a96509e" + } + Frame { + msec: 2672 + hash: "83a910a91a9c1ca60e8f021b7a96509e" + } + Frame { + msec: 2688 + hash: "83a910a91a9c1ca60e8f021b7a96509e" + } + Frame { + msec: 2704 + hash: "83a910a91a9c1ca60e8f021b7a96509e" + } + Key { + type: 7 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 2720 + hash: "83a910a91a9c1ca60e8f021b7a96509e" + } + Frame { + msec: 2736 + hash: "83a910a91a9c1ca60e8f021b7a96509e" + } + Frame { + msec: 2752 + hash: "83a910a91a9c1ca60e8f021b7a96509e" + } + Key { + type: 6 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 2768 + hash: "4a2af150d069abfff098673375469b08" + } + Frame { + msec: 2784 + hash: "4a2af150d069abfff098673375469b08" + } + Frame { + msec: 2800 + hash: "4a2af150d069abfff098673375469b08" + } + Frame { + msec: 2816 + hash: "4a2af150d069abfff098673375469b08" + } + Frame { + msec: 2832 + hash: "4a2af150d069abfff098673375469b08" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Key { + type: 7 + key: 73 + modifiers: 0 + text: "69" + autorep: false + count: 1 + } + Frame { + msec: 2848 + hash: "f1909371c6f44fb7547916340d043ac7" + } + Frame { + msec: 2864 + hash: "f1909371c6f44fb7547916340d043ac7" + } + Frame { + msec: 2880 + image: "wrap.2.png" + } + Frame { + msec: 2896 + hash: "f1909371c6f44fb7547916340d043ac7" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2912 + hash: "35fecf3c5feda6afbd4eac5935dca7af" + } + Frame { + msec: 2928 + hash: "35fecf3c5feda6afbd4eac5935dca7af" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 2944 + hash: "35fecf3c5feda6afbd4eac5935dca7af" + } + Frame { + msec: 2960 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2976 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Frame { + msec: 2992 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Frame { + msec: 3008 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Frame { + msec: 3024 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Frame { + msec: 3040 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Frame { + msec: 3056 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Frame { + msec: 3072 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Frame { + msec: 3088 + hash: "d8e23c87332aed5105cb6d488efd4a63" + } + Key { + type: 6 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 3104 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Frame { + msec: 3120 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Frame { + msec: 3136 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Frame { + msec: 3152 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Frame { + msec: 3168 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Key { + type: 7 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 3184 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Frame { + msec: 3200 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Frame { + msec: 3216 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Frame { + msec: 3232 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Frame { + msec: 3248 + hash: "6c3f38c1180f392082e3879e35a23c5e" + } + Key { + type: 6 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 3264 + hash: "54bbf6e8fbfc6e2a3e4f0886f1feade3" + } + Frame { + msec: 3280 + hash: "54bbf6e8fbfc6e2a3e4f0886f1feade3" + } + Frame { + msec: 3296 + hash: "54bbf6e8fbfc6e2a3e4f0886f1feade3" + } + Key { + type: 7 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 3312 + hash: "54bbf6e8fbfc6e2a3e4f0886f1feade3" + } + Frame { + msec: 3328 + hash: "54bbf6e8fbfc6e2a3e4f0886f1feade3" + } + Frame { + msec: 3344 + hash: "54bbf6e8fbfc6e2a3e4f0886f1feade3" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 3360 + hash: "0e7fcbbe36c374e9436e5ecccd8663ee" + } + Frame { + msec: 3376 + hash: "0e7fcbbe36c374e9436e5ecccd8663ee" + } + Frame { + msec: 3392 + hash: "0e7fcbbe36c374e9436e5ecccd8663ee" + } + Frame { + msec: 3408 + hash: "0e7fcbbe36c374e9436e5ecccd8663ee" + } + Frame { + msec: 3424 + hash: "0e7fcbbe36c374e9436e5ecccd8663ee" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 3440 + hash: "0e7fcbbe36c374e9436e5ecccd8663ee" + } + Frame { + msec: 3456 + hash: "4928b737a83471181066d043b51e939f" + } + Frame { + msec: 3472 + hash: "4928b737a83471181066d043b51e939f" + } + Key { + type: 6 + key: 80 + modifiers: 0 + text: "70" + autorep: false + count: 1 + } + Frame { + msec: 3488 + hash: "541901e223b7129edcbd2264da7e13cd" + } + Frame { + msec: 3504 + hash: "541901e223b7129edcbd2264da7e13cd" + } + Frame { + msec: 3520 + hash: "541901e223b7129edcbd2264da7e13cd" + } + Frame { + msec: 3536 + hash: "541901e223b7129edcbd2264da7e13cd" + } + Key { + type: 7 + key: 80 + modifiers: 0 + text: "70" + autorep: false + count: 1 + } + Frame { + msec: 3552 + hash: "541901e223b7129edcbd2264da7e13cd" + } + Frame { + msec: 3568 + hash: "541901e223b7129edcbd2264da7e13cd" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3584 + hash: "86aa5d4fdc4f92c2810ccb3d5e990e22" + } + Frame { + msec: 3600 + hash: "86aa5d4fdc4f92c2810ccb3d5e990e22" + } + Frame { + msec: 3616 + hash: "86aa5d4fdc4f92c2810ccb3d5e990e22" + } + Frame { + msec: 3632 + hash: "86aa5d4fdc4f92c2810ccb3d5e990e22" + } + Frame { + msec: 3648 + hash: "86aa5d4fdc4f92c2810ccb3d5e990e22" + } + Frame { + msec: 3664 + hash: "86aa5d4fdc4f92c2810ccb3d5e990e22" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3680 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 3696 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3712 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3728 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3744 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3760 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 3776 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3792 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3808 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3824 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3840 + image: "wrap.3.png" + } + Frame { + msec: 3856 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3872 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3888 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Frame { + msec: 3904 + hash: "af1a78eca66ce7523306aaf324a59af6" + } + Key { + type: 6 + key: 67 + modifiers: 0 + text: "63" + autorep: false + count: 1 + } + Frame { + msec: 3920 + hash: "c72ed9cecd1144b7e937c2c3c33ab0b8" + } + Frame { + msec: 3936 + hash: "c72ed9cecd1144b7e937c2c3c33ab0b8" + } + Frame { + msec: 3952 + hash: "c72ed9cecd1144b7e937c2c3c33ab0b8" + } + Frame { + msec: 3968 + hash: "e00d1a6f1ceb15493e87151071d8ad3f" + } + Frame { + msec: 3984 + hash: "e00d1a6f1ceb15493e87151071d8ad3f" + } + Key { + type: 7 + key: 67 + modifiers: 0 + text: "63" + autorep: false + count: 1 + } + Frame { + msec: 4000 + hash: "e00d1a6f1ceb15493e87151071d8ad3f" + } + Frame { + msec: 4016 + hash: "e00d1a6f1ceb15493e87151071d8ad3f" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4032 + hash: "9b129865b81189be8c2e59178c009cd9" + } + Frame { + msec: 4048 + hash: "9b129865b81189be8c2e59178c009cd9" + } + Frame { + msec: 4064 + hash: "9b129865b81189be8c2e59178c009cd9" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 4080 + hash: "9b129865b81189be8c2e59178c009cd9" + } + Key { + type: 6 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 4096 + hash: "ccbc7a847315311d9661b7c3fc6057d6" + } + Frame { + msec: 4112 + hash: "ccbc7a847315311d9661b7c3fc6057d6" + } + Frame { + msec: 4128 + hash: "ccbc7a847315311d9661b7c3fc6057d6" + } + Frame { + msec: 4144 + hash: "ccbc7a847315311d9661b7c3fc6057d6" + } + Key { + type: 7 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 4160 + hash: "ccbc7a847315311d9661b7c3fc6057d6" + } + Frame { + msec: 4176 + hash: "ccbc7a847315311d9661b7c3fc6057d6" + } + Frame { + msec: 4192 + hash: "ccbc7a847315311d9661b7c3fc6057d6" + } + Key { + type: 6 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 4208 + hash: "3532604c4d8bb23fc8fd44a153708f23" + } + Frame { + msec: 4224 + hash: "3532604c4d8bb23fc8fd44a153708f23" + } + Frame { + msec: 4240 + hash: "3532604c4d8bb23fc8fd44a153708f23" + } + Frame { + msec: 4256 + hash: "3532604c4d8bb23fc8fd44a153708f23" + } + Frame { + msec: 4272 + hash: "3532604c4d8bb23fc8fd44a153708f23" + } + Key { + type: 6 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 4288 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Key { + type: 7 + key: 82 + modifiers: 0 + text: "72" + autorep: false + count: 1 + } + Frame { + msec: 4304 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Frame { + msec: 4320 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Frame { + msec: 4336 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Key { + type: 7 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 4352 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Frame { + msec: 4368 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Frame { + msec: 4384 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Frame { + msec: 4400 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Frame { + msec: 4416 + hash: "7a951d7233a41e872aa8f8784edc1bff" + } + Key { + type: 6 + key: 67 + modifiers: 0 + text: "63" + autorep: false + count: 1 + } + Frame { + msec: 4432 + hash: "41683813bcdc1761003a9bece7752516" + } + Frame { + msec: 4448 + hash: "41683813bcdc1761003a9bece7752516" + } + Frame { + msec: 4464 + hash: "be52b6b350696bb8e883bd24750cce06" + } + Key { + type: 7 + key: 67 + modifiers: 0 + text: "63" + autorep: false + count: 1 + } + Frame { + msec: 4480 + hash: "be52b6b350696bb8e883bd24750cce06" + } + Frame { + msec: 4496 + hash: "be52b6b350696bb8e883bd24750cce06" + } + Frame { + msec: 4512 + hash: "be52b6b350696bb8e883bd24750cce06" + } + Frame { + msec: 4528 + hash: "be52b6b350696bb8e883bd24750cce06" + } + Frame { + msec: 4544 + hash: "be52b6b350696bb8e883bd24750cce06" + } + Key { + type: 6 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 4560 + hash: "f4845e51dfb18617fe31471b0cb3bf16" + } + Frame { + msec: 4576 + hash: "f4845e51dfb18617fe31471b0cb3bf16" + } + Frame { + msec: 4592 + hash: "f4845e51dfb18617fe31471b0cb3bf16" + } + Frame { + msec: 4608 + hash: "f4845e51dfb18617fe31471b0cb3bf16" + } + Key { + type: 7 + key: 84 + modifiers: 0 + text: "74" + autorep: false + count: 1 + } + Frame { + msec: 4624 + hash: "f4845e51dfb18617fe31471b0cb3bf16" + } + Frame { + msec: 4640 + hash: "f4845e51dfb18617fe31471b0cb3bf16" + } + Frame { + msec: 4656 + hash: "f4845e51dfb18617fe31471b0cb3bf16" + } + Frame { + msec: 4672 + hash: "f4845e51dfb18617fe31471b0cb3bf16" + } + Key { + type: 6 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 4688 + hash: "4e994f63cd763db43435fd39e864585c" + } + Frame { + msec: 4704 + hash: "4e994f63cd763db43435fd39e864585c" + } + Frame { + msec: 4720 + hash: "4e994f63cd763db43435fd39e864585c" + } + Frame { + msec: 4736 + hash: "4e994f63cd763db43435fd39e864585c" + } + Key { + type: 7 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 4752 + hash: "4e994f63cd763db43435fd39e864585c" + } + Frame { + msec: 4768 + hash: "4e994f63cd763db43435fd39e864585c" + } + Frame { + msec: 4784 + hash: "4e994f63cd763db43435fd39e864585c" + } + Key { + type: 6 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 4800 + image: "wrap.4.png" + } + Frame { + msec: 4816 + hash: "2b5db83aff14077f625dbfc75830b2b0" + } + Key { + type: 7 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 4832 + hash: "2b5db83aff14077f625dbfc75830b2b0" + } + Frame { + msec: 4848 + hash: "2b5db83aff14077f625dbfc75830b2b0" + } + Frame { + msec: 4864 + hash: "2b5db83aff14077f625dbfc75830b2b0" + } + Frame { + msec: 4880 + hash: "2b5db83aff14077f625dbfc75830b2b0" + } + Key { + type: 6 + key: 46 + modifiers: 0 + text: "2e" + autorep: false + count: 1 + } + Frame { + msec: 4896 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 4912 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 4928 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 4944 + hash: "566cba616a99c92c228a4c312466b96b" + } + Key { + type: 7 + key: 46 + modifiers: 0 + text: "2e" + autorep: false + count: 1 + } + Frame { + msec: 4960 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 4976 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 4992 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5008 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5024 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5040 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5056 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5072 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5088 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5104 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5120 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5136 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5152 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5168 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5184 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5200 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5216 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5232 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5248 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5264 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5280 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5296 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5312 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5328 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5344 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5360 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5376 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5392 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5408 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5424 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5440 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5456 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5472 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5488 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5504 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5520 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5536 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5552 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5568 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5584 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5600 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5616 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5632 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5648 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5664 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5680 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5696 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5712 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5728 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5744 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5760 + image: "wrap.5.png" + } + Frame { + msec: 5776 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5792 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5808 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5824 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5840 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5856 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5872 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5888 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5904 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5920 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5936 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5952 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 5968 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 5984 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6000 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6016 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6032 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6048 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6064 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6080 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6096 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6112 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6128 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6144 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6160 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6176 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6192 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6208 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6224 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6240 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6256 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6272 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6288 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6304 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6320 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6336 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6352 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6368 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6384 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6400 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6416 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6432 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6448 + hash: "f902766808596ea423cbc0b7e9bdd87a" + } + Frame { + msec: 6464 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6480 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6496 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6512 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6528 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6544 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6560 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6576 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6592 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6608 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6624 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6640 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6656 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6672 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6688 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6704 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6720 + image: "wrap.6.png" + } + Frame { + msec: 6736 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6752 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6768 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6784 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6800 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6816 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6832 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6848 + hash: "566cba616a99c92c228a4c312466b96b" + } + Frame { + msec: 6864 + hash: "566cba616a99c92c228a4c312466b96b" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.0.png index 9d0bab2..d889eef 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.0.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.1.png index db66ff7..0c8c250 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.1.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.2.png index cbcca68..76b7fce 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.2.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.3.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.3.png index c22196b..ecc8568 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.3.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.3.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.4.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.4.png index a1d051e..766abaf 100644 Binary files a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.4.png and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.4.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.qml index 208d05f..37f5e46 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/cursorDelegate.qml @@ -6,134 +6,146 @@ VisualTest { } Frame { msec: 16 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 32 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 48 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 64 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 80 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 96 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 112 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 128 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 144 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 160 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 176 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 192 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 208 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 224 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 240 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 256 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 272 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 288 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 304 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 320 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 336 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 352 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 368 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 384 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 400 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 416 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 432 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" } Frame { msec: 448 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "79b388ca7d46e1efb38672c6bf8837f8" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 464 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "52c03d5681cadb1df400a0974261e05d" } Frame { msec: 480 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "52c03d5681cadb1df400a0974261e05d" } Frame { msec: 496 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "52c03d5681cadb1df400a0974261e05d" } Frame { msec: 512 - hash: "701d8c0f72330c0b72df071bd17749e6" + hash: "52c03d5681cadb1df400a0974261e05d" + } + Frame { + msec: 528 + hash: "9c280c469d12fc0bf1ff42883ffd5155" } Key { - type: 6 + type: 7 key: 16777234 modifiers: 0 text: "" @@ -141,36 +153,44 @@ VisualTest { count: 1 } Frame { - msec: 528 - hash: "438be260f19d04c9f98ed7dce1c7db40" - } - Frame { msec: 544 - hash: "6032aada2c48092000ecb93e52656414" + hash: "655716f3544c6ae649cbda487ed1916f" } Frame { msec: 560 - hash: "d23bdd94019477d8378cde580d8765ad" + hash: "e9e6a20040bedf4afb670310a7e5c2f0" } Frame { msec: 576 - hash: "d74f8e44d47710714d4197809fffb622" + hash: "842641682f22e370402857b9cb875192" } Frame { msec: 592 - hash: "4fbbb8447d80012bc6b5c24ddbfe498e" + hash: "4d8258cd2fea9b4bee647b9480a743e3" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 608 - hash: "4e875ba8703b690a17e445f2b3810435" + hash: "eb7d48cbf4cad403eb7d3fa2d10e0f88" } Frame { msec: 624 - hash: "e4d7a59716cd704fe1cfa8ba91454e93" + hash: "c6387240c7075e8321fda5348de9b752" } Frame { msec: 640 - hash: "a2ea272b45d8de225826d9381015ff2e" + hash: "98fb4f03db3a574cf96e88ca940fcd07" + } + Frame { + msec: 656 + hash: "19d450ee21b0c525aba2c38e62c5b117" } Key { type: 7 @@ -181,67 +201,47 @@ VisualTest { count: 1 } Frame { - msec: 656 - hash: "5d112a3675ea4c010e7bc60e036d0262" - } - Frame { msec: 672 - hash: "788d8962f311adf57a3acc876b0e8804" + hash: "9943426dd31b393c4831dcfcdb266f76" } Frame { msec: 688 - hash: "827fdd6a3d1006f4a9dd2faf208ea436" + hash: "318bd0909d6ab32fc15ee385b69e1dc2" + } + Frame { + msec: 704 + hash: "ca5f62f289b5f86e6d86afdcb0bc05f5" + } + Frame { + msec: 720 + hash: "2158851f276862dd1e2a7d3fee9af938" } Key { type: 6 - key: 16777236 + key: 16777234 modifiers: 0 text: "" autorep: false count: 1 } Frame { - msec: 704 - hash: "91b2695e4915238ae8610a64e279b0f4" - } - Frame { - msec: 720 - hash: "a97d90765f87b998eae6e9f603c61bff" - } - Frame { msec: 736 - hash: "48969edab07b942480d93ac2d383ca24" + hash: "746e28cf8df1bcfd5a07383e4f9e1420" } Frame { msec: 752 - hash: "ecfd9d6d5873001f0c67806544a14983" + hash: "8ae15b54e47c6ba43b6ddad234a65499" } Frame { msec: 768 - hash: "a3a3bc1e2523d3e7f961893bcd1dd3a8" + hash: "8fcb22bd16dafb62a2fdcd40feda5178" } Frame { msec: 784 - hash: "e337735ad0b42e60c54f16f3da7af3cf" - } - Frame { - msec: 800 - hash: "c39db081130d269f25dbcb1a19afb8d0" - } - Frame { - msec: 816 - hash: "c464d501e3935ec0f53eb780bd1a8289" + hash: "1ef6e14540615967e7c059fb3299c38a" } Key { type: 7 - key: 16777236 - modifiers: 0 - text: "" - autorep: false - count: 1 - } - Key { - type: 6 key: 16777234 modifiers: 0 text: "" @@ -249,28 +249,44 @@ VisualTest { count: 1 } Frame { + msec: 800 + hash: "cd260f4aa6e9772668b13f1f5e4ab3db" + } + Frame { + msec: 816 + hash: "44aaa31fe7183e0088eb9ec12cfef69f" + } + Frame { msec: 832 - hash: "9dc01a69f2a6892d3c4203674c8bef72" + hash: "575b1fbc9fa6587ce9811b5074a47a84" } Frame { msec: 848 - hash: "d94054222fd37a350bd8abd592a332e3" + hash: "83b1fe02fdbe16418231c8acbbbebcac" } Frame { msec: 864 - hash: "46fed264c233490b477e3a7c22183e18" + hash: "7bfb6f545fd55e7e336431e6882c9974" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 880 - hash: "34bc703c915b49b0450ece1d18306df8" + hash: "bf3a6677b5f815e1b66f6489032f8e1d" } Frame { msec: 896 - hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2" + hash: "cfcd90f1e97e92b0fbe2595275a64a48" } Frame { msec: 912 - hash: "4f6dbc7b249c37390518cc263832b587" + hash: "397ad28f60e1f5245b59380968ececd2" } Key { type: 7 @@ -282,11 +298,11 @@ VisualTest { } Frame { msec: 928 - hash: "df09fa2fd138d1b480eec82db3872d6f" + hash: "c6ea797bc327a7e31316f44e93d6beb9" } Frame { msec: 944 - hash: "b74cb1bfbb979a5e91853d9145d277d8" + hash: "0e3c15c5328c85a54826b65ec82007f5" } Frame { msec: 960 @@ -294,207 +310,247 @@ VisualTest { } Frame { msec: 976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 1024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 1040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 1056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Key { - type: 6 - key: 16777248 + type: 7 + key: 16777234 modifiers: 0 text: "" autorep: false count: 1 } - Key { - type: 6 - key: 16777249 - modifiers: 33554432 - text: "" - autorep: false - count: 1 + Frame { + msec: 1056 + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 1072 - hash: "35425ae3ccf3c8dcc1483479c57a3287" + hash: "676e251f10800c2a8860b43c2546524d" } Frame { msec: 1088 - hash: "b74cb1bfbb979a5e91853d9145d277d8" + hash: "db99874ab3656663316931ea0ac4c7c3" } Frame { msec: 1104 - hash: "df09fa2fd138d1b480eec82db3872d6f" + hash: "2c4b2205df96e09a9cd91d5efb86d820" } Frame { msec: 1120 - hash: "4f6dbc7b249c37390518cc263832b587" + hash: "25e6e81e4769751e9639ee4a3c4ae839" + } + Key { + type: 6 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1136 - hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2" + hash: "9eaa29386d3ad22b9032b8b345739342" } Frame { msec: 1152 - hash: "34bc703c915b49b0450ece1d18306df8" + hash: "21ebb054c5df6104bb01e0a8abe9b40c" } Frame { msec: 1168 - hash: "46fed264c233490b477e3a7c22183e18" + hash: "3ab8cdbe65ea34868c1a917e42d31c14" } Frame { msec: 1184 - hash: "d94054222fd37a350bd8abd592a332e3" + hash: "05badd00be618fc4395e80936284613f" } Frame { msec: 1200 - hash: "9dc01a69f2a6892d3c4203674c8bef72" + hash: "8a373ed9798a8dd33aab5191db06f190" + } + Key { + type: 7 + key: 16777234 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 1216 - hash: "76fb2e1ad33affe33c0887f04caa7396" + hash: "2a8c6a7cd20fcf7b5c8b75c59f50276b" } Frame { msec: 1232 - hash: "0f500339c81ca3621d13910017b84b7b" + hash: "2e874a6b741d1cbfde5544fb831bdf84" } Frame { msec: 1248 - hash: "702864de569e6a5648ee174d5ef891f8" + hash: "36e3d3a9a4e7163a1c052f30a97697dc" } Frame { msec: 1264 - hash: "01e937e1fcc0331b2541fa32c3479a24" + hash: "fb18565ab22f6b397aef65a992c0dff8" } Frame { msec: 1280 - hash: "ee661e6cc1f86e755ff399adb6b11fd1" + hash: "13763364dd631556988fe18afce23e84" } Frame { msec: 1296 - hash: "ea2d610e9b41e72b2984a51f0d3f7587" + hash: "2ea2995a7c022a4959eb1128d69907cc" } - Frame { - msec: 1312 - hash: "4a646d76b706698a02cead560b1f8d57" + Key { + type: 6 + key: 16777249 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { - msec: 1328 - hash: "48ec87bfc25471f6fa2d43f9db80b693" + msec: 1312 + hash: "88485c98b946476b52094c85702939d4" } Key { type: 6 - key: 16777234 - modifiers: 100663296 + key: 16777248 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { + msec: 1328 + hash: "532586645946f17a274a3f7d1077e55b" + } + Frame { msec: 1344 - hash: "12b5e016bad990d1f2bf427ee8e3e6d9" + hash: "1702f1badb65f4039536c7255220a4b9" } Frame { msec: 1360 - hash: "66a2ba3f9e005cd58aa50cfa0000cd15" + hash: "7cd23a8548d9d2d7da78fa541d1ff9ba" } Frame { msec: 1376 - hash: "a2e9e42e09dadbd0791f52bb96e0e0dc" + hash: "42a4e0f3511d45f56e445737cbda49b5" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1392 - hash: "ac68396566ea85a157e944e601dd8d18" + hash: "e326fff480404a41735b1567a784ba80" } Frame { msec: 1408 - hash: "b9bfdebec8dd1a93de7ef2768b2542ba" + hash: "4d972a5cfa88e86c72dc1fa7430090e4" } Frame { msec: 1424 - hash: "2e0a4b960803770acb34ef56ccf2be35" - } - Key { - type: 7 - key: 16777234 - modifiers: 100663296 - text: "" - autorep: false - count: 1 + hash: "691c28e265d5cd253c06f6feff7ee536" } Frame { msec: 1440 - hash: "df1643f0f8b7aa2dc080958822aeb3d0" + hash: "3ebb2496ec085b92a8f130e4f54c26c9" } Frame { msec: 1456 - hash: "15bb91195adfaf83e88fd93e41ff3e17" + hash: "2447e98313dc850f58333c7aa630ef28" } Frame { msec: 1472 - hash: "dc0476c27bd7eef3a59637df9a3fecd8" + hash: "9d8bc16d365e534e4e1feee7185db44f" } Frame { msec: 1488 - hash: "a271f69e9dc6d1e0362c3e10760895df" + hash: "9a4b9cb5396857f79eac3a0a4e1dc1b3" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1504 - hash: "7fe66bcc6bada354b4dd7baf8c977740" + hash: "2d25e8fc011ec795e1596806a81be60d" } Frame { msec: 1520 - hash: "6b502dbd5ac8ff010df326cb9b593dce" + hash: "2fce48cf607cc3809ee1a9f59323e23a" } Frame { msec: 1536 - hash: "a9dd21649a95a6a6e8daea91bc6e2a5f" + hash: "0fa177b9aa230dbcd5032a6ecddf604a" } Frame { msec: 1552 - hash: "374686590eaa02b7b436caa40cc0b0a0" + hash: "2dd53f15e0787337ce0590223e5ce788" } Frame { msec: 1568 - hash: "09ac3c5d413b1f650407eaa971aade81" + hash: "385d08fa990f40a7a1d5fd61fa9fe7ae" } Frame { msec: 1584 - hash: "39f84e04f1ae58600591c0de40558d2c" + hash: "481401635bd419b8a30435135f61223f" } Frame { msec: 1600 - hash: "0336ea1799835af2185c361e221a9661" + hash: "d6600e6fcfd477100b7aab3509888512" } Frame { msec: 1616 - hash: "8c7ab13e499d7f31107cf0f899334259" + hash: "4ede7ec537b56352dec575bbb7dbd482" } Frame { msec: 1632 - hash: "bad5899324e52c9e6eadb72f3e7c2150" + hash: "d4ff15c0dcf76dd7c97a0bf1901d688e" } Frame { msec: 1648 - hash: "4b78f451ecb22cfbed9f5998d61018eb" + hash: "d15c7df693dfb0ef48c30d5f73b34126" + } + Frame { + msec: 1664 + hash: "6dee0c6a00fb378692277914d22607e6" + } + Frame { + msec: 1680 + hash: "8d74e52fca14ec36b266ace5113cac2b" } Key { type: 6 @@ -505,76 +561,84 @@ VisualTest { count: 1 } Frame { - msec: 1664 - hash: "6c913bc712eee18947a43dd1c0a6516b" - } - Frame { - msec: 1680 - hash: "4e566abf1e0696e72b2a4beab5a53d6e" - } - Frame { msec: 1696 - hash: "6ad579c289c63a6b90a1517765fc041e" + hash: "a33b648bc08e2b0db4e04a28dc7f64a2" } Frame { msec: 1712 - hash: "cef43f349cf221a1aa6e6e70f1fa6339" - } - Key { - type: 7 - key: 16777236 - modifiers: 100663296 - text: "" - autorep: false - count: 1 + hash: "04af2732e95351448a3a4e5a12eb2c0d" } Frame { msec: 1728 - hash: "d89f7e3e2510fcb34786584747633673" + hash: "72795cad18792504420251987d814cc5" } Frame { msec: 1744 - hash: "eb23a3eac684808f73034f4e4ef8984d" + hash: "46e3c02ca6ea9c831b276c6f0ef954db" } Frame { msec: 1760 - hash: "6f2c1f61e58940d9cc1a70c0db903446" + hash: "42173174a90d470901cd543e2bd57225" } Frame { msec: 1776 - hash: "f036a5ecda518be198f3bdf2dbc5baab" + hash: "57e7d302246a27430b1e60fdbdfc368a" } Frame { msec: 1792 - hash: "7411784774fdc3b324644395f7beb013" + hash: "896b150b47d87ec3d279ab149195758e" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1808 - hash: "abfdd1f8440998af2ff7903f49f1bd7c" + hash: "041240041c62b4cef6f329328eee2c6f" } Frame { msec: 1824 - hash: "6edd29f2e8d3d81e912c6b279ecc1885" + hash: "46e38ca8d4d827dc71719d662d433983" } Frame { msec: 1840 - hash: "8eb5ba22793c7cbfa97a64557f2a023f" + hash: "7d6ea4d357f0e916eaae3edd662bec9e" } Frame { msec: 1856 - hash: "9a39470525e6f508228f7e0014e02d64" + hash: "b1214158b7f01fde56ec436baf88b98f" + } + Key { + type: 7 + key: 16777248 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 1872 - hash: "b3ad10cf28151f5f7f5a4c3540f1660e" + hash: "22b59737bb8ef5ffc78f1ef4a707d328" + } + Key { + type: 6 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 } Frame { msec: 1888 - hash: "816203df3cf42fa7a0e8d6730c186444" + hash: "70b47f9af5373d4d5e0777eb169cbfe3" } Frame { msec: 1904 - hash: "a0a7e7ff7960dfe6149e526badf799a6" + hash: "d02ddd6f4b7169dcd114c519843eb855" } Frame { msec: 1920 @@ -582,527 +646,623 @@ VisualTest { } Frame { msec: 1936 - hash: "4d245b2285eadfd206409f74e03c7fc9" + hash: "5af4a21ba6e3b5e994557831d7063e92" } Frame { msec: 1952 - hash: "e1d5e6c2e4df1454b5a256c3678ffdef" + hash: "97ef4122641ac4c49b9ef9a9dc1e5a0a" } Frame { msec: 1968 - hash: "781d7fb03a37cb3f297cc0d2df338fd7" - } - Key { - type: 7 - key: 16777249 - modifiers: 100663296 - text: "" - autorep: false - count: 1 + hash: "7794188761d3efa4b47d4ab4c07208a3" } Frame { msec: 1984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4ca45c199693e767448016c4ccf1daaf" } Frame { msec: 2000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4ca45c199693e767448016c4ccf1daaf" } Frame { msec: 2016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4ca45c199693e767448016c4ccf1daaf" } Frame { msec: 2032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4ca45c199693e767448016c4ccf1daaf" + } + Key { + type: 7 + key: 16777249 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "4ca45c199693e767448016c4ccf1daaf" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 2064 - hash: "781d7fb03a37cb3f297cc0d2df338fd7" + hash: "7794188761d3efa4b47d4ab4c07208a3" } Frame { msec: 2080 - hash: "e1d5e6c2e4df1454b5a256c3678ffdef" + hash: "97ef4122641ac4c49b9ef9a9dc1e5a0a" } Frame { msec: 2096 - hash: "4d245b2285eadfd206409f74e03c7fc9" + hash: "5af4a21ba6e3b5e994557831d7063e92" } Frame { msec: 2112 - hash: "5a647962e016d15daa417d88524d6061" + hash: "6f0f9bfa49f50ffd18ffe695cdc56d73" } Frame { msec: 2128 - hash: "a0a7e7ff7960dfe6149e526badf799a6" + hash: "d02ddd6f4b7169dcd114c519843eb855" } Frame { msec: 2144 - hash: "816203df3cf42fa7a0e8d6730c186444" + hash: "70b47f9af5373d4d5e0777eb169cbfe3" + } + Key { + type: 6 + key: 16777236 + modifiers: 0 + text: "" + autorep: false + count: 1 } Frame { msec: 2160 - hash: "b3ad10cf28151f5f7f5a4c3540f1660e" + hash: "9e770dcd2f33ad157e86d08752458daf" } Frame { msec: 2176 - hash: "9a39470525e6f508228f7e0014e02d64" + hash: "b6c660ffd14bb756f87adb5cf836e97f" } Frame { msec: 2192 - hash: "8eb5ba22793c7cbfa97a64557f2a023f" + hash: "c498c154fcf2d66fc0981150e575033c" } Frame { msec: 2208 - hash: "6edd29f2e8d3d81e912c6b279ecc1885" + hash: "29277da2d1d6251e18ab89331d5df61d" } Frame { msec: 2224 - hash: "abfdd1f8440998af2ff7903f49f1bd7c" + hash: "3c7588de81cbfbba8735da74de220128" } Frame { msec: 2240 - hash: "7411784774fdc3b324644395f7beb013" - } - Frame { - msec: 2256 - hash: "f036a5ecda518be198f3bdf2dbc5baab" + hash: "4fa61e0644ce0942a30f05ad8d3f13f6" } Key { type: 7 - key: 16777248 - modifiers: 33554432 + key: 16777236 + modifiers: 0 text: "" autorep: false count: 1 } Frame { + msec: 2256 + hash: "3a90bb8b912d0be07e0e8b78407c54ff" + } + Frame { msec: 2272 - hash: "6f2c1f61e58940d9cc1a70c0db903446" + hash: "3d89454f0af4ab88ea67a075cb4e39b7" } Frame { msec: 2288 - hash: "eb23a3eac684808f73034f4e4ef8984d" + hash: "abdd589312402caea0b1c4f26ff6a1bf" } Frame { msec: 2304 - hash: "d89f7e3e2510fcb34786584747633673" + hash: "e6ab11dfb1965e94f5a42f2642ca0b30" } Frame { msec: 2320 - hash: "cef43f349cf221a1aa6e6e70f1fa6339" + hash: "c9fbfb63e19d1281b0c3a59504cd695c" } Frame { msec: 2336 - hash: "6ad579c289c63a6b90a1517765fc041e" + hash: "bc250ab3f5da66ecb0792a796b197149" } Frame { msec: 2352 - hash: "4e566abf1e0696e72b2a4beab5a53d6e" + hash: "c5d26cd3ac3f87c77d716b912875b9de" } Key { type: 6 - key: 16777236 + key: 16777249 modifiers: 0 text: "" autorep: false count: 1 } + Key { + type: 6 + key: 16777248 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } Frame { msec: 2368 - hash: "6c913bc712eee18947a43dd1c0a6516b" + hash: "bbe9837039b7ea1dfab8ed30c8a15724" } Frame { msec: 2384 - hash: "2c518a32ca3b5ca924709cc6990fb039" + hash: "836f9f207d8197f8e6e8e9c49f83aa4e" } Frame { msec: 2400 - hash: "7f40db00bd3e6d0b39454eefa1403f44" + hash: "235d20a347a0f7b331e707ad7de93f95" } Frame { msec: 2416 - hash: "98db32e0d1812e9584105dc4dbceff80" + hash: "7f422b624488525aede06c69996fc583" } Frame { msec: 2432 - hash: "c2150a67391bb574141c16cb011847bf" + hash: "664bef152c87b3eb6729d9b46bad750c" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2448 - hash: "f9ea21d894fa2dace4d43ce99a580b90" + hash: "d32716cb4cb9fc8145029efb3fd1a32a" } Frame { msec: 2464 - hash: "2f580c3244499fc6ecd2121693f463fd" - } - Key { - type: 7 - key: 16777236 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "17670e9d61ef2f9a0ec079b413ab546a" } Frame { msec: 2480 - hash: "2f7f421d3e6a895a9efa6b0e8feb81c4" + hash: "6a3cbc70476d4e145a0e187ad7a73c52" } Frame { msec: 2496 - hash: "35a18447f319431ed0a645d05a1d03d1" + hash: "aa0f4cf316026154c940261b4df848e3" } Frame { msec: 2512 - hash: "54e36fb4014be554d13709b48b9bdce7" + hash: "2650d86c6aa82e4cc5e7ec4e2889f028" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2528 - hash: "dbe3456536a729b268850a6ee5d1fb47" + hash: "ab392121c99d4f8f5a3622c26761a57e" } Frame { msec: 2544 - hash: "4c148434cf3868db5dc98f426d9fb913" + hash: "4f1c4006a84d794a7eaf9932a6f7d3ea" } Frame { msec: 2560 - hash: "2eb6da3ebfd531037523347603a805e2" + hash: "f6387eb0678a78894f607a7ff186bd19" } Frame { msec: 2576 - hash: "fefbb2f4671f8a36f9d2207ced8c0bfb" + hash: "b14cb2545cb2cc055b914618d5086425" } Frame { msec: 2592 - hash: "1ab596339afc1f96136ee69c4b7688e1" + hash: "e31ebced4421e9d5092950d373f9a4e9" + } + Key { + type: 6 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2608 - hash: "e07f59d729cb2790296e8c7cd3d0d3c9" + hash: "b2177f1eed72624c4f6e4bd59902db16" } Frame { msec: 2624 - hash: "a7dccada1080487cab2d0a916676c5cb" + hash: "9ade9a8b436bb9481e8135b7342070ff" } Frame { msec: 2640 - hash: "ac5939eb4379394fab829b307cbfe7ec" + hash: "4bdbc37f8ecac1a8aae182cb3e6bf1fa" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2656 - hash: "9329d353c678d2bc61d08f63029d1b9b" + hash: "3bf69edaa0eec73246c52f310079a15d" } Frame { msec: 2672 - hash: "41263f56af7875028bb0c1e7eccf6f5d" + hash: "add80b7fde2865bb23ccb46a03b5604c" } Frame { msec: 2688 - hash: "e2eb18af82c85ea78ba438163e922df3" + hash: "6259b8d763f468054f35c87f4ba47d30" } Frame { msec: 2704 - hash: "91b2695e4915238ae8610a64e279b0f4" + hash: "1dd94dcd8c7f651811f1b962a75962be" } Frame { msec: 2720 - hash: "a97d90765f87b998eae6e9f603c61bff" - } - Frame { - msec: 2736 - hash: "48969edab07b942480d93ac2d383ca24" - } - Frame { - msec: 2752 - hash: "ecfd9d6d5873001f0c67806544a14983" + hash: "f813c62008a3880d079cb1c0be9a03e1" } Key { type: 6 key: 16777234 - modifiers: 0 + modifiers: 100663296 text: "" autorep: false count: 1 } Frame { + msec: 2736 + hash: "4e776b52bce5b0e0ee46f9feff684a90" + } + Frame { + msec: 2752 + hash: "cd2c2b6e9d05b521214eeab29e89d7c4" + } + Frame { msec: 2768 - hash: "01e937e1fcc0331b2541fa32c3479a24" + hash: "8605360fcf3f24372463827a1d3f93c6" } Frame { msec: 2784 - hash: "702864de569e6a5648ee174d5ef891f8" + hash: "03b734ffb679f8718999c4e060a2febb" + } + Key { + type: 7 + key: 16777234 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 2800 - hash: "0f500339c81ca3621d13910017b84b7b" + hash: "43e2020cd127ce541b54ba7814c9ba74" } Frame { msec: 2816 - hash: "76fb2e1ad33affe33c0887f04caa7396" + hash: "9c1774f8ae01e37aac05d27567d3cec6" } Frame { msec: 2832 - hash: "9dc01a69f2a6892d3c4203674c8bef72" + hash: "6c4a7a200eba8b6c5c0b5b75d8a88811" } Frame { msec: 2848 - hash: "d94054222fd37a350bd8abd592a332e3" + hash: "21d88afb0f05ace0710da47af275d827" } Frame { msec: 2864 - hash: "46fed264c233490b477e3a7c22183e18" + hash: "42b56667390aa2db6d593b7af9a5021a" } Frame { msec: 2880 image: "cursorDelegate.2.png" } - Key { - type: 7 - key: 16777234 - modifiers: 0 - text: "" - autorep: false - count: 1 - } Frame { msec: 2896 - hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2" + hash: "5897cafae19f8842f53a54b75e36f22d" } Frame { msec: 2912 - hash: "4f6dbc7b249c37390518cc263832b587" + hash: "11cacddae5d5361b7e87696808ac2905" } Frame { msec: 2928 - hash: "df09fa2fd138d1b480eec82db3872d6f" + hash: "2cc3dcb900ab2bffd52fb61fff108043" } Frame { msec: 2944 - hash: "b74cb1bfbb979a5e91853d9145d277d8" + hash: "8938b8c7254873197e409206c1c20ad4" } Frame { msec: 2960 - hash: "35425ae3ccf3c8dcc1483479c57a3287" + hash: "e343d647f236969530d0b076c3375f1a" } Frame { msec: 2976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 2992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 3008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 3024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 3040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 3056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "5e39a0f9bdc45a7a288f59b7cbbf749d" } Frame { msec: 3072 - hash: "35425ae3ccf3c8dcc1483479c57a3287" + hash: "e343d647f236969530d0b076c3375f1a" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3088 - hash: "b74cb1bfbb979a5e91853d9145d277d8" + hash: "ac4898002fdc5ea7894d741cac863c8d" } Frame { msec: 3104 - hash: "df09fa2fd138d1b480eec82db3872d6f" + hash: "eda67cb2d32f3f605a74a01148f04c99" } Frame { msec: 3120 - hash: "4f6dbc7b249c37390518cc263832b587" + hash: "13e84656ef70bf07e2a444d60ac933e1" } Frame { msec: 3136 - hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2" + hash: "9d624eebe5824fc5d4a89a04f2d776a3" } Frame { msec: 3152 - hash: "34bc703c915b49b0450ece1d18306df8" + hash: "2c7d542f60c68e16377d3c5afea0f4e3" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3168 - hash: "46fed264c233490b477e3a7c22183e18" + hash: "7db8d678bd1890010b2a1b9bb732c17c" } Frame { msec: 3184 - hash: "d94054222fd37a350bd8abd592a332e3" + hash: "6d6f4cc1193b73c65db893c3f983d9f0" } Frame { msec: 3200 - hash: "9dc01a69f2a6892d3c4203674c8bef72" + hash: "d4e8985ad4d14436a87db45585fca946" } Frame { msec: 3216 - hash: "76fb2e1ad33affe33c0887f04caa7396" + hash: "495b67926e9002a43e2d251b8c96564f" } Frame { msec: 3232 - hash: "0f500339c81ca3621d13910017b84b7b" + hash: "3b2dd937cfb6cd57884f3b813f3d4129" } Frame { msec: 3248 - hash: "702864de569e6a5648ee174d5ef891f8" + hash: "02a5902af43990021465a7df9d479982" + } + Key { + type: 6 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3264 - hash: "01e937e1fcc0331b2541fa32c3479a24" + hash: "5b14b471fffa401affc954871662e6a8" } Frame { msec: 3280 - hash: "ee661e6cc1f86e755ff399adb6b11fd1" + hash: "bbe03a2ea1e5b788c79d9551bd317a2d" } Frame { msec: 3296 - hash: "ea2d610e9b41e72b2984a51f0d3f7587" + hash: "10b49692f820311b8bfbc0f87c05e993" } Frame { msec: 3312 - hash: "4a646d76b706698a02cead560b1f8d57" + hash: "928ee5d4ca3c31a879f82b5b4f6d1912" } Frame { msec: 3328 - hash: "48ec87bfc25471f6fa2d43f9db80b693" + hash: "9f3ea4149963d467be28fcf26a43e6d6" } Frame { msec: 3344 - hash: "827fdd6a3d1006f4a9dd2faf208ea436" + hash: "f2ec87d7c4f6bbecc771270062e25d14" } Frame { msec: 3360 - hash: "788d8962f311adf57a3acc876b0e8804" + hash: "f181b9aeccdecd486550c2a69e57a63f" + } + Key { + type: 7 + key: 16777236 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3376 - hash: "5d112a3675ea4c010e7bc60e036d0262" + hash: "ce871b1784464b56728eeb0140ad689c" } Frame { msec: 3392 - hash: "a2ea272b45d8de225826d9381015ff2e" + hash: "8d1b19921c7ee633f423b3f8c1f07e6a" } Frame { msec: 3408 - hash: "e4d7a59716cd704fe1cfa8ba91454e93" + hash: "451973c72f86fc3425c31da3311d625c" } Frame { msec: 3424 - hash: "4e875ba8703b690a17e445f2b3810435" + hash: "64301801af58f7a9c5ea32c33eb988e2" } Frame { msec: 3440 - hash: "4fbbb8447d80012bc6b5c24ddbfe498e" + hash: "3406ff52f3829c56ff3b29558d6fd11c" } Frame { msec: 3456 - hash: "d74f8e44d47710714d4197809fffb622" + hash: "0952802094d7d7f105d7f50f36c02530" } Frame { msec: 3472 - hash: "d23bdd94019477d8378cde580d8765ad" + hash: "daddc3aa8ae9970cc111e981adcdd9bb" } Frame { msec: 3488 - hash: "6032aada2c48092000ecb93e52656414" + hash: "491e3241705cdc2917c6560cece6188e" } Frame { msec: 3504 - hash: "438be260f19d04c9f98ed7dce1c7db40" + hash: "cefbdc87c704e72145e878fc944c621f" + } + Key { + type: 7 + key: 16777249 + modifiers: 100663296 + text: "" + autorep: false + count: 1 } Frame { msec: 3520 - hash: "3af60972e7d5d4320a549e5df52a1228" + hash: "3427e88f200a1ac2d4596cb2fec0ae66" } Frame { msec: 3536 - hash: "bf8459b99ca0bf568c58a3bb2a2fcc1f" + hash: "62eef650b45f3c2fa425d1bff88a01a7" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 } Frame { msec: 3552 - hash: "c0dc1cf5ba7014e069c4d4bd7ac0f89d" + hash: "9945cda3cf5c22d8c83b19b0f69e4e09" } Frame { msec: 3568 - hash: "f2ddf9d4fd3a2a2d354172714ce94d99" + hash: "80fcd1194d1bc3e010ddc6ba224f3d40" } Frame { msec: 3584 - hash: "bdfb42dc3879099e402784238c2cdddb" + hash: "59da897870a7e235a67defaff1f8f4e4" } Frame { msec: 3600 - hash: "5e483b0fd4808f2fb31aea90ccf86d3e" + hash: "664bef152c87b3eb6729d9b46bad750c" } Frame { msec: 3616 - hash: "8159bda651d95a320ac09aa6feb377a1" + hash: "7f422b624488525aede06c69996fc583" } Frame { msec: 3632 - hash: "ceda37af96bd02baae218d3bfaed93f7" + hash: "235d20a347a0f7b331e707ad7de93f95" } Frame { msec: 3648 - hash: "4b81757a105aa7c5ac6148455eea66c3" + hash: "836f9f207d8197f8e6e8e9c49f83aa4e" } Frame { msec: 3664 - hash: "ff7e2cdd006f9b76ab8c0416d81f0cb1" + hash: "bbe9837039b7ea1dfab8ed30c8a15724" } Frame { msec: 3680 - hash: "9b174cd9a87ff193ce646408946b310c" + hash: "c5d26cd3ac3f87c77d716b912875b9de" } Frame { msec: 3696 - hash: "89fa590b47ee77021dedf7938439ce69" + hash: "bc250ab3f5da66ecb0792a796b197149" } Frame { msec: 3712 - hash: "6e5680803184dfc76cbf1c2de804d6cc" + hash: "c9fbfb63e19d1281b0c3a59504cd695c" } Frame { msec: 3728 - hash: "c6de6b9203673c77427ab84ce86daaf5" + hash: "e6ab11dfb1965e94f5a42f2642ca0b30" } Frame { msec: 3744 - hash: "198f8e912c19debd51f837627d1171e9" + hash: "abdd589312402caea0b1c4f26ff6a1bf" } Frame { msec: 3760 - hash: "3b380dcb6815698241f3dcccb52785c2" + hash: "3d89454f0af4ab88ea67a075cb4e39b7" } Frame { msec: 3776 - hash: "254942e12b8a31420d2243b7e2529ae8" + hash: "3a90bb8b912d0be07e0e8b78407c54ff" } Frame { msec: 3792 - hash: "ebf121910a5318c284f8e964d63aed40" + hash: "4fa61e0644ce0942a30f05ad8d3f13f6" } Frame { msec: 3808 - hash: "0fcf416a80d22f077fcf4d23bddeb6c6" + hash: "3c7588de81cbfbba8735da74de220128" } Frame { msec: 3824 - hash: "4a6596da390380dbafc1cdaceca1101e" + hash: "29277da2d1d6251e18ab89331d5df61d" } Frame { msec: 3840 @@ -1110,271 +1270,239 @@ VisualTest { } Frame { msec: 3856 - hash: "c2be53ae5e2d5d3081df9af31426ec84" + hash: "b6c660ffd14bb756f87adb5cf836e97f" } Frame { msec: 3872 - hash: "52350ac5d10f8fe7571d12193b861d3f" + hash: "9e770dcd2f33ad157e86d08752458daf" } Frame { msec: 3888 - hash: "f286a35d7f4a022315f69a5db72da388" + hash: "4c9421ff4dc80e555ac5ba4a02d0c5be" } Frame { msec: 3904 - hash: "aa329519eba4dad9589bff095528c535" + hash: "dcbfc9f6300363d03aa869ce3d58e6fe" } Frame { msec: 3920 - hash: "0beae60853afaaa0e7f7540fb50bcddf" + hash: "491f07f2498598cf57b368ff880f85f5" } Frame { msec: 3936 - hash: "dc098a8b4d2f117a09cf1f2ced201a60" + hash: "ea356dc3ef6aa6ca67e58b7b2f6912e4" } Frame { msec: 3952 - hash: "3655b992097b433071ec9dd69e086c70" + hash: "8575a99b28bb5b8c2d01a5ed91f25d47" } Frame { msec: 3968 - hash: "82cb92d7940d13deee97e4ccda9210fb" + hash: "7f83ba29fd27aa4817b7b84afbc8d6d7" } Frame { msec: 3984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" + hash: "0173dd60a64da4c06fa9a398d2c98206" } Frame { msec: 4064 - hash: "82cb92d7940d13deee97e4ccda9210fb" - } - Key { - type: 6 - key: 16777232 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "7f83ba29fd27aa4817b7b84afbc8d6d7" } Frame { msec: 4080 - hash: "3655b992097b433071ec9dd69e086c70" + hash: "8575a99b28bb5b8c2d01a5ed91f25d47" } Frame { msec: 4096 - hash: "dc098a8b4d2f117a09cf1f2ced201a60" + hash: "ea356dc3ef6aa6ca67e58b7b2f6912e4" } Frame { msec: 4112 - hash: "0beae60853afaaa0e7f7540fb50bcddf" + hash: "491f07f2498598cf57b368ff880f85f5" } Frame { msec: 4128 - hash: "aa329519eba4dad9589bff095528c535" - } - Key { - type: 7 - key: 16777232 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "dcbfc9f6300363d03aa869ce3d58e6fe" } Frame { msec: 4144 - hash: "f286a35d7f4a022315f69a5db72da388" + hash: "4c9421ff4dc80e555ac5ba4a02d0c5be" } Frame { msec: 4160 - hash: "52350ac5d10f8fe7571d12193b861d3f" + hash: "9e770dcd2f33ad157e86d08752458daf" } Frame { msec: 4176 - hash: "c2be53ae5e2d5d3081df9af31426ec84" + hash: "b6c660ffd14bb756f87adb5cf836e97f" } Frame { msec: 4192 - hash: "367391b2a124e2c818510567d0884d18" + hash: "c498c154fcf2d66fc0981150e575033c" } Frame { msec: 4208 - hash: "4a6596da390380dbafc1cdaceca1101e" + hash: "29277da2d1d6251e18ab89331d5df61d" } Frame { msec: 4224 - hash: "0fcf416a80d22f077fcf4d23bddeb6c6" + hash: "3c7588de81cbfbba8735da74de220128" } Frame { msec: 4240 - hash: "ebf121910a5318c284f8e964d63aed40" + hash: "4fa61e0644ce0942a30f05ad8d3f13f6" } Frame { msec: 4256 - hash: "254942e12b8a31420d2243b7e2529ae8" + hash: "3a90bb8b912d0be07e0e8b78407c54ff" } Frame { msec: 4272 - hash: "3b380dcb6815698241f3dcccb52785c2" + hash: "3d89454f0af4ab88ea67a075cb4e39b7" } Frame { msec: 4288 - hash: "198f8e912c19debd51f837627d1171e9" + hash: "abdd589312402caea0b1c4f26ff6a1bf" } Frame { msec: 4304 - hash: "c6de6b9203673c77427ab84ce86daaf5" + hash: "e6ab11dfb1965e94f5a42f2642ca0b30" } Frame { msec: 4320 - hash: "6e5680803184dfc76cbf1c2de804d6cc" + hash: "c9fbfb63e19d1281b0c3a59504cd695c" } Frame { msec: 4336 - hash: "89fa590b47ee77021dedf7938439ce69" + hash: "bc250ab3f5da66ecb0792a796b197149" } Frame { msec: 4352 - hash: "9b174cd9a87ff193ce646408946b310c" + hash: "c5d26cd3ac3f87c77d716b912875b9de" } Frame { msec: 4368 - hash: "ff7e2cdd006f9b76ab8c0416d81f0cb1" + hash: "bbe9837039b7ea1dfab8ed30c8a15724" } Frame { msec: 4384 - hash: "4b81757a105aa7c5ac6148455eea66c3" + hash: "836f9f207d8197f8e6e8e9c49f83aa4e" } Frame { msec: 4400 - hash: "ceda37af96bd02baae218d3bfaed93f7" + hash: "235d20a347a0f7b331e707ad7de93f95" } Frame { msec: 4416 - hash: "8159bda651d95a320ac09aa6feb377a1" + hash: "7f422b624488525aede06c69996fc583" } Frame { msec: 4432 - hash: "5e483b0fd4808f2fb31aea90ccf86d3e" + hash: "664bef152c87b3eb6729d9b46bad750c" } Frame { msec: 4448 - hash: "bdfb42dc3879099e402784238c2cdddb" + hash: "59da897870a7e235a67defaff1f8f4e4" } Frame { msec: 4464 - hash: "f2ddf9d4fd3a2a2d354172714ce94d99" + hash: "80fcd1194d1bc3e010ddc6ba224f3d40" } Frame { msec: 4480 - hash: "c0dc1cf5ba7014e069c4d4bd7ac0f89d" + hash: "9945cda3cf5c22d8c83b19b0f69e4e09" } Frame { msec: 4496 - hash: "bf8459b99ca0bf568c58a3bb2a2fcc1f" + hash: "62eef650b45f3c2fa425d1bff88a01a7" } Frame { msec: 4512 - hash: "3af60972e7d5d4320a549e5df52a1228" + hash: "3427e88f200a1ac2d4596cb2fec0ae66" } Frame { msec: 4528 - hash: "438be260f19d04c9f98ed7dce1c7db40" + hash: "cefbdc87c704e72145e878fc944c621f" } Frame { msec: 4544 - hash: "6032aada2c48092000ecb93e52656414" + hash: "491e3241705cdc2917c6560cece6188e" } Frame { msec: 4560 - hash: "d23bdd94019477d8378cde580d8765ad" + hash: "daddc3aa8ae9970cc111e981adcdd9bb" } Frame { msec: 4576 - hash: "d74f8e44d47710714d4197809fffb622" - } - Key { - type: 6 - key: 16777233 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "0952802094d7d7f105d7f50f36c02530" } Frame { msec: 4592 - hash: "4fbbb8447d80012bc6b5c24ddbfe498e" + hash: "3406ff52f3829c56ff3b29558d6fd11c" } Frame { msec: 4608 - hash: "4e875ba8703b690a17e445f2b3810435" + hash: "64301801af58f7a9c5ea32c33eb988e2" } Frame { msec: 4624 - hash: "e4d7a59716cd704fe1cfa8ba91454e93" - } - Key { - type: 7 - key: 16777233 - modifiers: 0 - text: "" - autorep: false - count: 1 + hash: "451973c72f86fc3425c31da3311d625c" } Frame { msec: 4640 - hash: "a2ea272b45d8de225826d9381015ff2e" + hash: "8d1b19921c7ee633f423b3f8c1f07e6a" } Frame { msec: 4656 - hash: "5d112a3675ea4c010e7bc60e036d0262" + hash: "ce871b1784464b56728eeb0140ad689c" } Frame { msec: 4672 - hash: "788d8962f311adf57a3acc876b0e8804" + hash: "f181b9aeccdecd486550c2a69e57a63f" } Frame { msec: 4688 - hash: "827fdd6a3d1006f4a9dd2faf208ea436" + hash: "f2ec87d7c4f6bbecc771270062e25d14" } Frame { msec: 4704 - hash: "48ec87bfc25471f6fa2d43f9db80b693" + hash: "9f3ea4149963d467be28fcf26a43e6d6" } Frame { msec: 4720 - hash: "4a646d76b706698a02cead560b1f8d57" + hash: "928ee5d4ca3c31a879f82b5b4f6d1912" } Frame { msec: 4736 - hash: "ea2d610e9b41e72b2984a51f0d3f7587" + hash: "10b49692f820311b8bfbc0f87c05e993" } Frame { msec: 4752 - hash: "ee661e6cc1f86e755ff399adb6b11fd1" + hash: "bbe03a2ea1e5b788c79d9551bd317a2d" } Frame { msec: 4768 - hash: "01e937e1fcc0331b2541fa32c3479a24" + hash: "5b14b471fffa401affc954871662e6a8" } Frame { msec: 4784 - hash: "702864de569e6a5648ee174d5ef891f8" + hash: "02a5902af43990021465a7df9d479982" } Frame { msec: 4800 @@ -1382,1998 +1510,42 @@ VisualTest { } Frame { msec: 4816 - hash: "76fb2e1ad33affe33c0887f04caa7396" + hash: "495b67926e9002a43e2d251b8c96564f" } Frame { msec: 4832 - hash: "9dc01a69f2a6892d3c4203674c8bef72" + hash: "d4e8985ad4d14436a87db45585fca946" } Frame { msec: 4848 - hash: "d94054222fd37a350bd8abd592a332e3" + hash: "6d6f4cc1193b73c65db893c3f983d9f0" } Frame { msec: 4864 - hash: "46fed264c233490b477e3a7c22183e18" + hash: "7db8d678bd1890010b2a1b9bb732c17c" } Frame { msec: 4880 - hash: "34bc703c915b49b0450ece1d18306df8" + hash: "2c7d542f60c68e16377d3c5afea0f4e3" } Frame { msec: 4896 - hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2" + hash: "9d624eebe5824fc5d4a89a04f2d776a3" } Frame { msec: 4912 - hash: "4f6dbc7b249c37390518cc263832b587" + hash: "13e84656ef70bf07e2a444d60ac933e1" } Frame { msec: 4928 - hash: "df09fa2fd138d1b480eec82db3872d6f" + hash: "eda67cb2d32f3f605a74a01148f04c99" } Frame { msec: 4944 - hash: "b74cb1bfbb979a5e91853d9145d277d8" + hash: "ac4898002fdc5ea7894d741cac863c8d" } Frame { msec: 4960 - hash: "35425ae3ccf3c8dcc1483479c57a3287" - } - Frame { - msec: 4976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 4992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 5008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 5024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 5040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 5056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 5072 - hash: "35425ae3ccf3c8dcc1483479c57a3287" - } - Frame { - msec: 5088 - hash: "b74cb1bfbb979a5e91853d9145d277d8" - } - Frame { - msec: 5104 - hash: "df09fa2fd138d1b480eec82db3872d6f" - } - Frame { - msec: 5120 - hash: "4f6dbc7b249c37390518cc263832b587" - } - Frame { - msec: 5136 - hash: "e87f18da2fa5c91c9b2b5dea50f9c1e2" - } - Frame { - msec: 5152 - hash: "34bc703c915b49b0450ece1d18306df8" - } - Frame { - msec: 5168 - hash: "46fed264c233490b477e3a7c22183e18" - } - Frame { - msec: 5184 - hash: "d94054222fd37a350bd8abd592a332e3" - } - Frame { - msec: 5200 - hash: "9dc01a69f2a6892d3c4203674c8bef72" - } - Frame { - msec: 5216 - hash: "76fb2e1ad33affe33c0887f04caa7396" - } - Frame { - msec: 5232 - hash: "0f500339c81ca3621d13910017b84b7b" - } - Frame { - msec: 5248 - hash: "702864de569e6a5648ee174d5ef891f8" - } - Frame { - msec: 5264 - hash: "01e937e1fcc0331b2541fa32c3479a24" - } - Frame { - msec: 5280 - hash: "ee661e6cc1f86e755ff399adb6b11fd1" - } - Frame { - msec: 5296 - hash: "ea2d610e9b41e72b2984a51f0d3f7587" - } - Frame { - msec: 5312 - hash: "4a646d76b706698a02cead560b1f8d57" - } - Frame { - msec: 5328 - hash: "48ec87bfc25471f6fa2d43f9db80b693" - } - Frame { - msec: 5344 - hash: "827fdd6a3d1006f4a9dd2faf208ea436" - } - Frame { - msec: 5360 - hash: "788d8962f311adf57a3acc876b0e8804" - } - Frame { - msec: 5376 - hash: "5d112a3675ea4c010e7bc60e036d0262" - } - Frame { - msec: 5392 - hash: "a2ea272b45d8de225826d9381015ff2e" - } - Frame { - msec: 5408 - hash: "e4d7a59716cd704fe1cfa8ba91454e93" - } - Frame { - msec: 5424 - hash: "4e875ba8703b690a17e445f2b3810435" - } - Frame { - msec: 5440 - hash: "4fbbb8447d80012bc6b5c24ddbfe498e" - } - Frame { - msec: 5456 - hash: "d74f8e44d47710714d4197809fffb622" - } - Frame { - msec: 5472 - hash: "d23bdd94019477d8378cde580d8765ad" - } - Frame { - msec: 5488 - hash: "6032aada2c48092000ecb93e52656414" - } - Frame { - msec: 5504 - hash: "438be260f19d04c9f98ed7dce1c7db40" - } - Frame { - msec: 5520 - hash: "3af60972e7d5d4320a549e5df52a1228" - } - Frame { - msec: 5536 - hash: "bf8459b99ca0bf568c58a3bb2a2fcc1f" - } - Frame { - msec: 5552 - hash: "c0dc1cf5ba7014e069c4d4bd7ac0f89d" - } - Frame { - msec: 5568 - hash: "f2ddf9d4fd3a2a2d354172714ce94d99" - } - Frame { - msec: 5584 - hash: "bdfb42dc3879099e402784238c2cdddb" - } - Frame { - msec: 5600 - hash: "5e483b0fd4808f2fb31aea90ccf86d3e" - } - Frame { - msec: 5616 - hash: "8159bda651d95a320ac09aa6feb377a1" - } - Frame { - msec: 5632 - hash: "ceda37af96bd02baae218d3bfaed93f7" - } - Frame { - msec: 5648 - hash: "4b81757a105aa7c5ac6148455eea66c3" - } - Frame { - msec: 5664 - hash: "ff7e2cdd006f9b76ab8c0416d81f0cb1" - } - Frame { - msec: 5680 - hash: "9b174cd9a87ff193ce646408946b310c" - } - Frame { - msec: 5696 - hash: "89fa590b47ee77021dedf7938439ce69" - } - Frame { - msec: 5712 - hash: "6e5680803184dfc76cbf1c2de804d6cc" - } - Frame { - msec: 5728 - hash: "c6de6b9203673c77427ab84ce86daaf5" - } - Frame { - msec: 5744 - hash: "198f8e912c19debd51f837627d1171e9" - } - Frame { - msec: 5760 - image: "cursorDelegate.5.png" - } - Frame { - msec: 5776 - hash: "254942e12b8a31420d2243b7e2529ae8" - } - Frame { - msec: 5792 - hash: "ebf121910a5318c284f8e964d63aed40" - } - Frame { - msec: 5808 - hash: "0fcf416a80d22f077fcf4d23bddeb6c6" - } - Frame { - msec: 5824 - hash: "4a6596da390380dbafc1cdaceca1101e" - } - Frame { - msec: 5840 - hash: "367391b2a124e2c818510567d0884d18" - } - Frame { - msec: 5856 - hash: "c2be53ae5e2d5d3081df9af31426ec84" - } - Frame { - msec: 5872 - hash: "52350ac5d10f8fe7571d12193b861d3f" - } - Frame { - msec: 5888 - hash: "f286a35d7f4a022315f69a5db72da388" - } - Frame { - msec: 5904 - hash: "aa329519eba4dad9589bff095528c535" - } - Frame { - msec: 5920 - hash: "0beae60853afaaa0e7f7540fb50bcddf" - } - Frame { - msec: 5936 - hash: "dc098a8b4d2f117a09cf1f2ced201a60" - } - Frame { - msec: 5952 - hash: "3655b992097b433071ec9dd69e086c70" - } - Frame { - msec: 5968 - hash: "82cb92d7940d13deee97e4ccda9210fb" - } - Frame { - msec: 5984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 6000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 6016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 6032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 6048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 6064 - hash: "82cb92d7940d13deee97e4ccda9210fb" - } - Frame { - msec: 6080 - hash: "3655b992097b433071ec9dd69e086c70" - } - Frame { - msec: 6096 - hash: "dc098a8b4d2f117a09cf1f2ced201a60" - } - Frame { - msec: 6112 - hash: "0beae60853afaaa0e7f7540fb50bcddf" - } - Frame { - msec: 6128 - hash: "aa329519eba4dad9589bff095528c535" - } - Frame { - msec: 6144 - hash: "f286a35d7f4a022315f69a5db72da388" - } - Frame { - msec: 6160 - hash: "52350ac5d10f8fe7571d12193b861d3f" - } - Frame { - msec: 6176 - hash: "c2be53ae5e2d5d3081df9af31426ec84" - } - Frame { - msec: 6192 - hash: "367391b2a124e2c818510567d0884d18" - } - Frame { - msec: 6208 - hash: "4a6596da390380dbafc1cdaceca1101e" - } - Frame { - msec: 6224 - hash: "0fcf416a80d22f077fcf4d23bddeb6c6" - } - Frame { - msec: 6240 - hash: "ebf121910a5318c284f8e964d63aed40" - } - Frame { - msec: 6256 - hash: "254942e12b8a31420d2243b7e2529ae8" - } - Frame { - msec: 6272 - hash: "3b380dcb6815698241f3dcccb52785c2" - } - Frame { - msec: 6288 - hash: "198f8e912c19debd51f837627d1171e9" - } - Frame { - msec: 6304 - hash: "c6de6b9203673c77427ab84ce86daaf5" - } - Frame { - msec: 6320 - hash: "6e5680803184dfc76cbf1c2de804d6cc" - } - Frame { - msec: 6336 - hash: "89fa590b47ee77021dedf7938439ce69" - } - Frame { - msec: 6352 - hash: "9b174cd9a87ff193ce646408946b310c" - } - Frame { - msec: 6368 - hash: "ff7e2cdd006f9b76ab8c0416d81f0cb1" - } - Frame { - msec: 6384 - hash: "4b81757a105aa7c5ac6148455eea66c3" - } - Frame { - msec: 6400 - hash: "ceda37af96bd02baae218d3bfaed93f7" - } - Frame { - msec: 6416 - hash: "8159bda651d95a320ac09aa6feb377a1" - } - Frame { - msec: 6432 - hash: "5e483b0fd4808f2fb31aea90ccf86d3e" - } - Frame { - msec: 6448 - hash: "bdfb42dc3879099e402784238c2cdddb" - } - Frame { - msec: 6464 - hash: "f2ddf9d4fd3a2a2d354172714ce94d99" - } - Frame { - msec: 6480 - hash: "c0dc1cf5ba7014e069c4d4bd7ac0f89d" - } - Frame { - msec: 6496 - hash: "bf8459b99ca0bf568c58a3bb2a2fcc1f" - } - Frame { - msec: 6512 - hash: "3af60972e7d5d4320a549e5df52a1228" - } - Frame { - msec: 6528 - hash: "438be260f19d04c9f98ed7dce1c7db40" - } - Frame { - msec: 6544 - hash: "6032aada2c48092000ecb93e52656414" - } - Frame { - msec: 6560 - hash: "d23bdd94019477d8378cde580d8765ad" - } - Frame { - msec: 6576 - hash: "d74f8e44d47710714d4197809fffb622" - } - Frame { - msec: 6592 - hash: "4fbbb8447d80012bc6b5c24ddbfe498e" - } - Frame { - msec: 6608 - hash: "4e875ba8703b690a17e445f2b3810435" - } - Frame { - msec: 6624 - hash: "e4d7a59716cd704fe1cfa8ba91454e93" - } - Frame { - msec: 6640 - hash: "a2ea272b45d8de225826d9381015ff2e" - } - Frame { - msec: 6656 - hash: "5d112a3675ea4c010e7bc60e036d0262" - } - Frame { - msec: 6672 - hash: "788d8962f311adf57a3acc876b0e8804" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 271; y: 89 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6688 - hash: "e2eb18af82c85ea78ba438163e922df3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 271; y: 92 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6704 - hash: "91b2695e4915238ae8610a64e279b0f4" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 271; y: 95 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 270; y: 99 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6720 - image: "cursorDelegate.6.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 269; y: 103 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6736 - hash: "ea2d610e9b41e72b2984a51f0d3f7587" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 268; y: 107 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6752 - hash: "ee661e6cc1f86e755ff399adb6b11fd1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 266; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6768 - hash: "01e937e1fcc0331b2541fa32c3479a24" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 266; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6784 - hash: "702864de569e6a5648ee174d5ef891f8" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 265; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6800 - hash: "0f500339c81ca3621d13910017b84b7b" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 263; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 261; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6816 - hash: "76fb2e1ad33affe33c0887f04caa7396" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 259; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6832 - hash: "9dc01a69f2a6892d3c4203674c8bef72" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 256; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6848 - hash: "58693aa1a3616310b7ae1e529c4c461a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 250; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 243; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6864 - hash: "96afccd7ec697c9c10840f0effaa448d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 235; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6880 - hash: "a00d49e2a9069b1be41f95f6ff4c0312" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 227; y: 121 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6896 - hash: "a0ff4b93291fc12054d3989a20335a87" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 124 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 209; y: 126 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6912 - hash: "a86e1347bb25489547514955762d92d3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 200; y: 126 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6928 - hash: "e5cba3c1e41e38117508c84e894beb11" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 190; y: 127 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6944 - hash: "2560f53b8ac0a84fef895dbb8f0e393e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 181; y: 127 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 172; y: 127 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6960 - hash: "c1b8bfc008319b793b6bd9345d34ccf5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 163; y: 127 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 154; y: 126 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 6992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 146; y: 124 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 138; y: 121 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 130; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 123; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 118; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 114; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 110; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7072 - hash: "a9f2804ac7918971f237c4cfa6339c24" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 108; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7088 - hash: "bc9c96855f048cb6c86d480e501322ab" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 107; y: 117 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 106; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7104 - hash: "706730602364bfb4d0193d1728a6d350" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 105; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7120 - hash: "df80fe3e3ba35ab3fafca929b9101e13" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 104; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7136 - hash: "aa8fa1baf61919004a4f14948826882e" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 117 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7152 - hash: "1829dfa3615d6ae430ba81a2df9a9e15" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7168 - hash: "c4ea5c767192bbd3bfac58d07594016a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7184 - hash: "319aede65b3473f28a4ca62a524e4a76" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7200 - hash: "e1de653161e3348e083267c9082bc0f0" - } - Frame { - msec: 7216 - hash: "de5f2d5147c600d2cb44072801c2338e" - } - Frame { - msec: 7232 - hash: "6db41d704d2e28f36b206bdb317ee361" - } - Frame { - msec: 7248 - hash: "a500b87efea241cdf8adf97ae86e10c3" - } - Frame { - msec: 7264 - hash: "86c4eb0164a5b57eb22de4c9d58345f5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 100; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7280 - hash: "2dbb1e3a1374b7c4aecd5a891be4573d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7296 - hash: "07bcafdf5ca28a1416a20ed375ec3ea6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 101; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7312 - hash: "e79def41bbf7e544d64cf19d74524d3a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 102; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7328 - hash: "20aff98618d16c00dc9b76035e9523f5" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 103; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7344 - hash: "12b5e016bad990d1f2bf427ee8e3e6d9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 104; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 105; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7360 - hash: "66a2ba3f9e005cd58aa50cfa0000cd15" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 107; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7376 - hash: "a2e9e42e09dadbd0791f52bb96e0e0dc" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 110; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7392 - hash: "ac68396566ea85a157e944e601dd8d18" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 113; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 117; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7408 - hash: "b9bfdebec8dd1a93de7ef2768b2542ba" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 124; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7424 - hash: "2e0a4b960803770acb34ef56ccf2be35" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 131; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7440 - hash: "df1643f0f8b7aa2dc080958822aeb3d0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 138; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 144; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7456 - hash: "af8ce877d953727d37fd6f7e4962f45a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 148; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 152; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7472 - hash: "b9de04c0d7532d67404a5a773d9fab99" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 155; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7488 - hash: "7904312a7efe0b545070c5a5615011df" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 157; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7504 - hash: "0069a8f088c83c6716bac15567a5b38d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 159; y: 116 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 162; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7520 - hash: "8c17c78d663097e275ed2f80d6479caf" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 163; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7536 - hash: "9e8781569e07fca7def229b76189082d" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 165; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7552 - hash: "8dba2f259740d869bfa20205d2e14433" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 166; y: 116 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 168; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7568 - hash: "4e7ad066aadbad3f71a08962ba1379c0" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 171; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7584 - hash: "a5d1554a6fb311239acc077f01adc597" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 174; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7600 - hash: "e91b45c430f7e10c2205af620350ddb6" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 177; y: 116 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 183; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7616 - hash: "6c731f4dbdec441cd36b1e9727758d73" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 188; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7632 - hash: "31634e757bdec45feb1f021e35746d65" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 193; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7648 - hash: "846dcb42fa85719223eb19f7af3d0630" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 198; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 206; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7664 - hash: "a5826c5d7d1b9161cc7fb76f59021fdd" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 209; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7680 - image: "cursorDelegate.7.png" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 211; y: 119 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7696 - hash: "bdfb9b949489744bc77905249eb647f9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 119 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 212; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7712 - hash: "307d4fb47604c00e213f8d9616e0da13" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 213; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7728 - hash: "74201a80a9032cb18b0c9e26bb67363f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 214; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7744 - hash: "38ca918199552a525fb7f3a3773761d9" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7760 - hash: "d64c06c25229b3b64b779ca1bef7d2cb" - } - Frame { - msec: 7776 - hash: "4ba0117db1ff431de20c06c79866d509" - } - Frame { - msec: 7792 - hash: "ca56899ded0e5ea361aac24493793f58" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 118 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 215; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7808 - hash: "ebce1d3b4d088278b6f36dac444c7ca6" - } - Frame { - msec: 7824 - hash: "16c52065169bffc4648eda0226dba13a" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 118 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7840 - hash: "7a5a6a02f57545d9f2336ff18dd118d6" - } - Frame { - msec: 7856 - hash: "328c8133c68fc2e86dc2193d1bee3259" - } - Frame { - msec: 7872 - hash: "fcad1d2819e3cede6081b4dfbb5a4a65" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 117 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7888 - hash: "85ff2968ba06443f300c9c0ef36c7054" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7904 - hash: "871025c33fa769a790fc460a95b183ec" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 216; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7920 - hash: "5b96f2673e0ccd2b198b9f99c65b4b12" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 217; y: 116 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7936 - hash: "5fc6f30a2dd019c4f2af056b51cfaa27" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 115 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 218; y: 115 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7952 - hash: "fc6bf3bcde1f89f0bff40e3e019aed33" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 219; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7968 - hash: "703beec7b035080146131936da8c0fb3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 220; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 7984 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 221; y: 114 - modifiers: 0 - sendToViewport: true - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 113 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8000 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 113 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8016 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8032 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8048 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8064 - hash: "703beec7b035080146131936da8c0fb3" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 222; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8080 - hash: "fc6bf3bcde1f89f0bff40e3e019aed33" - } - Frame { - msec: 8096 - hash: "5fc6f30a2dd019c4f2af056b51cfaa27" - } - Frame { - msec: 8112 - hash: "5b96f2673e0ccd2b198b9f99c65b4b12" - } - Frame { - msec: 8128 - hash: "871025c33fa769a790fc460a95b183ec" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 222; y: 114 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8144 - hash: "85ff2968ba06443f300c9c0ef36c7054" - } - Frame { - msec: 8160 - hash: "fcad1d2819e3cede6081b4dfbb5a4a65" - } - Frame { - msec: 8176 - hash: "328c8133c68fc2e86dc2193d1bee3259" - } - Frame { - msec: 8192 - hash: "7a5a6a02f57545d9f2336ff18dd118d6" - } - Frame { - msec: 8208 - hash: "16c52065169bffc4648eda0226dba13a" - } - Frame { - msec: 8224 - hash: "ebce1d3b4d088278b6f36dac444c7ca6" - } - Frame { - msec: 8240 - hash: "ca56899ded0e5ea361aac24493793f58" - } - Frame { - msec: 8256 - hash: "4ba0117db1ff431de20c06c79866d509" - } - Frame { - msec: 8272 - hash: "d64c06c25229b3b64b779ca1bef7d2cb" - } - Frame { - msec: 8288 - hash: "38ca918199552a525fb7f3a3773761d9" - } - Frame { - msec: 8304 - hash: "74201a80a9032cb18b0c9e26bb67363f" - } - Frame { - msec: 8320 - hash: "307d4fb47604c00e213f8d9616e0da13" - } - Frame { - msec: 8336 - hash: "9ad660f83ed62b964b676106f8aa7114" - } - Frame { - msec: 8352 - hash: "457fc0df515f9813e98a6a86f4ab5231" - } - Frame { - msec: 8368 - hash: "372cbc6ad4edc85319743627ced05671" - } - Frame { - msec: 8384 - hash: "4e08beac6ee40acaa4de6963522d63d0" - } - Frame { - msec: 8400 - hash: "5e790c2199a5e95fc17f8c0b49809cc9" - } - Frame { - msec: 8416 - hash: "e36310e1866d4a95bac60084fa4aa2c1" - } - Frame { - msec: 8432 - hash: "b7182b171316cc2db4de2b23de93dc41" - } - Frame { - msec: 8448 - hash: "6aaf7f8e6e238973dfd4030eb146198b" - } - Frame { - msec: 8464 - hash: "901ead3167e602dfe043c56c6c805d54" - } - Frame { - msec: 8480 - hash: "5a97542680475b1382ad5b7c3f6fa96a" - } - Frame { - msec: 8496 - hash: "fb34d93127f3c3ad0c7bacce0200753b" - } - Frame { - msec: 8512 - hash: "993c97dc85e83e241538356e317b7767" - } - Frame { - msec: 8528 - hash: "fb11a9edb3a613be5cb6949c76c5c715" - } - Frame { - msec: 8544 - hash: "e68b7461f94adeaf330f67d36d0d3b3e" - } - Frame { - msec: 8560 - hash: "7ed043cc027fdb467bd16847187cd48d" - } - Mouse { - type: 2 - button: 1 - buttons: 1 - x: 277; y: 97 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8576 - hash: "fefbb2f4671f8a36f9d2207ced8c0bfb" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 277; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8592 - hash: "1ab596339afc1f96136ee69c4b7688e1" - } - Mouse { - type: 5 - button: 0 - buttons: 1 - x: 276; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8608 - hash: "e07f59d729cb2790296e8c7cd3d0d3c9" - } - Mouse { - type: 3 - button: 1 - buttons: 0 - x: 276; y: 98 - modifiers: 0 - sendToViewport: true - } - Frame { - msec: 8624 - hash: "a7dccada1080487cab2d0a916676c5cb" - } - Frame { - msec: 8640 - image: "cursorDelegate.8.png" - } - Frame { - msec: 8656 - hash: "9329d353c678d2bc61d08f63029d1b9b" - } - Frame { - msec: 8672 - hash: "41263f56af7875028bb0c1e7eccf6f5d" - } - Frame { - msec: 8688 - hash: "e2eb18af82c85ea78ba438163e922df3" - } - Frame { - msec: 8704 - hash: "91b2695e4915238ae8610a64e279b0f4" - } - Frame { - msec: 8720 - hash: "a97d90765f87b998eae6e9f603c61bff" - } - Frame { - msec: 8736 - hash: "48969edab07b942480d93ac2d383ca24" - } - Frame { - msec: 8752 - hash: "ecfd9d6d5873001f0c67806544a14983" - } - Frame { - msec: 8768 - hash: "a3a3bc1e2523d3e7f961893bcd1dd3a8" - } - Frame { - msec: 8784 - hash: "e337735ad0b42e60c54f16f3da7af3cf" - } - Frame { - msec: 8800 - hash: "c39db081130d269f25dbcb1a19afb8d0" - } - Frame { - msec: 8816 - hash: "c464d501e3935ec0f53eb780bd1a8289" - } - Frame { - msec: 8832 - hash: "2be4fd986de19f6f76dfddec75b26804" - } - Frame { - msec: 8848 - hash: "a1280e9fb86ca96b2340bb70aa774806" - } - Frame { - msec: 8864 - hash: "cce4c17a387893478bcfa547f7561aba" - } - Frame { - msec: 8880 - hash: "7094db3e04895d8d7f5f58caf0658592" - } - Frame { - msec: 8896 - hash: "edb1f644757f9ba0a39549d77141c280" - } - Frame { - msec: 8912 - hash: "cd381e847ecfce2db111bdf94a437cbc" - } - Frame { - msec: 8928 - hash: "6a089603b641b683a744b88f2ebe82d1" - } - Frame { - msec: 8944 - hash: "8c0e47f7c87a1a11cd733a453b31c780" - } - Frame { - msec: 8960 - hash: "b53c892d62e787eb2565820d79739de6" - } - Frame { - msec: 8976 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 8992 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9008 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9024 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9040 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9056 - hash: "e165a0b90fdc1eef2c8244ad8545bd6f" - } - Frame { - msec: 9072 - hash: "b53c892d62e787eb2565820d79739de6" - } - Frame { - msec: 9088 - hash: "8c0e47f7c87a1a11cd733a453b31c780" - } - Frame { - msec: 9104 - hash: "6a089603b641b683a744b88f2ebe82d1" - } - Frame { - msec: 9120 - hash: "cd381e847ecfce2db111bdf94a437cbc" - } - Frame { - msec: 9136 - hash: "edb1f644757f9ba0a39549d77141c280" - } - Frame { - msec: 9152 - hash: "7094db3e04895d8d7f5f58caf0658592" - } - Frame { - msec: 9168 - hash: "cce4c17a387893478bcfa547f7561aba" - } - Frame { - msec: 9184 - hash: "a1280e9fb86ca96b2340bb70aa774806" - } - Frame { - msec: 9200 - hash: "2be4fd986de19f6f76dfddec75b26804" - } - Frame { - msec: 9216 - hash: "c464d501e3935ec0f53eb780bd1a8289" - } - Frame { - msec: 9232 - hash: "c39db081130d269f25dbcb1a19afb8d0" - } - Frame { - msec: 9248 - hash: "e337735ad0b42e60c54f16f3da7af3cf" - } - Frame { - msec: 9264 - hash: "a3a3bc1e2523d3e7f961893bcd1dd3a8" - } - Frame { - msec: 9280 - hash: "ecfd9d6d5873001f0c67806544a14983" - } - Frame { - msec: 9296 - hash: "48969edab07b942480d93ac2d383ca24" - } - Frame { - msec: 9312 - hash: "a97d90765f87b998eae6e9f603c61bff" - } - Frame { - msec: 9328 - hash: "91b2695e4915238ae8610a64e279b0f4" - } - Frame { - msec: 9344 - hash: "e2eb18af82c85ea78ba438163e922df3" - } - Frame { - msec: 9360 - hash: "41263f56af7875028bb0c1e7eccf6f5d" - } - Frame { - msec: 9376 - hash: "9329d353c678d2bc61d08f63029d1b9b" - } - Frame { - msec: 9392 - hash: "ac5939eb4379394fab829b307cbfe7ec" - } - Frame { - msec: 9408 - hash: "a7dccada1080487cab2d0a916676c5cb" - } - Frame { - msec: 9424 - hash: "e07f59d729cb2790296e8c7cd3d0d3c9" + hash: "2e95c1966c94acccd2a44a6c2942d36d" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.0.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.0.png new file mode 100644 index 0000000..a4d7bef Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.0.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.png new file mode 100644 index 0000000..a8aee18 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.1.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.png b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.png new file mode 100644 index 0000000..799f422 Binary files /dev/null and b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.2.png differ diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml new file mode 100644 index 0000000..bbeb532 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/echoMode.qml @@ -0,0 +1,1043 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 32 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Key { + type: 6 + key: 16777248 + modifiers: 0 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 48 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 64 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 80 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 96 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 112 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 128 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 144 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 160 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 176 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 192 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 208 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 224 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 240 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 256 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 272 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 288 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 304 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 320 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 336 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Frame { + msec: 352 + hash: "3ea9888b1213bb799bdb01ed0eff2a78" + } + Key { + type: 6 + key: 74 + modifiers: 33554432 + text: "4a" + autorep: false + count: 1 + } + Frame { + msec: 368 + hash: "d070b6581fd109ce278cf4a8c41a6549" + } + Frame { + msec: 384 + hash: "d070b6581fd109ce278cf4a8c41a6549" + } + Frame { + msec: 400 + hash: "d070b6581fd109ce278cf4a8c41a6549" + } + Frame { + msec: 416 + hash: "d070b6581fd109ce278cf4a8c41a6549" + } + Frame { + msec: 432 + hash: "d070b6581fd109ce278cf4a8c41a6549" + } + Key { + type: 7 + key: 74 + modifiers: 33554432 + text: "4a" + autorep: false + count: 1 + } + Frame { + msec: 448 + hash: "d070b6581fd109ce278cf4a8c41a6549" + } + Frame { + msec: 464 + hash: "d070b6581fd109ce278cf4a8c41a6549" + } + Frame { + msec: 480 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 496 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 512 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 528 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Key { + type: 7 + key: 16777248 + modifiers: 33554432 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 544 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 560 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 576 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 592 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 608 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 624 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 640 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 656 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 672 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Frame { + msec: 688 + hash: "6a80a729e85f8dab98155e115a4193cc" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 704 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Frame { + msec: 720 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Frame { + msec: 736 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Frame { + msec: 752 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Frame { + msec: 768 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 784 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Frame { + msec: 800 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Frame { + msec: 816 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Frame { + msec: 832 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Frame { + msec: 848 + hash: "fd47d9eaea89d6a731bdd70b39b2bc54" + } + Key { + type: 6 + key: 67 + modifiers: 0 + text: "63" + autorep: false + count: 1 + } + Frame { + msec: 864 + hash: "b643c026fe7570505e72971d3b3f0ea2" + } + Frame { + msec: 880 + hash: "b643c026fe7570505e72971d3b3f0ea2" + } + Frame { + msec: 896 + hash: "b643c026fe7570505e72971d3b3f0ea2" + } + Key { + type: 7 + key: 67 + modifiers: 0 + text: "63" + autorep: false + count: 1 + } + Frame { + msec: 912 + hash: "b643c026fe7570505e72971d3b3f0ea2" + } + Frame { + msec: 928 + hash: "b643c026fe7570505e72971d3b3f0ea2" + } + Frame { + msec: 944 + hash: "b643c026fe7570505e72971d3b3f0ea2" + } + Frame { + msec: 960 + image: "echoMode.0.png" + } + Frame { + msec: 976 + hash: "cba83dfcd44e4ba3ea44dd8d84bde745" + } + Key { + type: 6 + key: 75 + modifiers: 0 + text: "6b" + autorep: false + count: 1 + } + Frame { + msec: 992 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1008 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1024 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1040 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Key { + type: 7 + key: 75 + modifiers: 0 + text: "6b" + autorep: false + count: 1 + } + Frame { + msec: 1056 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1072 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1088 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1104 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1120 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1136 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1152 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1168 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1184 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1200 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1216 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Frame { + msec: 1232 + hash: "bca450bd2b1a46da72e0ba99a70c18ab" + } + Key { + type: 6 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 1248 + hash: "55c33f786e6dc14b038dba96cc154859" + } + Frame { + msec: 1264 + hash: "55c33f786e6dc14b038dba96cc154859" + } + Frame { + msec: 1280 + hash: "55c33f786e6dc14b038dba96cc154859" + } + Key { + type: 7 + key: 68 + modifiers: 0 + text: "64" + autorep: false + count: 1 + } + Frame { + msec: 1296 + hash: "55c33f786e6dc14b038dba96cc154859" + } + Frame { + msec: 1312 + hash: "55c33f786e6dc14b038dba96cc154859" + } + Frame { + msec: 1328 + hash: "55c33f786e6dc14b038dba96cc154859" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 1344 + hash: "693d9e7579752a748d4c8d7fcbd3c022" + } + Frame { + msec: 1360 + hash: "693d9e7579752a748d4c8d7fcbd3c022" + } + Frame { + msec: 1376 + hash: "693d9e7579752a748d4c8d7fcbd3c022" + } + Frame { + msec: 1392 + hash: "693d9e7579752a748d4c8d7fcbd3c022" + } + Frame { + msec: 1408 + hash: "693d9e7579752a748d4c8d7fcbd3c022" + } + Frame { + msec: 1424 + hash: "693d9e7579752a748d4c8d7fcbd3c022" + } + Frame { + msec: 1440 + hash: "693d9e7579752a748d4c8d7fcbd3c022" + } + Frame { + msec: 1456 + hash: "693d9e7579752a748d4c8d7fcbd3c022" + } + Frame { + msec: 1472 + hash: "9be278fc6ebef108857a414ecb292b46" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 1488 + hash: "9be278fc6ebef108857a414ecb292b46" + } + Key { + type: 6 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 1504 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Frame { + msec: 1520 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Frame { + msec: 1536 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Frame { + msec: 1552 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Key { + type: 7 + key: 87 + modifiers: 0 + text: "77" + autorep: false + count: 1 + } + Frame { + msec: 1568 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Frame { + msec: 1584 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Frame { + msec: 1600 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Frame { + msec: 1616 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Frame { + msec: 1632 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Frame { + msec: 1648 + hash: "b1c799fd9f4ebf097ec79448eb9b4a2c" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1664 + hash: "46e977b7614ae6316a64106f6e5326c1" + } + Frame { + msec: 1680 + hash: "46e977b7614ae6316a64106f6e5326c1" + } + Frame { + msec: 1696 + hash: "46e977b7614ae6316a64106f6e5326c1" + } + Frame { + msec: 1712 + hash: "46e977b7614ae6316a64106f6e5326c1" + } + Frame { + msec: 1728 + hash: "46e977b7614ae6316a64106f6e5326c1" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1744 + hash: "2d7771008d9ec265f70d089bb8436e18" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1760 + hash: "2d7771008d9ec265f70d089bb8436e18" + } + Frame { + msec: 1776 + hash: "2d7771008d9ec265f70d089bb8436e18" + } + Frame { + msec: 1792 + hash: "2d7771008d9ec265f70d089bb8436e18" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 1808 + hash: "2d7771008d9ec265f70d089bb8436e18" + } + Frame { + msec: 1824 + hash: "2d7771008d9ec265f70d089bb8436e18" + } + Frame { + msec: 1840 + hash: "2d7771008d9ec265f70d089bb8436e18" + } + Frame { + msec: 1856 + hash: "2d7771008d9ec265f70d089bb8436e18" + } + Key { + type: 6 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 1872 + hash: "7d85b2d311514db5988e335110fb8352" + } + Frame { + msec: 1888 + hash: "7d85b2d311514db5988e335110fb8352" + } + Frame { + msec: 1904 + hash: "7d85b2d311514db5988e335110fb8352" + } + Frame { + msec: 1920 + image: "echoMode.1.png" + } + Key { + type: 7 + key: 76 + modifiers: 0 + text: "6c" + autorep: false + count: 1 + } + Frame { + msec: 1936 + hash: "7d85b2d311514db5988e335110fb8352" + } + Frame { + msec: 1952 + hash: "7d85b2d311514db5988e335110fb8352" + } + Frame { + msec: 1968 + hash: "7d85b2d311514db5988e335110fb8352" + } + Frame { + msec: 1984 + hash: "9f4258905e76a6523e015701c3278cae" + } + Frame { + msec: 2000 + hash: "9f4258905e76a6523e015701c3278cae" + } + Frame { + msec: 2016 + hash: "9f4258905e76a6523e015701c3278cae" + } + Key { + type: 6 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 2032 + hash: "8a2cf6f27a40da75be9d9bcf88b4c022" + } + Frame { + msec: 2048 + hash: "8a2cf6f27a40da75be9d9bcf88b4c022" + } + Key { + type: 7 + key: 79 + modifiers: 0 + text: "6f" + autorep: false + count: 1 + } + Frame { + msec: 2064 + hash: "8a2cf6f27a40da75be9d9bcf88b4c022" + } + Frame { + msec: 2080 + hash: "8a2cf6f27a40da75be9d9bcf88b4c022" + } + Key { + type: 6 + key: 86 + modifiers: 0 + text: "76" + autorep: false + count: 1 + } + Frame { + msec: 2096 + hash: "6c679da9b822fefef626c4308fdc9080" + } + Frame { + msec: 2112 + hash: "6c679da9b822fefef626c4308fdc9080" + } + Frame { + msec: 2128 + hash: "6c679da9b822fefef626c4308fdc9080" + } + Frame { + msec: 2144 + hash: "6c679da9b822fefef626c4308fdc9080" + } + Key { + type: 6 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Key { + type: 7 + key: 86 + modifiers: 0 + text: "76" + autorep: false + count: 1 + } + Frame { + msec: 2160 + hash: "81399b2d1ffa0a097f9d0eea0ccf26a5" + } + Frame { + msec: 2176 + hash: "81399b2d1ffa0a097f9d0eea0ccf26a5" + } + Frame { + msec: 2192 + hash: "81399b2d1ffa0a097f9d0eea0ccf26a5" + } + Frame { + msec: 2208 + hash: "81399b2d1ffa0a097f9d0eea0ccf26a5" + } + Key { + type: 6 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2224 + hash: "aebfaf936f9c4e0f856a2a2d1b2014ee" + } + Key { + type: 7 + key: 69 + modifiers: 0 + text: "65" + autorep: false + count: 1 + } + Frame { + msec: 2240 + hash: "aebfaf936f9c4e0f856a2a2d1b2014ee" + } + Frame { + msec: 2256 + hash: "aebfaf936f9c4e0f856a2a2d1b2014ee" + } + Frame { + msec: 2272 + hash: "aebfaf936f9c4e0f856a2a2d1b2014ee" + } + Frame { + msec: 2288 + hash: "aebfaf936f9c4e0f856a2a2d1b2014ee" + } + Frame { + msec: 2304 + hash: "aebfaf936f9c4e0f856a2a2d1b2014ee" + } + Key { + type: 7 + key: 32 + modifiers: 0 + text: "20" + autorep: false + count: 1 + } + Frame { + msec: 2320 + hash: "aebfaf936f9c4e0f856a2a2d1b2014ee" + } + Frame { + msec: 2336 + hash: "aebfaf936f9c4e0f856a2a2d1b2014ee" + } + Key { + type: 6 + key: 77 + modifiers: 0 + text: "6d" + autorep: false + count: 1 + } + Frame { + msec: 2352 + hash: "1e9d2117d8392ea494d28f95ddb57213" + } + Frame { + msec: 2368 + hash: "1e9d2117d8392ea494d28f95ddb57213" + } + Frame { + msec: 2384 + hash: "1e9d2117d8392ea494d28f95ddb57213" + } + Frame { + msec: 2400 + hash: "1e9d2117d8392ea494d28f95ddb57213" + } + Frame { + msec: 2416 + hash: "1e9d2117d8392ea494d28f95ddb57213" + } + Frame { + msec: 2432 + hash: "1e9d2117d8392ea494d28f95ddb57213" + } + Key { + type: 7 + key: 77 + modifiers: 0 + text: "6d" + autorep: false + count: 1 + } + Frame { + msec: 2448 + hash: "1e9d2117d8392ea494d28f95ddb57213" + } + Frame { + msec: 2464 + hash: "1e9d2117d8392ea494d28f95ddb57213" + } + Frame { + msec: 2480 + hash: "a016e70b0f98846694ef3ae906faa346" + } + Frame { + msec: 2496 + hash: "a016e70b0f98846694ef3ae906faa346" + } + Key { + type: 6 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 2512 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2528 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2544 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Key { + type: 7 + key: 89 + modifiers: 0 + text: "79" + autorep: false + count: 1 + } + Frame { + msec: 2560 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2576 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2592 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2608 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2624 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2640 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2656 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2672 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2688 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2704 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2720 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2736 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2752 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2768 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2784 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2800 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2816 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2832 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2848 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2864 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2880 + image: "echoMode.2.png" + } + Frame { + msec: 2896 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2912 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2928 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2944 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2960 + hash: "818ad2e56a73599ae69ce5000d5b278f" + } + Frame { + msec: 2976 + hash: "147568112e60545f440f2109f918a59e" + } + Frame { + msec: 2992 + hash: "147568112e60545f440f2109f918a59e" + } + Frame { + msec: 3008 + hash: "147568112e60545f440f2109f918a59e" + } + Frame { + msec: 3024 + hash: "147568112e60545f440f2109f918a59e" + } + Frame { + msec: 3040 + hash: "147568112e60545f440f2109f918a59e" + } + Frame { + msec: 3056 + hash: "147568112e60545f440f2109f918a59e" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/hAlign.qml b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/hAlign.qml new file mode 100644 index 0000000..fb56da6 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativetextinput/data-MAC/hAlign.qml @@ -0,0 +1,107 @@ +import Qt.VisualTest 4.7 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 32 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 48 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 64 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 80 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 96 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 112 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 128 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 144 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 160 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 176 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 192 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 208 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 224 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 240 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 256 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 272 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 288 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 304 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 320 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 336 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 352 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 368 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 384 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } + Frame { + msec: 400 + hash: "15c91702a80de73ac1abc3db9fa8ca09" + } +} diff --git a/tools/qml/qdeclarativetester.cpp b/tools/qml/qdeclarativetester.cpp index 67ea03d..eaf3403 100644 --- a/tools/qml/qdeclarativetester.cpp +++ b/tools/qml/qdeclarativetester.cpp @@ -52,6 +52,7 @@ QT_BEGIN_NAMESPACE +extern Q_GUI_EXPORT bool qt_applefontsmoothing_enabled; QDeclarativeTester::QDeclarativeTester(const QString &script, QDeclarativeViewer::ScriptOptions opts, QDeclarativeView *parent) @@ -267,7 +268,14 @@ void QDeclarativeTester::updateCurrentTime(int msec) if (options & QDeclarativeViewer::TestImages) { img.fill(qRgb(255,255,255)); +#ifdef Q_WS_MAC + bool oldSmooth = qt_applefontsmoothing_enabled; + qt_applefontsmoothing_enabled = false; +#endif QPainter p(&img); +#ifdef Q_WS_MAC + qt_applefontsmoothing_enabled = oldSmooth; +#endif m_view->render(&p); } -- cgit v0.12 From b438b15b8291ce9591fbe0a64fe452383662bbda Mon Sep 17 00:00:00 2001 From: Joona Petrell Date: Mon, 1 Nov 2010 12:32:17 +1000 Subject: Quickly clicking an item that doesn't use double clicking should result in two separate clicks Task-number: QTBUG-14832 Reviewed-by: Martin Jones --- .../graphicsitems/qdeclarativemousearea.cpp | 3 +- .../qdeclarativemousearea/data/clicktwice.qml | 16 +++++++++ .../tst_qdeclarativemousearea.cpp | 42 ++++++++++++++++++++++ 3 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 tests/auto/declarative/qdeclarativemousearea/data/clicktwice.qml diff --git a/src/declarative/graphicsitems/qdeclarativemousearea.cpp b/src/declarative/graphicsitems/qdeclarativemousearea.cpp index 1b7dce0..d9edd11 100644 --- a/src/declarative/graphicsitems/qdeclarativemousearea.cpp +++ b/src/declarative/graphicsitems/qdeclarativemousearea.cpp @@ -566,7 +566,8 @@ void QDeclarativeMouseArea::mouseDoubleClickEvent(QGraphicsSceneMouseEvent *even if (!d->absorb) { QDeclarativeItem::mouseDoubleClickEvent(event); } else { - d->doubleClick = true; + if (d->isDoubleClickConnected()) + d->doubleClick = true; d->saveEvent(event); QDeclarativeMouseEvent me(d->lastPos.x(), d->lastPos.y(), d->lastButton, d->lastButtons, d->lastModifiers, true, false); me.setAccepted(d->isDoubleClickConnected()); diff --git a/tests/auto/declarative/qdeclarativemousearea/data/clicktwice.qml b/tests/auto/declarative/qdeclarativemousearea/data/clicktwice.qml new file mode 100644 index 0000000..c6b1f89 --- /dev/null +++ b/tests/auto/declarative/qdeclarativemousearea/data/clicktwice.qml @@ -0,0 +1,16 @@ +import QtQuick 1.0 + +Item { + id: root + property int clicked: 0 + property int pressed: 0 + property int released: 0 + + MouseArea { + width: 200; height: 200 + onPressed: { root.pressed++ } + onClicked: { root.clicked++ } + onReleased: { root.released++ } + } +} + diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp index 5a50e0d..57a58e9 100644 --- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp +++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp @@ -63,6 +63,7 @@ private slots: void noOnClickedWithPressAndHold(); void onMousePressRejected(); void doubleClick(); + void clickTwice(); private: QDeclarativeView *createView(); @@ -426,6 +427,47 @@ void tst_QDeclarativeMouseArea::doubleClick() QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1); QCOMPARE(canvas->rootObject()->property("doubleClicked").toInt(), 1); QCOMPARE(canvas->rootObject()->property("released").toInt(), 2); + +} + +// QTBUG-14832 +void tst_QDeclarativeMouseArea::clickTwice() +{ + QDeclarativeView *canvas = createView(); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/clicktwice.qml")); + canvas->show(); + canvas->setFocus(); + QVERIFY(canvas->rootObject() != 0); + + QGraphicsScene *scene = canvas->scene(); + QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress); + pressEvent.setScenePos(QPointF(100, 100)); + pressEvent.setButton(Qt::LeftButton); + pressEvent.setButtons(Qt::LeftButton); + QApplication::sendEvent(scene, &pressEvent); + + QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease); + releaseEvent.setScenePos(QPointF(100, 100)); + releaseEvent.setButton(Qt::LeftButton); + releaseEvent.setButtons(Qt::LeftButton); + QApplication::sendEvent(scene, &releaseEvent); + + QCOMPARE(canvas->rootObject()->property("pressed").toInt(), 1); + QCOMPARE(canvas->rootObject()->property("released").toInt(), 1); + QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 1); + + QGraphicsSceneMouseEvent dblClickEvent(QEvent::GraphicsSceneMouseDoubleClick); + dblClickEvent.setScenePos(QPointF(100, 100)); + dblClickEvent.setButton(Qt::LeftButton); + dblClickEvent.setButtons(Qt::LeftButton); + QApplication::sendEvent(scene, &dblClickEvent); + + QApplication::sendEvent(scene, &pressEvent); + QApplication::sendEvent(scene, &releaseEvent); + + QCOMPARE(canvas->rootObject()->property("pressed").toInt(), 2); + QCOMPARE(canvas->rootObject()->property("released").toInt(), 2); + QCOMPARE(canvas->rootObject()->property("clicked").toInt(), 2); } QTEST_MAIN(tst_QDeclarativeMouseArea) -- cgit v0.12 From 99ee75f6df588103f83fc807e6ee686971cc18df Mon Sep 17 00:00:00 2001 From: Jason Barron Date: Mon, 1 Nov 2010 10:14:02 +0100 Subject: Fix OpenVG painting artifacts after restoreState(). When the state is restored and the 'dirty' flag indicates that the clip state has changed, the paint engine needs to set 'scissorDirty' flag to true so that updateScissor() applies the restored clip region to the scissor rects. Task-number: QTBUG-14907 Reviewed-by: Jani Hautakangas --- src/openvg/qpaintengine_vg.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/openvg/qpaintengine_vg.cpp b/src/openvg/qpaintengine_vg.cpp index 9df32d9..ee65e48 100644 --- a/src/openvg/qpaintengine_vg.cpp +++ b/src/openvg/qpaintengine_vg.cpp @@ -3678,6 +3678,7 @@ void QVGPaintEngine::restoreState(QPaintEngine::DirtyFlags dirty) d->maskIsSet = false; d->scissorMask = false; d->maskRect = QRect(); + d->scissorDirty = true; clipEnabledChanged(); } -- cgit v0.12 From 35a55ddea4d942344eb49b28efe15889e7d023f0 Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Mon, 1 Nov 2010 11:48:50 +0100 Subject: Compile when PATH_MAX is not defined FILENAME_MAX is part of the C++ standard (defined in ) Reviewed-by: Markus Goetz --- src/corelib/io/qfsfileengine_win.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 3f11c39..71b10b4 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -73,6 +73,10 @@ #define SPI_GETPLATFORMTYPE 257 #endif +#ifndef PATH_MAX +#define PATH_MAX FILENAME_MAX +#endif + #ifndef _INTPTR_T_DEFINED #ifdef _WIN64 typedef __int64 intptr_t; -- cgit v0.12 From 60da9087f137f59d6b34e3b5c12f7c266de2d1f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Samuel=20R=C3=B8dal?= Date: Mon, 1 Nov 2010 12:49:41 +0100 Subject: Make use of the fast image paths for CompositionMode_Source as well. Blending / blitting of images without an alpha-channel gives the same result with CompositionMode_Source and CompositionMode_SourceOver. Task-number: QTBUG-14901 Reviewed-by: Kim --- src/gui/painting/qpaintengine_raster.cpp | 17 ++++++++++++----- src/gui/painting/qpaintengine_raster_p.h | 1 + 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/gui/painting/qpaintengine_raster.cpp b/src/gui/painting/qpaintengine_raster.cpp index 4b3e14d..a2da94c 100644 --- a/src/gui/painting/qpaintengine_raster.cpp +++ b/src/gui/painting/qpaintengine_raster.cpp @@ -2483,7 +2483,7 @@ void QRasterPaintEngine::drawImage(const QPointF &p, const QImage &img) const QClipData *clip = d->clip(); QPointF pt(p.x() + s->matrix.dx(), p.y() + s->matrix.dy()); - if (s->flags.fast_images) { + if (d->canUseFastImageBlending(d->rasterBuffer->compositionMode, img)) { SrcOverBlendFunc func = qBlendFunctions[d->rasterBuffer->format][img.format()]; if (func) { if (!clip) { @@ -2664,7 +2664,7 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe bool exceedsPrecision = targetBounds.width() > 0xffff || targetBounds.height() > 0xffff; - if (s->flags.fast_images && !exceedsPrecision) { + if (!exceedsPrecision && d->canUseFastImageBlending(d->rasterBuffer->compositionMode, img)) { if (s->matrix.type() > QTransform::TxScale) { SrcOverTransformFunc func = qTransformFunctions[d->rasterBuffer->format][img.format()]; if (func && (!clip || clip->hasRectClip)) { @@ -2736,8 +2736,7 @@ void QRasterPaintEngine::drawImage(const QRectF &r, const QImage &img, const QRe fillPath(path, &d->image_filler_xform); s->matrix = m; } else { - - if (s->flags.fast_images) { + if (d->canUseFastImageBlending(d->rasterBuffer->compositionMode, img)) { SrcOverBlendFunc func = qBlendFunctions[d->rasterBuffer->format][img.format()]; if (func) { QPointF pt(r.x() + s->matrix.dx(), r.y() + s->matrix.dy()); @@ -4291,11 +4290,19 @@ void QRasterPaintEnginePrivate::recalculateFastImages() QRasterPaintEngineState *s = q->state(); s->flags.fast_images = !(s->renderHints & QPainter::SmoothPixmapTransform) - && rasterBuffer->compositionMode == QPainter::CompositionMode_SourceOver && s->matrix.type() <= QTransform::TxShear; } +bool QRasterPaintEnginePrivate::canUseFastImageBlending(QPainter::CompositionMode mode, const QImage &image) const +{ + Q_Q(const QRasterPaintEngine); + const QRasterPaintEngineState *s = q->state(); + return s->flags.fast_images + && (mode == QPainter::CompositionMode_SourceOver + || (mode == QPainter::CompositionMode_Source + && !image.hasAlphaChannel())); +} QImage QRasterBuffer::colorizeBitmap(const QImage &image, const QColor &color) { diff --git a/src/gui/painting/qpaintengine_raster_p.h b/src/gui/painting/qpaintengine_raster_p.h index fd635e6..404528c 100644 --- a/src/gui/painting/qpaintengine_raster_p.h +++ b/src/gui/painting/qpaintengine_raster_p.h @@ -340,6 +340,7 @@ public: void initializeRasterizer(QSpanData *data); void recalculateFastImages(); + bool canUseFastImageBlending(QPainter::CompositionMode mode, const QImage &image) const; QPaintDevice *device; QScopedPointer outlineMapper; -- cgit v0.12