Selaa lähdekoodia

UI: Add TBar controls to obs-frontend-api

Adds `obs_frontend_set_tbar_position` and `obs_frontend_release_tbar`,
which allow plugins and scripts to control the tbar in OBS.
This specific change is required for the `SetTBarPosition`
request to be added to obs-websocket.
tt2468 5 vuotta sitten
vanhempi
sitoutus
a03189bb68

+ 11 - 0
UI/api-interface.cpp

@@ -151,6 +151,17 @@ struct OBSStudioAPI : obs_frontend_callbacks {
 					  "setValue", Q_ARG(int, duration));
 	}
 
+	void obs_frontend_release_tbar(void) override
+	{
+		QMetaObject::invokeMethod(main, "TBarReleased");
+	}
+
+	void obs_frontend_set_tbar_position(int position) override
+	{
+		QMetaObject::invokeMethod(main, "TBarChanged",
+					  Q_ARG(int, position));
+	}
+
 	void obs_frontend_get_scene_collections(
 		std::vector<std::string> &strings) override
 	{

+ 12 - 0
UI/obs-frontend-api/obs-frontend-api.cpp

@@ -142,6 +142,18 @@ void obs_frontend_set_transition_duration(int duration)
 		c->obs_frontend_set_transition_duration(duration);
 }
 
+void obs_frontend_release_tbar(void)
+{
+	if (callbacks_valid())
+		c->obs_frontend_release_tbar();
+}
+
+void obs_frontend_set_tbar_position(int position)
+{
+	if (callbacks_valid())
+		c->obs_frontend_set_tbar_position(position);
+}
+
 char **obs_frontend_get_scene_collections(void)
 {
 	if (!callbacks_valid())

+ 2 - 0
UI/obs-frontend-api/obs-frontend-api.h

@@ -100,6 +100,8 @@ EXPORT obs_source_t *obs_frontend_get_current_transition(void);
 EXPORT void obs_frontend_set_current_transition(obs_source_t *transition);
 EXPORT int obs_frontend_get_transition_duration(void);
 EXPORT void obs_frontend_set_transition_duration(int duration);
+EXPORT void obs_frontend_release_tbar(void);
+EXPORT void obs_frontend_set_tbar_position(int position);
 
 EXPORT char **obs_frontend_get_scene_collections(void);
 EXPORT char *obs_frontend_get_current_scene_collection(void);

+ 2 - 0
UI/obs-frontend-api/obs-frontend-internal.hpp

@@ -23,6 +23,8 @@ struct obs_frontend_callbacks {
 	obs_frontend_set_current_transition(obs_source_t *transition) = 0;
 	virtual int obs_frontend_get_transition_duration(void) = 0;
 	virtual void obs_frontend_set_transition_duration(int duration) = 0;
+	virtual void obs_frontend_release_tbar(void) = 0;
+	virtual void obs_frontend_set_tbar_position(int position) = 0;
 
 	virtual void obs_frontend_get_scene_collections(
 		std::vector<std::string> &strings) = 0;

+ 2 - 0
UI/window-basic-main-transitions.cpp

@@ -915,6 +915,8 @@ void OBSBasic::TBarChanged(int value)
 	OBSSource transition = obs_get_output_source(0);
 	obs_source_release(transition);
 
+	tBar->setValue(value);
+
 	if (!tBarActive) {
 		OBSSource sceneSource = GetCurrentSceneSource();
 		OBSSource tBarTr = GetOverrideTransition(sceneSource);