diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/plugins/platforms/directfb/qdirectfb_egl.cpp | 33 | ||||
-rw-r--r-- | src/plugins/platforms/directfb/qdirectfbwindow.h | 2 |
2 files changed, 34 insertions, 1 deletions
diff --git a/src/plugins/platforms/directfb/qdirectfb_egl.cpp b/src/plugins/platforms/directfb/qdirectfb_egl.cpp index 65112a4ccd..f5547d56c4 100644 --- a/src/plugins/platforms/directfb/qdirectfb_egl.cpp +++ b/src/plugins/platforms/directfb/qdirectfb_egl.cpp @@ -92,6 +92,8 @@ public: QDirectFbWindowEGL(QWindow *tlw, QDirectFbInput *inputhandler); ~QDirectFbWindowEGL(); + void createDirectFBWindow(); + // EGL. Subclass it instead to have different GL integrations? EGLSurface eglSurface(); @@ -169,6 +171,37 @@ QDirectFbWindowEGL::~QDirectFbWindowEGL() } } +void QDirectFbWindowEGL::createDirectFBWindow() +{ + // Use the default for the raster surface. + if (window()->surfaceType() == QSurface::RasterSurface) + return QDirectFbWindow::createDirectFBWindow(); + + Q_ASSERT(!m_dfbWindow.data()); + + DFBWindowDescription description; + memset(&description, 0, sizeof(DFBWindowDescription)); + description.flags = DFBWindowDescriptionFlags(DWDESC_WIDTH | DWDESC_HEIGHT| + DWDESC_POSX | DWDESC_POSY| + DWDESC_PIXELFORMAT | DWDESC_SURFACE_CAPS); + description.width = qMax(1, window()->width()); + description.height = qMax(1, window()->height()); + description.posx = window()->x(); + description.posy = window()->y(); + + description.surface_caps = DSCAPS_GL; + description.pixelformat = DSPF_RGB16; + + IDirectFBDisplayLayer *layer; + layer = toDfbScreen(window())->dfbLayer(); + DFBResult result = layer->CreateWindow(layer, &description, m_dfbWindow.outPtr()); + if (result != DFB_OK) + DirectFBError("QDirectFbWindow: failed to create window", result); + + m_dfbWindow->SetOpacity(m_dfbWindow.data(), 0xff); + m_inputHandler->addWindow(m_dfbWindow.data(), window()); +} + EGLSurface QDirectFbWindowEGL::eglSurface() { if (m_eglSurface == EGL_NO_SURFACE) { diff --git a/src/plugins/platforms/directfb/qdirectfbwindow.h b/src/plugins/platforms/directfb/qdirectfbwindow.h index f02f937462..0c429c9021 100644 --- a/src/plugins/platforms/directfb/qdirectfbwindow.h +++ b/src/plugins/platforms/directfb/qdirectfbwindow.h @@ -73,7 +73,7 @@ public: // helper to get access to DirectFB types IDirectFBSurface *dfbSurface(); -private: +protected: QDirectFBPointer<IDirectFBSurface> m_dfbSurface; QDirectFBPointer<IDirectFBWindow> m_dfbWindow; QDirectFbInput *m_inputHandler; |