X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8f7b34a878bbcb2f71a0c7694e2a3bec51460218..72ac4e888aff9b766216f96cc090b051a7f52188:/include/wx/mgl/dc.h diff --git a/include/wx/mgl/dc.h b/include/wx/mgl/dc.h index 578d46619e..02535965b7 100644 --- a/include/wx/mgl/dc.h +++ b/include/wx/mgl/dc.h @@ -4,31 +4,27 @@ // 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" //----------------------------------------------------------------------------- // classes //----------------------------------------------------------------------------- -class WXDLLEXPORT wxDC; +class WXDLLIMPEXP_FWD_CORE 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 @@ -45,15 +42,16 @@ class WXDLLEXPORT wxDC; // MGL fwd declarations: class MGLDevCtx; +class MGLRegion; struct font_t; -class WXDLLEXPORT wxDC : public wxDCBase +class WXDLLIMPEXP_CORE wxDC : public wxDCBase { DECLARE_DYNAMIC_CLASS(wxDC) public: wxDC(); - ~wxDC(); + virtual ~wxDC(); // implement base class pure virtuals // ---------------------------------- @@ -81,92 +79,34 @@ public: wxCoord *x, wxCoord *y, wxCoord *descent = NULL, wxCoord *externalLeading = NULL, - wxFont *theFont = NULL) const; + const wxFont *theFont = NULL) const; virtual bool CanDrawBitmap() const; virtual bool CanGetTextExtent() const; virtual int GetDepth() const; virtual wxSize GetPPI() const; - virtual void SetMapMode(int mode); - virtual void SetUserScale(double x, double y); - virtual void SetLogicalScale(double x, double y); - virtual void SetLogicalOrigin(wxCoord x, wxCoord y); - virtual void SetDeviceOrigin(wxCoord x, wxCoord y); - virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp); virtual void SetLogicalFunction(int function); // 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; - } - 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); - } - 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; - } - 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); - } - 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; - } - 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); - } - 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; - } - 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); - } + virtual void ComputeScaleAndOrigin(); + + wxCoord XDEV2LOG(wxCoord x) const { return DeviceToLogicalX(x); } + wxCoord XDEV2LOGREL(wxCoord x) const { return DeviceToLogicalXRel(x); } + wxCoord YDEV2LOG(wxCoord y) const { return DeviceToLogicalY(y); } + wxCoord YDEV2LOGREL(wxCoord y) const { return DeviceToLogicalYRel(y); } + wxCoord XLOG2DEV(wxCoord x) const { return LogicalToDeviceX(x); } + wxCoord XLOG2DEVREL(wxCoord x) const { return LogicalToDeviceXRel(x); } + wxCoord YLOG2DEV(wxCoord y) const { return LogicalToDeviceY(y); } + wxCoord YLOG2DEVREL(wxCoord y) const { return LogicalToDeviceYRel(y); } 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; @@ -190,7 +130,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, @@ -198,18 +138,11 @@ protected: virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, wxDC *source, wxCoord xsrc, wxCoord ysrc, - int rop = wxCOPY, bool useMask = FALSE); + 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 DoSetDeviceClippingRegion(const wxRegion& region); virtual void DoGetSize(int *width, int *height) const; virtual void DoGetSizeMM(int* width, int* height) const; @@ -229,49 +162,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; };