From 03655c37fc326bf1818fe1ec08fd2fa5567bc0b8 Mon Sep 17 00:00:00 2001 From: GPUCode Date: Thu, 4 May 2023 00:34:31 +0300 Subject: [PATCH] citra_qt: Add API status indicator --- .../configuration/configure_graphics.ui | 5 +++ src/citra_qt/main.cpp | 37 +++++++++++++++++++ src/citra_qt/main.h | 3 ++ 3 files changed, 45 insertions(+) diff --git a/src/citra_qt/configuration/configure_graphics.ui b/src/citra_qt/configuration/configure_graphics.ui index 74fe21786..f5c43cfc4 100644 --- a/src/citra_qt/configuration/configure_graphics.ui +++ b/src/citra_qt/configuration/configure_graphics.ui @@ -60,6 +60,11 @@ OpenGL + + + Vulkan + + diff --git a/src/citra_qt/main.cpp b/src/citra_qt/main.cpp index 546468914..893fd1015 100644 --- a/src/citra_qt/main.cpp +++ b/src/citra_qt/main.cpp @@ -357,6 +357,22 @@ void GMainWindow::InitializeWidgets() { statusBar()->addPermanentWidget(label); } + // Setup Graphics API button + graphics_api_button = new QPushButton(); + graphics_api_button->setObjectName(QStringLiteral("GraphicsAPIStatusBarButton")); + graphics_api_button->setFocusPolicy(Qt::NoFocus); + UpdateAPIIndicator(); + + connect(graphics_api_button, &QPushButton::clicked, this, [this] { + if (emulation_running) { + return; + } + + UpdateAPIIndicator(true); + }); + + statusBar()->insertPermanentWidget(0, graphics_api_button); + statusBar()->addPermanentWidget(multiplayer_state->GetStatusText()); statusBar()->addPermanentWidget(multiplayer_state->GetStatusIcon()); @@ -1988,6 +2004,7 @@ void GMainWindow::OnConfigure() { } UpdateSecondaryWindowVisibility(); UpdateBootHomeMenuState(); + UpdateAPIIndicator(); } else { Settings::values.input_profiles = old_input_profiles; Settings::values.touch_from_button_maps = old_touch_from_button_maps; @@ -2314,6 +2331,26 @@ void GMainWindow::ShowMouseCursor() { } } +void GMainWindow::UpdateAPIIndicator(bool update) { + static std::array graphics_apis = {QStringLiteral("SOFTWARE"), QStringLiteral("OPENGL"), + QStringLiteral("VULKAN")}; + + static std::array graphics_api_colors = {QStringLiteral("#3ae400"), QStringLiteral("#00ccdd"), + QStringLiteral("#91242a")}; + + u32 api_index = static_cast(Settings::values.graphics_api.GetValue()); + if (update) { + api_index = (api_index + 1) % graphics_apis.size(); + Settings::values.graphics_api = static_cast(api_index); + } + + const QString style_sheet = QStringLiteral("QPushButton { font-weight: bold; color: %0; }") + .arg(graphics_api_colors[api_index]); + + graphics_api_button->setText(graphics_apis[api_index]); + graphics_api_button->setStyleSheet(style_sheet); +} + void GMainWindow::OnMouseActivity() { ShowMouseCursor(); } diff --git a/src/citra_qt/main.h b/src/citra_qt/main.h index a36fd83c5..1e561558d 100644 --- a/src/citra_qt/main.h +++ b/src/citra_qt/main.h @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include "citra_qt/compatibility_list.h" @@ -254,6 +255,7 @@ private: void HideMouseCursor(); void ShowMouseCursor(); void OpenPerGameConfiguration(u64 title_id, const QString& file_name); + void UpdateAPIIndicator(bool update = false); std::unique_ptr ui; @@ -269,6 +271,7 @@ private: QLabel* emu_speed_label = nullptr; QLabel* game_fps_label = nullptr; QLabel* emu_frametime_label = nullptr; + QPushButton* graphics_api_button = nullptr; QTimer status_bar_update_timer; bool message_label_used_for_movie = false;