X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ba161d7e9579de457aedcf24c75fd24a2c024534..86b79b93fbbb0c2e90e6595f7fea0f979b80881c:/include/wx/dc.h diff --git a/include/wx/dc.h b/include/wx/dc.h index c414a9fdbe..f805dd61ac 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -12,7 +12,7 @@ #ifndef _WX_DC_H_BASE_ #define _WX_DC_H_BASE_ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma interface "dcbase.h" #endif @@ -29,7 +29,9 @@ #include "wx/pen.h" #include "wx/palette.h" #include "wx/list.h" // we use wxList in inline functions +#include "wx/dynarray.h" +class WXDLLEXPORT wxDC; class WXDLLEXPORT wxDCBase; class WXDLLEXPORT wxDrawObject @@ -209,6 +211,11 @@ public: wxCoord xoffset = 0, wxCoord yoffset = 0, int fillStyle = wxODDEVEN_RULE); + void DrawPolyPolygon(int n, int count[], wxPoint points[], + wxCoord xoffset = 0, wxCoord yoffset = 0, + int fillStyle = wxODDEVEN_RULE) + { DoDrawPolyPolygon(n, count, points, xoffset, yoffset, fillStyle); } + void DrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height) { DoDrawRectangle(x, y, width, height); } void DrawRectangle(const wxPoint& pt, const wxSize& sz) @@ -300,6 +307,54 @@ public: void DrawSpline(wxList *points) { DoDrawSpline(points); } #endif // wxUSE_SPLINES + // Eventually we will have wxUSE_GENERIC_DRAWELLIPSE +#ifdef __WXWINCE__ + //! Generic method to draw ellipses, circles and arcs with current pen and brush. + /*! \param x Upper left corner of bounding box. + * \param y Upper left corner of bounding box. + * \param w Width of bounding box. + * \param h Height of bounding box. + * \param sa Starting angle of arc + * (counterclockwise, start at 3 o'clock, 360 is full circle). + * \param ea Ending angle of arc. + * \param angle Rotation angle, the Arc will be rotated after + * calculating begin and end. + */ + void DrawEllipticArcRot( wxCoord x, wxCoord y, + wxCoord width, wxCoord height, + double sa = 0, double ea = 0, double angle = 0 ) + { DoDrawEllipticArcRot( x, y, width, height, sa, ea, angle ); } + + void DrawEllipticArcRot( const wxPoint& pt, + const wxSize& sz, + double sa = 0, double ea = 0, double angle = 0 ) + { DoDrawEllipticArcRot( pt.x, pt.y, sz.x, sz.y, sa, ea, angle ); } + + void DrawEllipticArcRot( const wxRect& rect, + double sa = 0, double ea = 0, double angle = 0 ) + { DoDrawEllipticArcRot( rect.x, rect.y, rect.width, rect.height, sa, ea, angle ); } + + virtual void DoDrawEllipticArcRot( wxCoord x, wxCoord y, + wxCoord w, wxCoord h, + double sa = 0, double ea = 0, double angle = 0 ); + + //! Rotates points around center. + /*! This is a quite straight method, it calculates in pixels + * and so it produces rounding errors. + * \param points The points inside will be rotated. + * \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() ); + + // used by DrawEllipticArcRot + // Careful: wxList gets filled with points you have to delete later. + void CalculateEllipticPoints( wxList* points, + wxCoord xStart, wxCoord yStart, + wxCoord w, wxCoord h, + double sa, double ea ); +#endif + // global DC operations // -------------------- @@ -341,10 +396,15 @@ public: { DoGetClippingBox(x, y, w, h); } void GetClippingBox(wxRect& rect) const { +#if 1 + DoGetClippingBox(&rect.x, &rect.y, &rect.width, &rect.height); +#else // Necessary to use intermediate variables for 16-bit compilation + // REMOVE ME if the above is OK for all current platforms wxCoord x, y, w, h; DoGetClippingBox(&x, &y, &w, &h); rect.x = x; rect.y = y; rect.width = w; rect.height = h; +#endif } // text extent @@ -368,6 +428,11 @@ public: wxCoord *heightLine = NULL, wxFont *font = NULL); + // Measure cumulative width of text after each character + bool GetPartialTextExtents(const wxString& text, wxArrayInt& widths) const + { return DoGetPartialTextExtents(text, widths); } + + // size and resolution // ------------------- @@ -491,16 +556,6 @@ public: virtual void SetOptimization(bool WXUNUSED(opt)) { } virtual bool GetOptimization() { return FALSE; } - // Some platforms have a DC cache, which should be cleared - // at appropriate points such as after a series of DC operations. - // Put ClearCache in the wxDC implementation class, since it has to be - // static. - // static void ClearCache() ; -#if 0 // wxUSE_DC_CACHEING - static void EnableCache(bool cacheing) { sm_cacheing = cacheing; } - static bool CacheEnabled() { return sm_cacheing ; } -#endif - // bounding box // ------------ @@ -541,7 +596,6 @@ public: // ------------------ // for compatibility with the old code when wxCoord was long everywhere -#ifndef __WIN16__ void GetTextExtent(const wxString& string, long *x, long *y, long *descent = NULL, @@ -590,21 +644,6 @@ public: if (w) *w = ww; if (h) *h = hh; } -#endif // !Win16 - -#if WXWIN_COMPATIBILITY - -#if wxUSE_PALETTE - virtual void SetColourMap(const wxPalette& palette) { SetPalette(palette); } -#endif // wxUSE_PALETTE - - void GetTextExtent(const wxString& string, float *x, float *y, - float *descent = NULL, float *externalLeading = NULL, - wxFont *theFont = NULL, bool use16bit = FALSE) const ; - void GetSize(float* width, float* height) const { int w, h; GetSize(& w, & h); *width = w; *height = h; } - void GetSizeMM(float *width, float *height) const { long w, h; GetSizeMM(& w, & h); *width = (float) w; *height = (float) h; } - -#endif // WXWIN_COMPATIBILITY protected: // the pure virtual functions which should be implemented by wxDC @@ -654,6 +693,9 @@ protected: virtual void DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, int fillStyle = wxODDEVEN_RULE) = 0; + virtual void DoDrawPolyPolygon(int n, int count[], wxPoint points[], + wxCoord xoffset, wxCoord yoffset, + int fillStyle); virtual void DoSetClippingRegionAsRegion(const wxRegion& region) = 0; virtual void DoSetClippingRegion(wxCoord x, wxCoord y, @@ -696,7 +738,9 @@ protected: wxCoord *descent = NULL, wxCoord *externalLeading = NULL, wxFont *theFont = NULL) const = 0; - + + virtual bool DoGetPartialTextExtents(const wxString& text, wxArrayInt& widths) const; + #if wxUSE_SPLINES virtual void DoDrawSpline(wxList *points); #endif @@ -708,9 +752,6 @@ protected: bool m_clipping:1; bool m_isInteractive:1; bool m_isBBoxValid:1; -#if wxUSE_DC_CACHEING -// static bool sm_cacheing; -#endif // coordinate system variables @@ -768,10 +809,10 @@ private: #include "wx/mgl/dc.h" #elif defined(__WXMAC__) #include "wx/mac/dc.h" +#elif defined(__WXCOCOA__) + #include "wx/cocoa/dc.h" #elif defined(__WXPM__) #include "wx/os2/dc.h" -#elif defined(__WXSTUBS__) - #include "wx/stubs/dc.h" #endif // ---------------------------------------------------------------------------- @@ -801,6 +842,8 @@ private: wxDC& m_dc; wxColour m_colFgOld; + + DECLARE_NO_COPY_CLASS(wxDCTextColourChanger) }; // ---------------------------------------------------------------------------- @@ -820,6 +863,8 @@ public: private: wxDC& m_dc; + + DECLARE_NO_COPY_CLASS(wxDCClipper) }; #endif