X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0b822969a677939811d9fb966177031fb5fc625b..a881f34e499feadfef915b9d4c80e45a73ba37d4:/include/wx/dc.h?ds=inline diff --git a/include/wx/dc.h b/include/wx/dc.h index 3131286296..ab19b30997 100644 --- a/include/wx/dc.h +++ b/include/wx/dc.h @@ -1,7 +1,7 @@ ///////////////////////////////////////////////////////////////////////////// // Name: wx/dc.h // Purpose: wxDC class -// Author: Vadim Zeitlin +// Author: Vadim Zeitlin // Modified by: // Created: 05/25/99 // RCS-ID: $Id$ @@ -116,11 +116,8 @@ public: wxDCFactory() {} virtual ~wxDCFactory() {} - virtual wxDCImpl* CreateWindowDC( wxWindowDC *owner ) = 0; virtual wxDCImpl* CreateWindowDC( wxWindowDC *owner, wxWindow *window ) = 0; - virtual wxDCImpl* CreateClientDC( wxClientDC *owner ) = 0; virtual wxDCImpl* CreateClientDC( wxClientDC *owner, wxWindow *window ) = 0; - virtual wxDCImpl* CreatePaintDC( wxPaintDC *owner ) = 0; virtual wxDCImpl* CreatePaintDC( wxPaintDC *owner, wxWindow *window ) = 0; virtual wxDCImpl* CreateMemoryDC( wxMemoryDC *owner ) = 0; virtual wxDCImpl* CreateMemoryDC( wxMemoryDC *owner, wxBitmap &bitmap ) = 0; @@ -146,11 +143,8 @@ class WXDLLIMPEXP_CORE wxNativeDCFactory: public wxDCFactory public: wxNativeDCFactory() {} - virtual wxDCImpl* CreateWindowDC( wxWindowDC *owner ); virtual wxDCImpl* CreateWindowDC( wxWindowDC *owner, wxWindow *window ); - virtual wxDCImpl* CreateClientDC( wxClientDC *owner ); virtual wxDCImpl* CreateClientDC( wxClientDC *owner, wxWindow *window ); - virtual wxDCImpl* CreatePaintDC( wxPaintDC *owner ); virtual wxDCImpl* CreatePaintDC( wxPaintDC *owner, wxWindow *window ); virtual wxDCImpl* CreateMemoryDC( wxMemoryDC *owner ); virtual wxDCImpl* CreateMemoryDC( wxMemoryDC *owner, wxBitmap &bitmap ); @@ -169,7 +163,7 @@ class WXDLLIMPEXP_CORE wxDCImpl: public wxObject { public: wxDCImpl( wxDC *owner ); - ~wxDCImpl(); + virtual ~wxDCImpl(); wxDC *GetOwner() const { return m_owner; } @@ -261,32 +255,41 @@ public: // setters and getters virtual void SetFont(const wxFont& font) = 0; - virtual const wxFont& GetFont() const { return m_font; } + virtual const wxFont& GetFont() const { return m_font; } virtual void SetPen(const wxPen& pen) = 0; - virtual const wxPen& GetPen() const { return m_pen; } + virtual const wxPen& GetPen() const { return m_pen; } virtual void SetBrush(const wxBrush& brush) = 0; - virtual const wxBrush& GetBrush() const { return m_brush; } + virtual const wxBrush& GetBrush() const { return m_brush; } virtual void SetBackground(const wxBrush& brush) = 0; - virtual const wxBrush& GetBackground() const { return m_backgroundBrush; } + virtual const wxBrush& GetBackground() const { return m_backgroundBrush; } virtual void SetBackgroundMode(int mode) = 0; virtual int GetBackgroundMode() const { return m_backgroundMode; } virtual void SetTextForeground(const wxColour& colour) { m_textForegroundColour = colour; } - virtual const wxColour& GetTextForeground() const { return m_textForegroundColour; } + virtual const wxColour& GetTextForeground() const + { return m_textForegroundColour; } virtual void SetTextBackground(const wxColour& colour) { m_textBackgroundColour = colour; } - virtual const wxColour& GetTextBackground() const { return m_textBackgroundColour; } + virtual const wxColour& GetTextBackground() const + { return m_textBackgroundColour; } #if wxUSE_PALETTE virtual void SetPalette(const wxPalette& palette) = 0; #endif // wxUSE_PALETTE + // inherit the DC attributes (font and colours) from the given window + // + // this is called automatically when a window, client or paint DC is + // created + virtual void InheritAttributes(wxWindow *win); + + // logical functions virtual void SetLogicalFunction(int function) = 0; @@ -316,7 +319,9 @@ public: virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height) = 0; - virtual void DoSetClippingRegionAsRegion(const wxRegion& region) = 0; + + // NB: this function works with device coordinates, not the logical ones! + virtual void DoSetDeviceClippingRegion(const wxRegion& region) = 0; virtual void DoGetClippingBox(wxCoord *x, wxCoord *y, wxCoord *w, wxCoord *h) const @@ -469,8 +474,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 @@ -488,10 +497,10 @@ public: // --------------------------------------------------------- // wxPrinterDC Impl API - virtual wxRect GetPaperRect() + virtual wxRect GetPaperRect() const { int w = 0; int h = 0; DoGetSize( &w, &h ); return wxRect(0,0,w,h); } - virtual int GetResolution() + virtual int GetResolution() const { return -1; } private: @@ -553,6 +562,10 @@ protected: double sa, double ea ); #endif // __WXWINCE__ + // returns adjustment factor for converting wxFont "point size"; in wx + // it is point size on screen and needs to be multiplied by this value + // for rendering on higher-resolution DCs such as printer ones + static float GetFontPointSizeAdjustment(float dpi); // window on which the DC draws or NULL wxWindow *m_window; @@ -654,7 +667,7 @@ public: wxSize GetPPI() const { return m_pimpl->GetPPI(); } - virtual int GetResolution() + virtual int GetResolution() const { return m_pimpl->GetResolution(); } // Right-To-Left (RTL) modes @@ -792,8 +805,21 @@ public: { m_pimpl->DoSetClippingRegion(pt.x, pt.y, sz.x, sz.y); } void SetClippingRegion(const wxRect& rect) { m_pimpl->DoSetClippingRegion(rect.x, rect.y, rect.width, rect.height); } - void SetClippingRegion(const wxRegion& region) - { m_pimpl->DoSetClippingRegionAsRegion(region); } + + // unlike the functions above, the coordinates of the region used in this + // one are in device coordinates, not the logical ones + void SetDeviceClippingRegion(const wxRegion& region) + { m_pimpl->DoSetDeviceClippingRegion(region); } + + // this function is deprecated because its name is confusing: you may + // expect it to work with logical coordinates but, in fact, it does exactly + // the same thing as SetDeviceClippingRegion() + // + // please review the code using it and either replace it with calls to + // SetDeviceClippingRegion() or correct it if it was [wrongly] passing + // logical coordinates to this function + wxDEPRECATED_INLINE(void SetClippingRegion(const wxRegion& region), + SetDeviceClippingRegion(region); ) void DestroyClippingRegion() { m_pimpl->DestroyClippingRegion(); } @@ -1077,11 +1103,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 @@ -1095,8 +1121,12 @@ public: wxDEPRECATED( void GetLogicalOrigin(long *x, long *y) const ); wxDEPRECATED( void GetDeviceOrigin(long *x, long *y) const ); wxDEPRECATED( void GetClippingBox(long *x, long *y, long *w, long *h) const ); + #endif // WXWIN_COMPATIBILITY_2_8 +#ifdef __WXMSW__ + WXHDC GetHDC() const; +#endif // __WXMSW__ protected: // ctor takes ownership of the pointer @@ -1208,7 +1238,7 @@ class WXDLLIMPEXP_CORE wxDCClipper { public: wxDCClipper(wxDC& dc, const wxRegion& r) : m_dc(dc) - { dc.SetClippingRegion(r); } + { dc.SetClippingRegion(r.GetBox()); } 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) @@ -1222,4 +1252,32 @@ private: DECLARE_NO_COPY_CLASS(wxDCClipper) }; +// ---------------------------------------------------------------------------- +// helper class: you can use it to temporarily change the DC font and +// restore it automatically when the object goes out of scope +// ---------------------------------------------------------------------------- + +class WXDLLIMPEXP_CORE wxDCFontChanger +{ +public: + wxDCFontChanger(wxDC& dc, const wxFont& font) : m_dc(dc), m_fontOld(dc.GetFont()) + { + m_dc.SetFont(font); + } + + ~wxDCFontChanger() + { + if ( m_fontOld.Ok() ) + m_dc.SetFont(m_fontOld); + } + +private: + wxDC& m_dc; + + wxFont m_fontOld; + + DECLARE_NO_COPY_CLASS(wxDCFontChanger) +}; + + #endif // _WX_DC_H_BASE_