From 8acd14d1779dd5610b0fa16b0863adc7df5d9a82 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sat, 21 Oct 2006 12:37:42 +0000 Subject: [PATCH] untangling dc and gc git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@42193 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/dc.h | 4 + include/wx/dcgraph.h | 181 ++++++++++++++++++++++++++++++++++++ include/wx/graphics.h | 163 +------------------------------- include/wx/mac/carbon/dc.h | 6 +- src/aui/dockart.cpp | 1 + src/common/dcbase.cpp | 1 + src/mac/carbon/dcclient.cpp | 1 + src/mac/carbon/dcmemory.cpp | 1 + src/mac/carbon/dcprint.cpp | 1 + src/mac/carbon/dcscreen.cpp | 1 + src/mac/carbon/metafile.cpp | 1 + src/mac/carbon/renderer.cpp | 1 + 12 files changed, 197 insertions(+), 165 deletions(-) create mode 100755 include/wx/dcgraph.h diff --git a/include/wx/dc.h b/include/wx/dc.h index 8cee8f3fb7..a5784f471c 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -856,6 +856,10 @@ private: #include "wx/os2/dc.h" #endif +#if wxUSE_GRAPHICS_CONTEXT + #include "wx/dcgraph.h" +#endif + // ---------------------------------------------------------------------------- // helper class: you can use it to temporarily change the DC text colour and // restore it automatically when the object goes out of scope diff --git a/include/wx/dcgraph.h b/include/wx/dcgraph.h new file mode 100755 index 0000000000..894e33ea56 --- /dev/null +++ b/include/wx/dcgraph.h @@ -0,0 +1,181 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/graphdc.h +// Purpose: graphics context device bridge header +// Author: Stefan Csomor +// Modified by: +// Created: +// Copyright: (c) Stefan Csomor +// RCS-ID: $Id$ +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_GRAPHICS_DC_H_ +#define _WX_GRAPHICS_DC_H_ + +#if wxUSE_GRAPHICS_CONTEXT + +#include "wx/geometry.h" +#include "wx/dynarray.h" + +class WXDLLEXPORT wxGraphicsContext; +class WXDLLEXPORT wxWindowDC; + + +#ifdef __WXMAC__ +#define wxGCDC wxDC +#endif + +class WXDLLEXPORT wxGCDC: +#ifdef __WXMAC__ + public wxDCBase +#else + public wxDC +#endif +{ + DECLARE_DYNAMIC_CLASS(wxGCDC) + DECLARE_NO_COPY_CLASS(wxGCDC) + +public: + wxGCDC(const wxWindowDC& dc); + wxGCDC(); + virtual ~wxGCDC(); + + void Init(); + + + // implement base class pure virtuals + // ---------------------------------- + + virtual void Clear(); + + virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return true; } + virtual void EndDoc(void) {} + + virtual void StartPage(void) {} + virtual void EndPage(void) {} + + virtual void SetFont(const wxFont& font); + virtual void SetPen(const wxPen& pen); + virtual void SetBrush(const wxBrush& brush); + virtual void SetBackground(const wxBrush& brush); + virtual void SetBackgroundMode(int mode); + virtual void SetPalette(const wxPalette& palette); + + virtual void DestroyClippingRegion(); + + virtual wxCoord GetCharHeight() const; + virtual wxCoord GetCharWidth() const; + + virtual bool CanDrawBitmap() const; + virtual bool CanGetTextExtent() const; + 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 SetTextForeground(const wxColour& colour); + virtual void SetTextBackground(const wxColour& colour); + + virtual void ComputeScaleAndOrigin(); + + wxGraphicsContext* GetGraphicContext() { return m_graphicContext; } + virtual void SetGraphicsContext( wxGraphicsContext* ctx ) + { delete m_graphicContext; m_graphicContext = ctx; } +protected: + // the true implementations + virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, + int style = wxFLOOD_SURFACE); + + virtual void DoGradientFillLinear(const wxRect& rect, + const wxColour& initialColour, + const wxColour& destColour, + wxDirection nDirection = wxEAST); + + virtual void DoGradientFillConcentric(const wxRect& rect, + const wxColour& initialColour, + const wxColour& destColour, + const wxPoint& circleCenter); + + virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const; + + virtual void DoDrawPoint(wxCoord x, wxCoord y); + +#if wxUSE_SPLINES + virtual void DoDrawSpline(wxList *points); +#endif + + virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); + + virtual void DoDrawArc(wxCoord x1, wxCoord y1, + wxCoord x2, wxCoord y2, + wxCoord xc, wxCoord yc); + + virtual void DoDrawCheckMark(wxCoord x, wxCoord y, + wxCoord width, wxCoord height); + + virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, + double sa, double ea); + + virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); + virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, + wxCoord width, wxCoord height, + double radius); + virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); + + virtual void DoCrossHair(wxCoord x, wxCoord y); + + virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); + virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, + bool useMask = false); + + virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); + virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, + 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); + + virtual void DoGetSize(int *,int *) const; + virtual void DoGetSizeMM(int* width, int* height) const; + + virtual void DoDrawLines(int n, 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 DoSetClippingRegion(wxCoord x, wxCoord y, + wxCoord width, wxCoord height); + + virtual void DoGetTextExtent(const wxString& string, + wxCoord *x, wxCoord *y, + wxCoord *descent = NULL, + wxCoord *externalLeading = NULL, + wxFont *theFont = NULL) const; + + virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const; + +protected: + // scaling variables + double m_mm_to_pix_x, m_mm_to_pix_y; + + double m_formerScaleX, m_formerScaleY; + + wxGraphicsContext* m_graphicContext; +}; + +#endif + +#endif // _WX_GRAPHICS_DC_H_ diff --git a/include/wx/graphics.h b/include/wx/graphics.h index ec11a4a2f0..1c748a249d 100755 --- a/include/wx/graphics.h +++ b/include/wx/graphics.h @@ -12,14 +12,13 @@ #ifndef _WX_GRAPHICS_H_ #define _WX_GRAPHICS_H_ +#if wxUSE_GRAPHICS_CONTEXT + #include "wx/geometry.h" #include "wx/dynarray.h" -#include "wx/dc.h" class WXDLLEXPORT wxWindowDC; -#if wxUSE_GRAPHICS_CONTEXT - /* * notes about the graphics context apis * @@ -262,162 +261,6 @@ public: DECLARE_NO_COPY_CLASS(wxGraphicsContext) }; -#ifdef __WXMAC__ -#define wxGCDC wxDC -#endif - -class WXDLLEXPORT wxGCDC: -#ifdef __WXMAC__ - public wxDCBase -#else - public wxDC #endif -{ - DECLARE_DYNAMIC_CLASS(wxGCDC) - DECLARE_NO_COPY_CLASS(wxGCDC) - -public: - wxGCDC(const wxWindowDC& dc); - wxGCDC(); - virtual ~wxGCDC(); - - void Init(); - - - // implement base class pure virtuals - // ---------------------------------- - - virtual void Clear(); - - virtual bool StartDoc( const wxString& WXUNUSED(message) ) { return true; } - virtual void EndDoc(void) {} - - virtual void StartPage(void) {} - virtual void EndPage(void) {} - - virtual void SetFont(const wxFont& font); - virtual void SetPen(const wxPen& pen); - virtual void SetBrush(const wxBrush& brush); - virtual void SetBackground(const wxBrush& brush); - virtual void SetBackgroundMode(int mode); - virtual void SetPalette(const wxPalette& palette); - - virtual void DestroyClippingRegion(); - - virtual wxCoord GetCharHeight() const; - virtual wxCoord GetCharWidth() const; - - virtual bool CanDrawBitmap() const; - virtual bool CanGetTextExtent() const; - 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 SetTextForeground(const wxColour& colour); - virtual void SetTextBackground(const wxColour& colour); - - virtual void ComputeScaleAndOrigin(); - - wxGraphicsContext* GetGraphicsContext() { return m_graphicContext; } - virtual void SetGraphicsContext( wxGraphicsContext* ctx ) - { delete m_graphicContext; m_graphicContext = ctx; } -protected: - // the true implementations - virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE); - - virtual void DoGradientFillLinear(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - wxDirection nDirection = wxEAST); - virtual void DoGradientFillConcentric(const wxRect& rect, - const wxColour& initialColour, - const wxColour& destColour, - const wxPoint& circleCenter); - - virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const; - - virtual void DoDrawPoint(wxCoord x, wxCoord y); - -#if wxUSE_SPLINES - virtual void DoDrawSpline(wxList *points); -#endif - - virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); - - virtual void DoDrawArc(wxCoord x1, wxCoord y1, - wxCoord x2, wxCoord y2, - wxCoord xc, wxCoord yc); - - virtual void DoDrawCheckMark(wxCoord x, wxCoord y, - wxCoord width, wxCoord height); - - virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, - double sa, double ea); - - virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, - wxCoord width, wxCoord height, - double radius); - virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - - virtual void DoCrossHair(wxCoord x, wxCoord y); - - virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); - virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, - bool useMask = false); - - virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); - virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, - 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); - - virtual void DoGetSize(int *,int *) const; - virtual void DoGetSizeMM(int* width, int* height) const; - - virtual void DoDrawLines(int n, 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 DoSetClippingRegion(wxCoord x, wxCoord y, - wxCoord width, wxCoord height); - - virtual void DoGetTextExtent(const wxString& string, - wxCoord *x, wxCoord *y, - wxCoord *descent = NULL, - wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const; - - virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const; - -protected: - // scaling variables - double m_mm_to_pix_x, m_mm_to_pix_y; - - double m_formerScaleX, m_formerScaleY; - - wxGraphicsContext* m_graphicContext; -}; - -#endif - -#endif - // _WX_GRID_H_BASE_ +#endif // _WX_GRAPHICS_H_ diff --git a/include/wx/mac/carbon/dc.h b/include/wx/mac/carbon/dc.h index c0e60d151d..29565e6d13 100644 --- a/include/wx/mac/carbon/dc.h +++ b/include/wx/mac/carbon/dc.h @@ -36,11 +36,7 @@ class wxMacPortStateHelper; -#if wxUSE_GRAPHICS_CONTEXT - -#include "wx/graphics.h" - -#else +#if !wxUSE_GRAPHICS_CONTEXT class WXDLLEXPORT wxGraphicPath { diff --git a/src/aui/dockart.cpp b/src/aui/dockart.cpp index ac6b8826d3..1eab5042d2 100644 --- a/src/aui/dockart.cpp +++ b/src/aui/dockart.cpp @@ -36,6 +36,7 @@ #ifdef __WXMAC__ #include "wx/mac/private.h" +#include "wx/graphics.h" #endif #ifdef __WXGTK__ diff --git a/src/common/dcbase.cpp b/src/common/dcbase.cpp index 77b5894fb9..6367f5ec28 100644 --- a/src/common/dcbase.cpp +++ b/src/common/dcbase.cpp @@ -1162,6 +1162,7 @@ void wxDCBase::CalculateEllipticPoints( wxList* points, #include "wx/mac/private.h" #include "wx/toplevel.h" +#include "wx/graphics.h" class wxOverlayImpl { diff --git a/src/mac/carbon/dcclient.cpp b/src/mac/carbon/dcclient.cpp index 2904d9a27d..73d0d4d301 100644 --- a/src/mac/carbon/dcclient.cpp +++ b/src/mac/carbon/dcclient.cpp @@ -23,6 +23,7 @@ #include "wx/region.h" #endif +#include "wx/graphics.h" #include "wx/mac/private.h" //----------------------------------------------------------------------------- diff --git a/src/mac/carbon/dcmemory.cpp b/src/mac/carbon/dcmemory.cpp index 393e0a23c2..541ad66c4e 100644 --- a/src/mac/carbon/dcmemory.cpp +++ b/src/mac/carbon/dcmemory.cpp @@ -12,6 +12,7 @@ #include "wx/wxprec.h" #include "wx/dcmemory.h" +#include "wx/graphics.h" #include "wx/mac/private.h" diff --git a/src/mac/carbon/dcprint.cpp b/src/mac/carbon/dcprint.cpp index f1d1a2f880..ad07cc2d94 100644 --- a/src/mac/carbon/dcprint.cpp +++ b/src/mac/carbon/dcprint.cpp @@ -27,6 +27,7 @@ #include "wx/mac/uma.h" #include "wx/mac/private/print.h" +#include "wx/graphics.h" IMPLEMENT_CLASS(wxPrinterDC, wxDC) diff --git a/src/mac/carbon/dcscreen.cpp b/src/mac/carbon/dcscreen.cpp index 2468ce77db..4c985b910f 100644 --- a/src/mac/carbon/dcscreen.cpp +++ b/src/mac/carbon/dcscreen.cpp @@ -14,6 +14,7 @@ #include "wx/dcscreen.h" #include "wx/mac/uma.h" +#include "wx/graphics.h" IMPLEMENT_DYNAMIC_CLASS(wxScreenDC, wxWindowDC) diff --git a/src/mac/carbon/metafile.cpp b/src/mac/carbon/metafile.cpp index 1e8a5e6dd1..a99899b188 100644 --- a/src/mac/carbon/metafile.cpp +++ b/src/mac/carbon/metafile.cpp @@ -25,6 +25,7 @@ #include "wx/metafile.h" #include "wx/clipbrd.h" #include "wx/mac/private.h" +#include "wx/graphics.h" #include #include diff --git a/src/mac/carbon/renderer.cpp b/src/mac/carbon/renderer.cpp index b44cd2cd78..c9c3904f5c 100644 --- a/src/mac/carbon/renderer.cpp +++ b/src/mac/carbon/renderer.cpp @@ -26,6 +26,7 @@ #endif #include "wx/renderer.h" +#include "wx/graphics.h" #include "wx/mac/uma.h" -- 2.45.2