diff --git a/src/winapi_hooks.c b/src/winapi_hooks.c index d15f611..c09d186 100644 --- a/src/winapi_hooks.c +++ b/src/winapi_hooks.c @@ -1,5 +1,6 @@ #include #include +#include #include "debug.h" #include "dd.h" #include "hook.h" @@ -61,8 +62,8 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint) if (g_ddraw->adjmouse) { - g_ddraw->cursor.x = (DWORD)(pt.x * g_ddraw->render.unscale_w); - g_ddraw->cursor.y = (DWORD)(pt.y * g_ddraw->render.unscale_h); + g_ddraw->cursor.x = min((DWORD)(roundf(pt.x * g_ddraw->render.unscale_w)), g_ddraw->width); + g_ddraw->cursor.y = min((DWORD)(roundf(pt.y * g_ddraw->render.unscale_h)), g_ddraw->height); } else { @@ -223,8 +224,8 @@ BOOL WINAPI fake_SetCursorPos(int X, int Y) { if (g_ddraw->adjmouse) { - pt.x = (LONG)(pt.x * g_ddraw->render.scale_w); - pt.y = (LONG)(pt.y * g_ddraw->render.scale_h); + pt.x = (LONG)(roundf(pt.x * g_ddraw->render.scale_w)); + pt.y = (LONG)(roundf(pt.y * g_ddraw->render.scale_h)); } pt.x += g_ddraw->render.viewport.x; @@ -330,8 +331,8 @@ LRESULT WINAPI fake_SendMessageA(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lPar if (g_ddraw->adjmouse) { - x = (int)(x * g_ddraw->render.scale_w); - y = (int)(y * g_ddraw->render.scale_h); + x = (int)(roundf(x * g_ddraw->render.scale_w)); + y = (int)(roundf(y * g_ddraw->render.scale_h)); } lParam = MAKELPARAM(x + g_ddraw->render.viewport.x, y + g_ddraw->render.viewport.y); diff --git a/src/wndproc.c b/src/wndproc.c index 779f6aa..176aa21 100644 --- a/src/wndproc.c +++ b/src/wndproc.c @@ -101,7 +101,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam case HTTOPRIGHT: return DefWindowProc(hWnd, uMsg, wParam, lParam); case HTCLIENT: - if (!g_ddraw->locked) + if (!g_ddraw->locked && !g_ddraw->devmode) { real_SetCursor(LoadCursor(NULL, IDC_ARROW)); return DefWindowProc(hWnd, uMsg, wParam, lParam); @@ -691,12 +691,10 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam if (g_ddraw->devmode) { - mouse_lock(); - if (g_ddraw->adjmouse) { - g_ddraw->cursor.x = (DWORD)(GET_X_LPARAM(lParam) * g_ddraw->render.unscale_w); - g_ddraw->cursor.y = (DWORD)(GET_Y_LPARAM(lParam) * g_ddraw->render.unscale_h); + g_ddraw->cursor.x = (DWORD)(roundf(GET_X_LPARAM(lParam) * g_ddraw->render.unscale_w)); + g_ddraw->cursor.y = (DWORD)(roundf(GET_Y_LPARAM(lParam) * g_ddraw->render.unscale_h)); lParam = MAKELPARAM(g_ddraw->cursor.x, g_ddraw->cursor.y); } @@ -709,8 +707,8 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam if (GET_X_LPARAM(lParam) > g_ddraw->width || GET_Y_LPARAM(lParam) > g_ddraw->height) { - g_ddraw->cursor.x = GET_X_LPARAM(lParam) > g_ddraw->width ? g_ddraw->width : GET_X_LPARAM(lParam); - g_ddraw->cursor.y = GET_Y_LPARAM(lParam) > g_ddraw->height ? g_ddraw->height : GET_Y_LPARAM(lParam); + g_ddraw->cursor.x = min(GET_X_LPARAM(lParam), g_ddraw->width); + g_ddraw->cursor.y = min(GET_Y_LPARAM(lParam), g_ddraw->height); lParam = MAKELPARAM(g_ddraw->cursor.x, g_ddraw->cursor.y); }