From: Dmitry K. <in...@us...> - 2008-10-01 11:27:58
|
Update of /cvsroot/winguitest/Win32-GuiTest In directory 23jxhf1.ch3.sourceforge.com:/tmp/cvs-serv13466 Modified Files: GuiTest.xs Log Message: - Screen <-> mickey conversion formula matched to the internal windows formula. Before, if ScreenToNorm(x,y) transformation was used to set mouse coordinates in mickeys, GetCursorPos() returned pixel values, that were sometimes not equal to (x,y). Index: GuiTest.xs =================================================================== RCS file: /cvsroot/winguitest/Win32-GuiTest/GuiTest.xs,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** GuiTest.xs 23 Oct 2007 11:38:02 -0000 1.1 --- GuiTest.xs 1 Oct 2008 11:27:45 -0000 1.2 *************** *** 566,573 **** */ void ScreenToMouseplane(POINT *p) { ! p->x = MulDiv(p->x, 0x10000, GetSystemMetrics(SM_CXSCREEN)); ! p->y = MulDiv(p->y, 0x10000, GetSystemMetrics(SM_CYSCREEN)); } --- 566,575 ---- */ + #define SCREEN_TO_MICKEY(COORD,val) MulDiv((val)+1, 0x10000, GetSystemMetrics(SM_C ## COORD ## SCREEN))-1 + void ScreenToMouseplane(POINT *p) { ! p->x = SCREEN_TO_MICKEY(X,p->x); ! p->y = SCREEN_TO_MICKEY(Y,p->y); } *************** *** 646,651 **** if (SetHook(hWnd, WM_INITMENUPOPUPX, "WM_INITMENUPOPUP_RM") == NULL) return 0; ! int mickey_x = MulDiv(x, 0x10000, GetSystemMetrics(SM_CXSCREEN)); ! int mickey_y = MulDiv(y, 0x10000, GetSystemMetrics(SM_CYSCREEN)); simple_mouse(MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE, mickey_x, mickey_y); simple_mouse(MOUSEEVENTF_RIGHTDOWN, 0, 0); --- 648,653 ---- if (SetHook(hWnd, WM_INITMENUPOPUPX, "WM_INITMENUPOPUP_RM") == NULL) return 0; ! int mickey_x = SCREEN_TO_MICKEY(X,x); ! int mickey_y = SCREEN_TO_MICKEY(Y,y); simple_mouse(MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE, mickey_x, mickey_y); simple_mouse(MOUSEEVENTF_RIGHTDOWN, 0, 0); *************** *** 970,975 **** int y; PREINIT: ! int mickey_x = MulDiv(x, 0x10000, GetSystemMetrics(SM_CXSCREEN)); ! int mickey_y = MulDiv(y, 0x10000, GetSystemMetrics(SM_CYSCREEN)); CODE: simple_mouse(MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE, mickey_x, mickey_y); --- 972,977 ---- int y; PREINIT: ! int mickey_x = SCREEN_TO_MICKEY(X,x); ! int mickey_y = SCREEN_TO_MICKEY(Y,y); CODE: simple_mouse(MOUSEEVENTF_MOVE|MOUSEEVENTF_ABSOLUTE, mickey_x, mickey_y); *************** *** 1340,1350 **** int x; int y; - PREINIT: - int hor,ver; PPCODE: ! hor = GetSystemMetrics(SM_CXSCREEN); ! ver = GetSystemMetrics(SM_CYSCREEN); ! x = MulDiv(x, 65536, hor); ! y = MulDiv(y, 65536, ver); XPUSHs(sv_2mortal(newSViv((IV)x))); XPUSHs(sv_2mortal(newSViv((IV)y))); --- 1342,1348 ---- int x; int y; PPCODE: ! x = SCREEN_TO_MICKEY(X,x); ! y = SCREEN_TO_MICKEY(Y,y); XPUSHs(sv_2mortal(newSViv((IV)x))); XPUSHs(sv_2mortal(newSViv((IV)y))); *************** *** 1355,1365 **** int x; int y; - PREINIT: - int hor,ver; PPCODE: ! hor = GetSystemMetrics(SM_CXSCREEN); ! ver = GetSystemMetrics(SM_CYSCREEN); ! x = MulDiv(x, hor, 65536); ! y = MulDiv(y, ver, 65536); XPUSHs(sv_2mortal(newSViv((IV)x))); XPUSHs(sv_2mortal(newSViv((IV)y))); --- 1353,1359 ---- int x; int y; PPCODE: ! x = MulDiv(x + 1, GetSystemMetrics(SM_CXSCREEN), 65536) - 1; ! y = MulDiv(y + 1, GetSystemMetrics(SM_CYSCREEN), 65536) - 1; XPUSHs(sv_2mortal(newSViv((IV)x))); XPUSHs(sv_2mortal(newSViv((IV)y))); |