7 /* Constants ******************************************************************/
9 /* Get/SetBounds/Rect support. */
10 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
13 #define PDEV_DISPLAY 0x00000001 /* Display device */
14 #define PDEV_HARDWARE_POINTER 0x00000002 /* Supports hardware cursor */
15 #define PDEV_SOFTWARE_POINTER 0x00000004
16 #define PDEV_GOTFONTS 0x00000040 /* Has font driver */
17 #define PDEV_PRINTER 0x00000080
18 #define PDEV_ALLOCATEDBRUSHES 0x00000100
19 #define PDEV_HTPAL_IS_DEVPAL 0x00000200
20 #define PDEV_DISABLED 0x00000400
21 #define PDEV_SYNCHRONIZE_ENABLED 0x00000800
22 #define PDEV_FONTDRIVER 0x00002000 /* Font device */
23 #define PDEV_GAMMARAMP_TABLE 0x00004000
24 #define PDEV_UMPD 0x00008000
25 #define PDEV_SHARED_DEVLOCK 0x00010000
26 #define PDEV_META_DEVICE 0x00020000
27 #define PDEV_DRIVER_PUNTED_CALL 0x00040000 /* Driver calls back to GDI engine */
28 #define PDEV_CLONE_DEVICE 0x00080000
30 /* Type definitions ***********************************************************/
32 typedef struct _ROS_DC_INFO
34 HRGN hClipRgn
; /* Clip region (may be 0) */
35 HRGN hVisRgn
; /* Should me to DC. Visible region (must never be 0) */
36 HRGN hGCClipRgn
; /* GC clip region (ClipRgn AND VisRgn) */
41 CLIPOBJ
*CombinedClip
;
45 UNICODE_STRING DriverName
;
49 /* EXtended CLip and Window Region Object */
50 typedef struct _XCLIPOBJ
53 PVOID pClipRgn
; /* prgnRao_ or (prgnVis_ if (prgnRao_ == z)) */
55 DWORD nComplexity
; /* count/mode based on # of rect in regions scan. */
56 PVOID pUnknown
; /* UnK pointer to a large drawing structure. */
57 /* We will use it for CombinedClip ptr. */
58 } XCLIPOBJ
, *PXCLIPOBJ
;
60 typedef struct _DCLEVEL
63 struct _PALGDI
* ppal
;
64 PVOID pColorSpace
; /* COLORSPACE* */
69 POINTL ptlBrushOrigin
;
72 PVOID plfnt
; /* LFONTOBJ* (TEXTOBJ*) */
73 HGDIOBJ hPath
; /* HPATH */
75 LINEATTRS laPath
; /* 0x20 bytes */
76 PVOID prgnClip
; /* PROSRGNDATA */
80 UNIVERSAL_FONT_ID ufi
;
81 UNIVERSAL_FONT_ID ufiLoc
[4]; /* Local List. */
82 UNIVERSAL_FONT_ID
*pUFI
;
87 MATRIX mxWorldToDevice
;
88 MATRIX mxDeviceToWorld
;
100 } DCLEVEL
, *PDCLEVEL
;
102 /* The DC object structure */
105 /* Header for all gdi objects in the handle table.
106 Do not (re)move this. */
107 BASEOBJECT BaseObject
;
109 DHPDEV dhpdev
; /* <- GDIDEVICE.hPDev DHPDEV for device. */
112 PVOID ppdev
; /* PGDIDEVICE aka PDEVOBJ */
113 PVOID hsem
; /* PERESOURCE aka HSEMAPHORE */
114 FLONG flGraphicsCaps
;
115 FLONG flGraphicsCaps2
;
126 PVOID prgnAPI
; /* PROSRGNDATA */
129 POINTL ptlFillOrigin
;
130 unsigned eboFill_
[23]; /* EBRUSHOBJ */
131 unsigned eboLine_
[23];
132 unsigned eboText_
[23];
133 unsigned eboBackground_
[23];
135 FLONG flSimulationFlags
;
137 PVOID prfnt
; /* RFONT* */
138 XCLIPOBJ co
; /* CLIPOBJ */
139 PVOID pPFFList
; /* PPFF* */
146 /* Reactos specific members */
150 typedef struct _GRAPHICS_DEVICE
152 CHAR szNtDeviceName
[CCHDEVICENAME
]; /* Yes char AscII */
153 CHAR szWinDeviceName
[CCHDEVICENAME
]; /* <- chk GetMonitorInfoW MxIxEX.szDevice */
154 struct _GRAPHICS_DEVICE
* pNextGraphicsDevice
;
155 DWORD StateFlags
; /* See DISPLAY_DEVICE_* */
156 } GRAPHICS_DEVICE
, *PGRAPHICS_DEVICE
;
158 typedef struct _GDIPOINTER
/* should stay private to ENG? No, part of GDIDEVICE aka HDEV aka PDEV. */
160 /* private GDI pointer handling information, required for software emulation */
164 XLATEOBJ
*XlateObject
;
168 int ShowPointer
; /* counter negtive do not show the mouse postive show the mouse */
170 /* public pointer information */
171 RECTL Exclude
; /* required publicly for SPS_ACCEPT_EXCLUDE */
172 PGD_MOVEPOINTER MovePointer
;
174 } GDIPOINTER
, *PGDIPOINTER
;
176 typedef struct _GDIDEVICE
178 BASEOBJECT BaseObject
;
180 struct _GDIDEVICE
*ppdevNext
;
183 struct _GDIDEVICE
*ppdevParent
;
185 PERESOURCE hsemDevLock
; /* Device lock. */
187 PVOID pvGammaRamp
; /* Gamma ramp pointer. */
189 HSURF FillPatterns
[HS_DDI_MAX
];
193 DHPDEV hPDev
; /* DHPDEV for device. */
194 PVOID ppalSurf
; /* PEPALOBJ/PPALGDI for this device. */
197 HSURF pSurface
; /* SURFACE for this device. */
198 HANDLE hSpooler
; /* Handle to spooler, if spooler dev driver. */
200 PVOID pGraphicsDev
; /* PGRAPHICS_DEVICE */
203 PVOID pdmwDev
; /* Ptr->DEVMODEW.dmSize + dmDriverExtra == alloc size. */
205 FLONG DxDd_Flags
; /* DxDD active status flags. */
207 PFILE_OBJECT VideoFileObject
;
208 BOOLEAN PreparedDriver
;
210 /* Stuff to keep track of software cursors; win32k gdi part */
211 UINT SafetyRemoveLevel
; /* at what level was the cursor removed?
213 UINT SafetyRemoveCount
;
215 DRIVER_FUNCTIONS DriverFunctions
;
216 struct _EDD_DIRECTDRAW_GLOBAL
* pEDDgpl
;
217 } GDIDEVICE
, *PGDIDEVICE
;
219 /* Internal functions *********************************************************/
221 #define DC_LockDc(hDC) \
222 ((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
223 #define DC_UnlockDc(pDC) \
224 GDIOBJ_UnlockObjByPtr ((POBJ)pDC)
226 extern PDC defaultDCstate
;
228 NTSTATUS FASTCALL
InitDcImpl(VOID
);
229 PGDIDEVICE FASTCALL
IntEnumHDev(VOID
);
230 HDC FASTCALL
DC_AllocDC(PUNICODE_STRING Driver
);
231 VOID FASTCALL
DC_InitDC(HDC DCToInit
);
232 HDC FASTCALL
DC_FindOpenDC(PUNICODE_STRING Driver
);
233 VOID FASTCALL
DC_FreeDC(HDC
);
234 VOID FASTCALL
DC_AllocateDcAttr(HDC
);
235 VOID FASTCALL
DC_FreeDcAttr(HDC
);
236 BOOL INTERNAL_CALL
DC_Cleanup(PVOID ObjectBody
);
237 HDC FASTCALL
DC_GetNextDC (PDC pDC
);
238 VOID FASTCALL
DC_SetNextDC (PDC pDC
, HDC hNextDC
);
239 BOOL FASTCALL
DC_SetOwnership(HDC DC
, PEPROCESS Owner
);
240 VOID FASTCALL
DC_LockDisplay(HDC
);
241 VOID FASTCALL
DC_UnlockDisplay(HDC
);
242 VOID FASTCALL
IntGdiCopyFromSaveState(PDC
, PDC
, HDC
);
243 VOID FASTCALL
IntGdiCopyToSaveState(PDC
, PDC
);
244 BOOL FASTCALL
IntGdiDeleteDC(HDC
, BOOL
);
246 VOID FASTCALL
DC_UpdateXforms(PDC dc
);
247 BOOL FASTCALL
DC_InvertXform(const XFORM
*xformSrc
, XFORM
*xformDest
);
249 BOOL FASTCALL
DCU_SyncDcAttrtoUser(PDC
);
250 BOOL FASTCALL
DCU_SynchDcAttrtoUser(HDC
);
251 VOID FASTCALL
DCU_SetDcUndeletable(HDC
);
253 VOID FASTCALL
IntGetViewportExtEx(PDC dc
, LPSIZE pt
);
254 VOID FASTCALL
IntGetViewportOrgEx(PDC dc
, LPPOINT pt
);
255 VOID FASTCALL
IntGetWindowExtEx(PDC dc
, LPSIZE pt
);
256 VOID FASTCALL
IntGetWindowOrgEx(PDC dc
, LPPOINT pt
);
258 COLORREF FASTCALL
IntGdiSetBkColor (HDC hDC
, COLORREF Color
);
259 INT FASTCALL
IntGdiSetBkMode(HDC hDC
, INT backgroundMode
);
260 COLORREF APIENTRY
IntGdiGetBkColor(HDC hDC
);
261 INT APIENTRY
IntGdiGetBkMode(HDC hDC
);
262 COLORREF FASTCALL
IntGdiSetTextColor(HDC hDC
, COLORREF color
);
263 UINT FASTCALL
IntGdiSetTextAlign(HDC hDC
, UINT Mode
);
264 UINT APIENTRY
IntGdiGetTextAlign(HDC hDC
);
265 COLORREF APIENTRY
IntGdiGetTextColor(HDC hDC
);
266 INT APIENTRY
IntGdiSetStretchBltMode(HDC hDC
, INT stretchBltMode
);
267 VOID FASTCALL
IntGdiReferencePdev(PGDIDEVICE pPDev
);
268 VOID FASTCALL
IntGdiUnreferencePdev(PGDIDEVICE pPDev
, DWORD CleanUpType
);
269 HDC FASTCALL
IntGdiCreateDisplayDC(HDEV hDev
, ULONG DcType
, BOOL EmptyDC
);
270 BOOL FASTCALL
IntGdiCleanDC(HDC hDC
);
271 VOID FASTCALL
IntvGetDeviceCaps(PGDIDEVICE
, PDEVCAPS
);
272 HPEN FASTCALL
IntGdiSelectPen(PDC
,HPEN
);
273 HBRUSH FASTCALL
IntGdiSelectBrush(PDC
,HBRUSH
);
274 INT FASTCALL
IntGdiGetDeviceCaps(PDC
,INT
);
276 extern PGDIDEVICE pPrimarySurface
;
278 #endif /* not __WIN32K_DC_H */