gdiplus: Test how device to world transform correlates with clipping region bounding rectangle.
Dmitry Timoshkov
dmitry at baikal.ru
Wed Jul 17 02:53:11 CDT 2013
---
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 327fbca..b7af6a7 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);
--
1.8.3.2
More information about the wine-patches
mailing list