mirror of
https://github.com/reactos/reactos.git
synced 2024-12-28 01:55:19 +00:00
fixed NtGdiGetDCOrgEx() and NtGdiGetObject()
svn path=/trunk/; revision=6993
This commit is contained in:
parent
5e4291354e
commit
63a627527e
3 changed files with 76 additions and 76 deletions
|
@ -100,5 +100,13 @@ int FASTCALL
|
||||||
IntGdiGetClipBox(HDC hDC,
|
IntGdiGetClipBox(HDC hDC,
|
||||||
LPRECT rc);
|
LPRECT rc);
|
||||||
|
|
||||||
|
/* DC functions */
|
||||||
|
|
||||||
|
BOOL FASTCALL
|
||||||
|
IntGdiGetDCOrgEx(DC *dc, LPPOINT Point);
|
||||||
|
|
||||||
|
INT FASTCALL
|
||||||
|
IntGdiGetObject(HANDLE handle, INT count, LPVOID buffer);
|
||||||
|
|
||||||
#endif /* _WIN32K_INTGDI_H */
|
#endif /* _WIN32K_INTGDI_H */
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: cursoricon.c,v 1.35 2003/12/10 22:47:11 weiden Exp $ */
|
/* $Id: cursoricon.c,v 1.36 2003/12/13 13:45:17 weiden Exp $ */
|
||||||
|
|
||||||
#undef WIN32_LEAN_AND_MEAN
|
#undef WIN32_LEAN_AND_MEAN
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@
|
||||||
#include <include/surface.h>
|
#include <include/surface.h>
|
||||||
#include <include/palette.h>
|
#include <include/palette.h>
|
||||||
#include <include/eng.h>
|
#include <include/eng.h>
|
||||||
|
#include <include/intgdi.h>
|
||||||
#include <include/callback.h>
|
#include <include/callback.h>
|
||||||
#include "include/object.h"
|
#include "include/object.h"
|
||||||
#include <internal/safe.h>
|
#include <internal/safe.h>
|
||||||
|
@ -1054,10 +1055,10 @@ NtUserDrawIconEx(
|
||||||
if(istepIfAniCur)
|
if(istepIfAniCur)
|
||||||
DbgPrint("NtUserDrawIconEx: istepIfAniCur is not supported!\n");
|
DbgPrint("NtUserDrawIconEx: istepIfAniCur is not supported!\n");
|
||||||
|
|
||||||
if(!hbmMask || !NtGdiGetObject(hbmMask, sizeof(BITMAP), &bmpMask))
|
if(!hbmMask || !IntGdiGetObject(hbmMask, sizeof(BITMAP), &bmpMask))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if(hbmColor && !NtGdiGetObject(hbmColor, sizeof(BITMAP), &bmpColor))
|
if(hbmColor && !IntGdiGetObject(hbmColor, sizeof(BITMAP), &bmpColor))
|
||||||
goto done;
|
goto done;
|
||||||
|
|
||||||
if(hbmColor)
|
if(hbmColor)
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
/* $Id: dc.c,v 1.109 2003/12/12 12:53:10 gvg Exp $
|
/* $Id: dc.c,v 1.110 2003/12/13 13:45:18 weiden Exp $
|
||||||
*
|
*
|
||||||
* DC.C - Device context functions
|
* DC.C - Device context functions
|
||||||
*
|
*
|
||||||
|
@ -27,6 +27,7 @@
|
||||||
#include <ddk/ntddk.h>
|
#include <ddk/ntddk.h>
|
||||||
#include <ddk/ntddvid.h>
|
#include <ddk/ntddvid.h>
|
||||||
|
|
||||||
|
#include <internal/safe.h>
|
||||||
#include <win32k/bitmaps.h>
|
#include <win32k/bitmaps.h>
|
||||||
#include <win32k/brush.h>
|
#include <win32k/brush.h>
|
||||||
#include <win32k/cliprgn.h>
|
#include <win32k/cliprgn.h>
|
||||||
|
@ -853,27 +854,48 @@ NtGdiGetCurrentObject(HDC hDC, UINT ObjectType)
|
||||||
|
|
||||||
DC_GET_VAL_EX ( NtGdiGetCurrentPositionEx, IntGetCurrentPositionEx, w.CursPosX, w.CursPosY, POINT )
|
DC_GET_VAL_EX ( NtGdiGetCurrentPositionEx, IntGetCurrentPositionEx, w.CursPosX, w.CursPosY, POINT )
|
||||||
|
|
||||||
|
BOOL FASTCALL
|
||||||
|
IntGdiGetDCOrgEx(DC *dc, LPPOINT Point)
|
||||||
|
{
|
||||||
|
Point->x = dc->w.DCOrgX;
|
||||||
|
Point->y = dc->w.DCOrgY;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
BOOL STDCALL
|
BOOL STDCALL
|
||||||
NtGdiGetDCOrgEx(HDC hDC, LPPOINT Point)
|
NtGdiGetDCOrgEx(HDC hDC, LPPOINT Point)
|
||||||
{
|
{
|
||||||
PDC dc;
|
BOOL Ret;
|
||||||
|
DC *dc;
|
||||||
|
POINT SafePoint;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
if (!Point)
|
if(!Point)
|
||||||
{
|
{
|
||||||
|
SetLastWin32Error(ERROR_INVALID_PARAMETER);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
dc = DC_LockDc(hDC);
|
dc = DC_LockDc(hDC);
|
||||||
if (dc == NULL)
|
if(!dc)
|
||||||
{
|
{
|
||||||
|
SetLastWin32Error(ERROR_INVALID_HANDLE);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
Point->x = Point->y = 0;
|
Ret = IntGdiGetDCOrgEx(dc, &SafePoint);
|
||||||
|
|
||||||
Point->x += dc->w.DCOrgX;
|
Status = MmCopyToCaller(Point, &SafePoint, sizeof(POINT));
|
||||||
Point->y += dc->w.DCOrgY;
|
if(!NT_SUCCESS(Status))
|
||||||
DC_UnlockDc( hDC );
|
{
|
||||||
return TRUE;
|
SetLastNtError(Status);
|
||||||
|
DC_UnlockDc(hDC);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
DC_UnlockDc(hDC);
|
||||||
|
return Ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
COLORREF STDCALL
|
COLORREF STDCALL
|
||||||
|
@ -1315,70 +1337,13 @@ NtGdiGetDeviceCaps(HDC hDC,
|
||||||
DC_GET_VAL( INT, NtGdiGetMapMode, w.MapMode )
|
DC_GET_VAL( INT, NtGdiGetMapMode, w.MapMode )
|
||||||
DC_GET_VAL( INT, NtGdiGetPolyFillMode, w.polyFillMode )
|
DC_GET_VAL( INT, NtGdiGetPolyFillMode, w.polyFillMode )
|
||||||
|
|
||||||
INT STDCALL
|
INT FASTCALL
|
||||||
NtGdiGetObjectA(HANDLE handle, INT count, LPVOID buffer)
|
IntGdiGetObject(HANDLE handle, INT count, LPVOID buffer)
|
||||||
{
|
|
||||||
PGDIOBJ gdiObject;
|
|
||||||
INT result = 0;
|
|
||||||
DWORD objectType;
|
|
||||||
|
|
||||||
if (!count)
|
|
||||||
return 0;
|
|
||||||
gdiObject = GDIOBJ_LockObj (handle, GDI_OBJECT_TYPE_DONTCARE);
|
|
||||||
if (gdiObject == 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
objectType = GDIOBJ_GetObjectType(handle);
|
|
||||||
switch(objectType)
|
|
||||||
{
|
|
||||||
/* case GDI_OBJECT_TYPE_PEN:
|
|
||||||
result = PEN_GetObject((PENOBJ *)gdiObject, count, buffer);
|
|
||||||
break;
|
|
||||||
case GDI_OBJECT_TYPE_BRUSH:
|
|
||||||
result = BRUSH_GetObject((BRUSHOBJ *)gdiObject, count, buffer);
|
|
||||||
break; */
|
|
||||||
case GDI_OBJECT_TYPE_BITMAP:
|
|
||||||
result = BITMAP_GetObject((BITMAPOBJ *)gdiObject, count, buffer);
|
|
||||||
break;
|
|
||||||
/* case GDI_OBJECT_TYPE_FONT:
|
|
||||||
result = FONT_GetObjectA((FONTOBJ *)gdiObject, count, buffer);
|
|
||||||
|
|
||||||
// FIXME: Fix the LOGFONT structure for the stock fonts
|
|
||||||
|
|
||||||
if ( (handle >= FIRST_STOCK_HANDLE) && (handle <= LAST_STOCK_HANDLE) )
|
|
||||||
FixStockFontSizeA(handle, count, buffer);
|
|
||||||
break;
|
|
||||||
case GDI_OBJECT_TYPE_PALETTE:
|
|
||||||
result = PALETTE_GetObject((PALETTEOBJ *)gdiObject, count, buffer);
|
|
||||||
break; */
|
|
||||||
|
|
||||||
case GDI_OBJECT_TYPE_REGION:
|
|
||||||
case GDI_OBJECT_TYPE_DC:
|
|
||||||
case GDI_OBJECT_TYPE_METADC:
|
|
||||||
case GDI_OBJECT_TYPE_METAFILE:
|
|
||||||
case GDI_OBJECT_TYPE_ENHMETADC:
|
|
||||||
case GDI_OBJECT_TYPE_EMF:
|
|
||||||
DPRINT1("GDI object type 0x%08x not implemented\n", objectType);
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
DPRINT1("Invalid GDI object type 0x%08x\n", objectType);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
GDIOBJ_UnlockObj(handle, GDI_OBJECT_TYPE_DONTCARE);
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
INT STDCALL
|
|
||||||
NtGdiGetObjectW(HANDLE handle, INT count, LPVOID buffer)
|
|
||||||
{
|
{
|
||||||
PGDIOBJHDR gdiObject;
|
PGDIOBJHDR gdiObject;
|
||||||
INT result = 0;
|
INT result = 0;
|
||||||
DWORD objectType;
|
DWORD objectType;
|
||||||
|
|
||||||
if (!count)
|
|
||||||
return 0;
|
|
||||||
gdiObject = GDIOBJ_LockObj(handle, GDI_OBJECT_TYPE_DONTCARE);
|
gdiObject = GDIOBJ_LockObj(handle, GDI_OBJECT_TYPE_DONTCARE);
|
||||||
if (gdiObject == 0)
|
if (gdiObject == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1419,7 +1384,33 @@ NtGdiGetObjectW(HANDLE handle, INT count, LPVOID buffer)
|
||||||
INT STDCALL
|
INT STDCALL
|
||||||
NtGdiGetObject(HANDLE handle, INT count, LPVOID buffer)
|
NtGdiGetObject(HANDLE handle, INT count, LPVOID buffer)
|
||||||
{
|
{
|
||||||
return NtGdiGetObjectW(handle, count, buffer);
|
INT Ret;
|
||||||
|
LPVOID SafeBuf;
|
||||||
|
NTSTATUS Status;
|
||||||
|
|
||||||
|
if (count <= 0)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SafeBuf = ExAllocatePool(NonPagedPool, count);
|
||||||
|
if(!SafeBuf)
|
||||||
|
{
|
||||||
|
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ret = IntGdiGetObject(handle, count, SafeBuf);
|
||||||
|
|
||||||
|
Status = MmCopyToCaller(buffer, SafeBuf, count);
|
||||||
|
ExFreePool(SafeBuf);
|
||||||
|
if(!NT_SUCCESS(Status))
|
||||||
|
{
|
||||||
|
SetLastNtError(Status);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return Ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
DWORD STDCALL
|
DWORD STDCALL
|
||||||
|
|
Loading…
Reference in a new issue