diff --git a/dist/qt_themes/default/style.qss b/dist/qt_themes/default/style.qss index 5e0d1caefe..6b5953e385 100644 --- a/dist/qt_themes/default/style.qss +++ b/dist/qt_themes/default/style.qss @@ -1,4 +1,4 @@ -QPushButton#StatusBarToggleButton { +QPushButton#TogglableStatusBarButton { color: #959595; border: 1px solid transparent; background-color: transparent; @@ -6,11 +6,11 @@ QPushButton#StatusBarToggleButton { text-align: center; } -QPushButton#StatusBarToggleButton:checked { +QPushButton#TogglableStatusBarButton:checked { color: #000000; } -QPushButton#StatusBarToggleButton:hover { +QPushButton#TogglableStatusBarButton:hover { border: 1px solid #76797C; } diff --git a/dist/qt_themes/qdarkstyle/style.qss b/dist/qt_themes/qdarkstyle/style.qss index 9624713e81..5a93943b0d 100644 --- a/dist/qt_themes/qdarkstyle/style.qss +++ b/dist/qt_themes/qdarkstyle/style.qss @@ -1271,4 +1271,4 @@ QPushButton#RendererStatusBarButton:checked { QPushButton#RendererStatusBarButton:!checked{ color: #00ccdd; -} \ No newline at end of file +} \ No newline at end of file diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp index d287f24f24..403cf3fbc3 100644 --- a/src/yuzu/main.cpp +++ b/src/yuzu/main.cpp @@ -454,7 +454,6 @@ void GMainWindow::InitializeWidgets() { // Create status bar message_label = new QLabel(); // Configured separately for left alignment - message_label->setVisible(false); message_label->setFrameStyle(QFrame::NoFrame); message_label->setContentsMargins(4, 0, 4, 0); message_label->setAlignment(Qt::AlignLeft); @@ -476,36 +475,68 @@ void GMainWindow::InitializeWidgets() { label->setVisible(false); label->setFrameStyle(QFrame::NoFrame); label->setContentsMargins(4, 0, 4, 0); - statusBar()->addPermanentWidget(label, 0); + statusBar()->addPermanentWidget(label); } + // Setup Dock button + dock_status_button = new QPushButton(); + dock_status_button->setObjectName(tr("TogglableStatusBarButton")); + connect(dock_status_button, &QPushButton::clicked, [&] { + Settings::values.use_docked_mode = !Settings::values.use_docked_mode; + dock_status_button->setChecked(Settings::values.use_docked_mode); + OnDockedModeChanged(!Settings::values.use_docked_mode, Settings::values.use_docked_mode); + }); + dock_status_button->setText(tr("DOCK")); + dock_status_button->setCheckable(true); + dock_status_button->setChecked(Settings::values.use_docked_mode); + statusBar()->insertPermanentWidget(0, dock_status_button); + + // Setup ASync button async_status_button = new QPushButton(); + async_status_button->setObjectName(tr("TogglableStatusBarButton")); + connect(async_status_button, &QPushButton::clicked, [&] { + if (emulation_running) + return; + Settings::values.use_asynchronous_gpu_emulation = + !Settings::values.use_asynchronous_gpu_emulation; + async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation); + Settings::Apply(); + }); async_status_button->setText(tr("ASYNC")); - async_status_button->setObjectName(tr("StatusBarToggleButton")); async_status_button->setCheckable(true); async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation); - statusBar()->addPermanentWidget(async_status_button, 0); + statusBar()->insertPermanentWidget(0, async_status_button); + // Setup Renderer API button renderer_status_button = new QPushButton(); - renderer_status_button->setCheckable(true); -#ifdef HAS_VULKAN - switch (Settings::values.renderer_backend) { - case Settings::RendererBackend::OpenGL: - renderer_status_button->setText(tr("OPENGL")); - renderer_status_button->setChecked(false); - break; - case Settings::RendererBackend::Vulkan: - renderer_status_button->setText(tr("VULKAN")); - renderer_status_button->setChecked(true); - break; - } -#else - renderer_status_button->setText(tr("OPENGL")); - renderer_status_button->setChecked(false); - renderer_status_button->setDisabled(true); -#endif // HAS_VULKAN renderer_status_button->setObjectName(tr("RendererStatusBarButton")); - statusBar()->addPermanentWidget(renderer_status_button, 0); + renderer_status_button->setCheckable(true); + connect(renderer_status_button, &QPushButton::toggled, [=](bool checked) { + renderer_status_button->setText(tr(checked ? "VULKAN" : "OPENGL")); + }); + renderer_status_button->toggle(); + +#ifndef HAS_VULKAN + renderer_status_button->setChecked(false); + renderer_status_button->setCheckable(false); + renderer_status_button->setDisabled(true); +#else + renderer_status_button->setChecked(Settings::values.renderer_backend == + Settings::RendererBackend::Vulkan); + connect(renderer_status_button, &QPushButton::clicked, [=] { + if (emulation_running) + return; + + if (renderer_status_button->isChecked()) { + Settings::values.renderer_backend = Settings::RendererBackend::Vulkan; + } else { + Settings::values.renderer_backend = Settings::RendererBackend::OpenGL; + } + + Settings::Apply(); + }); +#endif // HAS_VULKAN + statusBar()->insertPermanentWidget(0, renderer_status_button); statusBar()->setVisible(true); setStyleSheet(QStringLiteral("QStatusBar::item{border: none;}")); @@ -669,6 +700,7 @@ void GMainWindow::InitializeHotkeys() { Settings::values.use_docked_mode = !Settings::values.use_docked_mode; OnDockedModeChanged(!Settings::values.use_docked_mode, Settings::values.use_docked_mode); + dock_status_button->setChecked(Settings::values.use_docked_mode); }); } @@ -753,9 +785,6 @@ void GMainWindow::ConnectWidgetEvents() { &GRenderWindow::OnEmulationStopping); connect(&status_bar_update_timer, &QTimer::timeout, this, &GMainWindow::UpdateStatusBar); - - connect(async_status_button, &QPushButton::clicked, this, &GMainWindow::OnToggleASyncGPU); - connect(renderer_status_button, &QPushButton::clicked, this, &GMainWindow::OnToggleRendererAPI); } void GMainWindow::ConnectMenuEvents() { @@ -1875,18 +1904,11 @@ void GMainWindow::OnConfigure() { config->Save(); + dock_status_button->setChecked(Settings::values.use_docked_mode); async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation); #ifdef HAS_VULKAN - switch (Settings::values.renderer_backend) { - case Settings::RendererBackend::OpenGL: - renderer_status_button->setText(tr("OPENGL")); - renderer_status_button->setChecked(false); - break; - case Settings::RendererBackend::Vulkan: - renderer_status_button->setText(tr("VULKAN")); - renderer_status_button->setChecked(true); - break; - } + renderer_status_button->setChecked( + Settings::values.renderer_backend == Settings::RendererBackend::Vulkan ? true : false); #endif } @@ -2165,39 +2187,6 @@ void GMainWindow::OnReinitializeKeys(ReinitializeKeyBehavior behavior) { } } -void GMainWindow::OnToggleASyncGPU() { - if (emulation_running) - return; - - Settings::values.use_asynchronous_gpu_emulation = - !Settings::values.use_asynchronous_gpu_emulation; - async_status_button->setChecked(Settings::values.use_asynchronous_gpu_emulation); - - Settings::Apply(); -} - -void GMainWindow::OnToggleRendererAPI() { - if (emulation_running) - return; - -#ifdef HAS_VULKAN - switch (Settings::values.renderer_backend) { - case Settings::RendererBackend::Vulkan: - Settings::values.renderer_backend = Settings::RendererBackend::OpenGL; - renderer_status_button->setText(tr("OPENGL")); - renderer_status_button->setChecked(false); - break; - case Settings::RendererBackend::OpenGL: - Settings::values.renderer_backend = Settings::RendererBackend::Vulkan; - renderer_status_button->setText(tr("VULKAN")); - renderer_status_button->setChecked(true); - break; - } - - Settings::Apply(); -#endif // HAS_VULKAN -} - std::optional GMainWindow::SelectRomFSDumpTarget(const FileSys::ContentProvider& installed, u64 program_id) { const auto dlc_entries = diff --git a/src/yuzu/main.h b/src/yuzu/main.h index b2a7f9a9fb..537c7d5edd 100644 --- a/src/yuzu/main.h +++ b/src/yuzu/main.h @@ -211,8 +211,6 @@ private slots: void OnCaptureScreenshot(); void OnCoreError(Core::System::ResultStatus, std::string); void OnReinitializeKeys(ReinitializeKeyBehavior behavior); - void OnToggleASyncGPU(); - void OnToggleRendererAPI(); private: std::optional SelectRomFSDumpTarget(const FileSys::ContentProvider&, u64 program_id); @@ -234,6 +232,7 @@ private: QLabel* emu_frametime_label = nullptr; QPushButton* async_status_button = nullptr; QPushButton* renderer_status_button = nullptr; + QPushButton* dock_status_button = nullptr; QTimer status_bar_update_timer; std::unique_ptr config;