mirror of
https://github.com/skyline-emu/skyline.git
synced 2024-11-05 10:15:09 +01:00
Initial support for updating settings during emulation + observing settings changes
This commit is contained in:
parent
c5dde5953a
commit
69cf25b1a7
@ -60,6 +60,8 @@ template<> void skyline::Settings::Update<skyline::KtSettings>(KtSettings newSet
|
|||||||
systemLanguage = newSettings.GetInt<skyline::language::SystemLanguage>("systemLanguage");
|
systemLanguage = newSettings.GetInt<skyline::language::SystemLanguage>("systemLanguage");
|
||||||
forceTripleBuffering = newSettings.GetBool("forceTripleBuffering");
|
forceTripleBuffering = newSettings.GetBool("forceTripleBuffering");
|
||||||
disableFrameThrottling = newSettings.GetBool("disableFrameThrottling");
|
disableFrameThrottling = newSettings.GetBool("disableFrameThrottling");
|
||||||
|
|
||||||
|
OnSettingsChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" JNIEXPORT void Java_emu_skyline_SkylineApplication_initializeLog(
|
extern "C" JNIEXPORT void Java_emu_skyline_SkylineApplication_initializeLog(
|
||||||
@ -239,3 +241,11 @@ extern "C" JNIEXPORT void JNICALL Java_emu_skyline_EmulationActivity_setTouchSta
|
|||||||
input->touch.SetState(points);
|
input->touch.SetState(points);
|
||||||
env->ReleaseIntArrayElements(pointsJni, reinterpret_cast<jint *>(points.data()), JNI_ABORT);
|
env->ReleaseIntArrayElements(pointsJni, reinterpret_cast<jint *>(points.data()), JNI_ABORT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" JNIEXPORT void JNICALL Java_emu_skyline_utils_SettingsValues_updateNative(JNIEnv *env, jobject settingsInstance) {
|
||||||
|
auto settings{SettingsWeak.lock()};
|
||||||
|
if (!settings)
|
||||||
|
return; // We don't mind if we miss settings updates while settings haven't been initialized
|
||||||
|
skyline::KtSettings ktSettings{env, settingsInstance};
|
||||||
|
settings->Update(ktSettings);
|
||||||
|
}
|
||||||
|
@ -4,6 +4,16 @@
|
|||||||
#include "settings.h"
|
#include "settings.h"
|
||||||
|
|
||||||
namespace skyline {
|
namespace skyline {
|
||||||
|
void Settings::Subscribe(Callback callback) {
|
||||||
|
callbacks.push_back(std::move(callback));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Settings::OnSettingsChanged() {
|
||||||
|
std::for_each(callbacks.begin(), callbacks.end(), [&](const Callback& listener) {
|
||||||
|
listener(*this);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @note This is a placeholder implementation, it must be overridden via template specialisation for platform-specific behavior
|
* @note This is a placeholder implementation, it must be overridden via template specialisation for platform-specific behavior
|
||||||
*/
|
*/
|
||||||
|
@ -27,9 +27,23 @@ namespace skyline {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Updates settings with the given values
|
* @brief Updates settings with the given values
|
||||||
|
* @note The implementations of this method must call OnSettingsChanged
|
||||||
* @param newSettings A platform-specific object containing the new settings' values
|
* @param newSettings A platform-specific object containing the new settings' values
|
||||||
*/
|
*/
|
||||||
template<class T>
|
template<class T>
|
||||||
void Update(T newSettings);
|
void Update(T newSettings);
|
||||||
|
|
||||||
|
using Callback = std::function<void(const Settings &)>;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Subscribe to settings changes
|
||||||
|
* @param callback The function to be called when settings change
|
||||||
|
*/
|
||||||
|
void Subscribe(Callback callback);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<Callback> callbacks; //!< Callbacks to be called when settings change
|
||||||
|
|
||||||
|
void OnSettingsChanged();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -13,4 +13,9 @@ class SettingsValues(pref: Settings) : Serializable {
|
|||||||
var systemLanguage : Int = pref.systemLanguage
|
var systemLanguage : Int = pref.systemLanguage
|
||||||
var forceTripleBuffering : Boolean = pref.forceTripleBuffering
|
var forceTripleBuffering : Boolean = pref.forceTripleBuffering
|
||||||
var disableFrameThrottling : Boolean = pref.disableFrameThrottling
|
var disableFrameThrottling : Boolean = pref.disableFrameThrottling
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates settings in libskyline during emulation
|
||||||
|
*/
|
||||||
|
external fun updateNative()
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user