X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2e76da5450f61bbd5d5aa926378ba8817641b378..4a6b1d2872542582c0eee36d5c53ce56d52719a0:/include/wx/msw/dc.h diff --git a/include/wx/msw/dc.h b/include/wx/msw/dc.h index 8490f2b7d9..1a2e82afbb 100644 --- a/include/wx/msw/dc.h +++ b/include/wx/msw/dc.h @@ -1,5 +1,5 @@ ///////////////////////////////////////////////////////////////////////////// -// Name: dc.h +// Name: wx/msw/dc.h // Purpose: wxDC class // Author: Julian Smart // Modified by: @@ -9,15 +9,10 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifndef _WX_DC_H_ -#define _WX_DC_H_ - -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma interface "dc.h" -#endif +#ifndef _WX_MSW_DC_H_ +#define _WX_MSW_DC_H_ #include "wx/defs.h" -#include "wx/dc.h" // --------------------------------------------------------------------------- // macros @@ -45,10 +40,12 @@ public: }; #endif +// this is an ABC: use one of the derived classes to create a DC associated +// with a window, screen, printer and so on class WXDLLEXPORT wxDC : public wxDCBase { public: - wxDC(); + wxDC(WXHDC hDC) { Init(); m_hDC = hDC; } ~wxDC(); // implement base class pure virtuals @@ -114,7 +111,7 @@ public: } WXHDC GetHDC() const { return m_hDC; } - void SetHDC(WXHDC dc, bool bOwnsDC = FALSE) + void SetHDC(WXHDC dc, bool bOwnsDC = false) { m_hDC = dc; m_bOwnsDC = bOwnsDC; @@ -143,6 +140,26 @@ public: #endif protected: + void Init() + { + m_canvas = NULL; + m_bOwnsDC = false; + m_hDC = NULL; + + m_oldBitmap = NULL; + m_oldPen = NULL; + m_oldBrush = NULL; + m_oldFont = NULL; + +#if wxUSE_PALETTE + m_oldPalette = NULL; +#endif // wxUSE_PALETTE + } + + // create an uninitialized DC: this should be only used by the derived + // classes + wxDC() { Init(); } + virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style = wxFLOOD_SURFACE); @@ -165,11 +182,15 @@ protected: double radius); virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); +#if wxUSE_SPLINES + virtual void DoDrawSpline(wxList *points); +#endif + virtual void DoCrossHair(wxCoord x, wxCoord y); virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, - bool useMask = FALSE); + bool useMask = false); virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y, @@ -177,22 +198,16 @@ protected: virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = FALSE, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1); + int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord); // this is gnarly - we can't even call this function DoSetClippingRegion() // because of virtual function hiding virtual void DoSetClippingRegionAsRegion(const wxRegion& region); virtual void DoSetClippingRegion(wxCoord x, wxCoord y, wxCoord width, wxCoord height); - virtual void DoGetClippingRegion(wxCoord *x, wxCoord *y, - wxCoord *width, wxCoord *height) - { - GetClippingBox(x, y, width, height); - } virtual void DoGetClippingBox(wxCoord *x, wxCoord *y, wxCoord *w, wxCoord *h) const; - virtual void DoGetSize(int *width, int *height) const; virtual void DoGetSizeMM(int* width, int* height) const; virtual void DoDrawLines(int n, wxPoint points[], @@ -210,7 +225,7 @@ protected: // (tell windows to translate pixel from other palettes to our custom one // and vice versa) // Realize tells it to also reset the system palette to this one. - void DoSelectPalette(bool realize = FALSE); + void DoSelectPalette(bool realize = false); // Find out what palette our parent window has, then select it into the dc void InitializePalette(); @@ -222,6 +237,17 @@ protected: // common part of DoSetClippingRegion() and DoSetClippingRegionAsRegion() void SetClippingHrgn(WXHRGN hrgn); + // implementation of DoGetSize() for wxScreen/PrinterDC: this simply + // returns the size of the entire device this DC is associated with + // + // notice that we intentionally put it in a separate function instead of + // DoGetSize() itself because we want it to remain pure virtual both + // because each derived class should take care to define it as needed (this + // implementation is not at all always appropriate) and because we want + // wxDC to be an ABC to prevent it from being created directly + void GetDeviceSize(int *width, int *height) const; + + // MSW-specific member variables // ----------------------------- @@ -258,19 +284,36 @@ protected: }; // ---------------------------------------------------------------------------- -// wxDCTemp: a wxDC which doesn't free the given HDC (used by wxWindows +// wxDCTemp: a wxDC which doesn't free the given HDC (used by wxWidgets // only/mainly) // ---------------------------------------------------------------------------- class WXDLLEXPORT wxDCTemp : public wxDC { public: - wxDCTemp(WXHDC hdc) { SetHDC(hdc); } - virtual ~wxDCTemp() { SetHDC((WXHDC)NULL); } + wxDCTemp(WXHDC hdc) : wxDC(hdc) + { + } + + virtual ~wxDCTemp() + { + // prevent base class dtor from freeing it + SetHDC((WXHDC)NULL); + } + + virtual void DoGetSize(int *w, int *h) const + { + wxFAIL_MSG( _T("no way to retrieve the size of generic DC") ); + + if ( w ) + *w = 0; + if ( h ) + *h = 0; + } private: DECLARE_NO_COPY_CLASS(wxDCTemp) }; -#endif - // _WX_DC_H_ +#endif // _WX_MSW_DC_H_ +