From 73aed1b531627e1ebaacfec3e11f186b99d9fa52 Mon Sep 17 00:00:00 2001 From: Jeff Smith Date: Thu, 26 Oct 2023 00:11:17 -0500 Subject: [PATCH] gdiplus/tests: Add tests related to setting the page tranform. --- dlls/gdiplus/tests/graphics.c | 97 +++++++++++++++++++++++++++++++++++ include/gdiplusflat.h | 1 + 2 files changed, 98 insertions(+) diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 89baff64fa4..40b624df1ba 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -1828,6 +1828,9 @@ static void test_Get_Release_DC(void) /* GdipMeasureString */ status = GdipResetClip(graphics); expect(ObjectBusy, status); + status = GdipResetPageTransform(graphics); + todo_wine + expect(ObjectBusy, status); status = GdipResetWorldTransform(graphics); expect(ObjectBusy, status); /* GdipRestoreGraphics */ @@ -1844,6 +1847,9 @@ static void test_Get_Release_DC(void) expect(ObjectBusy, status); status = GdipSetPageScale(graphics, 1.0); expect(ObjectBusy, status); + status = GdipSetPageScale(graphics, 0.0); + todo_wine + expect(ObjectBusy, status); status = GdipSetPageUnit(graphics, UnitWorld); expect(ObjectBusy, status); status = GdipSetPixelOffsetMode(graphics, PixelOffsetModeDefault); @@ -4058,6 +4064,96 @@ static void test_transform(void) } } +static void test_set_page_transform(void) +{ + static const struct + { + GpUnit unit; + BOOL isInvalid; + } td_unit[] = + { + {UnitWorld, TRUE}, + {UnitDisplay}, + {UnitPixel}, + {UnitPoint}, + {UnitInch}, + {UnitDocument}, + {UnitMillimeter}, + {UnitMillimeter + 1, TRUE}, + }; + static const struct { + REAL scale; + BOOL isInvalid; + } td_scale[] = + { + {-1.0, TRUE}, + {0.0, TRUE}, + {0.5}, + {1.0}, + {2.0}, + }; + GpStatus status; + GpGraphics *graphics; + HDC hdc = GetDC( hwnd ); + GpUnit unit; + REAL scale; + UINT i; + + status = GdipCreateFromHDC(hdc, &graphics); + expect(Ok, status); + + for (i = 0; i < ARRAY_SIZE(td_unit); i++) + { + winetest_push_context("%u", i); + status = GdipSetPageUnit(graphics, td_unit[i].unit); + todo_wine_if(td_unit[i].unit > UnitMillimeter) + expect(td_unit[i].isInvalid ? InvalidParameter : Ok, status); + if (status == Ok) + { + status = GdipGetPageUnit(graphics, &unit); + expect(Ok, status); + expect(td_unit[i].unit, unit); + } + winetest_pop_context(); + } + + for (i = 0; i < ARRAY_SIZE(td_scale); i++) + { + winetest_push_context("%u", i); + status = GdipSetPageScale(graphics, td_scale[i].scale); + expect(td_scale[i].isInvalid ? InvalidParameter : Ok, status); + if (status == Ok) + { + status = GdipGetPageScale(graphics, &scale); + expect(Ok, status); + expectf_(td_scale[i].scale, scale, 0); + } + winetest_pop_context(); + } + + status = GdipGetPageUnit(graphics, &unit); + expect(Ok, status); + todo_wine + expect(UnitMillimeter, unit); + status = GdipGetPageScale(graphics, &scale); + expect(Ok, status); + expectf_(2.0, scale, 0); + status = GdipResetPageTransform(graphics); + todo_wine + expect(Ok, status); + status = GdipGetPageUnit(graphics, &unit); + expect(Ok, status); + todo_wine + expect(UnitDisplay, unit); + status = GdipGetPageScale(graphics, &scale); + expect(Ok, status); + todo_wine + expectf_(1.0, scale, 0); + + GdipDeleteGraphics(graphics); + ReleaseDC(hwnd, hdc); +} + static void test_pen_thickness(void) { static const struct test_data @@ -7275,6 +7371,7 @@ START_TEST(graphics) test_measure_string(); test_font_height_scaling(); test_transform(); + test_set_page_transform(); test_pen_thickness(); test_GdipMeasureString(); test_constructor_destructor(); diff --git a/include/gdiplusflat.h b/include/gdiplusflat.h index 10f4d435a85..8950ab3258b 100644 --- a/include/gdiplusflat.h +++ b/include/gdiplusflat.h @@ -290,6 +290,7 @@ GpStatus WINGDIPAPI GdipRecordMetafileFileNameI(GDIPCONST WCHAR*,HDC,EmfType, GDIPCONST GpRect*,MetafileFrameUnit,GDIPCONST WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC); GpStatus WINGDIPAPI GdipResetClip(GpGraphics*); +GpStatus WINGDIPAPI GdipResetPageTransform(GpGraphics*); GpStatus WINGDIPAPI GdipResetWorldTransform(GpGraphics*); GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState); GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder);