mirror of
https://github.com/reactos/reactos.git
synced 2025-08-03 15:16:36 +00:00
[Win32SS] Support Clipboard Metafile
Major fix ups and plugging in missing code changes. Handle code is from another project currently being developed for ReactOS. See CORE-12143
This commit is contained in:
parent
07fa6fc38c
commit
da264743e1
7 changed files with 173 additions and 77 deletions
|
@ -115,7 +115,9 @@ ASSERT_LOCK_ORDER(
|
|||
(objt) == GDIObjType_BRUSH_TYPE)
|
||||
#define ASSERT_EXCLUSIVE_OBJECT_TYPE(objt) \
|
||||
ASSERT((objt) == GDIObjType_DC_TYPE || \
|
||||
(objt) == GDIObjType_RGN_TYPE)
|
||||
(objt) == GDIObjType_RGN_TYPE || \
|
||||
(objt) == GDIObjType_UMPD_TYPE || \
|
||||
(objt) == GDIObjType_META_TYPE)
|
||||
#define ASSERT_TRYLOCK_OBJECT_TYPE(objt) \
|
||||
ASSERT((objt) == GDIObjType_DRVOBJ_TYPE)
|
||||
#else
|
||||
|
@ -177,7 +179,7 @@ apfnCleanup[] =
|
|||
NULL, /* 12 GDIObjType_UNUSED4_TYPE */
|
||||
NULL, /* 13 GDIObjType_SPACE_TYPE, unused */
|
||||
NULL, /* 14 GDIObjType_UNUSED5_TYPE */
|
||||
NULL, /* 15 GDIObjType_META_TYPE, unused */
|
||||
GDIOBJ_vCleanup, /* 15 GDIObjType_META_TYPE */
|
||||
NULL, /* 16 GDIObjType_EFSTATE_TYPE, unused */
|
||||
NULL, /* 17 GDIObjType_BMFD_TYPE, unused */
|
||||
NULL, /* 18 GDIObjType_VTFD_TYPE, unused */
|
||||
|
|
|
@ -13,11 +13,8 @@
|
|||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
// Need to move this to NtGdiTyp.h
|
||||
#define GDITAG_TYPE_EMF 'XEFM' // EnhMetaFile
|
||||
#define GDITAG_TYPE_MFP '_PFM' // MetaFile Picture
|
||||
|
||||
// Internal Use
|
||||
// Internal Use Only
|
||||
typedef struct _METATYPEOBJ
|
||||
{
|
||||
BASEOBJECT BaseObject;
|
||||
|
@ -30,18 +27,6 @@ typedef struct _METATYPEOBJ
|
|||
} METATYPEOBJ, *PMETATYPEOBJ;
|
||||
|
||||
|
||||
//
|
||||
// Plug Me in Somewhere? Clipboard cleanup?
|
||||
//
|
||||
VOID
|
||||
FASTCALL
|
||||
METATYPEOBJ__vCleanup(PVOID ObjectBody)
|
||||
{
|
||||
PMETATYPEOBJ pmto = (PMETATYPEOBJ)ObjectBody;
|
||||
GDIOBJ_hInsertObject(&pmto->BaseObject, GDI_OBJ_HMGR_POWNED);
|
||||
GDIOBJ_vDeleteObject(&pmto->BaseObject);
|
||||
}
|
||||
|
||||
/* System Service Calls ******************************************************/
|
||||
|
||||
/*
|
||||
|
@ -79,7 +64,7 @@ NtGdiCreateServerMetaFile(
|
|||
cjData &&
|
||||
pjData )
|
||||
{
|
||||
pmto = (PMETATYPEOBJ)GDIOBJ_AllocObjWithHandle(GDIObjType_META_TYPE, sizeof(METATYPEOBJ) + cjData);
|
||||
pmto = (PMETATYPEOBJ)GDIOBJ_AllocObjWithHandle(GDILoObjType_LO_META_TYPE, sizeof(METATYPEOBJ) + cjData);
|
||||
if ( pmto )
|
||||
{
|
||||
pmto->iType = iType;
|
||||
|
@ -90,8 +75,8 @@ NtGdiCreateServerMetaFile(
|
|||
|
||||
_SEH2_TRY
|
||||
{
|
||||
ProbeForRead( pjData, cjData, 1 );
|
||||
RtlCopyMemory( pmto->pjData, pjData, cjData) ;
|
||||
ProbeForRead( pjData, cjData, 1 );
|
||||
RtlCopyMemory( pmto->pjData, pjData, cjData) ;
|
||||
}
|
||||
_SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER)
|
||||
{
|
||||
|
@ -102,7 +87,7 @@ NtGdiCreateServerMetaFile(
|
|||
if (Pass)
|
||||
{
|
||||
GDIOBJ_vSetObjectOwner(&pmto->BaseObject, GDI_OBJ_HMGR_PUBLIC);
|
||||
GDIOBJ_vDereferenceObject ((POBJ)pmto);
|
||||
GDIOBJ_vUnlockObject(&pmto->BaseObject);
|
||||
return pmto->BaseObject.hHmgr;
|
||||
}
|
||||
else
|
||||
|
@ -132,7 +117,7 @@ NtGdiGetServerMetaFileBits(
|
|||
ULONG cjRet = 0;
|
||||
PMETATYPEOBJ pmto;
|
||||
|
||||
pmto = (PMETATYPEOBJ) GDIOBJ_ShareLockObj ((HGDIOBJ) hmo, GDIObjType_META_TYPE);
|
||||
pmto = (PMETATYPEOBJ) GDIOBJ_LockObject( hmo, GDIObjType_META_TYPE);
|
||||
|
||||
if (!pmto)
|
||||
return 0;
|
||||
|
@ -175,7 +160,7 @@ NtGdiGetServerMetaFileBits(
|
|||
}
|
||||
}
|
||||
|
||||
GDIOBJ_vDereferenceObject ((POBJ)pmto);
|
||||
GDIOBJ_vUnlockObject(&pmto->BaseObject);
|
||||
return cjRet;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue