typedef struct _DC *PDC;
+#include "engobjects.h"
#include "brush.h"
#include "bitmaps.h"
#include "pdevobj.h"
#include "palette.h"
+#include "region.h"
/* Constants ******************************************************************/
typedef struct _ROS_DC_INFO
{
HRGN hClipRgn; /* Clip region (may be 0) */
- HRGN hVisRgn; /* Visible region (must never be 0) */
HRGN hGCClipRgn; /* GC clip region (ClipRgn AND VisRgn) */
- BYTE bitsPerPixel;
-
CLIPOBJ *CombinedClip;
-
- 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;
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;
/* Internal functions *********************************************************/
-#if 0
-#define DC_LockDc(hDC) \
- ((PDC) GDIOBJ_LockObj ((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC))
-#define DC_UnlockDc(pDC) \
- GDIOBJ_UnlockObjByPtr ((POBJ)pDC)
-#endif
-
-VOID NTAPI EngAcquireSemaphoreShared(IN HSEMAPHORE hsem);
-
-PDC
-FORCEINLINE
-DC_LockDc(HDC hdc)
-{
- PDC pdc;
- pdc = GDIOBJ_LockObj(hdc, GDI_OBJECT_TYPE_DC);
-// EngAcquireSemaphoreShared(pdc->ppdev->hsemDevLock);
- return pdc;
-}
-
-void
-FORCEINLINE
-DC_UnlockDc(PDC pdc)
-{
-// EngReleaseSemaphore(pdc->ppdev->hsemDevLock);
- GDIOBJ_UnlockObjByPtr(&pdc->BaseObject);
-}
-
-
extern PDC defaultDCstate;
-NTSTATUS FASTCALL InitDcImpl(VOID);
+INIT_FUNCTION NTSTATUS NTAPI InitDcImpl(VOID);
PPDEVOBJ FASTCALL IntEnumHDev(VOID);
-PDC NTAPI DC_AllocDcWithHandle();
+PDC NTAPI DC_AllocDcWithHandle(VOID);
VOID FASTCALL DC_InitDC(HDC DCToInit);
-VOID FASTCALL DC_AllocateDcAttr(HDC);
+BOOL NTAPI DC_bAllocDcAttr(PDC pdc);
VOID FASTCALL DC_FreeDcAttr(HDC);
BOOL INTERNAL_CALL DC_Cleanup(PVOID ObjectBody);
BOOL FASTCALL DC_SetOwnership(HDC hDC, PEPROCESS Owner);
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);
HDC FASTCALL IntGdiCreateDisplayDC(HDEV hDev, ULONG DcType, BOOL EmptyDC);
BOOL FASTCALL IntGdiCleanDC(HDC hDC);
VOID FASTCALL IntvGetDeviceCaps(PPDEVOBJ, PDEVCAPS);
+BOOL FASTCALL MakeInfoDC(PDC,BOOL);
+BOOL FASTCALL IntSetDefaultRegion(PDC);
+BOOL NTAPI GreSetDCOwner(HDC hdc, ULONG ulOwner);
+
+FORCEINLINE
+PDC
+DC_LockDc(HDC hdc)
+{
+ //if (GDI_HANDLE_GET_TYPE(hdc) != GDILoObjType_LO_DC_TYPE) return NULL; ???
+ return GDIOBJ_LockObject(hdc, GDIObjType_DC_TYPE);
+}
+
+FORCEINLINE
+VOID
+DC_UnlockDc(PDC pdc)
+{
+ GDIOBJ_vUnlockObject(&pdc->BaseObject);
+}
VOID
FORCEINLINE
{
PSURFACE psurfOld = pdc->dclevel.pSurface;
if (psurfOld)
+ {
+ psurfOld->hdc = NULL;
SURFACE_ShareUnlockSurface(psurfOld);
+ }
if (psurfNew)
- GDIOBJ_IncrementShareCount((POBJ)psurfNew);
+ GDIOBJ_vReferenceObjectByPointer((POBJ)psurfNew);
pdc->dclevel.pSurface = psurfNew;
}
if (pbrFillOld)
BRUSH_ShareUnlockBrush(pbrFillOld);
if (pbrFill)
- GDIOBJ_IncrementShareCount((POBJ)pbrFill);
+ GDIOBJ_vReferenceObjectByPointer((POBJ)pbrFill);
pdc->dclevel.pbrFill = pbrFill;
}
if (pbrLineOld)
BRUSH_ShareUnlockBrush(pbrLineOld);
if (pbrLine)
- GDIOBJ_IncrementShareCount((POBJ)pbrLine);
+ GDIOBJ_vReferenceObjectByPointer((POBJ)pbrLine);
pdc->dclevel.pbrLine = pbrLine;
}
if (ppalOld)
PALETTE_ShareUnlockPalette(ppalOld);
if (ppal)
- GDIOBJ_IncrementShareCount((POBJ)ppal);
+ GDIOBJ_vReferenceObjectByPointer((POBJ)ppal);
pdc->dclevel.ppal = ppal;
}
+extern PBRUSH pbrDefaultBrush ;
+
#endif /* not __WIN32K_DC_H */