1
0
mirror of https://github.com/FunkyFr3sh/cnc-ddraw.git synced 2025-03-24 17:49:52 +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.width = width;
This->cursorclip.height = height; This->cursorclip.height = height;
ddraw->cursor.x = ddraw->cursorclip.width / 2;
ddraw->cursor.y = ddraw->cursorclip.height / 2;
if(This->render.width < This->width) if(This->render.width < This->width)
{ {
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 */ case WM_CHAR: /* for StarCraft and general support */
return ddraw->WndProc(hWnd, uMsg, wParam, lParam); return ddraw->WndProc(hWnd, uMsg, wParam, lParam);
case WM_LBUTTONUP: case WM_LBUTTONUP:
case WM_RBUTTONUP:
if (ddraw->mhack && !ddraw->locked) 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(); mouse_lock();
return 0; return 0;
} }
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN: case WM_RBUTTONDOWN:
case WM_RBUTTONUP:
/* rest for StarCraft and general support */ /* rest for StarCraft and general support */
case WM_MBUTTONDOWN: case WM_MBUTTONDOWN:
case WM_MBUTTONUP: case WM_MBUTTONUP:
@ -339,6 +344,11 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
case WM_RBUTTONDBLCLK: case WM_RBUTTONDBLCLK:
if(ddraw->mhack) if(ddraw->mhack)
{ {
if (!ddraw->locked)
{
return 0;
}
lParam = MAKELPARAM(ddraw->cursor.x, ddraw->cursor.y); lParam = MAKELPARAM(ddraw->cursor.x, ddraw->cursor.y);
} }
case 1129: /* this somehow triggers network activity in C&C in WCHAT mode */ 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) 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); while(ShowCursor(TRUE) < 0);
SetCursor(LoadCursor(NULL, IDC_ARROW)); SetCursor(LoadCursor(NULL, IDC_ARROW));
ClipCursor(NULL); ClipCursor(NULL);
ReleaseCapture(); ReleaseCapture();
ddraw->locked = FALSE;
} }
ddraw->cursor.x = ddraw->cursorclip.width / 2;
ddraw->cursor.y = ddraw->cursorclip.height / 2;
} }
void mouse_init(HWND hWnd) void mouse_init(HWND hWnd)