Ignore K/M input when the cursor is outside of the rendering window

This commit is contained in:
ergo720 2020-09-20 22:58:04 +02:00
parent 4c47d5a6d9
commit dd24225477
5 changed files with 33 additions and 0 deletions

View File

@ -152,6 +152,11 @@ namespace DInput
bool KeyboardMouse::UpdateInput()
{
if (mo_leave_wnd) {
std::memset(&m_state_in, 0, sizeof(m_state_in));
return true;
}
DIMOUSESTATE2 tmp_mouse;
HRESULT kb_hr = m_kb_device->GetDeviceState(sizeof(m_state_in.keyboard), &m_state_in.keyboard);

View File

@ -35,6 +35,7 @@
namespace DInput
{
inline bool bKbMoEnumerated = false;
inline bool mo_leave_wnd = false;
inline LONG mo_axis_range_pos = 0;
inline LONG mo_axis_range_neg = 0;
inline LONG mo_wheel_range_pos = 0;

View File

@ -64,6 +64,7 @@
#include "WalkIndexBuffer.h"
#include "core\kernel\common\strings.hpp" // For uem_str
#include "common\input\SdlJoystick.h"
#include "common\input\DInputKeyboardMouse.h"
#include "common/util/strConverter.hpp" // for utf8_to_utf16
#include "VertexShaderSource.h"
@ -2030,11 +2031,33 @@ static LRESULT WINAPI EmuMsgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPar
}
break;
case WM_MOUSELEAVE:
{
DInput::mo_leave_wnd = true;
g_bIsTrackingMoLeave = false;
g_bIsTrackingMoMove = true;
}
break;
case WM_MOUSEMOVE:
{
if (g_bClipCursor) {
CxbxClipCursor(hWnd);
}
if (!g_bIsTrackingMoLeave) {
TRACKMOUSEEVENT tme;
tme.cbSize = sizeof(TRACKMOUSEEVENT);
tme.hwndTrack = hWnd;
tme.dwFlags = TME_LEAVE;
TrackMouseEvent(&tme);
g_bIsTrackingMoLeave = true;
if (g_bIsTrackingMoMove) {
DInput::mo_leave_wnd = false;
g_bIsTrackingMoMove = false;
}
}
}
break;

View File

@ -115,6 +115,8 @@ bool g_bIsWine = false;
bool g_bClipCursor = false;
bool g_CxbxPrintUEM = false;
ULONG g_CxbxFatalErrorCode = FATAL_ERROR_NONE;
bool g_bIsTrackingMoLeave = false;
bool g_bIsTrackingMoMove = false;
// Define function located in EmuXApi so we can call it from here
void SetupXboxDeviceTypes();

View File

@ -203,6 +203,8 @@ extern bool g_bIsWine;
extern bool g_bClipCursor;
extern bool g_CxbxPrintUEM;
extern ULONG g_CxbxFatalErrorCode;
extern bool g_bIsTrackingMoLeave;
extern bool g_bIsTrackingMoMove;
extern size_t g_SystemMaxMemory;