mirror of
https://github.com/obsproject/obs-studio.git
synced 2024-07-07 03:53:38 +00:00
UI: Add preload callbacks to frontend API
Allows loading data before actually loading any scene data.
This commit is contained in:
parent
260fb571b8
commit
5645c02c8f
|
@ -49,6 +49,7 @@ struct OBSStudioAPI : obs_frontend_callbacks {
|
|||
OBSBasic *main;
|
||||
vector<OBSStudioCallback<obs_frontend_event_cb>> callbacks;
|
||||
vector<OBSStudioCallback<obs_frontend_save_cb>> saveCallbacks;
|
||||
vector<OBSStudioCallback<obs_frontend_save_cb>> preloadCallbacks;
|
||||
|
||||
inline OBSStudioAPI(OBSBasic *main_) : main(main_) {}
|
||||
|
||||
|
@ -348,6 +349,26 @@ struct OBSStudioAPI : obs_frontend_callbacks {
|
|||
saveCallbacks.erase(saveCallbacks.begin() + idx);
|
||||
}
|
||||
|
||||
void obs_frontend_add_preload_callback(obs_frontend_save_cb callback,
|
||||
void *private_data) override
|
||||
{
|
||||
size_t idx = GetCallbackIdx(preloadCallbacks, callback,
|
||||
private_data);
|
||||
if (idx == (size_t)-1)
|
||||
preloadCallbacks.emplace_back(callback, private_data);
|
||||
}
|
||||
|
||||
void obs_frontend_remove_preload_callback(obs_frontend_save_cb callback,
|
||||
void *private_data) override
|
||||
{
|
||||
size_t idx = GetCallbackIdx(preloadCallbacks, callback,
|
||||
private_data);
|
||||
if (idx == (size_t)-1)
|
||||
return;
|
||||
|
||||
preloadCallbacks.erase(preloadCallbacks.begin() + idx);
|
||||
}
|
||||
|
||||
void obs_frontend_push_ui_translation(
|
||||
obs_frontend_translate_ui_cb translate) override
|
||||
{
|
||||
|
@ -409,6 +430,15 @@ struct OBSStudioAPI : obs_frontend_callbacks {
|
|||
{
|
||||
for (auto cb : saveCallbacks)
|
||||
cb.callback(settings, false, cb.private_data);
|
||||
}
|
||||
}
|
||||
|
||||
void on_preload(obs_data_t *settings) override
|
||||
{
|
||||
for (size_t i = preloadCallbacks.size(); i > 0; i--) {
|
||||
auto cb = preloadCallbacks[i - 1];
|
||||
cb.callback(settings, false, cb.private_data);
|
||||
}
|
||||
}
|
||||
|
||||
void on_save(obs_data_t *settings) override
|
||||
|
|
|
@ -311,6 +311,20 @@ void obs_frontend_remove_save_callback(obs_frontend_save_cb callback,
|
|||
c->obs_frontend_remove_save_callback(callback, private_data);
|
||||
}
|
||||
|
||||
void obs_frontend_add_preload_callback(obs_frontend_save_cb callback,
|
||||
void *private_data)
|
||||
{
|
||||
if (callbacks_valid())
|
||||
c->obs_frontend_add_preload_callback(callback, private_data);
|
||||
}
|
||||
|
||||
void obs_frontend_remove_preload_callback(obs_frontend_save_cb callback,
|
||||
void *private_data)
|
||||
{
|
||||
if (callbacks_valid())
|
||||
c->obs_frontend_remove_preload_callback(callback, private_data);
|
||||
}
|
||||
|
||||
void obs_frontend_push_ui_translation(obs_frontend_translate_ui_cb translate)
|
||||
{
|
||||
if (callbacks_valid())
|
||||
|
|
|
@ -135,6 +135,11 @@ EXPORT obs_output_t *obs_frontend_get_replay_buffer_output(void);
|
|||
EXPORT config_t *obs_frontend_get_profile_config(void);
|
||||
EXPORT config_t *obs_frontend_get_global_config(void);
|
||||
|
||||
EXPORT void obs_frontend_add_preload_callback(obs_frontend_save_cb callback,
|
||||
void *private_data);
|
||||
EXPORT void obs_frontend_remove_preload_callback(obs_frontend_save_cb callback,
|
||||
void *private_data);
|
||||
|
||||
typedef bool (*obs_frontend_translate_ui_cb)(const char *text,
|
||||
const char **out);
|
||||
|
||||
|
|
|
@ -67,6 +67,11 @@ struct obs_frontend_callbacks {
|
|||
virtual void obs_frontend_remove_save_callback(
|
||||
obs_frontend_save_cb callback, void *private_data)=0;
|
||||
|
||||
virtual void obs_frontend_add_preload_callback(
|
||||
obs_frontend_save_cb callback, void *private_data)=0;
|
||||
virtual void obs_frontend_remove_preload_callback(
|
||||
obs_frontend_save_cb callback, void *private_data)=0;
|
||||
|
||||
virtual void obs_frontend_push_ui_translation(
|
||||
obs_frontend_translate_ui_cb translate)=0;
|
||||
virtual void obs_frontend_pop_ui_translation(void)=0;
|
||||
|
@ -83,6 +88,7 @@ struct obs_frontend_callbacks {
|
|||
virtual void obs_frontend_set_current_preview_scene(obs_source_t *scene)=0;
|
||||
|
||||
virtual void on_load(obs_data_t *settings)=0;
|
||||
virtual void on_preload(obs_data_t *settings)=0;
|
||||
virtual void on_save(obs_data_t *settings)=0;
|
||||
virtual void on_event(enum obs_frontend_event event)=0;
|
||||
};
|
||||
|
|
|
@ -762,6 +762,10 @@ void OBSBasic::Load(const char *file)
|
|||
ClearSceneData();
|
||||
InitDefaultTransitions();
|
||||
|
||||
obs_data_t *modulesObj = obs_data_get_obj(data, "modules");
|
||||
if (api)
|
||||
api->on_preload(modulesObj);
|
||||
|
||||
obs_data_array_t *sceneOrder = obs_data_get_array(data, "scene_order");
|
||||
obs_data_array_t *sources = obs_data_get_array(data, "sources");
|
||||
obs_data_array_t *transitions= obs_data_get_array(data, "transitions");
|
||||
|
@ -925,12 +929,10 @@ retryScene:
|
|||
|
||||
/* ---------------------- */
|
||||
|
||||
if (api) {
|
||||
obs_data_t *modulesObj = obs_data_get_obj(data, "modules");
|
||||
if (api)
|
||||
api->on_load(modulesObj);
|
||||
obs_data_release(modulesObj);
|
||||
}
|
||||
|
||||
obs_data_release(modulesObj);
|
||||
obs_data_release(data);
|
||||
|
||||
if (!opt_starting_scene.empty())
|
||||
|
|
Loading…
Reference in a new issue