update the Cairo version to match recent changes in the others

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42597 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robin Dunn
2006-10-29 02:33:41 +00:00
parent 1ea0eb4e3e
commit 0db8a70e0c

View File

@@ -103,14 +103,13 @@ static inline double RadToDeg(double deg)
#include <gtk/gtk.h> #include <gtk/gtk.h>
#endif #endif
class WXDLLIMPEXP_CORE wxCairoPath : public wxGraphicsPath class WXDLLIMPEXP_CORE wxCairoPathData : public wxGraphicsPathData
{ {
public : public :
wxCairoPath(); wxCairoPathData(wxGraphicsRenderer* renderer, cairo_t* path = NULL);
wxCairoPath(wxGraphicsRenderer* renderer, cairo_t* pathcontext = NULL); ~wxCairoPathData();
~wxCairoPath();
virtual wxGraphicsPath *Clone() const; virtual wxGraphicsObjectRefData *Clone() const;
// //
// These are the path primitives from which everything else can be constructed // These are the path primitives from which everything else can be constructed
@@ -130,10 +129,10 @@ public :
virtual void AddArc( wxDouble x, wxDouble y, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise ) ; virtual void AddArc( wxDouble x, wxDouble y, wxDouble r, wxDouble startAngle, wxDouble endAngle, bool clockwise ) ;
// gets the last point of the current path, (0,0) if not yet set // gets the last point of the current path, (0,0) if not yet set
virtual void GetCurrentPoint( wxDouble& x, wxDouble&y) ; virtual void GetCurrentPoint( wxDouble* x, wxDouble* y) const;
// adds another path // adds another path
virtual void AddPath( const wxGraphicsPath* path ); virtual void AddPath( const wxGraphicsPathData* path );
// closes the current sub-path // closes the current sub-path
virtual void CloseSubpath(); virtual void CloseSubpath();
@@ -158,36 +157,30 @@ public :
virtual void * GetNativePath() const ; virtual void * GetNativePath() const ;
// give the native path returned by GetNativePath() back (there might be some deallocations necessary) // give the native path returned by GetNativePath() back (there might be some deallocations necessary)
virtual void UnGetNativePath(void *p) ; virtual void UnGetNativePath(void *p) const;
// transforms each point of this path by the matrix // transforms each point of this path by the matrix
virtual void Transform( wxGraphicsMatrix* matrix ) ; virtual void Transform( const wxGraphicsMatrixData* matrix ) ;
// gets the bounding box enclosing all points (possibly including control points) // gets the bounding box enclosing all points (possibly including control points)
virtual void GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h) ; virtual void GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h) const;
virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxWINDING_RULE) ; virtual bool Contains( wxDouble x, wxDouble y, int fillStyle = wxWINDING_RULE) const;
private : private :
cairo_t* m_pathContext; cairo_t* m_pathContext;
DECLARE_DYNAMIC_CLASS_NO_COPY(wxCairoPath)
}; };
class WXDLLIMPEXP_CORE wxCairoMatrix : public wxGraphicsMatrix class WXDLLIMPEXP_CORE wxCairoMatrixData : public wxGraphicsMatrixData
{ {
public : public :
wxCairoMatrix() ; wxCairoMatrixData(wxGraphicsRenderer* renderer, const cairo_matrix_t* matrix = NULL ) ;
virtual ~wxCairoMatrixData() ;
wxCairoMatrix(wxGraphicsRenderer* renderer, const cairo_matrix_t* matrix = NULL ) ; virtual wxGraphicsObjectRefData *Clone() const ;
virtual ~wxCairoMatrix() ;
virtual wxGraphicsMatrix *Clone() const ;
// concatenates the matrix // concatenates the matrix
virtual void Concat( const wxGraphicsMatrix *t ); virtual void Concat( const wxGraphicsMatrixData *t );
// copies the passed in matrix
virtual void Copy( const wxGraphicsMatrix *t );
// sets the matrix to the respective values // sets the matrix to the respective values
virtual void Set(wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0, virtual void Set(wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0,
@@ -197,10 +190,10 @@ public :
virtual void Invert(); virtual void Invert();
// returns true if the elements of the transformation matrix are equal ? // returns true if the elements of the transformation matrix are equal ?
virtual bool IsEqual( const wxGraphicsMatrix* t) const ; virtual bool IsEqual( const wxGraphicsMatrixData* t) const ;
// return true if this is the identity matrix // return true if this is the identity matrix
virtual bool IsIdentity(); virtual bool IsIdentity() const;
// //
// transformation // transformation
@@ -220,17 +213,15 @@ public :
// //
// applies that matrix to the point // applies that matrix to the point
virtual void TransformPoint( wxDouble *x, wxDouble *y ); virtual void TransformPoint( wxDouble *x, wxDouble *y ) const;
// applies the matrix except for translations // applies the matrix except for translations
virtual void TransformDistance( wxDouble *dx, wxDouble *dy ); virtual void TransformDistance( wxDouble *dx, wxDouble *dy ) const;
// returns the native representation // returns the native representation
virtual void * GetNativeMatrix() const; virtual void * GetNativeMatrix() const;
private: private:
cairo_matrix_t m_matrix ; cairo_matrix_t m_matrix ;
DECLARE_DYNAMIC_CLASS_NO_COPY(wxCairoMatrix)
} ; } ;
class WXDLLIMPEXP_CORE wxCairoPenData : public wxGraphicsObjectRefData class WXDLLIMPEXP_CORE wxCairoPenData : public wxGraphicsObjectRefData
@@ -329,21 +320,21 @@ public:
virtual void * GetNativeContext(); virtual void * GetNativeContext();
virtual void StrokePath( const wxGraphicsPath *p ); virtual void StrokePath( const wxGraphicsPath& p );
virtual void FillPath( const wxGraphicsPath *p , int fillStyle = wxWINDING_RULE ); virtual void FillPath( const wxGraphicsPath& p , int fillStyle = wxWINDING_RULE );
virtual void Translate( wxDouble dx , wxDouble dy ); virtual void Translate( wxDouble dx , wxDouble dy );
virtual void Scale( wxDouble xScale , wxDouble yScale ); virtual void Scale( wxDouble xScale , wxDouble yScale );
virtual void Rotate( wxDouble angle ); virtual void Rotate( wxDouble angle );
// concatenates this transform with the current transform of this context // concatenates this transform with the current transform of this context
virtual void ConcatTransform( const wxGraphicsMatrix* matrix ); virtual void ConcatTransform( const wxGraphicsMatrix& matrix );
// sets the transform of this context // sets the transform of this context
virtual void SetTransform( const wxGraphicsMatrix* matrix ); virtual void SetTransform( const wxGraphicsMatrix& matrix );
// gets the matrix of this context // gets the matrix of this context
virtual void GetTransform( wxGraphicsMatrix* matrix ); virtual wxGraphicsMatrix GetTransform() const;
virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h ); virtual void DrawBitmap( const wxBitmap &bmp, wxDouble x, wxDouble y, wxDouble w, wxDouble h );
virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h ); virtual void DrawIcon( const wxIcon &icon, wxDouble x, wxDouble y, wxDouble w, wxDouble h );
@@ -700,18 +691,11 @@ void wxCairoFontData::Apply( wxGraphicsContext* context )
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxCairoPath implementation // wxCairoPathData implementation
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxCairoPath,wxGraphicsPath) wxCairoPathData::wxCairoPathData( wxGraphicsRenderer* renderer, cairo_t* pathcontext)
: wxGraphicsPathData(renderer)
wxCairoPath::wxCairoPath() : wxGraphicsPath(NULL)
{
wxLogDebug(wxT("Illegal Constructor called"));
}
wxCairoPath::wxCairoPath( wxGraphicsRenderer* renderer, cairo_t* pathcontext)
: wxGraphicsPath(renderer)
{ {
if (pathcontext) if (pathcontext)
{ {
@@ -725,12 +709,12 @@ wxCairoPath::wxCairoPath( wxGraphicsRenderer* renderer, cairo_t* pathcontext)
} }
} }
wxCairoPath::~wxCairoPath() wxCairoPathData::~wxCairoPathData()
{ {
cairo_destroy(m_pathContext); cairo_destroy(m_pathContext);
} }
wxGraphicsPath *wxCairoPath::Clone() const wxGraphicsObjectRefData *wxCairoPathData::Clone() const
{ {
cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,1,1); cairo_surface_t* surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,1,1);
cairo_t* pathcontext = cairo_create(surface); cairo_t* pathcontext = cairo_create(surface);
@@ -739,16 +723,16 @@ wxGraphicsPath *wxCairoPath::Clone() const
cairo_path_t* path = cairo_copy_path(m_pathContext); cairo_path_t* path = cairo_copy_path(m_pathContext);
cairo_append_path(pathcontext, path); cairo_append_path(pathcontext, path);
cairo_path_destroy(path); cairo_path_destroy(path);
return new wxCairoPath( GetRenderer() ,pathcontext); return new wxCairoPathData( GetRenderer() ,pathcontext);
} }
void* wxCairoPath::GetNativePath() const void* wxCairoPathData::GetNativePath() const
{ {
return cairo_copy_path(m_pathContext) ; return cairo_copy_path(m_pathContext) ;
} }
void wxCairoPath::UnGetNativePath(void *p) void wxCairoPathData::UnGetNativePath(void *p) const
{ {
cairo_path_destroy((cairo_path_t*)p); cairo_path_destroy((cairo_path_t*)p);
} }
@@ -757,41 +741,43 @@ void wxCairoPath::UnGetNativePath(void *p)
// The Primitives // The Primitives
// //
void wxCairoPath::MoveToPoint( wxDouble x , wxDouble y ) void wxCairoPathData::MoveToPoint( wxDouble x , wxDouble y )
{ {
cairo_move_to(m_pathContext,x,y); cairo_move_to(m_pathContext,x,y);
} }
void wxCairoPath::AddLineToPoint( wxDouble x , wxDouble y ) void wxCairoPathData::AddLineToPoint( wxDouble x , wxDouble y )
{ {
cairo_line_to(m_pathContext,x,y); cairo_line_to(m_pathContext,x,y);
} }
void wxCairoPath::AddPath( const wxGraphicsPath* path ) void wxCairoPathData::AddPath( const wxGraphicsPathData* path )
{ {
// TODO // TODO
} }
void wxCairoPath::CloseSubpath() void wxCairoPathData::CloseSubpath()
{ {
cairo_close_path(m_pathContext); cairo_close_path(m_pathContext);
} }
void wxCairoPath::AddCurveToPoint( wxDouble cx1, wxDouble cy1, wxDouble cx2, wxDouble cy2, wxDouble x, wxDouble y ) void wxCairoPathData::AddCurveToPoint( wxDouble cx1, wxDouble cy1, wxDouble cx2, wxDouble cy2, wxDouble x, wxDouble y )
{ {
cairo_curve_to(m_pathContext,cx1,cy1,cx2,cy2,x,y); cairo_curve_to(m_pathContext,cx1,cy1,cx2,cy2,x,y);
} }
// gets the last point of the current path, (0,0) if not yet set // gets the last point of the current path, (0,0) if not yet set
void wxCairoPath::GetCurrentPoint( wxDouble& x, wxDouble&y) void wxCairoPathData::GetCurrentPoint( wxDouble* x, wxDouble* y) const
{ {
double dx,dy; double dx,dy;
cairo_get_current_point(m_pathContext,&dx,&dy); cairo_get_current_point(m_pathContext,&dx,&dy);
x = dx; if (x)
y = dy; *x = dx;
if (y)
*y = dy;
} }
void wxCairoPath::AddArc( wxDouble x, wxDouble y, wxDouble r, double startAngle, double endAngle, bool clockwise ) void wxCairoPathData::AddArc( wxDouble x, wxDouble y, wxDouble r, double startAngle, double endAngle, bool clockwise )
{ {
// as clockwise means positive in our system (y pointing downwards) // as clockwise means positive in our system (y pointing downwards)
// TODO make this interpretation dependent of the // TODO make this interpretation dependent of the
@@ -803,7 +789,7 @@ void wxCairoPath::AddArc( wxDouble x, wxDouble y, wxDouble r, double startAngle,
} }
// transforms each point of this path by the matrix // transforms each point of this path by the matrix
void wxCairoPath::Transform( wxGraphicsMatrix* matrix ) void wxCairoPathData::Transform( const wxGraphicsMatrixData* matrix )
{ {
// as we don't have a true path object, we have to apply the inverse // as we don't have a true path object, we have to apply the inverse
// matrix to the context // matrix to the context
@@ -813,7 +799,7 @@ void wxCairoPath::Transform( wxGraphicsMatrix* matrix )
} }
// gets the bounding box enclosing all points (possibly including control points) // gets the bounding box enclosing all points (possibly including control points)
void wxCairoPath::GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h) void wxCairoPathData::GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h) const
{ {
double x1,y1,x2,y2; double x1,y1,x2,y2;
@@ -841,66 +827,53 @@ void wxCairoPath::GetBox(wxDouble *x, wxDouble *y, wxDouble *w, wxDouble *h)
} }
} }
bool wxCairoPath::Contains( wxDouble x, wxDouble y, int fillStyle ) bool wxCairoPathData::Contains( wxDouble x, wxDouble y, int fillStyle ) const
{ {
return cairo_in_stroke( m_pathContext, x, y) != NULL; return cairo_in_stroke( m_pathContext, x, y) != 0;
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// wxCairoMatrix implementation // wxCairoMatrixData implementation
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
IMPLEMENT_DYNAMIC_CLASS(wxCairoMatrix,wxGraphicsMatrix) wxCairoMatrixData::wxCairoMatrixData(wxGraphicsRenderer* renderer, const cairo_matrix_t* matrix )
: wxGraphicsMatrixData(renderer)
wxCairoMatrix::wxCairoMatrix() : wxGraphicsMatrix(NULL)
{
wxLogDebug(wxT("Illegal Constructor called"));
}
wxCairoMatrix::wxCairoMatrix(wxGraphicsRenderer* renderer, const cairo_matrix_t* matrix )
: wxGraphicsMatrix(renderer)
{ {
if ( matrix ) if ( matrix )
m_matrix = *matrix; m_matrix = *matrix;
} }
wxCairoMatrix::~wxCairoMatrix() wxCairoMatrixData::~wxCairoMatrixData()
{ {
// nothing to do // nothing to do
} }
wxGraphicsMatrix *wxCairoMatrix::Clone() const wxGraphicsObjectRefData *wxCairoMatrixData::Clone() const
{ {
return new wxCairoMatrix(GetRenderer(),&m_matrix); return new wxCairoMatrixData(GetRenderer(),&m_matrix);
} }
// concatenates the matrix // concatenates the matrix
void wxCairoMatrix::Concat( const wxGraphicsMatrix *t ) void wxCairoMatrixData::Concat( const wxGraphicsMatrixData *t )
{ {
cairo_matrix_multiply( &m_matrix, &m_matrix, (cairo_matrix_t*) t->GetNativeMatrix()); cairo_matrix_multiply( &m_matrix, &m_matrix, (cairo_matrix_t*) t->GetNativeMatrix());
} }
// copies the passed in matrix
void wxCairoMatrix::Copy( const wxGraphicsMatrix *t )
{
m_matrix = *((cairo_matrix_t*) t->GetNativeMatrix());
}
// sets the matrix to the respective values // sets the matrix to the respective values
void wxCairoMatrix::Set(wxDouble a, wxDouble b, wxDouble c, wxDouble d, void wxCairoMatrixData::Set(wxDouble a, wxDouble b, wxDouble c, wxDouble d,
wxDouble tx, wxDouble ty) wxDouble tx, wxDouble ty)
{ {
cairo_matrix_init( &m_matrix, a, b, c, d, tx, ty); cairo_matrix_init( &m_matrix, a, b, c, d, tx, ty);
} }
// makes this the inverse matrix // makes this the inverse matrix
void wxCairoMatrix::Invert() void wxCairoMatrixData::Invert()
{ {
cairo_matrix_invert( &m_matrix ); cairo_matrix_invert( &m_matrix );
} }
// returns true if the elements of the transformation matrix are equal ? // returns true if the elements of the transformation matrix are equal ?
bool wxCairoMatrix::IsEqual( const wxGraphicsMatrix* t) const bool wxCairoMatrixData::IsEqual( const wxGraphicsMatrixData* t) const
{ {
const cairo_matrix_t* tm = (cairo_matrix_t*) t->GetNativeMatrix(); const cairo_matrix_t* tm = (cairo_matrix_t*) t->GetNativeMatrix();
return ( return (
@@ -913,7 +886,7 @@ bool wxCairoMatrix::IsEqual( const wxGraphicsMatrix* t) const
} }
// return true if this is the identity matrix // return true if this is the identity matrix
bool wxCairoMatrix::IsIdentity() bool wxCairoMatrixData::IsIdentity() const
{ {
return ( m_matrix.xx == 1 && m_matrix.yy == 1 && return ( m_matrix.xx == 1 && m_matrix.yy == 1 &&
m_matrix.yx == 0 && m_matrix.xy == 0 && m_matrix.x0 == 0 && m_matrix.y0 == 0); m_matrix.yx == 0 && m_matrix.xy == 0 && m_matrix.x0 == 0 && m_matrix.y0 == 0);
@@ -924,19 +897,19 @@ bool wxCairoMatrix::IsIdentity()
// //
// add the translation to this matrix // add the translation to this matrix
void wxCairoMatrix::Translate( wxDouble dx , wxDouble dy ) void wxCairoMatrixData::Translate( wxDouble dx , wxDouble dy )
{ {
cairo_matrix_translate( &m_matrix, dx, dy) ; cairo_matrix_translate( &m_matrix, dx, dy) ;
} }
// add the scale to this matrix // add the scale to this matrix
void wxCairoMatrix::Scale( wxDouble xScale , wxDouble yScale ) void wxCairoMatrixData::Scale( wxDouble xScale , wxDouble yScale )
{ {
cairo_matrix_scale( &m_matrix, xScale, yScale) ; cairo_matrix_scale( &m_matrix, xScale, yScale) ;
} }
// add the rotation to this matrix (radians) // add the rotation to this matrix (radians)
void wxCairoMatrix::Rotate( wxDouble angle ) void wxCairoMatrixData::Rotate( wxDouble angle )
{ {
cairo_matrix_rotate( &m_matrix, angle) ; cairo_matrix_rotate( &m_matrix, angle) ;
} }
@@ -946,7 +919,7 @@ void wxCairoMatrix::Rotate( wxDouble angle )
// //
// applies that matrix to the point // applies that matrix to the point
void wxCairoMatrix::TransformPoint( wxDouble *x, wxDouble *y ) void wxCairoMatrixData::TransformPoint( wxDouble *x, wxDouble *y ) const
{ {
double lx = *x, ly = *y ; double lx = *x, ly = *y ;
cairo_matrix_transform_point( &m_matrix, &lx, &ly); cairo_matrix_transform_point( &m_matrix, &lx, &ly);
@@ -955,7 +928,7 @@ void wxCairoMatrix::TransformPoint( wxDouble *x, wxDouble *y )
} }
// applies the matrix except for translations // applies the matrix except for translations
void wxCairoMatrix::TransformDistance( wxDouble *dx, wxDouble *dy ) void wxCairoMatrixData::TransformDistance( wxDouble *dx, wxDouble *dy ) const
{ {
double lx = *dx, ly = *dy ; double lx = *dx, ly = *dy ;
cairo_matrix_transform_distance( &m_matrix, &lx, &ly); cairo_matrix_transform_distance( &m_matrix, &lx, &ly);
@@ -964,7 +937,7 @@ void wxCairoMatrix::TransformDistance( wxDouble *dx, wxDouble *dy )
} }
// returns the native representation // returns the native representation
void * wxCairoMatrix::GetNativeMatrix() const void * wxCairoMatrixData::GetNativeMatrix() const
{ {
return (void*) &m_matrix; return (void*) &m_matrix;
} }
@@ -1055,28 +1028,28 @@ void wxCairoContext::ResetClip()
} }
void wxCairoContext::StrokePath( const wxGraphicsPath *path ) void wxCairoContext::StrokePath( const wxGraphicsPath& path )
{ {
if ( !m_pen.IsNull() ) if ( !m_pen.IsNull() )
{ {
cairo_path_t* cp = (cairo_path_t*) path->GetNativePath() ; cairo_path_t* cp = (cairo_path_t*) path.GetNativePath() ;
cairo_append_path(m_context,cp); cairo_append_path(m_context,cp);
((wxCairoPenData*)m_pen.GetRefData())->Apply(this); ((wxCairoPenData*)m_pen.GetRefData())->Apply(this);
cairo_stroke(m_context); cairo_stroke(m_context);
wxConstCast(path, wxGraphicsPath)->UnGetNativePath(cp); path.UnGetNativePath(cp);
} }
} }
void wxCairoContext::FillPath( const wxGraphicsPath *path , int fillStyle ) void wxCairoContext::FillPath( const wxGraphicsPath& path , int fillStyle )
{ {
if ( !m_brush.IsNull() ) if ( !m_brush.IsNull() )
{ {
cairo_path_t* cp = (cairo_path_t*) path->GetNativePath() ; cairo_path_t* cp = (cairo_path_t*) path.GetNativePath() ;
cairo_append_path(m_context,cp); cairo_append_path(m_context,cp);
((wxCairoBrushData*)m_brush.GetRefData())->Apply(this); ((wxCairoBrushData*)m_brush.GetRefData())->Apply(this);
cairo_set_fill_rule(m_context,fillStyle==wxODDEVEN_RULE ? CAIRO_FILL_RULE_EVEN_ODD : CAIRO_FILL_RULE_WINDING); cairo_set_fill_rule(m_context,fillStyle==wxODDEVEN_RULE ? CAIRO_FILL_RULE_EVEN_ODD : CAIRO_FILL_RULE_WINDING);
cairo_fill(m_context); cairo_fill(m_context);
wxConstCast(path, wxGraphicsPath)->UnGetNativePath(cp); path.UnGetNativePath(cp);
} }
} }
@@ -1096,21 +1069,23 @@ void wxCairoContext::Scale( wxDouble xScale , wxDouble yScale )
} }
// concatenates this transform with the current transform of this context // concatenates this transform with the current transform of this context
void wxCairoContext::ConcatTransform( const wxGraphicsMatrix* matrix ) void wxCairoContext::ConcatTransform( const wxGraphicsMatrix& matrix )
{ {
cairo_transform(m_context,(const cairo_matrix_t *) matrix->GetNativeMatrix()); cairo_transform(m_context,(const cairo_matrix_t *) matrix.GetNativeMatrix());
} }
// sets the transform of this context // sets the transform of this context
void wxCairoContext::SetTransform( const wxGraphicsMatrix* matrix ) void wxCairoContext::SetTransform( const wxGraphicsMatrix& matrix )
{ {
cairo_set_matrix(m_context,(const cairo_matrix_t*) matrix->GetNativeMatrix()); cairo_set_matrix(m_context,(const cairo_matrix_t*) matrix.GetNativeMatrix());
} }
// gets the matrix of this context // gets the matrix of this context
void wxCairoContext::GetTransform( wxGraphicsMatrix* matrix ) wxGraphicsMatrix wxCairoContext::GetTransform() const
{ {
cairo_get_matrix(m_context,(cairo_matrix_t*) matrix->GetNativeMatrix()); wxGraphicsMatrix matrix = CreateMatrix();
cairo_get_matrix(m_context,(cairo_matrix_t*) matrix.GetNativeMatrix());
return matrix;
} }
@@ -1199,11 +1174,11 @@ public :
// Path // Path
virtual wxGraphicsPath * CreatePath(); virtual wxGraphicsPath CreatePath();
// Matrix // Matrix
virtual wxGraphicsMatrix * CreateMatrix( wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0, virtual wxGraphicsMatrix CreateMatrix( wxDouble a=1.0, wxDouble b=0.0, wxDouble c=0.0, wxDouble d=1.0,
wxDouble tx=0.0, wxDouble ty=0.0); wxDouble tx=0.0, wxDouble ty=0.0);
@@ -1269,20 +1244,24 @@ wxGraphicsContext * wxCairoRenderer::CreateContext( wxWindow* window )
// Path // Path
wxGraphicsPath * wxCairoRenderer::CreatePath() wxGraphicsPath wxCairoRenderer::CreatePath()
{ {
return new wxCairoPath( this ); wxGraphicsPath path;
path.SetRefData( new wxCairoPathData(this) );
return path;
} }
// Matrix // Matrix
wxGraphicsMatrix * wxCairoRenderer::CreateMatrix( wxDouble a, wxDouble b, wxDouble c, wxDouble d, wxGraphicsMatrix wxCairoRenderer::CreateMatrix( wxDouble a, wxDouble b, wxDouble c, wxDouble d,
wxDouble tx, wxDouble ty) wxDouble tx, wxDouble ty)
{ {
wxCairoMatrix* m = new wxCairoMatrix( this ); wxGraphicsMatrix m;
m->Set( a,b,c,d,tx,ty ) ; wxCairoMatrixData* data = new wxCairoMatrixData( this );
data->Set( a,b,c,d,tx,ty ) ;
m.SetRefData(data);
return m; return m;
} }