Lots of Imgui Adjustments (#405)

- Store if the F1 menu is open for the next boot
- Auto-save controller changes without having the press the Save button
- Changed FPS X position so it doesn't clip to the right of the window
- Changed F1 Toast to be 2.5 secs so it doesn't go over the title screen

Co-authored-by: MelonSpeedruns <melonspeedruns@stratobox.net>
This commit is contained in:
MelonSpeedruns
2026-04-16 15:58:39 -04:00
committed by GitHub
parent c7d9a8733f
commit 2cc11c74b7
4 changed files with 37 additions and 17 deletions
+1
View File
@@ -110,6 +110,7 @@ struct UserSettings {
ConfigVar<bool> showPipelineCompilation;
ConfigVar<bool> wasPresetChosen;
ConfigVar<bool> enableCrashReporting;
ConfigVar<bool> duskMenuOpen;
} backend;
};
+19 -9
View File
@@ -234,31 +234,40 @@ namespace dusk {
ImGuiMenuGame::ToggleFullscreen();
}
bool showMenu = !dusk::IsGameLaunched || !CheckMenuViewToggle(ImGuiKey_F1, m_isHidden);
if (!dusk::IsGameLaunched) {
m_preLaunchWindow.draw();
}
m_isHidden = getSettings().backend.duskMenuOpen;
CheckMenuViewToggle(ImGuiKey_F1, m_isHidden);
if (showMenu && ImGui::BeginMainMenuBar()) {
if (dusk::IsGameLaunched) {
if (getSettings().backend.duskMenuOpen != m_isHidden) {
m_isHidden = !getSettings().backend.duskMenuOpen;
getSettings().backend.duskMenuOpen.setValue(m_isHidden);
config::Save();
}
}
if ((!dusk::IsGameLaunched || getSettings().backend.duskMenuOpen) && ImGui::BeginMainMenuBar()) {
m_menuGame.draw();
m_menuEnhancements.draw();
m_menuTools.draw();
ImGui::SetCursorPosX(ImGui::GetWindowWidth() - 80.0f * ImGuiScale());
ImGui::SetCursorPosX(ImGui::GetWindowWidth() - 100.0f * ImGuiScale());
ImGuiIO& io = ImGui::GetIO();
ImGuiStringViewText(fmt::format(FMT_STRING("FPS: {:.2f}\n"), io.Framerate));
ImGui::EndMainMenuBar();
}
if (!dusk::IsGameLaunched) {
m_preLaunchWindow.draw();
}
if (!getSettings().backend.wasPresetChosen) {
m_firstRunPreset.draw();
return;
}
if (dusk::IsGameLaunched && !m_isLaunchInitialized) {
m_toasts.emplace_back("Press F1 to toggle menu"s, 5.f);
m_toasts.emplace_back("Press F1 to toggle menu"s, 2.5f);
m_isLaunchInitialized = true;
}
@@ -280,7 +289,8 @@ namespace dusk {
DuskDebugPad(); // temporary, remove later
// Only show cursor when menu or any windows are open
if (showMenu || ImGui::GetIO().MetricsRenderWindows > 0) {
if ((!dusk::IsGameLaunched || getSettings().backend.duskMenuOpen) || ImGui::GetIO().MetricsRenderWindows > 0)
{
ImGui::GetIO().ConfigFlags &= ~ImGuiConfigFlags_NoMouseCursorChange;
// Imgui will re-show cursor.
} else {
+14 -7
View File
@@ -304,6 +304,7 @@ namespace dusk {
m_controllerConfig.m_pendingButtonMapping = nullptr;
m_controllerConfig.m_pendingPort = -1;
PADBlockInput(false);
PADSerializeMappings();
}
}
@@ -316,6 +317,7 @@ namespace dusk {
m_controllerConfig.m_pendingAxisMapping = nullptr;
m_controllerConfig.m_pendingPort = -1;
PADBlockInput(false);
PADSerializeMappings();
} else {
auto nativeButton = PADGetNativeButtonPressed(m_controllerConfig.m_pendingPort);
if (nativeButton != -1) {
@@ -324,6 +326,7 @@ namespace dusk {
m_controllerConfig.m_pendingAxisMapping = nullptr;
m_controllerConfig.m_pendingPort = -1;
PADBlockInput(false);
PADSerializeMappings();
}
}
}
@@ -400,11 +403,6 @@ namespace dusk {
// if "None" selected
PADClearPort(m_controllerConfig.m_selectedPort);
}
}
// save mappings button
ImGui::SameLine();
if (ImGui::Button("Save")) {
PADSerializeMappings();
}
@@ -412,6 +410,7 @@ namespace dusk {
ImGui::SameLine();
if (ImGui::Button("Default")) {
PADRestoreDefaultMapping(m_controllerConfig.m_selectedPort);
PADSerializeMappings();
}
// buttons panel
@@ -508,6 +507,7 @@ namespace dusk {
float tmp = static_cast<float>(deadZones->leftTriggerActivationZone * 100.f) / 32767.f;
if (ImGui::DragFloat("##LThreshold", &tmp, 0.5f, 0.f, 100.f, "%.3f%%")) {
deadZones->leftTriggerActivationZone = static_cast<u16>((tmp / 100.f) * 32767);
PADSerializeMappings();
}
}
}
@@ -519,6 +519,7 @@ namespace dusk {
float tmp = static_cast<float>(deadZones->rightTriggerActivationZone * 100.f) / 32767.f;
if (ImGui::DragFloat("##RThreshold", &tmp, 0.5f, 0.f, 100.f, "%.3f%%")) {
deadZones->rightTriggerActivationZone = static_cast<u16>((tmp / 100.f) * 32767);
PADSerializeMappings();
}
}
}
@@ -581,6 +582,7 @@ namespace dusk {
float tmp = static_cast<float>(deadZones->stickDeadZone * 100.f) / 32767.f;
if (ImGui::DragFloat("##mainDeadZone", &tmp, 0.5f, 0.f, 100.f, "%.3f%%")) {
deadZones->stickDeadZone = static_cast<u16>((tmp / 100.f) * 32767);
PADSerializeMappings();
}
}
}
@@ -643,6 +645,7 @@ namespace dusk {
float tmp = static_cast<float>(deadZones->substickDeadZone * 100.f) / 32767.f;
if (ImGui::DragFloat("##subDeadZone", &tmp, 0.5f, 0.f, 100.f, "%.3f%%")) {
deadZones->substickDeadZone = static_cast<u16>((tmp / 100.f) * 32767);
PADSerializeMappings();
}
}
}
@@ -654,8 +657,12 @@ namespace dusk {
ImGuiBeginGroupPanel("Options", ImVec2(150 * scale, 20 * scale));
if (deadZones != nullptr) {
ImGui::Checkbox("Enable Dead Zones", &deadZones->useDeadzones);
ImGui::Checkbox("Emulate Triggers", &deadZones->emulateTriggers);
if (ImGui::Checkbox("Enable Dead Zones", &deadZones->useDeadzones)) {
PADSerializeMappings();
}
if (ImGui::Checkbox("Emulate Triggers", &deadZones->emulateTriggers)) {
PADSerializeMappings();
}
}
ImGuiEndGroupPanel();
+3 -1
View File
@@ -83,7 +83,8 @@ UserSettings g_userSettings = {
.skipPreLaunchUI {"backend.skipPreLaunchUI", false},
.showPipelineCompilation {"backend.showPipelineCompilation", false},
.wasPresetChosen {"backend.wasPresetChosen", false},
.enableCrashReporting {"backend.enableCrashReporting", true}
.enableCrashReporting {"backend.enableCrashReporting", true},
.duskMenuOpen {"backend.duskMenuOpen", false}
}
};
@@ -153,6 +154,7 @@ void registerSettings() {
Register(g_userSettings.backend.showPipelineCompilation);
Register(g_userSettings.backend.wasPresetChosen);
Register(g_userSettings.backend.enableCrashReporting);
Register(g_userSettings.backend.duskMenuOpen);
}
// Transient settings