summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTrond Kjernaasen <trond@trolltech.com>2009-03-30 11:08:21 (GMT)
committerTrond Kjernaasen <trond@trolltech.com>2009-03-30 11:12:32 (GMT)
commit2bc824dde1033ae01f618a3ff534ba26d7a628af (patch)
treebce28b773ad457ec6325d59919a170e185f3cc45
parentdcdafbcb132341bb22b6159f0f1dea1ef00f7c18 (diff)
downloadQt-2bc824dde1033ae01f618a3ff534ba26d7a628af.zip
Qt-2bc824dde1033ae01f618a3ff534ba26d7a628af.tar.gz
Qt-2bc824dde1033ae01f618a3ff534ba26d7a628af.tar.bz2
Fix draImage() calls for threaded printing to a PostScript printer.
QPicture didn't have an implementation for drawImage(). All images were converted to QPixmaps before they were drawn. Task-number: 249322 Reviewed-by: Gunnar Sletta
-rw-r--r--src/gui/image/qpaintengine_pic.cpp21
-rw-r--r--src/gui/image/qpaintengine_pic_p.h2
-rw-r--r--src/gui/image/qpicture.cpp16
-rw-r--r--src/gui/image/qpicture_p.h1
4 files changed, 35 insertions, 5 deletions
diff --git a/src/gui/image/qpaintengine_pic.cpp b/src/gui/image/qpaintengine_pic.cpp
index cba9827..a130a1a 100644
--- a/src/gui/image/qpaintengine_pic.cpp
+++ b/src/gui/image/qpaintengine_pic.cpp
@@ -346,7 +346,7 @@ void QPicturePaintEngine::writeCmdLength(int pos, const QRectF &r, bool corr)
if (corr) { // widen bounding rect
int w2 = painter()->pen().width() / 2;
br.setCoords(br.left() - w2, br.top() - w2,
- br.right() + w2, br.bottom() + w2);
+ br.right() + w2, br.bottom() + w2);
}
br = painter()->transform().mapRect(br);
if (painter()->hasClipping()) {
@@ -458,6 +458,25 @@ void QPicturePaintEngine::drawTiledPixmap(const QRectF &r, const QPixmap &pixmap
writeCmdLength(pos, r, false);
}
+void QPicturePaintEngine::drawImage(const QRectF &r, const QImage &image, const QRectF &sr,
+ Qt::ImageConversionFlags flags)
+{
+ Q_D(QPicturePaintEngine);
+#ifdef QT_PICTURE_DEBUG
+ qDebug() << " -> drawImage():" << r << sr;
+#endif
+ int pos;
+ SERIALIZE_CMD(QPicturePrivate::PdcDrawImage);
+ if (d->pic_d->in_memory_only) {
+ int index = d->pic_d->image_list.size();
+ d->pic_d->image_list.append(image);
+ d->s << r << index << sr << (quint32) flags;
+ } else {
+ d->s << r << image << sr << (quint32) flags;
+ }
+ writeCmdLength(pos, r, false);
+}
+
extern int qt_defaultDpi();
void QPicturePaintEngine::drawTextItem(const QPointF &p , const QTextItem &ti)
diff --git a/src/gui/image/qpaintengine_pic_p.h b/src/gui/image/qpaintengine_pic_p.h
index 3ae0845..745d057 100644
--- a/src/gui/image/qpaintengine_pic_p.h
+++ b/src/gui/image/qpaintengine_pic_p.h
@@ -100,6 +100,8 @@ public:
void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr);
void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s);
+ void drawImage(const QRectF &r, const QImage &image, const QRectF &sr,
+ Qt::ImageConversionFlags flags = Qt::AutoColor);
void drawTextItem(const QPointF &p, const QTextItem &ti);
Type type() const { return Picture; }
diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp
index d5d7cb0..92023e0 100644
--- a/src/gui/image/qpicture.cpp
+++ b/src/gui/image/qpicture.cpp
@@ -759,13 +759,21 @@ bool QPicture::exec(QPainter *painter, QDataStream &s, int nrecords)
QImage image;
if (d->formatMajor < 4) {
s >> p >> image;
- painter->drawPixmap(p, QPixmap::fromImage(image));
+ painter->drawImage(p, image);
} else if (d->formatMajor <= 5){
s >> ir >> image;
- painter->drawPixmap(ir, QPixmap::fromImage(image), QRect(0, 0, ir.width(), ir.height()));
+ painter->drawImage(ir, image, QRect(0, 0, ir.width(), ir.height()));
} else {
- s >> r >> image;
- painter->drawPixmap(r, QPixmap::fromImage(image), QRectF(0, 0, r.width(), r.height()));
+ QRectF sr;
+ if (d->in_memory_only) {
+ int index;
+ s >> r >> index >> sr >> ul;
+ Q_ASSERT(index < d->image_list.size());
+ image = d->image_list.at(index);
+ } else {
+ s >> r >> image >> sr >> ul;
+ }
+ painter->drawImage(r, image, sr, Qt::ImageConversionFlags(ul));
}
}
break;
diff --git a/src/gui/image/qpicture_p.h b/src/gui/image/qpicture_p.h
index 1da7f07..a3fd34f 100644
--- a/src/gui/image/qpicture_p.h
+++ b/src/gui/image/qpicture_p.h
@@ -158,6 +158,7 @@ public:
QRect override_rect;
QPaintEngine *paintEngine;
bool in_memory_only;
+ QList<QImage> image_list;
QList<QPixmap> pixmap_list;
QList<QBrush> brush_list;
QList<QPen> pen_list;