summaryrefslogtreecommitdiffstats
path: root/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <holger@moiji-mobile.com>2011-09-19 00:57:45 +0200
committerQt by Nokia <qt-info@nokia.com>2011-10-21 16:54:45 +0200
commit500dc2a6f888e283c6d40730bdf7c2998ee0437b (patch)
treeeb1803d6ac87fb68f211fb2ffadd59cff805c0dc /src/plugins/platforms/directfb/qdirectfbbackingstore.cpp
parent405894fc39cdab937c38b917adf4e8d390f80790 (diff)
[directfb] Introduce the QDirectFBPointer from QWS/gfxdrivers
Introduce QDirectFBPointer and use it throughout the code to fix various resource leaks in the DirectFB backend. Fix the surface ownership of the IDirectFBSurface in the Blittable/BackingStore code. Change-Id: I0d4572eaab80b3558e644f26d76222461bf37bbb Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Diffstat (limited to 'src/plugins/platforms/directfb/qdirectfbbackingstore.cpp')
-rw-r--r--src/plugins/platforms/directfb/qdirectfbbackingstore.cpp24
1 files changed, 11 insertions, 13 deletions
diff --git a/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp b/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp
index b20c9f0d0d..a45a577ef9 100644
--- a/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp
+++ b/src/plugins/platforms/directfb/qdirectfbbackingstore.cpp
@@ -50,19 +50,19 @@
QT_BEGIN_NAMESPACE
QDirectFbBackingStore::QDirectFbBackingStore(QWindow *window)
- : QPlatformBackingStore(window), m_pixmap(0), m_pmdata(0), m_dfbSurface(0)
+ : QPlatformBackingStore(window), m_pixmap(0), m_pmdata(0)
{
- IDirectFBDisplayLayer *layer = QDirectFbConvenience::dfbDisplayLayer();
+ QDirectFBPointer<IDirectFBDisplayLayer> layer(QDirectFbConvenience::dfbDisplayLayer());
DFBWindowID id(window->winId());
- IDirectFBWindow *dfbWindow;
+ QDirectFBPointer<IDirectFBWindow> dfbWindow;
- layer->GetWindow(layer,id,&dfbWindow);
+ layer->GetWindow(layer.data(), id, dfbWindow.outPtr());
- dfbWindow->GetSurface(dfbWindow,&m_dfbSurface);
+ dfbWindow->GetSurface(dfbWindow.data(), m_dfbSurface.outPtr());
//WRONGSIZE
- QDirectFbBlitter *blitter = new QDirectFbBlitter(window->size(), m_dfbSurface);
+ QDirectFbBlitter *blitter = new QDirectFbBlitter(window->size(), m_dfbSurface.data());
m_pmdata = new QDirectFbBlitterPlatformPixmap;
m_pmdata->setBlittable(blitter);
m_pixmap.reset(new QPixmap(m_pmdata));
@@ -81,15 +81,13 @@ void QDirectFbBackingStore::flush(QWindow *, const QRegion &region, const QPoint
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, &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC));
+ m_dfbSurface->Flip(m_dfbSurface.data(), &dfbReg, DFBSurfaceFlipFlags(DSFLIP_BLIT|DSFLIP_ONSYNC));
}
}
void QDirectFbBackingStore::resize(const QSize &size, const QRegion& reg)
{
- //Have to add 1 ref ass it will be removed by deleting the old blitter in setBlittable
- m_dfbSurface->AddRef(m_dfbSurface);
- QDirectFbBlitter *blitter = new QDirectFbBlitter(size,m_dfbSurface);
+ QDirectFbBlitter *blitter = new QDirectFbBlitter(size, m_dfbSurface.data());
m_pmdata->setBlittable(blitter);
}
@@ -107,14 +105,14 @@ bool QDirectFbBackingStore::scroll(const QRegion &area, int dx, int dy)
if (!m_dfbSurface || area.isEmpty())
return false;
- m_dfbSurface->SetBlittingFlags(m_dfbSurface, DSBLIT_NOFX);
+ m_dfbSurface->SetBlittingFlags(m_dfbSurface.data(), DSBLIT_NOFX);
if (area.rectCount() == 1) {
- scrollSurface(m_dfbSurface, area.boundingRect(), dx, dy);
+ scrollSurface(m_dfbSurface.data(), area.boundingRect(), dx, dy);
} else {
const QVector<QRect> rects = area.rects();
const int n = rects.size();
for (int i=0; i<n; ++i) {
- scrollSurface(m_dfbSurface, rects.at(i), dx, dy);
+ scrollSurface(m_dfbSurface.data(), rects.at(i), dx, dy);
}
}
return true;