X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6021b8f80b7b64b5d50702864da5f139710527e4..9e1fc0e42822fdf1159582f1b73cde0c7d15bc92:/include/wx/dc.h diff --git a/include/wx/dc.h b/include/wx/dc.h index acb004af10..da5bc5fde0 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: @@ -18,6 +18,7 @@ #include "wx/object.h" // the base class +#include "wx/intl.h" // for wxLayoutDirection #include "wx/cursor.h" // we have member variables of these classes #include "wx/font.h" // so we can't do without them #include "wx/colour.h" @@ -93,8 +94,6 @@ protected: // global variables // --------------------------------------------------------------------------- -extern WXDLLEXPORT_DATA(int) wxPageNumber; - // --------------------------------------------------------------------------- // wxDC is the device context - object on which any drawing is done // --------------------------------------------------------------------------- @@ -134,12 +133,7 @@ public: ResetClipping(); } - ~wxDCBase() { } - -#if WXWIN_COMPATIBILITY_2_6 - wxDEPRECATED( virtual void BeginDrawing() ); - wxDEPRECATED( virtual void EndDrawing() ); -#endif // WXWIN_COMPATIBILITY_2_6 + virtual ~wxDCBase() { } // graphic primitives // ------------------ @@ -161,20 +155,21 @@ public: // 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& 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& initialColour, const wxColour& destColour, - const wxPoint& circleCenter); + 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& initialColour, const wxColour& destColour, wxDirection nDirection = wxEAST) { DoGradientFillLinear(rect, initialColour, destColour, nDirection); } @@ -318,6 +313,11 @@ public: return DoBlit(destPt.x, destPt.y, sz.x, sz.y, source, srcPt.x, srcPt.y, rop, useMask, srcPtMask.x, srcPtMask.y); } + + wxBitmap GetAsBitmap(const wxRect *subrect = (const wxRect *) NULL) const + { + return DoGetAsBitmap(subrect); + } #if wxUSE_SPLINES // TODO: this API needs fixing (wxPointList, why (!const) "wxList *"?) @@ -388,6 +388,12 @@ public: virtual void StartPage() { } virtual void EndPage() { } +#if WXWIN_COMPATIBILITY_2_6 + wxDEPRECATED( void BeginDrawing() ); + wxDEPRECATED( void EndDrawing() ); +#endif // WXWIN_COMPATIBILITY_2_6 + + // set objects to use for drawing // ------------------------------ @@ -440,7 +446,7 @@ public: wxCoord *width, wxCoord *height, wxCoord *heightLine = NULL, - wxFont *font = NULL); + wxFont *font = NULL) const; // Measure cumulative width of text after each character bool GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const @@ -498,25 +504,26 @@ 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 // --------------------- - int GetBackgroundMode() const { return m_backgroundMode; } - const wxBrush& GetBackground() const { return m_backgroundBrush; } - const wxBrush& GetBrush() const { return m_brush; } - const wxFont& GetFont() const { return m_font; } - const wxPen& GetPen() const { return m_pen; } + virtual int GetBackgroundMode() const { return m_backgroundMode; } + virtual const wxBrush& GetBackground() const { return m_backgroundBrush; } + virtual const wxBrush& GetBrush() const { return m_brush; } + virtual const wxFont& GetFont() const { return m_font; } + virtual const wxPen& GetPen() const { return m_pen; } - const wxColour& GetTextForeground() const { return m_textForegroundColour; } - const wxColour& GetTextBackground() const { return m_textBackgroundColour; } + virtual const wxColour& GetTextForeground() const { return m_textForegroundColour; } + virtual const wxColour& GetTextBackground() const { return m_textBackgroundColour; } virtual void SetTextForeground(const wxColour& colour) { m_textForegroundColour = colour; } virtual void SetTextBackground(const wxColour& colour) { m_textBackgroundColour = colour; } - int GetMapMode() const { return m_mappingMode; } + virtual int GetMapMode() const { return m_mappingMode; } virtual void SetMapMode(int mode) = 0; virtual void GetUserScale(double *x, double *y) const @@ -553,7 +560,7 @@ public: virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp) = 0; - int GetLogicalFunction() const { return m_logicalFunction; } + virtual int GetLogicalFunction() const { return m_logicalFunction; } virtual void SetLogicalFunction(int function) = 0; #if WXWIN_COMPATIBILITY_2_4 @@ -650,6 +657,16 @@ public: if (h) *h = hh; } + // RTL related functions + // --------------------- + + // get or change the layout direction (LTR or RTL) for this dc, + // wxLayout_Default is returned if layout direction is not supported + virtual wxLayoutDirection GetLayoutDirection() const + { return wxLayout_Default; } + virtual void SetLayoutDirection(wxLayoutDirection WXUNUSED(dir)) + { } + protected: // the pure virtual functions which should be implemented by wxDC virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, @@ -659,7 +676,12 @@ protected: 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; @@ -695,6 +717,8 @@ protected: wxDC *source, wxCoord xsrc, wxCoord ysrc, int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord) = 0; + virtual wxBitmap DoGetAsBitmap(const wxRect *WXUNUSED(subrect)) const { return wxNullBitmap; } + virtual void DoGetSize(int *width, int *height) const = 0; virtual void DoGetSizeMM(int* width, int* height) const = 0; @@ -829,6 +853,8 @@ private: #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__) @@ -837,6 +863,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 @@ -847,6 +877,11 @@ class WXDLLEXPORT wxDCTextColourChanger public: wxDCTextColourChanger(wxDC& dc) : m_dc(dc), m_colFgOld() { } + wxDCTextColourChanger(wxDC& dc, const wxColour& col) : m_dc(dc) + { + Set(col); + } + ~wxDCTextColourChanger() { if ( m_colFgOld.Ok() ) @@ -868,6 +903,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 @@ -876,6 +965,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) @@ -889,5 +980,4 @@ private: DECLARE_NO_COPY_CLASS(wxDCClipper) }; -#endif - // _WX_DC_H_BASE_ +#endif // _WX_DC_H_BASE_