Module: wine Branch: master Commit: e2f37558a7476dd8a9c7c77f9b863287e924e470 URL: https://source.winehq.org/git/wine.git/?a=commit;h=e2f37558a7476dd8a9c7c77f9...
Author: Vincent Povirk vincent@codeweavers.com Date: Fri Feb 22 10:59:32 2019 -0600
gdiplus: Add support for reading nested metafiles.
Signed-off-by: Vincent Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/gdiplus/metafile.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+)
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c index 08dde2f..1e48d07 100644 --- a/dlls/gdiplus/metafile.c +++ b/dlls/gdiplus/metafile.c @@ -1817,6 +1817,39 @@ static GpStatus metafile_deserialize_image(const BYTE *record_data, UINT data_si } break; } + case ImageDataTypeMetafile: + { + EmfPlusMetafile *metafiledata = &data->ImageData.metafile; + + if (data_size <= FIELD_OFFSET(EmfPlusMetafile, MetafileData)) + return InvalidParameter; + data_size -= FIELD_OFFSET(EmfPlusMetafile, MetafileData); + + switch (metafiledata->Type) { + case MetafileTypeEmf: + case MetafileTypeEmfPlusOnly: + case MetafileTypeEmfPlusDual: + { + HENHMETAFILE hemf; + + hemf = SetEnhMetaFileBits(data_size, metafiledata->MetafileData); + + if (!hemf) + return GenericError; + + status = GdipCreateMetafileFromEmf(hemf, TRUE, (GpMetafile**)image); + + if (status != Ok) + DeleteEnhMetaFile(hemf); + + break; + } + default: + FIXME("metafile type %d not supported.\n", metafiledata->Type); + return NotImplemented; + } + break; + } default: FIXME("image type %d not supported.\n", data->Type); return NotImplemented;