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