From 4cd1c40f3795b0777cc9e6e5c7477fad426bf4f2 Mon Sep 17 00:00:00 2001 From: N3xoX1 Date: Sun, 13 Apr 2025 18:28:16 +0930 Subject: [PATCH] Start to add the input configure screen --- external/sciterui | 2 +- lang/english/css/input_config.css | 143 ++++++++++++++++++ lang/english/css/main_window.css | 2 +- lang/english/html/input_config.html | 85 +++++++++++ lang/english/html/main_window.html | 2 +- src/nxemu/nxemu.vcxproj | 2 + src/nxemu/nxemu.vcxproj.filters | 6 + .../user_interface/sciter_main_window.cpp | 10 +- src/nxemu/user_interface/sciter_main_window.h | 2 + .../user_interface/settings/input_config.cpp | 26 ++++ .../user_interface/settings/input_config.h | 21 +++ 11 files changed, 297 insertions(+), 4 deletions(-) create mode 100644 lang/english/css/input_config.css create mode 100644 lang/english/html/input_config.html create mode 100644 src/nxemu/user_interface/settings/input_config.cpp create mode 100644 src/nxemu/user_interface/settings/input_config.h diff --git a/external/sciterui b/external/sciterui index a6b88385..ac1a1ad1 160000 --- a/external/sciterui +++ b/external/sciterui @@ -1 +1 @@ -Subproject commit a6b88385f3e903011502d8257ffb08035b6c49cb +Subproject commit ac1a1ad11b8d2af176b5d625706a8b3357688a5e diff --git a/lang/english/css/input_config.css b/lang/english/css/input_config.css new file mode 100644 index 00000000..3bc3ef07 --- /dev/null +++ b/lang/english/css/input_config.css @@ -0,0 +1,143 @@ +button +{ + color: #eff0f1; + background: #232728; + border: 1px solid #55575a; + font-family: 'Segoe UI', Arial, sans-serif; + font-size: 0.8rem; + padding: 0.2rem; + min-width: 5rem; +} + +button:hover +{ + border: 1px solid #3cafe9; +} + +button:active +{ + background: #3cafe9; +} + +.tabs { + display: flex; + font-size: 0; +} + +.tab-button { + background: #2b2f32; + border: 1px solid #55575a; + border-bottom: 1px solid #76787d; + border-radius: 2px 2px 0 0; + color: #eff0f1; + font-family: 'Segoe UI', Arial, sans-serif; + font-size: 0.8rem; + padding: 0.2rem 1.3rem 0.2rem 1.3rem; + margin: 0; + position: relative; + z-index: 2; + margin-bottom: -1px; + min-width: 2rem; +} + +.tab-button:hover { + border: 1px solid #55575a; + border-bottom: 1px solid #76787d; +} + +.tab-button:active { + background: #2b2f32; +} + +.tab-button.active { + background: #30373b; + border-color: #76787d; + border-bottom: 1px solid #30373b; +} + +.controller-body +{ + background: #30373b; + border: 1px solid #76787d; + width: 100%%; + height: 100%%; + flow: horizontal; + padding: 1em; + font-family: 'Segoe UI', Arial, sans-serif; + font-size: 0.8rem; + color: #eff0f1; +} + +.config-left, +.config-right +{ + width: 13rem; +} + +.config-center +{ + width: 100%%; +} + +.input-group +{ + position: relative; + background-color: #30373b; + border: 1px solid #55575a; + padding: 1.2rem 0.5rem 0.5rem 0.5rem; + margin: 0 0 20px 0; +} + +.input-grid-directional { + text-align: center; + flow: grid( 1 1, 2 3, 4 4, 5 6, 7 7, 8 8); + padding: 0.5rem 0 0; +} + +.group-title +{ + position: absolute; + top: -0.5rem; + left: 0; + margin: 0 auto; + background-color: #30373b; + padding: 0 6px; + font-size: 0.8rem; + color: #f0f0f0; +} + +.input-row +{ + display: inline-block; + position: relative; + background-color: #30373b; + border: 1px solid #55575a; + padding: 0.4em 0.2rem 0.2rem 0.2rem; + border-radius: 2px; + margin: 0 50%% 0.9rem 50%%; + width: 50%%; +} + +.input-row span +{ + position: absolute; + top: -0.7rem; + left: 0; + margin: 0 auto; + background-color: #30373b; + padding: 0 6px; + font-size: 0.8rem; + color: #f0f0f0; +} + +.input-row button +{ + min-width: 3.8rem; + height: 1.4rem; +} + +.footer +{ + padding: 0.5rem 0 0; + text-align: right; +} \ No newline at end of file diff --git a/lang/english/css/main_window.css b/lang/english/css/main_window.css index 09bad0f0..869edd25 100644 --- a/lang/english/css/main_window.css +++ b/lang/english/css/main_window.css @@ -1,7 +1,7 @@ html { border: none; - background-color: #232629; + background-color: #30373b; } html[window-state="maximized"] diff --git a/lang/english/html/input_config.html b/lang/english/html/input_config.html new file mode 100644 index 00000000..d68676e5 --- /dev/null +++ b/lang/english/html/input_config.html @@ -0,0 +1,85 @@ + + + + + Configure Input + +
+ Configure input + + + + +
+ +
+ + + + + + +
+
+
+
+
Left Stick
+ +
+
Up
+
Left
+
Right
+
Down
+
Pressed
+
Modifier
+ + +
+
+
+
D-Pad
+ +
+
Up
+
Left
+
Right
+
Down
+
+
+
+
+ +
+
+
+
Face Buttons
+ +
+
X
+
Y
+
A
+
B
+
+
+
+
Right Stick
+ +
+
Up
+
Left
+
Right
+
Down
+
Pressed
+
Modifier
+ + +
+
+
+
+ + + \ No newline at end of file diff --git a/lang/english/html/main_window.html b/lang/english/html/main_window.html index 12e378e6..a9ba8afa 100644 --- a/lang/english/html/main_window.html +++ b/lang/english/html/main_window.html @@ -4,7 +4,7 @@ NxEmu
- NxEmu + NxEmu diff --git a/src/nxemu/nxemu.vcxproj b/src/nxemu/nxemu.vcxproj index d70da203..3ce2df70 100644 --- a/src/nxemu/nxemu.vcxproj +++ b/src/nxemu/nxemu.vcxproj @@ -43,6 +43,7 @@ + @@ -57,6 +58,7 @@ + diff --git a/src/nxemu/nxemu.vcxproj.filters b/src/nxemu/nxemu.vcxproj.filters index 336261d8..cbf027be 100644 --- a/src/nxemu/nxemu.vcxproj.filters +++ b/src/nxemu/nxemu.vcxproj.filters @@ -75,6 +75,9 @@ Source Files\user_interface + + Source Files\user_interface\settings + @@ -113,6 +116,9 @@ Header Files\user_interface + + Header Files\user_interface\settings + diff --git a/src/nxemu/user_interface/sciter_main_window.cpp b/src/nxemu/user_interface/sciter_main_window.cpp index 63fe819a..bf5cdc29 100644 --- a/src/nxemu/user_interface/sciter_main_window.cpp +++ b/src/nxemu/user_interface/sciter_main_window.cpp @@ -1,4 +1,5 @@ #include "sciter_main_window.h" +#include "settings/input_config.h" #include "settings/settings_config.h" #include "settings/ui_settings.h" #include @@ -49,6 +50,7 @@ void SciterMainWindow::ResetMenu() fileMenu.push_back(MenuBarItem(ID_FILE_EXIT, "Exit")); MenuBarItemList OptionsMenu; + OptionsMenu.push_back(MenuBarItem(ID_OPTIONS_INPUT, "Configure Input...")); OptionsMenu.push_back(MenuBarItem(ID_OPTIONS_SETTINGS, "Settings...")); MenuBarItemList mainTitleMenu; @@ -69,7 +71,7 @@ bool SciterMainWindow::Show(void) WINDOW_WIDTH = 760, }; - if (!m_sciterUI.WindowCreate(nullptr, "main_window.html", 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, m_window)) + if (!m_sciterUI.WindowCreate(nullptr, "main_window.html", 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, SUIW_MAIN, m_window)) { return false; } @@ -200,6 +202,11 @@ void SciterMainWindow::OnSettings(void) SettingConfig().Display((HWND)m_window->GetHandle()); } +void SciterMainWindow::OnInputConfig(void) +{ + InputConfig(m_sciterUI).Display((void *)m_window->GetHandle()); +} + void SciterMainWindow::OnRecetGame(uint32_t fileIndex) { Stringlist & recentFiles = uiSettings.recentFiles; @@ -221,6 +228,7 @@ void SciterMainWindow::OnMenuItem(int32_t id, SCITER_ELEMENT /*item*/) case ID_FILE_OPEN_GAME: OnOpenGame(); break; case ID_FILE_EXIT: OnFileExit(); break; case ID_OPTIONS_SETTINGS: OnSettings(); break; + case ID_OPTIONS_INPUT: OnInputConfig(); break; default: if (id >= ID_RECENT_FILE_START && id <= ID_RECENT_FILE_END) { diff --git a/src/nxemu/user_interface/sciter_main_window.h b/src/nxemu/user_interface/sciter_main_window.h index 6f9e48b8..74dd20d7 100644 --- a/src/nxemu/user_interface/sciter_main_window.h +++ b/src/nxemu/user_interface/sciter_main_window.h @@ -16,6 +16,7 @@ class SciterMainWindow : ID_FILE_EXIT, // Options Menu + ID_OPTIONS_INPUT, ID_OPTIONS_SETTINGS, // Recent files @@ -44,6 +45,7 @@ private: void OnOpenGame(void); void OnFileExit(void); void OnSettings(void); + void OnInputConfig(void); void OnRecetGame(uint32_t fileIndex); // IWindowDestroySink diff --git a/src/nxemu/user_interface/settings/input_config.cpp b/src/nxemu/user_interface/settings/input_config.cpp new file mode 100644 index 00000000..11a3a9b7 --- /dev/null +++ b/src/nxemu/user_interface/settings/input_config.cpp @@ -0,0 +1,26 @@ +#include "input_config.h" +#include + +InputConfig::InputConfig(ISciterUI & SciterUI) : + m_sciterUI(SciterUI), + m_window(nullptr) +{ +} + +InputConfig::~InputConfig() +{ +} + +void InputConfig::Display(void * parentWindow) +{ + enum + { + WINDOW_HEIGHT = 300, + WINDOW_WIDTH = 300, + }; + + if (!m_sciterUI.WindowCreate(parentWindow, "input_config.html", 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT, SUIW_CHILD, m_window)) + { + return; + } +} diff --git a/src/nxemu/user_interface/settings/input_config.h b/src/nxemu/user_interface/settings/input_config.h new file mode 100644 index 00000000..ea25efb0 --- /dev/null +++ b/src/nxemu/user_interface/settings/input_config.h @@ -0,0 +1,21 @@ +#pragma once + +__interface ISciterUI; +__interface ISciterWindow; + +class InputConfig +{ +public: + InputConfig(ISciterUI& SciterUI); + ~InputConfig(); + + void Display(void * parentWindow); + +private: + InputConfig() = delete; + InputConfig(const InputConfig&) = delete; + InputConfig& operator=(const InputConfig&) = delete; + + ISciterUI & m_sciterUI; + ISciterWindow * m_window; +};