+// 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_CORE wxGraphicsObjectRefData : public wxObjectRefData
+{
+public :
+ wxGraphicsObjectRefData( wxGraphicsRenderer* renderer );
+ wxGraphicsObjectRefData( const wxGraphicsObjectRefData* data );
+ wxGraphicsRenderer* GetRenderer() const ;
+ virtual wxGraphicsObjectRefData* Clone() const ;
+
+protected :
+ wxGraphicsRenderer* m_renderer;
+} ;
+
+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 WXDLLEXPORT_DATA(wxGraphicsPen) wxNullGraphicsPen;
+
+class WXDLLIMPEXP_CORE wxGraphicsBrush : public wxGraphicsObject
+{
+public :
+ wxGraphicsBrush() {}
+ virtual ~wxGraphicsBrush() {}
+private :
+ DECLARE_DYNAMIC_CLASS(wxGraphicsBrush)
+} ;
+
+extern WXDLLEXPORT_DATA(wxGraphicsBrush) wxNullGraphicsBrush;
+
+class WXDLLIMPEXP_CORE wxGraphicsFont : public wxGraphicsObject
+{
+public :
+ wxGraphicsFont() {}
+ virtual ~wxGraphicsFont() {}
+private :
+ DECLARE_DYNAMIC_CLASS(wxGraphicsFont)
+} ;
+
+extern WXDLLEXPORT_DATA(wxGraphicsFont) wxNullGraphicsFont;
+
+
+class WXDLLIMPEXP_CORE wxGraphicsPath : public wxGraphicsObject