Update the documentation
[reactos.git] / reactos / include / reactos / win32k / ntgdihdl.h
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Win32 Graphical Subsystem (WIN32K)
4 * FILE: include/win32k/ntgdihal.h
5 * PURPOSE: Win32 Shared GDI Handle/Object Types
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
7 */
8
9 /* INCLUDES ******************************************************************/
10
11 #ifndef _NTGDIHDL_
12 #define _NTGDIHDL_
13
14 #include <winddi.h>
15
16 /* DEFINES *******************************************************************/
17
18 /* Base address where the handle table is mapped to */
19 #define GDI_HANDLE_TABLE_BASE_ADDRESS (0x400000)
20
21 /* GDI handle table can hold 0x4000 handles */
22 #define GDI_HANDLE_COUNT 0x4000
23 #define GDI_GLOBAL_PROCESS (0x0)
24
25 /* Handle Masks and shifts */
26 #define GDI_HANDLE_INDEX_MASK (GDI_HANDLE_COUNT - 1)
27 #define GDI_HANDLE_TYPE_MASK 0x007f0000
28 #define GDI_HANDLE_BASETYPE_MASK 0x001f0000
29 #define GDI_HANDLE_STOCK_MASK 0x00800000
30 #define GDI_HANDLE_REUSE_MASK 0xff000000
31 #define GDI_HANDLE_UPPER_MASK (GDI_HANDLE_TYPE_MASK|GDI_HANDLE_STOCK_MASK|GDI_HANDLE_REUSE_MASK)
32 #define GDI_HANDLE_REUSECNT_SHIFT 24
33 #define GDI_HANDLE_BASETYPE_SHIFT 16
34
35 #define GDI_ENTRY_STOCK_MASK 0x00000080
36 #define GDI_ENTRY_REUSE_MASK 0x0000ff00
37 #define GDI_ENTRY_REUSE_INC 0x00000100
38 #define GDI_ENTRY_BASETYPE_MASK 0x001f0000
39 #define GDI_ENTRY_REUSECNT_SHIFT 8
40 #define GDI_ENTRY_UPPER_SHIFT 16
41
42 #define GDI_OBJECT_TAG_DC TAG('G', 'l', 'a', '1')
43 #define GDI_OBJECT_TAG_REGION TAG('G', 'l', 'a', '4')
44 #define GDI_OBJECT_TAG_BITMAP TAG('G', 'l', 'a', '5')
45 #define GDI_OBJECT_TAG_CLIOBJ TAG('G', 'h', '0', '6')
46 #define GDI_OBJECT_TAG_PATH TAG('G', 'h', '0', '7')
47 #define GDI_OBJECT_TAG_PALETTE TAG('G', 'l', 'a', '8')
48 #define GDI_OBJECT_TAG_COLSPC TAG('G', 'h', '0', '9')
49 #define GDI_OBJECT_TAG_FONT TAG('G', 'l', 'a', ':')
50 #define GDI_OBJECT_TAG_PFE TAG('G', 'h', '0', '<')
51 #define GDI_OBJECT_TAG_BRUSH TAG('G', 'l', 'a', '@')
52 #define GDI_OBJECT_TAG_ENUMFONT TAG('G', 'h', '0', 'F')
53
54 #define GDI_OBJECT_TAG_DDRAW TAG('D', 'h', ' ', '1')
55 #define GDI_OBJECT_TAG_DDSURF TAG('D', 'h', ' ', '2')
56
57 /*! \defgroup GDI object types
58 *
59 * GDI object types
60 *
61 */
62 /*@{*/
63 #define GDI_OBJECT_TYPE_DC 0x00010000
64 #define GDI_OBJECT_TYPE_DIRECTDRAW 0x00020000 /* Should be moved away from gdi objects */
65 #define GDI_OBJECT_TYPE_DD_SURFACE 0x00030000 /* Should be moved away from gdi objects */
66 #define GDI_OBJECT_TYPE_REGION 0x00040000
67 #define GDI_OBJECT_TYPE_BITMAP 0x00050000
68 #define GDI_OBJECT_TYPE_CLIOBJ 0x00060000
69 #define GDI_OBJECT_TYPE_PATH 0x00070000
70 #define GDI_OBJECT_TYPE_PALETTE 0x00080000
71 #define GDI_OBJECT_TYPE_COLORSPACE 0x00090000
72 #define GDI_OBJECT_TYPE_FONT 0x000a0000
73
74 #define GDI_OBJECT_TYPE_BRUSH 0x00100000
75 #define GDI_OBJECT_TYPE_DD_VIDEOPORT 0x00120000 /* Should be moved away from gdi objects */
76 #define GDI_OBJECT_TYPE_DD_MOTIONCOMP 0x00140000 /* Should be moved away from gdi objects */
77 #define GDI_OBJECT_TYPE_ENUMFONT 0x00160000
78
79 /* Following object types are derived types from the above base types
80 use 0x001f0000 as mask to get the base type */
81 #define GDI_OBJECT_TYPE_EMF 0x00210000
82 #define GDI_OBJECT_TYPE_METAFILE 0x00260000
83 #define GDI_OBJECT_TYPE_ENHMETAFILE 0x00460000
84 #define GDI_OBJECT_TYPE_PEN 0x00300000
85 #define GDI_OBJECT_TYPE_EXTPEN 0x00500000
86 #define GDI_OBJECT_TYPE_METADC 0x00660000
87 /*#define GDI_OBJECT_TYPE_DD_PALETTE 0x00630000 unused at the moment, other value required */
88 /*#define GDI_OBJECT_TYPE_DD_CLIPPER 0x00640000 unused at the moment, other value required */
89
90 /* Following object types made up for ROS */
91 #define GDI_OBJECT_TYPE_DONTCARE 0x007f0000
92 /** Not really an object type. Forces GDI_FreeObj to be silent. */
93 #define GDI_OBJECT_TYPE_SILENT 0x80000000
94 /*@}*/
95
96 /* Handle macros */
97 #define GDI_HANDLE_CREATE(i, t) \
98 ((HANDLE)(((i) & GDI_HANDLE_INDEX_MASK) | ((t) & GDI_HANDLE_TYPE_MASK)))
99
100 #define GDI_HANDLE_GET_INDEX(h) \
101 (((ULONG_PTR)(h)) & GDI_HANDLE_INDEX_MASK)
102
103 #define GDI_HANDLE_GET_TYPE(h) \
104 (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK)
105
106 #define GDI_HANDLE_IS_TYPE(h, t) \
107 ((t) == (((ULONG_PTR)(h)) & GDI_HANDLE_TYPE_MASK))
108
109 #define GDI_HANDLE_IS_STOCKOBJ(h) \
110 (0 != (((ULONG_PTR)(h)) & GDI_HANDLE_STOCK_MASK))
111
112 #define GDI_HANDLE_SET_STOCKOBJ(h) \
113 ((h) = (HANDLE)(((ULONG_PTR)(h)) | GDI_HANDLE_STOCK_MASK))
114
115 #define GDI_HANDLE_GET_UPPER(h) \
116 (((ULONG_PTR)(h)) & GDI_HANDLE_UPPER_MASK)
117
118 #define GDI_HANDLE_GET_REUSECNT(h) \
119 (((ULONG_PTR)(h)) >> GDI_HANDLE_REUSECNT_SHIFT)
120
121 #define GDI_ENTRY_GET_REUSECNT(e) \
122 ((((ULONG_PTR)(e)) & GDI_ENTRY_REUSE_MASK) >> GDI_ENTRY_REUSECNT_SHIFT)
123
124 #define GDI_OBJECT_GET_TYPE_INDEX(t) \
125 ((t & GDI_HANDLE_BASETYPE_MASK) >> GDI_HANDLE_BASETYPE_SHIFT)
126
127 /* DC OBJ Types */
128 #define DC_TYPE_DIRECT 0 // normal device context
129 #define DC_TYPE_MEMORY 1 // memory device context
130 #define DC_TYPE_INFO 2 // information context
131
132 /* DC OBJ Flags */
133 #define DC_FLAG_DISPLAY 0x0001
134 #define DC_FLAG_DIRECT 0x0002
135 #define DC_FLAG_CANCELLED 0x0004
136 #define DC_FLAG_PERMANENT 0x0008
137 #define DC_FLAG_DIRTY_RAO 0x0010
138 #define DC_FLAG_ACCUM_WMGR 0x0020
139 #define DC_FLAG_ACCUM_APP 0x0040
140 #define DC_FLAG_RESET 0x0080
141 #define DC_FLAG_SYNCHRONIZEACCESS 0x0100
142 #define DC_FLAG_EPSPRINTINGESCAPE 0x0200
143 #define DC_FLAG_TEMPINFODC 0x0400
144 #define DC_FLAG_FULLSCREEN 0x0800
145 #define DC_FLAG_IN_CLONEPDEV 0x1000
146 #define DC_FLAG_REDIRECTION 0x2000
147 #define DC_FLAG_SHAREACCESS 0x4000
148
149 /* DC_ATTR Dirty Flags */
150 #define DIRTY_FILL 0x00000001
151 #define DIRTY_LINE 0x00000002
152 #define DIRTY_TEXT 0x00000004
153 #define DIRTY_BACKGROUND 0x00000008
154 #define DIRTY_CHARSET 0x00000010
155 #define SLOW_WIDTHS 0x00000020
156 #define DC_CACHED_TM_VALID 0x00000040
157 #define DISPLAY_DC 0x00000080
158 #define DIRTY_PTLCURRENT 0x00000100
159 #define DIRTY_PTFXCURRENT 0x00000200
160 #define DIRTY_STYLESTATE 0x00000400
161 #define DC_PLAYMETAFILE 0x00000800
162 #define DC_BRUSH_DIRTY 0x00001000
163 #define DC_PEN_DIRTY 0x00002000
164 #define DC_DIBSECTION 0x00004000
165 #define DC_LAST_CLIPRGN_VALID 0x00008000
166 #define DC_PRIMARY_DISPLAY 0x00010000
167 #define DC_MODE_DIRTY 0x00200000
168 #define DC_FONTTEXT_DIRTY 0x00400000
169
170 /* DC_ATTR LCD Flags */
171 #define LDC_LDC 0x00000001 // (init) local DC other than a normal DC
172 #define LDC_EMFLDC 0x00000002 // Enhance Meta File local DC
173 #define LDC_INIT_DOCUMENT 0x00000040
174 #define LDC_INIT_PAGE 0x00000080
175 #define LDC_KILL_DOCUMENT 0x00010000
176
177
178 /* DC_ATTR Xform Flags */
179 #define METAFILE_TO_WORLD_IDENTITY 0x00000001
180 #define WORLD_TO_PAGE_IDENTITY 0x00000002
181 #define DEVICE_TO_PAGE_INVALID 0x00000008
182 #define DEVICE_TO_WORLD_INVALID 0x00000010
183 #define WORLD_TRANSFORM_SET 0x00000020
184 #define POSITIVE_Y_IS_UP 0x00000040
185 #define INVALIDATE_ATTRIBUTES 0x00000080
186 #define PTOD_EFM11_NEGATIVE 0x00000100
187 #define PTOD_EFM22_NEGATIVE 0x00000200
188 #define ISO_OR_ANISO_MAP_MODE 0x00000400
189 #define PAGE_TO_DEVICE_IDENTITY 0x00000800
190 #define PAGE_TO_DEVICE_SCALE_IDENTITY 0x00001000
191 #define PAGE_XLATE_CHANGED 0x00002000
192 #define PAGE_EXTENTS_CHANGED 0x00004000
193 #define WORLD_XFORM_CHANGED 0x00008000
194
195 /* TYPES *********************************************************************/
196
197 typedef struct _GDI_TABLE_ENTRY
198 {
199 PVOID KernelData; /* Points to the kernel mode structure */
200 SHORT ProcessId; /* process id that created the object, 0 for stock objects */
201 SHORT nCount; /* usage count of object handles */
202 LONG Type; /* the first 16 bit is the object type including the stock obj flag, the last 16 bits is just the object type */
203 PVOID UserData; /* Points to the user mode structure, usually NULL though */
204 } GDI_TABLE_ENTRY, *PGDI_TABLE_ENTRY;
205
206 typedef struct _RGNATTR
207 {
208 ULONG AttrFlags;
209 ULONG Flags;
210 RECTL Rect;
211 } RGNATTR,*PRGNATTR;
212
213 // Local DC structure (_DC_ATTR) PVOID pvLDC;
214 typedef struct _LDC
215 {
216 HDC hDC;
217 ULONG Flags;
218 INT iType;
219 PVOID pvEmfDC; /* Pointer to ENHMETAFILE structure */
220 ABORTPROC pAbortProc; /* AbortProc for Printing */
221 HANDLE hPrinter; /* Local or Remote Printer driver */
222 INT iInitPage; /* Start/Stop */
223 INT iInitDocument;
224 } LDC, *PLDC;
225
226 typedef struct _DC_ATTR
227 {
228 PVOID pvLDC;
229 ULONG ulDirty_;
230 HANDLE hbrush;
231 HANDLE hpen;
232 COLORREF crBackgroundClr;
233 ULONG ulBackgroundClr;
234 COLORREF crForegroundClr;
235 ULONG ulForegroundClr;
236 COLORREF crBrushClr;
237 ULONG ulBrushClr;
238 COLORREF crPenClr;
239 ULONG ulPenClr;
240 DWORD iCS_CP;
241 INT iGraphicsMode;
242 BYTE jROP2;
243 BYTE jBkMode;
244 BYTE jFillMode;
245 BYTE jStretchBltMode;
246 POINTL ptlCurrent;
247 POINTL ptfxCurrent;
248 LONG lBkMode;
249 LONG lFillMode;
250 LONG lStretchBltMode;
251 FLONG flFontMapper;
252 LONG lIcmMode;
253 HANDLE hcmXform;
254 HCOLORSPACE hColorSpace;
255 FLONG flIcmFlags;
256 INT IcmBrushColor;
257 INT IcmPenColor;
258 PVOID pvLIcm;
259 FLONG flTextAlign;
260 LONG lTextAlign;
261 LONG lTextExtra;
262 LONG lRelAbs;
263 LONG lBreakExtra;
264 LONG cBreak;
265 HANDLE hlfntNew;
266 MATRIX_S mxWorldToDevice;
267 MATRIX_S mxDevicetoWorld;
268 MATRIX_S mxWorldToPage;
269 EFLOAT_S efM11PtoD;
270 EFLOAT_S efM22PtoD;
271 EFLOAT_S efDxPtoD;
272 EFLOAT_S efDyPtoD;
273 INT iMapMode;
274 DWORD dwLayout;
275 LONG lWindowOrgx;
276 POINTL ptlWindowOrg;
277 SIZEL szlWindowExt;
278 POINTL ptlViewportOrg;
279 SIZEL szlViewportExt;
280 FLONG flXform;
281 SIZEL szlVirtualDevicePixel;
282 SIZEL szlVirtualDeviceMm;
283 SIZEL szlVirtualDeviceSize;
284 POINTL ptlBrushOrigin;
285 RGNATTR VisRectRegion;
286 } DC_ATTR, *PDC_ATTR;
287
288 typedef enum tagGdiPathState
289 {
290 PATH_Null,
291 PATH_Open,
292 PATH_Closed
293 } GdiPathState;
294
295 typedef struct tagGdiPath
296 {
297 GdiPathState state;
298 POINT *pPoints;
299 BYTE *pFlags;
300 int numEntriesUsed, numEntriesAllocated;
301 BOOL newStroke;
302 } GdiPath;
303
304 typedef struct _WIN_DC_INFO
305 {
306 int flags;
307 HRGN hClipRgn; /* Clip region (may be 0) */
308 HRGN hVisRgn; /* Visible region (must never be 0) */
309 HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */
310 HBITMAP hBitmap;
311 HBITMAP hFirstBitmap; /* Bitmap selected at creation of the DC */
312
313 /* #if 0 */
314 HANDLE hDevice;
315 HPALETTE hPalette;
316
317 GdiPath path;
318 /* #endif */
319
320 RECT totalExtent;
321 BYTE bitsPerPixel;
322
323 INT DCOrgX; /* DC origin */
324 INT DCOrgY;
325 INT ArcDirection;
326
327 XFORM xformWorld2Wnd; /* World-to-window transformation */
328 XFORM xformWorld2Vport; /* World-to-viewport transformation */
329 XFORM xformVport2World; /* Inverse of the above transformation */
330 BOOL vport2WorldValid; /* Is xformVport2World valid? */
331 } WIN_DC_INFO;
332
333 typedef BOOL (NTAPI *PGD_ENABLEDRIVER)(ULONG, ULONG, PDRVENABLEDATA);
334 typedef DHPDEV (NTAPI *PGD_ENABLEPDEV)(DEVMODEW *, LPWSTR, ULONG, HSURF *, ULONG, ULONG *, ULONG, DEVINFO *, LPWSTR, LPWSTR, HANDLE);
335 typedef VOID (NTAPI *PGD_COMPLETEPDEV)(DHPDEV, HDEV);
336 typedef VOID (NTAPI *PGD_DISABLEPDEV)(DHPDEV);
337 typedef HSURF (NTAPI *PGD_ENABLESURFACE)(DHPDEV);
338 typedef VOID (NTAPI *PGD_DISABLESURFACE)(DHPDEV);
339 typedef BOOL (NTAPI *PGD_ASSERTMODE)(DHPDEV, BOOL);
340 typedef BOOL (NTAPI *PGD_OFFSET)(SURFOBJ*, LONG, LONG, FLONG);
341 typedef BOOL (NTAPI *PGD_RESETPDEV)(DHPDEV, DHPDEV);
342 typedef VOID (NTAPI *PGD_DISABLEDRIVER)(VOID);
343 typedef HBITMAP (NTAPI *PGD_CREATEDEVICEBITMAP)(DHPDEV, SIZEL, ULONG);
344 typedef VOID (NTAPI *PGD_DELETEDEVICEBITMAP)(DHSURF);
345 typedef BOOL (NTAPI *PGD_ALPHABLEND)(SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, RECTL*, RECTL*, BLENDOBJ*);
346 typedef BOOL (NTAPI *PGD_REALIZEBRUSH)(BRUSHOBJ*, SURFOBJ*, SURFOBJ*, SURFOBJ*, XLATEOBJ*, ULONG);
347 typedef ULONG (NTAPI *PGD_DITHERCOLOR)(DHPDEV, ULONG, ULONG, PULONG);
348 typedef BOOL (NTAPI *PGD_STROKEPATH)(SURFOBJ*, PATHOBJ*, CLIPOBJ*, XFORMOBJ*, BRUSHOBJ*, POINTL*, PLINEATTRS, MIX);
349 typedef BOOL (NTAPI *PGD_FILLPATH)(SURFOBJ*, PATHOBJ*, CLIPOBJ*, BRUSHOBJ*, POINTL*, MIX, ULONG);
350 typedef BOOL (NTAPI *PGD_STROKEANDFILLPATH)(SURFOBJ*, PATHOBJ*, CLIPOBJ*, XFORMOBJ*, BRUSHOBJ*, PLINEATTRS, BRUSHOBJ*, POINTL*, MIX, ULONG);
351 typedef BOOL (NTAPI *PGD_PAINT)(SURFOBJ*, CLIPOBJ*, BRUSHOBJ*, POINTL*, MIX);
352 typedef BOOL (NTAPI *PGD_BITBLT)(SURFOBJ*, SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, RECTL*, POINTL*, POINTL*, BRUSHOBJ*, POINTL*, ROP4);
353 typedef BOOL (NTAPI *PGD_TRANSPARENTBLT)(SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, RECTL*, RECTL*, ULONG, ULONG);
354 typedef BOOL (NTAPI *PGD_COPYBITS)(SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, RECTL*, POINTL*);
355 typedef BOOL (NTAPI *PGD_STRETCHBLT)(SURFOBJ*, SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, COLORADJUSTMENT*, POINTL*, RECTL*, RECTL*, POINTL*, ULONG);
356 typedef BOOL (NTAPI *PGD_STRETCHBLTROP)(SURFOBJ*, SURFOBJ*, SURFOBJ*, CLIPOBJ*, XLATEOBJ*, COLORADJUSTMENT*, POINTL*, RECTL*, RECTL*, POINTL*, ULONG, BRUSHOBJ*, DWORD);
357 typedef BOOL (NTAPI *PGD_SETPALETTE)(DHPDEV, PALOBJ*, ULONG, ULONG, ULONG);
358 typedef BOOL (NTAPI *PGD_TEXTOUT)(SURFOBJ*, STROBJ*, FONTOBJ*, CLIPOBJ*, RECTL*, RECTL*, BRUSHOBJ*, BRUSHOBJ*, POINTL*, MIX);
359 typedef ULONG (NTAPI *PGD_ESCAPE)(SURFOBJ*, ULONG, ULONG, PVOID *, ULONG, PVOID *);
360 typedef ULONG (NTAPI *PGD_DRAWESCAPE)(SURFOBJ*, ULONG, CLIPOBJ*, RECTL*, ULONG, PVOID *);
361 typedef PIFIMETRICS (NTAPI *PGD_QUERYFONT)(DHPDEV, ULONG, ULONG, PULONG);
362 typedef PVOID (NTAPI *PGD_QUERYFONTTREE)(DHPDEV, ULONG, ULONG, ULONG, PULONG);
363 typedef LONG (NTAPI *PGD_QUERYFONTDATA)(DHPDEV, FONTOBJ*, ULONG, HGLYPH, GLYPHDATA*, PVOID, ULONG);
364 typedef ULONG (NTAPI *PGD_SETPOINTERSHAPE)(SURFOBJ*, SURFOBJ*, SURFOBJ*, XLATEOBJ*, LONG, LONG, LONG, LONG, RECTL*, ULONG);
365 typedef VOID (NTAPI *PGD_MOVEPOINTER)(SURFOBJ*, LONG, LONG, RECTL*);
366 typedef BOOL (NTAPI *PGD_LINETO)(SURFOBJ*, CLIPOBJ*, BRUSHOBJ*, LONG, LONG, LONG, LONG, RECTL*, MIX);
367 typedef BOOL (NTAPI *PGD_SENDPAGE)(SURFOBJ*);
368 typedef BOOL (NTAPI *PGD_STARTPAGE)(SURFOBJ*);
369 typedef BOOL (NTAPI *PGD_ENDDOC)(SURFOBJ*, ULONG);
370 typedef BOOL (NTAPI *PGD_STARTDOC)(SURFOBJ*, PWSTR, DWORD);
371 typedef ULONG (NTAPI *PGD_GETGLYPHMODE)(DHPDEV, FONTOBJ*);
372 typedef VOID (NTAPI *PGD_SYNCHRONIZE)(DHPDEV, RECTL*);
373 typedef ULONG (NTAPI *PGD_SAVESCREENBITS)(SURFOBJ*, ULONG, ULONG, RECTL*);
374 typedef ULONG (NTAPI *PGD_GETMODES)(HANDLE, ULONG, PDEVMODEW);
375 typedef VOID (NTAPI *PGD_FREE)(PVOID, ULONG);
376 typedef VOID (NTAPI *PGD_DESTROYFONT)(FONTOBJ*);
377 typedef LONG (NTAPI *PGD_QUERYFONTCAPS)(ULONG, PULONG);
378 typedef ULONG (NTAPI *PGD_LOADFONTFILE)(ULONG, PVOID, ULONG, ULONG);
379 typedef BOOL (NTAPI *PGD_UNLOADFONTFILE)(ULONG);
380 typedef ULONG (NTAPI *PGD_FONTMANAGEMENT)(SURFOBJ*, FONTOBJ*, ULONG, ULONG, PVOID, ULONG, PVOID);
381 typedef LONG (NTAPI *PGD_QUERYTRUETYPETABLE)(ULONG, ULONG, ULONG, PTRDIFF, ULONG, PBYTE);
382 typedef LONG (NTAPI *PGD_QUERYTRUETYPEOUTLINE)(DHPDEV, FONTOBJ*, HGLYPH, BOOL, GLYPHDATA*, ULONG, TTPOLYGONHEADER*);
383 typedef PVOID (NTAPI *PGD_GETTRUETYPEFILE)(ULONG, PULONG);
384 typedef LONG (NTAPI *PGD_QUERYFONTFILE)(ULONG, ULONG, ULONG, PULONG);
385 typedef BOOL (NTAPI *PGD_QUERYADVANCEWIDTHS)(DHPDEV, FONTOBJ*, ULONG, HGLYPH *, PVOID *, ULONG);
386 typedef BOOL (NTAPI *PGD_SETPIXELFORMAT)(SURFOBJ*, LONG, ULONG);
387 typedef LONG (NTAPI *PGD_DESCRIBEPIXELFORMAT)(DHPDEV, LONG, ULONG, PPIXELFORMATDESCRIPTOR);
388 typedef BOOL (NTAPI *PGD_SWAPBUFFERS)(SURFOBJ*, PWNDOBJ);
389 typedef BOOL (NTAPI *PGD_STARTBANDING)(SURFOBJ*, POINTL*);
390 typedef BOOL (NTAPI *PGD_NEXTBAND)(SURFOBJ*, POINTL*);
391 typedef BOOL (NTAPI *PGD_GETDIRECTDRAWINFO)(DHPDEV, PDD_HALINFO, PDWORD, VIDEOMEMORY*, PDWORD, PDWORD);
392 typedef BOOL (NTAPI *PGD_ENABLEDIRECTDRAW)(DHPDEV, PDD_CALLBACKS, PDD_SURFACECALLBACKS, PDD_PALETTECALLBACKS);
393 typedef VOID (NTAPI *PGD_DISABLEDIRECTDRAW)(DHPDEV);
394 typedef LONG (NTAPI *PGD_QUERYSPOOLTYPE)(DHPDEV, LPWSTR);
395 typedef BOOL (NTAPI *PGD_GRADIENTFILL)(SURFOBJ*, CLIPOBJ*, XLATEOBJ*, TRIVERTEX*, ULONG, PVOID, ULONG, RECTL*, POINTL*, ULONG);
396 typedef VOID (NTAPI *PGD_SYNCHRONIZESURFACE)(SURFOBJ*, RECTL *, FLONG);
397
398 typedef struct _DRIVER_FUNCTIONS
399 {
400 PGD_ENABLEDRIVER EnableDriver;
401 PGD_ENABLEPDEV EnablePDEV;
402 PGD_COMPLETEPDEV CompletePDEV;
403 PGD_DISABLEPDEV DisablePDEV;
404 PGD_ENABLESURFACE EnableSurface;
405 PGD_DISABLESURFACE DisableSurface;
406 PGD_ASSERTMODE AssertMode;
407 PGD_OFFSET Offset;
408 PGD_RESETPDEV ResetPDEV;
409 PGD_DISABLEDRIVER DisableDriver;
410 PGD_CREATEDEVICEBITMAP CreateDeviceBitmap;
411 PGD_DELETEDEVICEBITMAP DeleteDeviceBitmap;
412 PGD_REALIZEBRUSH RealizeBrush;
413 PGD_DITHERCOLOR DitherColor;
414 PGD_STROKEPATH StrokePath;
415 PGD_FILLPATH FillPath;
416 PGD_STROKEANDFILLPATH StrokeAndFillPath;
417 PGD_PAINT Paint;
418 PGD_BITBLT BitBlt;
419 PGD_TRANSPARENTBLT TransparentBlt;
420 PGD_COPYBITS CopyBits;
421 PGD_STRETCHBLT StretchBlt;
422 PGD_STRETCHBLTROP StretchBltROP;
423 PGD_SETPALETTE SetPalette;
424 PGD_TEXTOUT TextOut;
425 PGD_ESCAPE Escape;
426 PGD_DRAWESCAPE DrawEscape;
427 PGD_QUERYFONT QueryFont;
428 PGD_QUERYFONTTREE QueryFontTree;
429 PGD_QUERYFONTDATA QueryFontData;
430 PGD_SETPOINTERSHAPE SetPointerShape;
431 PGD_MOVEPOINTER MovePointer;
432 PGD_LINETO LineTo;
433 PGD_SENDPAGE SendPage;
434 PGD_STARTPAGE StartPage;
435 PGD_ENDDOC EndDoc;
436 PGD_STARTDOC StartDoc;
437 PGD_GETGLYPHMODE GetGlyphMode;
438 PGD_SYNCHRONIZE Synchronize;
439 PGD_SAVESCREENBITS SaveScreenBits;
440 PGD_GETMODES GetModes;
441 PGD_FREE Free;
442 PGD_DESTROYFONT DestroyFont;
443 PGD_QUERYFONTCAPS QueryFontCaps;
444 PGD_LOADFONTFILE LoadFontFile;
445 PGD_UNLOADFONTFILE UnloadFontFile;
446 PGD_FONTMANAGEMENT FontManagement;
447 PGD_QUERYTRUETYPETABLE QueryTrueTypeTable;
448 PGD_QUERYTRUETYPEOUTLINE QueryTrueTypeOutline;
449 PGD_GETTRUETYPEFILE GetTrueTypeFile;
450 PGD_QUERYFONTFILE QueryFontFile;
451 PGD_QUERYADVANCEWIDTHS QueryAdvanceWidths;
452 PGD_SETPIXELFORMAT SetPixelFormat;
453 PGD_DESCRIBEPIXELFORMAT DescribePixelFormat;
454 PGD_SWAPBUFFERS SwapBuffers;
455 PGD_STARTBANDING StartBanding;
456 PGD_NEXTBAND NextBand;
457 PGD_GETDIRECTDRAWINFO GetDirectDrawInfo;
458 PGD_ENABLEDIRECTDRAW EnableDirectDraw;
459 PGD_DISABLEDIRECTDRAW DisableDirectDraw;
460 PGD_QUERYSPOOLTYPE QuerySpoolType;
461 PGD_GRADIENTFILL GradientFill;
462 PGD_SYNCHRONIZESURFACE SynchronizeSurface;
463 PGD_ALPHABLEND AlphaBlend;
464 } DRIVER_FUNCTIONS, *PDRIVER_FUNCTIONS;
465
466 typedef struct _DC
467 {
468 HGDIOBJ hHmgr;
469 PVOID pvEntry;
470 ULONG lucExcLock;
471 ULONG Tid;
472
473 DHPDEV PDev;
474 INT DC_Type;
475 INT DC_Flags;
476
477 struct _EDD_DIRECTDRAW_GLOBAL * pEDDgpl;
478
479 PDC_ATTR pDc_Attr;
480 DC_ATTR Dc_Attr;
481
482 HDC hSelf;
483 HDC hNext;
484 HSURF FillPatternSurfaces[HS_DDI_MAX];
485 PGDIINFO GDIInfo;
486 PDEVINFO DevInfo;
487 HDEV GDIDevice;
488
489 DRIVER_FUNCTIONS DriverFunctions;
490 UNICODE_STRING DriverName;
491 HANDLE DeviceDriver;
492
493 CLIPOBJ *CombinedClip;
494
495 XLATEOBJ *XlateBrush;
496 XLATEOBJ *XlatePen;
497
498 INT saveLevel;
499 BOOL IsIC;
500
501 HPALETTE PalIndexed;
502
503 WIN_DC_INFO w;
504
505 HANDLE hFile;
506 LPENHMETAHEADER emh;
507 } DC, *PDC;
508 #endif