summaryrefslogtreecommitdiffstats
path: root/src/gui/styles/qs60style_s60.cpp
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2011-03-11 02:13:18 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2011-03-11 02:13:18 (GMT)
commit57ce4cba0747d31075d9479c06070dd8aac2b7de (patch)
treee8f44ce1d7ecb5d22212ad5989df4d2759ba22ff /src/gui/styles/qs60style_s60.cpp
parent3c0a4a16fa857fcf6ec89ef6e3376b262eaeca62 (diff)
parentb18bd68dd05f000c65e33a975bca6bf24dabb8d3 (diff)
downloadQt-57ce4cba0747d31075d9479c06070dd8aac2b7de.zip
Qt-57ce4cba0747d31075d9479c06070dd8aac2b7de.tar.gz
Qt-57ce4cba0747d31075d9479c06070dd8aac2b7de.tar.bz2
Merge branch '4.7' of git://scm.dev.nokia.troll.no/qt/qt-water-team
* '4.7' of git://scm.dev.nokia.troll.no/qt/qt-water-team: (265 commits) Partial update window surfaces always need a repaint before flush. Fix for misplaced endif in qglobal.h. Implement language fallback logic for localize_deployment Added missing ifdefs to allow compilation on older Symbian versions. Multiple screen support for Symbian in QDeskopWidget. Adding quote around files in QMAKE_CLEAN to tackle wildcard issue Bump Qt version to 4.7.3 Fix unstable qdeclarativeflickable test. Added native image handle provider header. Fix possible bearer management Crash with Panic E32USER-CBase, 69 Added native image handle provider support in pixmaps on openvg. Correcting incorrect ordinal introduced by the split view changes. Support partial input mode Update TextEdit's visible selection when only the anchor changes. Fixed memory leak in GL texture cache with QRuntimePixmapData. Avoid compiler warnings in openvg on win32. Updated def files with new QVGPixmapData function. VGImage readback support in QPixmap on OpenVG. Invalidate the EGL surface of QMeeGoLivePixmapData when switching to Raster QNetworkCookie: fix quoted values ...
Diffstat (limited to 'src/gui/styles/qs60style_s60.cpp')
-rw-r--r--src/gui/styles/qs60style_s60.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/gui/styles/qs60style_s60.cpp b/src/gui/styles/qs60style_s60.cpp
index 605872e..600c631 100644
--- a/src/gui/styles/qs60style_s60.cpp
+++ b/src/gui/styles/qs60style_s60.cpp
@@ -47,6 +47,7 @@
#include "private/qt_s60_p.h"
#include "private/qpixmap_s60_p.h"
#include "private/qcore_symbian_p.h"
+#include "private/qvolatileimage_p.h"
#include "qapplication.h"
#include "qsettings.h"
@@ -637,9 +638,22 @@ QPixmap QS60StyleModeSpecifics::fromFbsBitmap(CFbsBitmap *icon, CFbsBitmap *mask
if (error)
return QPixmap();
- QPixmap pixmap = QPixmap::fromSymbianCFbsBitmap(icon);
- if (mask)
- pixmap.setAlphaChannel(QPixmap::fromSymbianCFbsBitmap(mask));
+ QPixmap pixmap;
+ QScopedPointer<QPixmapData> pd(QPixmapData::create(0, 0, QPixmapData::PixmapType));
+ bool nativeMaskSupported = (pd->toNativeType(QPixmapData::VolatileImage) != 0);
+ if (mask && nativeMaskSupported) {
+ // Efficient path, less copying and conversion.
+ QVolatileImage img(icon, mask);
+ pd->fromNativeType(&img, QPixmapData::VolatileImage);
+ pixmap = QPixmap(pd.take());
+ } else {
+ // Potentially more expensive path.
+ pd->fromNativeType(icon, QPixmapData::FbsBitmap);
+ pixmap = QPixmap(pd.take());
+ if (mask) {
+ pixmap.setAlphaChannel(QPixmap::fromSymbianCFbsBitmap(mask));
+ }
+ }
if ((flags & QS60StylePrivate::SF_PointEast) ||
(flags & QS60StylePrivate::SF_PointSouth) ||
@@ -795,6 +809,8 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(
rotatedBy90or270 ? TSize(size.height(), size.width()) : qt_QSize2TSize(size);
MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+ static const TDisplayMode displayMode = S60->supportsPremultipliedAlpha ? Q_SYMBIAN_ECOLOR16MAP : EColor16MA;
+ static const TInt drawParam = S60->supportsPremultipliedAlpha ? KAknsDrawParamDefault : KAknsDrawParamRGBOnly;
QPixmap result;
@@ -833,7 +849,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(
// QS60WindowSurface::unlockBitmapHeap();
CFbsBitmap *background = new (ELeave) CFbsBitmap(); //offscreen
CleanupStack::PushL(background);
- User::LeaveIfError(background->Create(targetSize, EColor16MA));
+ User::LeaveIfError(background->Create(targetSize, displayMode));
CFbsBitmapDevice *dev = CFbsBitmapDevice::NewL(background);
CleanupStack::PushL(dev);
@@ -854,7 +870,7 @@ QPixmap QS60StyleModeSpecifics::createSkinnedGraphicsLX(
*gc,
TPoint(),
targetSize,
- KAknsDrawParamDefault | KAknsDrawParamRGBOnly);
+ drawParam);
if (drawn)
result = fromFbsBitmap(background, NULL, flags, targetSize);