mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 18:52:57 +00:00
[GDI32]
- Use GdiAllocBatchCommand in DeleteObject instead of doing all manually svn path=/trunk/; revision=57492
This commit is contained in:
parent
e71dbbe6f4
commit
ca41d88df3
2 changed files with 16 additions and 18 deletions
|
@ -320,27 +320,28 @@ BOOL
|
||||||
WINAPI
|
WINAPI
|
||||||
DeleteObject(HGDIOBJ hObject)
|
DeleteObject(HGDIOBJ hObject)
|
||||||
{
|
{
|
||||||
UINT Type = 0;
|
DWORD dwType = 0;
|
||||||
|
|
||||||
/* From Wine: DeleteObject does not SetLastError() on a null object */
|
/* From Wine: DeleteObject does not SetLastError() on a null object */
|
||||||
if(!hObject) return FALSE;
|
if(!hObject) return FALSE;
|
||||||
|
|
||||||
if (0 != ((DWORD) hObject & GDI_HANDLE_STOCK_MASK))
|
if ((DWORD)hObject & GDI_HANDLE_STOCK_MASK)
|
||||||
{
|
{
|
||||||
// Relax! This is a normal return!
|
// Relax! This is a normal return!
|
||||||
DPRINT("Trying to delete system object 0x%x\n", hObject);
|
DPRINT("Trying to delete system object 0x%x\n", hObject);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If you dont own it?! Get OUT!
|
// If you dont own it?! Get OUT!
|
||||||
if(!GdiIsHandleValid(hObject)) return FALSE;
|
if(!GdiIsHandleValid(hObject)) return FALSE;
|
||||||
|
|
||||||
Type = GDI_HANDLE_GET_TYPE(hObject);
|
dwType = GDI_HANDLE_GET_TYPE(hObject);
|
||||||
|
|
||||||
if ((Type == GDI_OBJECT_TYPE_METAFILE) ||
|
if ((dwType == GDI_OBJECT_TYPE_METAFILE) ||
|
||||||
(Type == GDI_OBJECT_TYPE_ENHMETAFILE))
|
(dwType == GDI_OBJECT_TYPE_ENHMETAFILE))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
switch (Type)
|
switch (dwType)
|
||||||
{
|
{
|
||||||
case GDI_OBJECT_TYPE_DC:
|
case GDI_OBJECT_TYPE_DC:
|
||||||
return DeleteDC((HDC) hObject);
|
return DeleteDC((HDC) hObject);
|
||||||
|
@ -367,33 +368,30 @@ DeleteObject(HGDIOBJ hObject)
|
||||||
{
|
{
|
||||||
PBRUSH_ATTR Brh_Attr;
|
PBRUSH_ATTR Brh_Attr;
|
||||||
PTEB pTeb;
|
PTEB pTeb;
|
||||||
|
PGDIBSOBJECT pgO;
|
||||||
|
|
||||||
if ((!GdiGetHandleUserData(hObject, (DWORD)Type, (PVOID) &Brh_Attr)) ||
|
if ((!GdiGetHandleUserData(hObject, dwType, (PVOID) &Brh_Attr)) ||
|
||||||
(Brh_Attr == NULL)) break;
|
(Brh_Attr == NULL)) break;
|
||||||
|
|
||||||
pTeb = NtCurrentTeb();
|
pTeb = NtCurrentTeb();
|
||||||
|
|
||||||
if (pTeb->Win32ThreadInfo == NULL) break;
|
if (pTeb->Win32ThreadInfo == NULL) break;
|
||||||
|
|
||||||
if ((pTeb->GdiTebBatch.Offset + sizeof(GDIBSOBJECT)) <= GDIBATCHBUFSIZE)
|
pgO = GdiAllocBatchCommand(NULL, GdiBCDelObj);
|
||||||
|
if (pgO)
|
||||||
{
|
{
|
||||||
PGDIBSOBJECT pgO = (PGDIBSOBJECT)(&pTeb->GdiTebBatch.Buffer[0] +
|
|
||||||
pTeb->GdiTebBatch.Offset);
|
|
||||||
pgO->gbHdr.Cmd = GdiBCDelObj;
|
|
||||||
pgO->gbHdr.Size = sizeof(GDIBSOBJECT);
|
|
||||||
pgO->hgdiobj = hObject;
|
pgO->hgdiobj = hObject;
|
||||||
|
|
||||||
pTeb->GdiTebBatch.Offset += sizeof(GDIBSOBJECT);
|
|
||||||
pTeb->GdiBatchCount++;
|
|
||||||
if (pTeb->GdiBatchCount >= GDI_BatchLimit) NtGdiFlush();
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case GDI_OBJECT_TYPE_BITMAP:
|
case GDI_OBJECT_TYPE_BITMAP:
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NtGdiDeleteObjectApp(hObject);
|
return NtGdiDeleteObjectApp(hObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue