reactos/modules/rostests/apitests/gdi32/DPtoLP.c
2019-04-04 05:25:02 +09:00

328 lines
11 KiB
C

/*
* PROJECT: ReactOS api tests
* LICENSE: GPL - See COPYING in the top level directory
* PURPOSE: Test for ...
* PROGRAMMERS: Timo Kreuzer
* Katayama Hirofumi MZ
*/
#include "precomp.h"
#define INVALID_POINTER ((PVOID)(ULONG_PTR)0xdeadbeefdeadbeefULL)
void Test_DPtoLP_Params()
{
HDC hdc;
POINT apt[2];
apt[0].x = 0;
apt[0].y = 0;
apt[1].x = -1000;
apt[1].y = 1000;
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, NULL, 0), 1);
ok_err(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, NULL, -1), 1);
ok_err(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, INVALID_POINTER, -1), 1);
ok_err(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, NULL, 2), 0);
ok_err(ERROR_INVALID_PARAMETER);
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, apt, 2), 0);
ok_err(ERROR_INVALID_PARAMETER);
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, apt, 0), 1);
ok_err(ERROR_SUCCESS);
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP(NULL, apt, -2), 1);
ok_err(ERROR_SUCCESS);
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP((HDC)-4, apt, -2), 1);
ok_err(ERROR_SUCCESS);
hdc = GetDC(0);
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP(hdc, NULL, 2), 1);
ok_err(ERROR_SUCCESS);
hdc = GetDC(0);
SetLastError(ERROR_SUCCESS);
ok_int(DPtoLP(hdc, INVALID_POINTER, 2), 1);
ok_err(ERROR_SUCCESS);
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;
hdc = CreateCompatibleDC(NULL);
lLogPixelsX = GetDeviceCaps(hdc, LOGPIXELSX);
lLogPixelsY = GetDeviceCaps(hdc, LOGPIXELSY);
trace("lLogPixelsX: %ld\n", lLogPixelsX);
trace("lLogPixelsY: %ld\n", lLogPixelsY);
//#define MULDIV(a, b, c) (((a) * (b)) / (c))
#define MULDIV(a, b, c) MulDiv((a), (b), (c))
// 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_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_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);
xform.eM11 = 1.;
xform.eM12 = 0.;
xform.eM21 = 0.;
xform.eM22 = 1.;
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_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_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.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, 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);
// 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_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);
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));
xform.eM11 = 1000000.;
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));
DeleteDC(hdc);
}
START_TEST(DPtoLP)
{
Test_DPtoLP_Params();
Test_DPtoLP();
}