Sync with trunk r63343.
[reactos.git] / win32ss / gdi / eng / pdevobj.h
1 #ifndef __WIN32K_PDEVOBJ_H
2 #define __WIN32K_PDEVOBJ_H
3
4 /* PDEVOBJ flags */
5 enum _PDEVFLAGS
6 {
7 PDEV_DISPLAY = 0x00000001, /* Display device */
8 PDEV_HARDWARE_POINTER = 0x00000002, /* Supports hardware cursor */
9 PDEV_SOFTWARE_POINTER = 0x00000004,
10 PDEV_GOTFONTS = 0x00000040, /* Has font driver */
11 PDEV_PRINTER = 0x00000080,
12 PDEV_ALLOCATEDBRUSHES = 0x00000100,
13 PDEV_HTPAL_IS_DEVPAL = 0x00000200,
14 PDEV_DISABLED = 0x00000400,
15 PDEV_SYNCHRONIZE_ENABLED = 0x00000800,
16 PDEV_FONTDRIVER = 0x00002000, /* Font device */
17 PDEV_GAMMARAMP_TABLE = 0x00004000,
18 PDEV_UMPD = 0x00008000,
19 PDEV_SHARED_DEVLOCK = 0x00010000,
20 PDEV_META_DEVICE = 0x00020000,
21 PDEV_DRIVER_PUNTED_CALL = 0x00040000, /* Driver calls back to GDI engine */
22 PDEV_CLONE_DEVICE = 0x00080000
23 };
24
25 /* Type definitions ***********************************************************/
26
27 typedef struct _GDIPOINTER /* should stay private to ENG? No, part of PDEVOBJ aka HDEV aka PDEV. */
28 {
29 /* Private GDI pointer handling information, required for software emulation */
30 BOOL Enabled;
31 SIZEL Size;
32 POINTL HotSpot;
33 XLATEOBJ *XlateObject;
34 SURFACE *psurfColor;
35 SURFACE *psurfMask;
36 SURFACE *psurfSave;
37 FLONG flags;
38
39 /* Public pointer information */
40 RECTL Exclude; /* Required publicly for SPS_ACCEPT_EXCLUDE */
41 } GDIPOINTER, *PGDIPOINTER;
42
43 typedef struct _DEVMODEINFO
44 {
45 struct _DEVMODEINFO *pdmiNext;
46 struct _LDEVOBJ *pldev;
47 ULONG cbdevmode;
48 DEVMODEW adevmode[1];
49 } DEVMODEINFO, *PDEVMODEINFO;
50
51 typedef struct _DEVMODEENTRY
52 {
53 DWORD dwFlags;
54 PDEVMODEW pdm;
55
56 } DEVMODEENTRY, *PDEVMODEENTRY;
57
58 typedef struct _GRAPHICS_DEVICE
59 {
60 WCHAR szNtDeviceName[CCHDEVICENAME/2];
61 WCHAR szWinDeviceName[CCHDEVICENAME/2];
62 struct _GRAPHICS_DEVICE * pNextGraphicsDevice;
63 struct _GRAPHICS_DEVICE * pVgaDevice;
64 PDEVICE_OBJECT DeviceObject;
65 PVOID pDeviceHandle;
66 DWORD hkClassDriverConfig;
67 DWORD StateFlags; /* See DISPLAY_DEVICE_* */
68 ULONG cbdevmodeInfo;
69 PDEVMODEINFO pdevmodeInfo;
70 ULONG cDevModes;
71 PDEVMODEENTRY pDevModeList;
72 LPWSTR pDiplayDrivers;
73 LPWSTR pwszDescription;
74 DWORD dwUnknown;
75 PVOID pUnknown;
76 PFILE_OBJECT FileObject;
77 DWORD ProtocolType;
78 ULONG iDefaultMode;
79 ULONG iCurrentMode;
80 } GRAPHICS_DEVICE, *PGRAPHICS_DEVICE;
81
82 typedef struct _PDEVOBJ
83 {
84 BASEOBJECT BaseObject;
85
86 struct _PDEVOBJ * ppdevNext;
87 LONG cPdevRefs;
88 LONG cPdevOpenRefs;
89 struct _PDEVOBJ * ppdevParent;
90 FLONG flFlags; // flags
91 // FLONG flAccelerated;
92 HSEMAPHORE hsemDevLock; /* Device lock. */
93 // HSEMAPHORE hsemPointer;
94 POINTL ptlPointer;
95 // SIZEL szlPointer;
96 // SPRITESTATE SpriteState;
97 // HFONT hlfntDefault;
98 // HFONT hlfntAnsiVariable;
99 // HFONT hlfntAnsiFixed;
100 HSURF ahsurf[HS_DDI_MAX];
101 // PUNICODE_STRING pusPrtDataFileName;
102 // PVOID pDevHTInfo;
103 // RFONT * prfntActive;
104 // RFONT * prfntInactive;
105 // ULONG cInactive;
106 // BYTE ajbo[0x5C];
107 // ULONG cDirectDrawDisableLocks;
108 // PVOID TypeOneInfo;
109 PVOID pvGammaRamp; /* Gamma ramp pointer. */
110 // PVOID RemoteTypeOne;
111 ULONG ulHorzRes;
112 ULONG ulVertRes;
113 // PFN_DrvSetPointerShape pfnDrvSetPointerShape;
114 // PFN_DrvMovePointer pfnDrvMovePointer;
115 PFN_DrvMovePointer pfnMovePointer;
116 // PFN_DrvSynchronize pfnDrvSynchronize;
117 // PFN_DrvSynchronizeSurface pfnDrvSynchronizeSurface;
118 // PFN_DrvSetPalette pfnDrvSetPalette;
119 // PFN_DrvNotify pfnDrvNotify;
120 // ULONG TagSig;
121 struct _LDEVOBJ * pldev;
122 DHPDEV dhpdev; /* DHPDEV for device. */
123 struct _PALETTE* ppalSurf; /* PEPALOBJ/PPALETTE for this device. */
124 DEVINFO devinfo;
125 GDIINFO gdiinfo;
126 PSURFACE pSurface; /* SURFACE for this device. */
127 // HANDLE hSpooler; /* Handle to spooler, if spooler dev driver. */
128 // PVOID pDesktopId;
129 PGRAPHICS_DEVICE pGraphicsDevice;
130 POINTL ptlOrigion;
131 PDEVMODEW pdmwDev; /* Ptr->DEVMODEW.dmSize + dmDriverExtra == alloc size. */
132 // DWORD Unknown3;
133 FLONG DxDd_Flags; /* DxDD active status flags. */
134 // LONG devAttr;
135 // PVOID WatchDogContext;
136 // ULONG WatchDogs;
137 union
138 {
139 DRIVER_FUNCTIONS DriverFunctions;
140 DRIVER_FUNCTIONS pfn;
141 PVOID apfn[INDEX_LAST]; // B8C 0x0598
142 };
143
144 /* ros specific */
145 ULONG DxDd_nCount;
146 GDIPOINTER Pointer;
147 /* Stuff to keep track of software cursors; win32k gdi part */
148 UINT SafetyRemoveLevel; /* at what level was the cursor removed?
149 0 for not removed */
150 UINT SafetyRemoveCount;
151 struct _EDD_DIRECTDRAW_GLOBAL * pEDDgpl;
152 } PDEVOBJ, *PPDEVOBJ;
153
154 /* Globals ********************************************************************/
155
156 extern PPDEVOBJ gppdevPrimary;
157
158
159 /* Function prototypes ********************************************************/
160
161 PPDEVOBJ
162 NTAPI
163 EngpGetPDEV(
164 _In_opt_ PUNICODE_STRING pustrDevice);
165
166 VOID
167 NTAPI
168 PDEVOBJ_vRelease(
169 _Inout_ PPDEVOBJ ppdev);
170
171 PSURFACE
172 NTAPI
173 PDEVOBJ_pSurface(
174 _In_ PPDEVOBJ ppdev);
175
176 VOID
177 NTAPI
178 PDEVOBJ_vGetDeviceCaps(
179 _In_ PPDEVOBJ ppdev,
180 _Out_ PDEVCAPS pDevCaps);
181
182 INIT_FUNCTION
183 NTSTATUS
184 NTAPI
185 InitPDEVImpl(VOID);
186
187 PSIZEL
188 FASTCALL
189 PDEVOBJ_sizl(
190 _In_ PPDEVOBJ ppdev,
191 _Out_ PSIZEL psizl);
192
193 #endif /* !__WIN32K_PDEVOBJ_H */