X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/12028905135250524409f1e7b9bfa9c55e5ce16b..8a540c887cd30960c77e6c171ecabe30273321a8:/include/wx/mgl/dc.h diff --git a/include/wx/mgl/dc.h b/include/wx/mgl/dc.h index aa9d55875f..eafae45054 100644 --- a/include/wx/mgl/dc.h +++ b/include/wx/mgl/dc.h @@ -11,12 +11,7 @@ #ifndef _WX_DC_H_ #define _WX_DC_H_ -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #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,72 +96,44 @@ 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 bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, @@ -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,50 +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; wxRegion m_globalClippingRegion; // wxDC::Blit handles memoryDCs as special cases :( bool m_isMemDC; - + font_t *m_mglFont; };