///////////////////////////////////////////////////////////////////////////// // Name: src/dfb/dcscreen.cpp // Purpose: wxScreenDC implementation // Author: Vaclav Slavik // Created: 2006-08-16 // Copyright: (c) 2006 REA Elektronik GmbH // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// // =========================================================================== // declarations // =========================================================================== // --------------------------------------------------------------------------- // headers // --------------------------------------------------------------------------- // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" #include "wx/dcscreen.h" #include "wx/dfb/dcscreen.h" #include "wx/dfb/private.h" // =========================================================================== // implementation // =========================================================================== //----------------------------------------------------------------------------- // wxScreenDC //----------------------------------------------------------------------------- // FIXME: Currently, wxScreenDC doesn't work at all in non-exclusive mode // (DFSCL_NORMAL). In this mode, requesting primary surface results // in one of the following actions, depending on directfbrc // configuration: // // (1) if force-desktop, a surface is created and used as *background* // for the windows managed by DFB WM // // (2) otherwise, a dummy surface of the right size and format is // created, but isn't shown on the screen // // (3) furthermore, if autoflip-window option is not used and primary // surface is requested as single-buffered (which is needed to // implement wxScreenDC semantics), a warning is issued in addition // to 2); if autoflip-window is used, then a helper thread is // created and does periodic flipping, which is even worse // // 2) and 3) are obviously unsatisfactory. 1) isn't suitable either, // because wxScreenDC has to render *on top* of windows. // // In conclusion, wxScreenDC as currently implemented is only usable // for measuring things (e.g. font sizes). For this task, however, it // is quite expensive to create in DFSCL_NORMAL mode, because it // involves creation of a new surface as big as the screen. // // The surface, as obtained from GetPrimarySurface(), is double-buffered // for the sole purpose of silencing the warning from 3) above. wxIMPLEMENT_ABSTRACT_CLASS(wxScreenDCImpl, wxDFBDCImpl); wxScreenDCImpl::wxScreenDCImpl(wxScreenDC *owner) : wxDFBDCImpl(owner) { DFBInit(wxIDirectFB::Get()->GetPrimarySurface()); }