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

fix SetCursor hook

This commit is contained in:
FunkyFr3sh 2021-06-19 04:28:15 +02:00
parent 655bf5ec47
commit 350cdbd0ba
4 changed files with 16 additions and 16 deletions

View File

@ -819,19 +819,20 @@ HRESULT dd_SetCooperativeLevel(HWND hwnd, DWORD dwFlags)
SetPixelFormat(g_ddraw->render.hdc, ChoosePixelFormat(g_ddraw->render.hdc, &pfd), &pfd);
}
if (!g_ddraw->devmode)
{
HCURSOR cursor = real_SetCursor(LoadCursor(NULL, IDC_ARROW));
InterlockedExchange((LONG*)&g_ddraw->old_cursor, (LONG)cursor);
}
int cursor_count = real_ShowCursor(TRUE) - 1;
InterlockedExchange((LONG*)&g_ddraw->show_cursor_count, cursor_count);
real_ShowCursor(FALSE);
/* Make sure the cursor is visible in windowed mode initially */
if (g_ddraw->windowed && !g_ddraw->fullscreen)
if (g_ddraw->windowed && !g_ddraw->fullscreen && cursor_count < 0)
{
if (cursor_count < 0)
{
while (real_ShowCursor(TRUE) < 0);
}
real_SetCursor(LoadCursor(NULL, IDC_ARROW));
while (real_ShowCursor(TRUE) < 0);
}
GetWindowText(g_ddraw->hwnd, (LPTSTR)&g_ddraw->title, sizeof(g_ddraw->title));

View File

@ -43,9 +43,7 @@ void mouse_lock()
real_SetCursorPos(rc.left + cur_x, rc.top + cur_y - g_ddraw->mouse_y_adjust);
}
real_SetCursor(g_ddraw->old_cursor);
int game_count = (int)InterlockedExchangeAdd((LONG*)&g_ddraw->show_cursor_count, 0);
int game_count = InterlockedExchangeAdd((LONG*)&g_ddraw->show_cursor_count, 0);
int cur_count = real_ShowCursor(TRUE) - 1;
real_ShowCursor(FALSE);
@ -58,6 +56,8 @@ void mouse_lock()
while (real_ShowCursor(TRUE) < game_count);
}
real_SetCursor((HCURSOR)InterlockedExchangeAdd((LONG*)&g_ddraw->old_cursor, 0));
real_ClipCursor(&rc);
g_ddraw->locked = TRUE;
@ -83,7 +83,6 @@ void mouse_unlock()
while (real_ShowCursor(TRUE) < 0);
}
real_SetCursor(LoadCursor(NULL, IDC_ARROW));
real_ClipCursor(NULL);
int cur_x = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.x, 0);

View File

@ -151,13 +151,13 @@ HCURSOR WINAPI fake_SetCursor(HCURSOR hCursor)
{
if (g_ddraw)
{
g_ddraw->old_cursor = hCursor;
HCURSOR cursor = (HCURSOR)InterlockedExchange((LONG*)&g_ddraw->old_cursor, (LONG)hCursor);
if (g_ddraw->locked || g_ddraw->devmode)
return real_SetCursor(hCursor);
if (!g_ddraw->locked && !g_ddraw->devmode)
return cursor;
}
return NULL;
return real_SetCursor(hCursor);
}
BOOL WINAPI fake_GetWindowRect(HWND hWnd, LPRECT lpRect)

View File

@ -105,7 +105,7 @@ LRESULT CALLBACK fake_WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam
if (!g_ddraw->locked && !g_ddraw->devmode)
{
real_SetCursor(LoadCursor(NULL, IDC_ARROW));
return DefWindowProc(hWnd, uMsg, wParam, lParam);
return TRUE;
}
default:
break;