6 #include <win32k/driver.h>
7 #include <win32k/gdiobj.h>
8 #include <win32k/path.h>
10 typedef struct _WIN_DC_INFO
13 HRGN hClipRgn; /* Clip region (may be 0) */
14 HRGN hVisRgn; /* Visible region (must never be 0) */
15 HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */
20 HBITMAP hFirstBitmap; /* Bitmap selected at creation of the DC */
34 COLORREF backgroundColor;
40 WORD textAlign; /* Text alignment from SetTextAlign() */
41 short charExtra; /* Spacing from SetTextCharacterExtra() */
42 short breakTotalExtra; /* Total extra space for justification */
43 short breakCount; /* Break char. count */
44 short breakExtra; /* breakTotalExtra / breakCount */
45 short breakRem; /* breakTotalExtra % breakCount */
51 INT GraphicsMode; /* Graphics mode */
52 INT DCOrgX; /* DC origin */
56 FARPROC lpfnPrint; /* AbortProc for Printing */
59 INT CursPosX; /* Current position */
63 XFORM xformWorld2Wnd; /* World-to-window transformation */
64 XFORM xformWorld2Vport; /* World-to-viewport transformation */
65 XFORM xformVport2World; /* Inverse of the above transformation */
66 BOOL vport2WorldValid; /* Is xformVport2World valid? */
70 #define DC_MEMORY 0x0001 /* It is a memory DC */
71 #define DC_SAVED 0x0002 /* It is a saved DC */
72 #define DC_DIRTY 0x0004 /* hVisRgn has to be updated */
73 #define DC_THUNKHOOK 0x0008 /* DC hook is in the 16-bit code */
75 #define GDI_DC_TYPE (1)
83 HSURF FillPatternSurfaces[HS_DDI_MAX];
88 DRIVER_FUNCTIONS DriverFunctions;
92 INT wndOrgX; /* Window origin */
94 INT wndExtX; /* Window extent */
96 INT vportOrgX; /* Viewport origin */
98 INT vportExtX; /* Viewport extent */
101 CLIPOBJ *CombinedClip;
113 HSURF FillPatterns[HS_DDI_MAX];
116 DRIVER_FUNCTIONS DriverFunctions;
117 HANDLE DisplayDevice;
120 /* Internal functions */
122 #define DC_LockDc(hDC) \
123 ((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
124 #define DC_UnlockDc(hDC) \
125 GDIOBJ_UnlockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC)
127 HDC FASTCALL RetrieveDisplayHDC(VOID);
128 HDC FASTCALL DC_AllocDC(LPCWSTR Driver);
129 VOID FASTCALL DC_InitDC(HDC DCToInit);
130 HDC FASTCALL DC_FindOpenDC(LPCWSTR Driver);
131 VOID FASTCALL DC_FreeDC(HDC DCToFree);
132 HDC FASTCALL DC_GetNextDC (PDC pDC);
133 VOID FASTCALL DC_SetNextDC (PDC pDC, HDC hNextDC);
134 BOOL FASTCALL DC_InternalDeleteDC( PDC DCToDelete );
136 VOID FASTCALL DC_UpdateXforms(PDC dc);
137 BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
139 /* User entry points */
141 BOOL STDCALL NtGdiCancelDC(HDC hDC);
142 HDC STDCALL NtGdiCreateCompatableDC(HDC hDC);
143 HDC STDCALL NtGdiCreateDC(LPCWSTR Driver,
146 CONST PDEVMODEW InitData);
147 HDC STDCALL NtGdiCreateIC(LPCWSTR Driver,
150 CONST PDEVMODEW DevMode);
151 BOOL STDCALL NtGdiDeleteDC(HDC hDC);
152 BOOL STDCALL NtGdiDeleteObject(HGDIOBJ hObject);
153 INT STDCALL NtGdiDrawEscape(HDC hDC,
158 /* FIXME: this typedef should go somewhere else... */
159 typedef VOID (*GOBJENUMPROC)(PVOID, LPARAM);
161 INT STDCALL NtGdiEnumObjects(HDC hDC,
163 GOBJENUMPROC ObjectFunc,
166 COLORREF STDCALL NtGdiGetBkColor(HDC hDC);
167 INT STDCALL NtGdiGetBkMode(HDC hDC);
168 BOOL STDCALL NtGdiGetBrushOrgEx(HDC hDC, LPPOINT brushOrg);
169 HRGN STDCALL NtGdiGetClipRgn(HDC hDC);
170 HGDIOBJ STDCALL NtGdiGetCurrentObject(HDC hDC, UINT ObjectType);
171 VOID FASTCALL IntGetCurrentPositionEx (PDC dc, LPPOINT currentPosition);
172 BOOL STDCALL NtGdiGetCurrentPositionEx(HDC hDC, LPPOINT currentPosition);
173 BOOL STDCALL NtGdiGetDCOrgEx(HDC hDC, LPPOINT Point);
174 INT STDCALL NtGdiGetDeviceCaps(HDC hDC, INT Index);
175 INT STDCALL NtGdiGetMapMode(HDC hDC);
176 INT STDCALL NtGdiGetObject(HGDIOBJ hGDIObj,
179 DWORD STDCALL NtGdiGetObjectType(HGDIOBJ hGDIObj);
180 INT STDCALL NtGdiGetPolyFillMode(HDC hDC);
181 INT STDCALL NtGdiGetRelAbs(HDC hDC);
182 INT STDCALL NtGdiGetROP2(HDC hDC);
183 HGDIOBJ STDCALL NtGdiGetStockObject(INT Object);
184 INT STDCALL NtGdiGetStretchBltMode(HDC hDC);
185 COLORREF STDCALL NtGdiGetTextColor(HDC hDC);
186 UINT STDCALL NtGdiGetTextAlign(HDC hDC);
187 BOOL STDCALL NtGdiGetViewportExtEx(HDC hDC, LPSIZE viewportExt);
188 BOOL STDCALL NtGdiGetViewportOrgEx(HDC hDC, LPPOINT viewportOrg);
189 BOOL STDCALL NtGdiGetWindowExtEx(HDC hDC, LPSIZE windowExt);
190 BOOL STDCALL NtGdiGetWindowOrgEx(HDC hDC, LPPOINT windowOrg);
191 HDC STDCALL NtGdiResetDC(HDC hDC, CONST DEVMODEW *InitData);
192 BOOL STDCALL NtGdiRestoreDC(HDC hDC, INT SavedDC);
193 INT STDCALL NtGdiSaveDC(HDC hDC);
194 HGDIOBJ STDCALL NtGdiSelectObject(HDC hDC, HGDIOBJ hGDIObj);
195 INT STDCALL NtGdiSetBkMode(HDC hDC, INT backgroundMode);
196 INT STDCALL NtGdiSetPolyFillMode(HDC hDC, INT polyFillMode);
197 INT STDCALL NtGdiSetRelAbs(HDC hDC, INT relAbsMode);
198 INT STDCALL NtGdiSetROP2(HDC hDC, INT ROPmode);
199 INT STDCALL NtGdiSetStretchBltMode(HDC hDC, INT stretchBltMode);
200 COLORREF STDCALL NtGdiSetTextColor(HDC hDC, COLORREF color);