X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ce44c50e9bd546cd6ca8fe2e552f25ef08083999..5f2936dacb1a483e1407426bd5eca2b7b765a576:/include/wx/os2/dc.h diff --git a/include/wx/os2/dc.h b/include/wx/os2/dc.h index 8c0bd11552..434082c111 100644 --- a/include/wx/os2/dc.h +++ b/include/wx/os2/dc.h @@ -1,159 +1,124 @@ ///////////////////////////////////////////////////////////////////////////// // Name: dc.h // Purpose: wxDC class -// Author: AUTHOR +// Author: David Webster // Modified by: -// Created: ??/??/98 +// Created: 08/26/99 // RCS-ID: $Id$ -// Copyright: (c) AUTHOR -// Licence: wxWindows licence +// Copyright: (c) David Webster +// 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/window.h" -#include "wx/pen.h" -#include "wx/brush.h" -#include "wx/icon.h" -#include "wx/font.h" -#include "wx/gdicmn.h" - -//----------------------------------------------------------------------------- -// constants -//----------------------------------------------------------------------------- - -#ifndef MM_TEXT -#define MM_TEXT 0 -#define MM_ISOTROPIC 1 -#define MM_ANISOTROPIC 2 -#define MM_LOMETRIC 3 -#define MM_HIMETRIC 4 -#define MM_TWIPS 5 -#define MM_POINTS 6 -#define MM_METRIC 7 -#endif +// --------------------------------------------------------------------------- +// macros +// --------------------------------------------------------------------------- + +// Logical to device +// Absolute +#define XLOG2DEV(x) (x) +#define YLOG2DEV(y) (y) + +// Relative +#define XLOG2DEVREL(x) (x) +#define YLOG2DEVREL(y) (y) + +// Device to logical +// Absolute +#define XDEV2LOG(x) (x) + +#define YDEV2LOG(y) (y) + +// Relative +#define XDEV2LOGREL(x) (x) +#define YDEV2LOGREL(y) (y) + +/* + * Have the same macros as for XView but not for every operation: + * just for calculating window/viewport extent (a better way of scaling). + */ + +// Logical to device +// Absolute +#define MS_XLOG2DEV(x) LogicalToDevice(x) + +#define MS_YLOG2DEV(y) LogicalToDevice(y) + +// Relative +#define MS_XLOG2DEVREL(x) LogicalToDeviceXRel(x) +#define MS_YLOG2DEVREL(y) LogicalToDeviceYRel(y) + +// Device to logical +// Absolute +#define MS_XDEV2LOG(x) DeviceToLogicalX(x) -//----------------------------------------------------------------------------- -// global variables -//----------------------------------------------------------------------------- +#define MS_YDEV2LOG(y) DeviceToLogicalY(y) -extern int wxPageNumber; +// Relative +#define MS_XDEV2LOGREL(x) DeviceToLogicalXRel(x) +#define MS_YDEV2LOGREL(y) DeviceToLogicalYRel(y) -//----------------------------------------------------------------------------- -// wxDC -//----------------------------------------------------------------------------- +#define YSCALE(y) (yorigin - (y)) -class WXDLLEXPORT wxDC: public wxDCBase +#define wx_round(a) (int)((a)+.5) + +class WXDLLEXPORT wxDC : public wxDCBase { - DECLARE_ABSTRACT_CLASS(wxDC) - - public: - - wxDC(void); - ~wxDC(void); - - virtual void BeginDrawing(void) { }; - virtual void EndDrawing(void) { }; - -//----------------------------------------------------------------------------- -// Pure virtuals from wxDCBase that need defining -//----------------------------------------------------------------------------- - virtual bool CanDrawBitmap(void) const { return TRUE; }; - virtual bool CanGetTextExtent(void) const { return TRUE; }; - virtual int GetDepth(void) const; - virtual wxSize GetPPI(void) const; - virtual void GetTextExtent( const wxString& string - ,long* width - ,long* height - ,long* descent = NULL - ,long* externalLeading = NULL - ,wxFont* theFont = NULL - ) const; - virtual long GetCharWidth(void) const; - virtual long GetCharHeight(void) const; - virtual void Clear(void); - virtual void SetFont(const wxFont& font); - virtual void SetPen(const wxPen& pen); - virtual void SetBrush(const wxBrush& brush); - virtual void SetBackground(const wxBrush& brush); - virtual void SetLogicalFunction(int function); - virtual void SetBackgroundMode(int mode); - virtual void SetPalette(const wxPalette& palette); - virtual void SetMapMode(int mode); - virtual void DestroyClippingRegion(void); - virtual void SetUserScale(double x, double y); - virtual void SetLogicalOrigin(long x, long y); - virtual void SetDeviceOrigin(long x, long y); - virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp); - - virtual void DoFloodFill( long x - ,long y - ,const wxColour& col - ,int style = wxFLOOD_SURFACE - ); - virtual bool DoGetPixel(long x, long y, wxColour *col) const; - virtual void DoDrawPoint(long x, long y); - virtual void DoDrawLine(long x1, long y1, long x2, long y2); - virtual void DoDrawArc(long x1, long y1, - long x2, long y2, - long xc, long yc - ); - virtual void DoDrawEllipticArc( long x, long y - ,long w, long h - ,double sa, double ea - ); - virtual void DoDrawRectangle(long x, long y, long width, long height); - virtual void DoDrawRoundedRectangle( long x, long y - ,long width, long height - ,double radius - ); - virtual void DoDrawEllipse(long x, long y, long width, long height); - virtual void DoCrossHair(long x, long y); - virtual void DoDrawIcon(const wxIcon& icon, long x, long y); - virtual void DoDrawBitmap( const wxBitmap &bmp - ,long x, long y - ,bool useMask = FALSE - ); - virtual void DoDrawText(const wxString& text, long x, long y); - virtual bool DoBlit( long xdest, long ydest - ,long width, long height - ,wxDC *source - ,long xsrc, long ysrc - ,int rop = wxCOPY, bool useMask = FALSE - ); - virtual void DoGetSize(int *width, int *height) const; - virtual void DoGetSizeMM(int* width, int* height) const; - virtual void DoDrawLines( int n, wxPoint points[] - ,long xoffset, long yoffset - ); - virtual void DoDrawPolygon( int n, wxPoint points[] - ,long xoffset, long yoffset - ,int fillStyle = wxODDEVEN_RULE - ); - virtual void DoSetClippingRegionAsRegion(const wxRegion& region); - virtual void DoSetClippingRegion( long x, long y - ,long width, long height - ); -#if wxUSE_SPLINES - virtual void DoDrawSpline(wxList *points); -#endif + DECLARE_DYNAMIC_CLASS(wxDC) + +public: + wxDC(); + ~wxDC(); + + // implement base class pure virtuals + // ---------------------------------- + + virtual void Clear(); + + virtual bool StartDoc(const wxString& message); + virtual void EndDoc(); + + virtual void StartPage(); + virtual void EndPage(); + + virtual void SetFont(const wxFont& font); + virtual void SetPen(const wxPen& pen); + virtual void SetBrush(const wxBrush& brush); + virtual void SetBackground(const wxBrush& brush); + virtual void SetBackgroundMode(int mode); + virtual void SetPalette(const wxPalette& palette); + + virtual void DestroyClippingRegion(); + + virtual wxCoord GetCharHeight() const; + virtual wxCoord GetCharWidth() const; + virtual void DoGetTextExtent(const wxString& string, + wxCoord *x, wxCoord *y, + wxCoord *descent = NULL, + wxCoord *externalLeading = NULL, + wxFont *theFont = NULL) const; -//----------------------------------------------------------------------------- -// Other virtuals from wxDCBase that are overridden here -//----------------------------------------------------------------------------- + virtual bool CanDrawBitmap() const; + virtual bool CanGetTextExtent() const; + virtual int GetDepth() const; + virtual wxSize GetPPI() const; - virtual void SetLogicalScale( double x, double y ); + virtual void SetMapMode(int mode); + virtual void SetUserScale(double x, double y); + virtual void SetSystemScale(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); -//----------------------------------------------------------------------------- -// Our own new stuff -//----------------------------------------------------------------------------- - virtual void SetInternalDeviceOrigin( long x, long y ); - virtual void GetInternalDeviceOrigin( long *x, long *y ); + // implementation from now on + // -------------------------- virtual void SetRop(WXHDC cdc); virtual void DoClipping(WXHDC cdc); @@ -169,36 +134,79 @@ class WXDLLEXPORT wxDC: public wxDCBase m_bOwnsDC = bOwnsDC; } -private: - -#if WXWIN_COMPATIBILITY - // function hiding warning supression - virtual void GetTextExtent( const wxString& string - ,long* width - ,long* height - ,long* descent = NULL - ,long* externalLeading = NULL - ,wxFont* theFont = NULL - ,bool use16 = FALSE - ) const - { wxDCBase::GetTextExtent(string, width, height, descent, externalLeading, theFont, use16); }; -#endif - protected: + virtual void DoFloodFill(wxCoord x, wxCoord y, const wxColour& col, + int style = wxFLOOD_SURFACE); + + virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const; + + virtual void DoDrawPoint(wxCoord x, wxCoord y); + virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2); + + virtual void DoDrawArc(wxCoord x1, wxCoord y1, + wxCoord x2, wxCoord y2, + wxCoord xc, wxCoord yc); + virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h, + double sa, double ea); + + virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height); + virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y, + wxCoord width, wxCoord height, + double radius); + virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height); + + virtual void DoCrossHair(wxCoord x, wxCoord y); + + virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y); + virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y, + bool useMask = FALSE); + + virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y); + + virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height, + wxDC *source, wxCoord xsrc, wxCoord ysrc, + int rop = wxCOPY, bool useMask = FALSE); + + // 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; + + virtual void DoDrawLines(int n, wxPoint points[], + wxCoord xoffset, wxCoord yoffset); + virtual void DoDrawPolygon(int n, wxPoint points[], + wxCoord xoffset, wxCoord yoffset, + int fillStyle = wxODDEVEN_RULE); + +#if wxUSE_SPLINES + virtual void DoDrawSpline(wxList *points); +#endif // wxUSE_SPLINES - // ------------------------------------------------------------------------ - // Some additional data we need - // ------------------------------------------------------------------------ + // OS2-specific member variables + int m_windowExtX; + int m_windowExtY; + + // the window associated with this DC (may be NULL) + wxWindow *m_canvas; - // Owner canvas and selected in bitmap (if bitmap is GDI object selected) - wxWindow* m_canvas; wxBitmap m_selectedBitmap; + // TRUE => DeleteDC() in dtor, FALSE => only ReleaseDC() it + bool m_bOwnsDC:1; + // our HDC and its usage count: we only free it when the usage count drops // to 0 WXHDC m_hDC; int m_hDCCount; - bool m_bOwnsDC:1; // Store all old GDI objects when do a SelectObject, so we can select them // back in (this unselecting user's objects) so we can safely delete the @@ -208,7 +216,8 @@ protected: WXHBRUSH m_oldBrush; WXHFONT m_oldFont; WXHPALETTE m_oldPalette; -}; + float m_scaleFactor; // wxPSDC wants to have this. Will disappear. +}; #endif // _WX_DC_H_