Remove hardcoded esc hotkey, make pause/stop hotkey actually toggle rather than just pausing, fix frame advance hotkey

This commit is contained in:
Rukai 2018-02-09 22:54:35 +11:00
parent fa91d74e2c
commit 4b5373b25b
5 changed files with 27 additions and 15 deletions

View File

@ -629,7 +629,7 @@ State GetState()
if (s_hardware_initialized) if (s_hardware_initialized)
{ {
if (CPU::IsStepping()) if (CPU::IsStepping() || s_frame_step)
return State::Paused; return State::Paused;
return State::Running; return State::Running;

View File

@ -89,14 +89,16 @@ static void HandleFrameskipHotkeys()
if (frame_step_delay_count < frame_step_delay && frame_step_hold) if (frame_step_delay_count < frame_step_delay && frame_step_hold)
frame_step_delay_count++; frame_step_delay_count++;
// TODO GUI Update (Depends on an unimplemented feature) if ((frame_step_count == 0 || frame_step_count == FRAME_STEP_DELAY) && !frame_step_hold)
// if ((frame_step_count == 0 || frame_step_count == FRAME_STEP_DELAY) && !frame_step_hold) {
Core::DoFrameStep();
frame_step_hold = true;
}
if (frame_step_count < FRAME_STEP_DELAY) if (frame_step_count < FRAME_STEP_DELAY)
{ {
++frame_step_count; frame_step_count++;
if (frame_step_hold) frame_step_hold = false;
frame_step_hold = false;
} }
if (frame_step_count == FRAME_STEP_DELAY && frame_step_hold && if (frame_step_count == FRAME_STEP_DELAY && frame_step_hold &&
@ -108,8 +110,7 @@ static void HandleFrameskipHotkeys()
return; return;
} }
else if (frame_step_count > 0)
if (frame_step_count > 0)
{ {
// Reset frame advance // Reset frame advance
frame_step_count = 0; frame_step_count = 0;
@ -143,7 +144,7 @@ void HotkeyScheduler::Run()
// Pause and Unpause // Pause and Unpause
if (IsHotkey(HK_PLAY_PAUSE)) if (IsHotkey(HK_PLAY_PAUSE))
emit PauseHotkey(); emit TogglePauseHotkey();
// Stop // Stop
if (IsHotkey(HK_STOP)) if (IsHotkey(HK_STOP))

View File

@ -23,7 +23,7 @@ signals:
void ExitHotkey(); void ExitHotkey();
void FullScreenHotkey(); void FullScreenHotkey();
void StopHotkey(); void StopHotkey();
void PauseHotkey(); void TogglePauseHotkey();
void ScreenShotHotkey(); void ScreenShotHotkey();
void SetStateSlotHotkey(int slot); void SetStateSlotHotkey(int slot);
void StateLoadSlotHotkey(); void StateLoadSlotHotkey();

View File

@ -271,7 +271,7 @@ void MainWindow::ConnectMenuBar()
void MainWindow::ConnectHotkeys() void MainWindow::ConnectHotkeys()
{ {
connect(m_hotkey_scheduler, &HotkeyScheduler::ExitHotkey, this, &MainWindow::close); connect(m_hotkey_scheduler, &HotkeyScheduler::ExitHotkey, this, &MainWindow::close);
connect(m_hotkey_scheduler, &HotkeyScheduler::PauseHotkey, this, &MainWindow::Pause); connect(m_hotkey_scheduler, &HotkeyScheduler::TogglePauseHotkey, this, &MainWindow::TogglePause);
connect(m_hotkey_scheduler, &HotkeyScheduler::StopHotkey, this, &MainWindow::RequestStop); connect(m_hotkey_scheduler, &HotkeyScheduler::StopHotkey, this, &MainWindow::RequestStop);
connect(m_hotkey_scheduler, &HotkeyScheduler::ScreenShotHotkey, this, &MainWindow::ScreenShot); connect(m_hotkey_scheduler, &HotkeyScheduler::ScreenShotHotkey, this, &MainWindow::ScreenShot);
connect(m_hotkey_scheduler, &HotkeyScheduler::FullScreenHotkey, this, &MainWindow::FullScreen); connect(m_hotkey_scheduler, &HotkeyScheduler::FullScreenHotkey, this, &MainWindow::FullScreen);
@ -322,7 +322,6 @@ void MainWindow::ConnectRenderWidget()
{ {
m_rendering_to_main = false; m_rendering_to_main = false;
m_render_widget->hide(); m_render_widget->hide();
connect(m_render_widget, &RenderWidget::EscapePressed, this, &MainWindow::RequestStop);
connect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop); connect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop);
} }
@ -397,6 +396,18 @@ void MainWindow::Pause()
EnableScreenSaver(true); EnableScreenSaver(true);
} }
void MainWindow::TogglePause()
{
if (Core::GetState() == Core::State::Paused)
{
Play();
}
else
{
Pause();
}
}
void MainWindow::OnStopComplete() void MainWindow::OnStopComplete()
{ {
m_stop_requested = false; m_stop_requested = false;
@ -577,8 +588,8 @@ void MainWindow::HideRenderWidget()
} }
// The following code works around a driver bug that would lead to Dolphin crashing when changing // The following code works around a driver bug that would lead to Dolphin crashing when changing
// graphics backends (e.g. OpenGL to Vulkan). To avoid this the render widget is (safely) recreated // graphics backends (e.g. OpenGL to Vulkan). To avoid this the render widget is (safely)
disconnect(m_render_widget, &RenderWidget::EscapePressed, this, &MainWindow::RequestStop); // recreated
disconnect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop); disconnect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop);
m_render_widget->hide(); m_render_widget->hide();
@ -588,7 +599,6 @@ void MainWindow::HideRenderWidget()
m_render_widget = new RenderWidget; m_render_widget = new RenderWidget;
m_render_widget->installEventFilter(this); m_render_widget->installEventFilter(this);
connect(m_render_widget, &RenderWidget::EscapePressed, this, &MainWindow::RequestStop);
connect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop); connect(m_render_widget, &RenderWidget::Closed, this, &MainWindow::ForceStop);
} }

View File

@ -53,6 +53,7 @@ private:
void Open(); void Open();
void Play(const std::optional<std::string>& savestate_path = {}); void Play(const std::optional<std::string>& savestate_path = {});
void Pause(); void Pause();
void TogglePause();
// May ask for confirmation. Returns whether or not it actually stopped. // May ask for confirmation. Returns whether or not it actually stopped.
bool RequestStop(); bool RequestStop();