Beispiel #1
0
QDirectFBPixmapData::~QDirectFBPixmapData()
{
    unlockDirectFB();
    if (surface)
        surface->Release(surface);
    delete engine;
}
Beispiel #2
0
void QDirectFBPaintDevice::lockDirectFB(uint flags)
{
    if (!(lock & flags)) {
        if (lock)
            unlockDirectFB();
        if ((mem = QDirectFBScreen::lockSurface(dfbSurface, flags, &bpl))) {
            const QSize s = size();
            lockedImage = new QImage(mem, s.width(), s.height(), bpl,
                                     QDirectFBScreen::getImageFormat(dfbSurface));
            lock = flags;
            Q_ASSERT(mem);
        } else {
            lock = 0;
        }
    }
}
Beispiel #3
0
void QDirectFBPixmapData::copy(const QPixmapData *data, const QRect &rect)
{
    if (data->classId() != DirectFBClass) {
        QPixmapData::copy(data, rect);
        return;
    }
    unlockDirectFB();

    IDirectFBSurface *src = static_cast<const QDirectFBPixmapData*>(data)->directFBSurface();
    alpha = data->hasAlphaChannel();
    format = (alpha
              ? QDirectFBScreen::instance()->alphaPixmapFormat()
              : QDirectFBScreen::instance()->pixelFormat());


    dfbSurface = screen->createDFBSurface(rect.size(), format,
                                          QDirectFBScreen::TrackSurface);
    if (!dfbSurface) {
        qWarning("QDirectFBPixmapData::copy()");
        invalidate();
        return;
    }

    if (alpha) {
        dfbSurface->Clear(dfbSurface, 0, 0, 0, 0);
        dfbSurface->SetBlittingFlags(dfbSurface, DSBLIT_BLEND_ALPHACHANNEL);
    } else {
        dfbSurface->SetBlittingFlags(dfbSurface, DSBLIT_NOFX);
    }
    const DFBRectangle blitRect = { rect.x(), rect.y(),
                                    rect.width(), rect.height() };
    DFBResult result = dfbSurface->Blit(dfbSurface, src, &blitRect, 0, 0);
#if (Q_DIRECTFB_VERSION >= 0x010000)
    dfbSurface->ReleaseSource(dfbSurface);
#endif
    if (result != DFB_OK) {
        DirectFBError("QDirectFBPixmapData::copy()", result);
        invalidate();
        return;
    }

    setSerialNumber(++global_ser_no);
}
Beispiel #4
0
QDirectFBPixmapData::~QDirectFBPixmapData()
{
    unlockDirectFB();
    if (dfbSurface && QDirectFBScreen::instance())
        screen->releaseDFBSurface(dfbSurface);
}