Bläddra i källkod

UI: Create an API for opening projector windows

Chris Angelico 6 år sedan
förälder
incheckning
7c540acc11

+ 25 - 0
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

+ 7 - 0
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())

+ 2 - 0
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);

+ 3 - 0
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;

+ 1 - 0
UI/window-basic-main.cpp

@@ -242,6 +242,7 @@ OBSBasic::OBSBasic(QWidget *parent)
 	qRegisterMetaType<OBSSceneItem>("OBSSceneItem");
 	qRegisterMetaType<OBSSource>("OBSSource");
 	qRegisterMetaType<obs_hotkey_id>("obs_hotkey_id");
+	qRegisterMetaType<SavedProjectorInfo *>("SavedProjectorInfo *");
 
 	qRegisterMetaTypeStreamOperators<std::vector<std::shared_ptr<OBSSignal>>>(
 		"std::vector<std::shared_ptr<OBSSignal>>");