فهرست منبع

UI: Add option for only one fullscreen projector per screen

This option is added for users who want to have only one
projector on a screen and want to save gpu resources.
Clayton Groeneveld 4 سال پیش
والد
کامیت
6a0348cf64
4فایلهای تغییر یافته به همراه29 افزوده شده و 0 حذف شده
  1. 1 0
      UI/data/locale/en-US.ini
  2. 7 0
      UI/forms/OBSBasicSettings.ui
  3. 11 0
      UI/window-basic-main.cpp
  4. 10 0
      UI/window-basic-settings.cpp

+ 1 - 0
UI/data/locale/en-US.ini

@@ -784,6 +784,7 @@ Basic.Settings.General.SysTray="System Tray"
 Basic.Settings.General.SysTrayWhenStarted="Minimize to system tray when started"
 Basic.Settings.General.SystemTrayHideMinimize="Always minimize to system tray instead of task bar"
 Basic.Settings.General.SaveProjectors="Save projectors on exit"
+Basic.Settings.General.CloseExistingProjectors="Limit one fullscreen projector per screen"
 Basic.Settings.General.Preview="Preview"
 Basic.Settings.General.OverflowHidden="Hide overflow"
 Basic.Settings.General.OverflowAlwaysVisible="Overflow always visible"

+ 7 - 0
UI/forms/OBSBasicSettings.ui

@@ -476,6 +476,13 @@
                      </property>
                     </widget>
                    </item>
+                   <item row="3" column="1">
+                    <widget class="QCheckBox" name="closeProjectors">
+                     <property name="text">
+                      <string>Basic.Settings.General.CloseExistingProjectors</string>
+                     </property>
+                    </widget>
+                   </item>
                    <item row="1" column="0">
                     <spacer name="horizontalSpacer">
                      <property name="orientation">

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

@@ -8431,6 +8431,17 @@ OBSProjector *OBSBasic::OpenProjector(obs_source_t *source, int monitor,
 	if (monitor > 9 || monitor > QGuiApplication::screens().size() - 1)
 		return nullptr;
 
+	bool closeProjectors = config_get_bool(GetGlobalConfig(), "BasicWindow",
+					       "CloseExistingProjectors");
+
+	if (closeProjectors && monitor > -1) {
+		for (size_t i = projectors.size(); i > 0; i--) {
+			size_t idx = i - 1;
+			if (projectors[idx]->GetMonitor() == monitor)
+				DeleteProjector(projectors[idx]);
+		}
+	}
+
 	OBSProjector *projector =
 		new OBSProjector(nullptr, source, monitor, type);
 

+ 10 - 0
UI/window-basic-settings.cpp

@@ -396,6 +396,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
 	HookWidget(ui->systemTrayWhenStarted,CHECK_CHANGED,  GENERAL_CHANGED);
 	HookWidget(ui->systemTrayAlways,     CHECK_CHANGED,  GENERAL_CHANGED);
 	HookWidget(ui->saveProjectors,       CHECK_CHANGED,  GENERAL_CHANGED);
+	HookWidget(ui->closeProjectors,      CHECK_CHANGED,  GENERAL_CHANGED);
 	HookWidget(ui->snappingEnabled,      CHECK_CHANGED,  GENERAL_CHANGED);
 	HookWidget(ui->screenSnapping,       CHECK_CHANGED,  GENERAL_CHANGED);
 	HookWidget(ui->centerSnapping,       CHECK_CHANGED,  GENERAL_CHANGED);
@@ -1259,6 +1260,10 @@ void OBSBasicSettings::LoadGeneralSettings()
 					      "SaveProjectors");
 	ui->saveProjectors->setChecked(saveProjectors);
 
+	bool closeProjectors = config_get_bool(GetGlobalConfig(), "BasicWindow",
+					       "CloseExistingProjectors");
+	ui->closeProjectors->setChecked(closeProjectors);
+
 	bool snappingEnabled = config_get_bool(GetGlobalConfig(), "BasicWindow",
 					       "SnappingEnabled");
 	ui->snappingEnabled->setChecked(snappingEnabled);
@@ -3172,6 +3177,11 @@ void OBSBasicSettings::SaveGeneralSettings()
 				"SaveProjectors",
 				ui->saveProjectors->isChecked());
 
+	if (WidgetChanged(ui->closeProjectors))
+		config_set_bool(GetGlobalConfig(), "BasicWindow",
+				"CloseExistingProjectors",
+				ui->closeProjectors->isChecked());
+
 	if (WidgetChanged(ui->studioPortraitLayout)) {
 		config_set_bool(GetGlobalConfig(), "BasicWindow",
 				"StudioPortraitLayout",