https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e157a5fe1c3bcbd8f7321…
commit e157a5fe1c3bcbd8f7321314f38b560a389efefa
Author: Katayama Hirofumi MZ <katayama.hirofumi.mz(a)gmail.com>
AuthorDate: Wed Apr 3 22:48:42 2019 +0900
Commit: GitHub <noreply(a)github.com>
CommitDate: Wed Apr 3 22:48:42 2019 +0900
[GDI32_APITEST] Improve DPtoLP testcase (#1459)
ROSTESTS-319
---
modules/rostests/apitests/gdi32/DPtoLP.c | 246 +++++++++++++++++++++++++------
1 file changed, 201 insertions(+), 45 deletions(-)
diff --git a/modules/rostests/apitests/gdi32/DPtoLP.c
b/modules/rostests/apitests/gdi32/DPtoLP.c
index d06b3754a7..d8c2cd5dc5 100644
--- a/modules/rostests/apitests/gdi32/DPtoLP.c
+++ b/modules/rostests/apitests/gdi32/DPtoLP.c
@@ -3,6 +3,7 @@
* LICENSE: GPL - See COPYING in the top level directory
* PURPOSE: Test for ...
* PROGRAMMERS: Timo Kreuzer
+ * Katayama Hirofumi MZ
*/
#include "precomp.h"
@@ -38,7 +39,7 @@ void Test_DPtoLP_Params()
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, apt, 0), 1);
- ok(GetLastError() == ERROR_SUCCESS, "Exected ERROR_SUCCESS, got %ld\n",
GetLastError());
+ ok_err(ERROR_SUCCESS);
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, apt, -2), 1);
@@ -62,36 +63,106 @@ void Test_DPtoLP_Params()
ReleaseDC(0, hdc);
}
+static void GetExtent(HDC hdc, SIZE *psizWnd, SIZE *psizView)
+{
+ GetWindowExtEx(hdc, psizWnd);
+ //trace("*psizWnd: (%ld, %ld)\n", psizWnd->cx, psizWnd->cy);
+
+ GetViewportExtEx(hdc, psizView);
+ //trace("*psizView: (%ld, %ld)\n", psizView->cx, psizView->cy);
+}
+
void Test_DPtoLP()
{
HDC hdc;
POINT apt[2];
XFORM xform;
LONG lLogPixelsX, lLogPixelsY;
+ SIZE sizWnd, sizView;
+ LONG xLow, yLow, xHigh, yHigh;
- apt[0].x = 1;
- apt[0].y = 1;
- apt[1].x = -1000;
- apt[1].y = 1000;
-
- hdc = GetDC(0);
+ hdc = CreateCompatibleDC(NULL);
lLogPixelsX = GetDeviceCaps(hdc, LOGPIXELSX);
lLogPixelsY = GetDeviceCaps(hdc, LOGPIXELSY);
+ trace("lLogPixelsX: %ld\n", lLogPixelsX);
+ trace("lLogPixelsY: %ld\n", lLogPixelsY);
+ // MM_TEXT
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
SetMapMode(hdc, MM_TEXT);
+ GetExtent(hdc, &sizWnd, &sizView);
ok_int(DPtoLP(hdc, apt, 2), 1);
- ok_int(apt[0].x, 1);
- ok_int(apt[0].y, 1);
- ok_int(apt[1].x, -1000);
- ok_int(apt[1].y, 1000);
+ ok_long(sizWnd.cx, 1);
+ ok_long(sizWnd.cy, 1);
+ ok_long(sizView.cx, 1);
+ ok_long(sizView.cy, 1);
+ ok_long(apt[0].x, 100);
+ ok_long(apt[0].y, 256);
+ ok_long(apt[1].x, -1000);
+ ok_long(apt[1].y, 1000);
+ // MM_LOMETRIC
apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
SetMapMode(hdc, MM_LOMETRIC);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ ok_long(apt[0].x, MulDiv(100, sizWnd.cx, sizView.cx));
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, MulDiv(-1000, sizWnd.cx, sizView.cx));
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+ xLow = apt[0].x;
+ yLow = apt[0].y;
+
+ // MM_HIMETRIC
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ SetMapMode(hdc, MM_HIMETRIC);
+ GetExtent(hdc, &sizWnd, &sizView);
ok_int(DPtoLP(hdc, apt, 2), 1);
- ok_int(apt[0].x * lLogPixelsX, 33888 );
- ok_int(apt[0].y * lLogPixelsY, -86688 );
- ok_int(apt[1].x * lLogPixelsX, -338688 );
- ok_int(apt[1].y * lLogPixelsY, -338688 );
+ ok_long(apt[0].x, MulDiv(100, sizWnd.cx, sizView.cx));
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, MulDiv(-1000, sizWnd.cx, sizView.cx));
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+ xHigh = apt[0].x;
+ yHigh = apt[0].y;
+ ok(labs(xLow) * 9 < labs(xHigh) && labs(xHigh) < 11 * labs(xLow),
"%ld, %ld\n", xLow, xHigh);
+ ok(labs(yLow) * 9 < labs(yHigh) && labs(yHigh) < 11 * labs(yLow),
"%ld, %ld\n", yLow, yHigh);
+
+ // MM_LOENGLISH
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ SetMapMode(hdc, MM_LOENGLISH);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ ok_long(apt[0].x, MulDiv(100, sizWnd.cx, sizView.cx));
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, MulDiv(-1000, sizWnd.cx, sizView.cx));
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+ xLow = apt[0].x;
+ yLow = apt[0].y;
+
+ // MM_HIENGLISH
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ SetMapMode(hdc, MM_HIENGLISH);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ ok_long(apt[0].x, MulDiv(100, sizWnd.cx, sizView.cx));
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, MulDiv(-1000, sizWnd.cx, sizView.cx));
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+ xHigh = apt[0].x;
+ yHigh = apt[0].y;
+ ok(labs(xLow) * 9 < labs(xHigh) && labs(xHigh) < 11 * labs(xLow),
"%ld, %ld\n", xLow, xHigh);
+ ok(labs(yLow) * 9 < labs(yHigh) && labs(yHigh) < 11 * labs(yLow),
"%ld, %ld\n", yLow, yHigh);
+
+ // MM_TWIPS
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ SetMapMode(hdc, MM_TWIPS);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ ok_long(apt[0].x, MulDiv(100, sizWnd.cx, sizView.cx));
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, MulDiv(-1000, sizWnd.cx, sizView.cx));
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+
SetGraphicsMode(hdc, GM_ADVANCED);
SetMapMode(hdc, MM_ANISOTROPIC);
@@ -99,63 +170,148 @@ void Test_DPtoLP()
xform.eM12 = 0.;
xform.eM21 = 0.;
xform.eM22 = 1.;
- xform.eDx = (FLOAT)4294967167.999999761;
+ xform.eDx = 2.;
xform.eDy = 1.;
ok_int(SetWorldTransform(hdc, &xform), 1);
+ // eDx == 2, eDy == 1
apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ GetExtent(hdc, &sizWnd, &sizView);
ok_int(DPtoLP(hdc, apt, 2), 1);
- ok_int(apt[0].x * lLogPixelsX, 58464 );
- ok_int(apt[0].y * lLogPixelsY, -86784 );
- ok_int(apt[1].x * lLogPixelsX, -314112 );
- ok_int(apt[1].y * lLogPixelsY, -338784 );
+ ok_long(apt[0].x, MulDiv(100, sizWnd.cx, sizView.cx) - (LONG)xform.eDx);
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy) - (LONG)xform.eDy);
+ ok_long(apt[1].x, MulDiv(-1000, sizWnd.cx, sizView.cx) - (LONG)xform.eDx);
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy) - (LONG)xform.eDy);
+ // eM11 == 10000000
apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
xform.eM11 = 10000000.;
+ xform.eDx = 0.;
+ xform.eDy = 0.;
+ ok_int(SetWorldTransform(hdc, &xform), 1);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ ok_long(apt[0].x, 0);
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, 0);
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+
+ // eM11 == 2
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ xform.eM11 = 2.;
+ xform.eDx = 0.;
+ xform.eDy = 0.;
+ ok_int(SetWorldTransform(hdc, &xform), 1);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ ok_long(apt[0].x, MulDiv(100 / 2, sizWnd.cx, sizView.cx));
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, MulDiv(-1000 / 2, sizWnd.cx, sizView.cx));
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+
+ // eM11 == (FLOAT)0x1FFFFFFFF
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ xform.eM11 = (FLOAT)0x1FFFFFFFF;
+ xform.eDx = 0.;
+ xform.eDy = 0.;
ok_int(SetWorldTransform(hdc, &xform), 1);
+ GetExtent(hdc, &sizWnd, &sizView);
ok_int(DPtoLP(hdc, apt, 2), 1);
- ok_int(apt[0].x * lLogPixelsX, -41184 );
- ok_int(apt[0].y * lLogPixelsY, -86784 );
- ok_int(apt[1].x * lLogPixelsX, -41184 );
- ok_int(apt[1].y * lLogPixelsY, -338784 );
+ ok_long(apt[0].x, 0);
+ //ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, 0);
+ //ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+ // eM11 == (FLOAT)0xFFFFFFFFU
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ xform.eM11 = (FLOAT)0xFFFFFFFFU;
+ xform.eM22 = 1.;
+ xform.eDx = 0.;
+ xform.eDy = 0.;
+ ok_int(SetWorldTransform(hdc, &xform), 1);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ ok_long(apt[0].x, 0);
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, 0);
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
+
+ // eM22 == (FLOAT)0xFFFFFFFFU
apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
xform.eM11 = 1.;
- xform.eDx = (FLOAT)4294967167.999999762; // this is too big
+ xform.eM22 = (FLOAT)0xFFFFFFFFU;
+ xform.eDx = 0.;
+ xform.eDy = 0.;
ok_int(SetWorldTransform(hdc, &xform), 1);
- ok_int(DPtoLP(hdc, apt, 2), 0);
- ok_int(apt[0].x, 100 );
- ok_int(apt[0].y, 256 );
- ok_int(apt[1].x, -1000 );
- ok_int(apt[1].y, 1000 );
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ //ok_long(apt[0].x, MulDiv(100, sizWnd.cy, sizView.cy));
+ ok_long(apt[0].y, 0);
+ //ok_long(apt[1].x, MulDiv(-1000, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].y, 0);
- xform.eM11 = 2.;
- xform.eDx = (FLOAT)4294967167.999999762;
+ // eM22 == (FLOAT)0x1FFFFFFFFU
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ xform.eM11 = 1.;
+ xform.eM22 = (FLOAT)0x1FFFFFFFFU;
+ xform.eDx = 0.;
+ xform.eDy = 0.;
+ ok_int(SetWorldTransform(hdc, &xform), 1);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ //ok_long(apt[0].x, MulDiv(100, sizWnd.cy, sizView.cy));
+ ok_long(apt[0].y, 0);
+ //ok_long(apt[1].x, MulDiv(-1000, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].y, 0);
+
+ // eM11 == (FLOAT)0xFFFFFFFFU, eM22 == (FLOAT)0xFFFFFFFFU
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ xform.eM11 = (FLOAT)0xFFFFFFFFU;
+ xform.eM22 = (FLOAT)0xFFFFFFFFU;
+ xform.eDx = 0.;
+ xform.eDy = 0.;
+ ok_int(SetWorldTransform(hdc, &xform), 1);
+ GetExtent(hdc, &sizWnd, &sizView);
+ ok_int(DPtoLP(hdc, apt, 2), 1);
+ ok_long(apt[0].x, 0);
+ ok_long(apt[0].y, 0);
+ ok_long(apt[1].x, 0);
+ ok_long(apt[1].y, 0);
+
+ // eM11 == (FLOAT)0x1FFFFFFFFU, eM22 == (FLOAT)0x1FFFFFFFFU
+ apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
+ xform.eM11 = (FLOAT)0x1FFFFFFFFU;
+ xform.eM22 = (FLOAT)0x1FFFFFFFFU;
+ xform.eDx = 0.;
+ xform.eDy = 0.;
ok_int(SetWorldTransform(hdc, &xform), 1);
+ GetExtent(hdc, &sizWnd, &sizView);
ok_int(DPtoLP(hdc, apt, 2), 1);
- ok_int(apt[0].x * lLogPixelsX, 16896 );
- ok_int(apt[0].y * lLogPixelsY, -86784 );
- ok_int(apt[1].x * lLogPixelsX, -169344 );
- ok_int(apt[1].y * lLogPixelsY, -338784 );
+ ok_long(apt[0].x, 0);
+ ok_long(apt[0].y, 0);
+ ok_long(apt[1].x, 0);
+ ok_long(apt[1].y, 0);
+ // eM11 == 10000000
apt[0].x = 100; apt[0].y = 256; apt[1].x = -1000; apt[1].y = 1000;
xform.eM11 = 10000000.;
+ xform.eM22 = 1.0;
ok_int(SetWorldTransform(hdc, &xform), 1);
ok_int(DPtoLP(hdc, apt, 2), 1);
- ok_int(apt[0].x * lLogPixelsX, -41184 );
- ok_int(apt[0].y * lLogPixelsY, -86784 );
- ok_int(apt[1].x * lLogPixelsX, -41184 );
- ok_int(apt[1].y * lLogPixelsY, -338784 );
+ ok_long(apt[0].x, 0);
+ ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, 0);
+ ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
xform.eM11 = 1000000.;
ok_int(SetWorldTransform(hdc, &xform), 1);
ok_int(DPtoLP(hdc, apt, 2), 1);
- ok_int(apt[0].x * lLogPixelsX, -412320 );
- ok_int(apt[0].y * lLogPixelsY, 306048 );
- ok_int(apt[1].x * lLogPixelsX, -412320 );
- ok_int(apt[1].y * lLogPixelsY, 1195104 );
+ ok_long(apt[0].x, 0);
+ //ok_long(apt[0].y, MulDiv(256, sizWnd.cy, sizView.cy));
+ ok_long(apt[1].x, 0);
+ //ok_long(apt[1].y, MulDiv(1000, sizWnd.cy, sizView.cy));
- ReleaseDC(0, hdc);
+ DeleteDC(hdc);
}
START_TEST(DPtoLP)