[CMAKE]
[reactos.git] / subsystems / win32 / win32k / include / dc.h
index 0840c31..a3c685e 100644 (file)
@@ -55,9 +55,6 @@ typedef struct _ROS_DC_INFO
   HRGN     hGCClipRgn;   /* GC clip region (ClipRgn AND VisRgn) */
 
   CLIPOBJ     *CombinedClip;
-
-  UNICODE_STRING    DriverName;
-
 } ROS_DC_INFO;
 
 typedef struct _DCLEVEL
@@ -76,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;
@@ -126,7 +123,7 @@ typedef struct _DC
   RECTL       erclWindow;
   RECTL       erclBounds;
   RECTL       erclBoundsApp;
-  PREGION     prgnAPI; /* PROSRGNDATA */
+  PREGION     prgnAPI;
   PREGION     prgnVis; /* Visible region (must never be 0) */
   PREGION     prgnRao;
   POINTL      ptlFillOrigin;
@@ -152,59 +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, GDILoObjType_LO_DC_TYPE);
-
-    /* Direct DC's need PDEV locking */
-    if(pdc && pdc->dctype == DCTYPE_DIRECT)
-    {
-        /* Acquire shared PDEV lock */
-        EngAcquireSemaphoreShared(pdc->ppdev->hsemDevLock);
-
-        /* Update Surface if needed */
-        if(pdc->dclevel.pSurface != pdc->ppdev->pSurface)
-        {
-            if(pdc->dclevel.pSurface) SURFACE_ShareUnlockSurface(pdc->dclevel.pSurface);
-            pdc->dclevel.pSurface = PDEVOBJ_pSurface(pdc->ppdev);
-        }
-    }
-    return pdc;
-}
-
-void
-FORCEINLINE
-DC_UnlockDc(PDC pdc)
-{
-    if(pdc->dctype == DCTYPE_DIRECT)
-    {
-        /* Release PDEV lock */
-        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);
@@ -247,6 +198,22 @@ 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
@@ -254,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;
 }
 
@@ -268,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;
 }
 
@@ -280,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;
 }
 
@@ -292,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 */