X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7bdc18790e34d17edfc02f3e25edcb3425b38a8a..8120bbc9166a16f95c03d0ee50974117429be9e0:/include/wx/mgl/dc.h?ds=sidebyside diff --git a/include/wx/mgl/dc.h b/include/wx/mgl/dc.h index d59cec8a7b..eafae45054 100644 --- a/include/wx/mgl/dc.h +++ b/include/wx/mgl/dc.h @@ -4,19 +4,14 @@ // Author: Vaclav Slavik // Created: 2001/03/09 // RCS-ID: $Id$ -// Copyright: (c) 2001 SciTech Software, Inc. (www.scitechsoft.com) +// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com) // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// #ifndef _WX_DC_H_ #define _WX_DC_H_ -#ifdef __GNUG__ - #pragma interface "dc.h" -#endif - #include "wx/defs.h" -#include "wx/dc.h" #include "wx/region.h" //----------------------------------------------------------------------------- @@ -29,6 +24,7 @@ class WXDLLEXPORT wxDC; // constants //----------------------------------------------------------------------------- +#ifndef MM_TEXT #define MM_TEXT 0 #define MM_ISOTROPIC 1 #define MM_ANISOTROPIC 2 @@ -37,6 +33,7 @@ class WXDLLEXPORT wxDC; #define MM_TWIPS 5 #define MM_POINTS 6 #define MM_METRIC 7 +#endif //----------------------------------------------------------------------------- // wxDC @@ -54,7 +51,7 @@ class WXDLLEXPORT wxDC : public wxDCBase public: wxDC(); - ~wxDC(); + virtual ~wxDC(); // implement base class pure virtuals // ---------------------------------- @@ -99,75 +96,47 @@ public: // implementation from now on // -------------------------- - + virtual void ComputeScaleAndOrigin(); wxCoord XDEV2LOG(wxCoord x) const { - wxCoord new_x = x - m_deviceOriginX; - if (new_x > 0) - return (wxCoord)((double)(new_x) / m_scaleX + 0.5) * m_signX + m_logicalOriginX; - else - return (wxCoord)((double)(new_x) / m_scaleX - 0.5) * m_signX + m_logicalOriginX; + return wxRound((double)(x - m_deviceOriginX) / m_scaleX) * m_signX + m_logicalOriginX; } wxCoord XDEV2LOGREL(wxCoord x) const { - if (x > 0) - return (wxCoord)((double)(x) / m_scaleX + 0.5); - else - return (wxCoord)((double)(x) / m_scaleX - 0.5); + return wxRound((double)(x) / m_scaleX); } wxCoord YDEV2LOG(wxCoord y) const { - wxCoord new_y = y - m_deviceOriginY; - if (new_y > 0) - return (wxCoord)((double)(new_y) / m_scaleY + 0.5) * m_signY + m_logicalOriginY; - else - return (wxCoord)((double)(new_y) / m_scaleY - 0.5) * m_signY + m_logicalOriginY; + return wxRound((double)(y - m_deviceOriginY) / m_scaleY) * m_signY + m_logicalOriginY; } wxCoord YDEV2LOGREL(wxCoord y) const { - if (y > 0) - return (wxCoord)((double)(y) / m_scaleY + 0.5); - else - return (wxCoord)((double)(y) / m_scaleY - 0.5); + return wxRound((double)(y) / m_scaleY); } wxCoord XLOG2DEV(wxCoord x) const { - wxCoord new_x = x - m_logicalOriginX; - if (new_x > 0) - return (wxCoord)((double)(new_x) * m_scaleX + 0.5) * m_signX + m_deviceOriginX; - else - return (wxCoord)((double)(new_x) * m_scaleX - 0.5) * m_signX + m_deviceOriginX; + return wxRound((double)(x - m_logicalOriginX) * m_scaleX) * m_signX + m_deviceOriginX; } wxCoord XLOG2DEVREL(wxCoord x) const { - if (x > 0) - return (wxCoord)((double)(x) * m_scaleX + 0.5); - else - return (wxCoord)((double)(x) * m_scaleX - 0.5); + return wxRound((double)(x) * m_scaleX); } wxCoord YLOG2DEV(wxCoord y) const { - wxCoord new_y = y - m_logicalOriginY; - if (new_y > 0) - return (wxCoord)((double)(new_y) * m_scaleY + 0.5) * m_signY + m_deviceOriginY; - else - return (wxCoord)((double)(new_y) * m_scaleY - 0.5) * m_signY + m_deviceOriginY; + return wxRound((double)(y - m_logicalOriginY) * m_scaleY) * m_signY + m_deviceOriginY; } wxCoord YLOG2DEVREL(wxCoord y) const { - if (y > 0) - return (wxCoord)((double)(y) * m_scaleY + 0.5); - else - return (wxCoord)((double)(y) * m_scaleY - 0.5); + return wxRound((double)(y) * m_scaleY); } MGLDevCtx *GetMGLDC() const { return m_MGLDC; } - void SetMGLDC(MGLDevCtx *mgldc, bool OwnsMGLDC = FALSE); + void SetMGLDC(MGLDevCtx *mgldc, bool OwnsMGLDC = false); protected: - virtual void DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, + virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, int style = wxFLOOD_SURFACE); virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const; @@ -191,7 +160,7 @@ protected: 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, @@ -199,18 +168,13 @@ 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 = -1, wxCoord ysrcMask = -1); // 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 DoGetSize(int *width, int *height) const; virtual void DoGetSizeMM(int* width, int* height) const; @@ -230,51 +194,50 @@ protected: // common part of DoDrawText() and DoDrawRotatedText() void DrawAnyText(const wxString& text, wxCoord x, wxCoord y); - + // MGL uses pens as both wxPens and wxBrushes, so we have to // switch them as needed: void SelectPen(); void SelectBrush(); void SelectMGLStipplePen(int style); void SelectMGLFatPen(int style, int flag); - + // Select m_font into m_MGLDC: bool SelectMGLFont(); - + // Convert wxWin logical function to MGL rop: int LogicalFunctionToMGLRop(int logFunc) const; - + // Unified implementation of DrawIcon, DrawBitmap and Blit: - void DoDrawSubBitmap(const wxBitmap &bmp, + void DoDrawSubBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, wxCoord w, wxCoord h, wxCoord destx, wxCoord desty, int rop, bool useMask); // MGL DC class we use: MGLDevCtx *m_MGLDC; bool m_OwnsMGLDC:1; - + // helper variables for SelectXXXX(): bool m_penSelected; bool m_brushSelected; bool m_downloadedPatterns[2]; - // MGL does not render lines with width>1 with endings centered + // MGL does not render lines with width>1 with endings centered // at given coords but with top left corner of the pen at them, // these offsets are used to correct it. They are computed by // SelectPen. int m_penOfsX, m_penOfsY; double m_mm_to_pix_x, m_mm_to_pix_y; - + wxPalette m_oldPalette; - + wxRegion m_currentClippingRegion; - // clipping region m_MGLDC had when it was attached: - MGLRegion *m_globalClippingRegion; + wxRegion m_globalClippingRegion; // wxDC::Blit handles memoryDCs as special cases :( bool m_isMemDC; - + font_t *m_mglFont; };