Release 941227
[wine] / include / gdi.h
1 /*
2  * GDI definitions
3  *
4  * Copyright 1993 Alexandre Julliard
5  */
6
7 #ifndef GDI_H
8 #define GDI_H
9
10 #include <X11/Xlib.h>
11 #include <X11/Xutil.h>
12
13 #include "windows.h"
14 #include "segmem.h"
15 #include "heap.h"
16
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
29
30 #pragma pack(1)
31
32 typedef struct tagREGION
33 {
34     WORD        type;
35     RECT        box;
36     Pixmap      pixmap;
37     Region      xrgn;
38 } REGION;
39
40 typedef struct tagGDIOBJHDR
41 {
42     HANDLE      hNext;
43     WORD        wMagic;
44     DWORD       dwCount;
45     WORD        wMetaList;
46 } GDIOBJHDR;
47
48 typedef struct tagBRUSHOBJ
49 {
50     GDIOBJHDR   header;
51     LOGBRUSH    logbrush WINE_PACKED;
52 } BRUSHOBJ;
53
54 typedef struct tagPENOBJ
55 {
56     GDIOBJHDR   header;
57     LOGPEN      logpen WINE_PACKED;
58 } PENOBJ;
59
60 typedef struct tagPALETTEOBJ
61 {
62     GDIOBJHDR   header;
63     LOGPALETTE  logpalette WINE_PACKED;
64 } PALETTEOBJ;
65
66 typedef struct tagFONTOBJ
67 {
68     GDIOBJHDR   header;
69     LOGFONT     logfont WINE_PACKED;
70 } FONTOBJ;
71
72 typedef struct tagBITMAPOBJ
73 {
74     GDIOBJHDR   header;
75     BITMAP      bitmap;
76     Pixmap      pixmap;
77     SIZE        size;   /* For SetBitmapDimension() */
78 } BITMAPOBJ;
79
80 typedef struct tagRGNOBJ
81 {
82     GDIOBJHDR   header;
83     REGION      region;
84 } RGNOBJ;
85
86 #pragma pack(4)
87
88 typedef struct
89 {
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;
121
122
123   /* Device independent DC information */
124 typedef struct
125 {
126     int           flags;
127     DeviceCaps   *devCaps;
128
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;
139
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;
151
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 */
158
159     BYTE          bitsPerPixel;
160
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;
175
176
177   /* X physical pen */
178 typedef struct
179 {
180     int          style;
181     int          pixel;
182     int          width;
183     char *       dashes;
184     int          dash_len;
185 } X_PHYSPEN;
186
187   /* X physical brush */
188 typedef struct
189 {
190     int          style;
191     int          fillStyle;
192     int          pixel;
193     Pixmap       pixmap;
194 } X_PHYSBRUSH;
195
196   /* X physical font */
197 typedef struct
198 {
199     XFontStruct * fstruct;
200     TEXTMETRIC    metrics;
201 } X_PHYSFONT;
202
203   /* X physical palette information */
204 typedef struct
205 {
206     HANDLE    hMapping;     /* Color mapping table (or 0 for identity) */
207     HANDLE    hRevMapping;  /* Reverse color mapping table */
208     WORD      mappingSize;
209 } X_PHYSPALETTE;
210
211   /* X-specific DC information */
212 typedef struct
213 {
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;
221
222
223 typedef struct tagDC
224 {
225     GDIOBJHDR     header;
226     WORD          saveLevel;
227     WIN_DC_INFO   w;
228     union
229     {
230         X_DC_INFO x;
231         /* other devices (e.g. printer) */
232     } u;
233 } DC;
234
235   /* DC flags */
236 #define DC_MEMORY     1   /* It is a memory DC */
237 #define DC_SAVED      2   /* It is a saved DC */
238
239   /* Last 32 bytes are reserved for stock object handles */
240 #define GDI_HEAP_SIZE               0xffe0  
241
242   /* First handle possible for stock objects (must be >= GDI_HEAP_SIZE) */
243 #define FIRST_STOCK_HANDLE          GDI_HEAP_SIZE
244
245   /* Stock objects handles */
246
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)
264
265 #define NB_STOCK_OBJECTS            (SYSTEM_FIXED_FONT + 1)
266
267 #define FIRST_STOCK_FONT            STOCK_OEM_FIXED_FONT
268 #define LAST_STOCK_FONT             STOCK_SYSTEM_FIXED_FONT
269
270
271
272   /* Device <-> logical coords conversion */
273
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)
282
283
284   /* GDI local heap */
285
286 #ifdef WINELIB
287
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)
291
292 #else
293
294 extern MDESC *GDI_Heap;
295
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))
300
301 #endif
302
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 );
307
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 */
313
314 #endif  /* GDI_H */