mirror of
https://github.com/LCEMP/LCEMP.git
synced 2026-08-08 11:32:25 +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.y = m_pointerPos.y;
|
||||||
g_savedInventoryCursorPos.hasSavedPos = true;
|
g_savedInventoryCursorPos.hasSavedPos = true;
|
||||||
|
|
||||||
while (ShowCursor(TRUE) < 0);
|
g_KBMInput.SetCursorHiddenForUI(false);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Minecraft *pMinecraft = Minecraft::GetInstance();
|
Minecraft *pMinecraft = Minecraft::GetInstance();
|
||||||
|
|
@ -82,7 +82,7 @@ void UIScene_AbstractContainerMenu::InitDataAssociations(int iPad, AbstractConta
|
||||||
void UIScene_AbstractContainerMenu::PlatformInitialize(int iPad, int startIndex)
|
void UIScene_AbstractContainerMenu::PlatformInitialize(int iPad, int startIndex)
|
||||||
{
|
{
|
||||||
#ifdef _WINDOWS64
|
#ifdef _WINDOWS64
|
||||||
while (ShowCursor(FALSE) >= 0);
|
g_KBMInput.SetCursorHiddenForUI(true);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
m_labelInventory.init( app.GetString(IDS_INVENTORY) );
|
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_fPointerMinY) m_pointerPos.y = m_fPointerMinY;
|
||||||
if (m_pointerPos.y > m_fPointerMaxY) m_pointerPos.y = m_fPointerMaxY;
|
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
|
#endif
|
||||||
|
|
||||||
IggyEvent mouseEvent;
|
IggyEvent mouseEvent;
|
||||||
|
|
@ -212,10 +203,6 @@ void UIScene_AbstractContainerMenu::tick()
|
||||||
{
|
{
|
||||||
UIScene::tick();
|
UIScene::tick();
|
||||||
|
|
||||||
#ifdef _WINDOWS64
|
|
||||||
SetCursor(NULL);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
onMouseTick();
|
onMouseTick();
|
||||||
|
|
||||||
IggyEvent mouseEvent;
|
IggyEvent mouseEvent;
|
||||||
|
|
|
||||||
|
|
@ -33,6 +33,7 @@ void KeyboardMouseInput::Init()
|
||||||
m_mouseWheel = 0;
|
m_mouseWheel = 0;
|
||||||
m_mouseWheelAccum = 0;
|
m_mouseWheelAccum = 0;
|
||||||
m_mouseGrabbed = false;
|
m_mouseGrabbed = false;
|
||||||
|
m_cursorHiddenForUI = false;
|
||||||
m_windowFocused = true;
|
m_windowFocused = true;
|
||||||
m_hasInput = false;
|
m_hasInput = false;
|
||||||
|
|
||||||
|
|
@ -106,7 +107,7 @@ void KeyboardMouseInput::Tick()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_mouseGrabbed && g_hWnd)
|
if ((m_mouseGrabbed || m_cursorHiddenForUI) && g_hWnd)
|
||||||
{
|
{
|
||||||
RECT rc;
|
RECT rc;
|
||||||
GetClientRect(g_hWnd, &rc);
|
GetClientRect(g_hWnd, &rc);
|
||||||
|
|
@ -239,7 +240,36 @@ void KeyboardMouseInput::SetMouseGrabbed(bool grabbed)
|
||||||
m_mouseDeltaAccumX = 0;
|
m_mouseDeltaAccumX = 0;
|
||||||
m_mouseDeltaAccumY = 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) {}
|
while (ShowCursor(TRUE) < 0) {}
|
||||||
ClipCursor(NULL);
|
ClipCursor(NULL);
|
||||||
|
|
@ -264,7 +294,7 @@ void KeyboardMouseInput::SetWindowFocused(bool focused)
|
||||||
m_windowFocused = focused;
|
m_windowFocused = focused;
|
||||||
if (focused)
|
if (focused)
|
||||||
{
|
{
|
||||||
if (m_mouseGrabbed)
|
if (m_mouseGrabbed || m_cursorHiddenForUI)
|
||||||
{
|
{
|
||||||
while (ShowCursor(FALSE) >= 0) {}
|
while (ShowCursor(FALSE) >= 0) {}
|
||||||
ClipCursorToWindow(g_hWnd);
|
ClipCursorToWindow(g_hWnd);
|
||||||
|
|
|
||||||
|
|
@ -58,6 +58,9 @@ public:
|
||||||
void SetMouseGrabbed(bool grabbed);
|
void SetMouseGrabbed(bool grabbed);
|
||||||
bool IsMouseGrabbed() const { return m_mouseGrabbed; }
|
bool IsMouseGrabbed() const { return m_mouseGrabbed; }
|
||||||
|
|
||||||
|
void SetCursorHiddenForUI(bool hidden);
|
||||||
|
bool IsCursorHiddenForUI() const { return m_cursorHiddenForUI; }
|
||||||
|
|
||||||
void SetWindowFocused(bool focused);
|
void SetWindowFocused(bool focused);
|
||||||
bool IsWindowFocused() const { return m_windowFocused; }
|
bool IsWindowFocused() const { return m_windowFocused; }
|
||||||
|
|
||||||
|
|
@ -99,6 +102,8 @@ private:
|
||||||
|
|
||||||
bool m_mouseGrabbed;
|
bool m_mouseGrabbed;
|
||||||
|
|
||||||
|
bool m_cursorHiddenForUI;
|
||||||
|
|
||||||
bool m_windowFocused;
|
bool m_windowFocused;
|
||||||
|
|
||||||
bool m_hasInput;
|
bool m_hasInput;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue