virtual void AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r ) ;
*/
- cairo_path_t* GetPath() const;
+ // returns the native path
+ virtual void * GetNativePath() const ;
+
+ // give the native path returned by GetNativePath() back (there might be some deallocations necessary)
+ virtual void UnGetNativePath(void *p) ;
+
private :
cairo_t* m_pathContext;
};
cairo_destroy(m_pathContext);
}
-cairo_path_t* wxCairoPath::GetPath() const
+cairo_path_t* wxCairoPath::GetNativePath() const
{
return cairo_copy_path(m_pathContext) ;
}
+void wxCairoPath::UnGetNativePath(void *p)
+{
+ cairo_path_destroy((cairo_path_t*)p);
+}
+
//
// The Primitives
//
}
-void wxCairoContext::StrokePath( const wxGraphicsPath *p )
+void wxCairoContext::StrokePath( const wxGraphicsPath *path )
{
if ( m_penTransparent )
return;
- const wxCairoPath* path = (const wxCairoPath *) p;
- cairo_path_t* cp = path->GetPath() ;
+ cairo_path_t* cp = (cairo_path_t*) path->GetNativePath() ;
cairo_append_path(m_context,cp);
// setup pen
if ( userLengths )
delete[] userLengths;
cairo_stroke(m_context);
- cairo_path_destroy(cp);
+ path->UnGetNativePath(cp);
}
-void wxCairoContext::FillPath( const wxGraphicsPath *p , int fillStyle )
+void wxCairoContext::FillPath( const wxGraphicsPath *path , int fillStyle )
{
if ( !m_brushTransparent )
{
- const wxCairoPath* path = (const wxCairoPath *) p;
- cairo_path_t* cp = path->GetPath() ;
+ cairo_path_t* cp = (cairo_path_t*) path->GetNativePath() ;
cairo_append_path(m_context,cp);
if ( m_brushPattern )
cairo_set_fill_rule(m_context,fillStyle==wxODDEVEN_RULE ? CAIRO_FILL_RULE_EVEN_ODD : CAIRO_FILL_RULE_WINDING);
cairo_fill(m_context);
- cairo_path_destroy(cp);
+ path->UnGetNativePath(cp);
}
}
virtual void AddArcToPoint( wxDouble x1, wxDouble y1 , wxDouble x2, wxDouble y2, wxDouble r ) ;
*/
- GraphicsPath* GetPath() const;
+ // returns the native path
+ virtual void * GetNativePath() const { return m_path; }
+
+ // give the native path returned by GetNativePath() back (there might be some deallocations necessary)
+ virtual void UnGetNativePath(void *p) {}
+
private :
GraphicsPath* m_path;
};
delete m_path;
}
-GraphicsPath* wxGDIPlusPath::GetPath() const
-{
- return m_path;
-}
-
//
// The Primitives
//
// TODO
}
-void wxGDIPlusContext::StrokePath( const wxGraphicsPath *p )
+void wxGDIPlusContext::StrokePath( const wxGraphicsPath *path )
{
if ( m_penTransparent )
return;
- const wxGDIPlusPath* path = dynamic_cast< const wxGDIPlusPath*>( p );
- m_context->DrawPath( m_pen , path->GetPath() );
+ m_context->DrawPath( m_pen , (GraphicsPath*) path->GetNativePath() );
}
-void wxGDIPlusContext::FillPath( const wxGraphicsPath *p , int fillStyle )
+void wxGDIPlusContext::FillPath( const wxGraphicsPath *path , int fillStyle )
{
if ( !m_brushTransparent )
{
- const wxGDIPlusPath* path = dynamic_cast< const wxGDIPlusPath*>( p );
- path->GetPath()->SetFillMode( fillStyle == wxODDEVEN_RULE ? FillModeAlternate : FillModeWinding);
- m_context->FillPath( m_brush , path->GetPath() );
+ ((GraphicsPath*) path->GetNativePath())->SetFillMode( fillStyle == wxODDEVEN_RULE ? FillModeAlternate : FillModeWinding);
+ m_context->FillPath( m_brush , (GraphicsPath*) path->GetNativePath());
}
}