Implement a "Pause Emulation" option & hotkey (#2428)

* Add a "Pause Emulation" option and hotkey

Closes Ryujinx#1604

* Refactoring how pause is handled

* Applied suggested changes from review

* Applied suggested fixes

* Pass correct suspend type to threads for suspend/resume

* Fix NRE after stoping emulation

* Removing SimulateWakeUpMessage call after resuming emulation

* Skip suspending non game process

* Pause the tickCounter in the ExecutionContext

* Refactoring tickCounter pause/resume as suggested

* Fix Config migration to add pause hotkey

* Fixed pausing only application threads

* Fix exiting emulator while paused

* Avoid pause/resume while already paused/resumed

* Cleanup unused code

* Avoid restarting audio if stopping emulation while in pause.

* Added suggested changes

* Fix ConfigurationState
This commit is contained in:
mpnico 2021-09-11 22:08:25 +02:00 committed by GitHub
parent b0e410a828
commit 117e32a6ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
21 changed files with 311 additions and 54 deletions

View file

@ -389,6 +389,8 @@ namespace Ryujinx.Ui
Device.Gpu.InitializeShaderCache();
Translator.IsReadyForTranslation.Set();
(Toplevel as MainWindow)?.ActivatePauseMenu();
while (_isActive)
{
if (_isStopped)
@ -590,6 +592,12 @@ namespace Ryujinx.Ui
(Toplevel as MainWindow).ToggleExtraWidgets(true);
}
if (currentHotkeyState.HasFlag(KeyboardHotkeyState.Pause) &&
!_prevHotkeyState.HasFlag(KeyboardHotkeyState.Pause))
{
(Toplevel as MainWindow)?.TogglePause();
}
_prevHotkeyState = currentHotkeyState;
}
@ -618,7 +626,8 @@ namespace Ryujinx.Ui
None = 0,
ToggleVSync = 1 << 0,
Screenshot = 1 << 1,
ShowUi = 1 << 2
ShowUi = 1 << 2,
Pause = 1 << 3
}
private KeyboardHotkeyState GetHotkeyState()
@ -640,6 +649,11 @@ namespace Ryujinx.Ui
state |= KeyboardHotkeyState.ShowUi;
}
if (_keyboardInterface.IsPressed((Key)ConfigurationState.Instance.Hid.Hotkeys.Value.Pause))
{
state |= KeyboardHotkeyState.Pause;
}
return state;
}
}