diff --git a/include/wx/graphics.h b/include/wx/graphics.h index 51c3e22150..86a4444fb0 100644 --- a/include/wx/graphics.h +++ b/include/wx/graphics.h @@ -876,6 +876,8 @@ public: #endif #endif + wxGraphicsContext* CreateContextFromUnknownDC(const wxDC& dc); + virtual wxGraphicsContext * CreateContextFromNativeContext( void * context ) = 0; virtual wxGraphicsContext * CreateContextFromNativeWindow( void * window ) = 0; diff --git a/interface/wx/graphics.h b/interface/wx/graphics.h index 27facf596b..78932c0f98 100644 --- a/interface/wx/graphics.h +++ b/interface/wx/graphics.h @@ -456,6 +456,8 @@ public: with wxDC and doesn't known its exact type. Use Create() instead if you know that the DC is e.g. wxWindowDC. + @see wxGraphicsRenderer::CreateContextFromUnknownDC() + @since 3.1.1 */ static wxGraphicsContext* CreateFromUnknownDC(wxDC& dc); @@ -1341,6 +1343,24 @@ public: */ virtual wxGraphicsContext* CreateContext(const wxEnhMetaFileDC& metaFileDC) = 0; + /** + Creates a wxGraphicsContext from a DC of unknown specific type. + + Creates a wxGraphicsContext if @a dc is a supported type (i.e. has a + corresponding CreateContext() method, e.g. wxWindowDC or wxMemoryDC). + Returns @NULL if the DC is unsupported. + + This method is only useful as a helper in generic code that operates + with wxDC and doesn't known its exact type. Use the appropriate + CreateContext() overload instead if you know that the DC is e.g. + wxWindowDC. + + @see wxGraphicsContext::CreateFromUnknownDC() + + @since 3.1.3 + */ + static wxGraphicsContext* CreateContextFromUnknownDC(wxDC& dc); + /** Creates a wxGraphicsContext associated with a wxImage. diff --git a/src/common/graphcmn.cpp b/src/common/graphcmn.cpp index 42cde7cc79..a602720327 100644 --- a/src/common/graphcmn.cpp +++ b/src/common/graphcmn.cpp @@ -988,22 +988,27 @@ wxGraphicsBitmap wxGraphicsContext::CreateSubBitmap( const wxGraphicsBitmap &bmp #endif wxGraphicsContext* wxGraphicsContext::CreateFromUnknownDC(const wxDC& dc) +{ + return wxGraphicsRenderer::GetDefaultRenderer()->CreateContextFromUnknownDC(dc); +} + +wxGraphicsContext* wxGraphicsRenderer::CreateContextFromUnknownDC(const wxDC& dc) { if ( const wxWindowDC *windc = wxDynamicCast(&dc, wxWindowDC) ) - return Create(*windc); + return CreateContext(*windc); if ( const wxMemoryDC *memdc = wxDynamicCast(&dc, wxMemoryDC) ) - return Create(*memdc); + return CreateContext(*memdc); #if wxUSE_PRINTING_ARCHITECTURE if ( const wxPrinterDC *printdc = wxDynamicCast(&dc, wxPrinterDC) ) - return Create(*printdc); + return CreateContext(*printdc); #endif #ifdef __WXMSW__ #if wxUSE_ENH_METAFILE if ( const wxEnhMetaFileDC *mfdc = wxDynamicCast(&dc, wxEnhMetaFileDC) ) - return Create(*mfdc); + return CreateContext(*mfdc); #endif #endif