X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ddb0ed69a947fdc330d5d8b5a1e7baee8b1b89ae..60dbc04c461334f22c189fff24c16451e7cae7a5:/include/wx/dcgraph.h diff --git a/include/wx/dcgraph.h b/include/wx/dcgraph.h old mode 100755 new mode 100644 index 9d1e4d7fb9..95f0732d06 --- a/include/wx/dcgraph.h +++ b/include/wx/dcgraph.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: wx/graphdc.h +// Name: wx/dcgraph.h // Purpose: graphics context device bridge header // Author: Stefan Csomor // Modified by: @@ -14,45 +14,73 @@ #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 { - DECLARE_DYNAMIC_CLASS(wxGCDC) - DECLARE_NO_COPY_CLASS(wxGCDC) - public: - wxGCDC(const wxWindowDC& dc); + wxGCDC( const wxWindowDC& dc ); + wxGCDC( const wxMemoryDC& dc ); +#if wxUSE_PRINTING_ARCHITECTURE + wxGCDC( const wxPrinterDC& dc ); +#endif +#if defined(__WXMSW__) && wxUSE_ENH_METAFILE + wxGCDC( const wxEnhMetaFileDC& dc ); +#endif + wxGCDC(wxGraphicsContext* context); + wxGCDC(); virtual ~wxGCDC(); - void Init(); + wxGraphicsContext* GetGraphicsContext() const; + void SetGraphicsContext( wxGraphicsContext* ctx ); +#ifdef __WXMSW__ + // override wxDC virtual functions to provide access to HDC associated with + // this Graphics object (implemented in src/msw/graphics.cpp) + virtual WXHDC AcquireHDC(); + virtual void ReleaseHDC(WXHDC hdc); +#endif // __WXMSW__ + +private: + DECLARE_DYNAMIC_CLASS(wxGCDC) + wxDECLARE_NO_COPY_CLASS(wxGCDC); +}; + + +class WXDLLIMPEXP_CORE wxGCDCImpl: public wxDCImpl +{ +public: + wxGCDCImpl( wxDC *owner, const wxWindowDC& dc ); + wxGCDCImpl( wxDC *owner, const wxMemoryDC& dc ); +#if wxUSE_PRINTING_ARCHITECTURE + wxGCDCImpl( wxDC *owner, const wxPrinterDC& dc ); +#endif +#if defined(__WXMSW__) && wxUSE_ENH_METAFILE + wxGCDCImpl( wxDC *owner, const wxEnhMetaFileDC& dc ); +#endif + wxGCDCImpl( wxDC *owner ); + + virtual ~wxGCDCImpl(); // implement base class pure virtuals // ---------------------------------- 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); @@ -71,27 +99,21 @@ public: virtual int GetDepth() const; 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 SetLogicalFunction(wxRasterOperationMode function); virtual void SetTextForeground(const wxColour& colour); virtual void SetTextBackground(const wxColour& colour); virtual void ComputeScaleAndOrigin(); - wxGraphicsContext* GetGraphicContext() { return m_graphicContext; } - virtual void SetGraphicsContext( wxGraphicsContext* ctx ); - -protected: + wxGraphicsContext* GetGraphicsContext() const { return m_graphicContext; } + virtual void SetGraphicsContext( wxGraphicsContext* ctx ); + + virtual void* GetHandle() const; + // the true implementations virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE); + wxFloodFillStyle style = wxFLOOD_SURFACE); virtual void DoGradientFillLinear(const wxRect& rect, const wxColour& initialColour, @@ -108,7 +130,7 @@ protected: 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); @@ -140,22 +162,31 @@ protected: double angle); virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, - wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); + wxDC *source, wxCoord xsrc, wxCoord ysrc, + wxRasterOperationMode 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, + wxRasterOperationMode = wxCOPY, bool useMask = false, + wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord); virtual void DoGetSize(int *,int *) const; virtual void DoGetSizeMM(int* width, int* height) const; - virtual void DoDrawLines(int n, wxPoint points[], + virtual void DoDrawLines(int n, const wxPoint points[], wxCoord xoffset, wxCoord yoffset); - virtual void DoDrawPolygon(int n, wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle = wxODDEVEN_RULE); - virtual void DoDrawPolyPolygon(int n, int count[], wxPoint points[], - wxCoord xoffset, wxCoord yoffset, - int fillStyle); - - virtual void DoSetClippingRegionAsRegion(const wxRegion& region); + virtual void DoDrawPolygon(int n, const wxPoint points[], + wxCoord xoffset, wxCoord yoffset, + wxPolygonFillMode fillStyle = wxODDEVEN_RULE); + virtual void DoDrawPolyPolygon(int n, const int count[], const wxPoint points[], + wxCoord xoffset, wxCoord yoffset, + wxPolygonFillMode fillStyle); + + virtual void DoSetDeviceClippingRegion(const wxRegion& region); virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height); @@ -163,19 +194,34 @@ protected: 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; +#ifdef __WXMSW__ + virtual wxRect MSWApplyGDIPlusTransform(const wxRect& r) const; +#endif // __WXMSW__ + protected: + // unused int parameter distinguishes this version, which does not create a + // wxGraphicsContext, in the expectation that the derived class will do it + wxGCDCImpl(wxDC* owner, int); + // scaling variables - double m_mm_to_pix_x, m_mm_to_pix_y; - - double m_formerScaleX, m_formerScaleY; + bool m_logicalFunctionSupported; + wxGraphicsMatrix m_matrixOriginal; + wxGraphicsMatrix m_matrixCurrent; + + double m_formerScaleX, m_formerScaleY; wxGraphicsContext* m_graphicContext; -}; -#endif +private: + void Init(wxGraphicsContext*); + + DECLARE_CLASS(wxGCDCImpl) + wxDECLARE_NO_COPY_CLASS(wxGCDCImpl); +}; +#endif // wxUSE_GRAPHICS_CONTEXT #endif // _WX_GRAPHICS_DC_H_