4 /* Constants ******************************************************************/
9 DC_DIRTYFONT_XFORM
= 1,
10 DC_DIRTYFONT_LFONT
= 2,
15 #define DC_FL_PAL_BACK 1
22 DC_PERMANANT
= 0x0008,
23 DC_DIRTY_RAO
= 0x0010,
24 DC_ACCUM_WMGR
= 0x0020,
25 DC_ACCUM_APP
= 0x0040,
27 DC_SYNCHRONIZEACCESS
= 0x0100,
28 DC_EPSPRINTINGESCAPE
= 0x0200,
29 DC_TEMPINFODC
= 0x0400,
30 DC_FULLSCREEN
= 0x0800,
31 DC_IN_CLONEPDEV
= 0x1000,
32 DC_REDIRECTION
= 0x2000,
33 DC_SHAREACCESS
= 0x4000,
47 /* Type definitions ***********************************************************/
49 typedef struct _DCLEVEL
52 struct _PALETTE
* ppal
;
53 PVOID pColorSpace
; /* COLORSPACE* */
58 POINTL ptlBrushOrigin
;
61 _Notnull_
struct _LFONT
* plfnt
; /* LFONT* (TEXTOBJ*) */
62 HGDIOBJ hPath
; /* HPATH */
64 LINEATTRS laPath
; /* 0x20 bytes */
69 UNIVERSAL_FONT_ID ufi
;
70 UNIVERSAL_FONT_ID ufiLoc
[4]; /* Local List. */
71 UNIVERSAL_FONT_ID
*pUFI
;
76 MATRIX mxWorldToDevice
;
77 MATRIX mxDeviceToWorld
;
91 /* The DC object structure */
94 /* Header for all gdi objects in the handle table.
95 Do not (re)move this. */
96 BASEOBJECT BaseObject
;
98 DHPDEV dhpdev
; /* <- PDEVOBJ.hPDev DHPDEV for device. */
102 PVOID hsem
; /* PERESOURCE aka HSEMAPHORE */
103 FLONG flGraphicsCaps
;
104 FLONG flGraphicsCaps2
;
105 _Notnull_ PDC_ATTR pdcattr
;
116 _Notnull_ PREGION prgnVis
; /* Visible region (must never be 0) */
118 POINTL ptlFillOrigin
;
122 EBRUSHOBJ eboBackground
;
124 FLONG flSimulationFlags
;
126 PVOID prfnt
; /* RFONT* */
127 XCLIPOBJ co
; /* CLIPOBJ */
128 PVOID pPFFList
; /* PPFF* */
135 // typedef struct _DC *PDC;
137 extern PDC defaultDCstate
;
139 /* Internal functions *********************************************************/
143 VOID FASTCALL
DC_vUpdateFillBrush(PDC pdc
);
144 VOID FASTCALL
DC_vUpdateLineBrush(PDC pdc
);
145 VOID FASTCALL
DC_vUpdateTextBrush(PDC pdc
);
146 VOID FASTCALL
DC_vUpdateBackgroundBrush(PDC pdc
);
152 _In_ HFONT hlfntNew
);
159 _In_ BOOL ForceBackground
);
167 _In_ COLORREF Color
);
169 INT FASTCALL
IntGdiSetBkMode(HDC hDC
, INT backgroundMode
);
170 COLORREF FASTCALL
IntGdiSetTextColor(HDC hDC
, COLORREF color
);
171 UINT FASTCALL
IntGdiSetTextAlign(HDC hDC
, UINT Mode
);
172 VOID FASTCALL
DCU_SetDcUndeletable(HDC
);
173 BOOL FASTCALL
IntSetDefaultRegion(PDC
);
174 ULONG
TranslateCOLORREF(PDC pdc
, COLORREF crColor
);
175 int FASTCALL
GreSetStretchBltMode(HDC hdc
, int iStretchMode
);
176 int FASTCALL
GreGetBkMode(HDC
);
177 int FASTCALL
GreGetMapMode(HDC
);
178 COLORREF FASTCALL
GreGetTextColor(HDC
);
179 COLORREF FASTCALL
GreGetBkColor(HDC
);
180 COLORREF FASTCALL
IntSetDCBrushColor(HDC
,COLORREF
);
181 COLORREF FASTCALL
IntSetDCPenColor(HDC
,COLORREF
);
182 int FASTCALL
GreGetGraphicsMode(HDC
);
183 BOOL FASTCALL
GreSetBrushOrg(HDC
,INT
,INT
,LPPOINT
);
185 INIT_FUNCTION NTSTATUS NTAPI
InitDcImpl(VOID
);
186 PPDEVOBJ FASTCALL
IntEnumHDev(VOID
);
187 PDC NTAPI
DC_AllocDcWithHandle(GDILOOBJTYPE eDcObjType
);
188 BOOL NTAPI
DC_bAllocDcAttr(PDC pdc
);
189 VOID NTAPI
DC_vCleanup(PVOID ObjectBody
);
190 BOOL FASTCALL
IntGdiDeleteDC(HDC
, BOOL
);
192 BOOL FASTCALL
DC_InvertXform(const XFORM
*xformSrc
, XFORM
*xformDest
);
193 VOID FASTCALL
DC_vUpdateViewportExt(PDC pdc
);
194 VOID FASTCALL
DC_vCopyState(PDC pdcSrc
, PDC pdcDst
, BOOL To
);
195 VOID FASTCALL
DC_vFinishBlit(PDC pdc1
, PDC pdc2
);
196 VOID FASTCALL
DC_vPrepareDCsForBlit(PDC pdcDest
, const RECT
* rcDest
, PDC pdcSrc
, const RECT
* rcSrc
);
198 VOID NTAPI
DC_vRestoreDC(IN PDC pdc
, INT iSaveLevel
);
200 VOID NTAPI
DC_vFreeDcAttr(PDC pdc
);
201 VOID NTAPI
DC_vInitDc(PDC pdc
, DCTYPE dctype
, PPDEVOBJ ppdev
);
203 VOID FASTCALL
IntGdiReferencePdev(PPDEVOBJ pPDev
);
204 VOID FASTCALL
IntGdiUnreferencePdev(PPDEVOBJ pPDev
, DWORD CleanUpType
);
205 HDC FASTCALL
IntGdiCreateDisplayDC(HDEV hDev
, ULONG DcType
, BOOL EmptyDC
);
206 BOOL FASTCALL
IntGdiCleanDC(HDC hDC
);
207 VOID FASTCALL
IntvGetDeviceCaps(PPDEVOBJ
, PDEVCAPS
);
208 VOID FASTCALL
IntUpdateBoundsRect(PDC
,PRECTL
);
210 BOOL NTAPI
GreSetDCOwner(HDC hdc
, ULONG ulOwner
);
211 HDC APIENTRY
GreCreateCompatibleDC(HDC hdc
, BOOL bAltDc
);
215 DC_vSetBrushOrigin(PDC pdc
, LONG x
, LONG y
);
223 pdc
= (PDC
)GDIOBJ_LockObject(hdc
, GDIObjType_DC_TYPE
);
226 ASSERT((GDI_HANDLE_GET_TYPE(pdc
->BaseObject
.hHmgr
) == GDILoObjType_LO_DC_TYPE
) ||
227 (GDI_HANDLE_GET_TYPE(pdc
->BaseObject
.hHmgr
) == GDILoObjType_LO_ALTDC_TYPE
));
228 ASSERT(pdc
->dclevel
.plfnt
!= NULL
);
229 ASSERT(GDI_HANDLE_GET_TYPE(((POBJ
)pdc
->dclevel
.plfnt
)->hHmgr
) == GDILoObjType_LO_FONT_TYPE
);
239 ASSERT(pdc
->dclevel
.plfnt
!= NULL
);
240 ASSERT(GDI_HANDLE_GET_TYPE(((POBJ
)pdc
->dclevel
.plfnt
)->hHmgr
) == GDILoObjType_LO_FONT_TYPE
);
242 GDIOBJ_vUnlockObject(&pdc
->BaseObject
);
247 DC_vSelectSurface(PDC pdc
, PSURFACE psurfNew
)
249 PSURFACE psurfOld
= pdc
->dclevel
.pSurface
;
252 psurfOld
->hdc
= NULL
;
253 SURFACE_ShareUnlockSurface(psurfOld
);
256 GDIOBJ_vReferenceObjectByPointer((POBJ
)psurfNew
);
257 pdc
->dclevel
.pSurface
= psurfNew
;
262 DC_vSelectFillBrush(PDC pdc
, PBRUSH pbrFill
)
264 PBRUSH pbrFillOld
= pdc
->dclevel
.pbrFill
;
266 BRUSH_ShareUnlockBrush(pbrFillOld
);
268 GDIOBJ_vReferenceObjectByPointer((POBJ
)pbrFill
);
269 pdc
->dclevel
.pbrFill
= pbrFill
;
274 DC_vSelectLineBrush(PDC pdc
, PBRUSH pbrLine
)
276 PBRUSH pbrLineOld
= pdc
->dclevel
.pbrLine
;
278 BRUSH_ShareUnlockBrush(pbrLineOld
);
280 GDIOBJ_vReferenceObjectByPointer((POBJ
)pbrLine
);
281 pdc
->dclevel
.pbrLine
= pbrLine
;
286 DC_vSelectPalette(PDC pdc
, PPALETTE ppal
)
288 PPALETTE ppalOld
= pdc
->dclevel
.ppal
;
290 PALETTE_ShareUnlockPalette(ppalOld
);
292 GDIOBJ_vReferenceObjectByPointer((POBJ
)ppal
);
293 pdc
->dclevel
.ppal
= ppal
;
296 extern _Notnull_ PBRUSH pbrDefaultBrush
;
297 extern _Notnull_ PSURFACE psurfDefaultBitmap
;
299 #define ASSERT_DC_PREPARED(pdc) NT_ASSERT((pdc)->fs & DC_PREPARED)
301 #endif /* not __WIN32K_DC_H */