[WIN32SS]
[reactos.git] / win32ss / gdi / eng / engwindow.c
index 3683636..ec34394 100644 (file)
@@ -2,7 +2,7 @@
  * COPYRIGHT:         See COPYING in the top level directory
  * PROJECT:           ReactOS kernel
  * PURPOSE:           GDI WNDOBJ Functions
- * FILE:              subsystems/win32/win32k/eng/engwindow.c
+ * FILE:              win32ss/gdi/eng/engwindow.c
  * PROGRAMER:         Gregor Anich
  */
 
@@ -18,7 +18,7 @@ INT gcountPWO = 0;
 VOID
 FASTCALL
 IntEngWndCallChangeProc(
-    _In_ XCLIPOBJ *Clip,
+    _In_ EWNDOBJ *Clip,
     _In_ FLONG   flChanged)
 {
     if (Clip->ChangeProc == NULL)
@@ -40,7 +40,7 @@ IntEngWndCallChangeProc(
     if (flChanged == WOC_CHANGED)
         Clip->ChangeProc(NULL, flChanged);
     else
-        Clip->ChangeProc(&Clip->WndObj, flChanged);
+        Clip->ChangeProc((WNDOBJ *)Clip, flChanged);
 }
 
 /*
@@ -49,10 +49,10 @@ IntEngWndCallChangeProc(
 BOOLEAN
 FASTCALL
 IntEngWndUpdateClipObj(
-    XCLIPOBJ* Clip,
+    EWNDOBJ* Clip,
     PWND Window)
 {
-    PROSRGNDATA visRgn;
+    PREGION visRgn;
 
     TRACE("IntEngWndUpdateClipObj\n");
 
@@ -61,7 +61,7 @@ IntEngWndUpdateClipObj(
     {
         if (visRgn->rdh.nCount > 0)
         {
-            IntEngUpdateClipRegion(Clip, visRgn->rdh.nCount, visRgn->Buffer, &visRgn->rdh.rcBound);
+            IntEngUpdateClipRegion((XCLIPOBJ*)Clip, visRgn->rdh.nCount, visRgn->Buffer, &visRgn->rdh.rcBound);
             TRACE("Created visible region with %lu rects\n", visRgn->rdh.nCount);
             TRACE("  BoundingRect: %d, %d  %d, %d\n",
                    visRgn->rdh.rcBound.left, visRgn->rdh.rcBound.top,
@@ -81,12 +81,12 @@ IntEngWndUpdateClipObj(
     else
     {
         /* Fall back to client rect */
-        IntEngUpdateClipRegion(Clip, 1, &Window->rcClient, &Window->rcClient);
+        IntEngUpdateClipRegion((XCLIPOBJ*)Clip, 1, &Window->rcClient, &Window->rcClient);
     }
 
     /* Update the WNDOBJ */
-    Clip->WndObj.rclClient = Window->rcClient;
-    Clip->WndObj.coClient.iUniq++;
+    Clip->rclClient = Window->rcClient;
+    Clip->iUniq++;
 
     return TRUE;
 }
@@ -100,18 +100,18 @@ IntEngWindowChanged(
     _In_    PWND  Window,
     _In_    FLONG flChanged)
 {
-    XCLIPOBJ *Clip;
+    EWNDOBJ *Clip;
 
     ASSERT_IRQL_LESS_OR_EQUAL(PASSIVE_LEVEL);
 
-    Clip = UserGetProp(Window, AtomWndObj);
+    Clip = UserGetProp(Window, AtomWndObj, TRUE);
     if (!Clip)
     {
         return;
     }
 
     ASSERT(Clip->Hwnd == Window->head.h);
-    // if (Clip->WndObj.pvConsumer != NULL)
+    // if (Clip->pvConsumer != NULL)
     {
         /* Update the WNDOBJ */
         switch (flChanged)
@@ -149,50 +149,45 @@ EngCreateWnd(
     FLONG             fl,
     int               iPixelFormat)
 {
-    XCLIPOBJ *Clip = NULL;
+    EWNDOBJ *Clip = NULL;
     WNDOBJ *WndObjUser = NULL;
     PWND Window;
-    BOOL calledFromUser;
-    DECLARE_RETURN(WNDOBJ*);
 
     TRACE("EngCreateWnd: pso = 0x%p, hwnd = 0x%p, pfn = 0x%p, fl = 0x%lx, pixfmt = %d\n",
             pso, hWnd, pfn, fl, iPixelFormat);
 
+    UserEnterExclusive();
+
     if (fl & (WO_RGN_WINDOW | WO_RGN_DESKTOP_COORD | WO_RGN_UPDATE_ALL))
     {
         FIXME("Unsupported flags: 0x%lx\n", fl & ~(WO_RGN_CLIENT_DELTA | WO_RGN_CLIENT | WO_RGN_SURFACE_DELTA | WO_RGN_SURFACE));
     }
 
-    calledFromUser = UserIsEntered();
-    if (!calledFromUser) {
-        UserEnterShared();
-    }
-
     /* Get window object */
     Window = UserGetWindowObject(hWnd);
     if (Window == NULL)
     {
-        RETURN( NULL);
+        goto Exit;
     }
 
     /* Create WNDOBJ */
-    Clip = EngAllocMem(FL_ZERO_MEMORY, sizeof (XCLIPOBJ), GDITAG_WNDOBJ);
+    Clip = EngAllocMem(FL_ZERO_MEMORY, sizeof(EWNDOBJ), GDITAG_WNDOBJ);
     if (Clip == NULL)
     {
         ERR("Failed to allocate memory for a WND structure!\n");
-        RETURN( NULL);
+        goto Exit;
     }
-    IntEngInitClipObj(Clip);
+    IntEngInitClipObj((XCLIPOBJ*)Clip);
 
     /* Fill the clipobj */
     if (!IntEngWndUpdateClipObj(Clip, Window))
     {
         EngFreeMem(Clip);
-        RETURN( NULL);
+        goto Exit;
     }
 
     /* Fill user object */
-    WndObjUser = &Clip->WndObj;
+    WndObjUser = (WNDOBJ *)Clip;
     WndObjUser->psoOwner = pso;
     WndObjUser->pvConsumer = NULL;
 
@@ -208,20 +203,14 @@ EngCreateWnd(
     Clip->PixelFormat = iPixelFormat;
 
     /* associate object with window */
-    IntSetProp(Window, AtomWndObj, Clip);
+    UserSetProp(Window, AtomWndObj, Clip, TRUE);
     ++gcountPWO;
 
     TRACE("EngCreateWnd: SUCCESS: %p!\n", WndObjUser);
 
-    RETURN( WndObjUser);
-
-CLEANUP:
-
-    if (!calledFromUser) {
-        UserLeave();
-    }
-
-    END_CLEANUP;
+Exit:
+    UserLeave();
+    return WndObjUser;
 }
 
 
@@ -233,16 +222,12 @@ APIENTRY
 EngDeleteWnd(
     IN WNDOBJ *pwo)
 {
-    XCLIPOBJ* Clip = CONTAINING_RECORD(pwo, XCLIPOBJ, WndObj);
+    EWNDOBJ* Clip = (EWNDOBJ *)pwo;//CONTAINING_RECORD(pwo, XCLIPOBJ, WndObj);
     PWND Window;
-    BOOL calledFromUser;
 
     TRACE("EngDeleteWnd: pwo = 0x%p\n", pwo);
 
-    calledFromUser = UserIsEntered();
-    if (!calledFromUser) {
-        UserEnterExclusive();
-    }
+    UserEnterExclusive();
 
     /* Get window object */
     Window = UserGetWindowObject(Clip->Hwnd);
@@ -253,16 +238,14 @@ EngDeleteWnd(
     else
     {
         /* Remove object from window */
-        IntRemoveProp(Window, AtomWndObj);
+        UserRemoveProp(Window, AtomWndObj, TRUE);
     }
     --gcountPWO;
 
-    if (!calledFromUser) {
-        UserLeave();
-    }
+    UserLeave();
 
     /* Free resources */
-    IntEngFreeClipResources(Clip);
+    IntEngFreeClipResources((XCLIPOBJ*)Clip);
     EngFreeMem(Clip);
 }
 
@@ -308,7 +291,7 @@ WNDOBJ_vSetConsumer(
     IN WNDOBJ  *pwo,
     IN PVOID  pvConsumer)
 {
-    XCLIPOBJ* Clip = CONTAINING_RECORD(pwo, XCLIPOBJ, WndObj);
+    EWNDOBJ* Clip = (EWNDOBJ *)pwo;//CONTAINING_RECORD(pwo, XCLIPOBJ, WndObj);
     BOOL Hack;
 
     TRACE("WNDOBJ_vSetConsumer: pwo = 0x%p, pvConsumer = 0x%p\n", pwo, pvConsumer);