From 54c6a9faa52cde81e834b81bc241d6b2df80ae40 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sun, 3 May 2026 00:12:48 +1000 Subject: [PATCH] Hotkeys: Make more formatting-friendly --- src/core/hotkeys.cpp | 1355 +++++++++++++++++++++--------------------- src/core/system.cpp | 4 +- src/core/system.h | 2 +- 3 files changed, 693 insertions(+), 668 deletions(-) diff --git a/src/core/hotkeys.cpp b/src/core/hotkeys.cpp index 2f04570db..917682c33 100644 --- a/src/core/hotkeys.cpp +++ b/src/core/hotkeys.cpp @@ -85,695 +85,720 @@ static void HotkeyToggleOSD() VideoThread::UpdateSettings(true, false, false); } -#define DEFINE_HOTKEY(name, category, display_name, handler) {(name), (category), (display_name), (handler)}, +static constexpr const HotkeyInfo s_hotkey_list[] = { #ifndef __ANDROID__ -#define DEFINE_NON_ANDROID_HOTKEY(name, category, display_name, handler) \ - DEFINE_HOTKEY(name, category, display_name, handler) + {"OpenPauseMenu", TRANSLATE_NOOP("Hotkeys", "Interface"), TRANSLATE_NOOP("Hotkeys", "Open Pause Menu"), + [](s32 pressed) { + if (!pressed && System::CanPauseSystem(true)) + FullscreenUI::OpenPauseMenu(); + }}, + + {"OpenCheatsMenu", TRANSLATE_NOOP("Hotkeys", "Interface"), TRANSLATE_NOOP("Hotkeys", "Open Cheat Settings"), + [](s32 pressed) { + if (!pressed && System::CanPauseSystem(true)) + FullscreenUI::OpenCheatsMenu(); + }}, + + {"OpenAchievements", TRANSLATE_NOOP("Hotkeys", "Interface"), TRANSLATE_NOOP("Hotkeys", "Open Achievement List"), + [](s32 pressed) { + if (!pressed && System::CanPauseSystem(true)) + FullscreenUI::OpenAchievementsWindow(); + }}, + + {"OpenLeaderboards", TRANSLATE_NOOP("Hotkeys", "Interface"), TRANSLATE_NOOP("Hotkeys", "Open Leaderboard List"), + [](s32 pressed) { + if (!pressed && System::CanPauseSystem(true)) + FullscreenUI::OpenLeaderboardsWindow(); + }}, + + {"Screenshot", TRANSLATE_NOOP("Hotkeys", "Interface"), TRANSLATE_NOOP("Hotkeys", "Save Screenshot"), + [](s32 pressed) { + if (!pressed) + System::SaveScreenshot(); + }}, + + {"TogglePause", TRANSLATE_NOOP("Hotkeys", "Interface"), TRANSLATE_NOOP("Hotkeys", "Toggle Pause"), + [](s32 pressed) { + if (!pressed && System::CanPauseSystem(true)) + System::PauseSystem(!System::IsPaused()); + }}, + + {"ToggleFullscreen", TRANSLATE_NOOP("Hotkeys", "Interface"), TRANSLATE_NOOP("Hotkeys", "Toggle Fullscreen"), + [](s32 pressed) { + if (!pressed) + VideoThread::SetFullscreen(!VideoThread::IsFullscreen()); + }}, -#else +#endif // __ANDROID__ -#define DEFINE_NON_ANDROID_HOTKEY(name, category, display_name, handler) + {"FastForward", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Fast Forward (Hold)"), + [](s32 pressed) { + if (pressed < 0) + return; + System::SetFastForwardEnabled(pressed > 0); + }}, + + {"ToggleFastForward", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Fast Forward (Toggle)"), + [](s32 pressed) { + if (!pressed) + System::SetFastForwardEnabled(!System::IsFastForwardEnabled()); + }}, + + {"Turbo", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Turbo (Hold)"), + [](s32 pressed) { + if (pressed < 0) + return; + System::SetTurboEnabled(pressed > 0); + }}, + + {"ToggleTurbo", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Turbo (Toggle)"), + [](s32 pressed) { + if (!pressed) + System::SetTurboEnabled(!System::IsTurboEnabled()); + }}, + + {"PowerOff", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Power Off System"), + [](s32 pressed) { + if (!pressed) + Host::RequestSystemShutdown(true, g_settings.save_state_on_exit, true); + }}, + + {"Reset", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Restart Game"), + [](s32 pressed) { + if (!pressed) + Host::RunOnCoreThread(System::ResetSystem); + }}, -#endif +#ifndef __ANDROID__ + {"ChangeDisc", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Change Disc"), + [](s32 pressed) { + if (!pressed) + FullscreenUI::OpenDiscChangeMenu(); + }}, +#endif // __ANDROID__ -static constexpr const HotkeyInfo s_hotkey_list[] = { + {"SwitchToPreviousDisc", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Switch to Previous Disc"), + [](s32 pressed) { + // Defer because otherwise the hotkey might be invalidated by config change. + if (!pressed) + Host::RunOnCoreThread([]() { System::SwitchToPreviousDisc(true); }); + }}, + + {"SwitchToNextDisc", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Switch to Next Disc"), + [](s32 pressed) { + // Defer because otherwise the hotkey might be invalidated by config change. + if (!pressed) + Host::RunOnCoreThread([]() { System::SwitchToNextDisc(true); }); + }}, + + {"Rewind", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Rewind"), + [](s32 pressed) { + if (pressed < 0) + return; + System::SetRewindState(pressed > 0); + }}, -DEFINE_NON_ANDROID_HOTKEY("OpenPauseMenu", TRANSLATE_NOOP("Hotkeys", "Interface"), - TRANSLATE_NOOP("Hotkeys", "Open Pause Menu"), [](s32 pressed) { - if (!pressed && System::CanPauseSystem(true)) - FullscreenUI::OpenPauseMenu(); - }) - -DEFINE_NON_ANDROID_HOTKEY("OpenCheatsMenu", TRANSLATE_NOOP("Hotkeys", "Interface"), - TRANSLATE_NOOP("Hotkeys", "Open Cheat Settings"), [](s32 pressed) { - if (!pressed && System::CanPauseSystem(true)) - FullscreenUI::OpenCheatsMenu(); - }) - -DEFINE_NON_ANDROID_HOTKEY("OpenAchievements", TRANSLATE_NOOP("Hotkeys", "Interface"), - TRANSLATE_NOOP("Hotkeys", "Open Achievement List"), [](s32 pressed) { - if (!pressed && System::CanPauseSystem(true)) - FullscreenUI::OpenAchievementsWindow(); - }) - -DEFINE_NON_ANDROID_HOTKEY("OpenLeaderboards", TRANSLATE_NOOP("Hotkeys", "Interface"), - TRANSLATE_NOOP("Hotkeys", "Open Leaderboard List"), [](s32 pressed) { - if (!pressed && System::CanPauseSystem(true)) - FullscreenUI::OpenLeaderboardsWindow(); - }) - -DEFINE_NON_ANDROID_HOTKEY("Screenshot", TRANSLATE_NOOP("Hotkeys", "Interface"), - TRANSLATE_NOOP("Hotkeys", "Save Screenshot"), [](s32 pressed) { - if (!pressed) - System::SaveScreenshot(); - }) - -DEFINE_NON_ANDROID_HOTKEY("TogglePause", TRANSLATE_NOOP("Hotkeys", "Interface"), - TRANSLATE_NOOP("Hotkeys", "Toggle Pause"), [](s32 pressed) { - if (!pressed && System::CanPauseSystem(true)) - System::PauseSystem(!System::IsPaused()); - }) - -DEFINE_NON_ANDROID_HOTKEY("ToggleFullscreen", TRANSLATE_NOOP("Hotkeys", "Interface"), - TRANSLATE_NOOP("Hotkeys", "Toggle Fullscreen"), [](s32 pressed) { - if (!pressed) - VideoThread::SetFullscreen(!VideoThread::IsFullscreen()); - }) - -DEFINE_HOTKEY("FastForward", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Fast Forward (Hold)"), - [](s32 pressed) { - if (pressed < 0) - return; - System::SetFastForwardEnabled(pressed > 0); - }) - -DEFINE_HOTKEY("ToggleFastForward", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Fast Forward (Toggle)"), [](s32 pressed) { - if (!pressed) - System::SetFastForwardEnabled(!System::IsFastForwardEnabled()); - }) - -DEFINE_HOTKEY("Turbo", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Turbo (Hold)"), [](s32 pressed) { - if (pressed < 0) - return; - System::SetTurboEnabled(pressed > 0); -}) - -DEFINE_HOTKEY("ToggleTurbo", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Turbo (Toggle)"), - [](s32 pressed) { - if (!pressed) - System::SetTurboEnabled(!System::IsTurboEnabled()); - }) - -DEFINE_NON_ANDROID_HOTKEY("PowerOff", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Power Off System"), [](s32 pressed) { - if (!pressed) - Host::RequestSystemShutdown(true, g_settings.save_state_on_exit, true); - }) - -DEFINE_HOTKEY("Reset", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Restart Game"), [](s32 pressed) { - if (!pressed) - Host::RunOnCoreThread(System::ResetSystem); -}) - -DEFINE_NON_ANDROID_HOTKEY("ChangeDisc", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Change Disc"), - [](s32 pressed) { - if (!pressed) - FullscreenUI::OpenDiscChangeMenu(); - }) - -DEFINE_HOTKEY("SwitchToPreviousDisc", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Switch to Previous Disc"), [](s32 pressed) { - // Defer because otherwise the hotkey might be invalidated by config change. - if (!pressed) - Host::RunOnCoreThread([]() { System::SwitchToPreviousDisc(true); }); - }) - -DEFINE_HOTKEY("SwitchToNextDisc", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Switch to Next Disc"), - [](s32 pressed) { - // Defer because otherwise the hotkey might be invalidated by config change. - if (!pressed) - Host::RunOnCoreThread([]() { System::SwitchToNextDisc(true); }); - }) - -DEFINE_HOTKEY("Rewind", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Rewind"), [](s32 pressed) { - if (pressed < 0) - return; - System::SetRewindState(pressed > 0); -}) - -DEFINE_NON_ANDROID_HOTKEY("FrameStep", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Frame Step"), - [](s32 pressed) { - if (!pressed) - System::DoFrameStep(); - }) - -DEFINE_HOTKEY("SwapMemoryCards", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Swap Memory Card Slots"), [](s32 pressed) { - if (!pressed) - System::SwapMemoryCards(); - }) - -DEFINE_NON_ANDROID_HOTKEY("ToggleMediaCapture", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Toggle Media Capture"), [](s32 pressed) { - if (!pressed) - { - if (System::GetMediaCapture()) - System::StopMediaCapture(); - else - System::StartMediaCapture(); - } - }) - -DEFINE_HOTKEY("ToggleOverclocking", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Toggle Clock Speed Control (Overclocking)"), [](s32 pressed) { - if (!pressed && System::IsValid() && !Achievements::IsHardcoreModeActive()) - { - g_settings.cpu_overclock_enable = !g_settings.cpu_overclock_enable; - g_settings.UpdateOverclockActive(); - System::UpdateOverclock(); - - if (g_settings.cpu_overclock_enable) - { - const u32 percent = g_settings.GetCPUOverclockPercent(); - const double clock_speed = - ((static_cast(System::MASTER_CLOCK) * static_cast(percent)) / 100.0) / 1000000.0; - Host::AddIconOSDMessage( - OSDMessageType::Quick, "ToggleOverclocking", ICON_FA_GAUGE_SIMPLE_HIGH, - fmt::format(TRANSLATE_FS("OSDMessage", "CPU clock speed control enabled ({:.3f} MHz)."), - clock_speed)); - } - else - { - Host::AddIconOSDMessage( - OSDMessageType::Quick, "ToggleOverclocking", ICON_FA_GAUGE_SIMPLE_HIGH, - fmt::format(TRANSLATE_FS("OSDMessage", "CPU clock speed control disabled ({:.3f} MHz)."), - static_cast(System::MASTER_CLOCK) / 1000000.0)); - } - } - }) - -DEFINE_HOTKEY("IncreaseEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Increase Emulation Speed"), [](s32 pressed) { - if (!pressed && System::IsValid()) - { - g_settings.emulation_speed += 0.1f; - System::UpdateSpeedLimiterState(); - Host::AddIconOSDMessage( - OSDMessageType::Quick, "EmulationSpeedChange", ICON_FA_GAUGE, - fmt::format(TRANSLATE_FS("OSDMessage", "Emulation speed set to {}%."), - static_cast(std::lround(g_settings.emulation_speed * 100.0f)))); - } - }) - -DEFINE_HOTKEY("DecreaseEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Decrease Emulation Speed"), [](s32 pressed) { - if (!pressed && System::IsValid()) - { - g_settings.emulation_speed = - std::max(g_settings.emulation_speed - 0.1f, Achievements::IsHardcoreModeActive() ? 1.0f : 0.1f); - System::UpdateSpeedLimiterState(); - Host::AddIconOSDMessage( - OSDMessageType::Quick, "EmulationSpeedChange", ICON_FA_GAUGE, - fmt::format(TRANSLATE_FS("OSDMessage", "Emulation speed set to {}%."), - static_cast(std::lround(g_settings.emulation_speed * 100.0f)))); - } - }) - -DEFINE_HOTKEY("ResetEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), - TRANSLATE_NOOP("Hotkeys", "Reset Emulation Speed"), [](s32 pressed) { - if (!pressed && System::IsValid()) - { - g_settings.emulation_speed = std::max(Core::GetFloatSettingValue("Main", "EmulationSpeed", 1.0f), - Achievements::IsHardcoreModeActive() ? 1.0f : 0.1f); - System::UpdateSpeedLimiterState(); - Host::AddIconOSDMessage( - OSDMessageType::Quick, "EmulationSpeedChange", ICON_FA_GAUGE, - fmt::format(TRANSLATE_FS("OSDMessage", "Emulation speed set to {}%."), - static_cast(std::lround(g_settings.emulation_speed * 100.0f)))); - } - }) - -DEFINE_HOTKEY("RotateClockwise", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Rotate Display Clockwise"), [](s32 pressed) { - if (!pressed) - { - g_settings.display_rotation = static_cast( - (static_cast(g_settings.display_rotation) + 1) % static_cast(DisplayRotation::Count)); - VideoThread::UpdateSettings(true, false, false); - } - }) - -DEFINE_HOTKEY("RotateCounterclockwise", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Rotate Display Counterclockwise"), [](s32 pressed) { - if (!pressed) - { - g_settings.display_rotation = - (g_settings.display_rotation > static_cast(0)) ? - static_cast((static_cast(g_settings.display_rotation) - 1) % - static_cast(DisplayRotation::Count)) : - static_cast(static_cast(DisplayRotation::Count) - 1); - VideoThread::UpdateSettings(true, false, false); - } - }) - -DEFINE_HOTKEY("ToggleOSD", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle On-Screen Display"), - [](s32 pressed) { - if (!pressed) - HotkeyToggleOSD(); - }) - -DEFINE_HOTKEY("ToggleSoftwareRendering", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Toggle Software Rendering"), [](s32 pressed) { - if (!pressed && System::IsValid()) - System::ToggleSoftwareRendering(); - }) - -DEFINE_HOTKEY("TogglePGXP", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle PGXP"), - [](s32 pressed) { - if (!pressed && System::IsValid()) - { - System::ClearMemorySaveStates(true, true); - - // This is pretty yikes, if PGXP was off we'll have already disabled all the dependent settings. - g_settings.gpu_pgxp_enable = !g_settings.gpu_pgxp_enable; - { - const auto lock = Core::GetSettingsLock(); - const SettingsInterface& si = *Core::GetSettingsInterface(); - if (g_settings.gpu_pgxp_enable) - g_settings.LoadPGXPSettings(si); - g_settings.FixIncompatibleSettings(si, false); - } - - VideoThread::UpdateSettings(true, false, false); - - Host::AddKeyedOSDMessage(OSDMessageType::Quick, "TogglePGXP", - g_settings.gpu_pgxp_enable ? - TRANSLATE_STR("OSDMessage", "PGXP is now enabled.") : - TRANSLATE_STR("OSDMessage", "PGXP is now disabled.")); - - if (g_settings.gpu_pgxp_enable) - CPU::PGXP::Initialize(); - else - CPU::PGXP::Shutdown(); - - // we need to recompile all blocks if pgxp is toggled on/off - CPU::CodeCache::Reset(); - - // need to swap interpreters - System::InterruptExecution(); - } - }) - -DEFINE_HOTKEY("TogglePGXPDepth", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Toggle PGXP Depth Buffer"), [](s32 pressed) { - if (!pressed && System::IsValid()) - { - if (!g_settings.gpu_pgxp_enable) - return; - - System::ClearMemorySaveStates(true, true); - - g_settings.gpu_pgxp_depth_buffer = !g_settings.gpu_pgxp_depth_buffer; - VideoThread::UpdateSettings(true, false, false); - - Host::AddIconOSDMessage(OSDMessageType::Quick, "TogglePGXPDepth", ICON_FA_SITEMAP, - g_settings.gpu_pgxp_depth_buffer ? - TRANSLATE_STR("OSDMessage", "PGXP Depth Buffer is now enabled.") : - TRANSLATE_STR("OSDMessage", "PGXP Depth Buffer is now disabled.")); - } - }) - -DEFINE_HOTKEY("ToggleWidescreen", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle Widescreen"), - [](s32 pressed) { - if (!pressed) - System::ToggleWidescreen(); - }) - -DEFINE_HOTKEY("ToggleModulationCrop", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Toggle Texture Modulation Cropping"), [](s32 pressed) { - if (!pressed && System::IsValid()) - { - g_settings.gpu_modulation_crop = !g_settings.gpu_modulation_crop; - VideoThread::UpdateSettings(true, false, false); - Host::AddIconOSDMessage( - OSDMessageType::Quick, "ToggleModulationCrop", ICON_FA_SWATCHBOOK, - g_settings.gpu_modulation_crop ? - TRANSLATE_STR("OSDMessage", "Texture modulation cropping is now enabled.") : - TRANSLATE_STR("OSDMessage", "Texture modulation cropping is now disabled.")); - } - }) - -DEFINE_HOTKEY("TogglePostProcessing", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Toggle Post-Processing"), [](s32 pressed) { - if (!pressed && System::IsValid()) - VideoPresenter::TogglePostProcessing(); - }) - -DEFINE_HOTKEY("ReloadPostProcessingShaders", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Reload Post Processing Shaders"), [](s32 pressed) { - if (!pressed && System::IsValid()) - VideoPresenter::ReloadPostProcessingSettings(true, true, true); - }) - -DEFINE_HOTKEY("ReloadTextureReplacements", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Reload Texture Replacements"), [](s32 pressed) { - if (!pressed && System::IsValid()) - VideoThread::RunOnThread([]() { GPUTextureCache::ReloadTextureReplacements(true, true); }); - }) - -DEFINE_HOTKEY("IncreaseResolutionScale", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Increase Resolution Scale"), [](s32 pressed) { - if (!pressed && System::IsValid()) - HotkeyModifyResolutionScale(1); - }) - -DEFINE_HOTKEY("DecreaseResolutionScale", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Decrease Resolution Scale"), [](s32 pressed) { - if (!pressed && System::IsValid()) - HotkeyModifyResolutionScale(-1); - }) - -DEFINE_HOTKEY("RecordSingleFrameGPUDump", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Record Single Frame GPU Trace"), [](s32 pressed) { - if (!pressed) - System::StartRecordingGPUDump(nullptr, 1); - }) - -DEFINE_HOTKEY("RecordMultiFrameGPUDump", TRANSLATE_NOOP("Hotkeys", "Graphics"), - TRANSLATE_NOOP("Hotkeys", "Record Multi-Frame GPU Trace"), [](s32 pressed) { - if (pressed > 0) - System::StartRecordingGPUDump(nullptr, 0); - else - System::StopRecordingGPUDump(); - }) +#ifndef __ANDROID__ + {"FrameStep", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Frame Step"), + [](s32 pressed) { + if (!pressed) + System::FrameStep(); + }}, + + {"ToggleMediaCapture", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Toggle Media Capture"), + [](s32 pressed) { + if (!pressed) + { + if (System::GetMediaCapture()) + System::StopMediaCapture(); + else + System::StartMediaCapture(); + } + }}, + +#endif // __ANDROID__ + + {"SwapMemoryCards", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Swap Memory Card Slots"), + [](s32 pressed) { + if (!pressed) + System::SwapMemoryCards(); + }}, + + {"ToggleOverclocking", TRANSLATE_NOOP("Hotkeys", "System"), + TRANSLATE_NOOP("Hotkeys", "Toggle Clock Speed Control (Overclocking)"), + [](s32 pressed) { + if (!pressed && System::IsValid() && !Achievements::IsHardcoreModeActive()) + { + g_settings.cpu_overclock_enable = !g_settings.cpu_overclock_enable; + g_settings.UpdateOverclockActive(); + System::UpdateOverclock(); + + if (g_settings.cpu_overclock_enable) + { + const u32 percent = g_settings.GetCPUOverclockPercent(); + const double clock_speed = + ((static_cast(System::MASTER_CLOCK) * static_cast(percent)) / 100.0) / 1000000.0; + Host::AddIconOSDMessage( + OSDMessageType::Quick, "ToggleOverclocking", ICON_FA_GAUGE_SIMPLE_HIGH, + fmt::format(TRANSLATE_FS("OSDMessage", "CPU clock speed control enabled ({:.3f} MHz)."), clock_speed)); + } + else + { + Host::AddIconOSDMessage( + OSDMessageType::Quick, "ToggleOverclocking", ICON_FA_GAUGE_SIMPLE_HIGH, + fmt::format(TRANSLATE_FS("OSDMessage", "CPU clock speed control disabled ({:.3f} MHz)."), + static_cast(System::MASTER_CLOCK) / 1000000.0)); + } + } + }}, + + {"IncreaseEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Increase Emulation Speed"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + g_settings.emulation_speed += 0.1f; + System::UpdateSpeedLimiterState(); + Host::AddIconOSDMessage(OSDMessageType::Quick, "EmulationSpeedChange", ICON_FA_GAUGE, + fmt::format(TRANSLATE_FS("OSDMessage", "Emulation speed set to {}%."), + static_cast(std::lround(g_settings.emulation_speed * 100.0f)))); + } + }}, + + {"DecreaseEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Decrease Emulation Speed"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + g_settings.emulation_speed = + std::max(g_settings.emulation_speed - 0.1f, Achievements::IsHardcoreModeActive() ? 1.0f : 0.1f); + System::UpdateSpeedLimiterState(); + Host::AddIconOSDMessage(OSDMessageType::Quick, "EmulationSpeedChange", ICON_FA_GAUGE, + fmt::format(TRANSLATE_FS("OSDMessage", "Emulation speed set to {}%."), + static_cast(std::lround(g_settings.emulation_speed * 100.0f)))); + } + }}, + + {"ResetEmulationSpeed", TRANSLATE_NOOP("Hotkeys", "System"), TRANSLATE_NOOP("Hotkeys", "Reset Emulation Speed"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + g_settings.emulation_speed = std::max(Core::GetFloatSettingValue("Main", "EmulationSpeed", 1.0f), + Achievements::IsHardcoreModeActive() ? 1.0f : 0.1f); + System::UpdateSpeedLimiterState(); + Host::AddIconOSDMessage(OSDMessageType::Quick, "EmulationSpeedChange", ICON_FA_GAUGE, + fmt::format(TRANSLATE_FS("OSDMessage", "Emulation speed set to {}%."), + static_cast(std::lround(g_settings.emulation_speed * 100.0f)))); + } + }}, + + {"RotateClockwise", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Rotate Display Clockwise"), + [](s32 pressed) { + if (!pressed) + { + g_settings.display_rotation = static_cast((static_cast(g_settings.display_rotation) + 1) % + static_cast(DisplayRotation::Count)); + VideoThread::UpdateSettings(true, false, false); + } + }}, + + {"RotateCounterclockwise", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Rotate Display Counterclockwise"), + [](s32 pressed) { + if (!pressed) + { + g_settings.display_rotation = (g_settings.display_rotation > static_cast(0)) ? + static_cast((static_cast(g_settings.display_rotation) - 1) % + static_cast(DisplayRotation::Count)) : + static_cast(static_cast(DisplayRotation::Count) - 1); + VideoThread::UpdateSettings(true, false, false); + } + }}, + + {"ToggleOSD", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle On-Screen Display"), + [](s32 pressed) { + if (!pressed) + HotkeyToggleOSD(); + }}, + + {"ToggleSoftwareRendering", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Toggle Software Rendering"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + System::ToggleSoftwareRendering(); + }}, + + {"TogglePGXP", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle PGXP"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + System::ClearMemorySaveStates(true, true); + + // This is pretty yikes, if PGXP was off we'll have already disabled all the dependent settings. + g_settings.gpu_pgxp_enable = !g_settings.gpu_pgxp_enable; + { + const auto lock = Core::GetSettingsLock(); + const SettingsInterface& si = *Core::GetSettingsInterface(); + if (g_settings.gpu_pgxp_enable) + g_settings.LoadPGXPSettings(si); + g_settings.FixIncompatibleSettings(si, false); + } + + VideoThread::UpdateSettings(true, false, false); + + Host::AddKeyedOSDMessage(OSDMessageType::Quick, "TogglePGXP", + g_settings.gpu_pgxp_enable ? TRANSLATE_STR("OSDMessage", "PGXP is now enabled.") : + TRANSLATE_STR("OSDMessage", "PGXP is now disabled.")); + + if (g_settings.gpu_pgxp_enable) + CPU::PGXP::Initialize(); + else + CPU::PGXP::Shutdown(); + + // we need to recompile all blocks if pgxp is toggled on/off + CPU::CodeCache::Reset(); + + // need to swap interpreters + System::InterruptExecution(); + } + }}, + + {"TogglePGXPDepth", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle PGXP Depth Buffer"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + if (!g_settings.gpu_pgxp_enable) + return; + + System::ClearMemorySaveStates(true, true); + + g_settings.gpu_pgxp_depth_buffer = !g_settings.gpu_pgxp_depth_buffer; + VideoThread::UpdateSettings(true, false, false); + + Host::AddIconOSDMessage(OSDMessageType::Quick, "TogglePGXPDepth", ICON_FA_SITEMAP, + g_settings.gpu_pgxp_depth_buffer ? + TRANSLATE_STR("OSDMessage", "PGXP Depth Buffer is now enabled.") : + TRANSLATE_STR("OSDMessage", "PGXP Depth Buffer is now disabled.")); + } + }}, + + {"ToggleWidescreen", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle Widescreen"), + [](s32 pressed) { + if (!pressed) + System::ToggleWidescreen(); + }}, + + {"ToggleModulationCrop", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Toggle Texture Modulation Cropping"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + g_settings.gpu_modulation_crop = !g_settings.gpu_modulation_crop; + VideoThread::UpdateSettings(true, false, false); + Host::AddIconOSDMessage(OSDMessageType::Quick, "ToggleModulationCrop", ICON_FA_SWATCHBOOK, + g_settings.gpu_modulation_crop ? + TRANSLATE_STR("OSDMessage", "Texture modulation cropping is now enabled.") : + TRANSLATE_STR("OSDMessage", "Texture modulation cropping is now disabled.")); + } + }}, + + {"TogglePostProcessing", TRANSLATE_NOOP("Hotkeys", "Graphics"), TRANSLATE_NOOP("Hotkeys", "Toggle Post-Processing"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + VideoPresenter::TogglePostProcessing(); + }}, + + {"ReloadPostProcessingShaders", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Reload Post Processing Shaders"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + VideoPresenter::ReloadPostProcessingSettings(true, true, true); + }}, + + {"ReloadTextureReplacements", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Reload Texture Replacements"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + VideoThread::RunOnThread([]() { GPUTextureCache::ReloadTextureReplacements(true, true); }); + }}, + + {"IncreaseResolutionScale", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Increase Resolution Scale"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + HotkeyModifyResolutionScale(1); + }}, + + {"DecreaseResolutionScale", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Decrease Resolution Scale"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + HotkeyModifyResolutionScale(-1); + }}, + + {"RecordSingleFrameGPUDump", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Record Single Frame GPU Trace"), + [](s32 pressed) { + if (!pressed) + System::StartRecordingGPUDump(nullptr, 1); + }}, + + {"RecordMultiFrameGPUDump", TRANSLATE_NOOP("Hotkeys", "Graphics"), + TRANSLATE_NOOP("Hotkeys", "Record Multi-Frame GPU Trace"), + [](s32 pressed) { + if (pressed > 0) + System::StartRecordingGPUDump(nullptr, 0); + else + System::StopRecordingGPUDump(); + }}, // See gte.cpp. #ifndef __ANDROID__ -DEFINE_HOTKEY("FreecamToggle", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Toggle"), - [](s32 pressed) { - if (!pressed && !Achievements::IsHardcoreModeActive()) - GTE::SetFreecamEnabled(!GTE::IsFreecamEnabled()); - }) -DEFINE_HOTKEY("FreecamReset", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Reset"), - [](s32 pressed) { - if (!pressed && !Achievements::IsHardcoreModeActive()) - GTE::ResetFreecam(); - }) -DEFINE_HOTKEY("FreecamMoveLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Move Left"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamMoveAxis(0, std::max(static_cast(pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamMoveRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Move Right"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamMoveAxis(0, std::min(static_cast(-pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamMoveUp", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Up"), - [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamMoveAxis(1, std::max(static_cast(pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamMoveDown", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Move Down"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamMoveAxis(1, std::min(static_cast(-pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamMoveForward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Move Forward"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamMoveAxis(2, std::min(static_cast(-pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamMoveBackward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Move Backward"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamMoveAxis(2, std::max(static_cast(pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamRotateLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Left"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamRotateAxis(1, std::max(static_cast(pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamRotateRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Right"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamRotateAxis(1, std::min(static_cast(-pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamRotateForward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Forward"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamRotateAxis(0, std::min(static_cast(-pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamRotateBackward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Backward"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamRotateAxis(0, std::max(static_cast(pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamRollLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Roll Left"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamRotateAxis(2, std::min(static_cast(-pressed), 0.0f)); - }) -DEFINE_HOTKEY("FreecamRollRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), - TRANSLATE_NOOP("Hotkeys", "Freecam Roll Right"), [](s32 pressed) { - if (Achievements::IsHardcoreModeActive()) - return; - - GTE::SetFreecamRotateAxis(2, std::max(static_cast(pressed), 0.0f)); - }) + {"FreecamToggle", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Toggle"), + [](s32 pressed) { + if (!pressed && !Achievements::IsHardcoreModeActive()) + GTE::SetFreecamEnabled(!GTE::IsFreecamEnabled()); + }}, + + {"FreecamReset", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Reset"), + [](s32 pressed) { + if (!pressed && !Achievements::IsHardcoreModeActive()) + GTE::ResetFreecam(); + }}, + + {"FreecamMoveLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Left"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamMoveAxis(0, std::max(static_cast(pressed), 0.0f)); + }}, + + {"FreecamMoveRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Right"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamMoveAxis(0, std::min(static_cast(-pressed), 0.0f)); + }}, + + {"FreecamMoveUp", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Up"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamMoveAxis(1, std::max(static_cast(pressed), 0.0f)); + }}, + + {"FreecamMoveDown", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Down"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamMoveAxis(1, std::min(static_cast(-pressed), 0.0f)); + }}, + + {"FreecamMoveForward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Forward"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamMoveAxis(2, std::min(static_cast(-pressed), 0.0f)); + }}, + + {"FreecamMoveBackward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Move Backward"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamMoveAxis(2, std::max(static_cast(pressed), 0.0f)); + }}, + + {"FreecamRotateLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Left"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamRotateAxis(1, std::max(static_cast(pressed), 0.0f)); + }}, + + {"FreecamRotateRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Right"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamRotateAxis(1, std::min(static_cast(-pressed), 0.0f)); + }}, + + {"FreecamRotateForward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), + TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Forward"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamRotateAxis(0, std::min(static_cast(-pressed), 0.0f)); + }}, + + {"FreecamRotateBackward", TRANSLATE_NOOP("Hotkeys", "Free Camera"), + TRANSLATE_NOOP("Hotkeys", "Freecam Rotate Backward"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamRotateAxis(0, std::max(static_cast(pressed), 0.0f)); + }}, + + {"FreecamRollLeft", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Roll Left"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamRotateAxis(2, std::min(static_cast(-pressed), 0.0f)); + }}, + + {"FreecamRollRight", TRANSLATE_NOOP("Hotkeys", "Free Camera"), TRANSLATE_NOOP("Hotkeys", "Freecam Roll Right"), + [](s32 pressed) { + if (Achievements::IsHardcoreModeActive()) + return; + + GTE::SetFreecamRotateAxis(2, std::max(static_cast(pressed), 0.0f)); + }}, #endif // __ANDROID__ -DEFINE_HOTKEY("AudioMute", TRANSLATE_NOOP("Hotkeys", "Audio"), TRANSLATE_NOOP("Hotkeys", "Toggle Mute"), - [](s32 pressed) { - if (!pressed && System::IsValid()) - { - g_settings.audio_output_muted = !g_settings.audio_output_muted; - const s32 volume = System::GetAudioOutputVolume(); - SPU::GetOutputStream().SetOutputVolume(volume); - if (g_settings.audio_output_muted) - { - Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", ICON_EMOJI_MUTED_SPEAKER, - TRANSLATE_STR("OSDMessage", "Volume: Muted")); - } - else - { - Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", - ICON_EMOJI_MEDIUM_VOLUME_SPEAKER, - fmt::format(TRANSLATE_FS("OSDMessage", "Volume: {}%"), volume)); - } - } - }) -DEFINE_HOTKEY("AudioCDAudioMute", TRANSLATE_NOOP("Hotkeys", "Audio"), TRANSLATE_NOOP("Hotkeys", "Toggle CD Audio Mute"), - [](s32 pressed) { - if (!pressed && System::IsValid()) - { - g_settings.cdrom_mute_cd_audio = !g_settings.cdrom_mute_cd_audio; - Host::AddIconOSDMessage( - OSDMessageType::Quick, "AudioControlHotkey", - g_settings.cdrom_mute_cd_audio ? ICON_EMOJI_MUTED_SPEAKER : ICON_EMOJI_MEDIUM_VOLUME_SPEAKER, - g_settings.cdrom_mute_cd_audio ? TRANSLATE_STR("OSDMessage", "CD Audio Muted.") : - TRANSLATE_STR("OSDMessage", "CD Audio Unmuted.")); - } - }) -DEFINE_HOTKEY("AudioVolumeUp", TRANSLATE_NOOP("Hotkeys", "Audio"), TRANSLATE_NOOP("Hotkeys", "Volume Up"), - [](s32 pressed) { - if (!pressed && System::IsValid()) - { - g_settings.audio_output_muted = false; - - const u8 volume = - Truncate8(std::min(static_cast(System::GetAudioOutputVolume()) + 10, 200)); - g_settings.audio_output_volume = volume; - g_settings.audio_fast_forward_volume = volume; - SPU::GetOutputStream().SetOutputVolume(volume); - Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", ICON_EMOJI_HIGH_VOLUME_SPEAKER, - fmt::format(TRANSLATE_FS("OSDMessage", "Volume: {}%"), volume)); - } - }) -DEFINE_HOTKEY("AudioVolumeDown", TRANSLATE_NOOP("Hotkeys", "Audio"), TRANSLATE_NOOP("Hotkeys", "Volume Down"), - [](s32 pressed) { - if (!pressed && System::IsValid()) - { - g_settings.audio_output_muted = false; - - const u8 volume = Truncate8(std::max(static_cast(System::GetAudioOutputVolume()) - 10, 0)); - g_settings.audio_output_volume = volume; - g_settings.audio_fast_forward_volume = volume; - SPU::GetOutputStream().SetOutputVolume(volume); - Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", ICON_EMOJI_MEDIUM_VOLUME_SPEAKER, - fmt::format(TRANSLATE_FS("OSDMessage", "Volume: {}%"), volume)); - } - }) - -// NOTE: All save/load state hotkeys are deferred, because it can trigger setting reapply, which reloads bindings. -DEFINE_HOTKEY("LoadSelectedSaveState", TRANSLATE_NOOP("Hotkeys", "Save States"), - TRANSLATE_NOOP("Hotkeys", "Load From Selected Slot"), [](s32 pressed) { - if (!pressed) - VideoThread::RunOnThread(SaveStateSelectorUI::LoadCurrentSlot); - }) -DEFINE_HOTKEY("SaveSelectedSaveState", TRANSLATE_NOOP("Hotkeys", "Save States"), - TRANSLATE_NOOP("Hotkeys", "Save To Selected Slot"), [](s32 pressed) { - if (!pressed) - VideoThread::RunOnThread(SaveStateSelectorUI::SaveCurrentSlot); - }) -DEFINE_HOTKEY("SelectPreviousSaveStateSlot", TRANSLATE_NOOP("Hotkeys", "Save States"), - TRANSLATE_NOOP("Hotkeys", "Select Previous Save Slot"), [](s32 pressed) { - if (!pressed) - VideoThread::RunOnThread([]() { SaveStateSelectorUI::SelectPreviousSlot(true); }); - }) -DEFINE_HOTKEY("SelectNextSaveStateSlot", TRANSLATE_NOOP("Hotkeys", "Save States"), - TRANSLATE_NOOP("Hotkeys", "Select Next Save Slot"), [](s32 pressed) { - if (!pressed) - VideoThread::RunOnThread([]() { SaveStateSelectorUI::SelectNextSlot(true); }); - }) -DEFINE_HOTKEY("SaveStateAndSelectNextSlot", TRANSLATE_NOOP("Hotkeys", "Save States"), - TRANSLATE_NOOP("Hotkeys", "Save State and Select Next Slot"), [](s32 pressed) { - if (!pressed && System::IsValid()) - { - VideoThread::RunOnThread([]() { - SaveStateSelectorUI::SaveCurrentSlot(); - SaveStateSelectorUI::SelectNextSlot(false); - }); - } - }) - -DEFINE_HOTKEY("UndoLoadState", TRANSLATE_NOOP("Hotkeys", "Save States"), TRANSLATE_NOOP("Hotkeys", "Undo Load State"), - [](s32 pressed) { - if (!pressed) - Host::RunOnCoreThread(System::UndoLoadState); - }) + {"AudioMute", TRANSLATE_NOOP("Hotkeys", "Audio"), TRANSLATE_NOOP("Hotkeys", "Toggle Mute"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + g_settings.audio_output_muted = !g_settings.audio_output_muted; + const s32 volume = System::GetAudioOutputVolume(); + SPU::GetOutputStream().SetOutputVolume(volume); + if (g_settings.audio_output_muted) + { + Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", ICON_EMOJI_MUTED_SPEAKER, + TRANSLATE_STR("OSDMessage", "Volume: Muted")); + } + else + { + Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", ICON_EMOJI_MEDIUM_VOLUME_SPEAKER, + fmt::format(TRANSLATE_FS("OSDMessage", "Volume: {}%"), volume)); + } + } + }}, + + {"AudioCDAudioMute", TRANSLATE_NOOP("Hotkeys", "Audio"), TRANSLATE_NOOP("Hotkeys", "Toggle CD Audio Mute"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + g_settings.cdrom_mute_cd_audio = !g_settings.cdrom_mute_cd_audio; + Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", + g_settings.cdrom_mute_cd_audio ? ICON_EMOJI_MUTED_SPEAKER : + ICON_EMOJI_MEDIUM_VOLUME_SPEAKER, + g_settings.cdrom_mute_cd_audio ? TRANSLATE_STR("OSDMessage", "CD Audio Muted.") : + TRANSLATE_STR("OSDMessage", "CD Audio Unmuted.")); + } + }}, + + {"AudioVolumeUp", TRANSLATE_NOOP("Hotkeys", "Audio"), TRANSLATE_NOOP("Hotkeys", "Volume Up"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + g_settings.audio_output_muted = false; + + const u8 volume = Truncate8(std::min(static_cast(System::GetAudioOutputVolume()) + 10, 200)); + g_settings.audio_output_volume = volume; + g_settings.audio_fast_forward_volume = volume; + SPU::GetOutputStream().SetOutputVolume(volume); + Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", ICON_EMOJI_HIGH_VOLUME_SPEAKER, + fmt::format(TRANSLATE_FS("OSDMessage", "Volume: {}%"), volume)); + } + }}, + + {"AudioVolumeDown", TRANSLATE_NOOP("Hotkeys", "Audio"), TRANSLATE_NOOP("Hotkeys", "Volume Down"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + g_settings.audio_output_muted = false; + + const u8 volume = Truncate8(std::max(static_cast(System::GetAudioOutputVolume()) - 10, 0)); + g_settings.audio_output_volume = volume; + g_settings.audio_fast_forward_volume = volume; + SPU::GetOutputStream().SetOutputVolume(volume); + Host::AddIconOSDMessage(OSDMessageType::Quick, "AudioControlHotkey", ICON_EMOJI_MEDIUM_VOLUME_SPEAKER, + fmt::format(TRANSLATE_FS("OSDMessage", "Volume: {}%"), volume)); + } + }}, + + // NOTE: All save/load state hotkeys are deferred, because it can trigger setting reapply, which reloads bindings. + {"LoadSelectedSaveState", TRANSLATE_NOOP("Hotkeys", "Save States"), + TRANSLATE_NOOP("Hotkeys", "Load From Selected Slot"), + [](s32 pressed) { + if (!pressed) + VideoThread::RunOnThread(SaveStateSelectorUI::LoadCurrentSlot); + }}, + + {"SaveSelectedSaveState", TRANSLATE_NOOP("Hotkeys", "Save States"), + TRANSLATE_NOOP("Hotkeys", "Save To Selected Slot"), + [](s32 pressed) { + if (!pressed) + VideoThread::RunOnThread(SaveStateSelectorUI::SaveCurrentSlot); + }}, + + {"SelectPreviousSaveStateSlot", TRANSLATE_NOOP("Hotkeys", "Save States"), + TRANSLATE_NOOP("Hotkeys", "Select Previous Save Slot"), + [](s32 pressed) { + if (!pressed) + VideoThread::RunOnThread([]() { SaveStateSelectorUI::SelectPreviousSlot(true); }); + }}, + + {"SelectNextSaveStateSlot", TRANSLATE_NOOP("Hotkeys", "Save States"), + TRANSLATE_NOOP("Hotkeys", "Select Next Save Slot"), + [](s32 pressed) { + if (!pressed) + VideoThread::RunOnThread([]() { SaveStateSelectorUI::SelectNextSlot(true); }); + }}, + + {"SaveStateAndSelectNextSlot", TRANSLATE_NOOP("Hotkeys", "Save States"), + TRANSLATE_NOOP("Hotkeys", "Save State and Select Next Slot"), + [](s32 pressed) { + if (!pressed && System::IsValid()) + { + VideoThread::RunOnThread([]() { + SaveStateSelectorUI::SaveCurrentSlot(); + SaveStateSelectorUI::SelectNextSlot(false); + }); + } + }}, + + {"UndoLoadState", TRANSLATE_NOOP("Hotkeys", "Save States"), TRANSLATE_NOOP("Hotkeys", "Undo Load State"), + [](s32 pressed) { + if (!pressed) + Host::RunOnCoreThread(System::UndoLoadState); + }}, + + {"TogglePGXPCPU", TRANSLATE_NOOP("Hotkeys", "Debugging"), TRANSLATE_NOOP("Hotkeys", "Toggle PGXP CPU Mode"), + [](s32 pressed) { + if (pressed && System::IsValid()) + { + if (!g_settings.gpu_pgxp_enable) + return; + + System::ClearMemorySaveStates(true, true); + + // GPU thread is unchanged + g_settings.gpu_pgxp_cpu = !g_settings.gpu_pgxp_cpu; + + Host::AddIconOSDMessage(OSDMessageType::Quick, "TogglePGXPCPU", ICON_FA_BEZIER_CURVE, + g_settings.gpu_pgxp_cpu ? TRANSLATE_STR("OSDMessage", "PGXP CPU mode is now enabled.") : + TRANSLATE_STR("OSDMessage", "PGXP CPU mode is now disabled.")); + + CPU::PGXP::Shutdown(); + CPU::PGXP::Initialize(); + + // we need to recompile all blocks if pgxp is + // toggled on/off + CPU::CodeCache::Reset(); + + // need to swap interpreters + System::InterruptExecution(); + } + }}, + + {"TogglePGXPPreserveProjPrecision", TRANSLATE_NOOP("Hotkeys", "Debugging"), + TRANSLATE_NOOP("Hotkeys", "Toggle PGXP Preserve Projection Precision"), + [](s32 pressed) { + if (pressed && System::IsValid()) + { + if (!g_settings.gpu_pgxp_enable) + return; + + // GPU thread is unchanged + g_settings.gpu_pgxp_preserve_proj_fp = !g_settings.gpu_pgxp_preserve_proj_fp; + + Host::AddIconOSDMessage(OSDMessageType::Quick, "TogglePGXPPreserveProjPrecision", ICON_FA_DRAW_POLYGON, + g_settings.gpu_pgxp_preserve_proj_fp ? + TRANSLATE_STR("OSDMessage", "PGXP Preserve Projection Precision is now enabled.") : + TRANSLATE_STR("OSDMessage", "PGXP Preserve Projection Precision is now disabled.")); + } + }}, + + {"ToggleVRAMView", TRANSLATE_NOOP("Hotkeys", "Debugging"), TRANSLATE_NOOP("Hotkeys", "Toggle VRAM View"), + [](s32 pressed) { + if (pressed && System::IsValid()) + { + if (!g_settings.gpu_pgxp_enable || Achievements::IsHardcoreModeActive()) + return; + + g_settings.gpu_show_vram = !g_settings.gpu_show_vram; + VideoThread::UpdateSettings(true, false, false); + + Host::AddIconOSDMessage(OSDMessageType::Quick, "ToggleVRAMView", ICON_FA_FILE, + g_settings.gpu_show_vram ? TRANSLATE_STR("OSDMessage", "Now showing VRAM.") : + TRANSLATE_STR("OSDMessage", "Now showing display.")); + } + }}, #define MAKE_LOAD_STATE_HOTKEY(global, slot, name) \ - DEFINE_HOTKEY(global ? "LoadGameState" #slot : "LoadGlobalState" #slot, TRANSLATE_NOOP("Hotkeys", "Save States"), \ - name, [](s32 pressed) { \ - if (!pressed) \ - Host::RunOnCoreThread([]() { System::LoadStateFromSlot(global, slot); }); \ - }) + {global ? "LoadGameState" #slot : "LoadGlobalState" #slot, TRANSLATE_NOOP("Hotkeys", "Save States"), name, \ + [](s32 pressed) { \ + if (!pressed) \ + Host::RunOnCoreThread([]() { System::LoadStateFromSlot(global, slot); }); \ + }} #define MAKE_SAVE_STATE_HOTKEY(global, slot, name) \ - DEFINE_HOTKEY(global ? "SaveGameState" #slot : "SaveGlobalState" #slot, TRANSLATE_NOOP("Hotkeys", "Save States"), \ - name, [](s32 pressed) { \ - if (!pressed) \ - Host::RunOnCoreThread([]() { System::SaveStateToSlot(global, slot); }); \ - }) - -// clang-format off -MAKE_LOAD_STATE_HOTKEY(false, 1, TRANSLATE_NOOP("Hotkeys", "Load Game State 1")) -MAKE_SAVE_STATE_HOTKEY(false, 1, TRANSLATE_NOOP("Hotkeys", "Save Game State 1")) -MAKE_LOAD_STATE_HOTKEY(false, 2, TRANSLATE_NOOP("Hotkeys", "Load Game State 2")) -MAKE_SAVE_STATE_HOTKEY(false, 2, TRANSLATE_NOOP("Hotkeys", "Save Game State 2")) -MAKE_LOAD_STATE_HOTKEY(false, 3, TRANSLATE_NOOP("Hotkeys", "Load Game State 3")) -MAKE_SAVE_STATE_HOTKEY(false, 3, TRANSLATE_NOOP("Hotkeys", "Save Game State 3")) -MAKE_LOAD_STATE_HOTKEY(false, 4, TRANSLATE_NOOP("Hotkeys", "Load Game State 4")) -MAKE_SAVE_STATE_HOTKEY(false, 4, TRANSLATE_NOOP("Hotkeys", "Save Game State 4")) -MAKE_LOAD_STATE_HOTKEY(false, 5, TRANSLATE_NOOP("Hotkeys", "Load Game State 5")) -MAKE_SAVE_STATE_HOTKEY(false, 5, TRANSLATE_NOOP("Hotkeys", "Save Game State 5")) -MAKE_LOAD_STATE_HOTKEY(false, 6, TRANSLATE_NOOP("Hotkeys", "Load Game State 6")) -MAKE_SAVE_STATE_HOTKEY(false, 6, TRANSLATE_NOOP("Hotkeys", "Save Game State 6")) -MAKE_LOAD_STATE_HOTKEY(false, 7, TRANSLATE_NOOP("Hotkeys", "Load Game State 7")) -MAKE_SAVE_STATE_HOTKEY(false, 7, TRANSLATE_NOOP("Hotkeys", "Save Game State 7")) -MAKE_LOAD_STATE_HOTKEY(false, 8, TRANSLATE_NOOP("Hotkeys", "Load Game State 8")) -MAKE_SAVE_STATE_HOTKEY(false, 8, TRANSLATE_NOOP("Hotkeys", "Save Game State 8")) -MAKE_LOAD_STATE_HOTKEY(false, 9, TRANSLATE_NOOP("Hotkeys", "Load Game State 9")) -MAKE_SAVE_STATE_HOTKEY(false, 9, TRANSLATE_NOOP("Hotkeys", "Save Game State 9")) -MAKE_LOAD_STATE_HOTKEY(false, 10, TRANSLATE_NOOP("Hotkeys", "Load Game State 10")) -MAKE_SAVE_STATE_HOTKEY(false, 10, TRANSLATE_NOOP("Hotkeys", "Save Game State 10")) - -MAKE_LOAD_STATE_HOTKEY(true, 1, TRANSLATE_NOOP("Hotkeys", "Load Global State 1")) -MAKE_SAVE_STATE_HOTKEY(true, 1, TRANSLATE_NOOP("Hotkeys", "Save Global State 1")) -MAKE_LOAD_STATE_HOTKEY(true, 2, TRANSLATE_NOOP("Hotkeys", "Load Global State 2")) -MAKE_SAVE_STATE_HOTKEY(true, 2, TRANSLATE_NOOP("Hotkeys", "Save Global State 2")) -MAKE_LOAD_STATE_HOTKEY(true, 3, TRANSLATE_NOOP("Hotkeys", "Load Global State 3")) -MAKE_SAVE_STATE_HOTKEY(true, 3, TRANSLATE_NOOP("Hotkeys", "Save Global State 3")) -MAKE_LOAD_STATE_HOTKEY(true, 4, TRANSLATE_NOOP("Hotkeys", "Load Global State 4")) -MAKE_SAVE_STATE_HOTKEY(true, 4, TRANSLATE_NOOP("Hotkeys", "Save Global State 4")) -MAKE_LOAD_STATE_HOTKEY(true, 5, TRANSLATE_NOOP("Hotkeys", "Load Global State 5")) -MAKE_SAVE_STATE_HOTKEY(true, 5, TRANSLATE_NOOP("Hotkeys", "Save Global State 5")) -MAKE_LOAD_STATE_HOTKEY(true, 6, TRANSLATE_NOOP("Hotkeys", "Load Global State 6")) -MAKE_SAVE_STATE_HOTKEY(true, 6, TRANSLATE_NOOP("Hotkeys", "Save Global State 6")) -MAKE_LOAD_STATE_HOTKEY(true, 7, TRANSLATE_NOOP("Hotkeys", "Load Global State 7")) -MAKE_SAVE_STATE_HOTKEY(true, 7, TRANSLATE_NOOP("Hotkeys", "Save Global State 7")) -MAKE_LOAD_STATE_HOTKEY(true, 8, TRANSLATE_NOOP("Hotkeys", "Load Global State 8")) -MAKE_SAVE_STATE_HOTKEY(true, 8, TRANSLATE_NOOP("Hotkeys", "Save Global State 8")) -MAKE_LOAD_STATE_HOTKEY(true, 9, TRANSLATE_NOOP("Hotkeys", "Load Global State 9")) -MAKE_SAVE_STATE_HOTKEY(true, 9, TRANSLATE_NOOP("Hotkeys", "Save Global State 9")) -MAKE_LOAD_STATE_HOTKEY(true, 10, TRANSLATE_NOOP("Hotkeys", "Load Global State 10")) -MAKE_SAVE_STATE_HOTKEY(true, 10, TRANSLATE_NOOP("Hotkeys", "Save Global State 10")) -// clang-format on + {global ? "SaveGameState" #slot : "SaveGlobalState" #slot, TRANSLATE_NOOP("Hotkeys", "Save States"), name, \ + [](s32 pressed) { \ + if (!pressed) \ + Host::RunOnCoreThread([]() { System::SaveStateToSlot(global, slot); }); \ + }} + + MAKE_LOAD_STATE_HOTKEY(false, 1, TRANSLATE_NOOP("Hotkeys", "Load Game State 1")), + MAKE_SAVE_STATE_HOTKEY(false, 1, TRANSLATE_NOOP("Hotkeys", "Save Game State 1")), + MAKE_LOAD_STATE_HOTKEY(false, 2, TRANSLATE_NOOP("Hotkeys", "Load Game State 2")), + MAKE_SAVE_STATE_HOTKEY(false, 2, TRANSLATE_NOOP("Hotkeys", "Save Game State 2")), + MAKE_LOAD_STATE_HOTKEY(false, 3, TRANSLATE_NOOP("Hotkeys", "Load Game State 3")), + MAKE_SAVE_STATE_HOTKEY(false, 3, TRANSLATE_NOOP("Hotkeys", "Save Game State 3")), + MAKE_LOAD_STATE_HOTKEY(false, 4, TRANSLATE_NOOP("Hotkeys", "Load Game State 4")), + MAKE_SAVE_STATE_HOTKEY(false, 4, TRANSLATE_NOOP("Hotkeys", "Save Game State 4")), + MAKE_LOAD_STATE_HOTKEY(false, 5, TRANSLATE_NOOP("Hotkeys", "Load Game State 5")), + MAKE_SAVE_STATE_HOTKEY(false, 5, TRANSLATE_NOOP("Hotkeys", "Save Game State 5")), + MAKE_LOAD_STATE_HOTKEY(false, 6, TRANSLATE_NOOP("Hotkeys", "Load Game State 6")), + MAKE_SAVE_STATE_HOTKEY(false, 6, TRANSLATE_NOOP("Hotkeys", "Save Game State 6")), + MAKE_LOAD_STATE_HOTKEY(false, 7, TRANSLATE_NOOP("Hotkeys", "Load Game State 7")), + MAKE_SAVE_STATE_HOTKEY(false, 7, TRANSLATE_NOOP("Hotkeys", "Save Game State 7")), + MAKE_LOAD_STATE_HOTKEY(false, 8, TRANSLATE_NOOP("Hotkeys", "Load Game State 8")), + MAKE_SAVE_STATE_HOTKEY(false, 8, TRANSLATE_NOOP("Hotkeys", "Save Game State 8")), + MAKE_LOAD_STATE_HOTKEY(false, 9, TRANSLATE_NOOP("Hotkeys", "Load Game State 9")), + MAKE_SAVE_STATE_HOTKEY(false, 9, TRANSLATE_NOOP("Hotkeys", "Save Game State 9")), + MAKE_LOAD_STATE_HOTKEY(false, 10, TRANSLATE_NOOP("Hotkeys", "Load Game State 10")), + MAKE_SAVE_STATE_HOTKEY(false, 10, TRANSLATE_NOOP("Hotkeys", "Save Game State 10")), + + MAKE_LOAD_STATE_HOTKEY(true, 1, TRANSLATE_NOOP("Hotkeys", "Load Global State 1")), + MAKE_SAVE_STATE_HOTKEY(true, 1, TRANSLATE_NOOP("Hotkeys", "Save Global State 1")), + MAKE_LOAD_STATE_HOTKEY(true, 2, TRANSLATE_NOOP("Hotkeys", "Load Global State 2")), + MAKE_SAVE_STATE_HOTKEY(true, 2, TRANSLATE_NOOP("Hotkeys", "Save Global State 2")), + MAKE_LOAD_STATE_HOTKEY(true, 3, TRANSLATE_NOOP("Hotkeys", "Load Global State 3")), + MAKE_SAVE_STATE_HOTKEY(true, 3, TRANSLATE_NOOP("Hotkeys", "Save Global State 3")), + MAKE_LOAD_STATE_HOTKEY(true, 4, TRANSLATE_NOOP("Hotkeys", "Load Global State 4")), + MAKE_SAVE_STATE_HOTKEY(true, 4, TRANSLATE_NOOP("Hotkeys", "Save Global State 4")), + MAKE_LOAD_STATE_HOTKEY(true, 5, TRANSLATE_NOOP("Hotkeys", "Load Global State 5")), + MAKE_SAVE_STATE_HOTKEY(true, 5, TRANSLATE_NOOP("Hotkeys", "Save Global State 5")), + MAKE_LOAD_STATE_HOTKEY(true, 6, TRANSLATE_NOOP("Hotkeys", "Load Global State 6")), + MAKE_SAVE_STATE_HOTKEY(true, 6, TRANSLATE_NOOP("Hotkeys", "Save Global State 6")), + MAKE_LOAD_STATE_HOTKEY(true, 7, TRANSLATE_NOOP("Hotkeys", "Load Global State 7")), + MAKE_SAVE_STATE_HOTKEY(true, 7, TRANSLATE_NOOP("Hotkeys", "Save Global State 7")), + MAKE_LOAD_STATE_HOTKEY(true, 8, TRANSLATE_NOOP("Hotkeys", "Load Global State 8")), + MAKE_SAVE_STATE_HOTKEY(true, 8, TRANSLATE_NOOP("Hotkeys", "Save Global State 8")), + MAKE_LOAD_STATE_HOTKEY(true, 9, TRANSLATE_NOOP("Hotkeys", "Load Global State 9")), + MAKE_SAVE_STATE_HOTKEY(true, 9, TRANSLATE_NOOP("Hotkeys", "Save Global State 9")), + MAKE_LOAD_STATE_HOTKEY(true, 10, TRANSLATE_NOOP("Hotkeys", "Load Global State 10")), + MAKE_SAVE_STATE_HOTKEY(true, 10, TRANSLATE_NOOP("Hotkeys", "Save Global State 10")), #undef MAKE_SAVE_STATE_HOTKEY #undef MAKE_LOAD_STATE_HOTKEY - -DEFINE_HOTKEY("TogglePGXPCPU", TRANSLATE_NOOP("Hotkeys", "Debugging"), - TRANSLATE_NOOP("Hotkeys", "Toggle PGXP CPU Mode"), [](s32 pressed) { - if (pressed && System::IsValid()) - { - if (!g_settings.gpu_pgxp_enable) - return; - - System::ClearMemorySaveStates(true, true); - - // GPU thread is unchanged - g_settings.gpu_pgxp_cpu = !g_settings.gpu_pgxp_cpu; - - Host::AddIconOSDMessage(OSDMessageType::Quick, "TogglePGXPCPU", ICON_FA_BEZIER_CURVE, - g_settings.gpu_pgxp_cpu ? - TRANSLATE_STR("OSDMessage", "PGXP CPU mode is now enabled.") : - TRANSLATE_STR("OSDMessage", "PGXP CPU mode is now disabled.")); - - CPU::PGXP::Shutdown(); - CPU::PGXP::Initialize(); - - // we need to recompile all blocks if pgxp is toggled on/off - CPU::CodeCache::Reset(); - - // need to swap interpreters - System::InterruptExecution(); - } - }) -DEFINE_HOTKEY("TogglePGXPPreserveProjPrecision", TRANSLATE_NOOP("Hotkeys", "Debugging"), - TRANSLATE_NOOP("Hotkeys", "Toggle PGXP Preserve Projection Precision"), [](s32 pressed) { - if (pressed && System::IsValid()) - { - if (!g_settings.gpu_pgxp_enable) - return; - - // GPU thread is unchanged - g_settings.gpu_pgxp_preserve_proj_fp = !g_settings.gpu_pgxp_preserve_proj_fp; - - Host::AddIconOSDMessage( - OSDMessageType::Quick, "TogglePGXPPreserveProjPrecision", ICON_FA_DRAW_POLYGON, - g_settings.gpu_pgxp_preserve_proj_fp ? - TRANSLATE_STR("OSDMessage", "PGXP Preserve Projection Precision is now enabled.") : - TRANSLATE_STR("OSDMessage", "PGXP Preserve Projection Precision is now disabled.")); - } - }) -DEFINE_HOTKEY("ToggleVRAMView", TRANSLATE_NOOP("Hotkeys", "Debugging"), TRANSLATE_NOOP("Hotkeys", "Toggle VRAM View"), - [](s32 pressed) { - if (pressed && System::IsValid()) - { - if (!g_settings.gpu_pgxp_enable || Achievements::IsHardcoreModeActive()) - return; - - g_settings.gpu_show_vram = !g_settings.gpu_show_vram; - VideoThread::UpdateSettings(true, false, false); - - Host::AddIconOSDMessage(OSDMessageType::Quick, "ToggleVRAMView", ICON_FA_FILE, - g_settings.gpu_show_vram ? - TRANSLATE_STR("OSDMessage", "Now showing VRAM.") : - TRANSLATE_STR("OSDMessage", "Now showing display.")); - } - }) }; std::span Core::GetHotkeyList() { return s_hotkey_list; } - diff --git a/src/core/system.cpp b/src/core/system.cpp index 2ee78b35b..79ee23354 100644 --- a/src/core/system.cpp +++ b/src/core/system.cpp @@ -3732,7 +3732,7 @@ void System::SetRewindState(bool enabled) UpdateSpeedLimiterState(); } -void System::DoFrameStep() +void System::FrameStep() { if (!IsValid()) return; @@ -3741,7 +3741,7 @@ void System::DoFrameStep() { Achievements::ConfirmHardcoreModeDisableAsync("Frame stepping", [](bool approved) { if (approved) - DoFrameStep(); + FrameStep(); }); return; } diff --git a/src/core/system.h b/src/core/system.h index 997e664fc..97cd89b0c 100644 --- a/src/core/system.h +++ b/src/core/system.h @@ -369,7 +369,7 @@ void SetTurboEnabled(bool enabled); bool IsRewinding(); void SetRewindState(bool enabled); -void DoFrameStep(); +void FrameStep(); /// Returns the path to a save state file. Specifying an index of -1 is the "resume" save state. std::string GetGameSaveStatePath(std::string_view serial, s32 slot);