From 4645d42130032a50a9e91ca7b13e0d955c93574b Mon Sep 17 00:00:00 2001 From: ergo720 <45463469+ergo720@users.noreply.github.com> Date: Fri, 12 Nov 2021 02:34:19 +0100 Subject: [PATCH 1/6] Added lightgun support to input gui --- CMakeLists.txt | 14 +- import/XbSymbolDatabase | 2 +- src/common/Settings.cpp | 7 + src/common/input/Button.cpp | 24 +- src/common/input/Button.h | 2 + src/common/input/EmuDevice.cpp | 19 +- src/common/input/EmuDevice.h | 1 + src/common/input/InputDevice.cpp | 4 +- src/common/input/InputDevice.h | 2 +- src/common/input/InputManager.cpp | 4 +- src/common/input/InputManager.h | 1 + src/common/input/InputWindow.cpp | 16 ++ src/common/input/InputWindow.h | 28 ++- src/common/input/layout_xbox_device.h | 39 +++ src/core/hle/XAPI/Xapi.cpp | 2 +- src/gui/DlgInputConfig.cpp | 14 +- .../DlgDukeControllerConfig.cpp | 16 -- .../DlgDukeControllerConfig.h | 0 .../DlgLibusbControllerConfig.cpp | 5 - .../DlgLibusbControllerConfig.h | 0 src/gui/input/DlgLightgunConfig.cpp | 229 ++++++++++++++++++ src/gui/input/DlgLightgunConfig.h | 30 +++ .../DlgSBControllerConfig.cpp | 14 +- .../DlgSBControllerConfig.h | 0 src/gui/resource/Cxbx.rc | 60 +++++ src/gui/resource/ResCxbx.h | 20 +- 26 files changed, 493 insertions(+), 60 deletions(-) rename src/gui/{controllers => input}/DlgDukeControllerConfig.cpp (96%) rename src/gui/{controllers => input}/DlgDukeControllerConfig.h (100%) rename src/gui/{controllers => input}/DlgLibusbControllerConfig.cpp (98%) rename src/gui/{controllers => input}/DlgLibusbControllerConfig.h (100%) create mode 100644 src/gui/input/DlgLightgunConfig.cpp create mode 100644 src/gui/input/DlgLightgunConfig.h rename src/gui/{controllers => input}/DlgSBControllerConfig.cpp (96%) rename src/gui/{controllers => input}/DlgSBControllerConfig.h (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index c33006fce..4c1d1c732 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -104,9 +104,10 @@ file (GLOB CXBXR_HEADER_GUIv1 "${CXBXR_ROOT_DIR}/src/common/input/Button.h" "${CXBXR_ROOT_DIR}/src/common/input/EmuDevice.h" "${CXBXR_ROOT_DIR}/src/common/input/InputWindow.h" - "${CXBXR_ROOT_DIR}/src/gui/controllers/DlgDukeControllerConfig.h" - "${CXBXR_ROOT_DIR}/src/gui/controllers/DlgLibusbControllerConfig.h" - "${CXBXR_ROOT_DIR}/src/gui/controllers/DlgSBControllerConfig.h" + "${CXBXR_ROOT_DIR}/src/gui/input/DlgDukeControllerConfig.h" + "${CXBXR_ROOT_DIR}/src/gui/input/DlgLibusbControllerConfig.h" + "${CXBXR_ROOT_DIR}/src/gui/input/DlgLightgunConfig.h" + "${CXBXR_ROOT_DIR}/src/gui/input/DlgSBControllerConfig.h" "${CXBXR_ROOT_DIR}/src/gui/DlgAbout.h" "${CXBXR_ROOT_DIR}/src/gui/DlgAudioConfig.h" "${CXBXR_ROOT_DIR}/src/gui/DlgInputConfig.h" @@ -272,9 +273,10 @@ file (GLOB CXBXR_SOURCE_GUIv1 "${CXBXR_ROOT_DIR}/src/common/input/Button.cpp" "${CXBXR_ROOT_DIR}/src/common/input/EmuDevice.cpp" "${CXBXR_ROOT_DIR}/src/common/input/InputWindow.cpp" - "${CXBXR_ROOT_DIR}/src/gui/controllers/DlgDukeControllerConfig.cpp" - "${CXBXR_ROOT_DIR}/src/gui/controllers/DlgLibusbControllerConfig.cpp" - "${CXBXR_ROOT_DIR}/src/gui/controllers/DlgSBControllerConfig.cpp" + "${CXBXR_ROOT_DIR}/src/gui/input/DlgDukeControllerConfig.cpp" + "${CXBXR_ROOT_DIR}/src/gui/input/DlgLibusbControllerConfig.cpp" + "${CXBXR_ROOT_DIR}/src/gui/input/DlgLightgunConfig.cpp" + "${CXBXR_ROOT_DIR}/src/gui/input/DlgSBControllerConfig.cpp" "${CXBXR_ROOT_DIR}/src/gui/DlgAbout.cpp" "${CXBXR_ROOT_DIR}/src/gui/DlgAudioConfig.cpp" "${CXBXR_ROOT_DIR}/src/gui/DlgInputConfig.cpp" diff --git a/import/XbSymbolDatabase b/import/XbSymbolDatabase index 0298a65f2..d14a926d3 160000 --- a/import/XbSymbolDatabase +++ b/import/XbSymbolDatabase @@ -1 +1 @@ -Subproject commit 0298a65f228b0c76915bb115d0134675777a0e3d +Subproject commit d14a926d3221b5ae3782bb7d60b2ab8696978682 diff --git a/src/common/Settings.cpp b/src/common/Settings.cpp index b4735bbc3..e19586bd4 100644 --- a/src/common/Settings.cpp +++ b/src/common/Settings.cpp @@ -516,6 +516,10 @@ bool Settings::LoadConfig() lambda(dev_num_buttons[device], button_sbc_names); break; + case to_underlying(XBOX_INPUT_DEVICE::LIGHTGUN): + lambda(dev_num_buttons[device], button_lightgun_names); + break; + } } @@ -688,6 +692,9 @@ bool Settings::Save(std::string file_path) lambda(dev_num_buttons[device], button_sbc_names); break; + case to_underlying(XBOX_INPUT_DEVICE::LIGHTGUN): + lambda(dev_num_buttons[device], button_lightgun_names); + break; } } diff --git a/src/common/input/Button.cpp b/src/common/input/Button.cpp index af40291a7..cce0de168 100644 --- a/src/common/input/Button.cpp +++ b/src/common/input/Button.cpp @@ -99,7 +99,7 @@ LRESULT CALLBACK ButtonSbcSubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR { switch (uMsg) { - // Remove the window subclass when this window is destroyed + // Remove the window subclass when this window is destroyed case WM_NCDESTROY: { RemoveWindowSubclass(hWnd, ButtonSbcSubclassProc, uIdSubclass); } @@ -122,3 +122,25 @@ LRESULT CALLBACK ButtonSbcSubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPAR return DefSubclassProc(hWnd, uMsg, wParam, lParam); } + +LRESULT CALLBACK ButtonLightgunSubclassProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT_PTR uIdSubclass, DWORD_PTR dwRefData) +{ + switch (uMsg) + { + // Remove the window subclass when this window is destroyed + case WM_NCDESTROY: { + RemoveWindowSubclass(hWnd, ButtonSbcSubclassProc, uIdSubclass); + } + break; + + case WM_RBUTTONDOWN: { + Button *button = reinterpret_cast