static inline void scrollSurface(IDirectFBSurface *surface, const QRect &r, int dx, int dy) { const DFBRectangle rect = { r.x(), r.y(), r.width(), r.height() }; surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy); const DFBRegion region = { rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy }; surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT)); }
void QDirectFbBackingStore::flush(QWindow *, const QRegion ®ion, const QPoint &offset) { m_pmdata->blittable()->unlock(); QVector<QRect> rects = region.rects(); for (int i = 0 ; i < rects.size(); i++) { const QRect rect = rects.at(i); DFBRegion dfbReg = { rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y()}; m_dfbSurface->Flip(m_dfbSurface.data(), &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC)); } }
int main(int argc, char **argv) { argc = 2; argv[1] = "--dfb:vt-num=1,quiet"; DFBSurfaceDescription dsc; DFBCHECK(DirectFBInit (&argc, &argv)); DFBCHECK(DirectFBCreate (&dfb)); DFBCHECK(dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN)); dsc.flags = DSDESC_CAPS; dsc.caps = DFBSurfaceCapabilities(DSCAPS_PRIMARY | DSCAPS_FLIPPING); DFBCHECK(dfb->CreateSurface( dfb, &dsc, &primary )); DFBCHECK(primary->GetSize (primary, &screen_width, &screen_height)); DFBCHECK(primary->FillRectangle (primary, 0, 0, screen_width, screen_height)); DFBCHECK(primary->SetColor (primary, 0x80, 0x80, 0xff, 0xff)); DFBCHECK(primary->DrawLine (primary, 0, screen_height / 2, screen_width - 1, screen_height / 2)); primary->Flip(primary, NULL, DFBSurfaceFlipFlags(0)); //sleep(5); primary->Release(primary); dfb->Release(dfb); return 23; }