From aa8865b37520cf591ae795895f4a38d5ad86c17a Mon Sep 17 00:00:00 2001 From: Anders Bakken Date: Mon, 28 Sep 2009 18:37:25 -0700 Subject: 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 --- src/plugins/gfxdrivers/directfb/qdirectfbpixmap.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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); -- cgit v0.12