diff --git a/src/xrGame/UICursor.cpp b/src/xrGame/UICursor.cpp index 3d044acffaf..2a1d0f4d738 100644 --- a/src/xrGame/UICursor.cpp +++ b/src/xrGame/UICursor.cpp @@ -31,6 +31,36 @@ void CUICursor::OnScreenResolutionChanged() InitInternal (); } +void CUICursor::Clip(bool clip) +{ + HWND hwnd = Device.m_hWnd; + if (hwnd) + { + if (clip) + { + RECT clientRect; + ::GetClientRect(hwnd, &clientRect); + ::ClientToScreen(hwnd, (LPPOINT)&clientRect.left); + ::ClientToScreen(hwnd, (LPPOINT)&clientRect.right); + ::ClipCursor(&clientRect); + } + else + ::ClipCursor(nullptr); + } +} + +void CUICursor::Show() +{ + bVisible = true; + Clip(false); +} + +void CUICursor::Hide() +{ + bVisible = false; + Clip(true); +} + void CUICursor::InitInternal() { m_static = xr_new(); diff --git a/src/xrGame/UICursor.h b/src/xrGame/UICursor.h index 71ee6217887..6500da6a5f4 100644 --- a/src/xrGame/UICursor.h +++ b/src/xrGame/UICursor.h @@ -25,6 +25,7 @@ class CUICursor: public pureRender, virtual void OnScreenResolutionChanged (); bool IsVisible () {return bVisible;} - void Show () {bVisible = true;} - void Hide () {bVisible = false;} + void Show(); + void Hide(); + void Clip(bool clip); };