| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299 | 
							- ///////////////////////////////////////////////////////////////////////////////
 
- // Name:        wx/dcmirror.h
 
- // Purpose:     wxMirrorDC class
 
- // Author:      Vadim Zeitlin
 
- // Modified by:
 
- // Created:     21.07.2003
 
- // Copyright:   (c) 2003 Vadim Zeitlin <vadim@wxwidgets.org>
 
- // Licence:     wxWindows licence
 
- ///////////////////////////////////////////////////////////////////////////////
 
- #ifndef _WX_DCMIRROR_H_
 
- #define _WX_DCMIRROR_H_
 
- #include "wx/dc.h"
 
- // ----------------------------------------------------------------------------
 
- // wxMirrorDC allows to write the same code for horz/vertical layout
 
- // ----------------------------------------------------------------------------
 
- class WXDLLIMPEXP_CORE wxMirrorDCImpl : public wxDCImpl
 
- {
 
- public:
 
-     // constructs a mirror DC associated with the given real DC
 
-     //
 
-     // 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
 
-     wxMirrorDCImpl(wxDC *owner, wxDCImpl& dc, bool mirror)
 
-         : wxDCImpl(owner),
 
-           m_dc(dc)
 
-     {
 
-         m_mirror = mirror;
 
-     }
 
-     // wxDCBase operations
 
-     virtual void Clear() { m_dc.Clear(); }
 
-     virtual void SetFont(const wxFont& font) { m_dc.SetFont(font); }
 
-     virtual void SetPen(const wxPen& pen) { m_dc.SetPen(pen); }
 
-     virtual void SetBrush(const wxBrush& brush) { m_dc.SetBrush(brush); }
 
-     virtual void SetBackground(const wxBrush& brush)
 
-         { m_dc.SetBackground(brush); }
 
-     virtual void SetBackgroundMode(int mode) { m_dc.SetBackgroundMode(mode); }
 
- #if wxUSE_PALETTE
 
-     virtual void SetPalette(const wxPalette& palette)
 
-         { m_dc.SetPalette(palette); }
 
- #endif // wxUSE_PALETTE
 
-     virtual void DestroyClippingRegion() { m_dc.DestroyClippingRegion(); }
 
-     virtual wxCoord GetCharHeight() const { return m_dc.GetCharHeight(); }
 
-     virtual wxCoord GetCharWidth() const { return m_dc.GetCharWidth(); }
 
-     virtual bool CanDrawBitmap() const { return m_dc.CanDrawBitmap(); }
 
-     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 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)
 
-         { m_dc.SetLogicalOrigin(GetX(x, y), GetY(x, y)); }
 
-     virtual void SetDeviceOrigin(wxCoord x, wxCoord y)
 
-         { m_dc.SetDeviceOrigin(GetX(x, y), GetY(x, y)); }
 
-     virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp)
 
-         { m_dc.SetAxisOrientation(GetX(xLeftRight, yBottomUp),
 
-                                   GetY(xLeftRight, yBottomUp)); }
 
-     virtual void SetLogicalFunction(wxRasterOperationMode function)
 
-         { m_dc.SetLogicalFunction(function); }
 
-     virtual void* GetHandle() const
 
-         { return m_dc.GetHandle(); }
 
- 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; }
 
-     wxCoord GetY(wxCoord x, wxCoord y) const { return m_mirror ? x : y; }
 
-     double GetX(double x, double y) const { return m_mirror ? y : x; }
 
-     double GetY(double x, double y) const { return m_mirror ? x : y; }
 
-     bool GetX(bool x, bool y) const { return m_mirror ? y : x; }
 
-     bool GetY(bool x, bool y) const { return m_mirror ? x : y; }
 
-     // same thing but for pointers
 
-     wxCoord *GetX(wxCoord *x, wxCoord *y) const { return m_mirror ? y : x; }
 
-     wxCoord *GetY(wxCoord *x, wxCoord *y) const { return m_mirror ? x : y; }
 
-     // exchange x and y components of all points in the array if necessary
 
-     wxPoint* Mirror(int n, const wxPoint*& points) const
 
-     {
 
-         wxPoint* points_alloc = NULL;
 
-         if ( m_mirror )
 
-         {
 
-             points_alloc = new wxPoint[n];
 
-             for ( int i = 0; i < n; i++ )
 
-             {
 
-                 points_alloc[i].x = points[i].y;
 
-                 points_alloc[i].y = points[i].x;
 
-             }
 
-             points = points_alloc;
 
-         }
 
-         return points_alloc;
 
-     }
 
-     // wxDCBase functions
 
-     virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
 
-                              wxFloodFillStyle style = wxFLOOD_SURFACE)
 
-     {
 
-         return m_dc.DoFloodFill(GetX(x, y), GetY(x, y), col, style);
 
-     }
 
-     virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const
 
-     {
 
-         return m_dc.DoGetPixel(GetX(x, y), GetY(x, y), col);
 
-     }
 
-     virtual void DoDrawPoint(wxCoord x, wxCoord y)
 
-     {
 
-         m_dc.DoDrawPoint(GetX(x, y), GetY(x, y));
 
-     }
 
-     virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2)
 
-     {
 
-         m_dc.DoDrawLine(GetX(x1, y1), GetY(x1, y1), GetX(x2, y2), GetY(x2, y2));
 
-     }
 
-     virtual void DoDrawArc(wxCoord x1, wxCoord y1,
 
-                            wxCoord x2, wxCoord y2,
 
-                            wxCoord xc, wxCoord yc)
 
-     {
 
-         wxFAIL_MSG( wxT("this is probably wrong") );
 
-         m_dc.DoDrawArc(GetX(x1, y1), GetY(x1, y1),
 
-                        GetX(x2, y2), GetY(x2, y2),
 
-                        xc, yc);
 
-     }
 
-     virtual void DoDrawCheckMark(wxCoord x, wxCoord y,
 
-                                  wxCoord w, wxCoord h)
 
-     {
 
-         m_dc.DoDrawCheckMark(GetX(x, y), GetY(x, y),
 
-                              GetX(w, h), GetY(w, h));
 
-     }
 
-     virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
 
-                                    double sa, double ea)
 
-     {
 
-         wxFAIL_MSG( wxT("this is probably wrong") );
 
-         m_dc.DoDrawEllipticArc(GetX(x, y), GetY(x, y),
 
-                                GetX(w, h), GetY(w, h),
 
-                                sa, ea);
 
-     }
 
-     virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
 
-     {
 
-         m_dc.DoDrawRectangle(GetX(x, y), GetY(x, y), GetX(w, h), GetY(w, h));
 
-     }
 
-     virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
 
-                                         wxCoord w, wxCoord h,
 
-                                         double radius)
 
-     {
 
-         m_dc.DoDrawRoundedRectangle(GetX(x, y), GetY(x, y),
 
-                                     GetX(w, h), GetY(w, h),
 
-                                     radius);
 
-     }
 
-     virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord w, wxCoord h)
 
-     {
 
-         m_dc.DoDrawEllipse(GetX(x, y), GetY(x, y), GetX(w, h), GetY(w, h));
 
-     }
 
-     virtual void DoCrossHair(wxCoord x, wxCoord y)
 
-     {
 
-         m_dc.DoCrossHair(GetX(x, y), GetY(x, y));
 
-     }
 
-     virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y)
 
-     {
 
-         m_dc.DoDrawIcon(icon, GetX(x, y), GetY(x, y));
 
-     }
 
-     virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
 
-                               bool useMask = false)
 
-     {
 
-         m_dc.DoDrawBitmap(bmp, GetX(x, y), GetY(x, y), useMask);
 
-     }
 
-     virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y)
 
-     {
 
-         // this is never mirrored
 
-         m_dc.DoDrawText(text, x, y);
 
-     }
 
-     virtual void DoDrawRotatedText(const wxString& text,
 
-                                    wxCoord x, wxCoord y, double angle)
 
-     {
 
-         // this is never mirrored
 
-         m_dc.DoDrawRotatedText(text, x, y, angle);
 
-     }
 
-     virtual bool DoBlit(wxCoord xdest, wxCoord ydest,
 
-                         wxCoord w, wxCoord h,
 
-                         wxDC *source, wxCoord xsrc, wxCoord ysrc,
 
-                         wxRasterOperationMode rop = wxCOPY,
 
-                         bool useMask = false,
 
-                         wxCoord xsrcMask = wxDefaultCoord, wxCoord ysrcMask = wxDefaultCoord)
 
-     {
 
-         return m_dc.DoBlit(GetX(xdest, ydest), GetY(xdest, ydest),
 
-                            GetX(w, h), GetY(w, h),
 
-                            source, GetX(xsrc, ysrc), GetY(xsrc, ysrc),
 
-                            rop, useMask,
 
-                            GetX(xsrcMask, ysrcMask), GetX(xsrcMask, ysrcMask));
 
-     }
 
-     virtual void DoGetSize(int *w, int *h) const
 
-     {
 
-         m_dc.DoGetSize(GetX(w, h), GetY(w, h));
 
-     }
 
-     virtual void DoGetSizeMM(int *w, int *h) const
 
-     {
 
-         m_dc.DoGetSizeMM(GetX(w, h), GetY(w, h));
 
-     }
 
-     virtual void DoDrawLines(int n, const wxPoint points[],
 
-                              wxCoord xoffset, wxCoord yoffset)
 
-     {
 
-         wxPoint* points_alloc = Mirror(n, points);
 
-         m_dc.DoDrawLines(n, points,
 
-                          GetX(xoffset, yoffset), GetY(xoffset, yoffset));
 
-         delete[] points_alloc;
 
-     }
 
-     virtual void DoDrawPolygon(int n, const wxPoint points[],
 
-                                wxCoord xoffset, wxCoord yoffset,
 
-                                wxPolygonFillMode fillStyle = wxODDEVEN_RULE)
 
-     {
 
-         wxPoint* points_alloc = Mirror(n, points);
 
-         m_dc.DoDrawPolygon(n, points,
 
-                            GetX(xoffset, yoffset), GetY(xoffset, yoffset),
 
-                            fillStyle);
 
-         delete[] points_alloc;
 
-     }
 
-     virtual void DoSetDeviceClippingRegion(const wxRegion& WXUNUSED(region))
 
-     {
 
-         wxFAIL_MSG( wxT("not implemented") );
 
-     }
 
-     virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
 
-                                      wxCoord w, wxCoord h)
 
-     {
 
-         m_dc.DoSetClippingRegion(GetX(x, y), GetY(x, y), GetX(w, h), GetY(w, h));
 
-     }
 
-     virtual void DoGetTextExtent(const wxString& string,
 
-                                  wxCoord *x, wxCoord *y,
 
-                                  wxCoord *descent = NULL,
 
-                                  wxCoord *externalLeading = NULL,
 
-                                  const wxFont *theFont = NULL) const
 
-     {
 
-         // never mirrored
 
-         m_dc.DoGetTextExtent(string, x, y, descent, externalLeading, theFont);
 
-     }
 
- private:
 
-     wxDCImpl& m_dc;
 
-     bool m_mirror;
 
-     wxDECLARE_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;
 
-     wxDECLARE_NO_COPY_CLASS(wxMirrorDC);
 
- };
 
- #endif // _WX_DCMIRROR_H_
 
 
  |