diff -r 5dc02b23752f -r 3e2da88830cd src/gui/painting/qwindowsurface_s60.cpp --- a/src/gui/painting/qwindowsurface_s60.cpp Tue Jul 06 15:10:48 2010 +0300 +++ b/src/gui/painting/qwindowsurface_s60.cpp Wed Aug 18 10:37:55 2010 +0300 @@ -43,10 +43,15 @@ #include #include -#include "qwindowsurface_s60_p.h" +#include #include #include -#include "private/qdrawhelper_p.h" +#include +#include + +#ifdef QT_GRAPHICSSYSTEM_RUNTIME +#include +#endif QT_BEGIN_NAMESPACE @@ -62,10 +67,16 @@ TDisplayMode mode = S60->screenDevice()->DisplayMode(); bool isOpaque = qt_widget_private(widget)->isOpaque; - if (mode == EColor16MA && isOpaque) + if (mode == EColor16MA && isOpaque) { mode = EColor16MU; // Faster since 16MU -> 16MA is typically accelerated - else if (mode == EColor16MU && !isOpaque) - mode = EColor16MA; // Try for transparency anyway + } else if (mode == EColor16MU && !isOpaque) { + if (QSysInfo::symbianVersion() >= QSysInfo::SV_SF_3) + mode = Q_SYMBIAN_ECOLOR16MAP; // Symbian^3 has hw support for ARGB32_PRE + else + mode = EColor16MA; // Symbian prior to Symbian^3 sw accelerates EColor16MA + } else if (QSysInfo::symbianVersion() >= QSysInfo::SV_SF_3 && !isOpaque) { + mode = Q_SYMBIAN_ECOLOR16MAP; // Symbian^3 has hw support for ARGB32_PRE + } // We create empty CFbsBitmap here -> it will be resized in setGeometry CFbsBitmap *bitmap = q_check_ptr(new CFbsBitmap); // CBase derived object needs check on new @@ -79,13 +90,35 @@ setStaticContentsSupport(true); } + QS60WindowSurface::~QS60WindowSurface() { +#if defined(QT_GRAPHICSSYSTEM_RUNTIME) && defined(Q_SYMBIAN_SUPPORTS_SURFACES) + if(QApplicationPrivate::runtime_graphics_system) { + QRuntimeGraphicsSystem *runtimeGraphicsSystem = + static_cast(QApplicationPrivate::graphics_system); + if(runtimeGraphicsSystem->graphicsSystemName() == QLatin1String("openvg")) { + + // Graphics system has been switched from raster to openvg. + // Issue empty redraw to clear the UI surface + + QWidget *w = window(); + RWindow *const window = static_cast(w->winId()->DrawableWindow()); + window->BeginRedraw(); + window->EndRedraw(); + } + } +#endif + delete d_ptr; } void QS60WindowSurface::beginPaint(const QRegion &rgn) { +#ifdef Q_SYMBIAN_SUPPORTS_SURFACES + S60->wsSession().Finish(); +#endif + if (!qt_widget_private(window())->isOpaque) { QS60PixmapData *pixmapData = static_cast(d_ptr->device.data_ptr().data()); pixmapData->beginDataAccess();