From 5a5efa0b3e70ec862d5cc7889f13d76501377579 Mon Sep 17 00:00:00 2001 From: Clayton Groenveld Date: Thu, 28 Feb 2019 15:29:41 -0600 Subject: [PATCH] UI: Add preview/program labels in studio mode --- UI/data/locale/en-US.ini | 1 + UI/data/themes/Acri.qss | 8 ++++++++ UI/data/themes/Dark.qss | 8 ++++++++ UI/data/themes/Default.qss | 8 ++++++++ UI/data/themes/Rachni.qss | 8 ++++++++ UI/forms/OBSBasic.ui | 13 ++++++++++--- UI/forms/OBSBasicSettings.ui | 28 +++++++++++++++++++--------- UI/obs-app.cpp | 2 ++ UI/window-basic-main-transitions.cpp | 27 +++++++++++++++++++++++++-- UI/window-basic-main.cpp | 20 ++++++++++++++++++++ UI/window-basic-main.hpp | 4 ++++ UI/window-basic-settings.cpp | 13 +++++++++++++ 12 files changed, 126 insertions(+), 14 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index cf4b27bb2..16b738b9f 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -604,6 +604,7 @@ Basic.Settings.General.OverflowAlwaysVisible="Overflow always visible" Basic.Settings.General.OverflowSelectionHidden="Show overflow even when source is invisible" Basic.Settings.General.SwitchOnDoubleClick="Transition to scene when double-clicked" Basic.Settings.General.StudioPortraitLayout="Enable portrait/vertical layout" +Basic.Settings.General.TogglePreviewProgramLabels="Show preview/program labels" Basic.Settings.General.Multiview="Multiview" Basic.Settings.General.Multiview.MouseSwitch="Click to switch between scenes" Basic.Settings.General.Multiview.DrawSourceNames="Show scene names" diff --git a/UI/data/themes/Acri.qss b/UI/data/themes/Acri.qss index f562e9388..d29cb97dc 100644 --- a/UI/data/themes/Acri.qss +++ b/UI/data/themes/Acri.qss @@ -907,3 +907,11 @@ FocusList::item { * [themeID="displayBackgroundColor"] { qproperty-displayBackgroundColor: #28282A; } + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(122,121,122); +} diff --git a/UI/data/themes/Dark.qss b/UI/data/themes/Dark.qss index 5441a195d..b260aa054 100644 --- a/UI/data/themes/Dark.qss +++ b/UI/data/themes/Dark.qss @@ -698,3 +698,11 @@ QLabel#errorLabel { * [themeID="displayBackgroundColor"] { qproperty-displayBackgroundColor: rgb(76, 76, 76); } + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(122,121,122); +} diff --git a/UI/data/themes/Default.qss b/UI/data/themes/Default.qss index c5a010ab5..13cafc224 100644 --- a/UI/data/themes/Default.qss +++ b/UI/data/themes/Default.qss @@ -141,3 +141,11 @@ QLabel#errorLabel { * [themeID="displayBackgroundColor"] { qproperty-displayBackgroundColor: rgb(76, 76, 76); } + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(122,121,122); +} diff --git a/UI/data/themes/Rachni.qss b/UI/data/themes/Rachni.qss index 61113f812..51550eb55 100644 --- a/UI/data/themes/Rachni.qss +++ b/UI/data/themes/Rachni.qss @@ -1263,3 +1263,11 @@ QToolTip { * [themeID="displayBackgroundColor"] { qproperty-displayBackgroundColor: rgb(35, 38, 41); } + +/* Preview/Program labels */ + +* [themeID="previewProgramLabels"] { + font-size: 18px; + font-weight: bold; + color: rgb(122,121,122); +} diff --git a/UI/forms/OBSBasic.ui b/UI/forms/OBSBasic.ui index bc1923469..530b05669 100644 --- a/UI/forms/OBSBasic.ui +++ b/UI/forms/OBSBasic.ui @@ -69,6 +69,13 @@ 4 + + + + StudioMode.Preview + + + @@ -106,7 +113,7 @@ 0 0 1079 - 21 + 25 @@ -644,7 +651,7 @@ 0 0 - 230 + 82 16 @@ -698,7 +705,7 @@ 0 0 16 - 230 + 26 diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index d4d8a4e20..00e35123f 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -144,9 +144,9 @@ 0 - 0 - 801 - 931 + -540 + 804 + 1264 @@ -634,6 +634,16 @@ + + + + Basic.Settings.General.TogglePreviewProgramLabels + + + true + + + @@ -1144,8 +1154,8 @@ 0 0 - 601 - 640 + 890 + 791 @@ -3845,8 +3855,8 @@ 0 0 - 63 - 16 + 98 + 28 @@ -4259,8 +4269,8 @@ 0 0 - 594 - 833 + 867 + 1061 diff --git a/UI/obs-app.cpp b/UI/obs-app.cpp index 009a93f52..9a12015cc 100644 --- a/UI/obs-app.cpp +++ b/UI/obs-app.cpp @@ -418,6 +418,8 @@ bool OBSApp::InitGlobalConfigDefaults() "ShowListboxToolbars", true); config_set_default_bool(globalConfig, "BasicWindow", "ShowStatusBar", true); + config_set_default_bool(globalConfig, "BasicWindow", + "StudioModeLabels", true); if (!config_get_bool(globalConfig, "General", "Pre21Defaults")) { config_set_default_string(globalConfig, "General", diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index baed893a9..7295bc8e5 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -696,6 +696,7 @@ void OBSBasic::SetCurrentScene(OBSSource scene, bool force, bool direct) void OBSBasic::CreateProgramDisplay() { program = new OBSQTDisplay(); + program->setContextMenuPolicy(Qt::CustomContextMenu); connect(program.data(), &QWidget::customContextMenuRequested, this, &OBSBasic::on_program_customContextMenuRequested); @@ -1192,6 +1193,8 @@ void OBSBasic::SetPreviewProgramMode(bool enabled) if (IsPreviewProgramMode() == enabled) return; + ui->previewLabel->setHidden(!enabled); + ui->modeSwitch->setChecked(enabled); os_atomic_set_bool(&previewProgramMode, enabled); @@ -1230,10 +1233,28 @@ void OBSBasic::SetPreviewProgramMode(bool enabled) RefreshQuickTransitions(); + programLabel = new QLabel(QTStr("StudioMode.Program")); + programLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + programLabel->setProperty("themeID", "previewProgramLabels"); + + programWidget = new QWidget(); + programLayout = new QVBoxLayout(); + + programLayout->setContentsMargins(0, 0, 0, 0); + + programLayout->addWidget(programLabel); + programLayout->addWidget(program); + + bool labels = config_get_bool(GetGlobalConfig(), + "BasicWindow", "StudioModeLabels"); + + programLabel->setHidden(!labels); + + programWidget->setLayout(programLayout); + ui->previewLayout->addWidget(programOptions); - ui->previewLayout->addWidget(program); + ui->previewLayout->addWidget(programWidget); ui->previewLayout->setAlignment(programOptions, Qt::AlignCenter); - program->show(); if (api) api->on_event(OBS_FRONTEND_EVENT_STUDIO_MODE_ENABLED); @@ -1251,6 +1272,8 @@ void OBSBasic::SetPreviewProgramMode(bool enabled) delete programOptions; delete program; + delete programLabel; + delete programWidget; if (lastScene) { OBSSource actualLastScene = OBSGetStrongRef(lastScene); diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index 1ab536f66..1a318f357 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -371,6 +371,17 @@ OBSBasic::OBSBasic(QWidget *parent) QPoint statsDockPos = curSize / 2 - statsDockSize / 2; QPoint newPos = curPos + statsDockPos; statsDock->move(newPos); + + ui->previewLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter); + ui->previewLabel->setProperty("themeID", "previewProgramLabels"); + + bool labels = config_get_bool(GetGlobalConfig(), + "BasicWindow", "StudioModeLabels"); + + if (!previewProgramMode) + ui->previewLabel->setHidden(true); + else + ui->previewLabel->setHidden(!labels); } static void SaveAudioDevice(const char *name, int channel, obs_data_t *parent, @@ -3437,10 +3448,19 @@ void OBSBasic::ResetUI() bool studioPortraitLayout = config_get_bool(GetGlobalConfig(), "BasicWindow", "StudioPortraitLayout"); + bool labels = config_get_bool(GetGlobalConfig(), + "BasicWindow", "StudioModeLabels"); + if (studioPortraitLayout) ui->previewLayout->setDirection(QBoxLayout::TopToBottom); else ui->previewLayout->setDirection(QBoxLayout::LeftToRight); + + if (previewProgramMode) + ui->previewLabel->setHidden(!labels); + + if (programLabel) + programLabel->setHidden(!labels); } int OBSBasic::ResetVideo() diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index 2ee43915f..0d8037a54 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -229,6 +229,10 @@ private: QPointer perSceneTransitionMenu; QPointer shortcutFilter; + QPointer programWidget; + QPointer programLayout; + QPointer programLabel; + void UpdateMultiviewProjectorMenu(); void DrawBackdrop(float cx, float cy); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index f2de99e57..46ed124b7 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -325,6 +325,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->overflowSelectionHide,CHECK_CHANGED, GENERAL_CHANGED); HookWidget(ui->doubleClickSwitch, CHECK_CHANGED, GENERAL_CHANGED); HookWidget(ui->studioPortraitLayout, CHECK_CHANGED, GENERAL_CHANGED); + HookWidget(ui->prevProgLabelToggle, 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); @@ -1120,6 +1121,10 @@ void OBSBasicSettings::LoadGeneralSettings() "BasicWindow", "StudioPortraitLayout"); ui->studioPortraitLayout->setChecked(studioPortraitLayout); + bool prevProgLabels = config_get_bool(GetGlobalConfig(), + "BasicWindow", "StudioModeLabels"); + ui->prevProgLabelToggle->setChecked(prevProgLabels); + bool multiviewMouseSwitch = config_get_bool(GetGlobalConfig(), "BasicWindow", "MultiviewMouseSwitch"); ui->multiviewMouseSwitch->setChecked(multiviewMouseSwitch); @@ -2767,6 +2772,14 @@ void OBSBasicSettings::SaveGeneralSettings() main->ResetUI(); } + if (WidgetChanged(ui->prevProgLabelToggle)) { + config_set_bool(GetGlobalConfig(), "BasicWindow", + "StudioModeLabels", + ui->prevProgLabelToggle->isChecked()); + + main->ResetUI(); + } + bool multiviewChanged = false; if (WidgetChanged(ui->multiviewMouseSwitch)) { config_set_bool(GetGlobalConfig(), "BasicWindow", -- GitLab