From c8ebd4ade064cef7aea658973f71443c8121ea8a Mon Sep 17 00:00:00 2001 From: Dmitry Timoshkov Date: Fri, 19 Jul 2013 11:33:49 +0900 Subject: [PATCH] gdiplus/tests: Test how device to world transform correlates with clipping region bounding rectangle. --- dlls/gdiplus/tests/graphics.c | 214 ++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) diff --git a/dlls/gdiplus/tests/graphics.c b/dlls/gdiplus/tests/graphics.c index 327fbcac1fe..b7af6a75135 100644 --- a/dlls/gdiplus/tests/graphics.c +++ b/dlls/gdiplus/tests/graphics.c @@ -4529,6 +4529,8 @@ static void test_clipping(void) GpRegion *region, *region100x100; GpMatrix *matrix; GpRectF rect; + GpPointF ptf[2]; + GpUnit unit; HRGN hrgn; int ret; RECT rc; @@ -4537,6 +4539,10 @@ static void test_clipping(void) status = GdipCreateFromHDC(hdc, &graphics); expect(Ok, status); + status = GdipGetPageUnit(graphics, &unit); + expect(Ok, status); + expect(UnitDisplay, unit); + status = GdipCreateRegion(®ion); expect(Ok, status); status = GdipSetEmpty(region); @@ -4568,6 +4574,15 @@ static void test_clipping(void) ok(rect.X == 100.0 && rect.Y == 100.0 && rect.Width == 100.0 && rect.Height == 100.0, "expected 100.0,100.0-100.0,100.0, got %.2f,%.2f-%.2f,%.2f\n", rect.X, rect.Y, rect.Width, rect.Height); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 100.0 && ptf[0].Y == 100.0 && ptf[1].X == 200.0 && ptf[1].Y == 200.0, + "expected 100.0,100.0-200.0,200.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + status = GdipCreateMatrix(&matrix); expect(Ok, status); status = GdipScaleMatrix(matrix, 2.0, 4.0, MatrixOrderAppend); @@ -4616,6 +4631,15 @@ todo_wine "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 45.0 && ptf[0].Y == 20.0 && ptf[1].X == 95.0 && ptf[1].Y == 45.0, + "expected 45.0,20.0-95.0,45.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); expect(Ok, status); ret = GetRgnBox(hrgn, &rc); @@ -4632,6 +4656,15 @@ todo_wine "expected 210,420-410,820, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 210.0; + ptf[0].Y = 420.0; + ptf[1].X = 410.0; + ptf[1].Y = 820.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 100.0 && ptf[0].Y == 100.0 && ptf[1].X == 200.0 && ptf[1].Y == 200.0, + "expected 100.0,100.0-200.0,200.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + status = GdipSetPageScale(graphics, 2.0); expect(Ok, status); @@ -4674,6 +4707,15 @@ todo_wine "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 45.0 && ptf[0].Y == 20.0 && ptf[1].X == 95.0 && ptf[1].Y == 45.0, + "expected 45.0,20.0-95.0,45.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); expect(Ok, status); ret = GetRgnBox(hrgn, &rc); @@ -4690,6 +4732,15 @@ todo_wine "expected 210,420-410,820, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 210.0; + ptf[0].Y = 420.0; + ptf[1].X = 410.0; + ptf[1].Y = 820.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok(ptf[0].X == 100.0 && ptf[0].Y == 100.0 && ptf[1].X == 200.0 && ptf[1].Y == 200.0, + "expected 100.0,100.0-200.0,200.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + GdipSetPageUnit(graphics, UnitPoint); expect(Ok, status); @@ -4736,6 +4787,16 @@ todo_wine "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + ok((ptf[0].X == 13.75 && ptf[0].Y == 4.375 && ptf[1].X == 32.5 && ptf[1].Y == 13.75) || + broken(ptf[0].X == 45.0 && ptf[0].Y == 20.0 && ptf[1].X == 95.0 && ptf[1].Y == 45.0) /* before Win7 */, + "expected 13.75,4.375-32.5,13.75, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + status = GdipGetRegionHRgn(region100x100, NULL, &hrgn); expect(Ok, status); ret = GetRgnBox(hrgn, &rc); @@ -4754,6 +4815,27 @@ todo_wine "expected 560,1120-1094,2187, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 560.0; + ptf[0].Y = 1120.0; + ptf[1].X = 1094.0; + ptf[1].Y = 2187.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 100.0) < 0.001) + { + expectf(100.0, ptf[0].X); + expectf(100.0, ptf[0].Y); + expectf(200.125, ptf[1].X); + expectf(200.03125, ptf[1].Y); + } + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 275.0) < 0.001), "expected 275.0, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 275.0) < 0.001), "expected 275.0, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 542.0) < 0.001), "expected 542.0, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 541.75) < 0.001), "expected 541.75, got %f\n", ptf[1].Y); + } + status = GdipTransformRegion(region100x100, matrix); expect(Ok, status); @@ -4780,6 +4862,27 @@ todo_wine "expected 1147,4534-2214,8800, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 1147.0; + ptf[0].Y = 4534.0; + ptf[1].X = 2214.0; + ptf[1].Y = 8800.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 210.0625) < 0.001) + { + expectf(210.0625, ptf[0].X); + expectf(420.0625, ptf[0].Y); + expectf(410.125, ptf[1].X); + expectf(820.0, ptf[1].Y); + } + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 568.5) < 0.001), "expected 568.5, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 1128.5) < 0.001), "expected 1128.5, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 1102.0) < 0.001), "expected 1102.0, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 2195.0) < 0.001), "expected 2195.0, got %f\n", ptf[1].Y); + } + GdipDeleteMatrix(matrix); GdipDeleteRegion(region); GdipDeleteRegion(region100x100); @@ -4796,6 +4899,8 @@ static void test_clipping_2(void) GpRegion *region; GpMatrix *matrix; GpRectF rect; + GpPointF ptf[2]; + GpUnit unit; HRGN hrgn; int ret; RECT rc; @@ -4804,6 +4909,10 @@ static void test_clipping_2(void) status = GdipCreateFromHDC(hdc, &graphics); expect(Ok, status); + status = GdipGetPageUnit(graphics, &unit); + expect(Ok, status); + expect(UnitDisplay, unit); + GdipSetPageUnit(graphics, UnitInch); status = GdipCreateRegion(®ion); @@ -4834,6 +4943,17 @@ static void test_clipping_2(void) "expected 9600,9600-19200,19200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 9600.0; + ptf[0].Y = 9600.0; + ptf[1].X = 19200.0; + ptf[1].Y = 19200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + expectf(100.0, ptf[0].X); + expectf(100.0, ptf[0].Y); + expectf(200.0, ptf[1].X); + expectf(200.0, ptf[1].X); + GdipSetPageUnit(graphics, UnitPoint); status = GdipGetClip(graphics, region); @@ -4857,6 +4977,23 @@ todo_wine "expected 9600,9600-19200,19200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 9600.0; + ptf[0].Y = 9600.0; + ptf[1].X = 19200.0; + ptf[1].Y = 19200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 7200.0) < 0.001) + ok(ptf[0].X == 7200.0 && ptf[0].Y == 7200.0 && ptf[1].X == 14400.0 && ptf[1].Y == 14400.0, + "expected 7200.0,7200.0-14400.0,14400.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 100.0) < 0.001), "expected 100.0, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 100.0) < 0.001), "expected 100.0, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 200.0) < 0.001), "expected 200.0, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 200.0) < 0.001), "expected 200.0, got %f\n", ptf[1].Y); + } + GdipDeleteRegion(region); GdipSetPageUnit(graphics, UnitPixel); @@ -4891,6 +5028,23 @@ todo_wine "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 100.0) < 0.001) + ok(ptf[0].X == 100.0 && ptf[0].Y == 100.0 && ptf[1].X == 200.0 && ptf[1].Y == 200.0, + "expected 100.0,100.0-200.0,200.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 1.041667) < 0.001), "expected 1.041667, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 1.041667) < 0.001), "expected 1.041667, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 2.083333) < 0.001), "expected 2.083333, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 2.083333) < 0.001), "expected 2.083333, got %f\n", ptf[1].Y); + } + GdipSetPageUnit(graphics, UnitPoint); status = GdipGetClip(graphics, region); @@ -4914,6 +5068,23 @@ todo_wine "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 75.0) < 0.001) + ok(ptf[0].X == 75.0 && ptf[0].Y == 75.0 && ptf[1].X == 150.0 && ptf[1].Y == 150.0, + "expected 75.0,75.0-150.0,150.0, got %f,%f-%f,%f\n", ptf[0].X, ptf[0].Y, ptf[1].X, ptf[1].Y); + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 1.041667) < 0.001), "expected 1.041667, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 1.041667) < 0.001), "expected 1.041667, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 2.083333) < 0.001), "expected 2.083333, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 2.083333) < 0.001), "expected 2.083333, got %f\n", ptf[1].Y); + } + status = GdipCreateMatrix(&matrix); expect(Ok, status); status = GdipTranslateMatrix(matrix, 10.0, 10.0, MatrixOrderAppend); @@ -4941,6 +5112,17 @@ todo_wine "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + expectf(65.0, ptf[0].X); + expectf(65.0, ptf[0].Y); + expectf(140.0, ptf[1].X); + expectf(140.0, ptf[1].X); + status = GdipCreateMatrix(&matrix); expect(Ok, status); status = GdipScaleMatrix(matrix, 0.25, 0.5, MatrixOrderAppend); @@ -4968,6 +5150,17 @@ todo_wine "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + expectf(300.0, ptf[0].X); + expectf(150.0, ptf[0].Y); + expectf(600.0, ptf[1].X); + expectf(300.0, ptf[1].Y); + status = GdipSetPageScale(graphics, 2.0); expect(Ok, status); @@ -4992,6 +5185,27 @@ todo_wine "expected 100,100-200,200, got %d,%d-%d,%d\n", rc.left, rc.top, rc.right, rc.bottom); DeleteObject(hrgn); + ptf[0].X = 100.0; + ptf[0].Y = 100.0; + ptf[1].X = 200.0; + ptf[1].Y = 200.0; + status = GdipTransformPoints(graphics, CoordinateSpaceWorld, CoordinateSpaceDevice, ptf, 2); + expect(Ok, status); + if (fabs(ptf[0].X - 150.0) < 0.001) + { + expectf(150.0, ptf[0].X); + expectf(75.0, ptf[0].Y); + expectf(300.0, ptf[1].X); + expectf(150.0, ptf[1].Y); + } + else /* before Win7 */ + { + ok(broken(fabs(ptf[0].X - 300.0) < 0.001), "expected 300.0, got %f\n", ptf[0].X); + ok(broken(fabs(ptf[0].Y - 150.0) < 0.001), "expected 150.0, got %f\n", ptf[0].Y); + ok(broken(fabs(ptf[1].X - 600.0) < 0.001), "expected 600.0, got %f\n", ptf[1].X); + ok(broken(fabs(ptf[1].Y - 300.0) < 0.001), "expected 300.0, got %f\n", ptf[1].Y); + } + GdipDeleteRegion(region); GdipDeleteGraphics(graphics); DeleteDC(hdc);