[CMAKE]
[reactos.git] / subsystems / win32 / win32k / include / dc.h
index 61c09f8..a3c685e 100644 (file)
@@ -3,10 +3,12 @@
 
 typedef struct _DC *PDC;
 
+#include "engobjects.h"
 #include "brush.h"
 #include "bitmaps.h"
 #include "pdevobj.h"
 #include "palette.h"
+#include "region.h"
 
 /* Constants ******************************************************************/
 
@@ -50,28 +52,11 @@ typedef enum
 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;
@@ -88,8 +73,8 @@ typedef struct _DCLEVEL
   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;
@@ -138,9 +123,9 @@ typedef struct _DC
   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;
@@ -164,41 +149,13 @@ typedef struct _DC
 
 /* 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);
@@ -209,11 +166,13 @@ 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);
 
@@ -237,6 +196,24 @@ VOID FASTCALL IntGdiUnreferencePdev(PPDEVOBJ pPDev, DWORD CleanUpType);
 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
@@ -244,9 +221,12 @@ DC_vSelectSurface(PDC pdc, PSURFACE psurfNew)
 {
     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;
 }
 
@@ -258,7 +238,7 @@ DC_vSelectFillBrush(PDC pdc, PBRUSH pbrFill)
     if (pbrFillOld)
         BRUSH_ShareUnlockBrush(pbrFillOld);
     if (pbrFill)
-        GDIOBJ_IncrementShareCount((POBJ)pbrFill);
+        GDIOBJ_vReferenceObjectByPointer((POBJ)pbrFill);
     pdc->dclevel.pbrFill = pbrFill;
 }
 
@@ -270,7 +250,7 @@ DC_vSelectLineBrush(PDC pdc, PBRUSH pbrLine)
     if (pbrLineOld)
         BRUSH_ShareUnlockBrush(pbrLineOld);
     if (pbrLine)
-        GDIOBJ_IncrementShareCount((POBJ)pbrLine);
+        GDIOBJ_vReferenceObjectByPointer((POBJ)pbrLine);
     pdc->dclevel.pbrLine = pbrLine;
 }
 
@@ -282,8 +262,10 @@ DC_vSelectPalette(PDC pdc, PPALETTE ppal)
     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 */