1
0
mirror of https://foundry.openuru.org/gitblit/r/CWE-ou-minkata.git synced 2025-07-18 11:19:10 +00:00

Capture the mouse on clicks

This hack prevents the cursor from leaving the window when panning the
camera or changing directions quickly. This is important for those with
high mouse sensitivities.
This commit is contained in:
2012-10-23 23:21:50 -04:00
parent cb48aab373
commit b90776fafe

View File

@ -395,31 +395,37 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
nc->ResetServerTimeOffset(true); nc->ResetServerTimeOffset(true);
break; break;
case WM_KEYDOWN :
case WM_LBUTTONDOWN: case WM_LBUTTONDOWN:
case WM_RBUTTONDOWN: case WM_RBUTTONDOWN:
case WM_LBUTTONDBLCLK : // The left mouse button was double-clicked. case WM_LBUTTONDBLCLK:
case WM_MBUTTONDBLCLK : // The middle mouse button was double-clicked. case WM_MBUTTONDBLCLK:
case WM_MBUTTONDOWN : // The middle mouse button was pressed. case WM_MBUTTONDOWN:
case WM_RBUTTONDBLCLK : // The right mouse button was double-clicked. case WM_RBUTTONDBLCLK:
// If they did anything but move the mouse, quit any intro movie playing. // Ensure we don't leave the client area during this action
{ SetCapture(hWnd);
if( gClient ) // fall through to old case
gClient->SetQuitIntro(true); case WM_KEYDOWN:
}
// Fall through to other events
case WM_CHAR: case WM_CHAR:
case WM_KEYUP : // If they did anything but move the mouse, quit any intro movie playing.
case WM_LBUTTONUP : if (gClient)
case WM_RBUTTONUP :
case WM_MBUTTONUP : // The middle mouse button was released.
case 0x020A: // fuc&ing windows b.s...
{
if (gClient && gClient->WindowActive() && gClient->GetInputManager())
{ {
gClient->SetQuitIntro(true);
// normal input processing
if (gClient->WindowActive() && gClient->GetInputManager())
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd); gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
} }
} break;
case WM_LBUTTONUP:
case WM_RBUTTONUP:
case WM_MBUTTONUP:
// Stop hogging the cursor
ReleaseCapture();
// fall through to input processing
case WM_MOUSEWHEEL:
case WM_KEYUP:
if (gClient && gClient->WindowActive() && gClient->GetInputManager())
gClient->GetInputManager()->HandleWin32ControlEvent(message, wParam, lParam, hWnd);
break; break;
case WM_MOUSEMOVE: case WM_MOUSEMOVE: