# HG changeset patch # User Eckhart Koeppen # Date 1271407192 -10800 # Node ID 740e5562c97fe0e27f86623707952a0db9f37fce # Parent 3f74d0d4af4c0708511dd946af030bf7c50a6efe 8b5beb2a553102639e9eb38c8f8f0f6775e8545b diff -r 3f74d0d4af4c -r 740e5562c97f .commit-template --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.commit-template Fri Apr 16 11:39:52 2010 +0300 @@ -0,0 +1,10 @@ +# ===[ Subject ]==========[ one line, please wrap at 72 characters ]===| + +# ---[ Details ]---------[ remember extra blank line after subject ]---| + +# ---[ Fields ]-----------------[ uncomment and edit as applicable ]---| + +#Task-number: +#Reviewed-by: + +# ==================================[ please wrap at 72 characters ]===| diff -r 3f74d0d4af4c -r 740e5562c97f .gitignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.gitignore Fri Apr 16 11:39:52 2010 +0300 @@ -0,0 +1,209 @@ +# This file is used to ignore files which are generated in the Qt build system +# ---------------------------------------------------------------------------- + +examples/*/*/* +!examples/*/*/*[.]* +!examples/*/*/README +examples/*/*/*[.]app +demos/*/* +!demos/*/*[.]* +demos/*/*[.]app +config.tests/*/*/* +!config.tests/*/*/*[.]* +config.tests/*/*/*[.]app + +*~ +*.a +*.core +*.moc +*.o +*.obj +*.orig +*.swp +*.rej +*.so +*.pbxuser +*.mode1 +*.mode1v3 +*_pch.h.cpp +*_resource.rc +.#* +*.*# +core +.qmake.cache +.qmake.vars +*.prl +tags +.DS_Store +*.debug +Makefile* +!qmake/Makefile.win32* +!qmake/Makefile.unix +*.prl +*.app +*.pro.user +bin/Qt*.dll +bin/assistant* +bin/designer* +bin/dumpcpp* +bin/idc* +bin/linguist* +bin/lrelease* +bin/lupdate* +bin/lconvert* +bin/moc* +bin/pixeltool* +bin/qmake* +bin/qdoc3* +bin/qt3to4* +bin/qtdemo* +bin/qttracereplay* +bin/rcc* +bin/uic* +bin/patternist* +bin/phonon* +bin/qcollectiongenerator* +bin/qdbus* +bin/qhelpconverter* +bin/qhelpgenerator* +bin/qtconfig* +bin/xmlpatterns* +bin/cetest* +bin/collectiongenerator +bin/helpconverter +bin/helpgenerator +configure.cache +config.status +mkspecs/default +mkspecs/qconfig.pri +moc_*.cpp +qmake/qmake.exe +qmake/Makefile.bak +src/corelib/global/qconfig.cpp +src/corelib/global/qconfig.h +src/corelib/global/qconfig.h.qmake +src/tools/uic/qclass_lib_map.h +ui_*.h +tests/auto/qprocess/test*/*.exe +tests/auto/qtcpsocket/stressTest/*.exe +tests/auto/qprocess/fileWriterProcess/*.exe +tests/auto/qmake/testdata/quotedfilenames/*.exe +tests/auto/compilerwarnings/*.exe +tests/auto/qmake/testdata/quotedfilenames/test.cpp +tests/auto/qprocess/fileWriterProcess.txt +.com.apple.timemachine.supported +tests/auto/qlibrary/libmylib.so* +tests/auto/qresourceengine/runtime_resource.rcc +tools/qtestlib/updater/updater* +tools/activeqt/testcon/testcon.tlb +translations/*.qm +qrc_*.cpp + +# xemacs temporary files +*.flc + +# Vim temporary files +.*.swp + +# Visual Studio generated files +*.ib_pdb_index +*.idb +*.ilk +*.pdb +*.sln +*.suo +*.vcproj +*vcproj.*.*.user +*.ncb + +# MinGW generated files +*.Debug +*.Release + +# WebKit temp files +src/3rdparty/webkit/WebCore/mocinclude.tmp +src/3rdparty/webkit/includes.txt +src/3rdparty/webkit/includes2.txt + +# Symlinks generated by configure +tools/qvfb/qvfbhdr.h +tools/qvfb/qlock_p.h +tools/qvfb/qlock.cpp +tools/qvfb/qwssignalhandler.cpp +tools/qvfb/qwssignalhandler_p.h +.DS_Store +.pch +.rcc +*.app +config.status +config.tests/unix/cups/cups +config.tests/unix/getaddrinfo/getaddrinfo +config.tests/unix/getifaddrs/getifaddrs +config.tests/unix/iconv/iconv +config.tests/unix/ipv6/ipv6 +config.tests/unix/ipv6ifname/ipv6ifname +config.tests/unix/largefile/largefile +config.tests/unix/nis/nis +config.tests/unix/odbc/odbc +config.tests/unix/openssl/openssl +config.tests/unix/stl/stl +config.tests/unix/zlib/zlib +config.tests/unix/3dnow/3dnow +config.tests/unix/mmx/mmx +config.tests/unix/sse/sse +config.tests/unix/sse2/sse2 + + + +# Directories to ignore +# --------------------- + +debug +examples/tools/plugandpaint/plugins +include/* +include/*/* +lib/* +!lib/fonts +!lib/README +plugins/*/* +release +tmp +doc-build +doc/html/* +doc/qch +doc-build +.rcc +.pch +.metadata + +# Symbian build system generated files +# --------------------- + +ABLD.BAT +bld.inf +*.mmp +*.mk +*.rss +*.loc +!s60main.rss +*.pkg +plugin_commonU.def +*.qtplugin +*.sis +*.sisx +*.lst + +# Generated by abldfast.bat from devtools. +.abldsteps.* + +# Carbide project files +# --------------------- +.project +.cproject +.make.cache +*.d + +qtc-debugging-helper +src/corelib/lib +src/network/lib +src/xml/lib/ diff -r 3f74d0d4af4c -r 740e5562c97f .hgignore --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/.hgignore Fri Apr 16 11:39:52 2010 +0300 @@ -0,0 +1,2 @@ +syntax: glob +.git diff -r 3f74d0d4af4c -r 740e5562c97f VERSION.SHA1 --- a/VERSION.SHA1 Thu Apr 08 14:19:33 2010 +0300 +++ b/VERSION.SHA1 Fri Apr 16 11:39:52 2010 +0300 @@ -1,1 +1,1 @@ -70947f0f93d948bc89b3b43d00da758a51f1ef84 +8b5beb2a553102639e9eb38c8f8f0f6775e8545b diff -r 3f74d0d4af4c -r 740e5562c97f doc/src/howtos/openvg.qdoc --- a/doc/src/howtos/openvg.qdoc Thu Apr 08 14:19:33 2010 +0300 +++ b/doc/src/howtos/openvg.qdoc Fri Apr 16 11:39:52 2010 +0300 @@ -295,6 +295,16 @@ Convolution, colorize, drop shadow, and blur filters are accelerated using OpenVG operations. + \section2 Scrolling + + By default, accelerated scrolling is not enabled because the impact on + performance is very much tied to the hardware platform. To enable + accelerated scrolling, you should ensure that QVG_BUFFER_SCROLLING is + defined when compiling the QtOpenVG module. + + You should only enable this feature if vgCopyPixels() is known to be + efficient on your hardware platform. + \section1 Known issues Performance of copying the contents of an OpenVG-rendered window to the diff -r 3f74d0d4af4c -r 740e5562c97f doc/src/platforms/emb-openvg.qdocinc --- a/doc/src/platforms/emb-openvg.qdocinc Thu Apr 08 14:19:33 2010 +0300 +++ b/doc/src/platforms/emb-openvg.qdocinc Fri Apr 16 11:39:52 2010 +0300 @@ -259,6 +259,12 @@ \o Convolution, colorize, drop shadow, and blur filters are accelerated using OpenVG operations. + \row + \o Scrolling + \o Accelerated scrolling is implemented but disabled by default +unless QVG_BUFFER_SCROLLING is defined. This should only be enabled on +OpenVG engines where vgCopyPixels() is known to be efficient. + \endtable \section2 Known issues diff -r 3f74d0d4af4c -r 740e5562c97f src/3rdparty/webkit/VERSION --- a/src/3rdparty/webkit/VERSION Thu Apr 08 14:19:33 2010 +0300 +++ b/src/3rdparty/webkit/VERSION Fri Apr 16 11:39:52 2010 +0300 @@ -8,4 +8,8 @@ and has the sha1 checksum +<<<<<<< HEAD e9151b11e974f0aa47fd40c225f88f35ced91496 +======= + 14feb62c96ffe2c37e3e2fdac4e370fdbc76ef62 +>>>>>>> 8f75ee7... Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ( 14feb62c96ffe2c37e3e2fdac4e370fdbc76ef62 ) diff -r 3f74d0d4af4c -r 740e5562c97f src/3rdparty/webkit/WebCore/ChangeLog --- a/src/3rdparty/webkit/WebCore/ChangeLog Thu Apr 08 14:19:33 2010 +0300 +++ b/src/3rdparty/webkit/WebCore/ChangeLog Fri Apr 16 11:39:52 2010 +0300 @@ -1,3 +1,33 @@ +<<<<<<< HEAD +======= +2010-04-09 David Leong + + Reviewed by Simon Hausmann. + + [Qt] Symbian apps crash on exit due to a bad qObject_cast. + + https://bugs.webkit.org/show_bug.cgi?id=37303 + + Added check for NULL to avoid the crash. + + * plugins/symbian/PluginViewSymbian.cpp: + (WebCore::PluginView::platformDestroy): + +2009-11-15 Dave Tapuska + + Reviewed by George Staikos. + + Compare UChars single unit at a time as opposed to the uint32_t + approach as casting to unaligned addresses may cause a bus failure + on ARMv5 and below. This change replicates the same defines that + exists in AtomicString.cpp + + https://bugs.webkit.org/show_bug.cgi?id=31475 + + * platform/text/StringHash.h: + (WebCore::StringHash::equal): + +>>>>>>> 8f75ee7... Updated WebKit from /home/shausman/src/webkit/trunk to qtwebkit/qtwebkit-4.6 ( 14feb62c96ffe2c37e3e2fdac4e370fdbc76ef62 ) 2010-03-25 yael aharon Reviewed by Laszlo Gombos. diff -r 3f74d0d4af4c -r 740e5562c97f src/3rdparty/webkit/WebCore/WebCore.pro --- a/src/3rdparty/webkit/WebCore/WebCore.pro Thu Apr 08 14:19:33 2010 +0300 +++ b/src/3rdparty/webkit/WebCore/WebCore.pro Fri Apr 16 11:39:52 2010 +0300 @@ -203,10 +203,12 @@ !CONFIG(QTDIR_build):!contains(DEFINES, ENABLE_QT_BEARER=.) { symbian: { - exists($${EPOCROOT}epoc32/release/winscw/udeb/QtBearer.lib)| \ - exists($${EPOCROOT}epoc32/release/armv5/lib/QtBearer.lib) { - DEFINES += ENABLE_QT_BEARER=1 - } + # exists($${EPOCROOT}epoc32/release/winscw/udeb/QtBearer.lib)| \ + # exists($${EPOCROOT}epoc32/release/armv5/lib/QtBearer.lib) { + # DEFINES += ENABLE_QT_BEARER=1 + # } + # :QTP:Bearer management always enabled + DEFINES += ENABLE_QT_BEARER=1 } } diff -r 3f74d0d4af4c -r 740e5562c97f src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp --- a/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp Thu Apr 08 14:19:33 2010 +0300 +++ b/src/3rdparty/webkit/WebCore/plugins/symbian/PluginViewSymbian.cpp Fri Apr 16 11:39:52 2010 +0300 @@ -453,7 +453,7 @@ void PluginView::platformDestroy() { QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient(); - if (QGraphicsWebView *webView = qobject_cast(client->pluginParent())) + if (client && qobject_cast(client->pluginParent())) delete static_cast(platformPluginWidget())->proxy(); else delete platformPluginWidget(); diff -r 3f74d0d4af4c -r 740e5562c97f src/corelib/codecs/qtextcodec.cpp --- a/src/corelib/codecs/qtextcodec.cpp Thu Apr 08 14:19:33 2010 +0300 +++ b/src/corelib/codecs/qtextcodec.cpp Fri Apr 16 11:39:52 2010 +0300 @@ -110,6 +110,7 @@ (QTextCodecFactoryInterface_iid, QLatin1String("/codecs"))) #endif + static char qtolower(register char c) { if (c >= 'A' && c <= 'Z') return c + 0x20; return c; } static bool qisalnum(register char c) @@ -224,6 +225,19 @@ Q_GLOBAL_STATIC(QTextCodecCleanup, createQTextCodecCleanup) +bool QTextCodec::validCodecs() +{ +#ifdef Q_OS_SYMBIAN + // If we don't have a trap handler, we're outside of the main() function, + // ie. in global constructors or destructors. Don't use codecs in this + // case as it would lead to crashes because we don't have a cleanup stack on Symbian + return (User::TrapHandler() != NULL); +#else + return true; +#endif +} + + #if defined(Q_OS_WIN32) || defined(Q_OS_WINCE) class QWindowsLocalCodec: public QTextCodec { @@ -684,6 +698,14 @@ if (all) return; +#ifdef Q_OS_SYMBIAN + // If we don't have a trap handler, we're outside of the main() function, + // ie. in global constructors or destructors. Don't create codecs in this + // case as it would lead to crashes because of a missing cleanup stack on Symbian + if (User::TrapHandler() == NULL) + return; +#endif + #ifdef Q_DEBUG_TEXTCODEC if (destroying_is_ok) qWarning("QTextCodec: Creating new codec during codec cleanup"); @@ -986,6 +1008,9 @@ #endif setup(); + if (!validCodecs()) + return 0; + static QHash cache; if (clearCaches & 0x1) { cache.clear(); @@ -1027,6 +1052,9 @@ #endif setup(); + if (!validCodecs()) + return 0; + static QHash cache; if (clearCaches & 0x2) { cache.clear(); @@ -1074,6 +1102,10 @@ setup(); QList codecs; + + if (!validCodecs()) + return codecs; + for (int i = 0; i < all->size(); ++i) { codecs += all->at(i)->name(); codecs += all->at(i)->aliases(); @@ -1112,6 +1144,10 @@ setup(); QList codecs; + + if (!validCodecs()) + return codecs; + for (int i = 0; i < all->size(); ++i) codecs += all->at(i)->mibEnum(); @@ -1165,6 +1201,9 @@ QTextCodec* QTextCodec::codecForLocale() { + if (!validCodecs()) + return 0; + if (localeMapper) return localeMapper; diff -r 3f74d0d4af4c -r 740e5562c97f src/corelib/codecs/qtextcodec.h --- a/src/corelib/codecs/qtextcodec.h Thu Apr 08 14:19:33 2010 +0300 +++ b/src/corelib/codecs/qtextcodec.h Fri Apr 16 11:39:52 2010 +0300 @@ -145,12 +145,13 @@ private: friend class QTextCodecCleanup; static QTextCodec *cftr; + static bool validCodecs(); }; Q_DECLARE_OPERATORS_FOR_FLAGS(QTextCodec::ConversionFlags) -inline QTextCodec* QTextCodec::codecForTr() { return cftr; } + inline QTextCodec* QTextCodec::codecForTr() { return validCodecs() ? cftr : 0; } inline void QTextCodec::setCodecForTr(QTextCodec *c) { cftr = c; } -inline QTextCodec* QTextCodec::codecForCStrings() { return QString::codecForCStrings; } +inline QTextCodec* QTextCodec::codecForCStrings() { return validCodecs() ? QString::codecForCStrings : 0; } inline void QTextCodec::setCodecForCStrings(QTextCodec *c) { QString::codecForCStrings = c; } class Q_CORE_EXPORT QTextEncoder { diff -r 3f74d0d4af4c -r 740e5562c97f src/corelib/kernel/qeventdispatcher_symbian.cpp --- a/src/corelib/kernel/qeventdispatcher_symbian.cpp Thu Apr 08 14:19:33 2010 +0300 +++ b/src/corelib/kernel/qeventdispatcher_symbian.cpp Fri Apr 16 11:39:52 2010 +0300 @@ -570,7 +570,13 @@ * check if socket is in exception set * then signal RequestComplete for it */ - qWarning("exception on %d", i.key()->socket()); + qWarning("exception on %d [will close the socket handle - hack]", i.key()->socket()); + // quick fix; there is a bug + // when doing read on socket + // errors not preoperly mapped + // after offline-ing the device + // on some devices we do get exception + ::close(i.key()->socket()); toRemove.append(i.key()); TRequestStatus *status = i.value(); QEventDispatcherSymbian::RequestComplete(d->threadData->symbian_thread_handle, status, KErrNone); diff -r 3f74d0d4af4c -r 740e5562c97f src/gui/text/qfont.cpp --- a/src/gui/text/qfont.cpp Thu Apr 08 14:19:33 2010 +0300 +++ b/src/gui/text/qfont.cpp Fri Apr 16 11:39:52 2010 +0300 @@ -2612,8 +2612,10 @@ } QT_CATCH (const std::bad_alloc &) { // no cache - just ignore } - if (cache && cache->hasLocalData()) + if (cache && cache->hasLocalData()) { + cache->localData()->clear(); cache->setLocalData(0); + } } #endif // QT_NO_THREAD diff -r 3f74d0d4af4c -r 740e5562c97f src/network/socket/qnativesocketengine_unix.cpp --- a/src/network/socket/qnativesocketengine_unix.cpp Thu Apr 08 14:19:33 2010 +0300 +++ b/src/network/socket/qnativesocketengine_unix.cpp Fri Apr 16 11:39:52 2010 +0300 @@ -601,10 +601,15 @@ // Peek 0 bytes into the next message. The size of the message may // well be 0, so we can't check recvfrom's return value. ssize_t readBytes; +#ifdef Q_OS_SYMBIAN + char c; + readBytes = ::recvfrom(socketDescriptor, &c, 1, MSG_PEEK, &storage.a, &storageSize); +#else do { char c; readBytes = ::recvfrom(socketDescriptor, &c, 1, MSG_PEEK, &storage.a, &storageSize); } while (readBytes == -1 && errno == EINTR); +#endif // If there's no error, or if our buffer was too small, there must be a // pending datagram. @@ -661,11 +666,17 @@ sz = sizeof(aa); ssize_t recvFromResult = 0; +#ifdef Q_OS_SYMBIAN + char c; + recvFromResult = ::recvfrom(socketDescriptor, maxSize ? data : &c, maxSize ? maxSize : 1, + 0, &aa.a, &sz); +#else do { char c; recvFromResult = ::recvfrom(socketDescriptor, maxSize ? data : &c, maxSize ? maxSize : 1, 0, &aa.a, &sz); } while (recvFromResult == -1 && errno == EINTR); +#endif if (recvFromResult == -1) { setError(QAbstractSocket::NetworkError, ReceiveDatagramErrorString); @@ -832,17 +843,17 @@ // ignore the SIGPIPE signal qt_ignore_sigpipe(); + ssize_t writtenBytes; +#ifdef Q_OS_SYMBIAN + // Symbian does not support signals natively and Open C returns EINTR when moving to offline + writtenBytes = ::write(socketDescriptor, data, len); +#else // loop while ::write() returns -1 and errno == EINTR, in case // of an interrupting signal. - ssize_t writtenBytes; do { -#ifdef Q_OS_SYMBIAN - writtenBytes = ::write(socketDescriptor, data, len); -#else writtenBytes = qt_safe_write(socketDescriptor, data, len); + } while (writtenBytes < 0 && errno == EINTR); #endif - // writtenBytes = QT_WRITE(socketDescriptor, data, len); ### TODO S60: Should this line be removed or the one above it? - } while (writtenBytes < 0 && errno == EINTR); if (writtenBytes < 0) { switch (errno) { @@ -882,13 +893,13 @@ } ssize_t r = 0; - do { #ifdef Q_OS_SYMBIAN - r = ::read(socketDescriptor, data, maxSize); + r = ::read(socketDescriptor, data, maxSize); #else + do { r = qt_safe_read(socketDescriptor, data, maxSize); + } while (r == -1 && errno == EINTR); #endif - } while (r == -1 && errno == EINTR); if (r < 0) { r = -1; diff -r 3f74d0d4af4c -r 740e5562c97f src/openvg/openvg.pro --- a/src/openvg/openvg.pro Thu Apr 08 14:19:33 2010 +0300 +++ b/src/openvg/openvg.pro Fri Apr 16 11:39:52 2010 +0300 @@ -33,7 +33,7 @@ qwindowsurface_vgegl.cpp } -symbian: DEFINES += QVG_RECREATE_ON_SIZE_CHANGE QVG_SCISSOR_CLIP +symbian: DEFINES += QVG_RECREATE_ON_SIZE_CHANGE QVG_SCISSOR_CLIP QVG_BUFFER_SCROLLING include(../qbase.pri) diff -r 3f74d0d4af4c -r 740e5562c97f src/openvg/qwindowsurface_vg.cpp --- a/src/openvg/qwindowsurface_vg.cpp Thu Apr 08 14:19:33 2010 +0300 +++ b/src/openvg/qwindowsurface_vg.cpp Fri Apr 16 11:39:52 2010 +0300 @@ -57,6 +57,7 @@ { // Create the default type of EGL window surface for windows. d_ptr = new QVGEGLWindowSurfaceDirect(this); + setStaticContentsSupport(d_ptr->supportsStaticContents()); } QVGWindowSurface::QVGWindowSurface @@ -89,7 +90,9 @@ bool QVGWindowSurface::scroll(const QRegion &area, int dx, int dy) { - return QWindowSurface::scroll(area, dx, dy); + if (!d_ptr->scroll(window(), area, dx, dy)) + return QWindowSurface::scroll(area, dx, dy); + return true; } void QVGWindowSurface::beginPaint(const QRegion ®ion) diff -r 3f74d0d4af4c -r 740e5562c97f src/openvg/qwindowsurface_vgegl.cpp --- a/src/openvg/qwindowsurface_vgegl.cpp Thu Apr 08 14:19:33 2010 +0300 +++ b/src/openvg/qwindowsurface_vgegl.cpp Fri Apr 16 11:39:52 2010 +0300 @@ -659,6 +659,7 @@ #endif windowSurface = context->createSurface(widget, &surfaceProps); isPaintingActive = false; + needToSwap = true; } #else if (context && size != newSize) { @@ -710,20 +711,21 @@ needToSwap = false; } #endif -#if !defined(QVG_NO_PRESERVED_SWAP) - // Try to force the surface back buffer to preserve its contents. - if (needToSwap) { - eglGetError(); // Clear error state first. - eglSurfaceAttrib(QEglContext::display(), surface, - EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED); - if (eglGetError() != EGL_SUCCESS) { - qWarning("QVG: could not enable preserved swap"); - } - } -#endif windowSurface = surface; isPaintingActive = false; } + +#if !defined(QVG_NO_PRESERVED_SWAP) + // Try to force the surface back buffer to preserve its contents. + if (needToSwap) { + eglGetError(); // Clear error state first. + eglSurfaceAttrib(QEglContext::display(), windowSurface, + EGL_SWAP_BEHAVIOR, EGL_BUFFER_PRESERVED); + if (eglGetError() != EGL_SUCCESS) { + qWarning("QVG: could not enable preserved swap"); + } + } +#endif return context; } @@ -756,6 +758,33 @@ } } +bool QVGEGLWindowSurfaceDirect::supportsStaticContents() const +{ +#if defined(QVG_BUFFER_SCROLLING) && !defined(QVG_NO_PRESERVED_SWAP) + return true; +#else + return QVGEGLWindowSurfacePrivate::supportsStaticContents(); +#endif +} + +bool QVGEGLWindowSurfaceDirect::scroll(QWidget *widget, const QRegion& area, int dx, int dy) +{ +#ifdef QVG_BUFFER_SCROLLING + QEglContext *context = ensureContext(widget); + if (context) { + context->makeCurrent(windowSurface); + QRect scrollRect = area.boundingRect(); + int sx = scrollRect.x(); + int sy = size.height() - scrollRect.y() - scrollRect.height(); + vgSeti(VG_SCISSORING, VG_FALSE); + vgCopyPixels(sx + dx, sy - dy, sx, sy, scrollRect.width(), scrollRect.height()); + context->lazyDoneCurrent(); + return true; + } +#endif + return false; +} + QT_END_NAMESPACE #endif diff -r 3f74d0d4af4c -r 740e5562c97f src/openvg/qwindowsurface_vgegl_p.h --- a/src/openvg/qwindowsurface_vgegl_p.h Thu Apr 08 14:19:33 2010 +0300 +++ b/src/openvg/qwindowsurface_vgegl_p.h Fri Apr 16 11:39:52 2010 +0300 @@ -77,6 +77,8 @@ (QWidget *widget, const QRegion& region, QImage *image = 0) = 0; virtual VGImage surfaceImage() const; virtual QSize surfaceSize() const = 0; + virtual bool supportsStaticContents() const { return false; } + virtual bool scroll(QWidget *, const QRegion&, int, int) { return false; } private: QVGPaintEngine *engine; @@ -128,6 +130,8 @@ void beginPaint(QWidget *widget); void endPaint(QWidget *widget, const QRegion& region, QImage *image); QSize surfaceSize() const { return size; } + bool supportsStaticContents() const; + bool scroll(QWidget *widget, const QRegion& area, int dx, int dy); protected: QEglContext *context;