git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@62681
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
static wxGraphicsRenderer* GetDefaultRenderer();
static wxGraphicsRenderer* GetDefaultRenderer();
+ static wxGraphicsRenderer* GetCairoRenderer();
// Context
virtual wxGraphicsContext * CreateContext( const wxWindowDC& dc) = 0;
// Context
virtual wxGraphicsContext * CreateContext( const wxWindowDC& dc) = 0;
#define wxUSE_GRAPHICS_CONTEXT 0
#endif
#define wxUSE_GRAPHICS_CONTEXT 0
#endif
+// Enable the new wxCairoContext classes for an advanced
+// 2D drawing API. (Still somewhat experimental)
+//
+// Please note that you will need to link with Cairo for this to work.
+//
+// Default is 0
+//
+// Recommended setting: 1
+#ifndef wxUSE_CAIRO
+#define wxUSE_CAIRO 0
+#endif
+
// ----------------------------------------------------------------------------
// Individual GUI controls
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Individual GUI controls
// ----------------------------------------------------------------------------
wxDCImpl( owner )
{
Init();
wxDCImpl( owner )
{
Init();
- SetGraphicsContext( wxGraphicsContext::Create(dc) );
+ wxGraphicsContext* context;
+#if wxUSE_CAIRO
+ wxGraphicsRenderer* renderer = wxGraphicsRenderer::GetCairoRenderer();
+ context = renderer->CreateContext(dc);
+#else
+ context = wxGraphicsContext::Create(dc);
+#endif
+
+ SetGraphicsContext( context );
}
#if wxUSE_PRINTING_ARCHITECTURE
}
#if wxUSE_PRINTING_ARCHITECTURE
-#if wxUSE_GRAPHICS_CONTEXT
-
+#if wxUSE_GRAPHICS_CONTEXT && wxUSE_CAIRO
+
#ifndef WX_PRECOMP
#include "wx/bitmap.h"
#include "wx/icon.h"
#ifndef WX_PRECOMP
#include "wx/bitmap.h"
#include "wx/icon.h"
#endif
#include <cairo.h>
#endif
#include <cairo.h>
+#ifdef __WXMSW__
+#include <cairo-win32.h>
+#endif
+
#ifdef __WXGTK__
#include <gtk/gtk.h>
#include "wx/fontutil.h"
#ifdef __WXGTK__
#include <gtk/gtk.h>
#include "wx/fontutil.h"
cairo_font_slant_t m_slant;
cairo_font_weight_t m_weight;
#endif
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
};
class wxCairoBitmapData : public wxGraphicsObjectRefData
}
virtual void Clip( const wxRegion ®ion );
}
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 );
// clips drawings to the rect
virtual void Clip( wxDouble x, wxDouble y, wxDouble w, wxDouble h );
+#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)
{
wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, cairo_t *context )
: wxGraphicsContext(renderer)
{
if ( m_context )
{
PopState();
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);
}
PopState();
cairo_destroy(m_context);
}
+#ifdef __WXMSW__
+ if ( m_mswSurface )
+ cairo_surface_destroy(m_mswSurface);
+#endif
}
void wxCairoContext::Init(cairo_t *context)
}
void wxCairoContext::Init(cairo_t *context)
wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeContext( void * context )
{
wxGraphicsContext * wxCairoRenderer::CreateContextFromNativeContext( void * context )
{
+#if __WXMSW__
+ return new wxCairoContext(this,(HDC)context);
+#endif
+#if __WXGTK__
return new wxCairoContext(this,(cairo_t*)context);
return new wxCairoContext(this,(cairo_t*)context);
return wxNullGraphicsBitmap;
}
return wxNullGraphicsBitmap;
}
-#endif // wxUSE_GRAPHICS_CONTEXT
+#endif // wxUSE_GRAPHICS_CONTEXT && wxUSE_CAIRO
+
+#if wxUSE_GRAPHICS_CONTEXT
+wxGraphicsRenderer* wxGraphicsRenderer::GetCairoRenderer()
+{
+#if wxUSE_CAIRO
+ return &gs_cairoGraphicsRenderer;
+#else
+ return NULL;
+#endif
+}
+#endif