X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/68379eaf0ae64d105f8244b1db83e793f7dd83b0..9330ded5ddbf86a22dbd90c6ef0f3ed2f5f211b0:/include/wx/dcmirror.h?ds=sidebyside diff --git a/include/wx/dcmirror.h b/include/wx/dcmirror.h index 5c6cfaa7a0..a4c61c327a 100644 --- a/include/wx/dcmirror.h +++ b/include/wx/dcmirror.h @@ -18,7 +18,7 @@ // wxMirrorDC allows to write the same code for horz/vertical layout // ---------------------------------------------------------------------------- -class WXDLLEXPORT wxMirrorDC : public wxDC +class WXDLLIMPEXP_CORE wxMirrorDCImpl : public wxDCImpl { public: // constructs a mirror DC associated with the given real DC @@ -26,13 +26,12 @@ public: // if mirror parameter is true, all vertical and horizontal coordinates are // exchanged, otherwise this class behaves in exactly the same way as a // plain DC - // - // the cast to wxMirrorDC is a dirty hack done to allow us to call the - // protected methods of wxDCBase directly in our code below, without it it - // would be impossible (this is correct from C++ point of view but doesn't - // make any sense in this particular situation) - wxMirrorDC(wxDC& dc, bool mirror) : m_dc((wxMirrorDC&)dc) - { m_mirror = mirror; } + wxMirrorDCImpl(wxDC *owner, wxDCImpl& dc, bool mirror) + : wxDCImpl(owner), + m_dc(dc) + { + m_mirror = mirror; + } // wxDCBase operations virtual void Clear() { m_dc.Clear(); } @@ -53,8 +52,8 @@ public: virtual bool CanGetTextExtent() const { return m_dc.CanGetTextExtent(); } virtual int GetDepth() const { return m_dc.GetDepth(); } virtual wxSize GetPPI() const { return m_dc.GetPPI(); } - virtual bool Ok() const { return m_dc.Ok(); } - virtual void SetMapMode(int mode) { m_dc.SetMapMode(mode); } + virtual bool IsOk() const { return m_dc.IsOk(); } + virtual void SetMapMode(wxMappingMode mode) { m_dc.SetMapMode(mode); } virtual void SetUserScale(double x, double y) { m_dc.SetUserScale(GetX(x, y), GetY(x, y)); } virtual void SetLogicalOrigin(wxCoord x, wxCoord y) @@ -64,15 +63,9 @@ public: virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp) { m_dc.SetAxisOrientation(GetX(xLeftRight, yBottomUp), GetY(xLeftRight, yBottomUp)); } - virtual void SetLogicalFunction(int function) + virtual void SetLogicalFunction(wxRasterOperationMode function) { m_dc.SetLogicalFunction(function); } - // helper functions which may be useful for the users of this class - wxSize Reflect(const wxSize& sizeOrig) - { - return m_mirror ? wxSize(sizeOrig.y, sizeOrig.x) : sizeOrig; - } - protected: // returns x and y if not mirroring or y and x if mirroring wxCoord GetX(wxCoord x, wxCoord y) const { return m_mirror ? y : x; } @@ -109,7 +102,7 @@ protected: // wxDCBase functions virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, - int style = wxFLOOD_SURFACE) + wxFloodFillStyle style = wxFLOOD_SURFACE) { return m_dc.DoFloodFill(GetX(x, y), GetY(x, y), col, style); } @@ -209,7 +202,8 @@ protected: virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord w, wxCoord h, wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = false, + wxRasterOperationMode rop = wxCOPY, + bool useMask = false, wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord) { return m_dc.DoBlit(GetX(xdest, ydest), GetY(xdest, ydest), @@ -242,7 +236,7 @@ protected: virtual void DoDrawPolygon(int n, wxPoint points[], wxCoord xoffset, wxCoord yoffset, - int fillStyle = wxODDEVEN_RULE) + wxPolygonFillMode fillStyle = wxODDEVEN_RULE) { Mirror(n, points); @@ -253,7 +247,7 @@ protected: Mirror(n, points); } - virtual void DoSetClippingRegionAsRegion(const wxRegion& WXUNUSED(region)) + virtual void DoSetDeviceClippingRegion(const wxRegion& WXUNUSED(region)) { wxFAIL_MSG( _T("not implemented") ); } @@ -268,15 +262,36 @@ protected: wxCoord *x, wxCoord *y, wxCoord *descent = NULL, wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const + const wxFont *theFont = NULL) const { // never mirrored m_dc.DoGetTextExtent(string, x, y, descent, externalLeading, theFont); } private: - wxMirrorDC& m_dc; + wxDCImpl& m_dc; + + bool m_mirror; + + DECLARE_NO_COPY_CLASS(wxMirrorDCImpl) +}; +class WXDLLIMPEXP_CORE wxMirrorDC : public wxDC +{ +public: + wxMirrorDC(wxDC& dc, bool mirror) + : wxDC(new wxMirrorDCImpl(this, *dc.GetImpl(), mirror)) + { + m_mirror = mirror; + } + + // helper functions which may be useful for the users of this class + wxSize Reflect(const wxSize& sizeOrig) + { + return m_mirror ? wxSize(sizeOrig.y, sizeOrig.x) : sizeOrig; + } + +private: bool m_mirror; DECLARE_NO_COPY_CLASS(wxMirrorDC)