#if wxUSE_GRAPHICS_CONTEXT
+#include "wx/dc.h"
#include "wx/geometry.h"
-#include "wx/dynarray.h"
+#include "wx/graphics.h"
-class WXDLLEXPORT wxGraphicsContext;
-class WXDLLEXPORT wxWindowDC;
+class WXDLLIMPEXP_FWD_CORE wxWindowDC;
-#ifdef __WXMAC__
-#define wxGCDC wxDC
-#endif
-
-class WXDLLEXPORT wxGCDC:
-#ifdef __WXMAC__
- public wxDCBase
-#else
- public wxDC
-#endif
+class WXDLLIMPEXP_CORE wxGCDC: public wxDC
{
+public:
+ wxGCDC( const wxWindowDC& dc );
+ wxGCDC( const wxMemoryDC& dc );
+#if wxUSE_PRINTING_ARCHITECTURE
+ wxGCDC( const wxPrinterDC& dc );
+#endif
+ wxGCDC();
+ virtual ~wxGCDC();
+
+ wxGraphicsContext* GetGraphicsContext();
+ void SetGraphicsContext( wxGraphicsContext* ctx );
+
DECLARE_DYNAMIC_CLASS(wxGCDC)
DECLARE_NO_COPY_CLASS(wxGCDC)
+};
+
+class WXDLLIMPEXP_CORE wxGCDCImpl: public wxDCImpl
+{
public:
- wxGCDC(const wxWindowDC& dc);
- wxGCDC();
- virtual ~wxGCDC();
+ wxGCDCImpl( wxDC *owner, const wxWindowDC& dc );
+ wxGCDCImpl( wxDC *owner, const wxMemoryDC& dc );
+#if wxUSE_PRINTING_ARCHITECTURE
+ wxGCDCImpl( wxDC *owner, const wxPrinterDC& dc );
+#endif
+ wxGCDCImpl( wxDC *owner );
+
+ virtual ~wxGCDCImpl();
void Init();
virtual void Clear();
- virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return true; }
- virtual void EndDoc(void) {}
+ virtual bool StartDoc( const wxString& message );
+ virtual void EndDoc();
- virtual void StartPage(void) {}
- virtual void EndPage(void) {}
+ virtual void StartPage();
+ virtual void EndPage();
+
+ // flushing the content of this dc immediately onto screen
+ virtual void Flush();
virtual void SetFont(const wxFont& font);
virtual void SetPen(const wxPen& pen);
virtual wxSize GetPPI() const;
virtual void SetMapMode(int mode);
- virtual void SetUserScale(double x, double y);
- virtual void SetLogicalScale(double x, double y);
- virtual void SetLogicalOrigin(wxCoord x, wxCoord y);
- virtual void SetDeviceOrigin(wxCoord x, wxCoord y);
- virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
virtual void SetLogicalFunction(int function);
virtual void SetTextForeground(const wxColour& colour);
virtual void ComputeScaleAndOrigin();
- wxGraphicsContext* GetGraphicContext() { return m_graphicContext; }
- virtual void SetGraphicsContext( wxGraphicsContext* ctx )
- { delete m_graphicContext; m_graphicContext = ctx; }
-protected:
+ wxGraphicsContext* GetGraphicsContext() { return m_graphicContext; }
+ virtual void SetGraphicsContext( wxGraphicsContext* ctx );
+
// the true implementations
virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
int style = wxFLOOD_SURFACE);
virtual void DoDrawPoint(wxCoord x, wxCoord y);
#if wxUSE_SPLINES
- virtual void DoDrawSpline(wxList *points);
+ virtual void DoDrawSpline(const wxPointList *points);
#endif
virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
wxDC *source, wxCoord xsrc, wxCoord ysrc,
int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
+ virtual bool DoStretchBlit(wxCoord xdest, wxCoord ydest,
+ wxCoord dstWidth, wxCoord dstHeight,
+ wxDC *source,
+ wxCoord xsrc, wxCoord ysrc,
+ wxCoord srcWidth, wxCoord srcHeight,
+ int rop = wxCOPY, bool useMask = false,
+ wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord);
+
virtual void DoGetSize(int *,int *) const;
virtual void DoGetSizeMM(int* width, int* height) const;
wxCoord xoffset, wxCoord yoffset,
int fillStyle);
- virtual void DoSetClippingRegionAsRegion(const wxRegion& region);
+ virtual void DoSetDeviceClippingRegion(const wxRegion& region);
virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
wxCoord width, wxCoord height);
wxCoord *x, wxCoord *y,
wxCoord *descent = NULL,
wxCoord *externalLeading = NULL,
- wxFont *theFont = NULL) const;
+ const wxFont *theFont = NULL) const;
virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const;
protected:
// scaling variables
+ bool m_logicalFunctionSupported;
double m_mm_to_pix_x, m_mm_to_pix_y;
-
- double m_formerScaleX, m_formerScaleY;
+ wxGraphicsMatrix m_matrixOriginal;
+ wxGraphicsMatrix m_matrixCurrent;
+
+ double m_formerScaleX, m_formerScaleY;
wxGraphicsContext* m_graphicContext;
+
+ DECLARE_CLASS(wxGCDCImpl)
+ DECLARE_NO_COPY_CLASS(wxGCDCImpl)
};
-#endif
-
+#endif // wxUSE_GRAPHICS_CONTEXT
#endif // _WX_GRAPHICS_DC_H_