xref: /reactos/win32ss/include/ntgdityp.h (revision 3c774903)
1 /*
2  * COPYRIGHT:       See COPYING in the top level directory
3  * PROJECT:         ReactOS Win32 Graphical Subsystem (WIN32K)
4  * FILE:            win32ss/include/ntgdityp.h
5  * PURPOSE:         Win32 Shared GDI Types for NtGdi*
6  * PROGRAMMER:      Alex Ionescu (alex@relsoft.net)
7  */
8 
9 /* INCLUDES ******************************************************************/
10 
11 #ifndef _NTGDITYP_
12 #define _NTGDITYP_
13 
14 #include "ntwin32.h"
15 
16 /* ENUMERATIONS **************************************************************/
17 
18 typedef enum _ARCTYPE
19 {
20     GdiTypeArc,
21     GdiTypeArcTo,
22     GdiTypeChord,
23     GdiTypePie,
24 } ARCTYPE, *PARCTYPE;
25 
26 typedef enum _PALFUNCTYPE
27 {
28     GdiPalAnimate,
29     GdiPalSetEntries,
30     GdiPalGetEntries,
31     GdiPalGetSystemEntries,
32     GdiPalSetColorTable,
33     GdiPalGetColorTable,
34 } PALFUNCTYPE, *PPALFUNCTYPE;
35 
36 typedef enum _POLYFUNCTYPE
37 {
38     GdiPolyPolygon = 1,
39     GdiPolyPolyLine,
40     GdiPolyBezier,
41     GdiPolyLineTo,
42     GdiPolyBezierTo,
43     GdiPolyPolyRgn,
44 } POLYFUNCTYPE, *PPOLYFUNCTYPE;
45 
46 typedef enum _GETDCDWORD
47 {
48     GdiGetJournal,
49     GdiGetRelAbs,
50     GdiGetBreakExtra,
51     GdiGerCharBreak,
52     GdiGetArcDirection,
53     GdiGetEMFRestorDc,
54     GdiGetFontLanguageInfo,
55     GdiGetIsMemDc,
56     GdiGetMapMode,
57     GdiGetTextCharExtra,
58 } GETDCDWORD, *PGETDCDWORD;
59 
60 typedef enum _GETSETDCDWORD
61 {
62     GdiGetSetCopyCount = 2,
63     GdiGetSetTextAlign,
64     GdiGetSetRelAbs,
65     GdiGetSetTextCharExtra,
66     GdiGetSetSelectFont,
67     GdiGetSetMapperFlagsInternal,
68     GdiGetSetMapMode,
69     GdiGetSetArcDirection,
70 } GETSETDCDWORD, *PGETSETDCDWORD;
71 
72 typedef enum _GETDCPOINT
73 {
74     GdiGetViewPortExt = 1,
75     GdiGetWindowExt,
76     GdiGetViewPortOrg,
77     GdiGetWindowOrg,
78     GdiGetAspectRatioFilter,
79     GdiGetDCOrg = 6,
80 } GETDCPOINT, *PGETDCPOINT;
81 
82 
83 typedef enum _GDIBATCHCMD
84 {
85     GdiBCPatBlt,
86     GdiBCPolyPatBlt,
87     GdiBCTextOut,
88     GdiBCExtTextOut,
89     GdiBCSetBrushOrg,
90     GdiBCExtSelClipRgn,
91     GdiBCSelObj,
92     GdiBCDelObj,
93     GdiBCDelRgn,
94 } GDIBATCHCMD, *PGDIBATCHCMD;
95 
96 typedef enum _TRANSFORMTYPE
97 {
98     GdiDpToLp,
99     GdiLpToDp,
100 } TRANSFORMTYPE, *PTRANSFORMTYPE;
101 
102 /* MATRIX flAccel flags */
103 enum
104 {
105     XFORM_SCALE = 1,
106     XFORM_UNITY = 2,
107     XFORM_Y_NEG = 4,
108     XFORM_FORMAT_LTOFX = 8,
109     XFORM_FORMAT_FXTOL = 0x10,
110     XFORM_FORMAT_LTOL = 0x20,
111     XFORM_NO_TRANSLATION = 0x40,
112 
113     /* ReactOS specific */
114     XFORM_INTEGER = 0x1000,
115 };
116 
117 typedef enum GDIObjType
118 {
119     GDIObjType_DEF_TYPE = 0x00,
120     GDIObjType_DC_TYPE = 0x01,
121     GDIObjType_UNUSED1_TYPE = 0x02,
122     GDIObjType_UNUSED2_TYPE = 0x03,
123     GDIObjType_RGN_TYPE = 0x04,
124     GDIObjType_SURF_TYPE = 0x05,
125     GDIObjType_CLIENTOBJ_TYPE = 0x06,
126     GDIObjType_PATH_TYPE = 0x07,
127     GDIObjType_PAL_TYPE = 0x08,
128     GDIObjType_ICMLCS_TYPE = 0x09,
129     GDIObjType_LFONT_TYPE = 0x0a,
130     GDIObjType_RFONT_TYPE = 0x0b,
131     GDIObjType_PFE_TYPE = 0x0c,
132     GDIObjType_PFT_TYPE = 0x0d,
133     GDIObjType_ICMCXF_TYPE = 0x0e,
134     GDIObjType_SPRITE_TYPE = 0x0f,
135     GDIObjType_BRUSH_TYPE = 0x10,
136     GDIObjType_UMPD_TYPE = 0x11,
137     GDIObjType_UNUSED4_TYPE = 0x12,
138     GDIObjType_SPACE_TYPE = 0x13,
139     GDIObjType_UNUSED5_TYPE = 0x14,
140     GDIObjType_META_TYPE = 0x15,
141     GDIObjType_EFSTATE_TYPE = 0x16,
142     GDIObjType_BMFD_TYPE = 0x17,
143     GDIObjType_VTFD_TYPE = 0x18,
144     GDIObjType_TTFD_TYPE = 0x19,
145     GDIObjType_RC_TYPE = 0x1a,
146     GDIObjType_TEMP_TYPE = 0x1b,
147     GDIObjType_DRVOBJ_TYPE = 0x1c,
148     GDIObjType_DCIOBJ_TYPE = 0x1d,
149     GDIObjType_SPOOL_TYPE = 0x1e,
150     GDIObjType_MAX_TYPE = 0x1e,
151     GDIObjTypeTotal = 0x1f,
152 } GDIOBJTYPE, *PGDIOBJTYPE;
153 
154 typedef enum GDILoObjType
155 {
156     GDILoObjType_LO_BRUSH_TYPE = 0x100000,
157     GDILoObjType_LO_DC_TYPE = 0x10000,
158     GDILoObjType_LO_BITMAP_TYPE = 0x50000,
159     GDILoObjType_LO_PALETTE_TYPE = 0x80000,
160     GDILoObjType_LO_FONT_TYPE = 0xa0000,
161     GDILoObjType_LO_REGION_TYPE = 0x40000,
162     GDILoObjType_LO_ICMLCS_TYPE = 0x90000,
163     GDILoObjType_LO_CLIENTOBJ_TYPE = 0x60000,
164     GDILoObjType_LO_ALTDC_TYPE = 0x210000,
165     GDILoObjType_LO_PEN_TYPE = 0x300000,
166     GDILoObjType_LO_EXTPEN_TYPE = 0x500000,
167     GDILoObjType_LO_DIBSECTION_TYPE = 0x250000,
168     GDILoObjType_LO_METAFILE16_TYPE = 0x260000,
169     GDILoObjType_LO_METAFILE_TYPE = 0x460000,
170     GDILoObjType_LO_METADC16_TYPE = 0x660000
171 } GDILOOBJTYPE, *PGDILOOBJTYPE;
172 
173 /**
174        World Transform modification modes
175        See [MS-EMF] Section 2.1.24
176 */
177 #define MWT_SET 0x04
178 
179 #define GdiWorldSpaceToPageSpace    0x203
180 #define GdiWorldSpaceToDeviceSpace  0x204
181 #define GdiPageSpaceToDeviceSpace   0x304
182 #define GdiDeviceSpaceToWorldSpace  0x402
183 
184 /* FIXME: Unknown */
185 typedef DWORD FULLSCREENCONTROL;
186 typedef DWORD LFTYPE;
187 
188 /* Public LAST_STOCK = 19, plus 2 more internal entries */
189 #define NB_STOCK_OBJECTS 22
190 
191 /* extra stock object: default 1x1 bitmap for memory DCs */
192 #define DEFAULT_BITMAP (21)
193 
194 
195 /* DEFINES *******************************************************************/
196 
197 #define GDIBATCHBUFSIZE 0x136*4
198 #define GDI_BATCH_LIMIT 20
199 
200 // NtGdiGetCharWidthW Flags
201 #define GCW_WIN32   0x0001
202 #define GCW_NOFLOAT 0x0002
203 #define GCW_INDICES 0x0008
204 
205 // NtGdiGetCharABCWidthW Flags
206 #define GCABCW_NOFLOAT 0x0001
207 #define GCABCW_INDICES 0x0002
208 
209 // NtGdiGetTextExtent* flags (reactos own)
210 #define GTEF_INDICES 0x1
211 
212 /* CAPS1 support */
213 #define CAPS1             94
214 //#define C1_TRANSPARENT    0x0001
215 #define TC_TT_ABLE        0x0002
216 #define C1_TT_CR_ANY      0x0004
217 #define C1_EMF_COMPLIANT  0x0008
218 #define C1_DIBENGINE      0x0010
219 #define C1_GAMMA_RAMP     0x0040
220 #define C1_REINIT_ABLE    0x0080
221 #define C1_GLYPH_INDEX    0x0100
222 #define C1_BIT_PACKED     0x0200
223 #define C1_BYTE_PACKED    0x0400
224 #define C1_COLORCURSOR    0x0800
225 #define C1_CMYK_ABLE      0x1000
226 #define C1_SLOW_CARD      0x2000
227 #define C1_MIRRORING      0X4000
228 
229 // NtGdiGetRandomRgn iCodes
230 #define CLIPRGN 1 // GetClipRgn
231 #define METARGN 2 // GetMetaRgn
232 #define APIRGN  3
233 
234 /* New flag for fdwInit in CreateDIBitmap. See support.microsoft.com/kb/kbview/108497*/
235 #define CBM_CREATDIB 2
236 
237 /* New color use parameter. See support.microsoft.com/kb/kbview/108497 */
238 #define DIB_PAL_INDICES 2
239 
240 /* Get/SetBounds/Rect support. */
241 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
242 
243 /* TYPES *********************************************************************/
244 
245 typedef PVOID KERNEL_PVOID;
246 typedef PVOID PUMDHPDEV;
247 typedef D3DNTHAL_CONTEXTCREATEDATA D3DNTHAL_CONTEXTCREATEI;
248 #if !defined(_WINDDI_)
249 typedef LONG FIX;
250 #endif
251 
252 typedef struct _CHWIDTHINFO // Based on FD_DEVICEMETRICS
253 {
254    LONG    lMinA;
255    LONG    lMinC;
256    LONG    lMinD;
257 } CHWIDTHINFO, *PCHWIDTHINFO;
258 
259 typedef struct _UNIVERSAL_FONT_ID
260 {
261     ULONG CheckSum;
262     ULONG Index;
263 } UNIVERSAL_FONT_ID, *PUNIVERSAL_FONT_ID;
264 
265 #define RI_TECH_BITMAP   1
266 #define RI_TECH_FIXED    2
267 #define RI_TECH_SCALABLE 3
268 
269 typedef struct _REALIZATION_INFO
270 {
271     DWORD  iTechnology;
272     DWORD  iUniq;
273     DWORD  dwUnknown;
274 } REALIZATION_INFO, *PREALIZATION_INFO;
275 
276 typedef struct _WIDTHDATA
277 {
278     USHORT      sOverhang;
279     USHORT      sHeight;
280     USHORT      sCharInc;
281     USHORT      sBreak;
282     BYTE        jFirst;
283     BYTE        jLast;
284     BYTE        jBreak;
285     BYTE        jDefault;
286     USHORT      sDBCSInc;
287     USHORT      sDefaultInc;
288 } WIDTHDATA, *PWIDTHDATA;
289 
290 typedef struct _DEVCAPS // Very similar to GDIINFO
291 {
292     ULONG ulVersion;
293     ULONG ulTechnology;
294     ULONG ulHorzSizeM;
295     ULONG ulVertSizeM;
296     ULONG ulHorzSize;
297     ULONG ulVertSize;
298     ULONG ulHorzRes;
299     ULONG ulVertRes;
300     ULONG ulBitsPixel;
301     ULONG ulPlanes;
302     ULONG ulNumPens;
303     ULONG ulNumFonts;
304     ULONG ulNumColors;
305     ULONG ulRasterCaps;
306     ULONG ulAspectX;
307     ULONG ulAspectY;
308     ULONG ulAspectXY;
309     ULONG ulLogPixelsX;
310     ULONG ulLogPixelsY;
311     ULONG ulSizePalette;
312     ULONG ulColorRes;
313     ULONG ulPhysicalWidth;
314     ULONG ulPhysicalHeight;
315     ULONG ulPhysicalOffsetX;
316     ULONG ulPhysicalOffsetY;
317     ULONG ulTextCaps;
318     ULONG ulVRefresh;
319     ULONG ulDesktopHorzRes;
320     ULONG ulDesktopVertRes;
321     ULONG ulBltAlignment;
322     ULONG ulPanningHorzRes;
323     ULONG ulPanningVertRes;
324     ULONG xPanningAlignment;
325     ULONG yPanningAlignment;
326     ULONG ulShadeBlend;
327     ULONG ulColorMgmtCaps;
328 } DEVCAPS, *PDEVCAPS;
329 
330 /* Gdi Handle Cache Types and Structures */
331 #define GDI_CACHED_HANDLE_TYPES 4
332 #define CACHE_BRUSH_ENTRIES  10
333 #define CACHE_PEN_ENTRIES     8
334 #define CACHE_REGION_ENTRIES  8
335 #define CACHE_LFONT_ENTRIES   1
336 
337 typedef enum _HANDLECACHETYPE
338 {
339     hctBrushHandle,
340     hctPenHandle,
341     hctRegionHandle,
342     hctLFontHandle
343 } HANDLECACHETYPE,*PHANDLECACHETYPE;
344 
345 typedef struct _GDIHANDLECACHE
346 {
347     ULONG           ulLock;
348     ULONG           ulNumHandles[GDI_CACHED_HANDLE_TYPES];
349     HANDLE          Handle[CACHE_BRUSH_ENTRIES+CACHE_PEN_ENTRIES+CACHE_REGION_ENTRIES+CACHE_LFONT_ENTRIES];
350 } GDIHANDLECACHE, *PGDIHANDLECACHE;
351 
352 /* Font Structures */
353 typedef struct _TMDIFF
354 {
355     ULONG cjotma;
356     CHAR chFirst;
357     CHAR chLast;
358     CHAR ChDefault;
359     CHAR ChBreak;
360 } TMDIFF, *PTMDIFF;
361 
362 typedef struct _TMW_INTERNAL
363 {
364     TEXTMETRICW TextMetric;
365     TMDIFF Diff;
366 } TMW_INTERNAL, *PTMW_INTERNAL;
367 
368 typedef struct _NTMW_INTERNAL
369 {
370     TMDIFF tmd;
371     NEWTEXTMETRICEXW ntmw;
372 } NTMW_INTERNAL, *PNTMW_INTERNAL;
373 
374 typedef struct _ENUMFONTDATAW
375 {
376     ULONG cbSize;
377     ULONG ulNtmwiOffset;
378     DWORD dwFontType;
379     ENUMLOGFONTEXDVW elfexdv; /* variable size! */
380     /* NTMW_INTERNAL ntmwi; use ulNtwmOffset */
381 } ENUMFONTDATAW, *PENUMFONTDATAW;
382 
383 /* Number Representation */
384 typedef struct _EFLOAT_S
385 {
386     LONG lMant;
387     LONG lExp;
388 } EFLOAT_S;
389 
390 /* XFORM Structures */
391 typedef struct _MATRIX_S
392 {
393     EFLOAT_S efM11;
394     EFLOAT_S efM12;
395     EFLOAT_S efM21;
396     EFLOAT_S efM22;
397     EFLOAT_S efDx;
398     EFLOAT_S efDy;
399     FIX fxDx;
400     FIX fxDy;
401     FLONG flAccel;
402 } MATRIX_S;
403 
404 typedef struct _MATRIX
405 {
406     FLOATOBJ efM11;
407     FLOATOBJ efM12;
408     FLOATOBJ efM21;
409     FLOATOBJ efM22;
410     FLOATOBJ efDx;
411     FLOATOBJ efDy;
412     FIX fxDx;
413     FIX fxDy;
414     FLONG flAccel;
415 } MATRIX, *PMATRIX;
416 
417 /* Gdi XForm storage union */
418 typedef union
419 {
420   FLOAT f;
421   ULONG l;
422 } gxf_long;
423 
424 #define CFONT_REALIZATION 0x0080
425 
426 typedef struct _CFONT
427 {
428     struct _CFONT   *pcfNext;
429     HFONT           hf;
430     ULONG           cRef;               // Count of all pointers to this CFONT.
431     FLONG           fl;
432     LONG            lHeight;            // Precomputed logical height.
433     HDC             hdc;                // HDC of realization.  0 for display.
434     EFLOAT_S        efM11;              // efM11 of WtoD of DC of realization
435     EFLOAT_S        efM22;              // efM22 of WtoD of DC of realization
436     EFLOAT_S        efDtoWBaseline;     // Precomputed back transform.  (FXtoL)
437     EFLOAT_S        efDtoWAscent;       // Precomputed back transform.  (FXtoL)
438     WIDTHDATA       wd;
439     FLONG           flInfo;
440     USHORT          sWidth[256];        // Widths in pels.
441     ULONG           ulAveWidth;         // bogus average used by USER
442     TMW_INTERNAL    tmw;                // cached metrics
443     DWORD           iTechnology;
444     DWORD           iUniq;
445     DWORD           dwUnknown;
446     DWORD           dwCFCount;
447 } CFONT, *PCFONT;
448 
449 /* GDI Batch structures. */
450 typedef struct _GDIBATCHHDR
451 {
452   SHORT Size;
453   SHORT Cmd;
454 } GDIBATCHHDR, *PGDIBATCHHDR;
455 
456 typedef struct _GDIBSPATBLT
457 {
458   GDIBATCHHDR gbHdr;
459   int nXLeft;
460   int nYLeft;
461   int nWidth;
462   int nHeight;
463   HANDLE hbrush;
464   DWORD dwRop;
465   COLORREF crForegroundClr;
466   COLORREF crBackgroundClr;
467   COLORREF crBrushClr;
468   INT IcmBrushColor;
469   POINTL ptlViewportOrg;
470   ULONG ulForegroundClr;
471   ULONG ulBackgroundClr;
472   ULONG ulBrushClr;
473 } GDIBSPATBLT, *PGDIBSPATBLT;
474 
475 /* FIXME: this should go to some "public" GDI32 header */
476 typedef struct _PATRECT
477 {
478   RECT r;
479   HBRUSH hBrush;
480 } PATRECT, * PPATRECT;
481 
482 typedef struct _GDIBSPPATBLT
483 {
484   GDIBATCHHDR gbHdr;
485   DWORD rop4;
486   DWORD Mode;
487   DWORD Count;
488   COLORREF crForegroundClr;
489   COLORREF crBackgroundClr;
490   COLORREF crBrushClr;
491   ULONG ulForegroundClr;
492   ULONG ulBackgroundClr;
493   ULONG ulBrushClr;
494   POINTL ptlViewportOrg;
495   PATRECT pRect[1]; // POLYPATBLT
496 } GDIBSPPATBLT, *PGDIBSPPATBLT;
497 
498 typedef struct _GDIBSTEXTOUT
499 {
500   GDIBATCHHDR gbHdr;
501   COLORREF crForegroundClr;
502   COLORREF crBackgroundClr;
503   LONG lmBkMode;
504   ULONG ulForegroundClr;
505   ULONG ulBackgroundClr;
506   int x;
507   int y;
508   UINT Options;
509   RECT Rect;
510   DWORD iCS_CP;
511   UINT cbCount;
512   UINT Size;
513   HANDLE hlfntNew;
514   FLONG flTextAlign;
515   POINTL ptlViewportOrg;
516   WCHAR String[2];
517 } GDIBSTEXTOUT, *PGDIBSTEXTOUT;
518 
519 typedef struct _GDIBSEXTTEXTOUT
520 {
521   GDIBATCHHDR gbHdr;
522   UINT Count;
523   UINT Options;
524   RECT Rect;
525   POINTL ptlViewportOrg;
526   ULONG ulBackgroundClr;
527 } GDIBSEXTTEXTOUT, *PGDIBSEXTTEXTOUT;
528 
529 typedef struct _GDIBSSETBRHORG
530 {
531   GDIBATCHHDR gbHdr;
532   POINTL ptlBrushOrigin;
533 } GDIBSSETBRHORG, *PGDIBSSETBRHORG;
534 
535 typedef struct _GDIBSEXTSELCLPRGN
536 {
537   GDIBATCHHDR gbHdr;
538   int fnMode;
539   RECTL rcl;
540 } GDIBSEXTSELCLPRGN, *PGDIBSEXTSELCLPRGN;
541 
542 /* Use with GdiBCSelObj, GdiBCDelObj and GdiBCDelRgn. */
543 typedef struct _GDIBSOBJECT
544 {
545   GDIBATCHHDR gbHdr;
546   HGDIOBJ hgdiobj;
547 } GDIBSOBJECT, *PGDIBSOBJECT;
548 
549 /* Declaration missing in ddk/winddi.h */
550 typedef VOID (APIENTRY *PFN_DrvMovePanning)(LONG, LONG, FLONG);
551 
552 /* Most of these are defined in ddk/winddi.h */
553 typedef struct _DRIVER_FUNCTIONS
554 {
555     PFN_DrvEnablePDEV              EnablePDEV;
556     PFN_DrvCompletePDEV            CompletePDEV;
557     PFN_DrvDisablePDEV             DisablePDEV;
558     PFN_DrvEnableSurface           EnableSurface;
559     PFN_DrvDisableSurface          DisableSurface;
560     PFN_DrvAssertMode              AssertMode;
561     PFN_DrvOffset                  Offset;
562     PFN_DrvResetDevice             ResetPDEV;
563     PFN_DrvDisableDriver           DisableDriver;
564     PVOID                          Unknown1;
565     PFN_DrvCreateDeviceBitmap      CreateDeviceBitmap;
566     PFN_DrvDeleteDeviceBitmap      DeleteDeviceBitmap;
567     PFN_DrvRealizeBrush            RealizeBrush;
568     PFN_DrvDitherColor             DitherColor;
569     PFN_DrvStrokePath              StrokePath;
570     PFN_DrvFillPath                FillPath;
571     PFN_DrvStrokeAndFillPath       StrokeAndFillPath;
572     PFN_DrvPaint                   Paint;
573     PFN_DrvBitBlt                  BitBlt;
574     PFN_DrvCopyBits                CopyBits;
575     PFN_DrvStretchBlt              StretchBlt;
576     PVOID                          Unknown2;
577     PFN_DrvSetPalette              SetPalette;
578     PFN_DrvTextOut                 TextOut;
579     PFN_DrvEscape                  Escape;
580     PFN_DrvDrawEscape              DrawEscape;
581     PFN_DrvQueryFont               QueryFont;
582     PFN_DrvQueryFontTree           QueryFontTree;
583     PFN_DrvQueryFontData           QueryFontData;
584     PFN_DrvSetPointerShape         SetPointerShape;
585     PFN_DrvMovePointer             MovePointer;
586     PFN_DrvLineTo                  LineTo;
587     PFN_DrvSendPage                SendPage;
588     PFN_DrvStartPage               StartPage;
589     PFN_DrvEndDoc                  EndDoc;
590     PFN_DrvStartDoc                StartDoc;
591     PVOID                          Unknown3;
592     PFN_DrvGetGlyphMode            GetGlyphMode;
593     PFN_DrvSynchronize             Synchronize;
594     PVOID                          Unknown4;
595     PFN_DrvSaveScreenBits          SaveScreenBits;
596     PFN_DrvGetModes                GetModes;
597     PFN_DrvFree                    Free;
598     PFN_DrvDestroyFont             DestroyFont;
599     PFN_DrvQueryFontCaps           QueryFontCaps;
600     PFN_DrvLoadFontFile            LoadFontFile;
601     PFN_DrvUnloadFontFile          UnloadFontFile;
602     PFN_DrvFontManagement          FontManagement;
603     PFN_DrvQueryTrueTypeTable      QueryTrueTypeTable;
604     PFN_DrvQueryTrueTypeOutline    QueryTrueTypeOutline;
605     PFN_DrvGetTrueTypeFile         GetTrueTypeFile;
606     PFN_DrvQueryFontFile           QueryFontFile;
607     PFN_DrvMovePanning             MovePanning;
608     PFN_DrvQueryAdvanceWidths      QueryAdvanceWidths;
609     PFN_DrvSetPixelFormat          SetPixelFormat;
610     PFN_DrvDescribePixelFormat     DescribePixelFormat;
611     PFN_DrvSwapBuffers             SwapBuffers;
612     PFN_DrvStartBanding            StartBanding;
613     PFN_DrvNextBand                NextBand;
614     PFN_DrvGetDirectDrawInfo       GetDirectDrawInfo;
615     PFN_DrvEnableDirectDraw        EnableDirectDraw;
616     PFN_DrvDisableDirectDraw       DisableDirectDraw;
617     PFN_DrvQuerySpoolType          QuerySpoolType;
618     PVOID                          Unknown5;
619     PFN_DrvIcmCreateColorTransform IcmCreateColorTransform;
620     PFN_DrvIcmDeleteColorTransform IcmDeleteColorTransform;
621     PFN_DrvIcmCheckBitmapBits      IcmCheckBitmapBits;
622     PFN_DrvIcmSetDeviceGammaRamp   IcmSetDeviceGammaRamp;
623     PFN_DrvGradientFill            GradientFill;
624     PFN_DrvStretchBltROP           StretchBltROP;
625     PFN_DrvPlgBlt                  PlgBlt;
626     PFN_DrvAlphaBlend              AlphaBlend;
627     PVOID                          SynthesizeFont;
628     PVOID                          GetSynthesizedFontFiles;
629     PFN_DrvTransparentBlt          TransparentBlt;
630     PFN_DrvQueryPerBandInfo        QueryPerBandInfo;
631     PFN_DrvQueryDeviceSupport      QueryDeviceSupport;
632     PVOID                          Reserved1;
633     PVOID                          Reserved2;
634     PVOID                          Reserved3;
635     PVOID                          Reserved4;
636     PVOID                          Reserved5;
637     PVOID                          Reserved6;
638     PVOID                          Reserved7;
639     PVOID                          Reserved8;
640     PFN_DrvDeriveSurface           DeriveSurface;
641     PFN_DrvQueryGlyphAttrs         QueryGlyphAttrs;
642     PFN_DrvNotify                  Notify;
643     PFN_DrvSynchronizeSurface      SynchronizeSurface;
644     PFN_DrvResetDevice             ResetDevice;
645     PVOID                          Reserved9;
646     PVOID                          Reserved10;
647     PVOID                          Reserved11; /* 92 */
648 
649     /* ReactOS specify */
650     PFN_DrvEnableDriver            EnableDriver; //ReactOS Extra
651 } DRIVER_FUNCTIONS, *PDRIVER_FUNCTIONS;
652 
653 #define ASSERT_PFN(pfn) \
654  C_ASSERT(FIELD_OFFSET(DRIVER_FUNCTIONS, pfn) == sizeof(PVOID) * INDEX_Drv##pfn)
655 
656 ASSERT_PFN(EnablePDEV);
657 ASSERT_PFN(CompletePDEV);
658 ASSERT_PFN(DisablePDEV);
659 ASSERT_PFN(EnableSurface);
660 ASSERT_PFN(DisableSurface);
661 ASSERT_PFN(AssertMode);
662 ASSERT_PFN(Offset);
663 ASSERT_PFN(ResetPDEV);
664 ASSERT_PFN(DisableDriver);
665 ASSERT_PFN(CreateDeviceBitmap);
666 ASSERT_PFN(DeleteDeviceBitmap);
667 ASSERT_PFN(RealizeBrush);
668 ASSERT_PFN(DitherColor);
669 ASSERT_PFN(StrokePath);
670 ASSERT_PFN(FillPath);
671 ASSERT_PFN(StrokeAndFillPath);
672 ASSERT_PFN(Paint);
673 ASSERT_PFN(BitBlt);
674 ASSERT_PFN(CopyBits);
675 ASSERT_PFN(StretchBlt);
676 ASSERT_PFN(SetPalette);
677 ASSERT_PFN(TextOut);
678 ASSERT_PFN(Escape);
679 ASSERT_PFN(DrawEscape);
680 ASSERT_PFN(QueryFont);
681 ASSERT_PFN(QueryFontTree);
682 ASSERT_PFN(QueryFontData);
683 ASSERT_PFN(SetPointerShape);
684 ASSERT_PFN(MovePointer);
685 ASSERT_PFN(LineTo);
686 ASSERT_PFN(SendPage);
687 ASSERT_PFN(StartPage);
688 ASSERT_PFN(EndDoc);
689 ASSERT_PFN(StartDoc);
690 ASSERT_PFN(GetGlyphMode);
691 ASSERT_PFN(Synchronize);
692 ASSERT_PFN(SaveScreenBits);
693 ASSERT_PFN(GetModes);
694 ASSERT_PFN(Free);
695 ASSERT_PFN(DestroyFont);
696 ASSERT_PFN(QueryFontCaps);
697 ASSERT_PFN(LoadFontFile);
698 ASSERT_PFN(UnloadFontFile);
699 ASSERT_PFN(FontManagement);
700 ASSERT_PFN(QueryTrueTypeTable);
701 ASSERT_PFN(QueryTrueTypeOutline);
702 ASSERT_PFN(GetTrueTypeFile);
703 ASSERT_PFN(QueryFontFile);
704 ASSERT_PFN(MovePanning);
705 ASSERT_PFN(QueryAdvanceWidths);
706 ASSERT_PFN(SetPixelFormat);
707 ASSERT_PFN(DescribePixelFormat);
708 ASSERT_PFN(SwapBuffers);
709 ASSERT_PFN(StartBanding);
710 ASSERT_PFN(NextBand);
711 ASSERT_PFN(GetDirectDrawInfo);
712 ASSERT_PFN(EnableDirectDraw);
713 ASSERT_PFN(DisableDirectDraw);
714 ASSERT_PFN(QuerySpoolType);
715 ASSERT_PFN(IcmCreateColorTransform);
716 ASSERT_PFN(IcmDeleteColorTransform);
717 ASSERT_PFN(IcmCheckBitmapBits);
718 ASSERT_PFN(IcmSetDeviceGammaRamp);
719 ASSERT_PFN(GradientFill);
720 ASSERT_PFN(StretchBltROP);
721 ASSERT_PFN(PlgBlt);
722 ASSERT_PFN(AlphaBlend);
723 ASSERT_PFN(SynthesizeFont);
724 ASSERT_PFN(GetSynthesizedFontFiles);
725 ASSERT_PFN(TransparentBlt);
726 ASSERT_PFN(QueryPerBandInfo);
727 ASSERT_PFN(QueryDeviceSupport);
728 ASSERT_PFN(Reserved1);
729 ASSERT_PFN(Reserved2);
730 ASSERT_PFN(Reserved3);
731 ASSERT_PFN(Reserved4);
732 ASSERT_PFN(Reserved5);
733 ASSERT_PFN(Reserved6);
734 ASSERT_PFN(Reserved7);
735 ASSERT_PFN(Reserved8);
736 ASSERT_PFN(DeriveSurface);
737 ASSERT_PFN(QueryGlyphAttrs);
738 ASSERT_PFN(Notify);
739 ASSERT_PFN(SynchronizeSurface);
740 ASSERT_PFN(ResetDevice);
741 
742 #endif
743