Browse Source

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
Ryan Foster 8 years ago
parent
commit
f140104da8

+ 1 - 0
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.SystemTrayHideMinimize="Always minimize to system tray instead of task bar"
 Basic.Settings.General.SaveProjectors="Save projectors on exit"
 Basic.Settings.General.SaveProjectors="Save projectors on exit"
 Basic.Settings.General.SwitchOnDoubleClick="Transition to scene when double-clicked"
 Basic.Settings.General.SwitchOnDoubleClick="Transition to scene when double-clicked"
+Basic.Settings.General.StudioPortraitLayout="Enable portrait/vertical layout"
 
 
 # basic mode 'stream' settings
 # basic mode 'stream' settings
 Basic.Settings.Stream="Stream"
 Basic.Settings.Stream="Stream"

+ 10 - 3
UI/forms/OBSBasicSettings.ui

@@ -146,7 +146,7 @@
               <x>0</x>
               <x>0</x>
               <y>0</y>
               <y>0</y>
               <width>801</width>
               <width>801</width>
-              <height>698</height>
+              <height>715</height>
              </rect>
              </rect>
             </property>
             </property>
             <layout class="QVBoxLayout" name="verticalLayout_19">
             <layout class="QVBoxLayout" name="verticalLayout_19">
@@ -572,6 +572,13 @@
                      </property>
                      </property>
                     </spacer>
                     </spacer>
                    </item>
                    </item>
+                   <item row="1" column="1">
+                    <widget class="QCheckBox" name="studioPortraitLayout">
+                     <property name="text">
+                      <string>Basic.Settings.General.StudioPortraitLayout</string>
+                     </property>
+                    </widget>
+                   </item>
                   </layout>
                   </layout>
                  </widget>
                  </widget>
                 </item>
                 </item>
@@ -3349,7 +3356,7 @@
              <rect>
              <rect>
               <x>0</x>
               <x>0</x>
               <y>0</y>
               <y>0</y>
-              <width>80</width>
+              <width>63</width>
               <height>16</height>
               <height>16</height>
              </rect>
              </rect>
             </property>
             </property>
@@ -3733,7 +3740,7 @@
              <rect>
              <rect>
               <x>0</x>
               <x>0</x>
               <y>0</y>
               <y>0</y>
-              <width>593</width>
+              <width>803</width>
               <height>761</height>
               <height>761</height>
              </rect>
              </rect>
             </property>
             </property>

+ 2 - 0
UI/window-basic-main-transitions.cpp

@@ -1016,6 +1016,7 @@ void OBSBasic::SetPreviewProgramMode(bool enabled)
 
 
 		ui->previewLayout->addWidget(programOptions);
 		ui->previewLayout->addWidget(programOptions);
 		ui->previewLayout->addWidget(program);
 		ui->previewLayout->addWidget(program);
+		ui->previewLayout->setAlignment(programOptions, Qt::AlignCenter);
 		program->show();
 		program->show();
 
 
 		if (api)
 		if (api)
@@ -1059,6 +1060,7 @@ void OBSBasic::SetPreviewProgramMode(bool enabled)
 				"-------------------");
 				"-------------------");
 	}
 	}
 
 
+	ResetUI();
 	UpdateTitleBar();
 	UpdateTitleBar();
 }
 }
 
 

+ 11 - 0
UI/window-basic-main.cpp

@@ -2986,6 +2986,17 @@ static inline enum video_format GetVideoFormatFromName(const char *name)
 		return VIDEO_FORMAT_RGBA;
 		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()
 int OBSBasic::ResetVideo()
 {
 {
 	if (outputHandler && outputHandler->Active())
 	if (outputHandler && outputHandler->Active())

+ 1 - 0
UI/window-basic-main.hpp

@@ -494,6 +494,7 @@ public:
 	bool StreamingActive() const;
 	bool StreamingActive() const;
 	bool Active() const;
 	bool Active() const;
 
 
+	void ResetUI();
 	int  ResetVideo();
 	int  ResetVideo();
 	bool ResetAudio();
 	bool ResetAudio();
 
 

+ 13 - 0
UI/window-basic-settings.cpp

@@ -316,6 +316,7 @@ OBSBasicSettings::OBSBasicSettings(QWidget *parent)
 	HookWidget(ui->sourceSnapping,       CHECK_CHANGED,  GENERAL_CHANGED);
 	HookWidget(ui->sourceSnapping,       CHECK_CHANGED,  GENERAL_CHANGED);
 	HookWidget(ui->snapDistance,         DSCROLL_CHANGED,GENERAL_CHANGED);
 	HookWidget(ui->snapDistance,         DSCROLL_CHANGED,GENERAL_CHANGED);
 	HookWidget(ui->doubleClickSwitch,    CHECK_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->outputMode,           COMBO_CHANGED,  OUTPUTS_CHANGED);
 	HookWidget(ui->streamType,           COMBO_CHANGED,  STREAM1_CHANGED);
 	HookWidget(ui->streamType,           COMBO_CHANGED,  STREAM1_CHANGED);
 	HookWidget(ui->simpleOutputPath,     EDIT_CHANGED,   OUTPUTS_CHANGED);
 	HookWidget(ui->simpleOutputPath,     EDIT_CHANGED,   OUTPUTS_CHANGED);
@@ -1082,6 +1083,10 @@ void OBSBasicSettings::LoadGeneralSettings()
 			"BasicWindow", "TransitionOnDoubleClick");
 			"BasicWindow", "TransitionOnDoubleClick");
 	ui->doubleClickSwitch->setChecked(doubleClickSwitch);
 	ui->doubleClickSwitch->setChecked(doubleClickSwitch);
 
 
+	bool studioPortraitLayout = config_get_bool(GetGlobalConfig(),
+			"BasicWindow", "StudioPortraitLayout");
+	ui->studioPortraitLayout->setChecked(studioPortraitLayout);
+
 	loading = false;
 	loading = false;
 }
 }
 
 
@@ -2643,6 +2648,14 @@ void OBSBasicSettings::SaveGeneralSettings()
 		config_set_bool(GetGlobalConfig(), "BasicWindow",
 		config_set_bool(GetGlobalConfig(), "BasicWindow",
 				"SaveProjectors",
 				"SaveProjectors",
 				ui->saveProjectors->isChecked());
 				ui->saveProjectors->isChecked());
+
+	if (WidgetChanged(ui->studioPortraitLayout)) {
+		config_set_bool(GetGlobalConfig(), "BasicWindow",
+				"StudioPortraitLayout",
+				ui->studioPortraitLayout->isChecked());
+
+		main->ResetUI();
+	}
 }
 }
 
 
 void OBSBasicSettings::SaveStream1Settings()
 void OBSBasicSettings::SaveStream1Settings()