4 /* Constants ******************************************************************/
6 /* Get/SetBounds/Rect support. */
7 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
12 DC_DIRTYFONT_XFORM
= 1,
13 DC_DIRTYFONT_LFONT
= 2,
18 #define DC_FL_PAL_BACK 1
25 DC_PERMANANT
= 0x0008,
26 DC_DIRTY_RAO
= 0x0010,
27 DC_ACCUM_WMGR
= 0x0020,
28 DC_ACCUM_APP
= 0x0040,
30 DC_SYNCHRONIZEACCESS
= 0x0100,
31 DC_EPSPRINTINGESCAPE
= 0x0200,
32 DC_TEMPINFODC
= 0x0400,
33 DC_FULLSCREEN
= 0x0800,
34 DC_IN_CLONEPDEV
= 0x1000,
35 DC_REDIRECTION
= 0x2000,
36 DC_SHAREACCESS
= 0x4000
47 /* Type definitions ***********************************************************/
49 typedef struct _ROS_DC_INFO
51 HRGN hClipRgn
; /* Clip region (may be 0) */
52 HRGN hGCClipRgn
; /* GC clip region (ClipRgn AND VisRgn) */
54 CLIPOBJ
*CombinedClip
;
57 typedef struct _DCLEVEL
60 struct _PALETTE
* ppal
;
61 PVOID pColorSpace
; /* COLORSPACE* */
66 POINTL ptlBrushOrigin
;
69 PVOID plfnt
; /* LFONTOBJ* (TEXTOBJ*) */
70 HGDIOBJ hPath
; /* HPATH */
72 LINEATTRS laPath
; /* 0x20 bytes */
77 UNIVERSAL_FONT_ID ufi
;
78 UNIVERSAL_FONT_ID ufiLoc
[4]; /* Local List. */
79 UNIVERSAL_FONT_ID
*pUFI
;
84 MATRIX mxWorldToDevice
;
85 MATRIX mxDeviceToWorld
;
99 /* The DC object structure */
102 /* Header for all gdi objects in the handle table.
103 Do not (re)move this. */
104 BASEOBJECT BaseObject
;
106 DHPDEV dhpdev
; /* <- PDEVOBJ.hPDev DHPDEV for device. */
110 PVOID hsem
; /* PERESOURCE aka HSEMAPHORE */
111 FLONG flGraphicsCaps
;
112 FLONG flGraphicsCaps2
;
124 PREGION prgnVis
; /* Visible region (must never be 0) */
126 POINTL ptlFillOrigin
;
130 EBRUSHOBJ eboBackground
;
132 FLONG flSimulationFlags
;
134 PVOID prfnt
; /* RFONT* */
135 XCLIPOBJ co
; /* CLIPOBJ */
136 PVOID pPFFList
; /* PPFF* */
143 /* Reactos specific members */
147 extern PDC defaultDCstate
;
149 /* Internal functions *********************************************************/
153 VOID FASTCALL
DC_vUpdateFillBrush(PDC pdc
);
154 VOID FASTCALL
DC_vUpdateLineBrush(PDC pdc
);
155 VOID FASTCALL
DC_vUpdateTextBrush(PDC pdc
);
156 VOID FASTCALL
DC_vUpdateBackgroundBrush(PDC pdc
);
163 BOOL ForceBackground
);
169 IntGdiSetBkColor (HDC hDC
, COLORREF Color
);
170 INT FASTCALL
IntGdiSetBkMode(HDC hDC
, INT backgroundMode
);
171 COLORREF FASTCALL
IntGdiSetTextColor(HDC hDC
, COLORREF color
);
172 UINT FASTCALL
IntGdiSetTextAlign(HDC hDC
, UINT Mode
);
173 VOID FASTCALL
DCU_SetDcUndeletable(HDC
);
174 BOOL FASTCALL
IntSetDefaultRegion(PDC
);
175 ULONG
TranslateCOLORREF(PDC pdc
, COLORREF crColor
);
179 INIT_FUNCTION NTSTATUS NTAPI
InitDcImpl(VOID
);
180 PPDEVOBJ FASTCALL
IntEnumHDev(VOID
);
181 PDC NTAPI
DC_AllocDcWithHandle(VOID
);
182 BOOL NTAPI
DC_bAllocDcAttr(PDC pdc
);
183 BOOL NTAPI
DC_Cleanup(PVOID ObjectBody
);
184 BOOL FASTCALL
IntGdiDeleteDC(HDC
, BOOL
);
186 BOOL FASTCALL
DC_InvertXform(const XFORM
*xformSrc
, XFORM
*xformDest
);
187 VOID FASTCALL
DC_vUpdateViewportExt(PDC pdc
);
188 VOID FASTCALL
DC_vCopyState(PDC pdcSrc
, PDC pdcDst
, BOOL to
);
189 VOID FASTCALL
DC_vFinishBlit(PDC pdc1
, PDC pdc2
);
190 VOID FASTCALL
DC_vPrepareDCsForBlit(PDC pdc1
, RECT rc1
, PDC pdc2
, RECT rc2
);
192 VOID NTAPI
DC_vRestoreDC(IN PDC pdc
, INT iSaveLevel
);
194 VOID NTAPI
DC_vFreeDcAttr(PDC pdc
);
195 VOID NTAPI
DC_vInitDc(PDC pdc
, DCTYPE dctype
, PPDEVOBJ ppdev
);
197 VOID FASTCALL
IntGdiReferencePdev(PPDEVOBJ pPDev
);
198 VOID FASTCALL
IntGdiUnreferencePdev(PPDEVOBJ pPDev
, DWORD CleanUpType
);
199 HDC FASTCALL
IntGdiCreateDisplayDC(HDEV hDev
, ULONG DcType
, BOOL EmptyDC
);
200 BOOL FASTCALL
IntGdiCleanDC(HDC hDC
);
201 VOID FASTCALL
IntvGetDeviceCaps(PPDEVOBJ
, PDEVCAPS
);
203 BOOL NTAPI
GreSetDCOwner(HDC hdc
, ULONG ulOwner
);
207 DC_vSetBrushOrigin(PDC pdc
, LONG x
, LONG y
);
213 //if (GDI_HANDLE_GET_TYPE(hdc) != GDILoObjType_LO_DC_TYPE) return NULL; ???
214 return GDIOBJ_LockObject(hdc
, GDIObjType_DC_TYPE
);
221 GDIOBJ_vUnlockObject(&pdc
->BaseObject
);
226 DC_vSelectSurface(PDC pdc
, PSURFACE psurfNew
)
228 PSURFACE psurfOld
= pdc
->dclevel
.pSurface
;
231 psurfOld
->hdc
= NULL
;
232 SURFACE_ShareUnlockSurface(psurfOld
);
235 GDIOBJ_vReferenceObjectByPointer((POBJ
)psurfNew
);
236 pdc
->dclevel
.pSurface
= psurfNew
;
241 DC_vSelectFillBrush(PDC pdc
, PBRUSH pbrFill
)
243 PBRUSH pbrFillOld
= pdc
->dclevel
.pbrFill
;
245 BRUSH_ShareUnlockBrush(pbrFillOld
);
247 GDIOBJ_vReferenceObjectByPointer((POBJ
)pbrFill
);
248 pdc
->dclevel
.pbrFill
= pbrFill
;
253 DC_vSelectLineBrush(PDC pdc
, PBRUSH pbrLine
)
255 PBRUSH pbrLineOld
= pdc
->dclevel
.pbrLine
;
257 BRUSH_ShareUnlockBrush(pbrLineOld
);
259 GDIOBJ_vReferenceObjectByPointer((POBJ
)pbrLine
);
260 pdc
->dclevel
.pbrLine
= pbrLine
;
265 DC_vSelectPalette(PDC pdc
, PPALETTE ppal
)
267 PPALETTE ppalOld
= pdc
->dclevel
.ppal
;
269 PALETTE_ShareUnlockPalette(ppalOld
);
271 GDIOBJ_vReferenceObjectByPointer((POBJ
)ppal
);
272 pdc
->dclevel
.ppal
= ppal
;
275 extern _Notnull_ PBRUSH pbrDefaultBrush
;
276 extern _Notnull_ PSURFACE psurfDefaultBitmap
;
278 #endif /* not __WIN32K_DC_H */