X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/539e27950f79eecf6f82b80dd0bc1ab3f0007958..9ebb7cade2df5aeb8531950d2a79cd57a336bcec:/src/generic/graphicc.cpp?ds=sidebyside diff --git a/src/generic/graphicc.cpp b/src/generic/graphicc.cpp index bd612032c8..30bcb3f921 100755 --- a/src/generic/graphicc.cpp +++ b/src/generic/graphicc.cpp @@ -144,7 +144,12 @@ public : 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; }; @@ -161,11 +166,16 @@ wxCairoPath::~wxCairoPath() 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 // @@ -330,13 +340,12 @@ void wxCairoContext::ResetClip() } -void wxCairoContext::StrokePath( const wxGraphicsPath *p ) +void wxCairoContext::StrokePath( const wxGraphicsPath *path ) { if ( m_penTransparent ) return; - const wxCairoPath* path = dynamic_cast< 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 @@ -517,15 +526,14 @@ void wxCairoContext::StrokePath( const wxGraphicsPath *p ) 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 = dynamic_cast< 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 ) @@ -542,7 +550,7 @@ void wxCairoContext::FillPath( const wxGraphicsPath *p , int fillStyle ) 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); } }