Module: wine Branch: master Commit: a4ab858a960800f3bc7c1ff7571c78d93196f8be URL: http://source.winehq.org/git/wine.git/?a=commit;h=a4ab858a960800f3bc7c1ff757...
Author: Andrew Eikum aeikum@codeweavers.com Date: Wed Aug 16 14:32:00 2017 -0500
gdiplus: GdipCreateMetafileFromWmfFile will also load EMFs.
Signed-off-by: Andrew Eikum aeikum@codeweavers.com Signed-off-by: Vincent Povirk vincent@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
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 41355bc..0bd3033 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 1d36d9e..9770a8f 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)