rename DC.Dc_attr to dcattr, DC.DcLevel to dclevel, just like in gdikdx. Some naming...
[reactos.git] / reactos / subsystems / win32 / win32k / include / dc.h
1 #ifndef __WIN32K_DC_H
2 #define __WIN32K_DC_H
3
4 #include "brush.h"
5 #include "bitmaps.h"
6
7 /* Constants ******************************************************************/
8
9 /* Get/SetBounds/Rect support. */
10 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
11
12 /* GDIDEVICE flags */
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
29
30 /* Type definitions ***********************************************************/
31
32 typedef struct _ROS_DC_INFO
33 {
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) */
37 HBITMAP hBitmap;
38
39 BYTE bitsPerPixel;
40
41 CLIPOBJ *CombinedClip;
42 XLATEOBJ *XlateBrush;
43 XLATEOBJ *XlatePen;
44
45 UNICODE_STRING DriverName;
46
47 } ROS_DC_INFO;
48
49 /* EXtended CLip and Window Region Object */
50 typedef struct _XCLIPOBJ
51 {
52 WNDOBJ eClipWnd;
53 PVOID pClipRgn; /* prgnRao_ or (prgnVis_ if (prgnRao_ == z)) */
54 DWORD Unknown1[16];
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;
59
60 typedef struct _DCLEVEL
61 {
62 HPALETTE hpal;
63 struct _PALGDI * ppal;
64 PVOID pColorSpace; /* COLORSPACE* */
65 LONG lIcmMode;
66 LONG lSaveDepth;
67 DWORD unk1_00000000;
68 HGDIOBJ hdcSave;
69 POINTL ptlBrushOrigin;
70 PGDIBRUSHOBJ pbrFill;
71 PGDIBRUSHOBJ pbrLine;
72 PVOID plfnt; /* LFONTOBJ* (TEXTOBJ*) */
73 HGDIOBJ hPath; /* HPATH */
74 FLONG flPath;
75 LINEATTRS laPath; /* 0x20 bytes */
76 PVOID prgnClip; /* PROSRGNDATA */
77 PVOID prgnMeta;
78 COLORADJUSTMENT ca;
79 FLONG flFontState;
80 UNIVERSAL_FONT_ID ufi;
81 UNIVERSAL_FONT_ID ufiLoc[4]; /* Local List. */
82 UNIVERSAL_FONT_ID *pUFI;
83 ULONG uNumUFIs;
84 BOOL ufiSet;
85 FLONG fl;
86 FLONG flBrush;
87 MATRIX mxWorldToDevice;
88 MATRIX mxDeviceToWorld;
89 MATRIX mxWorldToPage;
90 FLOATOBJ efM11PtoD;
91 FLOATOBJ efM22PtoD;
92 FLOATOBJ efDxPtoD;
93 FLOATOBJ efDyPtoD;
94 FLOATOBJ efM11_TWIPS;
95 FLOATOBJ efM22_TWIPS;
96 FLOATOBJ efPr11;
97 FLOATOBJ efPr22;
98 PSURFACE pSurface;
99 SIZE sizl;
100 } DCLEVEL, *PDCLEVEL;
101
102 /* The DC object structure */
103 typedef struct _DC
104 {
105 /* Header for all gdi objects in the handle table.
106 Do not (re)move this. */
107 BASEOBJECT BaseObject;
108
109 DHPDEV dhpdev; /* <- GDIDEVICE.hPDev DHPDEV for device. */
110 INT dctype;
111 INT fs;
112 PVOID ppdev; /* PGDIDEVICE aka PDEVOBJ */
113 PVOID hsem; /* PERESOURCE aka HSEMAPHORE */
114 FLONG flGraphicsCaps;
115 FLONG flGraphicsCaps2;
116 PDC_ATTR pdcattr;
117 DCLEVEL dclevel;
118 DC_ATTR dcattr;
119 HDC hdcNext;
120 HDC hdcPrev;
121 RECTL erclClip;
122 POINTL ptlDCOrig;
123 RECTL erclWindow;
124 RECTL erclBounds;
125 RECTL erclBoundsApp;
126 PVOID prgnAPI; /* PROSRGNDATA */
127 PVOID prgnVis;
128 PVOID prgnRao;
129 POINTL ptlFillOrigin;
130 unsigned eboFill_[23]; /* EBRUSHOBJ */
131 unsigned eboLine_[23];
132 unsigned eboText_[23];
133 unsigned eboBackground_[23];
134 HFONT hlfntCur;
135 FLONG flSimulationFlags;
136 LONG lEscapement;
137 PVOID prfnt; /* RFONT* */
138 XCLIPOBJ co; /* CLIPOBJ */
139 PVOID pPFFList; /* PPFF* */
140 PVOID pClrxFormLnk;
141 INT ipfdDevMax;
142 ULONG ulCopyCount;
143 PVOID pSurfInfo;
144 POINTL ptlDoBanding;
145
146 /* Reactos specific members */
147 ROS_DC_INFO rosdc;
148 } DC, *PDC;
149
150 typedef struct _GRAPHICS_DEVICE
151 {
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;
157
158 typedef struct _GDIPOINTER /* should stay private to ENG? No, part of GDIDEVICE aka HDEV aka PDEV. */
159 {
160 /* private GDI pointer handling information, required for software emulation */
161 BOOL Enabled;
162 SIZEL Size;
163 POINTL HotSpot;
164 XLATEOBJ *XlateObject;
165 HSURF ColorSurface;
166 HSURF MaskSurface;
167 HSURF SaveSurface;
168 int ShowPointer; /* counter negtive do not show the mouse postive show the mouse */
169
170 /* public pointer information */
171 RECTL Exclude; /* required publicly for SPS_ACCEPT_EXCLUDE */
172 PGD_MOVEPOINTER MovePointer;
173 ULONG Status;
174 } GDIPOINTER, *PGDIPOINTER;
175
176 typedef struct _GDIDEVICE
177 {
178 BASEOBJECT BaseObject;
179
180 struct _GDIDEVICE *ppdevNext;
181 INT cPdevRefs;
182 INT cPdevOpenRefs;
183 struct _GDIDEVICE *ppdevParent;
184 FLONG flFlags;
185 PERESOURCE hsemDevLock; /* Device lock. */
186
187 PVOID pvGammaRamp; /* Gamma ramp pointer. */
188
189 HSURF FillPatterns[HS_DDI_MAX];
190
191 ULONG DxDd_nCount;
192
193 DHPDEV hPDev; /* DHPDEV for device. */
194 PVOID ppalSurf; /* PEPALOBJ/PPALGDI for this device. */
195 DEVINFO DevInfo;
196 GDIINFO GDIInfo;
197 HSURF pSurface; /* SURFACE for this device. */
198 HANDLE hSpooler; /* Handle to spooler, if spooler dev driver. */
199 ULONG DisplayNumber;
200 PVOID pGraphicsDev; /* PGRAPHICS_DEVICE */
201
202 DEVMODEW DMW;
203 PVOID pdmwDev; /* Ptr->DEVMODEW.dmSize + dmDriverExtra == alloc size. */
204
205 FLONG DxDd_Flags; /* DxDD active status flags. */
206
207 PFILE_OBJECT VideoFileObject;
208 BOOLEAN PreparedDriver;
209 GDIPOINTER Pointer;
210 /* Stuff to keep track of software cursors; win32k gdi part */
211 UINT SafetyRemoveLevel; /* at what level was the cursor removed?
212 0 for not removed */
213 UINT SafetyRemoveCount;
214
215 DRIVER_FUNCTIONS DriverFunctions;
216 struct _EDD_DIRECTDRAW_GLOBAL * pEDDgpl;
217 } GDIDEVICE, *PGDIDEVICE;
218
219 /* Internal functions *********************************************************/
220
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)
225
226 extern PDC defaultDCstate;
227
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);
245
246 VOID FASTCALL DC_UpdateXforms(PDC dc);
247 BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
248
249 BOOL FASTCALL DCU_SyncDcAttrtoUser(PDC);
250 BOOL FASTCALL DCU_SynchDcAttrtoUser(HDC);
251 VOID FASTCALL DCU_SetDcUndeletable(HDC);
252
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);
257
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);
275
276 extern PGDIDEVICE pPrimarySurface;
277
278 #endif /* not __WIN32K_DC_H */