+// Base class of all objects used for drawing in the new graphics API, the always point back to their
+// originating rendering engine, there is no dynamic unloading of a renderer currently allowed,
+// these references are not counted
+
+//
+// The data used by objects like graphics pens etc is ref counted, in order to avoid unnecessary expensive
+// duplication. Any operation on a shared instance that results in a modified state, uncouples this
+// instance from the other instances that were shared - using copy on write semantics
+//
+
+class WXDLLIMPEXP_FWD_CORE wxGraphicsObjectRefData;
+class WXDLLIMPEXP_FWD_CORE wxGraphicsMatrixData;
+class WXDLLIMPEXP_FWD_CORE wxGraphicsPathData;
+
+class WXDLLIMPEXP_CORE wxGraphicsObject : public wxObject
+{
+public :
+ wxGraphicsObject() ;
+ wxGraphicsObject( wxGraphicsRenderer* renderer ) ;
+ virtual ~wxGraphicsObject() ;
+
+ bool IsNull() const ;
+
+ // returns the renderer that was used to create this instance, or NULL if it has not been initialized yet
+ wxGraphicsRenderer* GetRenderer() const ;
+ wxGraphicsObjectRefData* GetGraphicsData() const ;
+protected :
+ virtual wxObjectRefData* CreateRefData() const;
+ virtual wxObjectRefData* CloneRefData(const wxObjectRefData* data) const;
+
+ DECLARE_DYNAMIC_CLASS(wxGraphicsObject)
+} ;
+
+class WXDLLIMPEXP_CORE wxGraphicsPen : public wxGraphicsObject
+{
+public :
+ wxGraphicsPen() {}
+ virtual ~wxGraphicsPen() {}
+private :
+ DECLARE_DYNAMIC_CLASS(wxGraphicsPen)
+} ;
+
+extern WXDLLIMPEXP_DATA_CORE(wxGraphicsPen) wxNullGraphicsPen;
+
+class WXDLLIMPEXP_CORE wxGraphicsBrush : public wxGraphicsObject
+{
+public :
+ wxGraphicsBrush() {}
+ virtual ~wxGraphicsBrush() {}
+private :
+ DECLARE_DYNAMIC_CLASS(wxGraphicsBrush)
+} ;
+
+extern WXDLLIMPEXP_DATA_CORE(wxGraphicsBrush) wxNullGraphicsBrush;
+
+class WXDLLIMPEXP_CORE wxGraphicsFont : public wxGraphicsObject
+{
+public :
+ wxGraphicsFont() {}
+ virtual ~wxGraphicsFont() {}
+private :
+ DECLARE_DYNAMIC_CLASS(wxGraphicsFont)
+} ;
+
+extern WXDLLIMPEXP_DATA_CORE(wxGraphicsFont) wxNullGraphicsFont;
+
+class WXDLLIMPEXP_CORE wxGraphicsBitmap : public wxGraphicsObject
+{
+public :
+ wxGraphicsBitmap() {}
+ virtual ~wxGraphicsBitmap() {}
+private :
+ DECLARE_DYNAMIC_CLASS(wxGraphicsBitmap)
+} ;
+
+extern WXDLLIMPEXP_DATA_CORE(wxGraphicsBitmap) wxNullGraphicsBitmap;
+
+class WXDLLIMPEXP_CORE wxGraphicsMatrix : public wxGraphicsObject
+{
+public :
+ wxGraphicsMatrix() {}
+
+ virtual ~wxGraphicsMatrix() {}
+
+ // concatenates the matrix
+ virtual void Concat( const wxGraphicsMatrix *t );
+ void Concat( const wxGraphicsMatrix &t ) { Concat( &t ); }
+
+ // 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,
+ wxDouble tx=0.0, wxDouble ty=0.0);
+
+ // gets the component valuess of the matrix
+ virtual void Get(wxDouble* a=NULL, wxDouble* b=NULL, wxDouble* c=NULL,
+ wxDouble* d=NULL, wxDouble* tx=NULL, wxDouble* ty=NULL) const;
+
+ // makes this the inverse matrix
+ virtual void Invert();
+
+ // returns true if the elements of the transformation matrix are equal ?
+ virtual bool IsEqual( const wxGraphicsMatrix* t) const;
+ bool IsEqual( const wxGraphicsMatrix& t) const { return IsEqual( &t ); }
+
+ // return true if this is the identity matrix
+ virtual bool IsIdentity() const;
+
+ //
+ // transformation
+ //
+
+ // add the translation to this matrix
+ virtual void Translate( wxDouble dx , wxDouble dy );
+
+ // add the scale to this matrix
+ virtual void Scale( wxDouble xScale , wxDouble yScale );
+
+ // add the rotation to this matrix (radians)
+ virtual void Rotate( wxDouble angle );
+
+ //
+ // apply the transforms
+ //
+
+ // applies that matrix to the point
+ virtual void TransformPoint( wxDouble *x, wxDouble *y ) const;
+
+ // applies the matrix except for translations
+ virtual void TransformDistance( wxDouble *dx, wxDouble *dy ) const;
+
+ // returns the native representation
+ virtual void * GetNativeMatrix() const;
+
+ const wxGraphicsMatrixData* GetMatrixData() const
+ { return (const wxGraphicsMatrixData*) GetRefData(); }
+ wxGraphicsMatrixData* GetMatrixData()
+ { return (wxGraphicsMatrixData*) GetRefData(); }
+
+private :
+ DECLARE_DYNAMIC_CLASS(wxGraphicsMatrix)
+} ;
+
+extern WXDLLIMPEXP_DATA_CORE(wxGraphicsMatrix) wxNullGraphicsMatrix;
+
+class WXDLLIMPEXP_CORE wxGraphicsPath : public wxGraphicsObject