#include "wx/dcclient.h"
#include "wx/dcmemory.h"
#include "wx/dcprint.h"
+ #ifdef __WXGTK__
+ #include "wx/window.h"
+ #endif
#endif
#include "wx/private/graphics.h"
virtual bool ShouldOffset() const
{
+ if ( !m_enableOffset )
+ return false;
+
int penwidth = 0 ;
if ( !m_pen.IsNull() )
{
cairo_set_font_face(ctext, m_font);
cairo_set_font_size(ctext, m_size );
#else
- cairo_select_font_face(ctext, m_fontName, m_slant, m_weights );
+ cairo_select_font_face(ctext, m_fontName, m_slant, m_weight );
cairo_set_font_size(ctext, m_size );
#endif
}
}
}
-bool wxCairoPathData::Contains( wxDouble x, wxDouble y, wxPolygonFillMode WXUNUSED(fillStyle) ) const
+bool wxCairoPathData::Contains( wxDouble x, wxDouble y, wxPolygonFillMode fillStyle ) const
{
- return cairo_in_stroke( m_pathContext, x, y) != 0;
+ cairo_set_fill_rule(m_pathContext,fillStyle==wxODDEVEN_RULE ? CAIRO_FILL_RULE_EVEN_ODD : CAIRO_FILL_RULE_WINDING);
+ return cairo_in_fill( m_pathContext, x, y) != 0;
}
//-----------------------------------------------------------------------------
{
wxCHECK_RET( bmp.IsOk(), wxT("Invalid bitmap in wxCairoContext::DrawBitmap"));
+#ifdef wxHAS_RAW_BITMAP
int bw = m_width = bmp.GetWidth();
int bh = m_height = bmp.GetHeight();
wxBitmap bmpSource = bmp; // we need a non-const instance
}
}
m_pattern = cairo_pattern_create_for_surface(m_surface);
+#endif // wxHAS_RAW_BITMAP
}
wxCairoBitmapData::~wxCairoBitmapData()
const wxDCImpl *impl = dc.GetImpl();
Init( (cairo_t*) impl->GetCairoContext() );
+ wxSize sz = dc.GetSize();
+ m_width = sz.x;
+ m_height = sz.y;
+
wxPoint org = dc.GetDeviceOrigin();
cairo_translate( m_context, org.x, org.y );
wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxWindowDC& dc )
: wxGraphicsContext(renderer)
{
+ int width, height;
+ dc.GetSize( &width, &height );
+ m_width = width;
+ m_height = height;
+
+ m_enableOffset = true;
+
#ifdef __WXGTK20__
wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl();
Init( gdk_cairo_create( impldc->GetGDKWindow() ) );
#endif
#ifdef __WXMAC__
- int width, height;
- dc.GetSize( &width, &height );
CGContextRef cgcontext = (CGContextRef)dc.GetWindow()->MacGetCGContextRef();
cairo_surface_t* surface = cairo_quartz_surface_create_for_cg_context(cgcontext, width, height);
Init( cairo_create( surface ) );
wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, const wxMemoryDC& dc )
: wxGraphicsContext(renderer)
{
+ int width, height;
+ dc.GetSize( &width, &height );
+ m_width = width;
+ m_height = height;
+
+ m_enableOffset = true;
+
#ifdef __WXGTK20__
wxGTKDCImpl *impldc = (wxGTKDCImpl*) dc.GetImpl();
Init( gdk_cairo_create( impldc->GetGDKWindow() ) );
#endif
#ifdef __WXMAC__
- int width, height;
- dc.GetSize( &width, &height );
CGContextRef cgcontext = (CGContextRef)dc.GetWindow()->MacGetCGContextRef();
cairo_surface_t* surface = cairo_quartz_surface_create_for_cg_context(cgcontext, width, height);
Init( cairo_create( surface ) );
: wxGraphicsContext(renderer)
{
Init( gdk_cairo_create( drawable ) );
+
+ int width, height;
+ gdk_drawable_get_size( drawable, &width, &height );
+ m_width = width;
+ m_height = height;
}
#endif
: wxGraphicsContext(renderer)
{
m_mswSurface = cairo_win32_surface_create(handle);
- m_context = cairo_create(m_mswSurface);
- PushState();
- PushState();
+ Init( cairo_create(m_mswSurface) );
+ m_width =
+ m_height = 0;
}
#endif
: wxGraphicsContext(renderer)
{
Init( context );
+ m_width =
+ m_height = 0;
}
wxCairoContext::wxCairoContext( wxGraphicsRenderer* renderer, wxWindow *window)
: wxGraphicsContext(renderer)
{
+ m_enableOffset = true;
#ifdef __WXGTK__
// something along these lines (copied from dcclient)
wxASSERT_MSG( window->m_wxwindow, wxT("wxCairoContext needs a widget") );
Init(gdk_cairo_create(window->GTKGetDrawingWindow()));
+
+ wxSize sz = window->GetSize();
+ m_width = sz.x;
+ m_height = sz.y;
#endif
}
wxDouble scaleX = w / size.GetWidth();
wxDouble scaleY = h / size.GetHeight();
- cairo_scale(m_context, scaleX, scaleY);
// prepare to draw the image
cairo_translate(m_context, x, y);
+ cairo_scale(m_context, scaleX, scaleY);
cairo_set_source(m_context, pattern);
// use the original size here since the context is scaled already...
cairo_rectangle(m_context, 0, 0, size.GetWidth(), size.GetHeight());
{
#ifdef __WXMSW__
return new wxCairoContext(this,(HDC)context);
-#endif
-#ifdef __WXGTK__
+#else
return new wxCairoContext(this,(cairo_t*)context);
#endif
}