Huw Davies <huw@xxxxxxxxxxxxxxx> Implement CopyEnhMetaFileW -- Huw Davies huw@xxxxxxxxxxxxxxx Index: objects/enhmetafile.c =================================================================== RCS file: /home/wine/wine/objects/enhmetafile.c,v retrieving revision 1.72 diff -u -r1.72 enhmetafile.c --- objects/enhmetafile.c 11 Nov 2003 00:43:03 -0000 1.72 +++ objects/enhmetafile.c 1 Dec 2003 17:11:43 -0000 @@ -2248,6 +2248,43 @@ return hmfDst; } +/***************************************************************************** + * CopyEnhMetaFileW (GDI32.@) Duplicate an enhanced metafile + * + * + */ +HENHMETAFILE WINAPI CopyEnhMetaFileW( + HENHMETAFILE hmfSrc, + LPCWSTR file) +{ + ENHMETAHEADER *emrSrc = EMF_GetEnhMetaHeader( hmfSrc ), *emrDst; + HENHMETAFILE hmfDst; + + if(!emrSrc) return FALSE; + if (!file) { + emrDst = HeapAlloc( GetProcessHeap(), 0, emrSrc->nBytes ); + memcpy( emrDst, emrSrc, emrSrc->nBytes ); + hmfDst = EMF_Create_HENHMETAFILE( emrDst, FALSE ); + } else { + HANDLE hFile; + hFile = CreateFileW( file, GENERIC_WRITE | GENERIC_READ, 0, + NULL, CREATE_ALWAYS, 0, 0); + WriteFile( hFile, emrSrc, emrSrc->nBytes, 0, 0); + CloseHandle( hFile ); + /* Reopen file for reading only, so that apps can share + read access to the file while hmf is still valid */ + hFile = CreateFileW( file, GENERIC_READ, FILE_SHARE_READ, + NULL, OPEN_EXISTING, 0, 0); + if(hFile == INVALID_HANDLE_VALUE) { + ERR("Can't reopen emf for reading\n"); + return 0; + } + hmfDst = EMF_GetEnhMetaFile( hFile ); + CloseHandle( hFile ); + } + return hmfDst; +} + /* Struct to be used to be passed in the LPVOID parameter for cbEnhPaletteCopy */ typedef struct tagEMF_PaletteCopy Index: dlls/gdi/gdi32.spec =================================================================== RCS file: /home/wine/wine/dlls/gdi/gdi32.spec,v retrieving revision 1.32 diff -u -r1.32 gdi32.spec --- dlls/gdi/gdi32.spec 5 Nov 2003 23:25:37 -0000 1.32 +++ dlls/gdi/gdi32.spec 1 Dec 2003 17:11:43 -0000 @@ -31,7 +31,7 @@ @ stdcall CombineRgn(long long long long) @ stdcall CombineTransform(ptr ptr ptr) @ stdcall CopyEnhMetaFileA(long str) -@ stub CopyEnhMetaFileW +@ stdcall CopyEnhMetaFileW(long wstr) @ stdcall CopyMetaFileA(long str) @ stdcall CopyMetaFileW(long wstr) @ stdcall CreateBitmap(long long long long ptr)