]> git.saurik.com Git - wxWidgets.git/commitdiff
using GetNativePath instead of dynamic_cast
authorStefan Csomor <csomor@advancedconcepts.ch>
Sun, 22 Oct 2006 20:42:12 +0000 (20:42 +0000)
committerStefan Csomor <csomor@advancedconcepts.ch>
Sun, 22 Oct 2006 20:42:12 +0000 (20:42 +0000)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42249 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775

src/generic/graphicc.cpp
src/msw/graphics.cpp

index 3b00bdecde2c2703fa24d5c9f37f4a187ea1c473..30bcb3f921097033ffb520ac691130f32e0f6fd1 100755 (executable)
@@ -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);
     }
 }
 
index 4e34e730123c33a9accb1e8ddb46402e187b5556..d47a26a9e1d92e6645aa053c364706352fab4fba 100644 (file)
@@ -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());
     }
 }