From: Jaakko Salli Date: Thu, 13 May 2010 08:22:36 +0000 (+0000) Subject: Added wxGraphicsContext::Create(const wxEnhMetaFileDC& dc) so that wxPrintPreview... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/8371a35340baf588549273328cb2a1579a4dfe81 Added wxGraphicsContext::Create(const wxEnhMetaFileDC& dc) so that wxPrintPreview can work with wxMSW's wxGraphicsContext (closes #12028) git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@64297 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/graphics.h b/include/wx/graphics.h index 915cbfd4e1..b42c0ad1de 100644 --- a/include/wx/graphics.h +++ b/include/wx/graphics.h @@ -57,6 +57,7 @@ class WXDLLIMPEXP_FWD_CORE wxWindowDC; class WXDLLIMPEXP_FWD_CORE wxMemoryDC; #if wxUSE_PRINTING_ARCHITECTURE class WXDLLIMPEXP_FWD_CORE wxPrinterDC; +class WXDLLIMPEXP_FWD_CORE wxEnhMetaFileDC; #endif class WXDLLIMPEXP_FWD_CORE wxGraphicsContext; class WXDLLIMPEXP_FWD_CORE wxGraphicsPath; @@ -392,7 +393,10 @@ public: static wxGraphicsContext * Create( const wxMemoryDC& dc); #if wxUSE_PRINTING_ARCHITECTURE static wxGraphicsContext * Create( const wxPrinterDC& dc); +#ifdef __WXMSW__ + static wxGraphicsContext * Create( const wxEnhMetaFileDC& dc); #endif +#endif // wxUSE_PRINTING_ARCHITECTURE static wxGraphicsContext* CreateFromNative( void * context ); @@ -710,7 +714,10 @@ public: virtual wxGraphicsContext * CreateContext( const wxMemoryDC& dc) = 0; #if wxUSE_PRINTING_ARCHITECTURE virtual wxGraphicsContext * CreateContext( const wxPrinterDC& dc) = 0; +#ifdef __WXMSW__ + virtual wxGraphicsContext * CreateContext( const wxEnhMetaFileDC& dc) = 0; #endif +#endif // wxUSE_PRINTING_ARCHITECTURE virtual wxGraphicsContext * CreateContextFromNativeContext( void * context ) = 0; diff --git a/samples/printing/printing.cpp b/samples/printing/printing.cpp index e79361807e..7b172efb7f 100644 --- a/samples/printing/printing.cpp +++ b/samples/printing/printing.cpp @@ -230,6 +230,12 @@ void MyApp::Draw(wxDC&dc) if (window_dc) gc = wxGraphicsContext::Create( *window_dc ); +#ifdef __WXMSW__ + wxEnhMetaFileDC *emf_dc = wxDynamicCast( &dc, wxEnhMetaFileDC ); + if (emf_dc) + gc = wxGraphicsContext::Create( *emf_dc ); +#endif + if (gc) { // make a path that contains a circle and some lines, centered at 100,100 diff --git a/src/common/graphcmn.cpp b/src/common/graphcmn.cpp index 7ab4da0b5c..0c24351e7e 100644 --- a/src/common/graphcmn.cpp +++ b/src/common/graphcmn.cpp @@ -870,8 +870,16 @@ wxGraphicsBitmap wxGraphicsContext::CreateSubBitmap( const wxGraphicsBitmap &bmp { return wxGraphicsRenderer::GetDefaultRenderer()->CreateContext(dc); } + +#ifdef __WXMSW__ +/* static */ wxGraphicsContext* wxGraphicsContext::Create( const wxEnhMetaFileDC& dc) +{ + return wxGraphicsRenderer::GetDefaultRenderer()->CreateContext(dc); +} #endif +#endif // wxUSE_PRINTING_ARCHITECTURE + wxGraphicsContext* wxGraphicsContext::CreateFromNative( void * context ) { return wxGraphicsRenderer::GetDefaultRenderer()->CreateContextFromNativeContext(context); diff --git a/src/msw/graphics.cpp b/src/msw/graphics.cpp index 65377a464e..288997c7c1 100644 --- a/src/msw/graphics.cpp +++ b/src/msw/graphics.cpp @@ -40,6 +40,7 @@ #include "wx/private/graphics.h" #include "wx/msw/wrapgdip.h" #include "wx/msw/dc.h" +#include "wx/msw/enhmeta.h" #include "wx/dcgraph.h" #include "wx/msw/private.h" // needs to be before #include @@ -1631,6 +1632,8 @@ public : virtual wxGraphicsContext * CreateContext( const wxPrinterDC& dc); + virtual wxGraphicsContext * CreateContext( const wxEnhMetaFileDC& dc); + virtual wxGraphicsContext * CreateContextFromNativeContext( void * context ); virtual wxGraphicsContext * CreateContextFromNativeWindow( void * window ); @@ -1763,6 +1766,14 @@ wxGraphicsContext * wxGDIPlusRenderer::CreateContext( const wxPrinterDC& dc) return new wxGDIPlusContext(this,(HDC) msw->GetHDC(), sz.x, sz.y); } +wxGraphicsContext * wxGDIPlusRenderer::CreateContext( const wxEnhMetaFileDC& dc) +{ + ENSURE_LOADED_OR_RETURN(NULL); + wxMSWDCImpl *msw = wxDynamicCast( dc.GetImpl() , wxMSWDCImpl ); + wxSize sz = dc.GetSize(); + return new wxGDIPlusContext(this,(HDC) msw->GetHDC(), sz.x, sz.y); +} + wxGraphicsContext * wxGDIPlusRenderer::CreateContext( const wxMemoryDC& dc) { ENSURE_LOADED_OR_RETURN(NULL);