diff options
| author | 2022-02-06 20:27:38 -0600 | |
|---|---|---|
| committer | 2022-02-06 20:46:58 -0600 | |
| commit | 49eb78497b76af27b0403e7d2174aa368b07ddf1 (patch) | |
| tree | ce60d206ed046c26a5ef3cc22e481f4cf397247a /src | |
| parent | Merge pull request #7847 from tech-ticks/master (diff) | |
| download | yuzu-49eb78497b76af27b0403e7d2174aa368b07ddf1.tar.gz yuzu-49eb78497b76af27b0403e7d2174aa368b07ddf1.tar.xz yuzu-49eb78497b76af27b0403e7d2174aa368b07ddf1.zip | |
yuzu: Add docked, GPU accuracy and adapting filter hotkeys
Diffstat (limited to 'src')
| -rw-r--r-- | src/yuzu/configuration/config.cpp | 4 | ||||
| -rw-r--r-- | src/yuzu/configuration/config.h | 2 | ||||
| -rw-r--r-- | src/yuzu/main.cpp | 117 | ||||
| -rw-r--r-- | src/yuzu/main.h | 3 |
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 |
| 68 | const std::array<UISettings::Shortcut, 20> Config::default_hotkeys{{ | 68 | const 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 | ||
| 2823 | void 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 | |||
| 2843 | void 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 | |||
| 2860 | void 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 | |||
| 2871 | void GMainWindow::OnConfigurePerGame() { | 2876 | void 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(); |