summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAnders Bakken <anders.bakken@nokia.com>2009-09-29 01:37:25 (GMT)
committerAnders Bakken <anders.bakken@nokia.com>2009-09-29 01:45:40 (GMT)
commitaa8865b37520cf591ae795895f4a38d5ad86c17a (patch)
tree06ab5e687309a7a33f626f1e2a50c48aa49a8a01
parentb88817e481f2cc2aea0787fe355659b581599abb (diff)
downloadQt-aa8865b37520cf591ae795895f4a38d5ad86c17a.zip
Qt-aa8865b37520cf591ae795895f4a38d5ad86c17a.tar.gz
Qt-aa8865b37520cf591ae795895f4a38d5ad86c17a.tar.bz2
Fix a alpha issue with RGB32 and DirectFB
Since we can't use RGB32 format with DirectFB (issues regarding Qt's assumptions about the alpha byte) we need to explicitly convert images of this type to the preferred alphaPixmap format. This fixes an issue where RGB32 images get a curious gray alpha overlay. Reviewed-by: Noam Rosenthal <noam.rosenthal@nokia.com>
-rw-r--r--src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp5
1 files changed, 4 insertions, 1 deletions
diff --git a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
index ce9a55c..b15888b 100644
--- a/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
+++ b/src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp
@@ -288,7 +288,7 @@ bool QDirectFBPixmapData::fromDataBufferDescription(const DFBDataBufferDescripti
void QDirectFBPixmapData::fromImage(const QImage &img,
Qt::ImageConversionFlags flags)
{
- if (img.depth() == 1) {
+ if (img.depth() == 1 || img.format() == QImage::Format_RGB32) {
fromImage(img.convertToFormat(screen->alphaPixmapFormat()), flags);
return;
}
@@ -308,6 +308,8 @@ void QDirectFBPixmapData::fromImage(const QImage &img,
if (flags != Qt::AutoColor) {
image = img.convertToFormat(imageFormat, flags);
flags = Qt::AutoColor;
+ } else if (img.format() == QImage::Format_RGB32) {
+ image = img.convertToFormat(imageFormat, flags);
} else {
image = img;
}
@@ -332,6 +334,7 @@ void QDirectFBPixmapData::fromImage(const QImage &img,
} else {
dfbSurface->SetBlittingFlags(dfbSurface, DSBLIT_NOFX);
}
+
dfbSurface->Blit(dfbSurface, imageSurface, 0, 0, 0);
imageSurface->Release(imageSurface);