summaryrefslogtreecommitdiffstats
path: root/src/plugins/graphicssystems/blittable/qblittable_image.h
diff options
context:
space:
mode:
authorPaul Olav Tvete <paul.tvete@nokia.com>2010-07-19 12:32:08 (GMT)
committerPaul Olav Tvete <paul.tvete@nokia.com>2010-07-19 12:32:08 (GMT)
commit680e7b8fb3b675842a69fb65024942fe838a8dd2 (patch)
treed1b588e71a6e9dea60f006fb1110be66a69093e8 /src/plugins/graphicssystems/blittable/qblittable_image.h
parentdf6549d1b95af017305744af04a7bb3b10025660 (diff)
parente97e3616a33ed93283157514c6b208e071aca8be (diff)
downloadQt-680e7b8fb3b675842a69fb65024942fe838a8dd2.zip
Qt-680e7b8fb3b675842a69fb65024942fe838a8dd2.tar.gz
Qt-680e7b8fb3b675842a69fb65024942fe838a8dd2.tar.bz2
Merge remote branch 'remotes/lighthouse/4.7' into lighthouse-master
Conflicts: src/opengl/qgl_p.h
Diffstat (limited to 'src/plugins/graphicssystems/blittable/qblittable_image.h')
-rw-r--r--src/plugins/graphicssystems/blittable/qblittable_image.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/plugins/graphicssystems/blittable/qblittable_image.h b/src/plugins/graphicssystems/blittable/qblittable_image.h
new file mode 100644
index 0000000..3f8dc69
--- /dev/null
+++ b/src/plugins/graphicssystems/blittable/qblittable_image.h
@@ -0,0 +1,48 @@
+#include <qimage.h>
+
+#include <private/qblittable_p.h>
+
+
+class QImageBlittable : public QBlittable
+{
+public:
+ QImageBlittable(QImage *image, bool deleteImage)
+ : QBlittable(image->size(), QBlittable::Capabilities(QBlittable::SolidRectCapability
+ |QBlittable::SourcePixmapCapability
+ |QBlittable::SourceOverPixmapCapability
+ |QBlittable::SourceOverScaledPixmapCapability)),
+ m_image(image), m_deleteImage(deleteImage)
+ {
+
+ }
+
+ ~QImageBlittable() {
+ if (m_deleteImage)
+ delete m_image;
+ }
+
+ void fillRect(const QRectF &rect, const QColor &color)
+ {
+ QPainter p(lock());
+ p.fillRect(rect,color);
+ }
+ void drawPixmap(const QRectF &rect, const QPixmap &pixmap, const QRectF &source)
+ {
+ //here it is possible to do a pixmap.pixmapData()->buffer()
+ //but is like this to show how to get the the blitter
+ QPixmapData *data = pixmap.pixmapData();
+ Q_ASSERT(data->width() && data->height());
+ Q_ASSERT(data->classId() == QPixmapData::BlitterClass);
+ QBlittablePixmapData *blittableData = static_cast<QBlittablePixmapData*>(data);
+
+ QPainter p(lock());
+ p.drawImage(rect, *blittableData->blittable()->lock(),source);
+ }
+
+protected:
+ QImage *doLock() { return m_image; }
+ void doUnlock() { }
+private:
+ QImage *m_image;
+ bool m_deleteImage;
+};