Alistair Leslie-Hughes : gdiplus: GdipConvertToEmfPlus parameter succ is optional.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri Jul 10 08:50:50 CDT 2015
Module: wine
Branch: master
Commit: 94f6d069f2b639ffb24f95cc02f250dccfa2a054
URL: http://source.winehq.org/git/wine.git/?a=commit;h=94f6d069f2b639ffb24f95cc02f250dccfa2a054
Author: Alistair Leslie-Hughes <leslie_alistair at hotmail.com>
Date: Thu Jul 9 16:10:24 2015 +1000
gdiplus: GdipConvertToEmfPlus parameter succ is optional.
---
dlls/gdiplus/metafile.c | 5 +--
dlls/gdiplus/tests/metafile.c | 79 +++++++++++++++++++++++++++++++++++++++++++
2 files changed, 82 insertions(+), 2 deletions(-)
diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index 24ab6be..d9bc337 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -1127,10 +1127,11 @@ GpStatus WINGDIPAPI GdipConvertToEmfPlus(const GpGraphics* ref,
TRACE("(%p,%p,%p,%u,%s,%p)\n", ref, metafile, succ, emfType,
debugstr_w(description), out_metafile);
- if(!ref || !metafile || !out_metafile)
+ if(!ref || !metafile || !out_metafile || emfType < EmfTypeEmfOnly || emfType > EmfTypeEmfPlusDual)
return InvalidParameter;
- *succ = FALSE;
+ if(succ)
+ *succ = FALSE;
*out_metafile = NULL;
if(!(calls++))
diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c
index f9a5092..3df4ae5 100644
--- a/dlls/gdiplus/tests/metafile.c
+++ b/dlls/gdiplus/tests/metafile.c
@@ -946,6 +946,84 @@ static void test_pagetransform(void)
expect(Ok, stat);
}
+static void test_converttoemfplus(void)
+{
+ GpStatus (WINAPI *pGdipConvertToEmfPlus)( const GpGraphics *graphics, GpMetafile *metafile, BOOL *succ,
+ EmfType emfType, const WCHAR *description, GpMetafile **outmetafile);
+ static const GpRectF frame = {0.0, 0.0, 100.0, 100.0};
+ static const WCHAR description[] = {'w','i','n','e','t','e','s','t',0};
+ GpStatus stat;
+ GpMetafile *metafile, *metafile2 = NULL, *emhmeta;
+ GpGraphics *graphics;
+ HDC hdc;
+ BOOL succ;
+ HMODULE mod = GetModuleHandleA("gdiplus.dll");
+
+ pGdipConvertToEmfPlus = (void*)GetProcAddress( mod, "GdipConvertToEmfPlus");
+ if(!pGdipConvertToEmfPlus)
+ {
+ /* GdipConvertToEmfPlus was introduced in Windows Vista. */
+ win_skip("GDIPlus version 1.1 not available\n");
+ return;
+ }
+
+ hdc = CreateCompatibleDC(0);
+
+ stat = GdipRecordMetafile(hdc, MetafileTypeEmf, &frame, MetafileFrameUnitPixel, description, &metafile);
+ expect(Ok, stat);
+
+ stat = GdipRecordMetafile(hdc, EmfTypeEmfPlusOnly, &frame, MetafileFrameUnitPixel, description, &emhmeta);
+ expect(Ok, stat);
+
+ DeleteDC(hdc);
+
+ if (stat != Ok)
+ return;
+
+ stat = GdipGetImageGraphicsContext((GpImage*)metafile, &graphics);
+ expect(Ok, stat);
+
+ /* Invalid Parameters */
+ stat = pGdipConvertToEmfPlus(NULL, metafile, &succ, EmfTypeEmfPlusOnly, description, &metafile2);
+ expect(InvalidParameter, stat);
+
+ stat = pGdipConvertToEmfPlus(graphics, NULL, &succ, EmfTypeEmfPlusOnly, description, &metafile2);
+ expect(InvalidParameter, stat);
+
+ stat = pGdipConvertToEmfPlus(graphics, metafile, &succ, EmfTypeEmfPlusOnly, description, NULL);
+ expect(InvalidParameter, stat);
+
+ stat = pGdipConvertToEmfPlus(graphics, metafile, NULL, MetafileTypeInvalid, NULL, &metafile2);
+ expect(InvalidParameter, stat);
+
+ stat = pGdipConvertToEmfPlus(graphics, metafile, NULL, MetafileTypeEmfPlusDual+1, NULL, &metafile2);
+ expect(InvalidParameter, stat);
+
+ /* If we are already an Enhanced Metafile then the conversion fails. */
+ stat = pGdipConvertToEmfPlus(graphics, emhmeta, NULL, EmfTypeEmfPlusOnly, NULL, &metafile2);
+ todo_wine expect(InvalidParameter, stat);
+
+ stat = pGdipConvertToEmfPlus(graphics, metafile, NULL, EmfTypeEmfPlusOnly, NULL, &metafile2);
+ todo_wine expect(Ok, stat);
+ if(metafile2)
+ GdipDisposeImage((GpImage*)metafile2);
+
+ succ = FALSE;
+ stat = pGdipConvertToEmfPlus(graphics, metafile, &succ, EmfTypeEmfPlusOnly, NULL, &metafile2);
+ todo_wine expect(Ok, stat);
+ if(metafile2)
+ GdipDisposeImage((GpImage*)metafile2);
+
+ stat = GdipDeleteGraphics(graphics);
+ expect(Ok, stat);
+
+ stat = GdipDisposeImage((GpImage*)metafile);
+ expect(Ok, stat);
+
+ stat = GdipDisposeImage((GpImage*)emhmeta);
+ expect(Ok, stat);
+}
+
START_TEST(metafile)
{
struct GdiplusStartupInput gdiplusStartupInput;
@@ -970,6 +1048,7 @@ START_TEST(metafile)
test_emfonly();
test_fillrect();
test_pagetransform();
+ test_converttoemfplus();
GdiplusShutdown(gdiplusToken);
}
More information about the wine-cvs
mailing list