[PATCH] gdiplus: GdipCreateMetafileFromWmfFile will also load EMFs

Andrew Eikum aeikum at codeweavers.com
Wed Aug 16 14:32:00 CDT 2017


Signed-off-by: Andrew Eikum <aeikum at codeweavers.com>
---
 dlls/gdiplus/metafile.c       | 13 ++++++++++---
 dlls/gdiplus/tests/metafile.c | 17 +++++++++++++++++
 2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index 41355bc3d2..0bd3033a1d 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -2361,13 +2361,20 @@ GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE hwmf, BOOL delete,
 GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR *file,
     GDIPCONST WmfPlaceableFileHeader * placeable, GpMetafile **metafile)
 {
-    HMETAFILE hmf = GetMetaFileW(file);
+    HMETAFILE hmf;
+    HENHMETAFILE emf;
 
     TRACE("(%s, %p, %p)\n", debugstr_w(file), placeable, metafile);
 
-    if(!hmf) return InvalidParameter;
+    hmf = GetMetaFileW(file);
+    if(hmf)
+        return GdipCreateMetafileFromWmf(hmf, TRUE, placeable, metafile);
 
-    return GdipCreateMetafileFromWmf(hmf, TRUE, placeable, metafile);
+    emf = GetEnhMetaFileW(file);
+    if(emf)
+        return GdipCreateMetafileFromEmf(emf, TRUE, metafile);
+
+    return GenericError;
 }
 
 GpStatus WINGDIPAPI GdipCreateMetafileFromFile(GDIPCONST WCHAR *file,
diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c
index 1d36d9e457..9770a8f6ab 100644
--- a/dlls/gdiplus/tests/metafile.c
+++ b/dlls/gdiplus/tests/metafile.c
@@ -2702,6 +2702,7 @@ static void test_fillpath(void)
 {
     static const WCHAR description[] = {'w','i','n','e','t','e','s','t',0};
     static const GpRectF frame = {0.0, 0.0, 100.0, 100.0};
+    static const WCHAR winetestemfW[] = {'w','i','n','e','t','e','s','t','.','e','m','f',0};
 
     GpMetafile *metafile;
     GpGraphics *graphics;
@@ -2745,10 +2746,26 @@ static void test_fillpath(void)
     expect(Ok, stat);
 
     check_emfplus(hemf, fill_path_records, "fill path");
+
+    /* write to disk */
+    DeleteEnhMetaFile(CopyEnhMetaFileW(hemf, winetestemfW));
+
     DeleteEnhMetaFile(hemf);
 
     stat = GdipDisposeImage((GpImage*)metafile);
     expect(Ok, stat);
+
+    /* should succeed when given path to an EMF */
+    stat = GdipCreateMetafileFromWmfFile(winetestemfW, NULL, &metafile);
+    expect(Ok, stat);
+
+    stat = GdipDisposeImage((GpImage*)metafile);
+    expect(Ok, stat);
+
+    DeleteFileW(winetestemfW);
+
+    stat = GdipCreateMetafileFromWmfFile(winetestemfW, NULL, &metafile);
+    expect(GenericError, stat);
 }
 
 START_TEST(metafile)
-- 
2.14.1




More information about the wine-patches mailing list