17 : QPlatformBackingStore(window), m_pixmap(0), m_pmdata(0)
19 IDirectFBWindow *dfbWindow =
static_cast<QDirectFbWindow *>(window->handle())->dfbWindow();
20 dfbWindow->GetSurface(dfbWindow, m_dfbSurface.outPtr());
23 QDirectFbBlitter *blitter =
new QDirectFbBlitter(window->size(), m_dfbSurface.data());
24 m_pmdata =
new QDirectFbBlitterPlatformPixmap;
25 m_pmdata->setBlittable(blitter);
26 m_pixmap.reset(
new QPixmap(m_pmdata));
36 m_pmdata->blittable()->unlock();
38 for (
const QRect &rect : region) {
39 DFBRegion dfbReg(rect.x() + offset.x(),rect.y() + offset.y(),rect.right() + offset.x(),rect.bottom() + offset.y());
40 m_dfbSurface->Flip(m_dfbSurface.data(), &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC));
56static inline void scrollSurface(IDirectFBSurface *surface,
const QRect &r,
int dx,
int dy)
58 const DFBRectangle rect(r.x(), r.y(), r.width(), r.height());
59 surface->Blit(surface, surface, &rect, r.x() + dx, r.y() + dy);
60 const DFBRegion region(rect.x + dx, rect.y + dy, r.right() + dx, r.bottom() + dy);
61 surface->Flip(surface, ®ion, DFBSurfaceFlipFlags(DSFLIP_BLIT));
66 m_pmdata->blittable()->unlock();
68 if (!m_dfbSurface || area.isEmpty())
70 m_dfbSurface->SetBlittingFlags(m_dfbSurface.data(), DSBLIT_NOFX);
71 if (area.rectCount() == 1) {
72 scrollSurface(m_dfbSurface.data(), area.boundingRect(), dx, dy);
74 for (
const QRect &rect : area)
75 scrollSurface(m_dfbSurface.data(), rect, dx, dy);