/*!
    To be called from the PixmapData's paintEngine().
  */
QPaintEngine *QVolatileImage::paintEngine()
{
    if (!d->pengine) {
        d->pengine = new QVolatileImagePaintEngine(&imageRef(), this);
    }
    return d->pengine;
}
void QVolatileImage::fill(uint pixelValue)
{
    beginDataAccess();
    imageRef().fill(pixelValue);
    endDataAccess();
    d->ensureImage();
}
void QVolatileImage::copyFrom(QVolatileImage *source, const QRect &rect)
{
    if (source->isNull()) {
        return;
    }
    QRect r = rect;
    if (rect.isNull()) {
        r = QRect(0, 0, source->width(), source->height());
    }
    source->beginDataAccess();
    QImage &srcImgRef(source->imageRef());
    int srcbpl = srcImgRef.bytesPerLine();
    int srcbpp = srcImgRef.depth() / 8;
    const uchar *sptr = srcImgRef.constBits() + r.y() * srcbpl;
    beginDataAccess();
    QImage &dstImgRef(imageRef());
    if (!dstImgRef.isNull()) {
        int dstbpl = dstImgRef.bytesPerLine();
        uchar *dptr = dstImgRef.bits();
        for (int y = 0; y < r.height(); ++y) {
            qMemCopy(dptr, sptr + r.x() * srcbpp, r.width() * srcbpp);
            sptr += srcbpl;
            dptr += dstbpl;
        }
    }
    endDataAccess();
    source->endDataAccess(true);
}
void QVolatileImage::setAlphaChannel(const QPixmap &alphaChannel)
{
    ensureFormat(QImage::Format_ARGB32_Premultiplied);
    beginDataAccess();
    imageRef().setAlphaChannel(alphaChannel.toImage());
    endDataAccess();
    d->ensureImage();
}
Esempio n. 5
0
void LayerTreeHostProxy::updateTile(WebLayerID layerID, int tileID, const IntRect& sourceRect, const IntRect& targetRect, const QImage& image)
{
    ensureLayer(layerID);
    TextureMapperNode* node = toTextureMapperNode(layerByID(layerID));
    if (!node)
        return;

    int nodeTileID = remoteTileIDToNodeTileID(tileID);
    if (!nodeTileID)
        return;

    QImage imageRef(image);
    node->setTextureMapper(m_textureMapper.get());
    node->setContentsTileBackBuffer(nodeTileID, sourceRect, targetRect, imageRef.bits(), BitmapTexture::BGRAFormat);
}