4 typedef struct _DC
*PDC
;
6 #include "engobjects.h"
13 /* Constants ******************************************************************/
15 /* Get/SetBounds/Rect support. */
16 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
19 #define DC_DIRTYFONT_XFORM 1
20 #define DC_DIRTYFONT_LFONT 2
21 #define DC_UFI_MAPPING 4
24 #define DC_FL_PAL_BACK 1
29 #define DC_PERMANANT 0x08
30 #define DC_DIRTY_RAO 0x10
31 #define DC_ACCUM_WMGR 0x20
32 #define DC_ACCUM_APP 0x40
34 #define DC_SYNCHRONIZEACCESS 0x100
35 #define DC_EPSPRINTINGESCAPE 0x200
36 #define DC_TEMPINFODC 0x400
37 #define DC_FULLSCREEN 0x800
38 #define DC_IN_CLONEPDEV 0x1000
39 #define DC_REDIRECTION 0x2000
40 #define DC_SHAREACCESS 0x4000
50 /* Type definitions ***********************************************************/
52 typedef struct _ROS_DC_INFO
54 HRGN hClipRgn
; /* Clip region (may be 0) */
55 HRGN hGCClipRgn
; /* GC clip region (ClipRgn AND VisRgn) */
57 CLIPOBJ
*CombinedClip
;
60 typedef struct _DCLEVEL
63 struct _PALETTE
* ppal
;
64 PVOID pColorSpace
; /* COLORSPACE* */
69 POINTL ptlBrushOrigin
;
72 PVOID plfnt
; /* LFONTOBJ* (TEXTOBJ*) */
73 HGDIOBJ hPath
; /* HPATH */
75 LINEATTRS laPath
; /* 0x20 bytes */
80 UNIVERSAL_FONT_ID ufi
;
81 UNIVERSAL_FONT_ID ufiLoc
[4]; /* Local List. */
82 UNIVERSAL_FONT_ID
*pUFI
;
87 MATRIX mxWorldToDevice
;
88 MATRIX mxDeviceToWorld
;
100 } DCLEVEL
, *PDCLEVEL
;
102 /* The DC object structure */
105 /* Header for all gdi objects in the handle table.
106 Do not (re)move this. */
107 BASEOBJECT BaseObject
;
109 DHPDEV dhpdev
; /* <- PDEVOBJ.hPDev DHPDEV for device. */
113 PVOID hsem
; /* PERESOURCE aka HSEMAPHORE */
114 FLONG flGraphicsCaps
;
115 FLONG flGraphicsCaps2
;
127 PREGION prgnVis
; /* Visible region (must never be 0) */
129 POINTL ptlFillOrigin
;
133 EBRUSHOBJ eboBackground
;
135 FLONG flSimulationFlags
;
137 PVOID prfnt
; /* RFONT* */
138 XCLIPOBJ co
; /* CLIPOBJ */
139 PVOID pPFFList
; /* PPFF* */
146 /* Reactos specific members */
150 /* Internal functions *********************************************************/
152 extern PDC defaultDCstate
;
154 INIT_FUNCTION NTSTATUS NTAPI
InitDcImpl(VOID
);
155 PPDEVOBJ FASTCALL
IntEnumHDev(VOID
);
156 PDC NTAPI
DC_AllocDcWithHandle(VOID
);
157 VOID FASTCALL
DC_InitDC(HDC DCToInit
);
158 BOOL NTAPI
DC_bAllocDcAttr(PDC pdc
);
159 VOID FASTCALL
DC_FreeDcAttr(HDC
);
160 BOOL INTERNAL_CALL
DC_Cleanup(PVOID ObjectBody
);
161 BOOL FASTCALL
DC_SetOwnership(HDC hDC
, PEPROCESS Owner
);
162 VOID FASTCALL
DC_LockDisplay(HDC
);
163 VOID FASTCALL
DC_UnlockDisplay(HDC
);
164 BOOL FASTCALL
IntGdiDeleteDC(HDC
, BOOL
);
166 VOID FASTCALL
DC_UpdateXforms(PDC dc
);
167 BOOL FASTCALL
DC_InvertXform(const XFORM
*xformSrc
, XFORM
*xformDest
);
168 VOID FASTCALL
DC_vUpdateViewportExt(PDC pdc
);
169 VOID FASTCALL
DC_vCopyState(PDC pdcSrc
, PDC pdcDst
, BOOL to
);
170 VOID FASTCALL
DC_vUpdateFillBrush(PDC pdc
);
171 VOID FASTCALL
DC_vUpdateLineBrush(PDC pdc
);
172 VOID FASTCALL
DC_vUpdateTextBrush(PDC pdc
);
173 VOID FASTCALL
DC_vUpdateBackgroundBrush(PDC pdc
);
174 VOID FASTCALL
DC_vFinishBlit(PDC pdc1
, PDC pdc2
);
175 VOID FASTCALL
DC_vPrepareDCsForBlit(PDC pdc1
, RECT rc1
, PDC pdc2
, RECT rc2
);
177 VOID NTAPI
DC_vRestoreDC(IN PDC pdc
, INT iSaveLevel
);
179 BOOL FASTCALL
DCU_SyncDcAttrtoUser(PDC
);
180 BOOL FASTCALL
DCU_SynchDcAttrtoUser(HDC
);
181 VOID FASTCALL
DCU_SetDcUndeletable(HDC
);
182 VOID NTAPI
DC_vFreeDcAttr(PDC pdc
);
183 VOID NTAPI
DC_vInitDc(PDC pdc
, DCTYPE dctype
, PPDEVOBJ ppdev
);
185 COLORREF FASTCALL
IntGdiSetBkColor (HDC hDC
, COLORREF Color
);
186 INT FASTCALL
IntGdiSetBkMode(HDC hDC
, INT backgroundMode
);
187 COLORREF APIENTRY
IntGdiGetBkColor(HDC hDC
);
188 INT APIENTRY
IntGdiGetBkMode(HDC hDC
);
189 COLORREF FASTCALL
IntGdiSetTextColor(HDC hDC
, COLORREF color
);
190 UINT FASTCALL
IntGdiSetTextAlign(HDC hDC
, UINT Mode
);
191 UINT APIENTRY
IntGdiGetTextAlign(HDC hDC
);
192 COLORREF APIENTRY
IntGdiGetTextColor(HDC hDC
);
193 INT APIENTRY
IntGdiSetStretchBltMode(HDC hDC
, INT stretchBltMode
);
194 VOID FASTCALL
IntGdiReferencePdev(PPDEVOBJ pPDev
);
195 VOID FASTCALL
IntGdiUnreferencePdev(PPDEVOBJ pPDev
, DWORD CleanUpType
);
196 HDC FASTCALL
IntGdiCreateDisplayDC(HDEV hDev
, ULONG DcType
, BOOL EmptyDC
);
197 BOOL FASTCALL
IntGdiCleanDC(HDC hDC
);
198 VOID FASTCALL
IntvGetDeviceCaps(PPDEVOBJ
, PDEVCAPS
);
199 BOOL FASTCALL
MakeInfoDC(PDC
,BOOL
);
200 BOOL FASTCALL
IntSetDefaultRegion(PDC
);
201 BOOL NTAPI
GreSetDCOwner(HDC hdc
, ULONG ulOwner
);
207 //if (GDI_HANDLE_GET_TYPE(hdc) != GDILoObjType_LO_DC_TYPE) return NULL; ???
208 return GDIOBJ_LockObject(hdc
, GDIObjType_DC_TYPE
);
215 GDIOBJ_vUnlockObject(&pdc
->BaseObject
);
220 DC_vSelectSurface(PDC pdc
, PSURFACE psurfNew
)
222 PSURFACE psurfOld
= pdc
->dclevel
.pSurface
;
225 psurfOld
->hdc
= NULL
;
226 SURFACE_ShareUnlockSurface(psurfOld
);
229 GDIOBJ_vReferenceObjectByPointer((POBJ
)psurfNew
);
230 pdc
->dclevel
.pSurface
= psurfNew
;
235 DC_vSelectFillBrush(PDC pdc
, PBRUSH pbrFill
)
237 PBRUSH pbrFillOld
= pdc
->dclevel
.pbrFill
;
239 BRUSH_ShareUnlockBrush(pbrFillOld
);
241 GDIOBJ_vReferenceObjectByPointer((POBJ
)pbrFill
);
242 pdc
->dclevel
.pbrFill
= pbrFill
;
247 DC_vSelectLineBrush(PDC pdc
, PBRUSH pbrLine
)
249 PBRUSH pbrLineOld
= pdc
->dclevel
.pbrLine
;
251 BRUSH_ShareUnlockBrush(pbrLineOld
);
253 GDIOBJ_vReferenceObjectByPointer((POBJ
)pbrLine
);
254 pdc
->dclevel
.pbrLine
= pbrLine
;
259 DC_vSelectPalette(PDC pdc
, PPALETTE ppal
)
261 PPALETTE ppalOld
= pdc
->dclevel
.ppal
;
263 PALETTE_ShareUnlockPalette(ppalOld
);
265 GDIOBJ_vReferenceObjectByPointer((POBJ
)ppal
);
266 pdc
->dclevel
.ppal
= ppal
;
269 extern PBRUSH pbrDefaultBrush
;
271 #endif /* not __WIN32K_DC_H */