added wxJPEGHandler
[wxWidgets.git] / include / wx / gdicmn.h
1 /////////////////////////////////////////////////////////////////////////////
2 // Name: gdicmn.h
3 // Purpose: Common GDI classes, types and declarations
4 // Author: Julian Smart
5 // Modified by:
6 // Created: 01/02/97
7 // RCS-ID: $Id$
8 // Copyright: (c)
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
11
12 #ifndef _WX_GDICMNH__
13 #define _WX_GDICMNH__
14
15 #ifdef __GNUG__
16 #pragma interface "gdicmn.h"
17 #endif
18
19 #include "wx/object.h"
20 #include "wx/list.h"
21 #include "wx/hash.h"
22 #include "wx/string.h"
23 #include "wx/setup.h"
24 #include "wx/colour.h"
25
26 // Standard cursors
27 typedef enum {
28 wxCURSOR_NONE = 0,
29 wxCURSOR_ARROW = 1,
30 wxCURSOR_BULLSEYE,
31 wxCURSOR_CHAR,
32 wxCURSOR_CROSS,
33 wxCURSOR_HAND,
34 wxCURSOR_IBEAM,
35 wxCURSOR_LEFT_BUTTON,
36 wxCURSOR_MAGNIFIER,
37 wxCURSOR_MIDDLE_BUTTON,
38 wxCURSOR_NO_ENTRY,
39 wxCURSOR_PAINT_BRUSH,
40 wxCURSOR_PENCIL,
41 wxCURSOR_POINT_LEFT,
42 wxCURSOR_POINT_RIGHT,
43 wxCURSOR_QUESTION_ARROW,
44 wxCURSOR_RIGHT_BUTTON,
45 wxCURSOR_SIZENESW,
46 wxCURSOR_SIZENS,
47 wxCURSOR_SIZENWSE,
48 wxCURSOR_SIZEWE,
49 wxCURSOR_SIZING,
50 wxCURSOR_SPRAYCAN,
51 wxCURSOR_WAIT,
52 wxCURSOR_WATCH,
53 wxCURSOR_BLANK
54 #ifdef __X__
55 /* Not yet implemented for Windows */
56 , wxCURSOR_CROSS_REVERSE,
57 wxCURSOR_DOUBLE_ARROW,
58 wxCURSOR_BASED_ARROW_UP,
59 wxCURSOR_BASED_ARROW_DOWN
60 #endif
61 } wxStockCursor;
62
63 class WXDLLEXPORT wxSize
64 {
65 public:
66 long x;
67 long y;
68 inline wxSize() { x = 0; y = 0; }
69 inline wxSize(long xx, long yy) { x = xx; y = yy; }
70 inline wxSize(const wxSize& sz) { x = sz.x; y = sz.y; }
71 inline void operator = (const wxSize& sz) { x = sz.x; y = sz.y; }
72 inline wxSize operator + (const wxSize& sz) { return wxSize(x + sz.x, y + sz.y); }
73 inline wxSize operator - (const wxSize& sz) { return wxSize(x - sz.x, y - sz.y); }
74 inline void Set(long xx, long yy) { x = xx; y = yy; }
75 inline long GetX() const { return x; }
76 inline long GetY() const { return y; }
77 };
78
79 // Point
80 class WXDLLEXPORT wxRealPoint
81 {
82 public:
83 double x;
84 double y;
85 inline wxRealPoint() { x = 0.0; y = 0.0; };
86 inline wxRealPoint(double _x, double _y) { x = _x; y = _y; };
87 inline wxRealPoint operator + (const wxRealPoint& pt) { return wxRealPoint(x + pt.x, y + pt.y); }
88 inline wxRealPoint operator - (const wxRealPoint& pt) { return wxRealPoint(x - pt.x, y - pt.y); }
89
90 inline void operator = (const wxRealPoint& pt) { x = pt.x; y = pt.y; }
91 };
92
93 class WXDLLEXPORT wxPoint
94 {
95 public:
96 #if defined(__WXMSW__) && !defined(__WIN32__)
97 int x;
98 int y;
99 #else
100 long x;
101 long y;
102 #endif
103
104 inline wxPoint() { x = 0; y = 0; };
105 wxPoint(long the_x, long the_y) { x = the_x; y = the_y; };
106 wxPoint(const wxPoint& pt) { x = pt.x; y = pt.y; };
107
108 inline void operator = (const wxPoint& pt) { x = pt.x; y = pt.y; }
109 inline wxPoint operator + (const wxPoint& pt) { return wxPoint(x + pt.x, y + pt.y); }
110 inline wxPoint operator - (const wxPoint& pt) { return wxPoint(x - pt.x, y - pt.y); }
111 };
112
113 #if WXWIN_COMPATIBILITY
114 #define wxIntPoint wxPoint
115 #define wxRectangle wxRect
116 #endif
117
118 class WXDLLEXPORT wxRect
119 {
120 public:
121 wxRect() ;
122 wxRect(long x, long y, long w, long h);
123 wxRect(const wxPoint& topLeft, const wxPoint& bottomRight);
124 wxRect(const wxPoint& pos, const wxSize& size);
125 wxRect(const wxRect& rect);
126
127 inline long GetX() const { return x; }
128 inline void SetX(long X) { x = X; }
129 inline long GetY() const { return y; }
130 inline void SetY(long Y) { y = Y; }
131 inline long GetWidth() const { return width; }
132 inline void SetWidth(long w) { width = w; }
133 inline long GetHeight() const { return height; }
134 inline void SetHeight(long h) { height = h; }
135
136 inline wxPoint GetPosition() { return wxPoint(x, y); }
137 inline wxSize GetSize() { return wxSize(width, height); }
138
139 inline long GetLeft() const { return x; }
140 inline long GetTop() const { return y; }
141 inline long GetBottom() const { return y + height; }
142 inline long GetRight() const { return x + width; }
143
144 wxRect& operator = (const wxRect& rect);
145 bool operator == (const wxRect& rect);
146 bool operator != (const wxRect& rect);
147 public:
148 long x, y, width, height;
149 };
150
151 class WXDLLEXPORT wxBrush;
152 class WXDLLEXPORT wxPen;
153 class WXDLLEXPORT wxBitmap;
154 class WXDLLEXPORT wxIcon;
155 class WXDLLEXPORT wxCursor;
156 class WXDLLEXPORT wxFont;
157 class WXDLLEXPORT wxPalette;
158 class WXDLLEXPORT wxPalette;
159 class WXDLLEXPORT wxRegion;
160
161 /*
162 * Bitmap flags
163 */
164
165 // Hint to indicate filetype
166 #define wxBITMAP_TYPE_BMP 1
167 #define wxBITMAP_TYPE_BMP_RESOURCE 2
168 #define wxBITMAP_TYPE_ICO 3
169 #define wxBITMAP_TYPE_ICO_RESOURCE 4
170 #define wxBITMAP_TYPE_CUR 5
171 #define wxBITMAP_TYPE_CUR_RESOURCE 6
172 #define wxBITMAP_TYPE_XBM 7
173 #define wxBITMAP_TYPE_XBM_DATA 8
174 #define wxBITMAP_TYPE_XPM 9
175 #define wxBITMAP_TYPE_XPM_DATA 10
176 #define wxBITMAP_TYPE_TIF 11
177 #define wxBITMAP_TYPE_TIF_RESOURCE 12
178 #define wxBITMAP_TYPE_GIF 13
179 #define wxBITMAP_TYPE_GIF_RESOURCE 14
180 #define wxBITMAP_TYPE_PNG 15
181 #define wxBITMAP_TYPE_PNG_RESOURCE 16
182 #define wxBITMAP_TYPE_JPEG 17
183 #define wxBITMAP_TYPE_JPEG_RESOURCE 18
184 #define wxBITMAP_TYPE_ANY 50
185
186 #define wxBITMAP_TYPE_RESOURCE wxBITMAP_TYPE_BMP_RESOURCE
187
188 class WXDLLEXPORT wxBitmap;
189 class WXDLLEXPORT wxCursor;
190 class WXDLLEXPORT wxIcon;
191 class WXDLLEXPORT wxColour;
192 class WXDLLEXPORT wxString;
193
194 // Management of pens, brushes and fonts
195 class WXDLLEXPORT wxPenList: public wxList
196 {
197 DECLARE_DYNAMIC_CLASS(wxPenList)
198 public:
199 inline wxPenList()
200 { }
201 ~wxPenList();
202 void AddPen(wxPen *pen);
203 void RemovePen(wxPen *pen);
204 wxPen *FindOrCreatePen(const wxColour& colour, int width, int style);
205 };
206
207 class WXDLLEXPORT wxBrushList: public wxList
208 {
209 DECLARE_DYNAMIC_CLASS(wxBrushList)
210 public:
211 inline wxBrushList()
212 { }
213 ~wxBrushList();
214 void AddBrush(wxBrush *brush);
215 void RemoveBrush(wxBrush *brush);
216 wxBrush *FindOrCreateBrush(const wxColour& colour, int style);
217 };
218
219 WXDLLEXPORT_DATA(extern const char*) wxEmptyString;
220
221 class WXDLLEXPORT wxFontList: public wxList
222 {
223 DECLARE_DYNAMIC_CLASS(wxFontList)
224 public:
225 inline wxFontList()
226 { }
227 ~wxFontList();
228 void AddFont(wxFont *font);
229 void RemoveFont(wxFont *font);
230 wxFont *FindOrCreateFont(int pointSize, int family, int style, int weight,
231 bool underline = FALSE, const wxString& face = wxEmptyString);
232 };
233
234 class WXDLLEXPORT wxColourDatabase: public wxList
235 {
236 DECLARE_CLASS(wxColourDatabase)
237 public:
238 wxColourDatabase(int type);
239 ~wxColourDatabase() ;
240 // Not const because it may add a name to the database
241 wxColour *FindColour(const wxString& colour) ;
242 wxString FindName(const wxColour& colour) const;
243 void Initialize();
244 };
245
246 class WXDLLEXPORT wxBitmapList: public wxList
247 {
248 DECLARE_DYNAMIC_CLASS(wxBitmapList)
249 public:
250 wxBitmapList();
251 ~wxBitmapList();
252
253 void AddBitmap(wxBitmap *bitmap);
254 void RemoveBitmap(wxBitmap *bitmap);
255 };
256
257 // Lists of GDI objects
258 WXDLLEXPORT_DATA(extern wxPenList*) wxThePenList;
259 WXDLLEXPORT_DATA(extern wxBrushList*) wxTheBrushList;
260 WXDLLEXPORT_DATA(extern wxFontList*) wxTheFontList;
261 WXDLLEXPORT_DATA(extern wxBitmapList*) wxTheBitmapList;
262
263 // Stock objects
264 WXDLLEXPORT_DATA(extern wxFont*) wxNORMAL_FONT;
265 WXDLLEXPORT_DATA(extern wxFont*) wxSMALL_FONT;
266 WXDLLEXPORT_DATA(extern wxFont*) wxITALIC_FONT;
267 WXDLLEXPORT_DATA(extern wxFont*) wxSWISS_FONT;
268
269 WXDLLEXPORT_DATA(extern wxPen*) wxRED_PEN;
270 WXDLLEXPORT_DATA(extern wxPen*) wxCYAN_PEN;
271 WXDLLEXPORT_DATA(extern wxPen*) wxGREEN_PEN;
272 WXDLLEXPORT_DATA(extern wxPen*) wxBLACK_PEN;
273 WXDLLEXPORT_DATA(extern wxPen*) wxWHITE_PEN;
274 WXDLLEXPORT_DATA(extern wxPen*) wxTRANSPARENT_PEN;
275 WXDLLEXPORT_DATA(extern wxPen*) wxBLACK_DASHED_PEN;
276 WXDLLEXPORT_DATA(extern wxPen*) wxGREY_PEN;
277 WXDLLEXPORT_DATA(extern wxPen*) wxMEDIUM_GREY_PEN;
278 WXDLLEXPORT_DATA(extern wxPen*) wxLIGHT_GREY_PEN;
279
280 WXDLLEXPORT_DATA(extern wxBrush*) wxBLUE_BRUSH;
281 WXDLLEXPORT_DATA(extern wxBrush*) wxGREEN_BRUSH;
282 WXDLLEXPORT_DATA(extern wxBrush*) wxWHITE_BRUSH;
283 WXDLLEXPORT_DATA(extern wxBrush*) wxBLACK_BRUSH;
284 WXDLLEXPORT_DATA(extern wxBrush*) wxGREY_BRUSH;
285 WXDLLEXPORT_DATA(extern wxBrush*) wxMEDIUM_GREY_BRUSH;
286 WXDLLEXPORT_DATA(extern wxBrush*) wxLIGHT_GREY_BRUSH;
287 WXDLLEXPORT_DATA(extern wxBrush*) wxTRANSPARENT_BRUSH;
288 WXDLLEXPORT_DATA(extern wxBrush*) wxCYAN_BRUSH;
289 WXDLLEXPORT_DATA(extern wxBrush*) wxRED_BRUSH;
290
291 WXDLLEXPORT_DATA(extern wxColour*) wxBLACK;
292 WXDLLEXPORT_DATA(extern wxColour*) wxWHITE;
293 WXDLLEXPORT_DATA(extern wxColour*) wxRED;
294 WXDLLEXPORT_DATA(extern wxColour*) wxBLUE;
295 WXDLLEXPORT_DATA(extern wxColour*) wxGREEN;
296 WXDLLEXPORT_DATA(extern wxColour*) wxCYAN;
297 WXDLLEXPORT_DATA(extern wxColour*) wxLIGHT_GREY;
298
299 // 'Null' objects
300 WXDLLEXPORT_DATA(extern wxBitmap) wxNullBitmap;
301 WXDLLEXPORT_DATA(extern wxIcon) wxNullIcon;
302 WXDLLEXPORT_DATA(extern wxCursor) wxNullCursor;
303 WXDLLEXPORT_DATA(extern wxPen) wxNullPen;
304 WXDLLEXPORT_DATA(extern wxBrush) wxNullBrush;
305 WXDLLEXPORT_DATA(extern wxPalette) wxNullPalette;
306 WXDLLEXPORT_DATA(extern wxFont) wxNullFont;
307 WXDLLEXPORT_DATA(extern wxColour) wxNullColour;
308 #ifdef __WXGTK__
309 WXDLLEXPORT_DATA(extern wxRegion) wxNullRegion;
310 #endif
311
312 // Stock cursors types
313 WXDLLEXPORT_DATA(extern wxCursor*) wxSTANDARD_CURSOR;
314 WXDLLEXPORT_DATA(extern wxCursor*) wxHOURGLASS_CURSOR;
315 WXDLLEXPORT_DATA(extern wxCursor*) wxCROSS_CURSOR;
316
317 WXDLLEXPORT_DATA(extern wxColourDatabase*) wxTheColourDatabase;
318 extern void WXDLLEXPORT wxInitializeStockObjects();
319 extern void WXDLLEXPORT wxInitializeStockLists();
320 extern void WXDLLEXPORT wxDeleteStockObjects();
321 extern void WXDLLEXPORT wxDeleteStockLists();
322
323 extern bool WXDLLEXPORT wxColourDisplay();
324
325 // Returns depth of screen
326 extern int WXDLLEXPORT wxDisplayDepth();
327 #define wxGetDisplayDepth wxDisplayDepth
328
329 extern void WXDLLEXPORT wxDisplaySize(int *width, int *height);
330 extern wxSize WXDLLEXPORT wxGetDisplaySize();
331
332 extern void WXDLLEXPORT wxSetCursor(const wxCursor& cursor);
333
334 // Useful macro for creating icons portably
335
336 #ifdef __WXMSW__
337 // Load from a resource
338 # define wxICON(X) wxIcon("" #X "")
339
340 #elif defined(__WXGTK__)
341 // Initialize from an included XPM
342 # define wxICON(X) wxIcon( (const char**) X##_xpm )
343 #elif defined(__WXMOTIF__)
344 // Initialize from an included XPM
345 # define wxICON(X) wxIcon( X##_xpm )
346 #else
347
348 // This will usually mean something on any platform
349 # define wxICON(X) wxIcon("" #X "")
350 #endif
351
352 /*
353 Example:
354 wxIcon *icon = new wxICON(mondrian);
355 expands into:
356 wxIcon *icon = new wxIcon("mondrian"); // On wxMSW
357 wxIcon *icon = new wxIcon(mondrian_xpm); // On wxGTK
358 */
359
360 class WXDLLEXPORT wxResourceCache: public wxList
361 {
362 public:
363 wxResourceCache() { }
364 wxResourceCache(const unsigned int keyType) : wxList(keyType) { }
365 ~wxResourceCache();
366
367 private:
368 DECLARE_DYNAMIC_CLASS(wxResourceCache)
369 };
370
371 #endif
372 // _WX_GDICMNH__