Commit cdad6136 authored by Ken Thomases's avatar Ken Thomases Committed by Alexandre Julliard

winemac: Add support for the CF_METAFILEPICT clipboard format.

parent a983cfb0
......@@ -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.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment