From 26006e9d80a4e7ad5691180c19b6e355d6761c51 Mon Sep 17 00:00:00 2001 From: LunaMoo Date: Thu, 27 Apr 2017 16:29:08 +0200 Subject: [PATCH] Add an option to trap mouse within window/display area. --- Core/Config.cpp | 1 + Core/Config.h | 1 + UI/GameSettingsScreen.cpp | 1 + Windows/MainWindow.cpp | 8 ++++++++ 4 files changed, 11 insertions(+) diff --git a/Core/Config.cpp b/Core/Config.cpp index 83d7a58ff7..f818d2216e 100644 --- a/Core/Config.cpp +++ b/Core/Config.cpp @@ -697,6 +697,7 @@ static ConfigSetting controlSettings[] = { ConfigSetting("UseMouse", &g_Config.bMouseControl, false, true, true), ConfigSetting("MapMouse", &g_Config.bMapMouse, false, true, true), + ConfigSetting("ConfineMap", &g_Config.bMouseConfine, false, true, true), ConfigSetting("MouseSensitivity", &g_Config.fMouseSensitivity, 0.1, true, true), ConfigSetting("MouseSmoothing", &g_Config.fMouseSmoothing, 0.9, true, true), diff --git a/Core/Config.h b/Core/Config.h index ca1f7f1088..34dad60f81 100644 --- a/Core/Config.h +++ b/Core/Config.h @@ -395,6 +395,7 @@ public: bool bMouseControl; bool bMapMouse; // Workaround for mapping screen:| + bool bMouseConfine; // Trap inside the window. float fMouseSensitivity; float fMouseSmoothing; diff --git a/UI/GameSettingsScreen.cpp b/UI/GameSettingsScreen.cpp index 9a6e7cdbc1..ea8d5dffb3 100644 --- a/UI/GameSettingsScreen.cpp +++ b/UI/GameSettingsScreen.cpp @@ -583,6 +583,7 @@ void GameSettingsScreen::CreateViews() { settingInfo_->Show(co->T("MouseControl Tip", "You can now map mouse in control mapping screen by pressing the 'M' icon."), e.v); return UI::EVENT_CONTINUE; }); + controlsSettings->Add(new CheckBox(&g_Config.bMouseConfine, co->T("Confine Mouse", "Trap mouse within window/display area"))); controlsSettings->Add(new PopupSliderChoiceFloat(&g_Config.fMouseSensitivity, 0.01f, 1.0f, co->T("Mouse sensitivity"), 0.01f, screenManager(), "x")); controlsSettings->Add(new PopupSliderChoiceFloat(&g_Config.fMouseSmoothing, 0.0f, 0.95f, co->T("Mouse smoothing"), 0.05f, screenManager(), "x")); #endif diff --git a/Windows/MainWindow.cpp b/Windows/MainWindow.cpp index 0fb38581da..cedb62a456 100644 --- a/Windows/MainWindow.cpp +++ b/Windows/MainWindow.cpp @@ -233,12 +233,20 @@ namespace MainWindow while (cursorCounter >= 0) { cursorCounter = ShowCursor(FALSE); } + if (g_Config.bMouseConfine) { + RECT rc; + GetClientRect(hwndDisplay, &rc); + ClientToScreen(hwndDisplay, reinterpret_cast(&rc.left)); + ClientToScreen(hwndDisplay, reinterpret_cast(&rc.right)); + ClipCursor(&rc); + } } else { hideCursor = !autoHide; if (cursorCounter < 0) { cursorCounter = ShowCursor(TRUE); SetCursor(LoadCursor(NULL, IDC_ARROW)); } + ClipCursor(NULL); } }