diff options
author | Jørgen Lind <jorgen.lind@nokia.com> | 2009-12-16 14:19:45 +0100 |
---|---|---|
committer | Jørgen Lind <jorgen.lind@nokia.com> | 2009-12-16 14:19:45 +0100 |
commit | b2aefe0ff51a2cdb4990eb9bc19cfb044193ed21 (patch) | |
tree | bc51723e815b7cf7b4d8f54e7558d9ca864c2e89 | |
parent | 0447b44246ff46eb273f95b6daf3e7f7de73ca6b (diff) |
Some cleanup and fix popup and tooltip event propagation
8 files changed, 45 insertions, 33 deletions
diff --git a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp index 3c58970c19..a995b0f4c9 100644 --- a/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qblitter_directfb.cpp @@ -76,7 +76,11 @@ QImage *QDirectFbBlitter::doLock() int bpl; const DFBResult result = m_surface->Lock(m_surface, DFBSurfaceLockFlags(DSLF_WRITE|DSLF_READ), static_cast<void**>(&mem), &bpl); if (result == DFB_OK) { - QImage::Format format = QDirectFbConvenience::imageFormatFromSurface(m_surface); + DFBSurfacePixelFormat dfbFormat; + DFBSurfaceCapabilities dfbCaps; + m_surface->GetPixelFormat(m_surface,&dfbFormat); + m_surface->GetCapabilities(m_surface,&dfbCaps); + QImage::Format format = QDirectFbConvenience::imageFormatFromSurfaceFormat(dfbFormat, dfbCaps); int w, h; m_surface->GetSize(m_surface,&w,&h); m_image = QImage(static_cast<uchar *>(mem),w,h,bpl,format); diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp index 63ae2894ad..2bd2f3bda8 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.cpp @@ -2,11 +2,8 @@ IDirectFB *QDirectFbConvenience::dfb = 0; -QImage::Format QDirectFbConvenience::imageFormatFromSurface(IDirectFBSurface *surface) +QImage::Format QDirectFbConvenience::imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps) { - DFBSurfacePixelFormat format; - surface->GetPixelFormat(surface, &format); - switch (format) { case DSPF_LUT8: return QImage::Format_Indexed8; @@ -28,10 +25,6 @@ QImage::Format QDirectFbConvenience::imageFormatFromSurface(IDirectFBSurface *su case DSPF_RGB32: return QImage::Format_RGB32; case DSPF_ARGB: { - DFBSurfaceCapabilities caps; - const DFBResult result = surface->GetCapabilities(surface, &caps); - Q_ASSERT(result == DFB_OK); - Q_UNUSED(result); return (caps & DSCAPS_PREMULTIPLIED ? QImage::Format_ARGB32_Premultiplied : QImage::Format_ARGB32); } diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h index 2f5e10b42b..9c65b1ff8f 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbconvenience.h @@ -17,7 +17,7 @@ public: class QDirectFbConvenience { public: - static QImage::Format imageFormatFromSurface(IDirectFBSurface *surface); + static QImage::Format imageFormatFromSurfaceFormat(const DFBSurfacePixelFormat format, const DFBSurfaceCapabilities caps); //This is set by the graphicssystem constructor static IDirectFB *dfbInterface() { return dfb; } diff --git a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp index 744b5c0e5e..38bc41ca72 100644 --- a/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qdirectfbinput.cpp @@ -46,9 +46,6 @@ void QDirectFbInput::addWindow(DFBWindowID id, QWidget *tlw) IDirectFBWindow *window; dfbDisplayLayer->GetWindow(dfbDisplayLayer,id,&window); - window->DisableEvents(window,DWET_ALL); - window->EnableEvents(window,DFBWindowEventType(DWET_ALL)); - window->SetKeySelection(window,DWKS_ALL,NULL,0); window->AttachEventBuffer(window,eventBuffer); } diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp index fe3b1d878a..d9da01bbc0 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.cpp @@ -68,27 +68,16 @@ QDirectFbGraphicsSystemScreen::QDirectFbGraphicsSystemScreen(IDirectFB *dfb, int // m_layer->SetConfiguration(m_layer, displayLayerConfig); m_layer->SetCooperativeLevel(m_layer,DLSCL_SHARED); - IDirectFBSurface *topLevelSurface; - //This line gives a warning - m_layer->GetSurface(m_layer, &topLevelSurface); - m_format = QDirectFbConvenience::imageFormatFromSurface(topLevelSurface); - result = m_layer->GetScreen(m_layer,&m_screen); - if (result != DFB_OK) { - DirectFBError("QDirectFbGraphicsSystemScreen: Failed to get screen", result); - } - - int w(0),h(0); - - //Asking the screen for its size gives the desktop geometry on X11 - //Thats not something we want, so ask the topLevelSorface instead - topLevelSurface->GetSize(topLevelSurface,&w,&h); + DFBDisplayLayerConfig config; + m_layer->GetConfiguration(m_layer, &config); - m_geometry = QRect(0,0,w,h); + m_format = QDirectFbConvenience::imageFormatFromSurfaceFormat(config.pixelformat, config.surface_caps); + m_geometry = QRect(0,0,config.width,config.height); const int dpi = 72; const qreal inch = 25.4; m_depth = 32; - m_physicalSize = QSize(qRound(w * inch / dpi), qRound(h *inch / dpi)); + m_physicalSize = QSize(qRound(config.width * inch / dpi), qRound(config.height *inch / dpi)); } QDirectFbGraphicsSystemScreen::~QDirectFbGraphicsSystemScreen() diff --git a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h index 6068495f3c..ff6a4263fa 100644 --- a/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qgraphicssystem_minimaldfb.h @@ -70,7 +70,6 @@ public: QDirectFbInput m_input; - IDirectFBScreen *m_screen; IDirectFBDisplayLayer *m_layer; }; diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp index 6c8b2b4fe9..e0bd33e0b0 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.cpp @@ -42,6 +42,7 @@ #include "qwindowsurface_minimaldfb.h" #include "qgraphicssystem_minimaldfb.h" #include "qblitter_directfb.h" +#include "qdirectfbconvenience.h" #include <private/qpixmap_blitter_p.h> #include <QtCore/qdebug.h> @@ -50,7 +51,7 @@ QT_BEGIN_NAMESPACE QDirectFbWindowSurface::QDirectFbWindowSurface (QDirectFbGraphicsSystemScreen *screen, QWidget *window) - : QWindowSurface(window), m_screen(screen), m_lock(false) + : QWindowSurface(window), m_screen(screen) { window->setWindowSurface(this); m_dfbWindow = m_screen->createWindow(window->rect(),window); @@ -96,7 +97,6 @@ void QDirectFbWindowSurface::flush(QWidget *widget, const QRegion ®ion, const void QDirectFbWindowSurface::setGeometry(const QRect &rect) { - m_dfbSurface->Release(m_dfbSurface); QWindowSurface::setGeometry(rect); m_dfbWindow->SetBounds(m_dfbWindow, rect.x(),rect.y(), rect.width(), rect.height()); @@ -124,4 +124,32 @@ void QDirectFbWindowSurface::endPaint(const QRegion ®ion) Q_UNUSED(region); } +void QDirectFbWindowSurface::setVisible(bool visible) +{ + if (visible) { + int x = this->geometry().x(); + int y = this->geometry().y(); + m_dfbWindow->MoveTo(m_dfbWindow,x,y); + } else { + IDirectFBDisplayLayer *displayLayer; + QDirectFbConvenience::dfbInterface()->GetDisplayLayer(QDirectFbConvenience::dfbInterface(),DLID_PRIMARY,&displayLayer); + + DFBDisplayLayerConfig config; + displayLayer->GetConfiguration(displayLayer,&config); + m_dfbWindow->MoveTo(m_dfbWindow,config.width+1,config.height + 1); + } +} + +Qt::WindowFlags QDirectFbWindowSurface::setWindowFlags(Qt::WindowFlags type) +{ + if (type == Qt::Popup || type == Qt::ToolTip) + { + DFBWindowOptions options; + m_dfbWindow->GetOptions(m_dfbWindow,&options); + options = DFBWindowOptions(options | DWOP_GHOST); + m_dfbWindow->SetOptions(m_dfbWindow,options); + } + return type; +} + QT_END_NAMESPACE diff --git a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h index 98575ffa14..aeee0496b8 100644 --- a/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h +++ b/src/plugins/graphicssystems/minimaldfb/qwindowsurface_minimaldfb.h @@ -66,13 +66,15 @@ public: void beginPaint(const QRegion ®ion); void endPaint(const QRegion ®ion); + void setVisible(bool visible); + Qt::WindowFlags setWindowFlags(Qt::WindowFlags type); + private: void lockSurfaceToImage(); QDirectFbGraphicsSystemScreen *m_screen; QPixmap *m_pixmap; QBlittablePixmapData *pmdata; - bool m_lock; IDirectFBWindow *m_dfbWindow; IDirectFBSurface *m_dfbSurface; |