From f140104da81fe463ccdee9fdd36b947381122956 Mon Sep 17 00:00:00 2001 From: Ryan Foster Date: Wed, 8 Nov 2017 23:44:22 -0500 Subject: [PATCH] UI: Add Studio Mode layout option for portrait mode displays This commit adds a checkbox to general setting to allow users to enable a vertically oriented layout for studio mode. This commit addresses mantis issue 827: https://obsproject.com/mantis/view.php?id=827 Closes jp9000/obs-studio#1072 --- UI/data/locale/en-US.ini | 1 + UI/forms/OBSBasicSettings.ui | 13 ++++++++++--- UI/window-basic-main-transitions.cpp | 2 ++ UI/window-basic-main.cpp | 11 +++++++++++ UI/window-basic-main.hpp | 1 + UI/window-basic-settings.cpp | 13 +++++++++++++ 6 files changed, 38 insertions(+), 3 deletions(-) diff --git a/UI/data/locale/en-US.ini b/UI/data/locale/en-US.ini index ef12a94a2..84442e874 100644 --- a/UI/data/locale/en-US.ini +++ b/UI/data/locale/en-US.ini @@ -558,6 +558,7 @@ Basic.Settings.General.SysTrayWhenStarted="Minimize to system tray when started" Basic.Settings.General.SystemTrayHideMinimize="Always minimize to system tray instead of task bar" Basic.Settings.General.SaveProjectors="Save projectors on exit" Basic.Settings.General.SwitchOnDoubleClick="Transition to scene when double-clicked" +Basic.Settings.General.StudioPortraitLayout="Enable portrait/vertical layout" # basic mode 'stream' settings Basic.Settings.Stream="Stream" diff --git a/UI/forms/OBSBasicSettings.ui b/UI/forms/OBSBasicSettings.ui index 251bdcf56..05c48fb34 100644 --- a/UI/forms/OBSBasicSettings.ui +++ b/UI/forms/OBSBasicSettings.ui @@ -146,7 +146,7 @@ 0 0 801 - 698 + 715 @@ -572,6 +572,13 @@ + + + + Basic.Settings.General.StudioPortraitLayout + + + @@ -3349,7 +3356,7 @@ 0 0 - 80 + 63 16 @@ -3733,7 +3740,7 @@ 0 0 - 593 + 803 761 diff --git a/UI/window-basic-main-transitions.cpp b/UI/window-basic-main-transitions.cpp index b65c14485..06ec0ace1 100644 --- a/UI/window-basic-main-transitions.cpp +++ b/UI/window-basic-main-transitions.cpp @@ -1016,6 +1016,7 @@ void OBSBasic::SetPreviewProgramMode(bool enabled) ui->previewLayout->addWidget(programOptions); ui->previewLayout->addWidget(program); + ui->previewLayout->setAlignment(programOptions, Qt::AlignCenter); program->show(); if (api) @@ -1059,6 +1060,7 @@ void OBSBasic::SetPreviewProgramMode(bool enabled) "-------------------"); } + ResetUI(); UpdateTitleBar(); } diff --git a/UI/window-basic-main.cpp b/UI/window-basic-main.cpp index d6a03fc33..da77c7d68 100644 --- a/UI/window-basic-main.cpp +++ b/UI/window-basic-main.cpp @@ -2986,6 +2986,17 @@ static inline enum video_format GetVideoFormatFromName(const char *name) return VIDEO_FORMAT_RGBA; } +void OBSBasic::ResetUI() +{ + bool studioPortraitLayout = config_get_bool(GetGlobalConfig(), + "BasicWindow", "StudioPortraitLayout"); + + if (studioPortraitLayout) + ui->previewLayout->setDirection(QBoxLayout::TopToBottom); + else + ui->previewLayout->setDirection(QBoxLayout::LeftToRight); +} + int OBSBasic::ResetVideo() { if (outputHandler && outputHandler->Active()) diff --git a/UI/window-basic-main.hpp b/UI/window-basic-main.hpp index d52059bae..9a72d470f 100644 --- a/UI/window-basic-main.hpp +++ b/UI/window-basic-main.hpp @@ -494,6 +494,7 @@ public: bool StreamingActive() const; bool Active() const; + void ResetUI(); int ResetVideo(); bool ResetAudio(); diff --git a/UI/window-basic-settings.cpp b/UI/window-basic-settings.cpp index 24d1fc4ff..87e885a51 100644 --- a/UI/window-basic-settings.cpp +++ b/UI/window-basic-settings.cpp @@ -316,6 +316,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent) HookWidget(ui->sourceSnapping, CHECK_CHANGED, GENERAL_CHANGED); HookWidget(ui->snapDistance, DSCROLL_CHANGED,GENERAL_CHANGED); HookWidget(ui->doubleClickSwitch, CHECK_CHANGED, GENERAL_CHANGED); + HookWidget(ui->studioPortraitLayout, CHECK_CHANGED, GENERAL_CHANGED); HookWidget(ui->outputMode, COMBO_CHANGED, OUTPUTS_CHANGED); HookWidget(ui->streamType, COMBO_CHANGED, STREAM1_CHANGED); HookWidget(ui->simpleOutputPath, EDIT_CHANGED, OUTPUTS_CHANGED); @@ -1082,6 +1083,10 @@ void OBSBasicSettings::LoadGeneralSettings() "BasicWindow", "TransitionOnDoubleClick"); ui->doubleClickSwitch->setChecked(doubleClickSwitch); + bool studioPortraitLayout = config_get_bool(GetGlobalConfig(), + "BasicWindow", "StudioPortraitLayout"); + ui->studioPortraitLayout->setChecked(studioPortraitLayout); + loading = false; } @@ -2643,6 +2648,14 @@ void OBSBasicSettings::SaveGeneralSettings() config_set_bool(GetGlobalConfig(), "BasicWindow", "SaveProjectors", ui->saveProjectors->isChecked()); + + if (WidgetChanged(ui->studioPortraitLayout)) { + config_set_bool(GetGlobalConfig(), "BasicWindow", + "StudioPortraitLayout", + ui->studioPortraitLayout->isChecked()); + + main->ResetUI(); + } } void OBSBasicSettings::SaveStream1Settings()