mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +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);
|
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;
|
int cursor_count = real_ShowCursor(TRUE) - 1;
|
||||||
InterlockedExchange((LONG*)&g_ddraw->show_cursor_count, cursor_count);
|
InterlockedExchange((LONG*)&g_ddraw->show_cursor_count, cursor_count);
|
||||||
real_ShowCursor(FALSE);
|
real_ShowCursor(FALSE);
|
||||||
|
|
||||||
/* Make sure the cursor is visible in windowed mode initially */
|
/* 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);
|
||||||
{
|
|
||||||
while (real_ShowCursor(TRUE) < 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
real_SetCursor(LoadCursor(NULL, IDC_ARROW));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GetWindowText(g_ddraw->hwnd, (LPTSTR)&g_ddraw->title, sizeof(g_ddraw->title));
|
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_SetCursorPos(rc.left + cur_x, rc.top + cur_y - g_ddraw->mouse_y_adjust);
|
||||||
}
|
}
|
||||||
|
|
||||||
real_SetCursor(g_ddraw->old_cursor);
|
int game_count = InterlockedExchangeAdd((LONG*)&g_ddraw->show_cursor_count, 0);
|
||||||
|
|
||||||
int game_count = (int)InterlockedExchangeAdd((LONG*)&g_ddraw->show_cursor_count, 0);
|
|
||||||
int cur_count = real_ShowCursor(TRUE) - 1;
|
int cur_count = real_ShowCursor(TRUE) - 1;
|
||||||
real_ShowCursor(FALSE);
|
real_ShowCursor(FALSE);
|
||||||
|
|
||||||
@ -58,6 +56,8 @@ void mouse_lock()
|
|||||||
while (real_ShowCursor(TRUE) < game_count);
|
while (real_ShowCursor(TRUE) < game_count);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
real_SetCursor((HCURSOR)InterlockedExchangeAdd((LONG*)&g_ddraw->old_cursor, 0));
|
||||||
|
|
||||||
real_ClipCursor(&rc);
|
real_ClipCursor(&rc);
|
||||||
|
|
||||||
g_ddraw->locked = TRUE;
|
g_ddraw->locked = TRUE;
|
||||||
@ -83,7 +83,6 @@ void mouse_unlock()
|
|||||||
while (real_ShowCursor(TRUE) < 0);
|
while (real_ShowCursor(TRUE) < 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
real_SetCursor(LoadCursor(NULL, IDC_ARROW));
|
|
||||||
real_ClipCursor(NULL);
|
real_ClipCursor(NULL);
|
||||||
|
|
||||||
int cur_x = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.x, 0);
|
int cur_x = InterlockedExchangeAdd((LONG*)&g_ddraw->cursor.x, 0);
|
||||||
|
@ -151,13 +151,13 @@ HCURSOR WINAPI fake_SetCursor(HCURSOR hCursor)
|
|||||||
{
|
{
|
||||||
if (g_ddraw)
|
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)
|
if (!g_ddraw->locked && !g_ddraw->devmode)
|
||||||
return real_SetCursor(hCursor);
|
return cursor;
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return real_SetCursor(hCursor);
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOL WINAPI fake_GetWindowRect(HWND hWnd, LPRECT lpRect)
|
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)
|
if (!g_ddraw->locked && !g_ddraw->devmode)
|
||||||
{
|
{
|
||||||
real_SetCursor(LoadCursor(NULL, IDC_ARROW));
|
real_SetCursor(LoadCursor(NULL, IDC_ARROW));
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return TRUE;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user