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:
parent
655bf5ec47
commit
350cdbd0ba
15
src/dd.c
15
src/dd.c
@ -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));
|
||||
|
@ -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);
|
||||
|
@ -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)
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user