浏览代码

UI: Hide preview for sources and filters where possible

Hides the preview window for audio sources in the properties menu and
contextually in the filters menu to save on gui space.
Alex Anderson 7 年之前
父节点
当前提交
57f8c5e328
共有 4 个文件被更改,包括 46 次插入11 次删除
  1. 13 0
      UI/forms/OBSBasicFilters.ui
  2. 25 9
      UI/window-basic-filters.cpp
  3. 2 0
      UI/window-basic-filters.hpp
  4. 6 2
      UI/window-basic-properties.cpp

+ 13 - 0
UI/forms/OBSBasicFilters.ui

@@ -390,6 +390,19 @@
          </item>
         </layout>
        </item>
+       <item>
+        <spacer name="verticalSpacer">
+         <property name="orientation">
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" stdset="0">
+          <size>
+           <width>20</width>
+           <height>40</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
        <item>
         <layout class="QHBoxLayout" name="horizontalLayout_2">
          <property name="spacing">

+ 25 - 9
UI/window-basic-filters.cpp

@@ -56,7 +56,8 @@ OBSBasicFilters::OBSBasicFilters(QWidget *parent, OBSSource source_)
 	                                OBSBasicFilters::SourceRemoved, this),
 	  renameSourceSignal           (obs_source_get_signal_handler(source),
 	                                "rename",
-	                                OBSBasicFilters::SourceRenamed, this)
+	                                OBSBasicFilters::SourceRenamed, this),
+	  noPreviewMargin               (13)
 {
 	main = reinterpret_cast<OBSBasic*>(parent);
 
@@ -97,10 +98,10 @@ OBSBasicFilters::OBSBasicFilters(QWidget *parent, OBSSource source_)
 	connect(ui->buttonBox->button(QDialogButtonBox::Reset),
 		SIGNAL(clicked()), this, SLOT(ResetFilters()));
 
-	uint32_t flags = obs_source_get_output_flags(source);
-	bool audio     = (flags & OBS_SOURCE_AUDIO) != 0;
-	bool audioOnly = (flags & OBS_SOURCE_VIDEO) == 0;
-	bool async     = (flags & OBS_SOURCE_ASYNC) != 0;
+	uint32_t caps = obs_source_get_output_flags(source);
+	bool audio     = (caps & OBS_SOURCE_AUDIO) != 0;
+	bool audioOnly = (caps & OBS_SOURCE_VIDEO) == 0;
+	bool async     = (caps & OBS_SOURCE_ASYNC) != 0;
 
 	if (!async && !audio) {
 		ui->asyncWidget->setVisible(false);
@@ -121,13 +122,19 @@ OBSBasicFilters::OBSBasicFilters(QWidget *parent, OBSSource source_)
 	};
 
 	enum obs_source_type type = obs_source_get_type(source);
-	uint32_t caps = obs_source_get_output_flags(source);
 	bool drawable_type = type == OBS_SOURCE_TYPE_INPUT ||
 		type == OBS_SOURCE_TYPE_SCENE;
 
-	if (drawable_type && (caps & OBS_SOURCE_VIDEO) != 0)
-		connect(ui->preview, &OBSQTDisplay::DisplayCreated,
-				addDrawCallback);
+	if ((caps & OBS_SOURCE_VIDEO) != 0) {
+		ui->rightLayout->setContentsMargins(0, 0, 0, 0);
+		ui->preview->show();
+		if (drawable_type)
+			connect(ui->preview, &OBSQTDisplay::DisplayCreated,
+					addDrawCallback);
+	} else {
+		ui->rightLayout->setContentsMargins(0, noPreviewMargin, 0, 0);
+		ui->preview->hide();
+	}
 }
 
 OBSBasicFilters::~OBSBasicFilters()
@@ -179,6 +186,15 @@ void OBSBasicFilters::UpdatePropertiesView(int row, bool async)
 			OBSBasicFilters::UpdateProperties,
 			this);
 
+	uint32_t caps = obs_source_get_output_flags(filter);
+	if ((caps & OBS_SOURCE_VIDEO)) {
+		ui->rightLayout->setContentsMargins(0, 0, 0, 0);
+		ui->preview->show();
+	} else {
+		ui->rightLayout->setContentsMargins(0, noPreviewMargin, 0, 0);
+		ui->preview->hide();
+	}
+
 	obs_data_release(settings);
 
 	view->setMaximumHeight(250);

+ 2 - 0
UI/window-basic-filters.hpp

@@ -72,6 +72,8 @@ private:
 
 	bool isAsync;
 
+	int noPreviewMargin;
+
 private slots:
 	void AddFilter(OBSSource filter);
 	void RemoveFilter(OBSSource filter);

+ 6 - 2
UI/window-basic-properties.cpp

@@ -114,15 +114,19 @@ OBSBasicProperties::OBSBasicProperties(QWidget *parent, OBSSource source_)
 		obs_display_add_draw_callback(preview->GetDisplay(),
 				OBSBasicProperties::DrawPreview, this);
 	};
-
 	enum obs_source_type type = obs_source_get_type(source);
 	uint32_t caps = obs_source_get_output_flags(source);
 	bool drawable_type = type == OBS_SOURCE_TYPE_INPUT ||
 		type == OBS_SOURCE_TYPE_SCENE;
+	bool drawable_preview = (caps & OBS_SOURCE_VIDEO) != 0;
 
-	if (drawable_type && (caps & OBS_SOURCE_VIDEO) != 0)
+	if (drawable_preview && drawable_type) {
+		preview->show();
 		connect(preview.data(), &OBSQTDisplay::DisplayCreated,
 				addDrawCallback);
+	} else {
+		preview->hide();
+	}
 }
 
 OBSBasicProperties::~OBSBasicProperties()