diff --git a/UI/api-interface.cpp b/UI/api-interface.cpp index 0d928ac76..a2139efa4 100644 --- a/UI/api-interface.cpp +++ b/UI/api-interface.cpp @@ -371,6 +371,31 @@ struct OBSStudioAPI : obs_frontend_callbacks { return App()->GlobalConfig(); } + void obs_frontend_open_projector(const char *type, int monitor, + const char *geometry, + const char *name) override + { + SavedProjectorInfo proj = { + ProjectorType::Preview, + monitor, + geometry ? geometry : "", + name ? name : "", + }; + if (type) { + if (astrcmpi(type, "Source") == 0) + proj.type = ProjectorType::Source; + else if (astrcmpi(type, "Scene") == 0) + proj.type = ProjectorType::Scene; + else if (astrcmpi(type, "StudioProgram") == 0) + proj.type = ProjectorType::StudioProgram; + else if (astrcmpi(type, "Multiview") == 0) + proj.type = ProjectorType::Multiview; + } + QMetaObject::invokeMethod(main, "OpenSavedProjector", + WaitConnection(), + Q_ARG(SavedProjectorInfo *, &proj)); + } + void obs_frontend_save(void) override { main->SaveProject(); } void obs_frontend_defer_save_begin(void) override diff --git a/UI/obs-frontend-api/obs-frontend-api.cpp b/UI/obs-frontend-api/obs-frontend-api.cpp index c5fafeb0c..8066666c5 100644 --- a/UI/obs-frontend-api/obs-frontend-api.cpp +++ b/UI/obs-frontend-api/obs-frontend-api.cpp @@ -327,6 +327,13 @@ config_t *obs_frontend_get_global_config(void) : nullptr; } +void obs_frontend_open_projector(const char *type, int monitor, + const char *geometry, const char *name) +{ + if (callbacks_valid()) + c->obs_frontend_open_projector(type, monitor, geometry, name); +} + void obs_frontend_save(void) { if (callbacks_valid()) diff --git a/UI/obs-frontend-api/obs-frontend-api.h b/UI/obs-frontend-api/obs-frontend-api.h index f350d520b..18e9d4e1c 100644 --- a/UI/obs-frontend-api/obs-frontend-api.h +++ b/UI/obs-frontend-api/obs-frontend-api.h @@ -165,6 +165,8 @@ EXPORT void obs_frontend_replay_buffer_save(void); EXPORT void obs_frontend_replay_buffer_stop(void); EXPORT bool obs_frontend_replay_buffer_active(void); +EXPORT void obs_frontend_open_projector(const char *type, int monitor, + const char *geometry, const char *name); EXPORT void obs_frontend_save(void); EXPORT void obs_frontend_defer_save_begin(void); EXPORT void obs_frontend_defer_save_end(void); diff --git a/UI/obs-frontend-api/obs-frontend-internal.hpp b/UI/obs-frontend-api/obs-frontend-internal.hpp index 80051ca79..a5ba063b9 100644 --- a/UI/obs-frontend-api/obs-frontend-internal.hpp +++ b/UI/obs-frontend-api/obs-frontend-internal.hpp @@ -72,6 +72,9 @@ struct obs_frontend_callbacks { virtual config_t *obs_frontend_get_profile_config(void) = 0; virtual config_t *obs_frontend_get_global_config(void) = 0; + virtual void obs_frontend_open_projector(const char *type, int monitor, + const char *geometry, + const char *name) = 0; virtual void obs_frontend_save(void) = 0; virtual void obs_frontend_defer_save_begin(void) = 0; virtual void obs_frontend_defer_save_end(void) = 0; diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index ad9d6e707..a5a5cf76d 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -242,6 +242,7 @@ OBSBasic::OBSBasic(QWidget *parent) qRegisterMetaType("OBSSceneItem"); qRegisterMetaType("OBSSource"); qRegisterMetaType("obs_hotkey_id"); + qRegisterMetaType("SavedProjectorInfo *"); qRegisterMetaTypeStreamOperators>>( "std::vector>");