mirror of
https://github.com/LCEMP/LCEMP.git
synced 2026-04-23 15:33:58 +00:00
fix: better cursor handling
This commit is contained in:
parent
3fc220a10b
commit
ee31d72f91
|
|
@ -45,7 +45,7 @@ void UIScene_AbstractContainerMenu::handleDestroy()
|
|||
g_savedInventoryCursorPos.y = m_pointerPos.y;
|
||||
g_savedInventoryCursorPos.hasSavedPos = true;
|
||||
|
||||
while (ShowCursor(TRUE) < 0);
|
||||
g_KBMInput.SetCursorHiddenForUI(false);
|
||||
#endif
|
||||
|
||||
Minecraft *pMinecraft = Minecraft::GetInstance();
|
||||
|
|
@ -82,7 +82,7 @@ void UIScene_AbstractContainerMenu::InitDataAssociations(int iPad, AbstractConta
|
|||
void UIScene_AbstractContainerMenu::PlatformInitialize(int iPad, int startIndex)
|
||||
{
|
||||
#ifdef _WINDOWS64
|
||||
while (ShowCursor(FALSE) >= 0);
|
||||
g_KBMInput.SetCursorHiddenForUI(true);
|
||||
#endif
|
||||
|
||||
m_labelInventory.init( app.GetString(IDS_INVENTORY) );
|
||||
|
|
@ -179,15 +179,6 @@ void UIScene_AbstractContainerMenu::PlatformInitialize(int iPad, int startIndex)
|
|||
if (m_pointerPos.y < m_fPointerMinY) m_pointerPos.y = m_fPointerMinY;
|
||||
if (m_pointerPos.y > m_fPointerMaxY) m_pointerPos.y = m_fPointerMaxY;
|
||||
}
|
||||
|
||||
extern HWND g_hWnd;
|
||||
RECT rc;
|
||||
GetClientRect(g_hWnd, &rc);
|
||||
POINT center;
|
||||
center.x = (rc.right - rc.left) / 2;
|
||||
center.y = (rc.bottom - rc.top) / 2;
|
||||
ClientToScreen(g_hWnd, ¢er);
|
||||
SetCursorPos(center.x, center.y);
|
||||
#endif
|
||||
|
||||
IggyEvent mouseEvent;
|
||||
|
|
@ -212,10 +203,6 @@ void UIScene_AbstractContainerMenu::tick()
|
|||
{
|
||||
UIScene::tick();
|
||||
|
||||
#ifdef _WINDOWS64
|
||||
SetCursor(NULL);
|
||||
#endif
|
||||
|
||||
onMouseTick();
|
||||
|
||||
IggyEvent mouseEvent;
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ void KeyboardMouseInput::Init()
|
|||
m_mouseWheel = 0;
|
||||
m_mouseWheelAccum = 0;
|
||||
m_mouseGrabbed = false;
|
||||
m_cursorHiddenForUI = false;
|
||||
m_windowFocused = true;
|
||||
m_hasInput = false;
|
||||
|
||||
|
|
@ -106,7 +107,7 @@ void KeyboardMouseInput::Tick()
|
|||
}
|
||||
}
|
||||
|
||||
if (m_mouseGrabbed && g_hWnd)
|
||||
if ((m_mouseGrabbed || m_cursorHiddenForUI) && g_hWnd)
|
||||
{
|
||||
RECT rc;
|
||||
GetClientRect(g_hWnd, &rc);
|
||||
|
|
@ -239,7 +240,36 @@ void KeyboardMouseInput::SetMouseGrabbed(bool grabbed)
|
|||
m_mouseDeltaAccumX = 0;
|
||||
m_mouseDeltaAccumY = 0;
|
||||
}
|
||||
else if (!grabbed && g_hWnd)
|
||||
else if (!grabbed && !m_cursorHiddenForUI && g_hWnd)
|
||||
{
|
||||
while (ShowCursor(TRUE) < 0) {}
|
||||
ClipCursor(NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void KeyboardMouseInput::SetCursorHiddenForUI(bool hidden)
|
||||
{
|
||||
if (m_cursorHiddenForUI == hidden)
|
||||
return;
|
||||
|
||||
m_cursorHiddenForUI = hidden;
|
||||
if (hidden && g_hWnd)
|
||||
{
|
||||
while (ShowCursor(FALSE) >= 0) {}
|
||||
ClipCursorToWindow(g_hWnd);
|
||||
|
||||
RECT rc;
|
||||
GetClientRect(g_hWnd, &rc);
|
||||
POINT center;
|
||||
center.x = (rc.right - rc.left) / 2;
|
||||
center.y = (rc.bottom - rc.top) / 2;
|
||||
ClientToScreen(g_hWnd, ¢er);
|
||||
SetCursorPos(center.x, center.y);
|
||||
|
||||
m_mouseDeltaAccumX = 0;
|
||||
m_mouseDeltaAccumY = 0;
|
||||
}
|
||||
else if (!hidden && !m_mouseGrabbed && g_hWnd)
|
||||
{
|
||||
while (ShowCursor(TRUE) < 0) {}
|
||||
ClipCursor(NULL);
|
||||
|
|
@ -264,7 +294,7 @@ void KeyboardMouseInput::SetWindowFocused(bool focused)
|
|||
m_windowFocused = focused;
|
||||
if (focused)
|
||||
{
|
||||
if (m_mouseGrabbed)
|
||||
if (m_mouseGrabbed || m_cursorHiddenForUI)
|
||||
{
|
||||
while (ShowCursor(FALSE) >= 0) {}
|
||||
ClipCursorToWindow(g_hWnd);
|
||||
|
|
|
|||
|
|
@ -58,6 +58,9 @@ public:
|
|||
void SetMouseGrabbed(bool grabbed);
|
||||
bool IsMouseGrabbed() const { return m_mouseGrabbed; }
|
||||
|
||||
void SetCursorHiddenForUI(bool hidden);
|
||||
bool IsCursorHiddenForUI() const { return m_cursorHiddenForUI; }
|
||||
|
||||
void SetWindowFocused(bool focused);
|
||||
bool IsWindowFocused() const { return m_windowFocused; }
|
||||
|
||||
|
|
@ -99,6 +102,8 @@ private:
|
|||
|
||||
bool m_mouseGrabbed;
|
||||
|
||||
bool m_cursorHiddenForUI;
|
||||
|
||||
bool m_windowFocused;
|
||||
|
||||
bool m_hasInput;
|
||||
|
|
|
|||
Loading…
Reference in a new issue