1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-15 06:04:49 +01:00

simplify cursor code

This commit is contained in:
FunkyFr3sh 2024-05-30 23:55:30 +02:00
parent 4f5c332cd5
commit f9d2cb0d1f

View File

@ -30,65 +30,31 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint)
if (!real_GetCursorPos(&pt))
return FALSE;
realpt.x = pt.x;
realpt.y = pt.y;
realpt = pt;
if (g_mouse_locked && (!g_config.windowed || real_ScreenToClient(g_ddraw.hwnd, &pt)))
if ((g_mouse_locked || g_config.devmode || g_ddraw.bnet_active) &&
(!g_config.windowed || real_ScreenToClient(g_ddraw.hwnd, &pt)))
{
/* fallback solution for possible ClipCursor failure */
int diffx = 0, diffy = 0;
int max_width = g_config.adjmouse ? g_ddraw.render.viewport.width : g_ddraw.width;
int max_height = g_config.adjmouse ? g_ddraw.render.viewport.height : g_ddraw.height;
pt.x -= g_ddraw.mouse.x_adjust;
pt.y -= g_ddraw.mouse.y_adjust;
if (pt.x < 0)
{
diffx = pt.x;
pt.x = 0;
}
if (pt.y < 0)
{
diffy = pt.y;
pt.y = 0;
}
if (pt.x > max_width)
{
diffx = pt.x - max_width;
pt.x = max_width;
}
if (pt.y > max_height)
{
diffy = pt.y - max_height;
pt.y = max_height;
}
if (diffx || diffy)
real_SetCursorPos(realpt.x - diffx, realpt.y - diffy);
int x = 0;
int y = 0;
int x = max(pt.x - g_ddraw.mouse.x_adjust, 0);
int y = max(pt.y - g_ddraw.mouse.y_adjust, 0);
if (g_config.adjmouse)
{
x = min((DWORD)(roundf(pt.x * g_ddraw.mouse.unscale_x)), g_ddraw.width - 1);
y = min((DWORD)(roundf(pt.y * g_ddraw.mouse.unscale_y)), g_ddraw.height - 1);
}
else
{
x = min(pt.x, g_ddraw.width - 1);
y = min(pt.y, g_ddraw.height - 1);
x = (DWORD)(roundf(x * g_ddraw.mouse.unscale_x));
y = (DWORD)(roundf(y * g_ddraw.mouse.unscale_y));
}
if (g_config.vhack && !g_ddraw.isworms2 && InterlockedExchangeAdd(&g_ddraw.upscale_hack_active, 0))
x = min(x, g_ddraw.width - 1);
y = min(y, g_ddraw.height - 1);
if (g_config.vhack &&
!g_ddraw.isworms2 &&
!g_config.devmode &&
!g_ddraw.bnet_active &&
InterlockedExchangeAdd(&g_ddraw.upscale_hack_active, 0))
{
diffx = 0;
diffy = 0;
int diffx = 0;
int diffy = 0;
if (x > g_ddraw.upscale_hack_width)
{
@ -117,16 +83,6 @@ BOOL WINAPI fake_GetCursorPos(LPPOINT lpPoint)
return TRUE;
}
else if (lpPoint && g_ddraw.bnet_active && real_ScreenToClient(g_ddraw.hwnd, &pt))
{
if (pt.x > 0 && pt.x < g_ddraw.width && pt.y > 0 && pt.y < g_ddraw.height)
{
lpPoint->x = pt.x;
lpPoint->y = pt.y;
return TRUE;
}
}
if (lpPoint)
{
@ -720,11 +676,8 @@ BOOL WINAPI fake_GetMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wM
if (result && lpMsg && g_ddraw.ref && g_ddraw.hwnd && g_ddraw.width)
{
if (g_config.hook_getmessage)
{
HandleMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
}
else if (g_mouse_locked && (!g_config.windowed || real_ScreenToClient(g_ddraw.hwnd, &lpMsg->pt)))
if ((g_mouse_locked || g_config.devmode || g_ddraw.bnet_active) &&
(!g_config.windowed || real_ScreenToClient(g_ddraw.hwnd, &lpMsg->pt)))
{
int x = max(lpMsg->pt.x - g_ddraw.mouse.x_adjust, 0);
int y = max(lpMsg->pt.y - g_ddraw.mouse.y_adjust, 0);
@ -737,12 +690,20 @@ BOOL WINAPI fake_GetMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wM
lpMsg->pt.x = min(x, g_ddraw.width - 1);
lpMsg->pt.y = min(y, g_ddraw.height - 1);
InterlockedExchange((LONG*)&g_ddraw.cursor.x, lpMsg->pt.x);
InterlockedExchange((LONG*)&g_ddraw.cursor.y, lpMsg->pt.y);
}
else
{
lpMsg->pt.x = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.x, 0);
lpMsg->pt.y = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.y, 0);
}
if (g_config.hook_getmessage)
{
HandleMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
}
}
return result;
@ -754,11 +715,8 @@ BOOL WINAPI fake_PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT w
if (result && lpMsg && g_ddraw.ref && g_ddraw.hwnd && g_ddraw.width)
{
if (g_config.hook_peekmessage)
{
HandleMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
}
else if (g_mouse_locked && (!g_config.windowed || real_ScreenToClient(g_ddraw.hwnd, &lpMsg->pt)))
if ((g_mouse_locked || g_config.devmode || g_ddraw.bnet_active) &&
(!g_config.windowed || real_ScreenToClient(g_ddraw.hwnd, &lpMsg->pt)))
{
int x = max(lpMsg->pt.x - g_ddraw.mouse.x_adjust, 0);
int y = max(lpMsg->pt.y - g_ddraw.mouse.y_adjust, 0);
@ -771,12 +729,20 @@ BOOL WINAPI fake_PeekMessageA(LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT w
lpMsg->pt.x = min(x, g_ddraw.width - 1);
lpMsg->pt.y = min(y, g_ddraw.height - 1);
InterlockedExchange((LONG*)&g_ddraw.cursor.x, lpMsg->pt.x);
InterlockedExchange((LONG*)&g_ddraw.cursor.y, lpMsg->pt.y);
}
else
{
lpMsg->pt.x = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.x, 0);
lpMsg->pt.y = InterlockedExchangeAdd((LONG*)&g_ddraw.cursor.y, 0);
}
if (g_config.hook_peekmessage)
{
HandleMessage(lpMsg, hWnd, wMsgFilterMin, wMsgFilterMax);
}
}
return result;