HostInterface: Modify settings loading interface to support per-frontend settings
This commit is contained in:
parent
6e7c58de43
commit
d8ab587153
|
@ -1003,7 +1003,17 @@ void HostInterface::SetDefaultSettings(SettingsInterface& si)
|
||||||
si.SetBoolValue("Debug", "ShowMDECState", false);
|
si.SetBoolValue("Debug", "ShowMDECState", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void HostInterface::UpdateSettings(const std::function<void()>& apply_callback)
|
void HostInterface::ApplySettings(SettingsInterface& si)
|
||||||
|
{
|
||||||
|
m_settings.Load(si);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostInterface::ExportSettings(SettingsInterface& si)
|
||||||
|
{
|
||||||
|
m_settings.Save(si);
|
||||||
|
}
|
||||||
|
|
||||||
|
void HostInterface::UpdateSettings(SettingsInterface& si)
|
||||||
{
|
{
|
||||||
const bool old_increase_timer_resolution = m_settings.increase_timer_resolution;
|
const bool old_increase_timer_resolution = m_settings.increase_timer_resolution;
|
||||||
const float old_emulation_speed = m_settings.emulation_speed;
|
const float old_emulation_speed = m_settings.emulation_speed;
|
||||||
|
@ -1038,7 +1048,7 @@ void HostInterface::UpdateSettings(const std::function<void()>& apply_callback)
|
||||||
const bool old_log_to_window = m_settings.log_to_window;
|
const bool old_log_to_window = m_settings.log_to_window;
|
||||||
const bool old_log_to_file = m_settings.log_to_file;
|
const bool old_log_to_file = m_settings.log_to_file;
|
||||||
|
|
||||||
apply_callback();
|
ApplySettings(si);
|
||||||
|
|
||||||
if (m_system)
|
if (m_system)
|
||||||
{
|
{
|
||||||
|
|
|
@ -192,7 +192,7 @@ protected:
|
||||||
/// Sets the user directory to the program directory, i.e. "portable mode".
|
/// Sets the user directory to the program directory, i.e. "portable mode".
|
||||||
void SetUserDirectoryToProgramDirectory();
|
void SetUserDirectoryToProgramDirectory();
|
||||||
|
|
||||||
/// Performs the initial load of settings. Should call CheckSettings() and m_settings.Load().
|
/// Performs the initial load of settings. Should call CheckSettings() and ApplySettings().
|
||||||
virtual void LoadSettings() = 0;
|
virtual void LoadSettings() = 0;
|
||||||
|
|
||||||
/// Updates logging settings.
|
/// Updates logging settings.
|
||||||
|
@ -232,9 +232,14 @@ protected:
|
||||||
/// Restores all settings to defaults.
|
/// Restores all settings to defaults.
|
||||||
virtual void SetDefaultSettings(SettingsInterface& si);
|
virtual void SetDefaultSettings(SettingsInterface& si);
|
||||||
|
|
||||||
/// Applies new settings, updating internal state as needed. apply_callback should call m_settings.Load() after
|
/// Loads settings to m_settings and any frontend-specific parameters.
|
||||||
/// locking any required mutexes.
|
virtual void ApplySettings(SettingsInterface& si);
|
||||||
void UpdateSettings(const std::function<void()>& apply_callback);
|
|
||||||
|
/// Saves current settings variables to ini.
|
||||||
|
virtual void ExportSettings(SettingsInterface& si);
|
||||||
|
|
||||||
|
/// Applies new settings, updating internal state as needed.
|
||||||
|
virtual void UpdateSettings(SettingsInterface& si);
|
||||||
|
|
||||||
/// Quick switch between software and hardware rendering.
|
/// Quick switch between software and hardware rendering.
|
||||||
void ToggleSoftwareRendering();
|
void ToggleSoftwareRendering();
|
||||||
|
|
|
@ -144,9 +144,12 @@ void QtHostInterface::setDefaultSettings()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> guard(m_qsettings_mutex);
|
|
||||||
QtSettingsInterface si(m_qsettings.get());
|
QtSettingsInterface si(m_qsettings.get());
|
||||||
UpdateSettings([this, &si]() { m_settings.Load(si); });
|
{
|
||||||
|
std::lock_guard<std::recursive_mutex> guard(m_qsettings_mutex);
|
||||||
|
SetDefaultSettings(si);
|
||||||
|
}
|
||||||
|
UpdateSettings(si);
|
||||||
CommonHostInterface::UpdateInputMap(si);
|
CommonHostInterface::UpdateInputMap(si);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +163,7 @@ void QtHostInterface::applySettings()
|
||||||
|
|
||||||
std::lock_guard<std::recursive_mutex> guard(m_qsettings_mutex);
|
std::lock_guard<std::recursive_mutex> guard(m_qsettings_mutex);
|
||||||
QtSettingsInterface si(m_qsettings.get());
|
QtSettingsInterface si(m_qsettings.get());
|
||||||
UpdateSettings([this, &si]() { m_settings.Load(si); });
|
UpdateSettings(si);
|
||||||
CommonHostInterface::UpdateInputMap(si);
|
CommonHostInterface::UpdateInputMap(si);
|
||||||
|
|
||||||
// detect when render-to-main flag changes
|
// detect when render-to-main flag changes
|
||||||
|
@ -388,6 +391,14 @@ bool QtHostInterface::SetFullscreen(bool enabled)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QtHostInterface::PollAndUpdate()
|
||||||
|
{
|
||||||
|
CommonHostInterface::PollAndUpdate();
|
||||||
|
|
||||||
|
if (m_controller_interface)
|
||||||
|
m_controller_interface->PollEvents();
|
||||||
|
}
|
||||||
|
|
||||||
void QtHostInterface::RequestExit()
|
void QtHostInterface::RequestExit()
|
||||||
{
|
{
|
||||||
emit exitRequested();
|
emit exitRequested();
|
||||||
|
@ -450,7 +461,7 @@ void QtHostInterface::OnSystemPerformanceCountersUpdated()
|
||||||
|
|
||||||
void QtHostInterface::OnRunningGameChanged()
|
void QtHostInterface::OnRunningGameChanged()
|
||||||
{
|
{
|
||||||
HostInterface::OnRunningGameChanged();
|
CommonHostInterface::OnRunningGameChanged();
|
||||||
|
|
||||||
if (m_system)
|
if (m_system)
|
||||||
{
|
{
|
||||||
|
@ -485,7 +496,7 @@ void QtHostInterface::LoadSettings()
|
||||||
|
|
||||||
// load in settings
|
// load in settings
|
||||||
CheckSettings(si);
|
CheckSettings(si);
|
||||||
m_settings.Load(si);
|
ApplySettings(si);
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtHostInterface::SetDefaultSettings(SettingsInterface& si)
|
void QtHostInterface::SetDefaultSettings(SettingsInterface& si)
|
||||||
|
@ -495,6 +506,12 @@ void QtHostInterface::SetDefaultSettings(SettingsInterface& si)
|
||||||
si.SetBoolValue("Main", "RenderToMainWindow", true);
|
si.SetBoolValue("Main", "RenderToMainWindow", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void QtHostInterface::ApplySettings(SettingsInterface& si)
|
||||||
|
{
|
||||||
|
std::lock_guard<std::recursive_mutex> lock(m_qsettings_mutex);
|
||||||
|
CommonHostInterface::ApplySettings(si);
|
||||||
|
}
|
||||||
|
|
||||||
void QtHostInterface::UpdateInputMap()
|
void QtHostInterface::UpdateInputMap()
|
||||||
{
|
{
|
||||||
updateInputMap();
|
updateInputMap();
|
||||||
|
@ -771,7 +788,7 @@ void QtHostInterface::saveScreenshot()
|
||||||
|
|
||||||
void QtHostInterface::doBackgroundControllerPoll()
|
void QtHostInterface::doBackgroundControllerPoll()
|
||||||
{
|
{
|
||||||
m_controller_interface->PollEvents();
|
PollAndUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
void QtHostInterface::createBackgroundControllerPollTimer()
|
void QtHostInterface::createBackgroundControllerPollTimer()
|
||||||
|
@ -855,8 +872,7 @@ void QtHostInterface::threadEntryPoint()
|
||||||
m_system->Throttle();
|
m_system->Throttle();
|
||||||
|
|
||||||
m_worker_thread_event_loop->processEvents(QEventLoop::AllEvents);
|
m_worker_thread_event_loop->processEvents(QEventLoop::AllEvents);
|
||||||
if (m_controller_interface)
|
PollAndUpdate();
|
||||||
m_controller_interface->PollEvents();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
shutdownOnThread();
|
shutdownOnThread();
|
||||||
|
|
|
@ -136,6 +136,7 @@ protected:
|
||||||
void ReleaseHostDisplay() override;
|
void ReleaseHostDisplay() override;
|
||||||
bool IsFullscreen() const override;
|
bool IsFullscreen() const override;
|
||||||
bool SetFullscreen(bool enabled) override;
|
bool SetFullscreen(bool enabled) override;
|
||||||
|
void PollAndUpdate() override;
|
||||||
|
|
||||||
void RequestExit() override;
|
void RequestExit() override;
|
||||||
std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const override;
|
std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const override;
|
||||||
|
@ -149,6 +150,7 @@ protected:
|
||||||
|
|
||||||
void LoadSettings() override;
|
void LoadSettings() override;
|
||||||
void SetDefaultSettings(SettingsInterface& si) override;
|
void SetDefaultSettings(SettingsInterface& si) override;
|
||||||
|
void ApplySettings(SettingsInterface& si) override;
|
||||||
void UpdateInputMap() override;
|
void UpdateInputMap() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -295,17 +295,13 @@ void SDLHostInterface::RunLater(std::function<void()> callback)
|
||||||
SDL_PushEvent(&ev);
|
SDL_PushEvent(&ev);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLHostInterface::SaveSettings()
|
void SDLHostInterface::SaveAndUpdateSettings()
|
||||||
{
|
{
|
||||||
m_settings_copy.Save(*m_settings_interface.get());
|
m_settings_copy.Save(*m_settings_interface.get());
|
||||||
|
UpdateSettings(*m_settings_interface.get());
|
||||||
m_settings_interface->Save();
|
m_settings_interface->Save();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLHostInterface::UpdateSettings()
|
|
||||||
{
|
|
||||||
CommonHostInterface::UpdateSettings([this]() { m_settings = m_settings_copy; });
|
|
||||||
}
|
|
||||||
|
|
||||||
bool SDLHostInterface::IsFullscreen() const
|
bool SDLHostInterface::IsFullscreen() const
|
||||||
{
|
{
|
||||||
return m_fullscreen;
|
return m_fullscreen;
|
||||||
|
@ -383,8 +379,8 @@ void SDLHostInterface::LoadSettings()
|
||||||
{
|
{
|
||||||
// Settings need to be loaded prior to creating the window for OpenGL bits.
|
// Settings need to be loaded prior to creating the window for OpenGL bits.
|
||||||
m_settings_interface = std::make_unique<INISettingsInterface>(GetSettingsFileName());
|
m_settings_interface = std::make_unique<INISettingsInterface>(GetSettingsFileName());
|
||||||
m_settings_copy.Load(*m_settings_interface.get());
|
ApplySettings(*m_settings_interface.get());
|
||||||
m_settings = m_settings_copy;
|
m_settings_copy = m_settings;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLHostInterface::ReportError(const char* message)
|
void SDLHostInterface::ReportError(const char* message)
|
||||||
|
@ -513,6 +509,12 @@ void SDLHostInterface::HandleSDLEvent(const SDL_Event* event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SDLHostInterface::PollAndUpdate()
|
||||||
|
{
|
||||||
|
CommonHostInterface::PollAndUpdate();
|
||||||
|
ProcessEvents();
|
||||||
|
}
|
||||||
|
|
||||||
void SDLHostInterface::ProcessEvents()
|
void SDLHostInterface::ProcessEvents()
|
||||||
{
|
{
|
||||||
for (;;)
|
for (;;)
|
||||||
|
@ -794,12 +796,7 @@ void SDLHostInterface::DrawQuickSettingsMenu()
|
||||||
RunLater([this]() { SaveScreenshot(); });
|
RunLater([this]() { SaveScreenshot(); });
|
||||||
|
|
||||||
if (settings_changed)
|
if (settings_changed)
|
||||||
{
|
RunLater([this]() { SaveAndUpdateSettings(); });
|
||||||
RunLater([this]() {
|
|
||||||
SaveSettings();
|
|
||||||
UpdateSettings();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLHostInterface::DrawDebugMenu()
|
void SDLHostInterface::DrawDebugMenu()
|
||||||
|
@ -831,7 +828,7 @@ void SDLHostInterface::DrawDebugMenu()
|
||||||
debug_settings_copy.show_spu_state = debug_settings.show_spu_state;
|
debug_settings_copy.show_spu_state = debug_settings.show_spu_state;
|
||||||
debug_settings_copy.show_timers_state = debug_settings.show_timers_state;
|
debug_settings_copy.show_timers_state = debug_settings.show_timers_state;
|
||||||
debug_settings_copy.show_mdec_state = debug_settings.show_mdec_state;
|
debug_settings_copy.show_mdec_state = debug_settings.show_mdec_state;
|
||||||
SaveSettings();
|
SaveAndUpdateSettings();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1269,12 +1266,7 @@ void SDLHostInterface::DrawSettingsWindow()
|
||||||
ImGui::End();
|
ImGui::End();
|
||||||
|
|
||||||
if (settings_changed)
|
if (settings_changed)
|
||||||
{
|
RunLater([this]() { SaveAndUpdateSettings(); });
|
||||||
RunLater([this]() {
|
|
||||||
SaveSettings();
|
|
||||||
UpdateSettings();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SDLHostInterface::DrawAboutWindow()
|
void SDLHostInterface::DrawAboutWindow()
|
||||||
|
@ -1380,7 +1372,7 @@ void SDLHostInterface::Run()
|
||||||
{
|
{
|
||||||
while (!m_quit_request)
|
while (!m_quit_request)
|
||||||
{
|
{
|
||||||
ProcessEvents();
|
PollAndUpdate();
|
||||||
|
|
||||||
if (m_system && !m_paused)
|
if (m_system && !m_paused)
|
||||||
{
|
{
|
||||||
|
|
|
@ -50,6 +50,7 @@ protected:
|
||||||
void OnRunningGameChanged() override;
|
void OnRunningGameChanged() override;
|
||||||
|
|
||||||
void RequestExit() override;
|
void RequestExit() override;
|
||||||
|
void PollAndUpdate() override;
|
||||||
|
|
||||||
std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const override;
|
std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const override;
|
||||||
void UpdateInputMap() override;
|
void UpdateInputMap() override;
|
||||||
|
@ -75,8 +76,7 @@ private:
|
||||||
/// Executes a callback later, after the UI has finished rendering. Needed to boot while rendering ImGui.
|
/// Executes a callback later, after the UI has finished rendering. Needed to boot while rendering ImGui.
|
||||||
void RunLater(std::function<void()> callback);
|
void RunLater(std::function<void()> callback);
|
||||||
|
|
||||||
void SaveSettings();
|
void SaveAndUpdateSettings();
|
||||||
void UpdateSettings();
|
|
||||||
|
|
||||||
bool IsFullscreen() const override;
|
bool IsFullscreen() const override;
|
||||||
bool SetFullscreen(bool enabled) override;
|
bool SetFullscreen(bool enabled) override;
|
||||||
|
|
|
@ -291,6 +291,10 @@ bool CommonHostInterface::ParseCommandLineParameters(int argc, char* argv[],
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommonHostInterface::PollAndUpdate()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
bool CommonHostInterface::IsFullscreen() const
|
bool CommonHostInterface::IsFullscreen() const
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
|
@ -356,6 +360,11 @@ void CommonHostInterface::OnSystemDestroyed()
|
||||||
StopControllerRumble();
|
StopControllerRumble();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommonHostInterface::OnRunningGameChanged()
|
||||||
|
{
|
||||||
|
HostInterface::OnRunningGameChanged();
|
||||||
|
}
|
||||||
|
|
||||||
void CommonHostInterface::OnControllerTypeChanged(u32 slot)
|
void CommonHostInterface::OnControllerTypeChanged(u32 slot)
|
||||||
{
|
{
|
||||||
HostInterface::OnControllerTypeChanged(slot);
|
HostInterface::OnControllerTypeChanged(slot);
|
||||||
|
@ -403,6 +412,11 @@ void CommonHostInterface::SetDefaultSettings(SettingsInterface& si)
|
||||||
si.SetStringValue("Hotkeys", "ToggleSoftwareRendering", "Keyboard/End");
|
si.SetStringValue("Hotkeys", "ToggleSoftwareRendering", "Keyboard/End");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommonHostInterface::ApplySettings(SettingsInterface& si)
|
||||||
|
{
|
||||||
|
HostInterface::ApplySettings(si);
|
||||||
|
}
|
||||||
|
|
||||||
std::optional<CommonHostInterface::HostKeyCode>
|
std::optional<CommonHostInterface::HostKeyCode>
|
||||||
CommonHostInterface::GetHostKeyCode(const std::string_view key_code) const
|
CommonHostInterface::GetHostKeyCode(const std::string_view key_code) const
|
||||||
{
|
{
|
||||||
|
|
|
@ -67,6 +67,9 @@ protected:
|
||||||
/// Request the frontend to exit.
|
/// Request the frontend to exit.
|
||||||
virtual void RequestExit() = 0;
|
virtual void RequestExit() = 0;
|
||||||
|
|
||||||
|
/// Executes per-frame tasks such as controller polling.
|
||||||
|
virtual void PollAndUpdate();
|
||||||
|
|
||||||
virtual bool IsFullscreen() const;
|
virtual bool IsFullscreen() const;
|
||||||
virtual bool SetFullscreen(bool enabled);
|
virtual bool SetFullscreen(bool enabled);
|
||||||
|
|
||||||
|
@ -76,10 +79,12 @@ protected:
|
||||||
virtual void OnSystemCreated() override;
|
virtual void OnSystemCreated() override;
|
||||||
virtual void OnSystemPaused(bool paused) override;
|
virtual void OnSystemPaused(bool paused) override;
|
||||||
virtual void OnSystemDestroyed() override;
|
virtual void OnSystemDestroyed() override;
|
||||||
|
virtual void OnRunningGameChanged() override;
|
||||||
virtual void OnControllerTypeChanged(u32 slot) override;
|
virtual void OnControllerTypeChanged(u32 slot) override;
|
||||||
virtual void DrawImGuiWindows() override;
|
virtual void DrawImGuiWindows() override;
|
||||||
|
|
||||||
virtual void SetDefaultSettings(SettingsInterface& si) override;
|
virtual void SetDefaultSettings(SettingsInterface& si) override;
|
||||||
|
virtual void ApplySettings(SettingsInterface& si) override;
|
||||||
|
|
||||||
virtual std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const;
|
virtual std::optional<HostKeyCode> GetHostKeyCode(const std::string_view key_code) const;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue