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)
9 /* INCLUDES ******************************************************************/
16 /* ENUMERATIONS **************************************************************/
26 typedef enum _PALFUNCTYPE
31 GdiPalGetSystemEntries
,
34 } PALFUNCTYPE
, *PPALFUNCTYPE
;
36 typedef enum _POLYFUNCTYPE
44 } POLYFUNCTYPE
, *PPOLYFUNCTYPE
;
46 typedef enum _GETDCDWORD
54 GdiGetFontLanguageInfo
,
58 } GETDCDWORD
, *PGETDCDWORD
;
60 typedef enum _GETSETDCDWORD
62 GdiGetSetCopyCount
= 2,
65 GdiGetSetTextCharExtra
,
67 GdiGetSetMapperFlagsInternal
,
69 GdiGetSetArcDirection
,
70 } GETSETDCDWORD
, *PGETSETDCDWORD
;
72 typedef enum _GETDCPOINT
74 GdiGetViewPortExt
= 1,
78 GdiGetAspectRatioFilter
,
80 } GETDCPOINT
, *PGETDCPOINT
;
83 typedef enum _GDIBATCHCMD
94 } GDIBATCHCMD
, *PGDIBATCHCMD
;
96 typedef enum _TRANSFORMTYPE
100 } TRANSFORMTYPE
, *PTRANSFORMTYPE
;
102 /* MATRIX flAccel flags */
108 XFORM_FORMAT_LTOFX
= 8,
109 XFORM_FORMAT_FXTOL
= 0x10,
110 XFORM_FORMAT_LTOL
= 0x20,
111 XFORM_NO_TRANSLATION
= 0x40,
113 /* ReactOS specific */
114 XFORM_INTEGER
= 0x1000,
117 typedef enum GDIObjType
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
;
154 typedef enum GDILoObjType
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_UMPD_TYPE
= 0x110000,
165 GDILoObjType_LO_META_TYPE
= 0x150000,
166 GDILoObjType_LO_ALTDC_TYPE
= 0x210000,
167 GDILoObjType_LO_PEN_TYPE
= 0x300000,
168 GDILoObjType_LO_EXTPEN_TYPE
= 0x500000,
169 GDILoObjType_LO_DIBSECTION_TYPE
= 0x250000,
170 GDILoObjType_LO_METAFILE16_TYPE
= 0x260000,
171 GDILoObjType_LO_METAFILE_TYPE
= 0x460000,
172 GDILoObjType_LO_METADC16_TYPE
= 0x660000
173 } GDILOOBJTYPE
, *PGDILOOBJTYPE
;
176 World Transform modification modes
177 See [MS-EMF] Section 2.1.24
181 #define GdiWorldSpaceToPageSpace 0x203
182 #define GdiWorldSpaceToDeviceSpace 0x204
183 #define GdiPageSpaceToDeviceSpace 0x304
184 #define GdiDeviceSpaceToWorldSpace 0x402
187 typedef DWORD FULLSCREENCONTROL
;
188 typedef DWORD LFTYPE
;
190 /* Public LAST_STOCK = 19, plus 2 more internal entries */
191 #define NB_STOCK_OBJECTS 22
193 /* extra stock object: default 1x1 bitmap for memory DCs */
194 #define DEFAULT_BITMAP (21)
197 /* DEFINES *******************************************************************/
199 #define GDIBATCHBUFSIZE 0x136*4
200 #define GDI_BATCH_LIMIT 20
202 // NtGdiGetCharWidthW Flags
203 #define GCW_WIN32 0x0001
204 #define GCW_NOFLOAT 0x0002
205 #define GCW_INDICES 0x0008
207 // NtGdiGetCharABCWidthW Flags
208 #define GCABCW_NOFLOAT 0x0001
209 #define GCABCW_INDICES 0x0002
211 // NtGdiGetTextExtent* flags (reactos own)
212 #define GTEF_INDICES 0x1
216 //#define C1_TRANSPARENT 0x0001
217 #define TC_TT_ABLE 0x0002
218 #define C1_TT_CR_ANY 0x0004
219 #define C1_EMF_COMPLIANT 0x0008
220 #define C1_DIBENGINE 0x0010
221 #define C1_GAMMA_RAMP 0x0040
222 #define C1_REINIT_ABLE 0x0080
223 #define C1_GLYPH_INDEX 0x0100
224 #define C1_BIT_PACKED 0x0200
225 #define C1_BYTE_PACKED 0x0400
226 #define C1_COLORCURSOR 0x0800
227 #define C1_CMYK_ABLE 0x1000
228 #define C1_SLOW_CARD 0x2000
229 #define C1_MIRRORING 0X4000
231 // NtGdiGetRandomRgn iCodes
232 #define CLIPRGN 1 // GetClipRgn
233 #define METARGN 2 // GetMetaRgn
236 /* New flag for fdwInit in CreateDIBitmap. See support.microsoft.com/kb/kbview/108497*/
237 #define CBM_CREATDIB 2
239 /* New color use parameter. See support.microsoft.com/kb/kbview/108497 */
240 #define DIB_PAL_INDICES 2
242 /* Get/SetBounds/Rect support. */
243 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
245 #define GDITAG_TYPE_EMF 'XEFM' // EnhMetaFile
246 #define GDITAG_TYPE_MFP '_PFM' // MetaFile Picture
248 /* TYPES *********************************************************************/
250 typedef PVOID KERNEL_PVOID
;
251 typedef PVOID PUMDHPDEV
;
252 typedef D3DNTHAL_CONTEXTCREATEDATA D3DNTHAL_CONTEXTCREATEI
;
253 #if !defined(_WINDDI_)
257 typedef struct _CHWIDTHINFO
// Based on FD_DEVICEMETRICS
262 } CHWIDTHINFO
, *PCHWIDTHINFO
;
264 typedef struct _UNIVERSAL_FONT_ID
268 } UNIVERSAL_FONT_ID
, *PUNIVERSAL_FONT_ID
;
270 #define RI_TECH_BITMAP 1
271 #define RI_TECH_FIXED 2
272 #define RI_TECH_SCALABLE 3
274 typedef struct _REALIZATION_INFO
279 } REALIZATION_INFO
, *PREALIZATION_INFO
;
281 typedef struct _WIDTHDATA
293 } WIDTHDATA
, *PWIDTHDATA
;
295 typedef struct _DEVCAPS
// Very similar to GDIINFO
318 ULONG ulPhysicalWidth
;
319 ULONG ulPhysicalHeight
;
320 ULONG ulPhysicalOffsetX
;
321 ULONG ulPhysicalOffsetY
;
324 ULONG ulDesktopHorzRes
;
325 ULONG ulDesktopVertRes
;
326 ULONG ulBltAlignment
;
327 ULONG ulPanningHorzRes
;
328 ULONG ulPanningVertRes
;
329 ULONG xPanningAlignment
;
330 ULONG yPanningAlignment
;
332 ULONG ulColorMgmtCaps
;
333 } DEVCAPS
, *PDEVCAPS
;
335 /* Gdi Handle Cache Types and Structures */
336 #define GDI_CACHED_HANDLE_TYPES 4
337 #define CACHE_BRUSH_ENTRIES 10
338 #define CACHE_PEN_ENTRIES 8
339 #define CACHE_REGION_ENTRIES 8
340 #define CACHE_LFONT_ENTRIES 1
342 typedef enum _HANDLECACHETYPE
348 } HANDLECACHETYPE
,*PHANDLECACHETYPE
;
350 typedef struct _GDIHANDLECACHE
353 ULONG ulNumHandles
[GDI_CACHED_HANDLE_TYPES
];
354 HANDLE Handle
[CACHE_BRUSH_ENTRIES
+CACHE_PEN_ENTRIES
+CACHE_REGION_ENTRIES
+CACHE_LFONT_ENTRIES
];
355 } GDIHANDLECACHE
, *PGDIHANDLECACHE
;
357 /* Font Structures */
358 typedef struct _TMDIFF
367 typedef struct _TMW_INTERNAL
369 TEXTMETRICW TextMetric
;
371 } TMW_INTERNAL
, *PTMW_INTERNAL
;
373 typedef struct _NTMW_INTERNAL
376 NEWTEXTMETRICEXW ntmw
;
377 } NTMW_INTERNAL
, *PNTMW_INTERNAL
;
379 typedef struct _ENUMFONTDATAW
384 ENUMLOGFONTEXDVW elfexdv
; /* variable size! */
385 /* NTMW_INTERNAL ntmwi; use ulNtwmOffset */
386 } ENUMFONTDATAW
, *PENUMFONTDATAW
;
388 /* Number Representation */
389 typedef struct _EFLOAT_S
395 /* XFORM Structures */
396 typedef struct _MATRIX_S
409 typedef struct _MATRIX
422 /* Gdi XForm storage union */
429 #define CFONT_REALIZATION 0x0080
431 typedef struct _CFONT
433 struct _CFONT
*pcfNext
;
435 ULONG cRef
; // Count of all pointers to this CFONT.
437 LONG lHeight
; // Precomputed logical height.
438 HDC hdc
; // HDC of realization. 0 for display.
439 EFLOAT_S efM11
; // efM11 of WtoD of DC of realization
440 EFLOAT_S efM22
; // efM22 of WtoD of DC of realization
441 EFLOAT_S efDtoWBaseline
; // Precomputed back transform. (FXtoL)
442 EFLOAT_S efDtoWAscent
; // Precomputed back transform. (FXtoL)
445 USHORT sWidth
[256]; // Widths in pels.
446 ULONG ulAveWidth
; // bogus average used by USER
447 TMW_INTERNAL tmw
; // cached metrics
454 /* GDI Batch structures. */
455 typedef struct _GDIBATCHHDR
459 } GDIBATCHHDR
, *PGDIBATCHHDR
;
461 typedef struct _GDIBSPATBLT
470 COLORREF crForegroundClr
;
471 COLORREF crBackgroundClr
;
474 POINTL ptlViewportOrg
;
475 ULONG ulForegroundClr
;
476 ULONG ulBackgroundClr
;
478 } GDIBSPATBLT
, *PGDIBSPATBLT
;
480 /* FIXME: this should go to some "public" GDI32 header */
481 typedef struct _PATRECT
485 } PATRECT
, * PPATRECT
;
487 typedef struct _GDIBSPPATBLT
493 COLORREF crForegroundClr
;
494 COLORREF crBackgroundClr
;
496 ULONG ulForegroundClr
;
497 ULONG ulBackgroundClr
;
499 POINTL ptlViewportOrg
;
500 PATRECT pRect
[1]; // POLYPATBLT
501 } GDIBSPPATBLT
, *PGDIBSPPATBLT
;
504 // Both ExtSelectClipRgn and TextOut pass a nill RECT.
506 #define GDIBS_NORECT 0x80000000
508 typedef struct _GDIBSTEXTOUT
511 COLORREF crForegroundClr
;
512 COLORREF crBackgroundClr
;
514 ULONG ulForegroundClr
;
515 ULONG ulBackgroundClr
;
525 POINTL ptlViewportOrg
;
530 } GDIBSTEXTOUT
, *PGDIBSTEXTOUT
;
532 typedef struct _GDIBSEXTTEXTOUT
538 POINTL ptlViewportOrg
;
539 ULONG ulBackgroundClr
;
540 } GDIBSEXTTEXTOUT
, *PGDIBSEXTTEXTOUT
;
542 typedef struct _GDIBSSETBRHORG
545 POINTL ptlBrushOrigin
;
546 } GDIBSSETBRHORG
, *PGDIBSSETBRHORG
;
548 typedef struct _GDIBSEXTSELCLPRGN
553 } GDIBSEXTSELCLPRGN
, *PGDIBSEXTSELCLPRGN
;
555 /* Use with GdiBCSelObj, GdiBCDelObj and GdiBCDelRgn. */
556 typedef struct _GDIBSOBJECT
560 } GDIBSOBJECT
, *PGDIBSOBJECT
;
562 /* Declaration missing in ddk/winddi.h */
563 typedef VOID (APIENTRY
*PFN_DrvMovePanning
)(LONG
, LONG
, FLONG
);
565 /* Most of these are defined in ddk/winddi.h */
566 typedef struct _DRIVER_FUNCTIONS
568 PFN_DrvEnablePDEV EnablePDEV
;
569 PFN_DrvCompletePDEV CompletePDEV
;
570 PFN_DrvDisablePDEV DisablePDEV
;
571 PFN_DrvEnableSurface EnableSurface
;
572 PFN_DrvDisableSurface DisableSurface
;
573 PFN_DrvAssertMode AssertMode
;
574 PFN_DrvOffset Offset
;
575 PFN_DrvResetPDEV ResetPDEV
;
576 PFN_DrvDisableDriver DisableDriver
;
578 PFN_DrvCreateDeviceBitmap CreateDeviceBitmap
;
579 PFN_DrvDeleteDeviceBitmap DeleteDeviceBitmap
;
580 PFN_DrvRealizeBrush RealizeBrush
;
581 PFN_DrvDitherColor DitherColor
;
582 PFN_DrvStrokePath StrokePath
;
583 PFN_DrvFillPath FillPath
;
584 PFN_DrvStrokeAndFillPath StrokeAndFillPath
;
586 PFN_DrvBitBlt BitBlt
;
587 PFN_DrvCopyBits CopyBits
;
588 PFN_DrvStretchBlt StretchBlt
;
590 PFN_DrvSetPalette SetPalette
;
591 PFN_DrvTextOut TextOut
;
592 PFN_DrvEscape Escape
;
593 PFN_DrvDrawEscape DrawEscape
;
594 PFN_DrvQueryFont QueryFont
;
595 PFN_DrvQueryFontTree QueryFontTree
;
596 PFN_DrvQueryFontData QueryFontData
;
597 PFN_DrvSetPointerShape SetPointerShape
;
598 PFN_DrvMovePointer MovePointer
;
599 PFN_DrvLineTo LineTo
;
600 PFN_DrvSendPage SendPage
;
601 PFN_DrvStartPage StartPage
;
602 PFN_DrvEndDoc EndDoc
;
603 PFN_DrvStartDoc StartDoc
;
605 PFN_DrvGetGlyphMode GetGlyphMode
;
606 PFN_DrvSynchronize Synchronize
;
608 PFN_DrvSaveScreenBits SaveScreenBits
;
609 PFN_DrvGetModes GetModes
;
611 PFN_DrvDestroyFont DestroyFont
;
612 PFN_DrvQueryFontCaps QueryFontCaps
;
613 PFN_DrvLoadFontFile LoadFontFile
;
614 PFN_DrvUnloadFontFile UnloadFontFile
;
615 PFN_DrvFontManagement FontManagement
;
616 PFN_DrvQueryTrueTypeTable QueryTrueTypeTable
;
617 PFN_DrvQueryTrueTypeOutline QueryTrueTypeOutline
;
618 PFN_DrvGetTrueTypeFile GetTrueTypeFile
;
619 PFN_DrvQueryFontFile QueryFontFile
;
620 PFN_DrvMovePanning MovePanning
;
621 PFN_DrvQueryAdvanceWidths QueryAdvanceWidths
;
622 PFN_DrvSetPixelFormat SetPixelFormat
;
623 PFN_DrvDescribePixelFormat DescribePixelFormat
;
624 PFN_DrvSwapBuffers SwapBuffers
;
625 PFN_DrvStartBanding StartBanding
;
626 PFN_DrvNextBand NextBand
;
627 PFN_DrvGetDirectDrawInfo GetDirectDrawInfo
;
628 PFN_DrvEnableDirectDraw EnableDirectDraw
;
629 PFN_DrvDisableDirectDraw DisableDirectDraw
;
630 PFN_DrvQuerySpoolType QuerySpoolType
;
632 PFN_DrvIcmCreateColorTransform IcmCreateColorTransform
;
633 PFN_DrvIcmDeleteColorTransform IcmDeleteColorTransform
;
634 PFN_DrvIcmCheckBitmapBits IcmCheckBitmapBits
;
635 PFN_DrvIcmSetDeviceGammaRamp IcmSetDeviceGammaRamp
;
636 PFN_DrvGradientFill GradientFill
;
637 PFN_DrvStretchBltROP StretchBltROP
;
638 PFN_DrvPlgBlt PlgBlt
;
639 PFN_DrvAlphaBlend AlphaBlend
;
640 PVOID SynthesizeFont
;
641 PVOID GetSynthesizedFontFiles
;
642 PFN_DrvTransparentBlt TransparentBlt
;
643 PFN_DrvQueryPerBandInfo QueryPerBandInfo
;
644 PFN_DrvQueryDeviceSupport QueryDeviceSupport
;
653 PFN_DrvDeriveSurface DeriveSurface
;
654 PFN_DrvQueryGlyphAttrs QueryGlyphAttrs
;
655 PFN_DrvNotify Notify
;
656 PFN_DrvSynchronizeSurface SynchronizeSurface
;
657 PFN_DrvResetDevice ResetDevice
;
660 PVOID Reserved11
; /* 92 */
662 /* ReactOS specify */
663 PFN_DrvEnableDriver EnableDriver
; //ReactOS Extra
664 } DRIVER_FUNCTIONS
, *PDRIVER_FUNCTIONS
;
666 #define ASSERT_PFN(pfn) \
667 C_ASSERT(FIELD_OFFSET(DRIVER_FUNCTIONS, pfn) == sizeof(PVOID) * INDEX_Drv##pfn)
669 ASSERT_PFN(EnablePDEV
);
670 ASSERT_PFN(CompletePDEV
);
671 ASSERT_PFN(DisablePDEV
);
672 ASSERT_PFN(EnableSurface
);
673 ASSERT_PFN(DisableSurface
);
674 ASSERT_PFN(AssertMode
);
676 ASSERT_PFN(ResetPDEV
);
677 ASSERT_PFN(DisableDriver
);
678 ASSERT_PFN(CreateDeviceBitmap
);
679 ASSERT_PFN(DeleteDeviceBitmap
);
680 ASSERT_PFN(RealizeBrush
);
681 ASSERT_PFN(DitherColor
);
682 ASSERT_PFN(StrokePath
);
683 ASSERT_PFN(FillPath
);
684 ASSERT_PFN(StrokeAndFillPath
);
687 ASSERT_PFN(CopyBits
);
688 ASSERT_PFN(StretchBlt
);
689 ASSERT_PFN(SetPalette
);
692 ASSERT_PFN(DrawEscape
);
693 ASSERT_PFN(QueryFont
);
694 ASSERT_PFN(QueryFontTree
);
695 ASSERT_PFN(QueryFontData
);
696 ASSERT_PFN(SetPointerShape
);
697 ASSERT_PFN(MovePointer
);
699 ASSERT_PFN(SendPage
);
700 ASSERT_PFN(StartPage
);
702 ASSERT_PFN(StartDoc
);
703 ASSERT_PFN(GetGlyphMode
);
704 ASSERT_PFN(Synchronize
);
705 ASSERT_PFN(SaveScreenBits
);
706 ASSERT_PFN(GetModes
);
708 ASSERT_PFN(DestroyFont
);
709 ASSERT_PFN(QueryFontCaps
);
710 ASSERT_PFN(LoadFontFile
);
711 ASSERT_PFN(UnloadFontFile
);
712 ASSERT_PFN(FontManagement
);
713 ASSERT_PFN(QueryTrueTypeTable
);
714 ASSERT_PFN(QueryTrueTypeOutline
);
715 ASSERT_PFN(GetTrueTypeFile
);
716 ASSERT_PFN(QueryFontFile
);
717 ASSERT_PFN(MovePanning
);
718 ASSERT_PFN(QueryAdvanceWidths
);
719 ASSERT_PFN(SetPixelFormat
);
720 ASSERT_PFN(DescribePixelFormat
);
721 ASSERT_PFN(SwapBuffers
);
722 ASSERT_PFN(StartBanding
);
723 ASSERT_PFN(NextBand
);
724 ASSERT_PFN(GetDirectDrawInfo
);
725 ASSERT_PFN(EnableDirectDraw
);
726 ASSERT_PFN(DisableDirectDraw
);
727 ASSERT_PFN(QuerySpoolType
);
728 ASSERT_PFN(IcmCreateColorTransform
);
729 ASSERT_PFN(IcmDeleteColorTransform
);
730 ASSERT_PFN(IcmCheckBitmapBits
);
731 ASSERT_PFN(IcmSetDeviceGammaRamp
);
732 ASSERT_PFN(GradientFill
);
733 ASSERT_PFN(StretchBltROP
);
735 ASSERT_PFN(AlphaBlend
);
736 ASSERT_PFN(SynthesizeFont
);
737 ASSERT_PFN(GetSynthesizedFontFiles
);
738 ASSERT_PFN(TransparentBlt
);
739 ASSERT_PFN(QueryPerBandInfo
);
740 ASSERT_PFN(QueryDeviceSupport
);
741 ASSERT_PFN(Reserved1
);
742 ASSERT_PFN(Reserved2
);
743 ASSERT_PFN(Reserved3
);
744 ASSERT_PFN(Reserved4
);
745 ASSERT_PFN(Reserved5
);
746 ASSERT_PFN(Reserved6
);
747 ASSERT_PFN(Reserved7
);
748 ASSERT_PFN(Reserved8
);
749 ASSERT_PFN(DeriveSurface
);
750 ASSERT_PFN(QueryGlyphAttrs
);
752 ASSERT_PFN(SynchronizeSurface
);
753 ASSERT_PFN(ResetDevice
);