Vincent Povirk : gdiplus: Add support for reading nested metafiles.

Alexandre Julliard julliard at winehq.org
Mon Feb 25 15:10:33 CST 2019


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

Author: Vincent Povirk <vincent at codeweavers.com>
Date:   Fri Feb 22 10:59:32 2019 -0600

gdiplus: Add support for reading nested metafiles.

Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at 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;




More information about the wine-cvs mailing list