浏览代码

UI: Fix studio program projectors

The studio mode program view projectors used the wrong saving mechanism.
The save data was copied from the source projectors, which were
dependent on string values, where as it should have been using a boolean
true/false value for specific monitors.
jp9000 8 年之前
父节点
当前提交
b5c036974f
共有 2 个文件被更改,包括 12 次插入29 次删除
  1. 11 28
      UI/window-basic-main.cpp
  2. 1 1
      UI/window-basic-main.hpp

+ 11 - 28
UI/window-basic-main.cpp

@@ -139,7 +139,7 @@ OBSBasic::OBSBasic(QWidget *parent)
 
 	projectorArray.resize(10, "");
 	previewProjectorArray.resize(10, 0);
-	studioProgramProjectorArray.resize(10, "");
+	studioProgramProjectorArray.resize(10, 0);
 
 	setAcceptDrops(true);
 
@@ -459,8 +459,8 @@ obs_data_array_t *OBSBasic::SaveStudioProgramProjectors()
 
 	for (size_t i = 0; i < studioProgramProjectorArray.size(); i++) {
 		obs_data_t *data = obs_data_create();
-		obs_data_set_string(data, "saved_studio_preview_projectors",
-			studioProgramProjectorArray.at(i).c_str());
+		obs_data_set_int(data, "saved_studio_preview_projectors",
+			studioProgramProjectorArray.at(i));
 		obs_data_array_push_back(saveProjector, data);
 		obs_data_release(data);
 	}
@@ -646,7 +646,7 @@ void OBSBasic::LoadSavedStudioProgramProjectors(obs_data_array_t *array)
 
 	for (size_t i = 0; i < num; i++) {
 		obs_data_t *data = obs_data_array_item(array, i);
-		studioProgramProjectorArray.at(i) = obs_data_get_string(data,
+		studioProgramProjectorArray.at(i) = obs_data_get_int(data,
 				"saved_studio_preview_projectors");
 
 		obs_data_release(data);
@@ -5442,7 +5442,7 @@ void OBSBasic::OpenProjector(obs_source_t *source, int monitor, bool window,
 
 	if (!window) {
 		if (studioProgram) {
-			studioProgramProjectorArray.at((size_t)monitor) = name;
+			studioProgramProjectorArray.at((size_t)monitor) = 1;
 		} else if (isPreview) {
 			previewProjectorArray.at((size_t)monitor) = 1;
 		} else {
@@ -5471,11 +5471,7 @@ void OBSBasic::OpenProjector(obs_source_t *source, int monitor, bool window,
 void OBSBasic::OpenStudioProgramProjector()
 {
 	int monitor = sender()->property("monitor").toInt();
-	obs_source_t *source = GetCurrentSceneSource();
-	if (!source)
-		return;
-
-	OpenProjector(source, monitor, false, nullptr, true);
+	OpenProjector(nullptr, monitor, false, nullptr, true);
 }
 
 void OBSBasic::OpenPreviewProjector()
@@ -5508,11 +5504,7 @@ void OBSBasic::OpenStudioProgramWindow()
 {
 	int monitor = sender()->property("monitor").toInt();
 	QString title = QTStr("StudioProgramWindow");
-	obs_source_t *source = GetCurrentSceneSource();
-	if (!source)
-		return;
-
-	OpenProjector(source, monitor, true, title, true);
+	OpenProjector(nullptr, monitor, true, title, true);
 }
 
 void OBSBasic::OpenPreviewWindow()
@@ -5575,18 +5567,9 @@ void OBSBasic::OpenSavedProjectors()
 		}
 
 		for (size_t i = 0; i < studioProgramProjectorArray.size(); i++) {
-			if (studioProgramProjectorArray.at(i).empty() == false) {
-				OBSSource source = obs_get_source_by_name(
-					studioProgramProjectorArray.at(i).c_str());
-
-				if (!source) {
-					RemoveSavedProjectors((int)i);
-					obs_source_release(source);
-					continue;
-				}
-
-				OpenProjector(source, (int)i, false, nullptr, true);
-				obs_source_release(source);
+			if (studioProgramProjectorArray.at(i) == 1) {
+				OpenProjector(nullptr, (int)i, false, nullptr,
+						true);
 			}
 		}
 
@@ -5600,7 +5583,7 @@ void OBSBasic::OpenSavedProjectors()
 
 void OBSBasic::RemoveSavedProjectors(int monitor)
 {
-	studioProgramProjectorArray.at((size_t)monitor) = "";
+	studioProgramProjectorArray.at((size_t)monitor) = 0;
 	previewProjectorArray.at((size_t)monitor) = 0;
 	projectorArray.at((size_t)monitor) = "";
 }

+ 1 - 1
UI/window-basic-main.hpp

@@ -114,7 +114,7 @@ private:
 	std::vector<OBSSignal> signalHandlers;
 
 	std::vector<std::string> projectorArray;
-	std::vector<std::string> studioProgramProjectorArray;
+	std::vector<int> studioProgramProjectorArray;
 	std::vector<int> previewProjectorArray;
 
 	bool loaded = false;