Ken Thomases : winemac: Add support for the CF_METAFILEPICT clipboard format.

Alexandre Julliard julliard at winehq.org
Fri Nov 22 10:23:06 CST 2013


Module: wine
Branch: master
Commit: cdad61369c94eb2d90fb330176fc6fd2c31885c9
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=cdad61369c94eb2d90fb330176fc6fd2c31885c9

Author: Ken Thomases <ken at codeweavers.com>
Date:   Fri Nov 22 04:31:28 2013 -0600

winemac: Add support for the CF_METAFILEPICT clipboard format.

---

 dlls/winemac.drv/clipboard.c |   58 ++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 58 insertions(+), 0 deletions(-)

diff --git a/dlls/winemac.drv/clipboard.c b/dlls/winemac.drv/clipboard.c
index a648fcc..9f4a81f 100644
--- a/dlls/winemac.drv/clipboard.c
+++ b/dlls/winemac.drv/clipboard.c
@@ -72,6 +72,7 @@ typedef struct
 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_metafilepict(CFDataRef data);
 static HANDLE import_nsfilenames_to_hdrop(CFDataRef data);
 static HANDLE import_oemtext_to_text(CFDataRef data);
 static HANDLE import_oemtext_to_unicodetext(CFDataRef data);
@@ -90,6 +91,7 @@ static CFDataRef export_clipboard_data(HANDLE data);
 static CFDataRef export_bitmap_to_bmp(HANDLE data);
 static CFDataRef export_dib_to_bmp(HANDLE data);
 static CFDataRef export_hdrop_to_filenames(HANDLE data);
+static CFDataRef export_metafilepict(HANDLE data);
 static CFDataRef export_oemtext_to_utf8(HANDLE data);
 static CFDataRef export_oemtext_to_utf16(HANDLE data);
 static CFDataRef export_text_to_utf8(HANDLE data);
@@ -194,6 +196,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_METAFILEPICT,      CFSTR("org.winehq.builtin.metafilepict"),       import_metafilepict,            export_metafilepict,        FALSE },
 };
 
 static const WCHAR wszRichTextFormat[] = {'R','i','c','h',' ','T','e','x','t',' ','F','o','r','m','a','t',0};
@@ -671,6 +675,33 @@ static HANDLE import_bmp_to_dib(CFDataRef data)
 
 
 /**************************************************************************
+ *              import_metafilepict
+ *
+ *  Import metafile picture data, converting it to CF_METAFILEPICT.
+ */
+static HANDLE import_metafilepict(CFDataRef data)
+{
+    HANDLE ret = 0;
+    CFIndex len = CFDataGetLength(data);
+    METAFILEPICT *mfp;
+
+    TRACE("data %s\n", debugstr_cf(data));
+
+    if (len >= sizeof(*mfp) && (ret = GlobalAlloc(0, sizeof(*mfp))))
+    {
+        const BYTE *bytes = (const BYTE*)CFDataGetBytePtr(data);
+
+        mfp = GlobalLock(ret);
+        memcpy(mfp, bytes, sizeof(*mfp));
+        mfp->hMF = SetMetaFileBitsEx(len - sizeof(*mfp), bytes + sizeof(*mfp));
+        GlobalUnlock(ret);
+    }
+
+    return ret;
+}
+
+
+/**************************************************************************
  *              import_nsfilenames_to_hdrop
  *
  *  Import NSFilenamesPboardType data, converting the property-list-
@@ -1231,6 +1262,33 @@ done:
 
 
 /**************************************************************************
+ *              export_metafilepict
+ *
+ *  Export a metafile to data.
+ */
+static CFDataRef export_metafilepict(HANDLE data)
+{
+    CFMutableDataRef ret = NULL;
+    METAFILEPICT *mfp = GlobalLock(data);
+    unsigned int size = GetMetaFileBitsEx(mfp->hMF, 0, NULL);
+
+    TRACE("data %p\n", data);
+
+    ret = CFDataCreateMutable(NULL, sizeof(*mfp) + size);
+    if (ret)
+    {
+        CFDataAppendBytes(ret, (UInt8*)mfp, sizeof(*mfp));
+        CFDataIncreaseLength(ret, size);
+        GetMetaFileBitsEx(mfp->hMF, size, (BYTE*)CFDataGetMutableBytePtr(ret) + sizeof(*mfp));
+    }
+
+    GlobalUnlock(data);
+    TRACE(" -> %s\n", debugstr_cf(ret));
+    return ret;
+}
+
+
+/**************************************************************************
  *              export_oemtext_to_utf8
  *
  *  Export CF_OEMTEXT to UTF-8.




More information about the wine-cvs mailing list