X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/19edb09cd9448dc612608df48809683e292f0c06..5482ee0766d86c79f82733780d5d4833070bf064:/include/wx/dc.h?ds=sidebyside diff --git a/include/wx/dc.h b/include/wx/dc.h index 9ace93ce83..0b74388dff 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dc.h +// Name: wx/dc.h // Purpose: wxDC class // Author: Vadim Zeitlin // Modified by: @@ -12,10 +12,6 @@ #ifndef _WX_DC_H_BASE_ #define _WX_DC_H_BASE_ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "dcbase.h" -#endif - // ---------------------------------------------------------------------------- // headers which we must include here // ---------------------------------------------------------------------------- @@ -97,8 +93,6 @@ protected: // global variables // --------------------------------------------------------------------------- -WXDLLEXPORT_DATA(extern int) wxPageNumber; - // --------------------------------------------------------------------------- // wxDC is the device context - object on which any drawing is done // --------------------------------------------------------------------------- @@ -138,10 +132,12 @@ public: ResetClipping(); } - ~wxDCBase() { } + virtual ~wxDCBase() { } - virtual void BeginDrawing() { } - virtual void EndDrawing() { } +#if WXWIN_COMPATIBILITY_2_6 + wxDEPRECATED( virtual void BeginDrawing() ); + wxDEPRECATED( virtual void EndDrawing() ); +#endif // WXWIN_COMPATIBILITY_2_6 // graphic primitives // ------------------ @@ -160,6 +156,28 @@ public: int style = wxFLOOD_SURFACE) { return DoFloodFill(pt.x, pt.y, col, style); } + // fill the area specified by rect with a radial gradient, starting from + // initialColour in the centre of the cercle and fading to destColour. + void GradientFillConcentric(const wxRect& rect, + const wxColour& initialColour, + const wxColour& destColour) + { GradientFillConcentric(rect, initialColour, destColour, + wxPoint(rect.GetWidth() / 2, + rect.GetHeight() / 2)); } + + void GradientFillConcentric(const wxRect& rect, + const wxColour& initialColour, + const wxColour& destColour, + const wxPoint& circleCenter) + { DoGradientFillConcentric(rect, initialColour, destColour, circleCenter); } + + // fill the area specified by rect with a linear gradient + void GradientFillLinear(const wxRect& rect, + const wxColour& initialColour, + const wxColour& destColour, + wxDirection nDirection = wxEAST) + { DoGradientFillLinear(rect, initialColour, destColour, nDirection); } + bool GetPixel(wxCoord x, wxCoord y, wxColour *col) const { return DoGetPixel(x, y, col); } bool GetPixel(const wxPoint& pt, wxColour *col) const @@ -348,7 +366,7 @@ public: * \param angle Rotating angle (counterclockwise, start at 3 o'clock, 360 is full circle). * \param center Center of rotation. */ - void Rotate( wxList* points, double angle, wxPoint center = wxPoint() ); + void Rotate( wxList* points, double angle, wxPoint center = wxPoint(0,0) ); // used by DrawEllipticArcRot // Careful: wxList gets filled with points you have to delete later. @@ -479,7 +497,8 @@ public: // Resolution in Pixels per inch virtual wxSize GetPPI() const = 0; - virtual bool Ok() const { return m_ok; } + virtual bool Ok() const { return IsOk(); } + virtual bool IsOk() const { return m_ok; } // accessors and setters // --------------------- @@ -530,6 +549,8 @@ public: { wxCoord x, y; DoGetDeviceOrigin(&x, &y); return wxPoint(x, y); } virtual void SetDeviceOrigin(wxCoord x, wxCoord y) = 0; + virtual void ComputeScaleAndOrigin() {} + virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp) = 0; int GetLogicalFunction() const { return m_logicalFunction; } @@ -634,6 +655,16 @@ protected: virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style = wxFLOOD_SURFACE) = 0; + 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 = 0; virtual void DoDrawPoint(wxCoord x, wxCoord y) = 0; @@ -789,18 +820,22 @@ private: // now include the declaration of wxDC class // ---------------------------------------------------------------------------- -#if defined(__PALMOS__) +#if defined(__WXPALMOS__) #include "wx/palmos/dc.h" #elif defined(__WXMSW__) #include "wx/msw/dc.h" #elif defined(__WXMOTIF__) #include "wx/motif/dc.h" -#elif defined(__WXGTK__) +#elif defined(__WXGTK20__) #include "wx/gtk/dc.h" +#elif defined(__WXGTK__) + #include "wx/gtk1/dc.h" #elif defined(__WXX11__) #include "wx/x11/dc.h" #elif defined(__WXMGL__) #include "wx/mgl/dc.h" +#elif defined(__WXDFB__) + #include "wx/dfb/dc.h" #elif defined(__WXMAC__) #include "wx/mac/dc.h" #elif defined(__WXCOCOA__) @@ -840,6 +875,60 @@ private: DECLARE_NO_COPY_CLASS(wxDCTextColourChanger) }; +// ---------------------------------------------------------------------------- +// helper class: you can use it to temporarily change the DC pen and +// restore it automatically when the object goes out of scope +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxDCPenChanger +{ +public: + wxDCPenChanger(wxDC& dc, const wxPen& pen) : m_dc(dc), m_penOld(dc.GetPen()) + { + m_dc.SetPen(pen); + } + + ~wxDCPenChanger() + { + if ( m_penOld.Ok() ) + m_dc.SetPen(m_penOld); + } + +private: + wxDC& m_dc; + + wxPen m_penOld; + + DECLARE_NO_COPY_CLASS(wxDCPenChanger) +}; + +// ---------------------------------------------------------------------------- +// helper class: you can use it to temporarily change the DC brush and +// restore it automatically when the object goes out of scope +// ---------------------------------------------------------------------------- + +class WXDLLEXPORT wxDCBrushChanger +{ +public: + wxDCBrushChanger(wxDC& dc, const wxBrush& brush) : m_dc(dc), m_brushOld(dc.GetBrush()) + { + m_dc.SetBrush(brush); + } + + ~wxDCBrushChanger() + { + if ( m_brushOld.Ok() ) + m_dc.SetBrush(m_brushOld); + } + +private: + wxDC& m_dc; + + wxBrush m_brushOld; + + DECLARE_NO_COPY_CLASS(wxDCBrushChanger) +}; + // ---------------------------------------------------------------------------- // another small helper class: sets the clipping region in its ctor and // destroys it in the dtor @@ -848,6 +937,8 @@ private: class WXDLLEXPORT wxDCClipper { public: + wxDCClipper(wxDC& dc, const wxRegion& r) : m_dc(dc) + { dc.SetClippingRegion(r); } wxDCClipper(wxDC& dc, const wxRect& r) : m_dc(dc) { dc.SetClippingRegion(r.x, r.y, r.width, r.height); } wxDCClipper(wxDC& dc, wxCoord x, wxCoord y, wxCoord w, wxCoord h) : m_dc(dc)