8 /* Constants ******************************************************************/
10 /* Get/SetBounds/Rect support. */
11 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
13 /* Type definitions ***********************************************************/
15 typedef struct _ROS_DC_INFO
17 HRGN hClipRgn
; /* Clip region (may be 0) */
18 HRGN hVisRgn
; /* Should me to DC. Visible region (must never be 0) */
19 HRGN hGCClipRgn
; /* GC clip region (ClipRgn AND VisRgn) */
23 CLIPOBJ
*CombinedClip
;
27 UNICODE_STRING DriverName
;
31 /* EXtended CLip and Window Region Object */
32 typedef struct _XCLIPOBJ
35 PVOID pClipRgn
; /* prgnRao_ or (prgnVis_ if (prgnRao_ == z)) */
37 DWORD nComplexity
; /* count/mode based on # of rect in regions scan. */
38 PVOID pUnknown
; /* UnK pointer to a large drawing structure. */
39 /* We will use it for CombinedClip ptr. */
40 } XCLIPOBJ
, *PXCLIPOBJ
;
42 typedef struct _DCLEVEL
45 struct _PALETTE
* ppal
;
46 PVOID pColorSpace
; /* COLORSPACE* */
51 POINTL ptlBrushOrigin
;
54 PVOID plfnt
; /* LFONTOBJ* (TEXTOBJ*) */
55 HGDIOBJ hPath
; /* HPATH */
57 LINEATTRS laPath
; /* 0x20 bytes */
58 PVOID prgnClip
; /* PROSRGNDATA */
62 UNIVERSAL_FONT_ID ufi
;
63 UNIVERSAL_FONT_ID ufiLoc
[4]; /* Local List. */
64 UNIVERSAL_FONT_ID
*pUFI
;
69 MATRIX mxWorldToDevice
;
70 MATRIX mxDeviceToWorld
;
84 /* The DC object structure */
87 /* Header for all gdi objects in the handle table.
88 Do not (re)move this. */
89 BASEOBJECT BaseObject
;
91 DHPDEV dhpdev
; /* <- PDEVOBJ.hPDev DHPDEV for device. */
95 PVOID hsem
; /* PERESOURCE aka HSEMAPHORE */
97 FLONG flGraphicsCaps2
;
108 PVOID prgnAPI
; /* PROSRGNDATA */
111 POINTL ptlFillOrigin
;
115 EBRUSHOBJ eboBackground
;
117 FLONG flSimulationFlags
;
119 PVOID prfnt
; /* RFONT* */
120 XCLIPOBJ co
; /* CLIPOBJ */
121 PVOID pPFFList
; /* PPFF* */
128 /* Reactos specific members */
132 /* Internal functions *********************************************************/
134 #define DC_LockDc(hDC) \
135 ((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
136 #define DC_UnlockDc(pDC) \
137 GDIOBJ_UnlockObjByPtr ((POBJ)pDC)
139 extern PDC defaultDCstate
;
141 NTSTATUS FASTCALL
InitDcImpl(VOID
);
142 PPDEVOBJ FASTCALL
IntEnumHDev(VOID
);
143 HDC FASTCALL
DC_AllocDC(PUNICODE_STRING Driver
);
144 VOID FASTCALL
DC_InitDC(HDC DCToInit
);
145 HDC FASTCALL
DC_FindOpenDC(PUNICODE_STRING Driver
);
146 VOID FASTCALL
DC_FreeDC(HDC
);
147 VOID FASTCALL
DC_AllocateDcAttr(HDC
);
148 VOID FASTCALL
DC_FreeDcAttr(HDC
);
149 BOOL INTERNAL_CALL
DC_Cleanup(PVOID ObjectBody
);
150 BOOL FASTCALL
DC_SetOwnership(HDC DC
, PEPROCESS Owner
);
151 VOID FASTCALL
DC_LockDisplay(HDC
);
152 VOID FASTCALL
DC_UnlockDisplay(HDC
);
153 BOOL FASTCALL
IntGdiDeleteDC(HDC
, BOOL
);
155 VOID FASTCALL
DC_UpdateXforms(PDC dc
);
156 BOOL FASTCALL
DC_InvertXform(const XFORM
*xformSrc
, XFORM
*xformDest
);
157 VOID FASTCALL
DC_vUpdateViewportExt(PDC pdc
);
158 VOID FASTCALL
DC_vCopyState(PDC pdcSrc
, PDC pdcDst
);
159 VOID FASTCALL
DC_vUpdateFillBrush(PDC pdc
);
160 VOID FASTCALL
DC_vUpdateLineBrush(PDC pdc
);
161 VOID FASTCALL
DC_vUpdateTextBrush(PDC pdc
);
162 VOID FASTCALL
DC_vUpdateBackgroundBrush(PDC pdc
);
164 BOOL FASTCALL
DCU_SyncDcAttrtoUser(PDC
);
165 BOOL FASTCALL
DCU_SynchDcAttrtoUser(HDC
);
166 VOID FASTCALL
DCU_SetDcUndeletable(HDC
);
168 COLORREF FASTCALL
IntGdiSetBkColor (HDC hDC
, COLORREF Color
);
169 INT FASTCALL
IntGdiSetBkMode(HDC hDC
, INT backgroundMode
);
170 COLORREF APIENTRY
IntGdiGetBkColor(HDC hDC
);
171 INT APIENTRY
IntGdiGetBkMode(HDC hDC
);
172 COLORREF FASTCALL
IntGdiSetTextColor(HDC hDC
, COLORREF color
);
173 UINT FASTCALL
IntGdiSetTextAlign(HDC hDC
, UINT Mode
);
174 UINT APIENTRY
IntGdiGetTextAlign(HDC hDC
);
175 COLORREF APIENTRY
IntGdiGetTextColor(HDC hDC
);
176 INT APIENTRY
IntGdiSetStretchBltMode(HDC hDC
, INT stretchBltMode
);
177 VOID FASTCALL
IntGdiReferencePdev(PPDEVOBJ pPDev
);
178 VOID FASTCALL
IntGdiUnreferencePdev(PPDEVOBJ pPDev
, DWORD CleanUpType
);
179 HDC FASTCALL
IntGdiCreateDisplayDC(HDEV hDev
, ULONG DcType
, BOOL EmptyDC
);
180 BOOL FASTCALL
IntGdiCleanDC(HDC hDC
);
181 VOID FASTCALL
IntvGetDeviceCaps(PPDEVOBJ
, PDEVCAPS
);
182 INT FASTCALL
IntGdiGetDeviceCaps(PDC
,INT
);
184 extern PPDEVOBJ pPrimarySurface
;
188 DC_vSelectSurface(PDC pdc
, PSURFACE psurfNew
)
190 PSURFACE psurfOld
= pdc
->dclevel
.pSurface
;
192 SURFACE_ShareUnlockSurface(psurfOld
);
194 GDIOBJ_IncrementShareCount((POBJ
)psurfNew
);
195 pdc
->dclevel
.pSurface
= psurfNew
;
200 DC_vSelectFillBrush(PDC pdc
, PBRUSH pbrFill
)
202 PBRUSH pbrFillOld
= pdc
->dclevel
.pbrFill
;
204 BRUSH_ShareUnlockBrush(pbrFillOld
);
206 GDIOBJ_IncrementShareCount((POBJ
)pbrFill
);
207 pdc
->dclevel
.pbrFill
= pbrFill
;
212 DC_vSelectLineBrush(PDC pdc
, PBRUSH pbrLine
)
214 PBRUSH pbrLineOld
= pdc
->dclevel
.pbrLine
;
216 BRUSH_ShareUnlockBrush(pbrLineOld
);
218 GDIOBJ_IncrementShareCount((POBJ
)pbrLine
);
219 pdc
->dclevel
.pbrLine
= pbrLine
;
223 IntPrepareDriverIfNeeded();
224 extern PDEVOBJ PrimarySurface
;
226 #endif /* not __WIN32K_DC_H */