summaryrefslogtreecommitdiffstats
path: root/src/gui/image/qpixmap_blitter.cpp
diff options
context:
space:
mode:
authorJørgen Lind <jorgen.lind@nokia.com>2010-01-12 14:38:18 +0100
committerJørgen Lind <jorgen.lind@nokia.com>2010-01-12 14:38:18 +0100
commit645f29c727f33cc9f8b00b8efcb658a050ac6a26 (patch)
treedf5329576ec233eebb9cc43eec36a8726cf5ea35 /src/gui/image/qpixmap_blitter.cpp
parent4bbbbbcd60d621af0a80926d29a87f061a50ff85 (diff)
Fix QBlittablePixmapData::fromImage
Diffstat (limited to 'src/gui/image/qpixmap_blitter.cpp')
-rw-r--r--src/gui/image/qpixmap_blitter.cpp25
1 files changed, 21 insertions, 4 deletions
diff --git a/src/gui/image/qpixmap_blitter.cpp b/src/gui/image/qpixmap_blitter.cpp
index b2bb674733..5ce7fc1e04 100644
--- a/src/gui/image/qpixmap_blitter.cpp
+++ b/src/gui/image/qpixmap_blitter.cpp
@@ -102,10 +102,27 @@ void QBlittablePixmapData::fromImage(const QImage &image,
Qt::ImageConversionFlags flags)
{
resize(image.width(),image.height());
- QImage *thisImg = blittable()->lock();
- QPainter p(thisImg);
- p.setCompositionMode(QPainter::CompositionMode_Source);
- p.drawImage(0,0,image,flags);
+ QImage *thisImg = buffer();
+
+ QImage correctFormatPic = image;
+ if (correctFormatPic.format() != thisImg->format())
+ correctFormatPic = correctFormatPic.convertToFormat(thisImg->format(), flags);
+
+ //jl: This does not ALWAYS work as expected :(
+// QPainter p(thisImg);
+// p.setCompositionMode(QPainter::CompositionMode_Source);
+// p.drawImage(0,0,image,flags);
+
+ //So just copy strides by hand
+ uchar *mem = thisImg->bits();
+ const uchar *bits = correctFormatPic.bits();
+ int bytesCopied = 0;
+ while (bytesCopied < correctFormatPic.byteCount()) {
+ memcpy(mem,bits,correctFormatPic.bytesPerLine());
+ mem += thisImg->bytesPerLine();
+ bits += correctFormatPic.bytesPerLine();
+ bytesCopied+=correctFormatPic.bytesPerLine();
+ }
}
QPaintEngine *QBlittablePixmapData::paintEngine() const