[PATCH 2/2] gdiplus: Improve GdipSetMetafileDownLevelRasterizationLimit.

Esme Povirk vincent at codeweavers.com
Sun May 17 20:16:25 CDT 2020


From: Vincent Povirk <vincent at codeweavers.com>

Signed-off-by: Vincent Povirk <vincent at codeweavers.com>
---
 dlls/gdiplus/metafile.c       |  8 +++++++-
 dlls/gdiplus/tests/metafile.c | 20 ++++++++++++++++++++
 2 files changed, 27 insertions(+), 1 deletion(-)

diff --git a/dlls/gdiplus/metafile.c b/dlls/gdiplus/metafile.c
index 3fdbc69fdc5..f0dacab4987 100644
--- a/dlls/gdiplus/metafile.c
+++ b/dlls/gdiplus/metafile.c
@@ -4028,9 +4028,15 @@ GpStatus WINGDIPAPI GdipSetMetafileDownLevelRasterizationLimit(GpMetafile *metaf
 {
     TRACE("(%p,%u)\n", metafile, limitDpi);
 
-    if (!metafile)
+    if (limitDpi == 0)
+        limitDpi = 96;
+
+    if (!metafile || limitDpi < 10)
         return InvalidParameter;
 
+    if (!metafile->record_dc)
+        return WrongState;
+
     metafile->limit_dpi = limitDpi;
 
     return Ok;
diff --git a/dlls/gdiplus/tests/metafile.c b/dlls/gdiplus/tests/metafile.c
index b9dc33fce35..3ffdb7b0e91 100644
--- a/dlls/gdiplus/tests/metafile.c
+++ b/dlls/gdiplus/tests/metafile.c
@@ -428,6 +428,23 @@ static void test_empty(void)
     expect(Ok, stat);
     ok(limit_dpi == 255, "limit_dpi was %d\n", limit_dpi);
 
+    stat = GdipSetMetafileDownLevelRasterizationLimit(metafile, 0);
+    expect(Ok, stat);
+
+    limit_dpi = 0xdeadbeef;
+    stat = GdipGetMetafileDownLevelRasterizationLimit(metafile, &limit_dpi);
+    expect(Ok, stat);
+    ok(limit_dpi == 96, "limit_dpi was %d\n", limit_dpi);
+
+    stat = GdipSetMetafileDownLevelRasterizationLimit(metafile, 1);
+    expect(InvalidParameter, stat);
+
+    stat = GdipSetMetafileDownLevelRasterizationLimit(metafile, 9);
+    expect(InvalidParameter, stat);
+
+    stat = GdipSetMetafileDownLevelRasterizationLimit(metafile, 10);
+    expect(Ok, stat);
+
     stat = GdipGetHemfFromMetafile(metafile, &hemf);
     expect(InvalidParameter, stat);
 
@@ -445,6 +462,9 @@ static void test_empty(void)
     expect(WrongState, stat);
     expect(0xdeadbeef, limit_dpi);
 
+    stat = GdipSetMetafileDownLevelRasterizationLimit(metafile, 200);
+    expect(WrongState, stat);
+
     check_metafile(metafile, empty_records, "empty metafile", dst_points, &frame, UnitPixel);
 
     sync_metafile(&metafile, "empty.emf");
-- 
2.17.1




More information about the wine-devel mailing list