]> git.saurik.com Git - wxWidgets.git/blame - include/wx/univ/stdrend.h
wxDC::StretchBlit() for wxMac and wxMSW (patch 1611973)
[wxWidgets.git] / include / wx / univ / stdrend.h
CommitLineData
147b8a4a
VZ
1///////////////////////////////////////////////////////////////////////////////
2// Name: wx/univ/stdrend.h
3// Purpose: wxStdRenderer class declaration
4// Author: Vadim Zeitlin
5// Created: 2006-09-18
6// RCS-ID: $Id$
7// Copyright: (c) 2006 Vadim Zeitlin <vadim@wxwindows.org>
8// Licence: wxWindows licence
9///////////////////////////////////////////////////////////////////////////////
10
11#ifndef _WX_UNIV_STDREND_H_
12#define _WX_UNIV_STDREND_H_
13
14#include "wx/univ/renderer.h"
762ad185 15#include "wx/pen.h"
147b8a4a
VZ
16
17class WXDLLEXPORT wxColourScheme;
18
19// ----------------------------------------------------------------------------
20// wxStdRenderer: implements as much of wxRenderer API as possible generically
21// ----------------------------------------------------------------------------
22
23class wxStdRenderer : public wxRenderer
24{
25public:
26 // the renderer will use the given scheme, whose lifetime must be at least
27 // as long as of this object itself, to choose the colours for drawing
28 wxStdRenderer(const wxColourScheme *scheme);
29
30 virtual void DrawBackground(wxDC& dc,
31 const wxColour& col,
32 const wxRect& rect,
33 int flags = 0,
34 wxWindow *window = NULL);
35 virtual void DrawButtonSurface(wxDC& dc,
36 const wxColour& col,
37 const wxRect& rect,
38 int flags);
39
40
b19d4eb9 41 virtual void DrawFocusRect(wxDC& dc, const wxRect& rect, int flags = 0);
147b8a4a
VZ
42 virtual void DrawLabel(wxDC& dc,
43 const wxString& label,
44 const wxRect& rect,
45 int flags = 0,
46 int alignment = wxALIGN_LEFT | wxALIGN_TOP,
47 int indexAccel = -1,
48 wxRect *rectBounds = NULL);
49 virtual void DrawButtonLabel(wxDC& dc,
50 const wxString& label,
51 const wxBitmap& image,
52 const wxRect& rect,
53 int flags = 0,
54 int alignment = wxALIGN_LEFT | wxALIGN_TOP,
55 int indexAccel = -1,
56 wxRect *rectBounds = NULL);
57
58
59 virtual void DrawBorder(wxDC& dc,
60 wxBorder border,
61 const wxRect& rect,
62 int flags = 0,
63 wxRect *rectIn = NULL);
64 virtual void DrawTextBorder(wxDC& dc,
65 wxBorder border,
66 const wxRect& rect,
67 int flags = 0,
68 wxRect *rectIn = NULL);
69
70 virtual void DrawHorizontalLine(wxDC& dc,
71 wxCoord y, wxCoord x1, wxCoord x2);
72 virtual void DrawVerticalLine(wxDC& dc,
73 wxCoord x, wxCoord y1, wxCoord y2);
74 virtual void DrawFrame(wxDC& dc,
75 const wxString& label,
76 const wxRect& rect,
77 int flags = 0,
78 int alignment = wxALIGN_LEFT,
79 int indexAccel = -1);
80
81
82 virtual void DrawItem(wxDC& dc,
83 const wxString& label,
84 const wxRect& rect,
85 int flags = 0);
6229b92f
VZ
86 virtual void DrawCheckItem(wxDC& dc,
87 const wxString& label,
88 const wxBitmap& bitmap,
89 const wxRect& rect,
90 int flags = 0);
147b8a4a
VZ
91
92 virtual void DrawCheckButton(wxDC& dc,
93 const wxString& label,
94 const wxBitmap& bitmap,
95 const wxRect& rect,
96 int flags = 0,
97 wxAlignment align = wxALIGN_LEFT,
98 int indexAccel = -1);
99 virtual void DrawRadioButton(wxDC& dc,
100 const wxString& label,
101 const wxBitmap& bitmap,
102 const wxRect& rect,
103 int flags = 0,
104 wxAlignment align = wxALIGN_LEFT,
105 int indexAccel = -1);
106
0428ac8c
VZ
107 virtual void DrawScrollbarArrow(wxDC& dc,
108 wxDirection dir,
109 const wxRect& rect,
110 int flags = 0);
111 virtual void DrawScrollCorner(wxDC& dc,
112 const wxRect& rect);
113
147b8a4a
VZ
114#if wxUSE_TEXTCTRL
115 virtual void DrawTextLine(wxDC& dc,
116 const wxString& text,
117 const wxRect& rect,
118 int selStart = -1,
119 int selEnd = -1,
120 int flags = 0);
121
122 virtual void DrawLineWrapMark(wxDC& dc, const wxRect& rect);
6229b92f
VZ
123
124 virtual wxRect GetTextTotalArea(const wxTextCtrl *text,
125 const wxRect& rect) const;
126 virtual wxRect GetTextClientArea(const wxTextCtrl *text,
127 const wxRect& rect,
128 wxCoord *extraSpaceBeyond) const;
147b8a4a
VZ
129#endif // wxUSE_TEXTCTRL
130
131 virtual wxRect GetBorderDimensions(wxBorder border) const;
132
133 virtual bool AreScrollbarsInsideBorder() const;
134
1cd9779f
VZ
135 virtual void AdjustSize(wxSize *size, const wxWindow *window);
136
137 virtual wxCoord GetListboxItemHeight(wxCoord fontHeight);
138
1cd9779f
VZ
139#if wxUSE_STATUSBAR
140 virtual void DrawStatusField(wxDC& dc,
141 const wxRect& rect,
142 const wxString& label,
143 int flags = 0, int style = 0);
144
283c797c
VS
145 virtual wxSize GetStatusBarBorders() const;
146
147 virtual wxCoord GetStatusBarBorderBetweenFields() const;
148
149 virtual wxSize GetStatusBarFieldMargins() const;
1cd9779f
VZ
150#endif // wxUSE_STATUSBAR
151
152 virtual wxCoord GetCheckItemMargin() const { return 0; }
153
249803fb
VZ
154
155 virtual void DrawFrameTitleBar(wxDC& dc,
156 const wxRect& rect,
157 const wxString& title,
158 const wxIcon& icon,
159 int flags,
160 int specialButton = 0,
161 int specialButtonFlag = 0);
162 virtual void DrawFrameBorder(wxDC& dc,
163 const wxRect& rect,
164 int flags);
165 virtual void DrawFrameBackground(wxDC& dc,
166 const wxRect& rect,
167 int flags);
168 virtual void DrawFrameTitle(wxDC& dc,
169 const wxRect& rect,
170 const wxString& title,
171 int flags);
172 virtual void DrawFrameIcon(wxDC& dc,
173 const wxRect& rect,
174 const wxIcon& icon,
175 int flags);
176 virtual void DrawFrameButton(wxDC& dc,
177 wxCoord x, wxCoord y,
178 int button,
179 int flags = 0);
180
181 virtual wxRect GetFrameClientArea(const wxRect& rect, int flags) const;
182
183 virtual wxSize GetFrameTotalSize(const wxSize& clientSize, int flags) const;
184
185 virtual wxSize GetFrameMinSize(int flags) const;
186
187 virtual wxSize GetFrameIconSize() const;
188
189 virtual int HitTestFrame(const wxRect& rect,
190 const wxPoint& pt,
191 int flags = 0) const;
147b8a4a
VZ
192protected:
193 // various constants
0428ac8c
VZ
194 enum ArrowDirection
195 {
196 Arrow_Left,
197 Arrow_Right,
198 Arrow_Up,
199 Arrow_Down,
200 Arrow_Max
201 };
202
203 enum ArrowStyle
204 {
205 Arrow_Normal,
206 Arrow_Disabled,
207 Arrow_Pressed,
208 Arrow_Inverted,
209 Arrow_InvertedDisabled,
210 Arrow_StateMax
211 };
212
249803fb
VZ
213 enum FrameButtonType
214 {
215 FrameButton_Close,
216 FrameButton_Minimize,
217 FrameButton_Maximize,
218 FrameButton_Restore,
219 FrameButton_Help,
220 FrameButton_Max
221 };
222
147b8a4a
VZ
223 enum IndicatorType
224 {
225 IndicatorType_Check,
226 IndicatorType_Radio,
6229b92f
VZ
227 IndicatorType_MaxCtrl,
228 IndicatorType_Menu = IndicatorType_MaxCtrl,
147b8a4a
VZ
229 IndicatorType_Max
230 };
231
232 enum IndicatorState
233 {
234 IndicatorState_Normal,
235 IndicatorState_Pressed, // this one is for check/radioboxes
236 IndicatorState_Disabled,
237 IndicatorState_MaxCtrl,
238
239 // the rest of the states are valid for menu items only
240 IndicatorState_Selected = IndicatorState_Pressed,
241 IndicatorState_SelectedDisabled = IndicatorState_MaxCtrl,
242 IndicatorState_MaxMenu
243 };
244
245 enum IndicatorStatus
246 {
247 IndicatorStatus_Checked,
248 IndicatorStatus_Unchecked,
249 IndicatorStatus_Undetermined,
250 IndicatorStatus_Max
251 };
252
253 // translate the appropriate bits in flags to the above enum elements
254 static void GetIndicatorsFromFlags(int flags,
255 IndicatorState& state,
256 IndicatorStatus& status);
257
0428ac8c
VZ
258 // translate wxDirection to ArrowDirection
259 static ArrowDirection GetArrowDirection(wxDirection dir);
260
261
147b8a4a
VZ
262 // fill the rectangle with a brush of given colour (must be valid)
263 void DrawSolidRect(wxDC& dc, const wxColour& col, const wxRect& rect);
264
265
266 // all the functions in this section adjust the rect parameter to
267 // correspond to the interiour of the drawn area
268
269 // draw complete rectangle
270 void DrawRect(wxDC& dc, wxRect *rect, const wxPen& pen);
271
272 // draw the rectange using the first pen for the left and top sides
273 // and the second one for the bottom and right ones
274 void DrawShadedRect(wxDC& dc, wxRect *rect,
275 const wxPen& pen1, const wxPen& pen2);
276
277 // border drawing routines, may be overridden in the derived class
278 virtual void DrawRaisedBorder(wxDC& dc, wxRect *rect);
279 virtual void DrawSunkenBorder(wxDC& dc, wxRect *rect);
280 virtual void DrawAntiSunkenBorder(wxDC& dc, wxRect *rect);
7419ba02
VZ
281 virtual void DrawBoxBorder(wxDC& dc, wxRect *rect);
282 virtual void DrawStaticBorder(wxDC& dc, wxRect *rect);
283 virtual void DrawExtraBorder(wxDC& dc, wxRect *rect);
147b8a4a
VZ
284
285
286 // draw the frame with non-empty label inside the given rectText
287 virtual void DrawFrameWithLabel(wxDC& dc,
288 const wxString& label,
289 const wxRect& rectFrame,
290 const wxRect& rectText,
291 int flags,
292 int alignment,
293 int indexAccel);
294
295 // draw the (static box) frame without the part corresponding to rectLabel
296 void DrawFrameWithoutLabel(wxDC& dc,
297 const wxRect& rectFrame,
298 const wxRect& rectLabel);
299
300
6229b92f
VZ
301 // draw the bitmap for a check item (which is by default the same as check
302 // box one but may be different)
303 virtual void DrawCheckItemBitmap(wxDC& dc,
304 const wxBitmap& bitmap,
305 const wxRect& rect,
306 int flags);
307
147b8a4a
VZ
308 // common routine for drawing check and radio buttons
309 void DrawCheckOrRadioButton(wxDC& dc,
310 const wxString& label,
311 const wxBitmap& bitmap,
312 const wxRect& rect,
313 int flags,
314 wxAlignment align,
315 int indexAccel);
316
317 // return the check/radio bitmap for the given flags
318 virtual wxBitmap GetRadioBitmap(int flags) = 0;
319 virtual wxBitmap GetCheckBitmap(int flags) = 0;
320
249803fb
VZ
321 // return the frame icon bitmap
322 virtual wxBitmap GetFrameButtonBitmap(FrameButtonType type) = 0;
323
b13862ee
VZ
324 // get the width of either normal or resizeable frame border depending on
325 // whether flags contains wxTOPLEVEL_RESIZEABLE bit
326 //
327 // notice that these methods only make sense with standard border drawing
328 // code which uses the borders of the same width on all sides, this is why
329 // they are only present here and not in wxRenderer itself
330 virtual int GetFrameBorderWidth(int flags) const;
331
6229b92f
VZ
332#if wxUSE_TEXTCTRL
333 // return the width of the border around the text area in the text control
334 virtual int GetTextBorderWidth(const wxTextCtrl *text) const;
335#endif // wxUSE_TEXTCTRL
147b8a4a 336
147b8a4a
VZ
337 // GDI objects we often use
338 wxPen m_penBlack,
339 m_penDarkGrey,
340 m_penLightGrey,
341 m_penHighlight;
342
249803fb
VZ
343 wxFont m_titlebarFont;
344
147b8a4a
VZ
345 // the colours we use, they never change currently so we don't have to ever
346 // update m_penXXX objects above
347 const wxColourScheme * const m_scheme;
348
349 DECLARE_NO_COPY_CLASS(wxStdRenderer)
350};
351
352#endif // _WX_UNIV_STDREND_H_