#ifndef __WIN32K_DC_H
#define __WIN32K_DC_H
+typedef struct _DC *PDC;
+
+#include "engobjects.h"
#include "brush.h"
#include "bitmaps.h"
#include "pdevobj.h"
+#include "palette.h"
+#include "region.h"
/* Constants ******************************************************************/
/* Get/SetBounds/Rect support. */
#define DCB_WINDOWMGR 0x8000 /* Queries the Windows bounding rectangle instead of the application's */
+/* flFontState */
+#define DC_DIRTYFONT_XFORM 1
+#define DC_DIRTYFONT_LFONT 2
+#define DC_UFI_MAPPING 4
+
+/* fl */
+#define DC_FL_PAL_BACK 1
+
+#define DC_DISPLAY 1
+#define DC_DIRECT 2
+#define DC_CANCELED 4
+#define DC_PERMANANT 0x08
+#define DC_DIRTY_RAO 0x10
+#define DC_ACCUM_WMGR 0x20
+#define DC_ACCUM_APP 0x40
+#define DC_RESET 0x80
+#define DC_SYNCHRONIZEACCESS 0x100
+#define DC_EPSPRINTINGESCAPE 0x200
+#define DC_TEMPINFODC 0x400
+#define DC_FULLSCREEN 0x800
+#define DC_IN_CLONEPDEV 0x1000
+#define DC_REDIRECTION 0x2000
+#define DC_SHAREACCESS 0x4000
+
+typedef enum
+{
+ DCTYPE_DIRECT = 0,
+ DCTYPE_MEMORY = 1,
+ DCTYPE_INFO = 2,
+} DCTYPE;
+
+
/* Type definitions ***********************************************************/
typedef struct _ROS_DC_INFO
{
HRGN hClipRgn; /* Clip region (may be 0) */
- HRGN hVisRgn; /* Should me to DC. Visible region (must never be 0) */
HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */
- HBITMAP hBitmap;
-
- BYTE bitsPerPixel;
CLIPOBJ *CombinedClip;
- XLATEOBJ *XlateBrush;
- XLATEOBJ *XlatePen;
UNICODE_STRING DriverName;
} ROS_DC_INFO;
-/* EXtended CLip and Window Region Object */
-typedef struct _XCLIPOBJ
-{
- WNDOBJ eClipWnd;
- PVOID pClipRgn; /* prgnRao_ or (prgnVis_ if (prgnRao_ == z)) */
- DWORD Unknown1[16];
- DWORD nComplexity; /* count/mode based on # of rect in regions scan. */
- PVOID pUnknown; /* UnK pointer to a large drawing structure. */
- /* We will use it for CombinedClip ptr. */
-} XCLIPOBJ, *PXCLIPOBJ;
-
typedef struct _DCLEVEL
{
HPALETTE hpal;
- struct _PALGDI * ppal;
+ struct _PALETTE * ppal;
PVOID pColorSpace; /* COLORSPACE* */
LONG lIcmMode;
LONG lSaveDepth;
HGDIOBJ hPath; /* HPATH */
FLONG flPath;
LINEATTRS laPath; /* 0x20 bytes */
- PVOID prgnClip; /* PROSRGNDATA */
- PVOID prgnMeta;
+ PREGION prgnClip;
+ PREGION prgnMeta;
COLORADJUSTMENT ca;
FLONG flFontState;
UNIVERSAL_FONT_ID ufi;
RECTL erclWindow;
RECTL erclBounds;
RECTL erclBoundsApp;
- PVOID prgnAPI; /* PROSRGNDATA */
- PVOID prgnVis;
- PVOID prgnRao;
+ PREGION prgnAPI;
+ PREGION prgnVis; /* Visible region (must never be 0) */
+ PREGION prgnRao;
POINTL ptlFillOrigin;
EBRUSHOBJ eboFill;
EBRUSHOBJ eboLine;
/* Reactos specific members */
ROS_DC_INFO rosdc;
-} DC, *PDC;
+} DC;
/* Internal functions *********************************************************/
extern PDC defaultDCstate;
-NTSTATUS FASTCALL InitDcImpl(VOID);
+INIT_FUNCTION NTSTATUS NTAPI InitDcImpl();
PPDEVOBJ FASTCALL IntEnumHDev(VOID);
-HDC FASTCALL DC_AllocDC(PUNICODE_STRING Driver);
+PDC NTAPI DC_AllocDcWithHandle();
VOID FASTCALL DC_InitDC(HDC DCToInit);
-HDC FASTCALL DC_FindOpenDC(PUNICODE_STRING Driver);
-VOID FASTCALL DC_FreeDC(HDC);
VOID FASTCALL DC_AllocateDcAttr(HDC);
VOID FASTCALL DC_FreeDcAttr(HDC);
BOOL INTERNAL_CALL DC_Cleanup(PVOID ObjectBody);
-BOOL FASTCALL DC_SetOwnership(HDC DC, PEPROCESS Owner);
+BOOL FASTCALL DC_SetOwnership(HDC hDC, PEPROCESS Owner);
VOID FASTCALL DC_LockDisplay(HDC);
VOID FASTCALL DC_UnlockDisplay(HDC);
BOOL FASTCALL IntGdiDeleteDC(HDC, BOOL);
VOID FASTCALL DC_UpdateXforms(PDC dc);
BOOL FASTCALL DC_InvertXform(const XFORM *xformSrc, XFORM *xformDest);
VOID FASTCALL DC_vUpdateViewportExt(PDC pdc);
-VOID FASTCALL DC_vCopyState(PDC pdcSrc, PDC pdcDst);
+VOID FASTCALL DC_vCopyState(PDC pdcSrc, PDC pdcDst, BOOL to);
VOID FASTCALL DC_vUpdateFillBrush(PDC pdc);
VOID FASTCALL DC_vUpdateLineBrush(PDC pdc);
VOID FASTCALL DC_vUpdateTextBrush(PDC pdc);
VOID FASTCALL DC_vUpdateBackgroundBrush(PDC pdc);
+VOID FASTCALL DC_vFinishBlit(PDC pdc1, PDC pdc2);
+VOID FASTCALL DC_vPrepareDCsForBlit(PDC pdc1, RECT rc1, PDC pdc2, RECT rc2);
+
+VOID NTAPI DC_vRestoreDC(IN PDC pdc, INT iSaveLevel);
BOOL FASTCALL DCU_SyncDcAttrtoUser(PDC);
BOOL FASTCALL DCU_SynchDcAttrtoUser(HDC);
VOID FASTCALL DCU_SetDcUndeletable(HDC);
+VOID NTAPI DC_vFreeDcAttr(PDC pdc);
+VOID NTAPI DC_vInitDc(PDC pdc, DCTYPE dctype, PPDEVOBJ ppdev);
COLORREF FASTCALL IntGdiSetBkColor (HDC hDC, COLORREF Color);
INT FASTCALL IntGdiSetBkMode(HDC hDC, INT backgroundMode);
HDC FASTCALL IntGdiCreateDisplayDC(HDEV hDev, ULONG DcType, BOOL EmptyDC);
BOOL FASTCALL IntGdiCleanDC(HDC hDC);
VOID FASTCALL IntvGetDeviceCaps(PPDEVOBJ, PDEVCAPS);
-INT FASTCALL IntGdiGetDeviceCaps(PDC,INT);
-
-extern PPDEVOBJ pPrimarySurface;
+BOOL FASTCALL MakeInfoDC(PDC,BOOL);
+BOOL FASTCALL IntSetDefaultRegion(PDC);
VOID
FORCEINLINE
{
PSURFACE psurfOld = pdc->dclevel.pSurface;
if (psurfOld)
+ {
+ psurfOld->hdc = NULL;
SURFACE_ShareUnlockSurface(psurfOld);
+ }
if (psurfNew)
GDIOBJ_IncrementShareCount((POBJ)psurfNew);
pdc->dclevel.pSurface = psurfNew;
pdc->dclevel.pbrLine = pbrLine;
}
-BOOL FASTCALL
-IntPrepareDriverIfNeeded();
-extern PDEVOBJ PrimarySurface;
+VOID
+FORCEINLINE
+DC_vSelectPalette(PDC pdc, PPALETTE ppal)
+{
+ PPALETTE ppalOld = pdc->dclevel.ppal;
+ if (ppalOld)
+ PALETTE_ShareUnlockPalette(ppalOld);
+ if (ppal)
+ GDIOBJ_IncrementShareCount((POBJ)ppal);
+ pdc->dclevel.ppal = ppal;
+}
+
+extern PBRUSH pbrDefaultBrush ;
#endif /* not __WIN32K_DC_H */