https://git.reactos.org/?p=reactos.git;a=commitdiff;h=e157a5fe1c3bcbd8f73213...
commit e157a5fe1c3bcbd8f7321314f38b560a389efefa Author: Katayama Hirofumi MZ katayama.hirofumi.mz@gmail.com AuthorDate: Wed Apr 3 22:48:42 2019 +0900 Commit: GitHub noreply@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)