3 typedef struct _DC
*PDC
;
5 #include "engobjects.h"
11 /* Constants ******************************************************************/
13 /* Get/SetBounds/Rect support. */
14 #define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
17 #define DC_DIRTYFONT_XFORM 1
18 #define DC_DIRTYFONT_LFONT 2
19 #define DC_UFI_MAPPING 4
22 #define DC_FL_PAL_BACK 1
24 /* Type definitions ***********************************************************/
26 typedef struct _ROS_DC_INFO
28 HRGN hClipRgn
; /* Clip region (may be 0) */
29 HRGN hVisRgn
; /* Visible region (must never be 0) */
30 HRGN hGCClipRgn
; /* GC clip region (ClipRgn AND VisRgn) */
32 CLIPOBJ
*CombinedClip
; /* Use XCLIPOBJ in DC. */
34 UNICODE_STRING DriverName
;
38 typedef struct _DCLEVEL
41 struct _PALETTE
* ppal
;
42 PVOID pColorSpace
; /* COLORSPACE* */
47 POINTL ptlBrushOrigin
;
50 PVOID plfnt
; /* LFONTOBJ* (TEXTOBJ*) */
51 HGDIOBJ hPath
; /* HPATH */
53 LINEATTRS laPath
; /* 0x20 bytes */
54 PVOID prgnClip
; /* PROSRGNDATA */
58 UNIVERSAL_FONT_ID ufi
;
59 UNIVERSAL_FONT_ID ufiLoc
[4]; /* Local List. */
60 UNIVERSAL_FONT_ID
*pUFI
;
65 MATRIX mxWorldToDevice
;
66 MATRIX mxDeviceToWorld
;
80 /* The DC object structure */
83 /* Header for all gdi objects in the handle table.
84 Do not (re)move this. */
85 BASEOBJECT BaseObject
;
87 DHPDEV dhpdev
; /* <- PDEVOBJ.hPDev DHPDEV for device. */
91 PVOID hsem
; /* PERESOURCE aka HSEMAPHORE */
93 FLONG flGraphicsCaps2
;
104 PVOID prgnAPI
; /* PROSRGNDATA */
107 POINTL ptlFillOrigin
;
111 EBRUSHOBJ eboBackground
;
113 FLONG flSimulationFlags
;
115 PVOID prfnt
; /* RFONT* */
116 XCLIPOBJ co
; /* CLIPOBJ */
117 PVOID pPFFList
; /* PPFF* */
124 /* Reactos specific members */
128 /* Internal functions *********************************************************/
130 #define DC_LockDc(hDC) \
131 ((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
132 #define DC_UnlockDc(pDC) \
133 GDIOBJ_UnlockObjByPtr ((POBJ)pDC)
135 extern PDC defaultDCstate
;
137 NTSTATUS FASTCALL
InitDcImpl(VOID
);
138 PPDEVOBJ FASTCALL
IntEnumHDev(VOID
);
139 HDC FASTCALL
DC_AllocDC(PUNICODE_STRING Driver
);
140 VOID FASTCALL
DC_InitDC(HDC DCToInit
);
141 HDC FASTCALL
DC_FindOpenDC(PUNICODE_STRING Driver
);
142 VOID FASTCALL
DC_AllocateDcAttr(HDC
);
143 VOID FASTCALL
DC_FreeDcAttr(HDC
);
144 BOOL INTERNAL_CALL
DC_Cleanup(PVOID ObjectBody
);
145 BOOL FASTCALL
DC_SetOwnership(HDC DC
, PEPROCESS Owner
);
146 VOID FASTCALL
DC_LockDisplay(HDC
);
147 VOID FASTCALL
DC_UnlockDisplay(HDC
);
148 BOOL FASTCALL
IntGdiDeleteDC(HDC
, BOOL
);
150 VOID FASTCALL
DC_UpdateXforms(PDC dc
);
151 BOOL FASTCALL
DC_InvertXform(const XFORM
*xformSrc
, XFORM
*xformDest
);
152 VOID FASTCALL
DC_vUpdateViewportExt(PDC pdc
);
153 VOID FASTCALL
DC_vCopyState(PDC pdcSrc
, PDC pdcDst
, BOOL to
);
154 VOID FASTCALL
DC_vUpdateFillBrush(PDC pdc
);
155 VOID FASTCALL
DC_vUpdateLineBrush(PDC pdc
);
156 VOID FASTCALL
DC_vUpdateTextBrush(PDC pdc
);
157 VOID FASTCALL
DC_vUpdateBackgroundBrush(PDC pdc
);
159 BOOL FASTCALL
DCU_SyncDcAttrtoUser(PDC
);
160 BOOL FASTCALL
DCU_SynchDcAttrtoUser(HDC
);
161 VOID FASTCALL
DCU_SetDcUndeletable(HDC
);
163 COLORREF FASTCALL
IntGdiSetBkColor (HDC hDC
, COLORREF Color
);
164 INT FASTCALL
IntGdiSetBkMode(HDC hDC
, INT backgroundMode
);
165 COLORREF APIENTRY
IntGdiGetBkColor(HDC hDC
);
166 INT APIENTRY
IntGdiGetBkMode(HDC hDC
);
167 COLORREF FASTCALL
IntGdiSetTextColor(HDC hDC
, COLORREF color
);
168 UINT FASTCALL
IntGdiSetTextAlign(HDC hDC
, UINT Mode
);
169 UINT APIENTRY
IntGdiGetTextAlign(HDC hDC
);
170 COLORREF APIENTRY
IntGdiGetTextColor(HDC hDC
);
171 INT APIENTRY
IntGdiSetStretchBltMode(HDC hDC
, INT stretchBltMode
);
172 VOID FASTCALL
IntGdiReferencePdev(PPDEVOBJ pPDev
);
173 VOID FASTCALL
IntGdiUnreferencePdev(PPDEVOBJ pPDev
, DWORD CleanUpType
);
174 HDC FASTCALL
IntGdiCreateDisplayDC(HDEV hDev
, ULONG DcType
, BOOL EmptyDC
);
175 BOOL FASTCALL
IntGdiCleanDC(HDC hDC
);
176 VOID FASTCALL
IntvGetDeviceCaps(PPDEVOBJ
, PDEVCAPS
);
177 INT FASTCALL
IntGdiGetDeviceCaps(PDC
,INT
);
178 BOOL FASTCALL
MakeInfoDC(PDC
,BOOL
);
179 BOOL FASTCALL
IntSetDefaultRegion(PDC
);
181 extern PPDEVOBJ pPrimarySurface
;
185 DC_vSelectSurface(PDC pdc
, PSURFACE psurfNew
)
187 PSURFACE psurfOld
= pdc
->dclevel
.pSurface
;
189 SURFACE_ShareUnlockSurface(psurfOld
);
191 GDIOBJ_IncrementShareCount((POBJ
)psurfNew
);
192 pdc
->dclevel
.pSurface
= psurfNew
;
197 DC_vSelectFillBrush(PDC pdc
, PBRUSH pbrFill
)
199 PBRUSH pbrFillOld
= pdc
->dclevel
.pbrFill
;
201 BRUSH_ShareUnlockBrush(pbrFillOld
);
203 GDIOBJ_IncrementShareCount((POBJ
)pbrFill
);
204 pdc
->dclevel
.pbrFill
= pbrFill
;
209 DC_vSelectLineBrush(PDC pdc
, PBRUSH pbrLine
)
211 PBRUSH pbrLineOld
= pdc
->dclevel
.pbrLine
;
213 BRUSH_ShareUnlockBrush(pbrLineOld
);
215 GDIOBJ_IncrementShareCount((POBJ
)pbrLine
);
216 pdc
->dclevel
.pbrLine
= pbrLine
;
221 DC_vSelectPalette(PDC pdc
, PPALETTE ppal
)
223 PPALETTE ppalOld
= pdc
->dclevel
.ppal
;
225 PALETTE_ShareUnlockPalette(ppalOld
);
227 GDIOBJ_IncrementShareCount((POBJ
)ppal
);
228 pdc
->dclevel
.ppal
= ppal
;
231 BOOL FASTCALL
IntPrepareDriverIfNeeded(VOID
);
232 extern PDEVOBJ PrimarySurface
;