}
/*
- * @unimplemented
+ * @implemented
*/
-HENHMETAFILE
+HANDLE
WINAPI
-GdiConvertEnhMetaFile(HENHMETAFILE hmf)
+GdiConvertEnhMetaFile(HENHMETAFILE hemf)
{
- UNIMPLEMENTED;
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
+ HANDLE hmo = NULL;
+ BYTE * Buffer = NULL;
+ UINT nSize;
+
+ nSize = GetEnhMetaFileBits( hemf, 0, NULL );
+ if (nSize == 0)
+ goto Exit;
+
+ // allocate buffer
+ Buffer = (BYTE *)LocalAlloc(LPTR, nSize);
+ if (Buffer == NULL)
+ goto Exit;
+
+ nSize = GetEnhMetaFileBits( hemf, nSize, Buffer );
+ if (nSize == 0)
+ goto Exit;
+
+ hmo = NtGdiCreateServerMetaFile( GDITAG_TYPE_EMF, nSize, Buffer, 0, 0, 0 );
+
+Exit:
+ // clean up
+ if (Buffer)
+ LocalFree(Buffer);
+ return hmo;
}
/*
- * @unimplemented
+ * @implemented
*/
HENHMETAFILE
WINAPI
-GdiCreateLocalEnhMetaFile(HENHMETAFILE hmo)
+GdiCreateLocalEnhMetaFile(HANDLE hmo)
{
- UNIMPLEMENTED;
- SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
- return 0;
+ HENHMETAFILE hEMF;
+ BYTE * Buffer = NULL;
+ UINT nSize;
+ DWORD iType, mm, xExt, yExt;
+
+ nSize = NtGdiGetServerMetaFileBits( hmo, 0, NULL, NULL, NULL, NULL, NULL);
+ if (nSize == 0)
+ goto Exit;
+
+ // allocate buffer
+ Buffer = (BYTE *)LocalAlloc(LPTR, nSize);
+ if (Buffer == NULL)
+ goto Exit;
+
+ // store to buffer
+ nSize = NtGdiGetServerMetaFileBits( hmo, nSize, Buffer, &iType, &mm, &xExt, &yExt);
+ if (nSize == 0)
+ goto Exit;
+
+ if ( iType == GDITAG_TYPE_MFP ) // handle conversion to EMF
+ {
+ METAFILEPICT Info;
+
+ Info.hMF = NULL;
+ Info.mm = mm;
+ Info.xExt = xExt;
+ Info.yExt = yExt;
+
+ hEMF = SetWinMetaFileBits( nSize, Buffer, NULL, &Info ); // Translate from old style to new style.
+ if (hEMF == NULL)
+ goto Exit;
+ }
+ else
+ {
+ hEMF = SetEnhMetaFileBits(nSize, Buffer);
+ if (hEMF == NULL)
+ goto Exit;
+ }
+
+Exit:
+ // clean up
+ if (Buffer)
+ LocalFree(Buffer);
+ return hEMF;
}
/*