]> git.saurik.com Git - wxWidgets.git/blame - include/wx/mgl/dc.h
moved wxSTRINGIZE to defs.h and made it work with macro argument, so that it can...
[wxWidgets.git] / include / wx / mgl / dc.h
CommitLineData
32b8ec41
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: dc.h
3// Purpose: wxDC class
4// Author: Vaclav Slavik
5// Created: 2001/03/09
6// RCS-ID: $Id$
52750c2e 7// Copyright: (c) 2001-2002 SciTech Software, Inc. (www.scitechsoft.com)
65571936 8// Licence: wxWindows licence
32b8ec41
VZ
9/////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_DC_H_
12#define _WX_DC_H_
13
32b8ec41 14#include "wx/defs.h"
32b8ec41
VZ
15#include "wx/region.h"
16
17//-----------------------------------------------------------------------------
18// classes
19//-----------------------------------------------------------------------------
20
21class WXDLLEXPORT wxDC;
22
23//-----------------------------------------------------------------------------
24// constants
25//-----------------------------------------------------------------------------
26
d2b1753d 27#ifndef MM_TEXT
32b8ec41
VZ
28#define MM_TEXT 0
29#define MM_ISOTROPIC 1
30#define MM_ANISOTROPIC 2
31#define MM_LOMETRIC 3
32#define MM_HIMETRIC 4
33#define MM_TWIPS 5
34#define MM_POINTS 6
35#define MM_METRIC 7
d2b1753d 36#endif
32b8ec41
VZ
37
38//-----------------------------------------------------------------------------
39// wxDC
40//-----------------------------------------------------------------------------
41
42
43// MGL fwd declarations:
44class MGLDevCtx;
7bdc1879 45class MGLRegion;
32b8ec41
VZ
46struct font_t;
47
48class WXDLLEXPORT wxDC : public wxDCBase
49{
50 DECLARE_DYNAMIC_CLASS(wxDC)
51
52public:
53 wxDC();
d3c7fc99 54 virtual ~wxDC();
32b8ec41
VZ
55
56 // implement base class pure virtuals
57 // ----------------------------------
58
59 virtual void Clear();
60
61 virtual bool StartDoc(const wxString& message);
62 virtual void EndDoc();
63
64 virtual void StartPage();
65 virtual void EndPage();
66
67 virtual void SetFont(const wxFont& font);
68 virtual void SetPen(const wxPen& pen);
69 virtual void SetBrush(const wxBrush& brush);
70 virtual void SetBackground(const wxBrush& brush);
71 virtual void SetBackgroundMode(int mode);
72 virtual void SetPalette(const wxPalette& palette);
73
74 virtual void DestroyClippingRegion();
75
76 virtual wxCoord GetCharHeight() const;
77 virtual wxCoord GetCharWidth() const;
78 virtual void DoGetTextExtent(const wxString& string,
79 wxCoord *x, wxCoord *y,
80 wxCoord *descent = NULL,
81 wxCoord *externalLeading = NULL,
82 wxFont *theFont = NULL) const;
83
84 virtual bool CanDrawBitmap() const;
85 virtual bool CanGetTextExtent() const;
86 virtual int GetDepth() const;
87 virtual wxSize GetPPI() const;
88
89 virtual void SetMapMode(int mode);
90 virtual void SetUserScale(double x, double y);
91 virtual void SetLogicalScale(double x, double y);
92 virtual void SetLogicalOrigin(wxCoord x, wxCoord y);
93 virtual void SetDeviceOrigin(wxCoord x, wxCoord y);
94 virtual void SetAxisOrientation(bool xLeftRight, bool yBottomUp);
95 virtual void SetLogicalFunction(int function);
96
97 // implementation from now on
98 // --------------------------
c5789d15 99
32b8ec41
VZ
100 virtual void ComputeScaleAndOrigin();
101
102 wxCoord XDEV2LOG(wxCoord x) const
103 {
104 wxCoord new_x = x - m_deviceOriginX;
105 if (new_x > 0)
106 return (wxCoord)((double)(new_x) / m_scaleX + 0.5) * m_signX + m_logicalOriginX;
107 else
108 return (wxCoord)((double)(new_x) / m_scaleX - 0.5) * m_signX + m_logicalOriginX;
109 }
110 wxCoord XDEV2LOGREL(wxCoord x) const
111 {
112 if (x > 0)
113 return (wxCoord)((double)(x) / m_scaleX + 0.5);
114 else
115 return (wxCoord)((double)(x) / m_scaleX - 0.5);
116 }
117 wxCoord YDEV2LOG(wxCoord y) const
118 {
119 wxCoord new_y = y - m_deviceOriginY;
120 if (new_y > 0)
121 return (wxCoord)((double)(new_y) / m_scaleY + 0.5) * m_signY + m_logicalOriginY;
122 else
123 return (wxCoord)((double)(new_y) / m_scaleY - 0.5) * m_signY + m_logicalOriginY;
124 }
125 wxCoord YDEV2LOGREL(wxCoord y) const
126 {
127 if (y > 0)
128 return (wxCoord)((double)(y) / m_scaleY + 0.5);
129 else
130 return (wxCoord)((double)(y) / m_scaleY - 0.5);
131 }
132 wxCoord XLOG2DEV(wxCoord x) const
133 {
134 wxCoord new_x = x - m_logicalOriginX;
135 if (new_x > 0)
136 return (wxCoord)((double)(new_x) * m_scaleX + 0.5) * m_signX + m_deviceOriginX;
137 else
138 return (wxCoord)((double)(new_x) * m_scaleX - 0.5) * m_signX + m_deviceOriginX;
139 }
140 wxCoord XLOG2DEVREL(wxCoord x) const
141 {
142 if (x > 0)
143 return (wxCoord)((double)(x) * m_scaleX + 0.5);
144 else
145 return (wxCoord)((double)(x) * m_scaleX - 0.5);
146 }
147 wxCoord YLOG2DEV(wxCoord y) const
148 {
149 wxCoord new_y = y - m_logicalOriginY;
150 if (new_y > 0)
151 return (wxCoord)((double)(new_y) * m_scaleY + 0.5) * m_signY + m_deviceOriginY;
152 else
153 return (wxCoord)((double)(new_y) * m_scaleY - 0.5) * m_signY + m_deviceOriginY;
154 }
155 wxCoord YLOG2DEVREL(wxCoord y) const
156 {
157 if (y > 0)
158 return (wxCoord)((double)(y) * m_scaleY + 0.5);
159 else
160 return (wxCoord)((double)(y) * m_scaleY - 0.5);
161 }
162
163 MGLDevCtx *GetMGLDC() const { return m_MGLDC; }
b1263dcf 164 void SetMGLDC(MGLDevCtx *mgldc, bool OwnsMGLDC = false);
32b8ec41
VZ
165
166protected:
387ebd3e 167 virtual bool DoFloodFill(wxCoord x, wxCoord y, const wxColour& col,
32b8ec41
VZ
168 int style = wxFLOOD_SURFACE);
169
170 virtual bool DoGetPixel(wxCoord x, wxCoord y, wxColour *col) const;
171
172 virtual void DoDrawPoint(wxCoord x, wxCoord y);
173 virtual void DoDrawLine(wxCoord x1, wxCoord y1, wxCoord x2, wxCoord y2);
174
175 virtual void DoDrawArc(wxCoord x1, wxCoord y1,
176 wxCoord x2, wxCoord y2,
177 wxCoord xc, wxCoord yc);
178 virtual void DoDrawEllipticArc(wxCoord x, wxCoord y, wxCoord w, wxCoord h,
179 double sa, double ea);
180
181 virtual void DoDrawRectangle(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
182 virtual void DoDrawRoundedRectangle(wxCoord x, wxCoord y,
183 wxCoord width, wxCoord height,
184 double radius);
185 virtual void DoDrawEllipse(wxCoord x, wxCoord y, wxCoord width, wxCoord height);
186
187 virtual void DoCrossHair(wxCoord x, wxCoord y);
188
189 virtual void DoDrawIcon(const wxIcon& icon, wxCoord x, wxCoord y);
190 virtual void DoDrawBitmap(const wxBitmap &bmp, wxCoord x, wxCoord y,
b1263dcf 191 bool useMask = false);
32b8ec41
VZ
192
193 virtual void DoDrawText(const wxString& text, wxCoord x, wxCoord y);
194 virtual void DoDrawRotatedText(const wxString& text, wxCoord x, wxCoord y,
195 double angle);
196
197 virtual bool DoBlit(wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord height,
198 wxDC *source, wxCoord xsrc, wxCoord ysrc,
b1263dcf 199 int rop = wxCOPY, bool useMask = false, wxCoord xsrcMask = -1, wxCoord ysrcMask = -1);
32b8ec41
VZ
200
201 // this is gnarly - we can't even call this function DoSetClippingRegion()
202 // because of virtual function hiding
203 virtual void DoSetClippingRegionAsRegion(const wxRegion& region);
204 virtual void DoSetClippingRegion(wxCoord x, wxCoord y,
205 wxCoord width, wxCoord height);
32b8ec41
VZ
206
207 virtual void DoGetSize(int *width, int *height) const;
208 virtual void DoGetSizeMM(int* width, int* height) const;
209
210 virtual void DoDrawLines(int n, wxPoint points[],
211 wxCoord xoffset, wxCoord yoffset);
212 virtual void DoDrawPolygon(int n, wxPoint points[],
213 wxCoord xoffset, wxCoord yoffset,
214 int fillStyle = wxODDEVEN_RULE);
215
216 // implementation from now on:
217
218protected:
219 // setup newly attached MGLDevCtx for wxDC's use
220 // (does things like setting RGB blending mode for antialiased texts):
221 void InitializeMGLDC();
222
223 // common part of DoDrawText() and DoDrawRotatedText()
224 void DrawAnyText(const wxString& text, wxCoord x, wxCoord y);
c5789d15 225
32b8ec41
VZ
226 // MGL uses pens as both wxPens and wxBrushes, so we have to
227 // switch them as needed:
228 void SelectPen();
229 void SelectBrush();
230 void SelectMGLStipplePen(int style);
231 void SelectMGLFatPen(int style, int flag);
c5789d15 232
32b8ec41
VZ
233 // Select m_font into m_MGLDC:
234 bool SelectMGLFont();
c5789d15 235
32b8ec41
VZ
236 // Convert wxWin logical function to MGL rop:
237 int LogicalFunctionToMGLRop(int logFunc) const;
c5789d15 238
32b8ec41 239 // Unified implementation of DrawIcon, DrawBitmap and Blit:
c5789d15 240 void DoDrawSubBitmap(const wxBitmap &bmp,
32b8ec41
VZ
241 wxCoord x, wxCoord y, wxCoord w, wxCoord h,
242 wxCoord destx, wxCoord desty, int rop, bool useMask);
243
244 // MGL DC class we use:
245 MGLDevCtx *m_MGLDC;
246 bool m_OwnsMGLDC:1;
c5789d15 247
32b8ec41
VZ
248 // helper variables for SelectXXXX():
249 bool m_penSelected;
250 bool m_brushSelected;
251 bool m_downloadedPatterns[2];
252
c5789d15 253 // MGL does not render lines with width>1 with endings centered
32b8ec41
VZ
254 // at given coords but with top left corner of the pen at them,
255 // these offsets are used to correct it. They are computed by
256 // SelectPen.
257 int m_penOfsX, m_penOfsY;
258
259 double m_mm_to_pix_x, m_mm_to_pix_y;
c5789d15 260
32b8ec41 261 wxPalette m_oldPalette;
c5789d15 262
32b8ec41 263 wxRegion m_currentClippingRegion;
ef344ff8 264 wxRegion m_globalClippingRegion;
32b8ec41
VZ
265
266 // wxDC::Blit handles memoryDCs as special cases :(
267 bool m_isMemDC;
c5789d15 268
32b8ec41
VZ
269 font_t *m_mglFont;
270};
271
272#endif
273 // _WX_DC_H_