Jelajahi Sumber

UI: Make replay buffer settings always visible in Simple Mode

Instead of a checkbox in the recording group that reveals the replay
buffer group when pressed, the replay buffer group now has its own
toggle that enables or disables the replay buffer.
gxalpha 3 tahun lalu
induk
melakukan
e9ecb6c565
3 mengubah file dengan 29 tambahan dan 22 penghapusan
  1. 7 11
      UI/forms/OBSBasicSettings.ui
  2. 20 11
      UI/window-basic-settings.cpp
  3. 2 0
      UI/window-basic-settings.hpp

+ 7 - 11
UI/forms/OBSBasicSettings.ui

@@ -2162,21 +2162,17 @@
                        <item row="7" column="1">
                         <widget class="QLineEdit" name="simpleOutMuxCustom"/>
                        </item>
-                       <item row="8" column="1">
-                        <widget class="QCheckBox" name="simpleReplayBuf">
-                         <property name="text">
-                          <string>Basic.Settings.Output.UseReplayBuffer</string>
-                         </property>
-                         <property name="checked">
-                          <bool>true</bool>
-                         </property>
-                        </widget>
-                       </item>
                       </layout>
                      </widget>
                     </item>
                     <item>
-                     <widget class="QGroupBox" name="replayBufferGroupBox">
+                     <widget class="QGroupBox" name="simpleReplayBuf">
+                      <property name="checkable">
+                       <bool>true</bool>
+                      </property>
+                      <property name="checked">
+                       <bool>true</bool>
+                      </property>
                       <property name="title">
                        <string>ReplayBuffer</string>
                       </property>

+ 20 - 11
UI/window-basic-settings.cpp

@@ -437,7 +437,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
 	HookWidget(ui->simpleOutRecTrack5,   CHECK_CHANGED,  OUTPUTS_CHANGED);
 	HookWidget(ui->simpleOutRecTrack6,   CHECK_CHANGED,  OUTPUTS_CHANGED);
 	HookWidget(ui->simpleOutMuxCustom,   EDIT_CHANGED,   OUTPUTS_CHANGED);
-	HookWidget(ui->simpleReplayBuf,      CHECK_CHANGED,  OUTPUTS_CHANGED);
+	HookWidget(ui->simpleReplayBuf,      GROUP_CHANGED,  OUTPUTS_CHANGED);
 	HookWidget(ui->simpleRBSecMax,       SCROLL_CHANGED, OUTPUTS_CHANGED);
 	HookWidget(ui->simpleRBMegsMax,      SCROLL_CHANGED, OUTPUTS_CHANGED);
 	HookWidget(ui->advOutEncoder,        COMBO_CHANGED,  OUTPUTS_CHANGED);
@@ -774,7 +774,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
 		&OBSBasicSettings::SimpleRecordingEncoderChanged);
 	connect(ui->ignoreRecommended, &QCheckBox::toggled, this,
 		&OBSBasicSettings::SimpleRecordingEncoderChanged);
-	connect(ui->simpleReplayBuf, &QCheckBox::toggled, this,
+	connect(ui->simpleReplayBuf, &QGroupBox::toggled, this,
 		&OBSBasicSettings::SimpleReplayBufferChanged);
 	connect(ui->simpleOutputVBitrate, &QSpinBox::valueChanged, this,
 		&OBSBasicSettings::SimpleReplayBufferChanged);
@@ -1024,6 +1024,14 @@ void OBSBasicSettings::SaveSpinBox(QSpinBox *widget, const char *section,
 		config_set_int(main->Config(), section, value, widget->value());
 }
 
+void OBSBasicSettings::SaveGroupBox(QGroupBox *widget, const char *section,
+				    const char *value)
+{
+	if (WidgetChanged(widget))
+		config_set_bool(main->Config(), section, value,
+				widget->isChecked());
+}
+
 #define CS_PARTIAL_STR QTStr("Basic.Settings.Advanced.Video.ColorRange.Partial")
 #define CS_FULL_STR QTStr("Basic.Settings.Advanced.Video.ColorRange.Full")
 
@@ -2448,7 +2456,7 @@ void OBSBasicSettings::LoadOutputSettings()
 		ui->simpleOutStrAEncoderLabel->setEnabled(false);
 		ui->simpleOutStrAEncoder->setEnabled(false);
 		ui->simpleRecordingGroupBox->setEnabled(false);
-		ui->replayBufferGroupBox->setEnabled(false);
+		ui->simpleReplayBuf->setEnabled(false);
 		ui->advOutTopContainer->setEnabled(false);
 		ui->advOutRecTopContainer->setEnabled(false);
 		ui->advOutRecTypeContainer->setEnabled(false);
@@ -3798,7 +3806,7 @@ void OBSBasicSettings::SaveOutputSettings()
 	SaveComboData(ui->simpleOutRecAEncoder, "SimpleOutput",
 		      "RecAudioEncoder");
 	SaveEdit(ui->simpleOutMuxCustom, "SimpleOutput", "MuxerCustom");
-	SaveCheckBox(ui->simpleReplayBuf, "SimpleOutput", "RecRB");
+	SaveGroupBox(ui->simpleReplayBuf, "SimpleOutput", "RecRB");
 	SaveSpinBox(ui->simpleRBSecMax, "SimpleOutput", "RecRBTime");
 	SaveSpinBox(ui->simpleRBMegsMax, "SimpleOutput", "RecRBSize");
 	config_set_int(main->Config(), "SimpleOutput", "RecTracks",
@@ -5460,12 +5468,16 @@ void OBSBasicSettings::UpdateAutomaticReplayBufferCheckboxes()
 {
 	bool state = false;
 	switch (ui->outputMode->currentIndex()) {
-	case 0:
+	case 0: {
+		const bool lossless =
+			ui->simpleOutRecQuality->currentData().toString() ==
+			"Lossless";
 		state = ui->simpleReplayBuf->isChecked();
 		ui->simpleReplayBuf->setEnabled(
-			!obs_frontend_replay_buffer_active());
+			!obs_frontend_replay_buffer_active() && !lossless);
 		break;
-	case 1:
+	}
+	case 1: {
 		state = ui->advReplayBuf->isChecked();
 		bool customFFmpeg = ui->advOutRecType->currentIndex() == 1;
 		ui->advReplayBuf->setEnabled(
@@ -5473,6 +5485,7 @@ void OBSBasicSettings::UpdateAutomaticReplayBufferCheckboxes()
 		ui->advReplayBufCustomFFmpeg->setVisible(customFFmpeg);
 		break;
 	}
+	}
 	ui->replayWhileStreaming->setEnabled(state);
 	ui->keepReplayStreamStops->setEnabled(
 		state && ui->replayWhileStreaming->isChecked());
@@ -5481,8 +5494,6 @@ void OBSBasicSettings::UpdateAutomaticReplayBufferCheckboxes()
 void OBSBasicSettings::SimpleReplayBufferChanged()
 {
 	QString qual = ui->simpleOutRecQuality->currentData().toString();
-	bool replayBufferEnabled = ui->simpleReplayBuf->isChecked();
-	bool lossless = qual == "Lossless";
 	bool streamQuality = qual == "Stream";
 	int abitrate = 0;
 
@@ -5539,8 +5550,6 @@ void OBSBasicSettings::SimpleReplayBufferChanged()
 	}
 
 	ui->simpleRBEstimate->style()->polish(ui->simpleRBEstimate);
-	ui->replayBufferGroupBox->setVisible(!lossless && replayBufferEnabled);
-	ui->simpleReplayBuf->setVisible(!lossless);
 
 	UpdateAutomaticReplayBufferCheckboxes();
 }

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

@@ -168,6 +168,8 @@ private:
 			   const char *value);
 	void SaveCheckBox(QAbstractButton *widget, const char *section,
 			  const char *value, bool invert = false);
+	void SaveGroupBox(QGroupBox *widget, const char *section,
+			  const char *value);
 	void SaveEdit(QLineEdit *widget, const char *section,
 		      const char *value);
 	void SaveSpinBox(QSpinBox *widget, const char *section,