diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini
index b46f1e686..0a2056640 100644
--- a/UI/data/locale/en-US.ini
+++ b/UI/data/locale/en-US.ini
@@ -574,6 +574,7 @@ Basic.Settings.General.StudioPortraitLayout="Enable portrait/vertical layout"
Basic.Settings.General.Multiview="Multiview"
Basic.Settings.General.Multiview.MouseSwitch="Click to switch between scenes"
Basic.Settings.General.Multiview.DrawSourceNames="Show scene names"
+Basic.Settings.General.Multiview.DrawSafeAreas="Draw safe areas (EBU R 95)"
Basic.Settings.General.MultiviewLayout="Multiview Layout"
Basic.Settings.General.MultiviewLayout.Horizontal.Top="Horizontal, Top (8 Scenes)"
Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horizontal, Bottom (8 Scenes)"
diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui
index 6fbfe2a5f..8144f7ec4 100644
--- a/UI/forms/OBSBasicSettings.ui
+++ b/UI/forms/OBSBasicSettings.ui
@@ -637,9 +637,19 @@
-
+
+
+ Basic.Settings.General.Multiview.DrawSafeAreas
+
+
+ true
+
+
+
+ -
- -
+
-
Basic.Settings.General.MultiviewLayout
diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp
index 22e6088b0..2db37b583 100644
--- a/UI/obs-app.cpp
+++ b/UI/obs-app.cpp
@@ -427,6 +427,9 @@ bool OBSApp::InitGlobalConfigDefaults()
config_set_default_bool(globalConfig, "BasicWindow",
"MultiviewDrawNames", true);
+ config_set_default_bool(globalConfig, "BasicWindow",
+ "MultiviewDrawAreas", true);
+
#ifdef _WIN32
config_set_default_bool(globalConfig, "Audio", "DisableAudioDucking",
true);
diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp
index 639df4ae9..b433e47b1 100644
--- a/UI/window-basic-settings.cpp
+++ b/UI/window-basic-settings.cpp
@@ -320,6 +320,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
HookWidget(ui->studioPortraitLayout, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->multiviewMouseSwitch, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->multiviewDrawNames, CHECK_CHANGED, GENERAL_CHANGED);
+ HookWidget(ui->multiviewDrawAreas, CHECK_CHANGED, GENERAL_CHANGED);
HookWidget(ui->multiviewLayout, COMBO_CHANGED, GENERAL_CHANGED);
HookWidget(ui->outputMode, COMBO_CHANGED, OUTPUTS_CHANGED);
HookWidget(ui->streamType, COMBO_CHANGED, STREAM1_CHANGED);
@@ -1110,6 +1111,10 @@ void OBSBasicSettings::LoadGeneralSettings()
"BasicWindow", "MultiviewDrawNames");
ui->multiviewDrawNames->setChecked(multiviewDrawNames);
+ bool multiviewDrawAreas = config_get_bool(GetGlobalConfig(),
+ "BasicWindow", "MultiviewDrawAreas");
+ ui->multiviewDrawAreas->setChecked(multiviewDrawAreas);
+
ui->multiviewLayout->addItem(QTStr(
"Basic.Settings.General.MultiviewLayout.Horizontal.Top"),
static_cast(MultiviewLayout::HORIZONTAL_TOP_8_SCENES));
@@ -2724,6 +2729,11 @@ void OBSBasicSettings::SaveGeneralSettings()
"MultiviewDrawNames",
ui->multiviewDrawNames->isChecked());
+ if (WidgetChanged(ui->multiviewDrawAreas))
+ config_set_bool(GetGlobalConfig(), "BasicWindow",
+ "MultiviewDrawAreas",
+ ui->multiviewDrawAreas->isChecked());
+
if (WidgetChanged(ui->multiviewLayout)) {
config_set_int(GetGlobalConfig(), "BasicWindow",
"MultiviewLayout",
diff --git a/UI/window-projector.cpp b/UI/window-projector.cpp
index f5febb479..2fa6dd606 100644
--- a/UI/window-projector.cpp
+++ b/UI/window-projector.cpp
@@ -550,12 +550,18 @@ void OBSProjector::OBSRenderMultiview(void *data, uint32_t cx, uint32_t cy)
obs_source_video_render(previewSrc);
else
obs_render_main_texture();
- renderVB(window->actionSafeMargin, targetCX, targetCY, outerColor);
- renderVB(window->graphicsSafeMargin, targetCX, targetCY, outerColor);
- renderVB(window->fourByThreeSafeMargin, targetCX, targetCY, outerColor);
- renderVB(window->leftLine, targetCX, targetCY, outerColor);
- renderVB(window->topLine, targetCX, targetCY, outerColor);
- renderVB(window->rightLine, targetCX, targetCY, outerColor);
+ if (config_get_bool(GetGlobalConfig(), "BasicWindow",
+ "MultiviewDrawAreas")) {
+ renderVB(window->actionSafeMargin, targetCX, targetCY,
+ outerColor);
+ renderVB(window->graphicsSafeMargin, targetCX, targetCY,
+ outerColor);
+ renderVB(window->fourByThreeSafeMargin, targetCX, targetCY,
+ outerColor);
+ renderVB(window->leftLine, targetCX, targetCY, outerColor);
+ renderVB(window->topLine, targetCX, targetCY, outerColor);
+ renderVB(window->rightLine, targetCX, targetCY, outerColor);
+ }
endRegion();
gs_matrix_pop();