X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2986eb869c0b00d6c7e3860ba0b757efe22d1759..d6b17e1aa398f19b9f1b7024eb3923da01430aff:/src/generic/graphicc.cpp diff --git a/src/generic/graphicc.cpp b/src/generic/graphicc.cpp index 50965a5b99..0cc09b6751 100644 --- a/src/generic/graphicc.cpp +++ b/src/generic/graphicc.cpp @@ -19,6 +19,10 @@ #include "wx/graphics.h" +#if wxUSE_CAIRO + +#include "wx/cairo.h" + #ifndef WX_PRECOMP #include "wx/bitmap.h" #include "wx/icon.h" @@ -60,6 +64,10 @@ using namespace std; #endif #include +#ifdef __WXMSW__ +#include +#endif + #ifdef __WXGTK__ #include #include "wx/fontutil.h" @@ -284,6 +292,9 @@ private : cairo_font_slant_t m_slant; cairo_font_weight_t m_weight; #endif +#ifdef __WXMSW__ + wxCairoContext( wxGraphicsRenderer* renderer, HDC context ); +#endif }; class wxCairoBitmapData : public wxGraphicsObjectRefData @@ -331,6 +342,9 @@ public: } virtual void Clip( const wxRegion ®ion ); +#ifdef __WXMSW__ + cairo_surface_t* m_mswSurface; +#endif // clips drawings to the rect virtual void Clip( wxDouble x, wxDouble y, wxDouble w, wxDouble h ); @@ -1227,6 +1241,18 @@ wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, GdkDrawable *drawa } #endif +#ifdef __WXMSW__ +wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, HDC handle ) +: wxGraphicsContext(renderer) +{ + m_mswSurface = cairo_win32_surface_create(handle); + m_context = cairo_create(m_mswSurface); + PushState(); + PushState(); +} +#endif + + wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, cairo_t *context ) : wxGraphicsContext(renderer) { @@ -1258,9 +1284,17 @@ wxCairoContext::~wxCairoContext() if ( m_context ) { PopState(); +#ifdef __WXMSW__ + m_mswSurface = cairo_win32_surface_create((HDC)window->GetHandle()); + m_context = cairo_create(m_mswSurface); +#endif PopState(); cairo_destroy(m_context); } +#ifdef __WXMSW__ + if ( m_mswSurface ) + cairo_surface_destroy(m_mswSurface); +#endif } void wxCairoContext::Init(cairo_t *context) @@ -1768,7 +1802,12 @@ wxGraphicsContext * wxCairoRenderer::CreateContext( const wxPrinterDC& dc) wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeContext( void * context ) { +#ifdef __WXMSW__ + return new wxCairoContext(this,(HDC)context); +#endif +#ifdef __WXGTK__ return new wxCairoContext(this,(cairo_t*)context); +#endif } @@ -1913,4 +1952,15 @@ wxCairoRenderer::CreateSubBitmap(const wxGraphicsBitmap& WXUNUSED(bitmap), return wxNullGraphicsBitmap; } -#endif // wxUSE_GRAPHICS_CONTEXT +#endif // wxUSE_CAIRO + +wxGraphicsRenderer* wxGraphicsRenderer::GetCairoRenderer() +{ +#if wxUSE_CAIRO + return &gs_cairoGraphicsRenderer; +#else + return NULL; +#endif +} + +#endif // wxUSE_GRAPHICS_CONTEXT