X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/243ef54b39f83d4a805dbeaa5ea80232ac66a1b8..7e721c7a4bb6b253d64ae580e73853ed76d0ad03:/include/wx/dc.h diff --git a/include/wx/dc.h b/include/wx/dc.h index 24c77d0441..560d969061 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -46,7 +46,7 @@ class WXDLLIMPEXP_FWD_CORE wxPrintData; // wxDrawObject helper class //----------------------------------------------------------------------------- -class WXDLLEXPORT wxDrawObject +class WXDLLIMPEXP_CORE wxDrawObject { public: @@ -182,6 +182,12 @@ public: virtual bool CanDrawBitmap() const = 0; virtual bool CanGetTextExtent() const = 0; + // get Cairo context + virtual void* GetCairoContext() const + { + return NULL; + } + // query dimension, colour deps, resolution virtual void DoGetSize(int *width, int *height) const = 0; @@ -463,8 +469,12 @@ public: #if wxUSE_SPLINES - virtual void DoDrawSpline(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, wxCoord x3, wxCoord y3); - virtual void DoDrawSpline(int n, wxPoint points[]); + void DrawSpline(wxCoord x1, wxCoord y1, + wxCoord x2, wxCoord y2, + wxCoord x3, wxCoord y3); + void DrawSpline(int n, wxPoint points[]); + void DrawSpline(const wxPointList *points) { DoDrawSpline(points); } + virtual void DoDrawSpline(const wxPointList *points); #endif @@ -500,6 +510,54 @@ protected: m_clipX1 = m_clipX2 = m_clipY1 = m_clipY2 = 0; } +#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( wxPointList* points, double angle, wxPoint center = wxPoint(0,0) ); + + // used by DrawEllipticArcRot + // Careful: wxList gets filled with points you have to delete later. + void CalculateEllipticPoints( wxPointList* points, + wxCoord xStart, wxCoord yStart, + wxCoord w, wxCoord h, + double sa, double ea ); +#endif // __WXWINCE__ + + // window on which the DC draws or NULL wxWindow *m_window; @@ -566,7 +624,7 @@ public: const wxDCImpl *GetImpl() const { return m_pimpl; } - wxWindow *GetWindow() + wxWindow *GetWindow() const { return m_pimpl->GetWindow(); } bool IsOk() const @@ -1023,11 +1081,11 @@ public: void DrawSpline(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2, wxCoord x3, wxCoord y3) - { m_pimpl->DoDrawSpline(x1,y1,x2,y2,x3,y3); } + { m_pimpl->DrawSpline(x1,y1,x2,y2,x3,y3); } void DrawSpline(int n, wxPoint points[]) - { m_pimpl->DoDrawSpline(n,points); } + { m_pimpl->DrawSpline(n,points); } void DrawSpline(const wxPointList *points) - { m_pimpl->DoDrawSpline(points); } + { m_pimpl->DrawSpline(points); } #endif // wxUSE_SPLINES @@ -1060,7 +1118,7 @@ private: // restore it automatically when the object goes out of scope // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxDCTextColourChanger +class WXDLLIMPEXP_CORE wxDCTextColourChanger { public: wxDCTextColourChanger(wxDC& dc) : m_dc(dc), m_colFgOld() { } @@ -1096,7 +1154,7 @@ private: // restore it automatically when the object goes out of scope // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxDCPenChanger +class WXDLLIMPEXP_CORE wxDCPenChanger { public: wxDCPenChanger(wxDC& dc, const wxPen& pen) : m_dc(dc), m_penOld(dc.GetPen()) @@ -1123,7 +1181,7 @@ private: // restore it automatically when the object goes out of scope // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxDCBrushChanger +class WXDLLIMPEXP_CORE wxDCBrushChanger { public: wxDCBrushChanger(wxDC& dc, const wxBrush& brush) : m_dc(dc), m_brushOld(dc.GetBrush()) @@ -1150,7 +1208,7 @@ private: // destroys it in the dtor // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxDCClipper +class WXDLLIMPEXP_CORE wxDCClipper { public: wxDCClipper(wxDC& dc, const wxRegion& r) : m_dc(dc)