CommonHostInterface: Implement frame step hotkey

This commit is contained in:
Connor McLaughlin 2020-07-08 01:57:34 +10:00
parent fe867edefb
commit 97a946bd62
5 changed files with 24 additions and 24 deletions

View File

@ -914,6 +914,11 @@ void QtHostInterface::threadEntryPoint()
m_system->RunFrame();
UpdateControllerRumble();
if (m_frame_step_request)
{
m_frame_step_request = false;
PauseSystem(true);
}
renderDisplay();

View File

@ -402,8 +402,6 @@ bool SDLHostInterface::Initialize()
ImGui::NewFrame();
RegisterHotkeys();
// process events to pick up controllers before updating input map
ProcessEvents();
UpdateInputMap();
@ -1435,16 +1433,6 @@ void SDLHostInterface::ClearImGuiFocus()
ImGui::SetWindowFocus(nullptr);
}
void SDLHostInterface::RegisterHotkeys()
{
RegisterHotkey(StaticString("General"), StaticString("FrameStep"), StaticString("Frame Step"), [this](bool pressed) {
if (!pressed)
{
DoFrameStep();
}
});
}
void SDLHostInterface::DoStartDisc()
{
Assert(!m_system);
@ -1476,15 +1464,6 @@ void SDLHostInterface::DoChangeDisc()
m_system->ResetPerformanceCounters();
}
void SDLHostInterface::DoFrameStep()
{
if (!m_system)
return;
m_frame_step_request = true;
m_paused = false;
}
void SDLHostInterface::Run()
{
while (!m_quit_request)

View File

@ -66,7 +66,6 @@ private:
void DestroyDisplay();
void CreateImGuiContext();
void UpdateFramebufferScale();
void RegisterHotkeys();
/// Executes a callback later, after the UI has finished rendering. Needed to boot while rendering ImGui.
void RunLater(std::function<void()> callback);
@ -80,7 +79,6 @@ private:
void DrawImGuiWindows() override;
void DoStartDisc();
void DoChangeDisc();
void DoFrameStep();
void HandleSDLEvent(const SDL_Event* event);
void ProcessEvents();
@ -101,7 +99,6 @@ private:
bool m_fullscreen = false;
bool m_quit_request = false;
bool m_frame_step_request = false;
bool m_settings_window_open = false;
bool m_about_window_open = false;

View File

@ -856,6 +856,16 @@ void CommonHostInterface::DrawDebugWindows()
m_system->GetMDEC()->DrawDebugStateWindow();
}
void CommonHostInterface::DoFrameStep()
{
if (!m_system)
return;
m_frame_step_request = true;
if (m_paused)
PauseSystem(false);
}
std::optional<CommonHostInterface::HostKeyCode>
CommonHostInterface::GetHostKeyCode(const std::string_view key_code) const
{
@ -1263,6 +1273,13 @@ void CommonHostInterface::RegisterGeneralHotkeys()
if (!pressed && m_system)
SaveScreenshot();
});
RegisterHotkey(StaticString("General"), StaticString("FrameStep"), StaticString("Frame Step"), [this](bool pressed) {
if (!pressed)
{
DoFrameStep();
}
});
}
void CommonHostInterface::RegisterGraphicsHotkeys()

View File

@ -271,6 +271,7 @@ protected:
void DrawFPSWindow();
void DrawOSDMessages();
void DrawDebugWindows();
void DoFrameStep();
std::unique_ptr<GameList> m_game_list;
@ -280,6 +281,7 @@ protected:
std::mutex m_osd_messages_lock;
bool m_paused = false;
bool m_frame_step_request = false;
bool m_speed_limiter_temp_disabled = false;
bool m_speed_limiter_enabled = false;
bool m_timer_resolution_increased = false;