diff --git a/frontend/OBSApp.cpp b/frontend/OBSApp.cpp index b14aa2f56..1bf3f80ea 100644 --- a/frontend/OBSApp.cpp +++ b/frontend/OBSApp.cpp @@ -362,7 +362,7 @@ void OBSApp::InitUserConfigDefaults() config_set_default_bool(userConfig, "BasicWindow", "ShowContextToolbars", true); config_set_default_bool(userConfig, "BasicWindow", "StudioModeLabels", true); - config_set_default_bool(userConfig, "BasicWindow", "VerticalVolControl", false); + config_set_default_bool(userConfig, "BasicWindow", "VerticalVolControl", true); config_set_default_bool(userConfig, "BasicWindow", "MultiviewMouseSwitch", true); diff --git a/frontend/forms/OBSBasic.ui b/frontend/forms/OBSBasic.ui index e3c0600e5..82d125c28 100644 --- a/frontend/forms/OBSBasic.ui +++ b/frontend/forms/OBSBasic.ui @@ -7,8 +7,8 @@ 0 0 - 1086 - 729 + 1280 + 960 @@ -703,7 +703,7 @@ 0 0 - 1086 + 1280 22 @@ -1289,7 +1289,7 @@ 0 0 - 322 + 380 16 @@ -2213,7 +2213,7 @@ true - false + true Basic.MainMenu.Docks.SideDocks diff --git a/frontend/widgets/OBSBasic.cpp b/frontend/widgets/OBSBasic.cpp index cad4f752e..eae813d2d 100644 --- a/frontend/widgets/OBSBasic.cpp +++ b/frontend/widgets/OBSBasic.cpp @@ -285,7 +285,6 @@ OBSBasic::OBSBasic(QWidget *parent) : OBSMainWindow(parent), undo_s(ui), ui(new controlsDock->setWindowTitle(QTStr("Basic.Main.Controls")); /* Parenting is done there so controls will be deleted alongside controlsDock */ controlsDock->setWidget(controls); - addDockWidget(Qt::BottomDockWidgetArea, controlsDock); connect(controls, &OBSBasicControls::StreamButtonClicked, this, &OBSBasic::StreamActionTriggered); @@ -342,6 +341,17 @@ OBSBasic::OBSBasic(QWidget *parent) : OBSMainWindow(parent), undo_s(ui), ui(new connect(ui->transitionDuration, &QSpinBox::valueChanged, this, [this](int value) { SetTransitionDuration(value); }); + /* Main window default layout */ + setDockCornersVertical(true); + + /* Scenes and Sources dock on left + * This specific arrangement can't be set up in Qt Designer */ + addDockWidget(Qt::LeftDockWidgetArea, ui->scenesDock); + splitDockWidget(ui->scenesDock, ui->sourcesDock, Qt::Vertical); + int sideDockWidth = std::min(width() * 30 / 100, 320); + resizeDocks({ui->scenesDock, ui->sourcesDock}, {sideDockWidth, sideDockWidth}, Qt::Horizontal); + addDockWidget(Qt::BottomDockWidgetArea, controlsDock); + startingDockLayout = saveState(); statsDock = new OBSDock(); @@ -1232,10 +1242,8 @@ void OBSBasic::OBSInit() ui->lockDocks->blockSignals(false); bool sideDocks = config_get_bool(App()->GetUserConfig(), "BasicWindow", "SideDocks"); - on_sideDocks_toggled(sideDocks); - ui->sideDocks->blockSignals(true); ui->sideDocks->setChecked(sideDocks); - ui->sideDocks->blockSignals(false); + setDockCornersVertical(sideDocks); SystemTray(true); diff --git a/frontend/widgets/OBSBasic.hpp b/frontend/widgets/OBSBasic.hpp index f36620526..913f9c93d 100644 --- a/frontend/widgets/OBSBasic.hpp +++ b/frontend/widgets/OBSBasic.hpp @@ -456,6 +456,7 @@ public: void RemoveDockWidget(const QString &name); bool IsDockObjectNameUsed(const QString &name); void AddCustomDockWidget(QDockWidget *dock); + void setDockCornersVertical(bool vertical); private slots: void on_resetDocks_triggered(bool force = false); diff --git a/frontend/widgets/OBSBasic_Docks.cpp b/frontend/widgets/OBSBasic_Docks.cpp index 876a1e1f0..b35839ef0 100644 --- a/frontend/widgets/OBSBasic_Docks.cpp +++ b/frontend/widgets/OBSBasic_Docks.cpp @@ -74,21 +74,12 @@ void OBSBasic::on_resetDocks_triggered(bool force) #undef RESET_DOCKLIST restoreState(startingDockLayout); + ui->sideDocks->setChecked(true); int cx = width(); - int cy = height(); + int bottomDocksHeight = height(); - int cx22_5 = cx * 225 / 1000; - int cx5 = cx * 5 / 100; - int cx21 = cx * 21 / 100; - - cy = cy * 225 / 1000; - - int mixerSize = cx - (cx22_5 * 2 + cx5 + cx21); - - QList docks{ui->scenesDock, ui->sourcesDock, ui->mixerDock, ui->transitionsDock, controlsDock}; - - QList sizes{cx22_5, cx22_5, mixerSize, cx5, cx21}; + bottomDocksHeight = bottomDocksHeight * 225 / 1000; ui->scenesDock->setVisible(true); ui->sourcesDock->setVisible(true); @@ -98,8 +89,13 @@ void OBSBasic::on_resetDocks_triggered(bool force) statsDock->setVisible(false); statsDock->setFloating(true); - resizeDocks(docks, {cy, cy, cy, cy, cy}, Qt::Vertical); - resizeDocks(docks, sizes, Qt::Horizontal); + QList bottomDocks{ui->mixerDock, ui->transitionsDock, controlsDock}; + + resizeDocks(bottomDocks, {bottomDocksHeight, bottomDocksHeight, bottomDocksHeight}, Qt::Vertical); + resizeDocks(bottomDocks, {cx * 45 / 100, cx * 14 / 100, cx * 16 / 100}, Qt::Horizontal); + + int sideDockWidth = std::min(width() * 30 / 100, 280); + resizeDocks({ui->scenesDock, ui->sourcesDock}, {sideDockWidth, sideDockWidth}, Qt::Horizontal); activateWindow(); } @@ -135,17 +131,9 @@ void OBSBasic::on_lockDocks_toggled(bool lock) void OBSBasic::on_sideDocks_toggled(bool side) { - if (side) { - setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); - setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); - setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); - setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); - } else { - setCorner(Qt::TopLeftCorner, Qt::TopDockWidgetArea); - setCorner(Qt::TopRightCorner, Qt::TopDockWidgetArea); - setCorner(Qt::BottomLeftCorner, Qt::BottomDockWidgetArea); - setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea); - } + config_set_bool(App()->GetUserConfig(), "BasicWindow", "SideDocks", side); + + setDockCornersVertical(side); } void OBSBasic::AddDockWidget(QDockWidget *dock, Qt::DockWidgetArea area, bool extraBrowser) @@ -232,6 +220,21 @@ void OBSBasic::AddCustomDockWidget(QDockWidget *dock) extraCustomDocks.push_back(dock); } +void OBSBasic::setDockCornersVertical(bool vertical) +{ + if (vertical) { + setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); + setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); + setCorner(Qt::BottomLeftCorner, Qt::LeftDockWidgetArea); + setCorner(Qt::BottomRightCorner, Qt::RightDockWidgetArea); + } else { + setCorner(Qt::TopLeftCorner, Qt::TopDockWidgetArea); + setCorner(Qt::TopRightCorner, Qt::TopDockWidgetArea); + setCorner(Qt::BottomLeftCorner, Qt::BottomDockWidgetArea); + setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea); + } +} + void OBSBasic::RepairCustomExtraDockName() { QDockWidget *dock = reinterpret_cast(sender());