* 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
*/
VOID
FASTCALL
IntEngWndCallChangeProc(
- _In_ XCLIPOBJ *Clip,
+ _In_ EWNDOBJ *Clip,
_In_ FLONG flChanged)
{
if (Clip->ChangeProc == NULL)
if (flChanged == WOC_CHANGED)
Clip->ChangeProc(NULL, flChanged);
else
- Clip->ChangeProc(&Clip->WndObj, flChanged);
+ Clip->ChangeProc((WNDOBJ *)Clip, flChanged);
}
/*
BOOLEAN
FASTCALL
IntEngWndUpdateClipObj(
- XCLIPOBJ* Clip,
+ EWNDOBJ* Clip,
PWND Window)
{
- PROSRGNDATA visRgn;
+ PREGION visRgn;
TRACE("IntEngWndUpdateClipObj\n");
{
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,
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;
}
_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)
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;
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;
}
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);
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);
}
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);