2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Win32 Graphical Subsystem (WIN32K)
4 * FILE: include/win32k/ntgdityp.h
5 * PURPOSE: Win32 Shared GDI Types for NtGdi*
6 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
9 /* INCLUDES ******************************************************************/
14 /* ENUMERATIONS **************************************************************/
24 typedef enum _PALFUNCTYPE
29 GdiPalGetSystemEntries
,
32 } PALFUNCTYPE
, *PPALFUNCTYPE
;
34 typedef enum _POLYFUNCTYPE
42 } POLYFUNCTYPE
, *PPOLYFUNCTYPE
;
44 typedef enum _GETDCDWORD
52 GdiGetFontLanguageInfo
,
56 } GETDCDWORD
, *PGETDCDWORD
;
58 typedef enum _GETSETDCDWORD
60 GdtGetSetCopyCount
= 2,
63 GdiGetSetTextCharExtra
,
65 GdiGetSetMapperFlagsInternal
,
67 GdiGetSetArcDirection
,
68 } GETSETDCDWORD
, *PGETSETDCDWORD
;
70 typedef enum _GETDCPOINT
72 GdiGetViewPortExt
= 1,
76 GdiGetAspectRatioFilter
,
78 } GETDCPOINT
, *PGETDCPOINT
;
81 typedef enum _GDIBATCHCMD
92 } GDIBATCHCMD
, *PGDIBATCHCMD
;
94 typedef enum _TRANSFORMTYPE
98 } TRANSFORMTYPE
, *PTRANSFORMTYPE
;
100 #define GdiWorldSpaceToPageSpace 0x203
103 typedef DWORD FULLSCREENCONTROL
;
104 typedef DWORD LFTYPE
;
106 /* DEFINES *******************************************************************/
108 #define GDIBATCHBUFSIZE 0x136*4
109 #define GDI_BATCH_LIMIT 20
111 // NtGdiGetCharWidthW Flags
112 #define GCW_WIN32 0x0001
113 #define GCW_NOFLOAT 0x0002
114 #define GCW_INDICES 0x0008
116 // NtGdiGetCharABCWidthW Flags
117 #define GCABCW_NOFLOAT 0x0001
118 #define GCABCW_INDICES 0x0002
121 //#define C1_TRANSPARENT 0x0001
122 #define TC_TT_ABLE 0x0002
123 #define C1_TT_CR_ANY 0x0004
124 #define C1_EMF_COMPLIANT 0x0008
125 #define C1_DIBENGINE 0x0010
126 #define C1_GAMMA_RAMP 0x0040
127 #define C1_REINIT_ABLE 0x0080
128 #define C1_GLYPH_INDEX 0x0100
129 #define C1_BIT_PACKED 0x0200
130 #define C1_BYTE_PACKED 0x0400
131 #define C1_COLORCURSOR 0x0800
132 #define C1_CMYK_ABLE 0x1000
133 #define C1_SLOW_CARD 0x2000
135 /* TYPES *********************************************************************/
137 typedef PVOID KERNEL_PVOID
;
138 typedef D3DNTHAL_CONTEXTCREATEDATA D3DNTHAL_CONTEXTCREATEI
;
141 typedef struct _CHWIDTHINFO
146 } CHWIDTHINFO
, *PCHWIDTHINFO
;
148 typedef struct _UNIVERSAL_FONT_ID
151 } UNIVERSAL_FONT_ID
, *PUNIVERSAL_FONT_ID
;
153 typedef struct _REALIZATION_INFO
// Based on LOCALESIGNATURE
155 DWORD dwCsbDefault
[2];
156 DWORD dwCsbSupported0
;
157 } REALIZATION_INFO
, *PREALIZATION_INFO
;
159 typedef struct _WIDTHDATA
171 } WIDTHDATA
, *PWIDTHDATA
;
173 typedef struct _DEVCAPS
// Very similar to GDIINFO
196 ULONG ulPhysicalWidth
;
197 ULONG ulPhysicalHeight
;
198 ULONG ulPhysicalOffsetX
;
199 ULONG ulPhysicalOffsetY
;
202 ULONG ulDesktopHorzRes
;
203 ULONG ulDesktopVertRes
;
204 ULONG ulBltAlignment
;
207 ULONG ulColorMgmtCaps
;
208 } DEVCAPS
, *PDEVCAPS
;
210 /* Font Structures */
211 typedef struct _TMDIFF
220 typedef struct _TMW_INTERNAL
222 TEXTMETRICW TextMetric
;
224 } TMW_INTERNAL
, *PTMW_INTERNAL
;
226 typedef struct _NTMW_INTERNAL
229 NEWTEXTMETRICEXW ntmw
;
230 } NTMW_INTERNAL
, *PNTMW_INTERNAL
;
232 typedef struct _ENUMFONTDATAW
237 ENUMLOGFONTEXDVW elfexdv
; /* variable size! */
238 /* NTMW_INTERNAL ntmwi; use ulNtwmOffset */
239 } ENUMFONTDATAW
, *PENUMFONTDATAW
;
241 /* Number Representation */
242 typedef struct _EFLOAT_S
248 /* XFORM Structures */
249 typedef struct _MATRIX_S
262 /* Gdi XForm storage union */
269 typedef struct _CFONT
271 struct _CFONT
*pcfNext
;
273 ULONG cRef
; // Count of all pointers to this CFONT.
275 LONG lHeight
; // Precomputed logical height.
276 HDC hdc
; // HDC of realization. 0 for display.
277 EFLOAT_S efM11
; // efM11 of WtoD of DC of realization
278 EFLOAT_S efM22
; // efM22 of WtoD of DC of realization
279 EFLOAT_S efDtoWBaseline
; // Precomputed back transform. (FXtoL)
280 EFLOAT_S efDtoWAscent
; // Precomputed back transform. (FXtoL)
283 USHORT sWidth
[256]; // Widths in pels.
284 ULONG ulAveWidth
; // bogus average used by USER
285 TMW_INTERNAL tmw
; // cached metrics
286 LOCALESIGNATURE lsLocSig
; // font signature information
290 // GDI Batch structures.
292 typedef struct _GDIBATCHHDR
296 } GDIBATCHHDR
, *PGDIBATCHHDR
;
298 typedef struct _GDIBSPATBLT
307 COLORREF crForegroundClr
;
308 COLORREF crBackgroundClr
;
311 POINTL ptlViewportOrg
;
312 ULONG ulForegroundClr
;
313 ULONG ulBackgroundClr
;
315 } GDIBSPATBLT
, *PGDIBSPATBLT
;
318 typedef struct _PATRECT
322 } PATRECT
, * PPATRECT
;
325 typedef struct _GDIBSPPATBLT
331 COLORREF crForegroundClr
;
332 COLORREF crBackgroundClr
;
334 ULONG ulForegroundClr
;
335 ULONG ulBackgroundClr
;
337 POINTL ptlViewportOrg
;
338 PATRECT pRect
[1]; // POLYPATBLT
339 } GDIBSPPATBLT
, *PGDIBSPPATBLT
;
341 typedef struct _GDIBSTEXTOUT
344 COLORREF crForegroundClr
;
345 COLORREF crBackgroundClr
;
347 ULONG ulForegroundClr
;
348 ULONG ulBackgroundClr
;
358 POINTL ptlViewportOrg
;
360 } GDIBSTEXTOUT
, *PGDIBSTEXTOUT
;
362 typedef struct _GDIBSEXTTEXTOUT
368 POINTL ptlViewportOrg
;
369 ULONG ulBackgroundClr
;
370 } GDIBSEXTTEXTOUT
, *PGDIBSEXTTEXTOUT
;
372 typedef struct _GDIBSSETBRHORG
375 POINTL ptlBrushOrigin
;
376 } GDIBSSETBRHORG
, *PGDIBSSETBRHORG
;
378 typedef struct _GDIBSEXTSELCLPRGN
386 } GDIBSEXTSELCLPRGN
, *PGDIBSEXTSELCLPRGN
;
388 // Use with GdiBCSelObj, GdiBCDelObj and GdiBCDelRgn.
389 typedef struct _GDIBSOBJECT
393 } GDIBSOBJECT
, *PGDIBSOBJECT
;
398 typedef BOOL (NTAPI
*PGD_ENABLEDRIVER
)(ULONG
, ULONG
, PDRVENABLEDATA
);
399 typedef DHPDEV (NTAPI
*PGD_ENABLEPDEV
)(DEVMODEW
*, LPWSTR
, ULONG
, HSURF
*, ULONG
, ULONG
*, ULONG
, DEVINFO
*, LPWSTR
, LPWSTR
, HANDLE
);
400 typedef VOID (NTAPI
*PGD_COMPLETEPDEV
)(DHPDEV
, HDEV
);
401 typedef VOID (NTAPI
*PGD_DISABLEPDEV
)(DHPDEV
);
402 typedef HSURF (NTAPI
*PGD_ENABLESURFACE
)(DHPDEV
);
403 typedef VOID (NTAPI
*PGD_DISABLESURFACE
)(DHPDEV
);
404 typedef BOOL (NTAPI
*PGD_ASSERTMODE
)(DHPDEV
, BOOL
);
405 typedef BOOL (NTAPI
*PGD_OFFSET
)(SURFOBJ
*, LONG
, LONG
, FLONG
);
406 typedef BOOL (NTAPI
*PGD_RESETPDEV
)(DHPDEV
, DHPDEV
);
407 typedef VOID (NTAPI
*PGD_DISABLEDRIVER
)(VOID
);
408 typedef HBITMAP (NTAPI
*PGD_CREATEDEVICEBITMAP
)(DHPDEV
, SIZEL
, ULONG
);
409 typedef VOID (NTAPI
*PGD_DELETEDEVICEBITMAP
)(DHSURF
);
410 typedef BOOL (NTAPI
*PGD_ALPHABLEND
)(SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, RECTL
*, RECTL
*, BLENDOBJ
*);
411 typedef BOOL (NTAPI
*PGD_REALIZEBRUSH
)(BRUSHOBJ
*, SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, XLATEOBJ
*, ULONG
);
412 typedef ULONG (NTAPI
*PGD_DITHERCOLOR
)(DHPDEV
, ULONG
, ULONG
, PULONG
);
413 typedef BOOL (NTAPI
*PGD_STROKEPATH
)(SURFOBJ
*, PATHOBJ
*, CLIPOBJ
*, XFORMOBJ
*, BRUSHOBJ
*, POINTL
*, PLINEATTRS
, MIX
);
414 typedef BOOL (NTAPI
*PGD_FILLPATH
)(SURFOBJ
*, PATHOBJ
*, CLIPOBJ
*, BRUSHOBJ
*, POINTL
*, MIX
, ULONG
);
415 typedef BOOL (NTAPI
*PGD_STROKEANDFILLPATH
)(SURFOBJ
*, PATHOBJ
*, CLIPOBJ
*, XFORMOBJ
*, BRUSHOBJ
*, PLINEATTRS
, BRUSHOBJ
*, POINTL
*, MIX
, ULONG
);
416 typedef BOOL (NTAPI
*PGD_PAINT
)(SURFOBJ
*, CLIPOBJ
*, BRUSHOBJ
*, POINTL
*, MIX
);
417 typedef BOOL (NTAPI
*PGD_BITBLT
)(SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, RECTL
*, POINTL
*, POINTL
*, BRUSHOBJ
*, POINTL
*, ROP4
);
418 typedef BOOL (NTAPI
*PGD_TRANSPARENTBLT
)(SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, RECTL
*, RECTL
*, ULONG
, ULONG
);
419 typedef BOOL (NTAPI
*PGD_COPYBITS
)(SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, RECTL
*, POINTL
*);
420 typedef BOOL (NTAPI
*PGD_STRETCHBLT
)(SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, COLORADJUSTMENT
*, POINTL
*, RECTL
*, RECTL
*, POINTL
*, ULONG
);
421 typedef BOOL (NTAPI
*PGD_STRETCHBLTROP
)(SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, COLORADJUSTMENT
*, POINTL
*, RECTL
*, RECTL
*, POINTL
*, ULONG
, BRUSHOBJ
*, DWORD
);
422 typedef BOOL (NTAPI
*PGD_SETPALETTE
)(DHPDEV
, PALOBJ
*, ULONG
, ULONG
, ULONG
);
423 typedef BOOL (NTAPI
*PGD_TEXTOUT
)(SURFOBJ
*, STROBJ
*, FONTOBJ
*, CLIPOBJ
*, RECTL
*, RECTL
*, BRUSHOBJ
*, BRUSHOBJ
*, POINTL
*, MIX
);
424 typedef ULONG (NTAPI
*PGD_ESCAPE
)(SURFOBJ
*, ULONG
, ULONG
, PVOID
*, ULONG
, PVOID
*);
425 typedef ULONG (NTAPI
*PGD_DRAWESCAPE
)(SURFOBJ
*, ULONG
, CLIPOBJ
*, RECTL
*, ULONG
, PVOID
*);
426 typedef PIFIMETRICS (NTAPI
*PGD_QUERYFONT
)(DHPDEV
, ULONG
, ULONG
, PULONG
);
427 typedef PVOID (NTAPI
*PGD_QUERYFONTTREE
)(DHPDEV
, ULONG
, ULONG
, ULONG
, PULONG
);
428 typedef LONG (NTAPI
*PGD_QUERYFONTDATA
)(DHPDEV
, FONTOBJ
*, ULONG
, HGLYPH
, GLYPHDATA
*, PVOID
, ULONG
);
429 typedef ULONG (NTAPI
*PGD_SETPOINTERSHAPE
)(SURFOBJ
*, SURFOBJ
*, SURFOBJ
*, XLATEOBJ
*, LONG
, LONG
, LONG
, LONG
, RECTL
*, ULONG
);
430 typedef VOID (NTAPI
*PGD_MOVEPOINTER
)(SURFOBJ
*, LONG
, LONG
, RECTL
*);
431 typedef BOOL (NTAPI
*PGD_LINETO
)(SURFOBJ
*, CLIPOBJ
*, BRUSHOBJ
*, LONG
, LONG
, LONG
, LONG
, RECTL
*, MIX
);
432 typedef BOOL (NTAPI
*PGD_SENDPAGE
)(SURFOBJ
*);
433 typedef BOOL (NTAPI
*PGD_STARTPAGE
)(SURFOBJ
*);
434 typedef BOOL (NTAPI
*PGD_ENDDOC
)(SURFOBJ
*, ULONG
);
435 typedef BOOL (NTAPI
*PGD_STARTDOC
)(SURFOBJ
*, PWSTR
, DWORD
);
436 typedef ULONG (NTAPI
*PGD_GETGLYPHMODE
)(DHPDEV
, FONTOBJ
*);
437 typedef VOID (NTAPI
*PGD_SYNCHRONIZE
)(DHPDEV
, RECTL
*);
438 typedef ULONG (NTAPI
*PGD_SAVESCREENBITS
)(SURFOBJ
*, ULONG
, ULONG
, RECTL
*);
439 typedef ULONG (NTAPI
*PGD_GETMODES
)(HANDLE
, ULONG
, PDEVMODEW
);
440 typedef VOID (NTAPI
*PGD_FREE
)(PVOID
, ULONG
);
441 typedef VOID (NTAPI
*PGD_DESTROYFONT
)(FONTOBJ
*);
442 typedef LONG (NTAPI
*PGD_QUERYFONTCAPS
)(ULONG
, PULONG
);
443 typedef ULONG (NTAPI
*PGD_LOADFONTFILE
)(ULONG
, PVOID
, ULONG
, ULONG
);
444 typedef BOOL (NTAPI
*PGD_UNLOADFONTFILE
)(ULONG
);
445 typedef ULONG (NTAPI
*PGD_FONTMANAGEMENT
)(SURFOBJ
*, FONTOBJ
*, ULONG
, ULONG
, PVOID
, ULONG
, PVOID
);
446 typedef LONG (NTAPI
*PGD_QUERYTRUETYPETABLE
)(ULONG
, ULONG
, ULONG
, PTRDIFF
, ULONG
, PBYTE
);
447 typedef LONG (NTAPI
*PGD_QUERYTRUETYPEOUTLINE
)(DHPDEV
, FONTOBJ
*, HGLYPH
, BOOL
, GLYPHDATA
*, ULONG
, TTPOLYGONHEADER
*);
448 typedef PVOID (NTAPI
*PGD_GETTRUETYPEFILE
)(ULONG
, PULONG
);
449 typedef LONG (NTAPI
*PGD_QUERYFONTFILE
)(ULONG
, ULONG
, ULONG
, PULONG
);
450 typedef BOOL (NTAPI
*PGD_QUERYADVANCEWIDTHS
)(DHPDEV
, FONTOBJ
*, ULONG
, HGLYPH
*, PVOID
*, ULONG
);
451 typedef BOOL (NTAPI
*PGD_SETPIXELFORMAT
)(SURFOBJ
*, LONG
, ULONG
);
452 typedef LONG (NTAPI
*PGD_DESCRIBEPIXELFORMAT
)(DHPDEV
, LONG
, ULONG
, PPIXELFORMATDESCRIPTOR
);
453 typedef BOOL (NTAPI
*PGD_SWAPBUFFERS
)(SURFOBJ
*, PWNDOBJ
);
454 typedef BOOL (NTAPI
*PGD_STARTBANDING
)(SURFOBJ
*, POINTL
*);
455 typedef BOOL (NTAPI
*PGD_NEXTBAND
)(SURFOBJ
*, POINTL
*);
456 typedef BOOL (NTAPI
*PGD_GETDIRECTDRAWINFO
)(DHPDEV
, PDD_HALINFO
, PDWORD
, VIDEOMEMORY
*, PDWORD
, PDWORD
);
457 typedef BOOL (NTAPI
*PGD_ENABLEDIRECTDRAW
)(DHPDEV
, PDD_CALLBACKS
, PDD_SURFACECALLBACKS
, PDD_PALETTECALLBACKS
);
458 typedef VOID (NTAPI
*PGD_DISABLEDIRECTDRAW
)(DHPDEV
);
459 typedef LONG (NTAPI
*PGD_QUERYSPOOLTYPE
)(DHPDEV
, LPWSTR
);
460 typedef BOOL (NTAPI
*PGD_GRADIENTFILL
)(SURFOBJ
*, CLIPOBJ
*, XLATEOBJ
*, TRIVERTEX
*, ULONG
, PVOID
, ULONG
, RECTL
*, POINTL
*, ULONG
);
461 typedef VOID (NTAPI
*PGD_SYNCHRONIZESURFACE
)(SURFOBJ
*, RECTL
*, FLONG
);
464 // Most of these are definded in ddk/winddi.h
466 typedef struct _DRIVER_FUNCTIONS
468 PGD_ENABLEDRIVER EnableDriver
; //ReactOS Extra
469 PGD_ENABLEPDEV EnablePDEV
;
470 PGD_COMPLETEPDEV CompletePDEV
;
471 PGD_DISABLEPDEV DisablePDEV
;
472 PGD_ENABLESURFACE EnableSurface
;
473 PGD_DISABLESURFACE DisableSurface
;
474 PGD_ASSERTMODE AssertMode
;
476 PGD_RESETPDEV ResetPDEV
;
477 PGD_DISABLEDRIVER DisableDriver
;
479 PGD_CREATEDEVICEBITMAP CreateDeviceBitmap
;
480 PGD_DELETEDEVICEBITMAP DeleteDeviceBitmap
;
481 PGD_REALIZEBRUSH RealizeBrush
;
482 PGD_DITHERCOLOR DitherColor
;
483 PGD_STROKEPATH StrokePath
;
484 PGD_FILLPATH FillPath
;
485 PGD_STROKEANDFILLPATH StrokeAndFillPath
;
488 PGD_COPYBITS CopyBits
;
489 PGD_STRETCHBLT StretchBlt
;
491 PGD_SETPALETTE SetPalette
;
494 PGD_DRAWESCAPE DrawEscape
;
495 PGD_QUERYFONT QueryFont
;
496 PGD_QUERYFONTTREE QueryFontTree
;
497 PGD_QUERYFONTDATA QueryFontData
;
498 PGD_SETPOINTERSHAPE SetPointerShape
;
499 PGD_MOVEPOINTER MovePointer
;
501 PGD_SENDPAGE SendPage
;
502 PGD_STARTPAGE StartPage
;
504 PGD_STARTDOC StartDoc
;
506 PGD_GETGLYPHMODE GetGlyphMode
;
507 PGD_SYNCHRONIZE Synchronize
;
509 PGD_SAVESCREENBITS SaveScreenBits
;
510 PGD_GETMODES GetModes
;
512 PGD_DESTROYFONT DestroyFont
;
513 PGD_QUERYFONTCAPS QueryFontCaps
;
514 PGD_LOADFONTFILE LoadFontFile
;
515 PGD_UNLOADFONTFILE UnloadFontFile
;
516 PGD_FONTMANAGEMENT FontManagement
;
517 PGD_QUERYTRUETYPETABLE QueryTrueTypeTable
;
518 PGD_QUERYTRUETYPEOUTLINE QueryTrueTypeOutline
;
519 PGD_GETTRUETYPEFILE GetTrueTypeFile
;
520 PGD_QUERYFONTFILE QueryFontFile
;
521 PFN_DrvMovePanning MovePanning
;
522 PGD_QUERYADVANCEWIDTHS QueryAdvanceWidths
;
523 PGD_SETPIXELFORMAT SetPixelFormat
;
524 PGD_DESCRIBEPIXELFORMAT DescribePixelFormat
;
525 PGD_SWAPBUFFERS SwapBuffers
;
526 PGD_STARTBANDING StartBanding
;
527 PGD_NEXTBAND NextBand
;
528 PGD_GETDIRECTDRAWINFO GetDirectDrawInfo
;
529 PGD_ENABLEDIRECTDRAW EnableDirectDraw
;
530 PGD_DISABLEDIRECTDRAW DisableDirectDraw
;
531 PGD_QUERYSPOOLTYPE QuerySpoolType
;
533 PFN_DrvIcmCreateColorTransform IcmCreateColorTransform
;
534 PFN_DrvIcmDeleteColorTransform IcmDeleteColorTransform
;
535 PFN_DrvIcmCheckBitmapBits IcmCheckBitmapBits
;
536 PFN_DrvIcmSetDeviceGammaRamp IcmSetDeviceGammaRamp
;
537 PGD_GRADIENTFILL GradientFill
;
538 PGD_STRETCHBLTROP StretchBltROP
;
539 PFN_DrvPlgBlt PlgBlt
;
540 PGD_ALPHABLEND AlphaBlend
;
541 // PFN_DrvSynthesizeFont SynthesizeFont;
543 // PFN_DrvGetSynthesizedFontFiles GetSynthesizedFontFiles;
545 PGD_TRANSPARENTBLT TransparentBlt
;
546 PFN_DrvQueryPerBandInfo QueryPerBandInfo
;
547 PFN_DrvQueryDeviceSupport QueryDeviceSupport
;
556 PFN_DrvDeriveSurface DeriveSurface
;
557 PFN_DrvQueryGlyphAttrs QueryGlyphAttrs
;
558 PFN_DrvNotify Notify
;
559 PGD_SYNCHRONIZESURFACE SynchronizeSurface
;
560 PFN_DrvResetDevice ResetDevice
;
564 } DRIVER_FUNCTIONS
, *PDRIVER_FUNCTIONS
;