4 typedef struct _DC
*PDC
;
6 #include "engobjects.h"
12 /* Constants ******************************************************************/
14 /* Get/SetBounds/Rect support. */
15 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
18 #define DC_DIRTYFONT_XFORM 1
19 #define DC_DIRTYFONT_LFONT 2
20 #define DC_UFI_MAPPING 4
23 #define DC_FL_PAL_BACK 1
28 #define DC_PERMANANT 0x08
29 #define DC_DIRTY_RAO 0x10
30 #define DC_ACCUM_WMGR 0x20
31 #define DC_ACCUM_APP 0x40
33 #define DC_SYNCHRONIZEACCESS 0x100
34 #define DC_EPSPRINTINGESCAPE 0x200
35 #define DC_TEMPINFODC 0x400
36 #define DC_FULLSCREEN 0x800
37 #define DC_IN_CLONEPDEV 0x1000
38 #define DC_REDIRECTION 0x2000
39 #define DC_SHAREACCESS 0x4000
49 /* Type definitions ***********************************************************/
51 typedef struct _ROS_DC_INFO
53 HRGN hClipRgn
; /* Clip region (may be 0) */
54 HRGN hGCClipRgn
; /* GC clip region (ClipRgn AND VisRgn) */
58 CLIPOBJ
*CombinedClip
;
60 UNICODE_STRING DriverName
;
64 typedef struct _DCLEVEL
67 struct _PALETTE
* ppal
;
68 PVOID pColorSpace
; /* COLORSPACE* */
73 POINTL ptlBrushOrigin
;
76 PVOID plfnt
; /* LFONTOBJ* (TEXTOBJ*) */
77 HGDIOBJ hPath
; /* HPATH */
79 LINEATTRS laPath
; /* 0x20 bytes */
80 PVOID prgnClip
; /* PROSRGNDATA */
84 UNIVERSAL_FONT_ID ufi
;
85 UNIVERSAL_FONT_ID ufiLoc
[4]; /* Local List. */
86 UNIVERSAL_FONT_ID
*pUFI
;
91 MATRIX mxWorldToDevice
;
92 MATRIX mxDeviceToWorld
;
104 } DCLEVEL
, *PDCLEVEL
;
106 /* The DC object structure */
109 /* Header for all gdi objects in the handle table.
110 Do not (re)move this. */
111 BASEOBJECT BaseObject
;
113 DHPDEV dhpdev
; /* <- PDEVOBJ.hPDev DHPDEV for device. */
117 PVOID hsem
; /* PERESOURCE aka HSEMAPHORE */
118 FLONG flGraphicsCaps
;
119 FLONG flGraphicsCaps2
;
130 PVOID prgnAPI
; /* PROSRGNDATA */
131 PVOID prgnVis
; /* Visible region (must never be 0) */
133 POINTL ptlFillOrigin
;
137 EBRUSHOBJ eboBackground
;
139 FLONG flSimulationFlags
;
141 PVOID prfnt
; /* RFONT* */
142 XCLIPOBJ co
; /* CLIPOBJ */
143 PVOID pPFFList
; /* PPFF* */
150 /* Reactos specific members */
154 /* Internal functions *********************************************************/
157 #define DC_LockDc(hDC) \
158 ((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
159 #define DC_UnlockDc(pDC) \
160 GDIOBJ_UnlockObjByPtr ((POBJ)pDC)
163 VOID NTAPI
EngAcquireSemaphoreShared(IN HSEMAPHORE hsem
);
170 pdc
= GDIOBJ_LockObj(hdc
, GDILoObjType_LO_DC_TYPE
);
171 if(pdc
) EngAcquireSemaphoreShared(pdc
->ppdev
->hsemDevLock
);
179 EngReleaseSemaphore(pdc
->ppdev
->hsemDevLock
);
180 GDIOBJ_UnlockObjByPtr(&pdc
->BaseObject
);
184 extern PDC defaultDCstate
;
186 NTSTATUS FASTCALL
InitDcImpl(VOID
);
187 PPDEVOBJ FASTCALL
IntEnumHDev(VOID
);
188 PDC NTAPI
DC_AllocDcWithHandle();
189 VOID FASTCALL
DC_InitDC(HDC DCToInit
);
190 VOID FASTCALL
DC_AllocateDcAttr(HDC
);
191 VOID FASTCALL
DC_FreeDcAttr(HDC
);
192 BOOL INTERNAL_CALL
DC_Cleanup(PVOID ObjectBody
);
193 BOOL FASTCALL
DC_SetOwnership(HDC hDC
, PEPROCESS Owner
);
194 VOID FASTCALL
DC_LockDisplay(HDC
);
195 VOID FASTCALL
DC_UnlockDisplay(HDC
);
196 BOOL FASTCALL
IntGdiDeleteDC(HDC
, BOOL
);
198 VOID FASTCALL
DC_UpdateXforms(PDC dc
);
199 BOOL FASTCALL
DC_InvertXform(const XFORM
*xformSrc
, XFORM
*xformDest
);
200 VOID FASTCALL
DC_vUpdateViewportExt(PDC pdc
);
201 VOID FASTCALL
DC_vCopyState(PDC pdcSrc
, PDC pdcDst
, BOOL to
);
202 VOID FASTCALL
DC_vUpdateFillBrush(PDC pdc
);
203 VOID FASTCALL
DC_vUpdateLineBrush(PDC pdc
);
204 VOID FASTCALL
DC_vUpdateTextBrush(PDC pdc
);
205 VOID FASTCALL
DC_vUpdateBackgroundBrush(PDC pdc
);
207 VOID NTAPI
DC_vRestoreDC(IN PDC pdc
, INT iSaveLevel
);
209 BOOL FASTCALL
DCU_SyncDcAttrtoUser(PDC
);
210 BOOL FASTCALL
DCU_SynchDcAttrtoUser(HDC
);
211 VOID FASTCALL
DCU_SetDcUndeletable(HDC
);
212 VOID NTAPI
DC_vFreeDcAttr(PDC pdc
);
213 VOID NTAPI
DC_vInitDc(PDC pdc
, DCTYPE dctype
, PPDEVOBJ ppdev
);
215 COLORREF FASTCALL
IntGdiSetBkColor (HDC hDC
, COLORREF Color
);
216 INT FASTCALL
IntGdiSetBkMode(HDC hDC
, INT backgroundMode
);
217 COLORREF APIENTRY
IntGdiGetBkColor(HDC hDC
);
218 INT APIENTRY
IntGdiGetBkMode(HDC hDC
);
219 COLORREF FASTCALL
IntGdiSetTextColor(HDC hDC
, COLORREF color
);
220 UINT FASTCALL
IntGdiSetTextAlign(HDC hDC
, UINT Mode
);
221 UINT APIENTRY
IntGdiGetTextAlign(HDC hDC
);
222 COLORREF APIENTRY
IntGdiGetTextColor(HDC hDC
);
223 INT APIENTRY
IntGdiSetStretchBltMode(HDC hDC
, INT stretchBltMode
);
224 VOID FASTCALL
IntGdiReferencePdev(PPDEVOBJ pPDev
);
225 VOID FASTCALL
IntGdiUnreferencePdev(PPDEVOBJ pPDev
, DWORD CleanUpType
);
226 HDC FASTCALL
IntGdiCreateDisplayDC(HDEV hDev
, ULONG DcType
, BOOL EmptyDC
);
227 BOOL FASTCALL
IntGdiCleanDC(HDC hDC
);
228 VOID FASTCALL
IntvGetDeviceCaps(PPDEVOBJ
, PDEVCAPS
);
232 DC_vSelectSurface(PDC pdc
, PSURFACE psurfNew
)
234 PSURFACE psurfOld
= pdc
->dclevel
.pSurface
;
236 SURFACE_ShareUnlockSurface(psurfOld
);
238 GDIOBJ_IncrementShareCount((POBJ
)psurfNew
);
239 pdc
->dclevel
.pSurface
= psurfNew
;
244 DC_vSelectFillBrush(PDC pdc
, PBRUSH pbrFill
)
246 PBRUSH pbrFillOld
= pdc
->dclevel
.pbrFill
;
248 BRUSH_ShareUnlockBrush(pbrFillOld
);
250 GDIOBJ_IncrementShareCount((POBJ
)pbrFill
);
251 pdc
->dclevel
.pbrFill
= pbrFill
;
256 DC_vSelectLineBrush(PDC pdc
, PBRUSH pbrLine
)
258 PBRUSH pbrLineOld
= pdc
->dclevel
.pbrLine
;
260 BRUSH_ShareUnlockBrush(pbrLineOld
);
262 GDIOBJ_IncrementShareCount((POBJ
)pbrLine
);
263 pdc
->dclevel
.pbrLine
= pbrLine
;
268 DC_vSelectPalette(PDC pdc
, PPALETTE ppal
)
270 PPALETTE ppalOld
= pdc
->dclevel
.ppal
;
272 PALETTE_ShareUnlockPalette(ppalOld
);
274 GDIOBJ_IncrementShareCount((POBJ
)ppal
);
275 pdc
->dclevel
.ppal
= ppal
;
278 #endif /* not __WIN32K_DC_H */