diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index 870eea85a..a14e29b51 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -2162,21 +2162,17 @@ - - - - Basic.Settings.Output.UseReplayBuffer - - - true - - - - + + + true + + + true + ReplayBuffer diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index b1e6bd6fb..60b8dd88f 100644 --- a/UI/window-basic-settings.cpp +++ b/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(); } diff --git a/UI/window-basic-settings.hpp b/UI/window-basic-settings.hpp index b874c0b85..c6aae1861 100644 --- a/UI/window-basic-settings.hpp +++ b/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,