From f540e5bd06cef46404fe93306ac00d8f8277ada2 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sun, 22 Oct 2006 20:42:12 +0000 Subject: [PATCH] using GetNativePath instead of dynamic_cast git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42249 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/generic/graphicc.cpp | 28 ++++++++++++++++++---------- src/msw/graphics.cpp | 24 +++++++++++------------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/src/generic/graphicc.cpp b/src/generic/graphicc.cpp index 3b00bdecde..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 = (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 = (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); } } diff --git a/src/msw/graphics.cpp b/src/msw/graphics.cpp index 4e34e73012..d47a26a9e1 100644 --- a/src/msw/graphics.cpp +++ b/src/msw/graphics.cpp @@ -182,7 +182,12 @@ public : 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; }; @@ -263,11 +268,6 @@ wxGDIPlusPath::~wxGDIPlusPath() delete m_path; } -GraphicsPath* wxGDIPlusPath::GetPath() const -{ - return m_path; -} - // // The Primitives // @@ -409,22 +409,20 @@ void wxGDIPlusContext::ResetClip() // 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()); } } -- 2.45.2