Release 941227
[wine/multimedia.git] / include / gdi.h
blobb176d424288d35d016543582d04fa177304ebc0b
1 /*
2 * GDI definitions
4 * Copyright 1993 Alexandre Julliard
5 */
7 #ifndef GDI_H
8 #define GDI_H
10 #include <X11/Xlib.h>
11 #include <X11/Xutil.h>
13 #include "windows.h"
14 #include "segmem.h"
15 #include "heap.h"
17 /* GDI objects magic numbers */
18 #define PEN_MAGIC 0x4f47
19 #define BRUSH_MAGIC 0x4f48
20 #define FONT_MAGIC 0x4f49
21 #define PALETTE_MAGIC 0x4f4a
22 #define BITMAP_MAGIC 0x4f4b
23 #define REGION_MAGIC 0x4f4c
24 #define DC_MAGIC 0x4f4d
25 #define DISABLED_DC_MAGIC 0x4f4e
26 #define META_DC_MAGIC 0x4f4f
27 #define METAFILE_MAGIC 0x4f50
28 #define METAFILE_DC_MAGIC 0x4f51
30 #pragma pack(1)
32 typedef struct tagREGION
34 WORD type;
35 RECT box;
36 Pixmap pixmap;
37 Region xrgn;
38 } REGION;
40 typedef struct tagGDIOBJHDR
42 HANDLE hNext;
43 WORD wMagic;
44 DWORD dwCount;
45 WORD wMetaList;
46 } GDIOBJHDR;
48 typedef struct tagBRUSHOBJ
50 GDIOBJHDR header;
51 LOGBRUSH logbrush WINE_PACKED;
52 } BRUSHOBJ;
54 typedef struct tagPENOBJ
56 GDIOBJHDR header;
57 LOGPEN logpen WINE_PACKED;
58 } PENOBJ;
60 typedef struct tagPALETTEOBJ
62 GDIOBJHDR header;
63 LOGPALETTE logpalette WINE_PACKED;
64 } PALETTEOBJ;
66 typedef struct tagFONTOBJ
68 GDIOBJHDR header;
69 LOGFONT logfont WINE_PACKED;
70 } FONTOBJ;
72 typedef struct tagBITMAPOBJ
74 GDIOBJHDR header;
75 BITMAP bitmap;
76 Pixmap pixmap;
77 SIZE size; /* For SetBitmapDimension() */
78 } BITMAPOBJ;
80 typedef struct tagRGNOBJ
82 GDIOBJHDR header;
83 REGION region;
84 } RGNOBJ;
86 #pragma pack(4)
88 typedef struct
90 WORD version; /* 0: driver version */
91 WORD technology; /* 2: device technology */
92 WORD horzSize; /* 4: width of display in mm */
93 WORD vertSize; /* 6: height of display in mm */
94 WORD horzRes; /* 8: width of display in pixels */
95 WORD vertRes; /* 10: width of display in pixels */
96 WORD bitsPixel; /* 12: bits per pixel */
97 WORD planes; /* 14: color planes */
98 WORD numBrushes; /* 16: device-specific brushes */
99 WORD numPens; /* 18: device-specific pens */
100 WORD numMarkers; /* 20: device-specific markers */
101 WORD numFonts; /* 22: device-specific fonts */
102 WORD numColors; /* 24: size of color table */
103 WORD pdeviceSize; /* 26: size of PDEVICE structure */
104 WORD curveCaps; /* 28: curve capabilities */
105 WORD lineCaps; /* 30: line capabilities */
106 WORD polygonalCaps; /* 32: polygon capabilities */
107 WORD textCaps; /* 34: text capabilities */
108 WORD clipCaps; /* 36: clipping capabilities */
109 WORD rasterCaps; /* 38: raster capabilities */
110 WORD aspectX; /* 40: relative width of device pixel */
111 WORD aspectY; /* 42: relative height of device pixel */
112 WORD aspectXY; /* 44: relative diagonal width of device pixel */
113 WORD pad1[21]; /* 46-86: reserved */
114 WORD logPixelsX; /* 88: pixels / logical X inch */
115 WORD logPixelsY; /* 90: pixels / logical Y inch */
116 WORD pad2[6]; /* 92-102: reserved */
117 WORD sizePalette; /* 104: entries in system palette */
118 WORD numReserved; /* 106: reserved entries */
119 WORD colorRes; /* 108: color resolution */
120 } DeviceCaps;
123 /* Device independent DC information */
124 typedef struct
126 int flags;
127 DeviceCaps *devCaps;
129 HANDLE hMetaFile;
130 HRGN hClipRgn; /* Clip region (may be 0) */
131 HRGN hVisRgn; /* Visible region (must never be 0) */
132 HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */
133 HPEN hPen;
134 HBRUSH hBrush;
135 HFONT hFont;
136 HBITMAP hBitmap;
137 HANDLE hDevice;
138 HPALETTE hPalette;
140 WORD ROPmode;
141 WORD polyFillMode;
142 WORD stretchBltMode;
143 WORD relAbsMode;
144 WORD backgroundMode;
145 COLORREF backgroundColor;
146 COLORREF textColor;
147 int backgroundPixel;
148 int textPixel;
149 short brushOrgX;
150 short brushOrgY;
152 WORD textAlign; /* Text alignment from SetTextAlign() */
153 short charExtra; /* Spacing from SetTextCharacterExtra() */
154 short breakTotalExtra; /* Total extra space for justification */
155 short breakCount; /* Break char. count */
156 short breakExtra; /* breakTotalExtra / breakCount */
157 short breakRem; /* breakTotalExtra % breakCount */
159 BYTE bitsPerPixel;
161 WORD MapMode;
162 short DCOrgX; /* DC origin */
163 short DCOrgY;
164 short CursPosX; /* Current position */
165 short CursPosY;
166 short WndOrgX;
167 short WndOrgY;
168 short WndExtX;
169 short WndExtY;
170 short VportOrgX;
171 short VportOrgY;
172 short VportExtX;
173 short VportExtY;
174 } WIN_DC_INFO;
177 /* X physical pen */
178 typedef struct
180 int style;
181 int pixel;
182 int width;
183 char * dashes;
184 int dash_len;
185 } X_PHYSPEN;
187 /* X physical brush */
188 typedef struct
190 int style;
191 int fillStyle;
192 int pixel;
193 Pixmap pixmap;
194 } X_PHYSBRUSH;
196 /* X physical font */
197 typedef struct
199 XFontStruct * fstruct;
200 TEXTMETRIC metrics;
201 } X_PHYSFONT;
203 /* X physical palette information */
204 typedef struct
206 HANDLE hMapping; /* Color mapping table (or 0 for identity) */
207 HANDLE hRevMapping; /* Reverse color mapping table */
208 WORD mappingSize;
209 } X_PHYSPALETTE;
211 /* X-specific DC information */
212 typedef struct
214 GC gc; /* X Window GC */
215 Drawable drawable;
216 X_PHYSFONT font;
217 X_PHYSPEN pen;
218 X_PHYSBRUSH brush;
219 X_PHYSPALETTE pal;
220 } X_DC_INFO;
223 typedef struct tagDC
225 GDIOBJHDR header;
226 WORD saveLevel;
227 WIN_DC_INFO w;
228 union
230 X_DC_INFO x;
231 /* other devices (e.g. printer) */
232 } u;
233 } DC;
235 /* DC flags */
236 #define DC_MEMORY 1 /* It is a memory DC */
237 #define DC_SAVED 2 /* It is a saved DC */
239 /* Last 32 bytes are reserved for stock object handles */
240 #define GDI_HEAP_SIZE 0xffe0
242 /* First handle possible for stock objects (must be >= GDI_HEAP_SIZE) */
243 #define FIRST_STOCK_HANDLE GDI_HEAP_SIZE
245 /* Stock objects handles */
247 #define STOCK_WHITE_BRUSH (FIRST_STOCK_HANDLE + WHITE_BRUSH)
248 #define STOCK_LTGRAY_BRUSH (FIRST_STOCK_HANDLE + LTGRAY_BRUSH)
249 #define STOCK_GRAY_BRUSH (FIRST_STOCK_HANDLE + GRAY_BRUSH)
250 #define STOCK_DKGRAY_BRUSH (FIRST_STOCK_HANDLE + DKGRAY_BRUSH)
251 #define STOCK_BLACK_BRUSH (FIRST_STOCK_HANDLE + BLACK_BRUSH)
252 #define STOCK_NULL_BRUSH (FIRST_STOCK_HANDLE + NULL_BRUSH)
253 #define STOCK_HOLLOW_BRUSH (FIRST_STOCK_HANDLE + HOLLOW_BRUSH)
254 #define STOCK_WHITE_PEN (FIRST_STOCK_HANDLE + WHITE_PEN)
255 #define STOCK_BLACK_PEN (FIRST_STOCK_HANDLE + BLACK_PEN)
256 #define STOCK_NULL_PEN (FIRST_STOCK_HANDLE + NULL_PEN)
257 #define STOCK_OEM_FIXED_FONT (FIRST_STOCK_HANDLE + OEM_FIXED_FONT)
258 #define STOCK_ANSI_FIXED_FONT (FIRST_STOCK_HANDLE + ANSI_FIXED_FONT)
259 #define STOCK_ANSI_VAR_FONT (FIRST_STOCK_HANDLE + ANSI_VAR_FONT)
260 #define STOCK_SYSTEM_FONT (FIRST_STOCK_HANDLE + SYSTEM_FONT)
261 #define STOCK_DEVICE_DEFAULT_FONT (FIRST_STOCK_HANDLE + DEVICE_DEFAULT_FONT)
262 #define STOCK_DEFAULT_PALETTE (FIRST_STOCK_HANDLE + DEFAULT_PALETTE)
263 #define STOCK_SYSTEM_FIXED_FONT (FIRST_STOCK_HANDLE + SYSTEM_FIXED_FONT)
265 #define NB_STOCK_OBJECTS (SYSTEM_FIXED_FONT + 1)
267 #define FIRST_STOCK_FONT STOCK_OEM_FIXED_FONT
268 #define LAST_STOCK_FONT STOCK_SYSTEM_FIXED_FONT
272 /* Device <-> logical coords conversion */
274 #define XDPTOLP(dc,x) \
275 (((x)-(dc)->w.VportOrgX) * (dc)->w.WndExtX / (dc)->w.VportExtX+(dc)->w.WndOrgX)
276 #define YDPTOLP(dc,y) \
277 (((y)-(dc)->w.VportOrgY) * (dc)->w.WndExtY / (dc)->w.VportExtY+(dc)->w.WndOrgY)
278 #define XLPTODP(dc,x) \
279 (((x)-(dc)->w.WndOrgX) * (dc)->w.VportExtX / (dc)->w.WndExtX+(dc)->w.VportOrgX)
280 #define YLPTODP(dc,y) \
281 (((y)-(dc)->w.WndOrgY) * (dc)->w.VportExtY / (dc)->w.WndExtY+(dc)->w.VportOrgY)
284 /* GDI local heap */
286 #ifdef WINELIB
288 #define GDI_HEAP_ALLOC(f,size) LocalAlloc (f,size)
289 #define GDI_HEAP_ADDR(handle) LocalLock (handle)
290 #define GDI_HEAP_FREE(handle) LocalFree (handle)
292 #else
294 extern MDESC *GDI_Heap;
296 #define GDI_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&GDI_Heap,f,size) & 0xffff)
297 #define GDI_HEAP_FREE(handle) (HEAP_Free(&GDI_Heap,GDI_HEAP_ADDR(handle)))
298 #define GDI_HEAP_ADDR(handle) \
299 ((void *)((handle) ? ((handle) | ((int)GDI_Heap & 0xffff0000)) : 0))
301 #endif
303 extern BOOL GDI_Init(void);
304 extern HANDLE GDI_AllocObject( WORD, WORD );
305 extern BOOL GDI_FreeObject( HANDLE );
306 extern GDIOBJHDR * GDI_GetObjPtr( HANDLE, WORD );
308 extern Display * display;
309 extern Screen * screen;
310 extern Window rootWindow;
311 extern int screenWidth, screenHeight, screenDepth;
312 extern int desktopX, desktopY; /* misc/main.c */
314 #endif /* GDI_H */