From: Václav Slavík Date: Sat, 18 Nov 2006 13:17:35 +0000 (+0000) Subject: don't use priviledged calls in wxDFB to allow concurrent use of the display by >1... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/fa28b00cdcce49eae46ac7f2c39c3c4fc6946165 don't use priviledged calls in wxDFB to allow concurrent use of the display by >1 wxDFB apps git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43489 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/dfb/wrapdfb.h b/include/wx/dfb/wrapdfb.h index d4b5467a5e..3e80393326 100644 --- a/include/wx/dfb/wrapdfb.h +++ b/include/wx/dfb/wrapdfb.h @@ -426,14 +426,10 @@ struct wxIDirectFBDisplayLayer : public wxDfbWrapper return NULL; } - wxIDirectFBSurfacePtr GetSurface() - { - IDirectFBSurface *s; - if ( Check(m_ptr->GetSurface(m_ptr, &s)) ) - return new wxIDirectFBSurface(s); - else - return NULL; - } + bool GetConfiguration(DFBDisplayLayerConfig *config) + { return Check(m_ptr->GetConfiguration(m_ptr, config)); } + + wxVideoMode GetVideoMode(); bool GetCursorPosition(int *x, int *y) { return Check(m_ptr->GetCursorPosition(m_ptr, x, y)); } diff --git a/src/dfb/app.cpp b/src/dfb/app.cpp index fc5357d91f..2883ee6f54 100644 --- a/src/dfb/app.cpp +++ b/src/dfb/app.cpp @@ -67,16 +67,11 @@ void wxApp::CleanUp() static wxVideoMode GetCurrentVideoMode() { - wxVideoMode m; + wxIDirectFBDisplayLayerPtr layer(wxIDirectFB::Get()->GetDisplayLayer()); + if ( !layer ) + return wxVideoMode(); // invalid - wxIDirectFBSurfacePtr surface(wxIDirectFB::Get()->GetPrimarySurface()); - if ( !surface ) - return m; // invalid - - surface->GetSize(&m.w, &m.h); - m.bpp = surface->GetDepth(); - - return m; + return layer->GetVideoMode(); } wxVideoMode wxApp::GetDisplayMode() const diff --git a/src/dfb/dcscreen.cpp b/src/dfb/dcscreen.cpp index 114f30ba0b..6ccea5aaf3 100644 --- a/src/dfb/dcscreen.cpp +++ b/src/dfb/dcscreen.cpp @@ -31,7 +31,7 @@ // wxScreenDC //----------------------------------------------------------------------------- -#warning "FIXME: verify that wxScreenDC works in 2nd DirectFB app started" +#warning "FIXME: this doesn't work (neither single app nor multiapp core) // FIXME: maybe use a subsurface as well? IMPLEMENT_DYNAMIC_CLASS(wxScreenDC, wxDC) diff --git a/src/dfb/wrapdfb.cpp b/src/dfb/wrapdfb.cpp index afd6ee064b..eac0024b2a 100644 --- a/src/dfb/wrapdfb.cpp +++ b/src/dfb/wrapdfb.cpp @@ -98,8 +98,10 @@ void wxIDirectFB::CleanUp() wxIDirectFBSurfacePtr wxIDirectFB::GetPrimarySurface() { - wxIDirectFBDisplayLayerPtr layer(GetDisplayLayer()); - return layer ? layer->GetSurface() : NULL; + DFBSurfaceDescription desc; + desc.flags = DSDESC_CAPS; + desc.caps = DSCAPS_PRIMARY; + return CreateSurface(&desc); } //----------------------------------------------------------------------------- @@ -192,3 +194,26 @@ bool wxIDirectFBSurface::FlipToFront(const DFBRegion *region) // drawings: return Flip(region, DSFLIP_BLIT); } + +//----------------------------------------------------------------------------- +// wxIDirectFBDisplayLayer +//----------------------------------------------------------------------------- + +wxVideoMode wxIDirectFBDisplayLayer::GetVideoMode() +{ + DFBDisplayLayerConfig cfg; + if ( !GetConfiguration(&cfg) ) + return wxVideoMode(); // invalid + + if ( !((cfg.flags & DLCONF_WIDTH) && + (cfg.flags & DLCONF_HEIGHT) && + (cfg.flags & DLCONF_PIXELFORMAT)) ) + return wxVideoMode(); // invalid + + return wxVideoMode + ( + cfg.width, + cfg.height, + DFB_BITS_PER_PIXEL(cfg.pixelformat) + ); +}