#include "wx/graphics.h"
+#if wxUSE_CAIRO
+
+#include "wx/cairo.h"
+
#ifndef WX_PRECOMP
#include "wx/bitmap.h"
#include "wx/icon.h"
#endif
#include <cairo.h>
+#ifdef __WXMSW__
+#include <cairo-win32.h>
+#endif
+
#ifdef __WXGTK__
#include <gtk/gtk.h>
#include "wx/fontutil.h"
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
}
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 );
}
#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)
{
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)
wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeContext( void * context )
{
+#ifdef __WXMSW__
+ return new wxCairoContext(this,(HDC)context);
+#endif
+#ifdef __WXGTK__
return new wxCairoContext(this,(cairo_t*)context);
+#endif
}
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