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

Change mouse handling so locking/unlocking feels more natural, fix click getting trough on lock, allow locking with RMB

This commit is contained in:
Toni Spets 2011-07-08 18:22:43 +03:00
parent 1ac06dc85f
commit 134f388c95
2 changed files with 14 additions and 5 deletions

12
main.c
View File

@ -194,6 +194,9 @@ HRESULT __stdcall ddraw_SetDisplayMode(IDirectDrawImpl *This, DWORD width, DWORD
This->cursorclip.width = width;
This->cursorclip.height = height;
ddraw->cursor.x = ddraw->cursorclip.width / 2;
ddraw->cursor.y = ddraw->cursorclip.height / 2;
if(This->render.width < This->width)
{
This->render.width = This->width;
@ -323,14 +326,16 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_CHAR: /* for StarCraft and general support */
return ddraw->WndProc(hWnd, uMsg, wParam, lParam);
case WM_LBUTTONUP:
case WM_RBUTTONUP:
if (ddraw->mhack && !ddraw->locked)
{
ddraw->cursor.x = LOWORD(lParam) * ((float)ddraw->width / ddraw->render.width);
ddraw->cursor.y = HIWORD(lParam) * ((float)ddraw->height / ddraw->render.height);
mouse_lock();
return 0;
}
case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
/* rest for StarCraft and general support */
case WM_MBUTTONDOWN:
case WM_MBUTTONUP:
@ -339,6 +344,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_RBUTTONDBLCLK:
if(ddraw->mhack)
{
if (!ddraw->locked)
{
return 0;
}
lParam = MAKELPARAM(ddraw->cursor.x, ddraw->cursor.y);
}
case 1129: /* this somehow triggers network activity in C&C in WCHAT mode */

View File

@ -209,17 +209,16 @@ void mouse_unlock()
if(ddraw->locked)
{
ddraw->locked = FALSE;
SetCursorPos(ddraw->cursor.x * ddraw->render.width / ddraw->width , ddraw->cursor.y * ddraw->render.height / ddraw->height);
while(ShowCursor(TRUE) < 0);
SetCursor(LoadCursor(NULL, IDC_ARROW));
ClipCursor(NULL);
ReleaseCapture();
ddraw->locked = FALSE;
}
ddraw->cursor.x = ddraw->cursorclip.width / 2;
ddraw->cursor.y = ddraw->cursorclip.height / 2;
}
void mouse_init(HWND hWnd)