Ken Thomases : winemac: Synthesize CF_METAFILEPICT from CF_ENHMETAFILE.
Alexandre Julliard
julliard at winehq.org
Fri Nov 22 10:23:06 CST 2013
Module: wine
Branch: master
Commit: d98dbf8fbd17d53d060bb8b4350d5ce6ea373ce1
URL: http://source.winehq.org/git/wine.git/?a=commit;h=d98dbf8fbd17d53d060bb8b4350d5ce6ea373ce1
Author: Ken Thomases <ken at codeweavers.com>
Date: Fri Nov 22 04:31:35 2013 -0600
winemac: Synthesize CF_METAFILEPICT from CF_ENHMETAFILE.
---
dlls/winemac.drv/clipboard.c | 46 +++++++++++++++++++++++++++++++++++++++++-
1 files changed, 45 insertions(+), 1 deletions(-)
diff --git a/dlls/winemac.drv/clipboard.c b/dlls/winemac.drv/clipboard.c
index 24a75b9..f9891e6 100644
--- a/dlls/winemac.drv/clipboard.c
+++ b/dlls/winemac.drv/clipboard.c
@@ -73,6 +73,7 @@ static HANDLE import_clipboard_data(CFDataRef data);
static HANDLE import_bmp_to_bitmap(CFDataRef data);
static HANDLE import_bmp_to_dib(CFDataRef data);
static HANDLE import_enhmetafile(CFDataRef data);
+static HANDLE import_enhmetafile_to_metafilepict(CFDataRef data);
static HANDLE import_metafilepict(CFDataRef data);
static HANDLE import_metafilepict_to_enhmetafile(CFDataRef data);
static HANDLE import_nsfilenames_to_hdrop(CFDataRef data);
@@ -200,7 +201,8 @@ static const struct
{ CF_HDROP, CFSTR("org.winehq.builtin.hdrop"), import_clipboard_data, export_clipboard_data, FALSE },
{ CF_HDROP, CFSTR("NSFilenamesPboardType"), import_nsfilenames_to_hdrop, export_hdrop_to_filenames, TRUE },
- { CF_ENHMETAFILE, CFSTR("org.winehq.builtin.enhmetafile"), import_enhmetafile, export_enhmetafile, FALSE },
+ { CF_ENHMETAFILE, CFSTR("org.winehq.builtin.enhmetafile"), import_enhmetafile, export_enhmetafile, FALSE },
+ { CF_METAFILEPICT, CFSTR("org.winehq.builtin.enhmetafile"), import_enhmetafile_to_metafilepict, NULL, TRUE },
{ CF_METAFILEPICT, CFSTR("org.winehq.builtin.metafilepict"), import_metafilepict, export_metafilepict, FALSE },
{ CF_ENHMETAFILE, CFSTR("org.winehq.builtin.metafilepict"), import_metafilepict_to_enhmetafile, NULL, TRUE },
@@ -700,6 +702,48 @@ static HANDLE import_enhmetafile(CFDataRef data)
/**************************************************************************
+ * import_enhmetafile_to_metafilepict
+ *
+ * Import enhanced metafile data, converting it to CF_METAFILEPICT.
+ */
+static HANDLE import_enhmetafile_to_metafilepict(CFDataRef data)
+{
+ HANDLE ret = 0, hmf;
+ HANDLE hemf;
+ METAFILEPICT *mfp;
+
+ if ((hmf = GlobalAlloc(0, sizeof(*mfp))) && (hemf = import_enhmetafile(data)))
+ {
+ ENHMETAHEADER header;
+ HDC hdc = CreateCompatibleDC(0);
+ unsigned int size = GetWinMetaFileBits(hemf, 0, NULL, MM_ISOTROPIC, hdc);
+ BYTE *bytes;
+
+ bytes = HeapAlloc(GetProcessHeap(), 0, size);
+ if (bytes && GetEnhMetaFileHeader(hemf, sizeof(header), &header) &&
+ GetWinMetaFileBits(hemf, size, bytes, MM_ISOTROPIC, hdc))
+ {
+ mfp = GlobalLock(hmf);
+ mfp->mm = MM_ISOTROPIC;
+ mfp->xExt = header.rclFrame.right - header.rclFrame.left;
+ mfp->yExt = header.rclFrame.bottom - header.rclFrame.top;
+ mfp->hMF = SetMetaFileBitsEx(size, bytes);
+ GlobalUnlock(hmf);
+
+ ret = hmf;
+ }
+
+ if (hdc) DeleteDC(hdc);
+ HeapFree(GetProcessHeap(), 0, bytes);
+ DeleteEnhMetaFile(hemf);
+ }
+
+ if (!ret) GlobalFree(hmf);
+ return ret;
+}
+
+
+/**************************************************************************
* import_metafilepict
*
* Import metafile picture data, converting it to CF_METAFILEPICT.
More information about the wine-cvs
mailing list