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