summaryrefslogtreecommitdiffstats
path: root/src/gui/image/qpixmap_blitter.cpp
blob: 9730ecc7dcb32b8dd524648ca94752ab77ddb7a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include "qpixmap_blitter_p.h"

#include <private/qapplication_p.h>
#include <private/qgraphicssystem_p.h>

QBlittablePixmapData::QBlittablePixmapData(PixelType type)
    : QPixmapData(type,BlitterClass), m_blittable(0), m_engine(0)
{
}

QBlittablePixmapData::~QBlittablePixmapData()
{
}

void QBlittablePixmapData::resize(int width, int height)
{
    delete m_blittable;
    m_blittable = QApplicationPrivate::graphicsSystem()->createBlittable(QRect(0,0,width,height));
    m_engine = 0;
}

int QBlittablePixmapData::metric(QPaintDevice::PaintDeviceMetric metric) const
{
    QImage *image = m_blittable->lock();
    return image->metric(metric);
}

void QBlittablePixmapData::fill(const QColor &color)
{
    if (m_blittable->capabilities() & QBlittable::SolidRectCapability)
        m_blittable->fillRect(m_blittable->rect(),color);
    else
        m_blittable->lock()->fill(color.rgb());
}

QImage *QBlittablePixmapData::buffer()
{
    return m_blittable->lock();
}

QImage QBlittablePixmapData::toImage()
{
    return m_blittable->lock()->copy();
}

bool QBlittablePixmapData::hasAlphaChannel()
{
    return m_blittable->lock()->hasAlphaChannel();
}

void QBlittablePixmapData::fromImage(const QImage &image,
                                     Qt::ImageConversionFlags flags)
{
    m_blittable = new QImageBlitter(image);
    m_engine = 0;
}

QPaintEngine *QBlittablePixmapData::paintEngine() const
{
    if (!m_engine) {
        QBlittablePixmapData *that = const_cast<QBlittablePixmapData *>(this);
        that->m_engine = new QBlitterPaintEngine(that);
    }
    return m_engine;
}