[PATCH] gdiplus: Add support for reading nested metafiles.

Vincent Povirk vincent at codeweavers.com
Fri Feb 22 10:59:32 CST 2019


Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
---
 dlls/gdiplus/metafile.c | 33 +++++++++++++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index 08dde2fec62..1e48d07703b 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;
-- 
2.17.1




More information about the wine-devel mailing list