[ros-diffs] [jimtabor] 44806: [Win32k] - Setting up for region attribute support. - Removed old code and use GreDeleteObject for dc and region types.

jimtabor at svn.reactos.org jimtabor at svn.reactos.org
Tue Dec 29 22:07:04 CET 2009


Author: jimtabor
Date: Tue Dec 29 22:07:04 2009
New Revision: 44806

URL: http://svn.reactos.org/svn/reactos?rev=44806&view=rev
Log:
[Win32k]
- Setting up for region attribute support.
- Removed old code and use GreDeleteObject for dc and region types.

Modified:
    trunk/reactos/subsystems/win32/win32k/eng/engwindow.c
    trunk/reactos/subsystems/win32/win32k/include/dc.h
    trunk/reactos/subsystems/win32/win32k/include/region.h
    trunk/reactos/subsystems/win32/win32k/ntuser/painting.c
    trunk/reactos/subsystems/win32/win32k/ntuser/window.c
    trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c
    trunk/reactos/subsystems/win32/win32k/objects/cliprgn.c
    trunk/reactos/subsystems/win32/win32k/objects/dclife.c
    trunk/reactos/subsystems/win32/win32k/objects/dcstate.c
    trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c
    trunk/reactos/subsystems/win32/win32k/objects/region.c

Modified: trunk/reactos/subsystems/win32/win32k/eng/engwindow.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/eng/engwindow.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/eng/engwindow.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/eng/engwindow.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -89,7 +89,7 @@
   if (hVisRgn != NULL)
   {
     NtGdiOffsetRgn(hVisRgn, Window->Wnd->rcClient.left, Window->Wnd->rcClient.top);
-    visRgn = REGION_LockRgn(hVisRgn);
+    visRgn = RGNOBJAPI_Lock(hVisRgn, NULL);
     if (visRgn != NULL)
     {
       if (visRgn->rdh.nCount > 0)
@@ -110,7 +110,7 @@
           }
         }
       }
-      REGION_UnlockRgn(visRgn);
+      RGNOBJAPI_Unlock(visRgn);
     }
     else
     {

Modified: trunk/reactos/subsystems/win32/win32k/include/dc.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/dc.h?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/include/dc.h [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/include/dc.h [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -144,7 +144,6 @@
 HDC  FASTCALL DC_AllocDC(PUNICODE_STRING  Driver);
 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);

Modified: trunk/reactos/subsystems/win32/win32k/include/region.h
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/include/region.h?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/include/region.h [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/include/region.h [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -48,6 +48,8 @@
 INT FASTCALL IntGdiCombineRgn(PROSRGNDATA, PROSRGNDATA, PROSRGNDATA, INT);
 INT FASTCALL REGION_Complexity(PROSRGNDATA);
 PROSRGNDATA FASTCALL IntGdiCreateRectRgn(INT, INT, INT, INT);
+PROSRGNDATA FASTCALL RGNOBJAPI_Lock(HRGN,PRGN_ATTR *);
+VOID FASTCALL RGNOBJAPI_Unlock(PROSRGNDATA);
 
 #define UnsafeIntCreateRectRgnIndirect(prc) \
   NtGdiCreateRectRgn((prc)->left, (prc)->top, (prc)->right, (prc)->bottom)

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/painting.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/painting.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/painting.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/painting.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -1006,10 +1006,10 @@
       }
       else
       {
-         RgnData = REGION_LockRgn(Window->UpdateRegion);
+         RgnData = RGNOBJAPI_Lock(Window->UpdateRegion, NULL);
          ASSERT(RgnData != NULL);
          RegionType = REGION_GetRgnBox(RgnData, &Rect);
-         REGION_UnlockRgn(RgnData);
+         RGNOBJAPI_Unlock(RgnData);
 
          if (RegionType != ERROR && RegionType != NULLREGION)
             RECTL_bIntersectRect(&Rect, &Rect, &Window->Wnd->rcClient);

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/window.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/window.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/window.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -4557,10 +4557,10 @@
    /* Copy the region into hRgn */
    NtGdiCombineRgn(hRgn, VisRgn, NULL, RGN_COPY);
 
-   if((pRgn = REGION_LockRgn(hRgn)))
+   if((pRgn = RGNOBJAPI_Lock(hRgn, NULL)))
    {
       Ret = pRgn->rdh.iType;
-      REGION_UnlockRgn(pRgn);
+      RGNOBJAPI_Unlock(pRgn);
    }
    else
       Ret = ERROR;
@@ -4596,11 +4596,11 @@
    if(Window->WindowRegion && !(Wnd->style & WS_MINIMIZE))
       NtGdiCombineRgn(VisRgn, VisRgn, Window->WindowRegion, RGN_AND);
 
-   if((pRgn = REGION_LockRgn(VisRgn)))
+   if((pRgn = RGNOBJAPI_Lock(VisRgn, NULL)))
    {
       Ret = pRgn->rdh.iType;
       *Rect = pRgn->rdh.rcBound;
-      REGION_UnlockRgn(pRgn);
+      RGNOBJAPI_Unlock(pRgn);
    }
    else
       Ret = ERROR;

Modified: trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/ntuser/winpos.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -953,16 +953,16 @@
          VisBefore = VIS_ComputeVisibleRegion(Window, FALSE, FALSE, TRUE);
          VisRgn = NULL;
 
-         if (VisBefore != NULL && (VisRgn = (PROSRGNDATA)REGION_LockRgn(VisBefore)) &&
+         if (VisBefore != NULL && (VisRgn = (PROSRGNDATA)RGNOBJAPI_Lock(VisBefore, NULL)) &&
                REGION_GetRgnBox(VisRgn, &TempRect) == NULLREGION)
          {
-            REGION_UnlockRgn(VisRgn);
+            RGNOBJAPI_Unlock(VisRgn);
             GreDeleteObject(VisBefore);
             VisBefore = NULL;
          }
          else if(VisRgn)
          {
-            REGION_UnlockRgn(VisRgn);
+            RGNOBJAPI_Unlock(VisRgn);
             NtGdiOffsetRgn(VisBefore, -Window->Wnd->rcWindow.left, -Window->Wnd->rcWindow.top);
          }
       }
@@ -1112,16 +1112,16 @@
       VisAfter = VIS_ComputeVisibleRegion(Window, FALSE, FALSE, TRUE);
       VisRgn = NULL;
 
-      if (VisAfter != NULL && (VisRgn = (PROSRGNDATA)REGION_LockRgn(VisAfter)) &&
+      if (VisAfter != NULL && (VisRgn = (PROSRGNDATA)RGNOBJAPI_Lock(VisAfter, NULL)) &&
             REGION_GetRgnBox(VisRgn, &TempRect) == NULLREGION)
       {
-         REGION_UnlockRgn(VisRgn);
+         RGNOBJAPI_Unlock(VisRgn);
          GreDeleteObject(VisAfter);
          VisAfter = NULL;
       }
       else if(VisRgn)
       {
-         REGION_UnlockRgn(VisRgn);
+         RGNOBJAPI_Unlock(VisRgn);
          NtGdiOffsetRgn(VisAfter, -Window->Wnd->rcWindow.left, -Window->Wnd->rcWindow.top);
       }
 
@@ -1156,9 +1156,9 @@
             RECTL_vOffsetRect(&ORect, - OldWindowRect.left, - OldWindowRect.top);
             RECTL_vOffsetRect(&NRect, - NewWindowRect.left, - NewWindowRect.top);
             RECTL_bIntersectRect(&CopyRect, &ORect, &NRect);
-            pCopyRgn = REGION_LockRgn(CopyRgn);
+            pCopyRgn = RGNOBJAPI_Lock(CopyRgn, NULL);
             REGION_CropAndOffsetRegion(pCopyRgn, pCopyRgn, &CopyRect, NULL);
-            REGION_UnlockRgn(pCopyRgn);
+            RGNOBJAPI_Unlock(pCopyRgn);
          }
 
          /* No use in copying bits which are in the update region. */
@@ -1174,11 +1174,11 @@
           * there's nothing to copy. Also, it's no use copying bits onto
           * themselves.
           */
-         if ((VisRgn = (PROSRGNDATA)REGION_LockRgn(CopyRgn)) &&
+         if ((VisRgn = (PROSRGNDATA)RGNOBJAPI_Lock(CopyRgn, NULL)) &&
                REGION_GetRgnBox(VisRgn, &CopyRect) == NULLREGION)
          {
             /* Nothing to copy, clean up */
-            REGION_UnlockRgn(VisRgn);
+            RGNOBJAPI_Unlock(VisRgn);
             GreDeleteObject(CopyRgn);
             CopyRgn = NULL;
          }
@@ -1187,7 +1187,7 @@
          {
             if(VisRgn)
             {
-               REGION_UnlockRgn(VisRgn);
+               RGNOBJAPI_Unlock(VisRgn);
             }
 
             /*
@@ -1214,7 +1214,7 @@
          }
          else if(VisRgn)
          {
-            REGION_UnlockRgn(VisRgn);
+            RGNOBJAPI_Unlock(VisRgn);
          }
       }
       else

Modified: trunk/reactos/subsystems/win32/win32k/objects/cliprgn.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/cliprgn.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/cliprgn.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/cliprgn.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -36,7 +36,7 @@
       NtGdiCombineRgn(Dc->rosdc.hGCClipRgn, Dc->rosdc.hClipRgn, Dc->rosdc.hVisRgn, RGN_AND);
    NtGdiOffsetRgn(Dc->rosdc.hGCClipRgn, Dc->ptlDCOrig.x, Dc->ptlDCOrig.y);
 
-   if((CombinedRegion = REGION_LockRgn(Dc->rosdc.hGCClipRgn)))
+   if((CombinedRegion = RGNOBJAPI_Lock(Dc->rosdc.hGCClipRgn, NULL)))
    {
      if (Dc->rosdc.CombinedClip != NULL)
         IntEngDeleteClipRegion(Dc->rosdc.CombinedClip);
@@ -46,7 +46,7 @@
         CombinedRegion->Buffer,
         &CombinedRegion->rdh.rcBound);
 
-     REGION_UnlockRgn(CombinedRegion);
+     RGNOBJAPI_Unlock(CombinedRegion);
    }
 
    if ( NULL == Dc->rosdc.CombinedClip )
@@ -123,10 +123,10 @@
     {
       PROSRGNDATA Rgn;
       RECTL rect;
-      if((Rgn = REGION_LockRgn(dc->rosdc.hVisRgn)))
+      if((Rgn = RGNOBJAPI_Lock(dc->rosdc.hVisRgn, NULL)))
       {
         REGION_GetRgnBox(Rgn, &rect);
-        REGION_UnlockRgn(Rgn);
+        RGNOBJAPI_Unlock(Rgn);
         dc->rosdc.hClipRgn = UnsafeIntCreateRectRgnIndirect(&rect);
       }
       else
@@ -177,13 +177,13 @@
       return ERROR;
    }
 
-   if (!(Rgn = REGION_LockRgn(dc->rosdc.hGCClipRgn)))
+   if (!(Rgn = RGNOBJAPI_Lock(dc->rosdc.hGCClipRgn, NULL)))
    {
       DC_UnlockDc(dc);
       return ERROR;
    }
    retval = REGION_GetRgnBox(Rgn, rc);
-   REGION_UnlockRgn(Rgn);
+   RGNOBJAPI_Unlock(Rgn);
    IntDPtoLP(dc, (LPPOINT)rc, 2);
    DC_UnlockDc(dc);
 
@@ -407,11 +407,11 @@
 
    if (dc->rosdc.hGCClipRgn)
    {
-      if((Rgn = (PROSRGNDATA)REGION_LockRgn(dc->rosdc.hGCClipRgn)))
+      if((Rgn = (PROSRGNDATA)RGNOBJAPI_Lock(dc->rosdc.hGCClipRgn, NULL)))
       {
          IntLPtoDP(dc, (LPPOINT)&Rect, 2);
          Result = REGION_RectInRegion(Rgn, &Rect);
-         REGION_UnlockRgn(Rgn);
+         RGNOBJAPI_Unlock(Rgn);
       }
    }
    DC_UnlockDc(dc);

Modified: trunk/reactos/subsystems/win32/win32k/objects/dclife.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dclife.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dclife.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dclife.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -133,23 +133,6 @@
     NewDC->dclevel.pSurface = SURFACE_ShareLockSurface(hsurf);
 
     return NewDC;
-}
-
-VOID FASTCALL
-DC_FreeDC(HDC DCToFree)
-{
-    DC_FreeDcAttr(DCToFree);
-    if (!IsObjectDead(DCToFree))
-    {
-        if (!GDIOBJ_FreeObjByHandle(DCToFree, GDI_OBJECT_TYPE_DC))
-        {
-            DPRINT1("DC_FreeDC failed\n");
-        }
-    }
-    else
-    {
-        DPRINT1("Attempted to Delete 0x%x currently being destroyed!!!\n",DCToFree);
-    }
 }
 
 BOOL INTERNAL_CALL
@@ -537,7 +520,7 @@
     PATH_Delete(DCToDelete->dclevel.hPath);
 
     DC_UnlockDc(DCToDelete);
-    DC_FreeDC(hDC);
+    GreDeleteObject(hDC);
     return TRUE;
 }
 

Modified: trunk/reactos/subsystems/win32/win32k/objects/dcstate.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/dcstate.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/dcstate.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/dcstate.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -180,7 +180,7 @@
         }
 
         /* Delete the saved dc */
-        DC_FreeDC(hdcSave);
+        GreDeleteObject(hdcSave);
     }
 
     DC_UnlockDc(pdc);

Modified: trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/gdiobj.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -663,11 +663,34 @@
 FASTCALL
 GreDeleteObject(HGDIOBJ hObject)
 {
+    INT Index;
+    PGDI_TABLE_ENTRY Entry;
+    DWORD dwObjectType;
+    PVOID pAttr = NULL;
+
     DPRINT("NtGdiDeleteObject handle 0x%08x\n", hObject);
     if (!IsObjectDead(hObject))
     {
-        return NULL != hObject
-               ? GDIOBJ_FreeObjByHandle(hObject, GDI_OBJECT_TYPE_DONTCARE) : FALSE;
+       dwObjectType = GDIOBJ_GetObjectType(hObject);
+
+       Index = GDI_HANDLE_GET_INDEX(hObject);
+       Entry = &GdiHandleTable->Entries[Index];
+       pAttr = Entry->UserData;
+             
+       switch (dwObjectType)
+       {
+//          case GDI_OBJECT_TYPE_BRUSH:
+          case GDI_OBJECT_TYPE_REGION:
+             if (pAttr) FreeObjectAttr(pAttr);
+             break;
+
+          case GDI_OBJECT_TYPE_DC:
+             DC_FreeDcAttr(hObject);
+             break;
+       }
+
+       return NULL != hObject
+               ? GDIOBJ_FreeObjByHandle(hObject, dwObjectType) : FALSE;
     }
     else
     {

Modified: trunk/reactos/subsystems/win32/win32k/objects/region.c
URL: http://svn.reactos.org/svn/reactos/trunk/reactos/subsystems/win32/win32k/objects/region.c?rev=44806&r1=44805&r2=44806&view=diff
==============================================================================
--- trunk/reactos/subsystems/win32/win32k/objects/region.c [iso-8859-1] (original)
+++ trunk/reactos/subsystems/win32/win32k/objects/region.c [iso-8859-1] Tue Dec 29 22:07:04 2009
@@ -467,7 +467,7 @@
 {
     ROSRGNDATA *Data;
 
-    Data = REGION_LockRgn(hRgn);
+    Data = RGNOBJAPI_Lock(hRgn, NULL);
     if (Data == NULL)
     {
         DbgPrint("IntDumpRegion called with invalid region!\n");
@@ -482,7 +482,7 @@
              Data->rdh.rcBound.bottom,
              Data->rdh.iType);
 
-    REGION_UnlockRgn(Data);
+    RGNOBJAPI_Unlock(Data);
 }
 #endif /* not NDEBUG */
 
@@ -1739,7 +1739,7 @@
     trb = REGION_AllocRgnWithHandle(srb->rdh.nCount + 1);
     if (!trb)
     {
-        REGION_UnlockRgn(tra);
+        RGNOBJAPI_Unlock(tra);
         GreDeleteObject(htra);
         return;
     }
@@ -1748,8 +1748,8 @@
     REGION_SubtractRegion(tra, sra, srb);
     REGION_SubtractRegion(trb, srb, sra);
     REGION_UnionRegion(dr, tra, trb);
-    REGION_UnlockRgn(tra);
-    REGION_UnlockRgn(trb);
+    RGNOBJAPI_Unlock(tra);
+    RGNOBJAPI_Unlock(trb);
 
     GreDeleteObject(htra);
     GreDeleteObject(htrb);
@@ -1863,26 +1863,26 @@
     PRECTL rc;
     ULONG i;
 
-    if (!(srcObj = REGION_LockRgn(hSrc)))
+    if (!(srcObj = RGNOBJAPI_Lock(hSrc, NULL)))
     {
         return FALSE;
     }
     if (!REGION_NOT_EMPTY(srcObj))
     {
-        REGION_UnlockRgn(srcObj);
+        RGNOBJAPI_Unlock(srcObj);
         return FALSE;
     }
-    if (!(destObj = REGION_LockRgn(hDest)))
-    {
-        REGION_UnlockRgn(srcObj);
+    if (!(destObj = RGNOBJAPI_Lock(hDest, NULL)))
+    {
+        RGNOBJAPI_Unlock(srcObj);
         return FALSE;
     }
 
     EMPTY_REGION(destObj);
     if (!REGION_CopyRegion(destObj, srcObj))
     {
-        REGION_UnlockRgn(destObj);
-        REGION_UnlockRgn(srcObj);
+        RGNOBJAPI_Unlock(destObj);
+        RGNOBJAPI_Unlock(srcObj);
         return FALSE;
     }
 
@@ -1891,8 +1891,8 @@
         if (!REGION_CreateSimpleFrameRgn(destObj, x, y))
         {
             EMPTY_REGION(destObj);
-            REGION_UnlockRgn(destObj);
-            REGION_UnlockRgn(srcObj);
+            RGNOBJAPI_Unlock(destObj);
+            RGNOBJAPI_Unlock(srcObj);
             return FALSE;
         }
     }
@@ -1951,8 +1951,8 @@
         REGION_SubtractRegion(destObj, srcObj, destObj);
     }
 
-    REGION_UnlockRgn(destObj);
-    REGION_UnlockRgn(srcObj);
+    RGNOBJAPI_Unlock(destObj);
+    RGNOBJAPI_Unlock(srcObj);
     return TRUE;
 }
 
@@ -1986,11 +1986,11 @@
         goto done;
     }
 
-    if ( !(srcObj = REGION_LockRgn(hSrc)) )
+    if ( !(srcObj = RGNOBJAPI_Lock(hSrc, NULL)) )
         goto done;
-    if ( !(destObj = REGION_LockRgn(hDest)) )
-    {
-        REGION_UnlockRgn(srcObj);
+    if ( !(destObj = RGNOBJAPI_Lock(hDest, NULL)) )
+    {
+        RGNOBJAPI_Unlock(srcObj);
         goto done;
     }
     EMPTY_REGION(destObj);
@@ -2021,8 +2021,8 @@
     }
     ret = TRUE;
 
-    REGION_UnlockRgn(srcObj);
-    REGION_UnlockRgn(destObj);
+    RGNOBJAPI_Unlock(srcObj);
+    RGNOBJAPI_Unlock(destObj);
 
 done:
     return ret;
@@ -2054,7 +2054,7 @@
         pReg->Buffer = ExAllocatePoolWithTag(PagedPool, nReg * sizeof(RECT), TAG_REGION);
         if (!pReg->Buffer)
         {
-            REGION_UnlockRgn(pReg);
+            RGNOBJAPI_Unlock(pReg);
             GDIOBJ_FreeObjByHandle(hReg, GDI_OBJECT_TYPE_REGION);
             return NULL;
         }
@@ -2264,17 +2264,21 @@
            }
            else if (src2Rgn == NULL)
            {
-               DPRINT1("IntGdiCombineRgn requires hSrc2 != NULL for combine mode %d!\n", CombineMode);
-               SetLastWin32Error(ERROR_INVALID_HANDLE);
+              DPRINT1("IntGdiCombineRgn requires hSrc2 != NULL for combine mode %d!\n", CombineMode);
+              SetLastWin32Error(ERROR_INVALID_HANDLE);
            }
         }
+     }
+     else
+     {
+        DPRINT("IntGdiCombineRgn: hSrc1 unavailable\n");
+        SetLastWin32Error(ERROR_INVALID_HANDLE);
      }
   }
   else
   {
      DPRINT("IntGdiCombineRgn: hDest unavailable\n");
      SetLastWin32Error(ERROR_INVALID_HANDLE);
-     result = ERROR;
   }
   return result;
 }
@@ -2297,30 +2301,30 @@
      return ERROR;
   }
 
-  destRgn = REGION_LockRgn(hDest);
+  destRgn = RGNOBJAPI_Lock(hDest, NULL);
   if (!destRgn)
   {
      SetLastWin32Error(ERROR_INVALID_HANDLE);
      return ERROR;
   }
 
-  src1Rgn = REGION_LockRgn(hSrc1);
+  src1Rgn = RGNOBJAPI_Lock(hSrc1, NULL);
   if (!src1Rgn)
   {
-     REGION_UnlockRgn(destRgn);
+     RGNOBJAPI_Unlock(destRgn);
      SetLastWin32Error(ERROR_INVALID_HANDLE);
      return ERROR;
   }
 
   if (hSrc2)
-     src2Rgn = REGION_LockRgn(hSrc2);
+     src2Rgn = RGNOBJAPI_Lock(hSrc2, NULL);
 
   result = IntGdiCombineRgn( destRgn, src1Rgn, src2Rgn, CombineMode);
 
   if (src2Rgn)
-     REGION_UnlockRgn(src2Rgn);
-  REGION_UnlockRgn(src1Rgn);
-  REGION_UnlockRgn(destRgn);
+     RGNOBJAPI_Unlock(src2Rgn);
+  RGNOBJAPI_Unlock(src1Rgn);
+  RGNOBJAPI_Unlock(destRgn);
 
   return result;
 }
@@ -2347,7 +2351,7 @@
   if (!(pRgn = REGION_AllocRgnWithHandle(1))) return NULL;
 
   REGION_SetRectRgn(pRgn, LeftRect, TopRect, RightRect, BottomRect);
-  REGION_UnlockRgn(pRgn);
+  RGNOBJAPI_Unlock(pRgn);
   // Return pointer with Share locks.
   pRgn = GDIOBJ_ShareLockObj(pRgn->BaseObject.hHmgr, GDI_OBJECT_TYPE_REGION);
 
@@ -2370,7 +2374,7 @@
     hRgn = pRgn->BaseObject.hHmgr;
 
     REGION_SetRectRgn(pRgn, LeftRect, TopRect, RightRect, BottomRect);
-    REGION_UnlockRgn(pRgn);
+    RGNOBJAPI_Unlock(pRgn);
 
     return hRgn;
 }
@@ -2490,7 +2494,7 @@
         REGION_UnionRectWithRgn(obj, &rect);
     }
 
-    REGION_UnlockRgn(obj);
+    RGNOBJAPI_Unlock(obj);
     return hrgn;
 }
 
@@ -2506,12 +2510,12 @@
     ULONG i;
     BOOL bRet = FALSE;
 
-    if ( !(rgn1 = REGION_LockRgn(hSrcRgn1)) )
+    if ( !(rgn1 = RGNOBJAPI_Lock(hSrcRgn1, NULL)) )
         return ERROR;
 
-    if ( !(rgn2 = REGION_LockRgn(hSrcRgn2)) )
-    {
-        REGION_UnlockRgn(rgn1);
+    if ( !(rgn2 = RGNOBJAPI_Lock(hSrcRgn2, NULL)) )
+    {
+        RGNOBJAPI_Unlock(rgn1);
         return ERROR;
     }
 
@@ -2540,8 +2544,8 @@
     bRet = TRUE;
 
 exit:
-    REGION_UnlockRgn(rgn1);
-    REGION_UnlockRgn(rgn2);
+    RGNOBJAPI_Unlock(rgn1);
+    RGNOBJAPI_Unlock(rgn2);
     return bRet;
 }
 
@@ -2637,12 +2641,12 @@
     if (!NT_SUCCESS(Status))
     {
         SetLastWin32Error(ERROR_INVALID_PARAMETER);
-        REGION_UnlockRgn(Region);
+        RGNOBJAPI_Unlock(Region);
         GreDeleteObject(hRgn);
         return NULL;
     }
 
-    REGION_UnlockRgn(Region);
+    RGNOBJAPI_Unlock(Region);
 
     return hRgn;
 }
@@ -2659,14 +2663,14 @@
     PROSRGNDATA rgn;
     PRECTL r;
 
-    if (NULL == (rgn = REGION_LockRgn(hRgn)))
+    if (NULL == (rgn = RGNOBJAPI_Lock(hRgn, NULL)))
     {
         return FALSE;
     }
 
     if (NULL == (oldhBrush = NtGdiSelectBrush(hDC, hBrush)))
     {
-        REGION_UnlockRgn(rgn);
+        RGNOBJAPI_Unlock(rgn);
         return FALSE;
     }
 
@@ -2675,7 +2679,7 @@
         NtGdiPatBlt(hDC, r->left, r->top, r->right - r->left, r->bottom - r->top, PATCOPY);
     }
 
-    REGION_UnlockRgn(rgn);
+    RGNOBJAPI_Unlock(rgn);
     NtGdiSelectBrush(hDC, oldhBrush);
 
     return TRUE;
@@ -2816,13 +2820,13 @@
     PROSRGNDATA Rgn;
     DWORD ret;
 
-    if (!(Rgn = REGION_LockRgn(hRgn)))
+    if (!(Rgn = RGNOBJAPI_Lock(hRgn, NULL)))
     {
         return ERROR;
     }
 
     ret = REGION_GetRgnBox(Rgn, pRect);
-    REGION_UnlockRgn(Rgn);
+    RGNOBJAPI_Unlock(Rgn);
 
     return ret;
 }
@@ -2839,13 +2843,13 @@
     DWORD ret;
     NTSTATUS Status = STATUS_SUCCESS;
 
-    if (!(Rgn = REGION_LockRgn(hRgn)))
+    if (!(Rgn = RGNOBJAPI_Lock(hRgn, NULL)))
     {
         return ERROR;
     }
 
     ret = REGION_GetRgnBox(Rgn, &SafeRect);
-    REGION_UnlockRgn(Rgn);
+    RGNOBJAPI_Unlock(Rgn);
     if (ERROR == ret)
     {
         return ret;
@@ -2880,7 +2884,7 @@
     ULONG i;
     PRECTL rc;
 
-    if (!(RgnData = REGION_LockRgn(hRgn)))
+    if (!(RgnData = RGNOBJAPI_Lock(hRgn, NULL)))
     {
         SetLastWin32Error(ERROR_INVALID_HANDLE);
         return FALSE;
@@ -2892,13 +2896,13 @@
 
         if (!NtGdiPatBlt(hDC, rc->left, rc->top, rc->right - rc->left, rc->bottom - rc->top, DSTINVERT))
         {
-            REGION_UnlockRgn(RgnData);
+            RGNOBJAPI_Unlock(RgnData);
             return FALSE;
         }
         rc++;
     }
 
-    REGION_UnlockRgn(RgnData);
+    RGNOBJAPI_Unlock(RgnData);
     return TRUE;
 }
 
@@ -2910,7 +2914,7 @@
     INT YOffset
 )
 {
-    PROSRGNDATA rgn = REGION_LockRgn(hRgn);
+    PROSRGNDATA rgn = RGNOBJAPI_Lock(hRgn, NULL);
     INT ret;
 
     DPRINT("NtGdiOffsetRgn: hRgn %d Xoffs %d Yoffs %d rgn %x\n", hRgn, XOffset, YOffset, rgn );
@@ -2946,7 +2950,7 @@
         }
     }
     ret = REGION_Complexity(rgn);
-    REGION_UnlockRgn(rgn);
+    RGNOBJAPI_Unlock(rgn);
     return ret;
 }
 
@@ -2982,7 +2986,7 @@
 
     NtGdiCombineRgn(tmpVisRgn, tmpVisRgn, dc->rosdc.hGCClipRgn, RGN_AND);
 
-    visrgn = REGION_LockRgn(tmpVisRgn);
+    visrgn = RGNOBJAPI_Lock(tmpVisRgn, NULL);
     if (visrgn == NULL)
     {
         GreDeleteObject(tmpVisRgn);
@@ -3005,7 +3009,7 @@
                        &BrushOrigin,
                        0xFFFF);//FIXME:don't know what to put here
 
-    REGION_UnlockRgn(visrgn);
+    RGNOBJAPI_Unlock(visrgn);
     GreDeleteObject(tmpVisRgn);
 
     // Fill the region
@@ -3024,7 +3028,7 @@
     ULONG i;
     PRECTL r;
 
-    if (!(rgn = REGION_LockRgn(hRgn) ) )
+    if (!(rgn = RGNOBJAPI_Lock(hRgn, NULL) ) )
         return FALSE;
 
     if (rgn->rdh.nCount > 0 && INRECT(rgn->rdh.rcBound, X, Y))
@@ -3034,13 +3038,13 @@
         {
             if (INRECT(*r, X, Y))
             {
-                REGION_UnlockRgn(rgn);
+                RGNOBJAPI_Unlock(rgn);
                 return TRUE;
             }
             r++;
         }
     }
-    REGION_UnlockRgn(rgn);
+    RGNOBJAPI_Unlock(rgn);
     return FALSE;
 }
 
@@ -3108,7 +3112,7 @@
     BOOL Ret;
     NTSTATUS Status = STATUS_SUCCESS;
 
-    if (!(Rgn = REGION_LockRgn(hRgn)))
+    if (!(Rgn = RGNOBJAPI_Lock(hRgn, NULL)))
     {
         return ERROR;
     }
@@ -3126,14 +3130,14 @@
 
     if (!NT_SUCCESS(Status))
     {
-        REGION_UnlockRgn(Rgn);
+        RGNOBJAPI_Unlock(Rgn);
         SetLastNtError(Status);
         DPRINT1("NtGdiRectInRegion: bogus rc\n");
         return ERROR;
     }
 
     Ret = REGION_RectInRegion(Rgn, &rc);
-    REGION_UnlockRgn(Rgn);
+    RGNOBJAPI_Unlock(Rgn);
     return Ret;
 }
 
@@ -3189,14 +3193,14 @@
 {
     PROSRGNDATA rgn;
 
-    if ( !(rgn = REGION_LockRgn(hRgn)) )
+    if ( !(rgn = RGNOBJAPI_Lock(hRgn, NULL)) )
     {
         return 0; //per documentation
     }
 
     REGION_SetRectRgn(rgn, LeftRect, TopRect, RightRect, BottomRect);
 
-    REGION_UnlockRgn(rgn);
+    RGNOBJAPI_Unlock(rgn);
     return TRUE;
 }
 
@@ -3210,7 +3214,7 @@
     PROSRGNDATA Rgn;
     NTSTATUS Status = STATUS_SUCCESS;
 
-    if (!(Rgn = REGION_LockRgn(hDest)))
+    if (!(Rgn = RGNOBJAPI_Lock(hDest, NULL)))
     {
         SetLastWin32Error(ERROR_INVALID_HANDLE);
         return NULL;
@@ -3229,13 +3233,13 @@
 
     if (! NT_SUCCESS(Status))
     {
-        REGION_UnlockRgn(Rgn);
+        RGNOBJAPI_Unlock(Rgn);
         SetLastNtError(Status);
         return NULL;
     }
 
     REGION_UnionRectWithRgn(Rgn, &SafeRect);
-    REGION_UnlockRgn(Rgn);
+    RGNOBJAPI_Unlock(Rgn);
     return hDest;
 }
 
@@ -3257,7 +3261,7 @@
 )
 {
     DWORD size;
-    PROSRGNDATA obj = REGION_LockRgn(hrgn);
+    PROSRGNDATA obj = RGNOBJAPI_Lock(hrgn, NULL);
     NTSTATUS Status = STATUS_SUCCESS;
 
     if (!obj)
@@ -3266,7 +3270,7 @@
     size = obj->rdh.nCount * sizeof(RECT);
     if (count < (size + sizeof(RGNDATAHEADER)) || rgndata == NULL)
     {
-        REGION_UnlockRgn(obj);
+        RGNOBJAPI_Unlock(obj);
         if (rgndata) /* buffer is too small, signal it by return 0 */
             return 0;
         else         /* user requested buffer size with rgndata NULL */
@@ -3288,11 +3292,11 @@
     if (!NT_SUCCESS(Status))
     {
         SetLastNtError(Status);
-        REGION_UnlockRgn(obj);
+        RGNOBJAPI_Unlock(obj);
         return 0;
     }
 
-    REGION_UnlockRgn(obj);
+    RGNOBJAPI_Unlock(obj);
     return size + sizeof(RGNDATAHEADER);
 }
 
@@ -3778,7 +3782,7 @@
               (Pts[2].x == Pts[3].x) &&
               (Pts[3].y == Pts[0].y))))
     {
-        REGION_UnlockRgn(region);
+        RGNOBJAPI_Unlock(region);
         NtGdiSetRectRgn(hrgn, min(Pts[0].x, Pts[2].x), min(Pts[0].y, Pts[2].y),
                         max(Pts[0].x, Pts[2].x), max(Pts[0].y, Pts[2].y));
         return hrgn;
@@ -3927,7 +3931,7 @@
         curPtBlock = tmpPtBlock;
     }
     ExFreePoolWithTag(pETEs, TAG_REGION);
-    REGION_UnlockRgn(region);
+    RGNOBJAPI_Unlock(region);
     return hrgn;
 }
 




More information about the Ros-diffs mailing list