summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar german772022-02-06 20:27:38 -0600
committerGravatar german772022-02-06 20:46:58 -0600
commit49eb78497b76af27b0403e7d2174aa368b07ddf1 (patch)
treece60d206ed046c26a5ef3cc22e481f4cf397247a
parentMerge pull request #7847 from tech-ticks/master (diff)
downloadyuzu-49eb78497b76af27b0403e7d2174aa368b07ddf1.tar.gz
yuzu-49eb78497b76af27b0403e7d2174aa368b07ddf1.tar.xz
yuzu-49eb78497b76af27b0403e7d2174aa368b07ddf1.zip
yuzu: Add docked, GPU accuracy and adapting filter hotkeys
-rw-r--r--src/yuzu/configuration/config.cpp4
-rw-r--r--src/yuzu/configuration/config.h2
-rw-r--r--src/yuzu/main.cpp117
-rw-r--r--src/yuzu/main.h3
4 files changed, 68 insertions, 58 deletions
diff --git a/src/yuzu/configuration/config.cpp b/src/yuzu/configuration/config.cpp
index 2c8c10c50..68facbce4 100644
--- a/src/yuzu/configuration/config.cpp
+++ b/src/yuzu/configuration/config.cpp
@@ -65,12 +65,14 @@ const std::array<int, 2> Config::default_stick_mod = {
65// This must be in alphabetical order according to action name as it must have the same order as 65// This must be in alphabetical order according to action name as it must have the same order as
66// UISetting::values.shortcuts, which is alphabetically ordered. 66// UISetting::values.shortcuts, which is alphabetically ordered.
67// clang-format off 67// clang-format off
68const std::array<UISettings::Shortcut, 20> Config::default_hotkeys{{ 68const std::array<UISettings::Shortcut, 22> Config::default_hotkeys{{
69 {QStringLiteral("Audio Mute/Unmute"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+M"), QStringLiteral("Home+Dpad_Right"), Qt::WindowShortcut}}, 69 {QStringLiteral("Audio Mute/Unmute"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+M"), QStringLiteral("Home+Dpad_Right"), Qt::WindowShortcut}},
70 {QStringLiteral("Audio Volume Down"), QStringLiteral("Main Window"), {QStringLiteral("-"), QStringLiteral("Home+Dpad_Down"), Qt::ApplicationShortcut}}, 70 {QStringLiteral("Audio Volume Down"), QStringLiteral("Main Window"), {QStringLiteral("-"), QStringLiteral("Home+Dpad_Down"), Qt::ApplicationShortcut}},
71 {QStringLiteral("Audio Volume Up"), QStringLiteral("Main Window"), {QStringLiteral("+"), QStringLiteral("Home+Dpad_Up"), Qt::ApplicationShortcut}}, 71 {QStringLiteral("Audio Volume Up"), QStringLiteral("Main Window"), {QStringLiteral("+"), QStringLiteral("Home+Dpad_Up"), Qt::ApplicationShortcut}},
72 {QStringLiteral("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), QStringLiteral("Screenshot"), Qt::WidgetWithChildrenShortcut}}, 72 {QStringLiteral("Capture Screenshot"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+P"), QStringLiteral("Screenshot"), Qt::WidgetWithChildrenShortcut}},
73 {QStringLiteral("Change Adapting Filter"), QStringLiteral("Main Window"), {QStringLiteral("F8"), QStringLiteral("Home+L"), Qt::ApplicationShortcut}},
73 {QStringLiteral("Change Docked Mode"), QStringLiteral("Main Window"), {QStringLiteral("F10"), QStringLiteral("Home+X"), Qt::ApplicationShortcut}}, 74 {QStringLiteral("Change Docked Mode"), QStringLiteral("Main Window"), {QStringLiteral("F10"), QStringLiteral("Home+X"), Qt::ApplicationShortcut}},
75 {QStringLiteral("Change GPU Accuracy"), QStringLiteral("Main Window"), {QStringLiteral("F9"), QStringLiteral("Home+R"), Qt::ApplicationShortcut}},
74 {QStringLiteral("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), QStringLiteral("Home+Plus"), Qt::WindowShortcut}}, 76 {QStringLiteral("Continue/Pause Emulation"), QStringLiteral("Main Window"), {QStringLiteral("F4"), QStringLiteral("Home+Plus"), Qt::WindowShortcut}},
75 {QStringLiteral("Exit Fullscreen"), QStringLiteral("Main Window"), {QStringLiteral("Esc"), QStringLiteral(""), Qt::WindowShortcut}}, 77 {QStringLiteral("Exit Fullscreen"), QStringLiteral("Main Window"), {QStringLiteral("Esc"), QStringLiteral(""), Qt::WindowShortcut}},
76 {QStringLiteral("Exit yuzu"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+Q"), QStringLiteral("Home+Minus"), Qt::WindowShortcut}}, 78 {QStringLiteral("Exit yuzu"), QStringLiteral("Main Window"), {QStringLiteral("Ctrl+Q"), QStringLiteral("Home+Minus"), Qt::WindowShortcut}},
diff --git a/src/yuzu/configuration/config.h b/src/yuzu/configuration/config.h
index 60b20a62f..ae3e36a11 100644
--- a/src/yuzu/configuration/config.h
+++ b/src/yuzu/configuration/config.h
@@ -46,7 +46,7 @@ public:
46 default_mouse_buttons; 46 default_mouse_buttons;
47 static const std::array<int, Settings::NativeKeyboard::NumKeyboardKeys> default_keyboard_keys; 47 static const std::array<int, Settings::NativeKeyboard::NumKeyboardKeys> default_keyboard_keys;
48 static const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> default_keyboard_mods; 48 static const std::array<int, Settings::NativeKeyboard::NumKeyboardMods> default_keyboard_mods;
49 static const std::array<UISettings::Shortcut, 20> default_hotkeys; 49 static const std::array<UISettings::Shortcut, 22> default_hotkeys;
50 50
51 static constexpr UISettings::Theme default_theme{ 51 static constexpr UISettings::Theme default_theme{
52#ifdef _WIN32 52#ifdef _WIN32
diff --git a/src/yuzu/main.cpp b/src/yuzu/main.cpp
index c788db12d..68cd9f6ea 100644
--- a/src/yuzu/main.cpp
+++ b/src/yuzu/main.cpp
@@ -806,21 +806,8 @@ void GMainWindow::InitializeWidgets() {
806 filter_status_button = new QPushButton(); 806 filter_status_button = new QPushButton();
807 filter_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); 807 filter_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton"));
808 filter_status_button->setFocusPolicy(Qt::NoFocus); 808 filter_status_button->setFocusPolicy(Qt::NoFocus);
809 connect(filter_status_button, &QPushButton::clicked, [&] { 809 connect(filter_status_button, &QPushButton::clicked, this,
810 auto filter = Settings::values.scaling_filter.GetValue(); 810 &GMainWindow::OnToggleAdaptingFilter);
811 if (filter == Settings::ScalingFilter::LastFilter) {
812 filter = Settings::ScalingFilter::NearestNeighbor;
813 } else {
814 filter = static_cast<Settings::ScalingFilter>(static_cast<u32>(filter) + 1);
815 }
816 if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL &&
817 filter == Settings::ScalingFilter::Fsr) {
818 filter = Settings::ScalingFilter::NearestNeighbor;
819 }
820 Settings::values.scaling_filter.SetValue(filter);
821 filter_status_button->setChecked(true);
822 UpdateFilterText();
823 });
824 auto filter = Settings::values.scaling_filter.GetValue(); 811 auto filter = Settings::values.scaling_filter.GetValue();
825 if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL && 812 if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL &&
826 filter == Settings::ScalingFilter::Fsr) { 813 filter == Settings::ScalingFilter::Fsr) {
@@ -835,25 +822,7 @@ void GMainWindow::InitializeWidgets() {
835 dock_status_button = new QPushButton(); 822 dock_status_button = new QPushButton();
836 dock_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton")); 823 dock_status_button->setObjectName(QStringLiteral("TogglableStatusBarButton"));
837 dock_status_button->setFocusPolicy(Qt::NoFocus); 824 dock_status_button->setFocusPolicy(Qt::NoFocus);
838 connect(dock_status_button, &QPushButton::clicked, [&] { 825 connect(dock_status_button, &QPushButton::clicked, this, &GMainWindow::OnToggleDockedMode);
839 const bool is_docked = Settings::values.use_docked_mode.GetValue();
840 auto* player_1 = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1);
841 auto* handheld = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld);
842
843 if (!is_docked && handheld->IsConnected()) {
844 QMessageBox::warning(this, tr("Invalid config detected"),
845 tr("Handheld controller can't be used on docked mode. Pro "
846 "controller will be selected."));
847 handheld->Disconnect();
848 player_1->SetNpadStyleIndex(Core::HID::NpadStyleIndex::ProController);
849 player_1->Connect();
850 controller_dialog->refreshConfiguration();
851 }
852
853 Settings::values.use_docked_mode.SetValue(!is_docked);
854 dock_status_button->setChecked(!is_docked);
855 OnDockedModeChanged(is_docked, !is_docked, *system);
856 });
857 dock_status_button->setText(tr("DOCK")); 826 dock_status_button->setText(tr("DOCK"));
858 dock_status_button->setCheckable(true); 827 dock_status_button->setCheckable(true);
859 dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue()); 828 dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue());
@@ -863,22 +832,7 @@ void GMainWindow::InitializeWidgets() {
863 gpu_accuracy_button->setObjectName(QStringLiteral("GPUStatusBarButton")); 832 gpu_accuracy_button->setObjectName(QStringLiteral("GPUStatusBarButton"));
864 gpu_accuracy_button->setCheckable(true); 833 gpu_accuracy_button->setCheckable(true);
865 gpu_accuracy_button->setFocusPolicy(Qt::NoFocus); 834 gpu_accuracy_button->setFocusPolicy(Qt::NoFocus);
866 connect(gpu_accuracy_button, &QPushButton::clicked, [this] { 835 connect(gpu_accuracy_button, &QPushButton::clicked, this, &GMainWindow::OnToggleGpuAccuracy);
867 switch (Settings::values.gpu_accuracy.GetValue()) {
868 case Settings::GPUAccuracy::High: {
869 Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::Normal);
870 break;
871 }
872 case Settings::GPUAccuracy::Normal:
873 case Settings::GPUAccuracy::Extreme:
874 default: {
875 Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::High);
876 }
877 }
878
879 system->ApplySettings();
880 UpdateGPUAccuracyButton();
881 });
882 UpdateGPUAccuracyButton(); 836 UpdateGPUAccuracyButton();
883 statusBar()->insertPermanentWidget(0, gpu_accuracy_button); 837 statusBar()->insertPermanentWidget(0, gpu_accuracy_button);
884 838
@@ -1009,12 +963,10 @@ void GMainWindow::InitializeHotkeys() {
1009 ToggleFullscreen(); 963 ToggleFullscreen();
1010 } 964 }
1011 }); 965 });
1012 connect_shortcut(QStringLiteral("Change Docked Mode"), [&] { 966 connect_shortcut(QStringLiteral("Change Adapting Filter"),
1013 Settings::values.use_docked_mode.SetValue(!Settings::values.use_docked_mode.GetValue()); 967 &GMainWindow::OnToggleAdaptingFilter);
1014 OnDockedModeChanged(!Settings::values.use_docked_mode.GetValue(), 968 connect_shortcut(QStringLiteral("Change Docked Mode"), &GMainWindow::OnToggleDockedMode);
1015 Settings::values.use_docked_mode.GetValue(), *system); 969 connect_shortcut(QStringLiteral("Change GPU Accuracy"), &GMainWindow::OnToggleGpuAccuracy);
1016 dock_status_button->setChecked(Settings::values.use_docked_mode.GetValue());
1017 });
1018 connect_shortcut(QStringLiteral("Audio Mute/Unmute"), 970 connect_shortcut(QStringLiteral("Audio Mute/Unmute"),
1019 [] { Settings::values.audio_muted = !Settings::values.audio_muted; }); 971 [] { Settings::values.audio_muted = !Settings::values.audio_muted; });
1020 connect_shortcut(QStringLiteral("Audio Volume Down"), [] { 972 connect_shortcut(QStringLiteral("Audio Volume Down"), [] {
@@ -2868,6 +2820,59 @@ void GMainWindow::OnTasReset() {
2868 input_subsystem->GetTas()->Reset(); 2820 input_subsystem->GetTas()->Reset();
2869} 2821}
2870 2822
2823void GMainWindow::OnToggleDockedMode() {
2824 const bool is_docked = Settings::values.use_docked_mode.GetValue();
2825 auto* player_1 = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Player1);
2826 auto* handheld = system->HIDCore().GetEmulatedController(Core::HID::NpadIdType::Handheld);
2827
2828 if (!is_docked && handheld->IsConnected()) {
2829 QMessageBox::warning(this, tr("Invalid config detected"),
2830 tr("Handheld controller can't be used on docked mode. Pro "
2831 "controller will be selected."));
2832 handheld->Disconnect();
2833 player_1->SetNpadStyleIndex(Core::HID::NpadStyleIndex::ProController);
2834 player_1->Connect();
2835 controller_dialog->refreshConfiguration();
2836 }
2837
2838 Settings::values.use_docked_mode.SetValue(!is_docked);
2839 dock_status_button->setChecked(!is_docked);
2840 OnDockedModeChanged(is_docked, !is_docked, *system);
2841}
2842
2843void GMainWindow::OnToggleGpuAccuracy() {
2844 switch (Settings::values.gpu_accuracy.GetValue()) {
2845 case Settings::GPUAccuracy::High: {
2846 Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::Normal);
2847 break;
2848 }
2849 case Settings::GPUAccuracy::Normal:
2850 case Settings::GPUAccuracy::Extreme:
2851 default: {
2852 Settings::values.gpu_accuracy.SetValue(Settings::GPUAccuracy::High);
2853 }
2854 }
2855
2856 system->ApplySettings();
2857 UpdateGPUAccuracyButton();
2858}
2859
2860void GMainWindow::OnToggleAdaptingFilter() {
2861 auto filter = Settings::values.scaling_filter.GetValue();
2862 if (filter == Settings::ScalingFilter::LastFilter) {
2863 filter = Settings::ScalingFilter::NearestNeighbor;
2864 } else {
2865 filter = static_cast<Settings::ScalingFilter>(static_cast<u32>(filter) + 1);
2866 }
2867 if (Settings::values.renderer_backend.GetValue() == Settings::RendererBackend::OpenGL &&
2868 filter == Settings::ScalingFilter::Fsr) {
2869 filter = Settings::ScalingFilter::NearestNeighbor;
2870 }
2871 Settings::values.scaling_filter.SetValue(filter);
2872 filter_status_button->setChecked(true);
2873 UpdateFilterText();
2874}
2875
2871void GMainWindow::OnConfigurePerGame() { 2876void GMainWindow::OnConfigurePerGame() {
2872 const u64 title_id = system->GetCurrentProcessProgramID(); 2877 const u64 title_id = system->GetCurrentProcessProgramID();
2873 OpenPerGameConfiguration(title_id, game_path.toStdString()); 2878 OpenPerGameConfiguration(title_id, game_path.toStdString());
diff --git a/src/yuzu/main.h b/src/yuzu/main.h
index ca4ab9af5..eb939bb29 100644
--- a/src/yuzu/main.h
+++ b/src/yuzu/main.h
@@ -284,6 +284,9 @@ private slots:
284 void OnTasStartStop(); 284 void OnTasStartStop();
285 void OnTasRecord(); 285 void OnTasRecord();
286 void OnTasReset(); 286 void OnTasReset();
287 void OnToggleDockedMode();
288 void OnToggleGpuAccuracy();
289 void OnToggleAdaptingFilter();
287 void OnConfigurePerGame(); 290 void OnConfigurePerGame();
288 void OnLoadAmiibo(); 291 void OnLoadAmiibo();
289 void OnOpenYuzuFolder(); 292 void OnOpenYuzuFolder();