diff options
author | liamwhite <liamwhite@users.noreply.github.com> | 2024-01-28 21:02:34 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-01-28 21:02:34 +0100 |
commit | 6a2532fe17769e78d619435ce276008c61345671 (patch) | |
tree | dc3f6955769d5233396a4ef8e9c1114bc0aad422 /src | |
parent | Merge pull request #12821 from merryhime/atomic_ops (diff) | |
parent | yuzu: Add per-game linux gamemode configuration (diff) | |
download | yuzu-6a2532fe17769e78d619435ce276008c61345671.tar yuzu-6a2532fe17769e78d619435ce276008c61345671.tar.gz yuzu-6a2532fe17769e78d619435ce276008c61345671.tar.bz2 yuzu-6a2532fe17769e78d619435ce276008c61345671.tar.lz yuzu-6a2532fe17769e78d619435ce276008c61345671.tar.xz yuzu-6a2532fe17769e78d619435ce276008c61345671.tar.zst yuzu-6a2532fe17769e78d619435ce276008c61345671.zip |
Diffstat (limited to 'src')
-rw-r--r-- | src/frontend_common/config.cpp | 26 | ||||
-rw-r--r-- | src/frontend_common/config.h | 6 | ||||
-rw-r--r-- | src/yuzu/CMakeLists.txt | 3 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_audio.h | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_cpu.h | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_general.h | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_graphics.h | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_graphics_advanced.h | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_linux_tab.cpp | 75 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_linux_tab.h | 44 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_linux_tab.ui | 53 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_motion_touch.h | 1 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_mouse_panning.h | 1 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_per_game.cpp | 6 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_per_game.h | 2 | ||||
-rw-r--r-- | src/yuzu/configuration/configure_system.h | 2 |
16 files changed, 229 insertions, 0 deletions
diff --git a/src/frontend_common/config.cpp b/src/frontend_common/config.cpp index 46277e288..905f35118 100644 --- a/src/frontend_common/config.cpp +++ b/src/frontend_common/config.cpp @@ -298,6 +298,16 @@ void Config::ReadDebuggingValues() { EndGroup(); } +#ifdef __unix__ +void Config::ReadLinuxValues() { + BeginGroup(Settings::TranslateCategory(Settings::Category::Linux)); + + ReadCategory(Settings::Category::Linux); + + EndGroup(); +} +#endif + void Config::ReadServiceValues() { BeginGroup(Settings::TranslateCategory(Settings::Category::Services)); @@ -404,6 +414,9 @@ void Config::ReadValues() { ReadControlValues(); ReadCoreValues(); ReadCpuValues(); +#ifdef __unix__ + ReadLinuxValues(); +#endif ReadRendererValues(); ReadAudioValues(); ReadSystemValues(); @@ -504,6 +517,9 @@ void Config::SaveValues() { SaveControlValues(); SaveCoreValues(); SaveCpuValues(); +#ifdef __unix__ + SaveLinuxValues(); +#endif SaveRendererValues(); SaveAudioValues(); SaveSystemValues(); @@ -578,6 +594,16 @@ void Config::SaveDebuggingValues() { EndGroup(); } +#ifdef __unix__ +void Config::SaveLinuxValues() { + BeginGroup(Settings::TranslateCategory(Settings::Category::Linux)); + + WriteCategory(Settings::Category::Linux); + + EndGroup(); +} +#endif + void Config::SaveNetworkValues() { BeginGroup(Settings::TranslateCategory(Settings::Category::Services)); diff --git a/src/frontend_common/config.h b/src/frontend_common/config.h index 4798d6432..4ecb97044 100644 --- a/src/frontend_common/config.h +++ b/src/frontend_common/config.h @@ -76,6 +76,9 @@ protected: void ReadCoreValues(); void ReadDataStorageValues(); void ReadDebuggingValues(); +#ifdef __unix__ + void ReadLinuxValues(); +#endif void ReadServiceValues(); void ReadDisabledAddOnValues(); void ReadMiscellaneousValues(); @@ -107,6 +110,9 @@ protected: void SaveCoreValues(); void SaveDataStorageValues(); void SaveDebuggingValues(); +#ifdef __unix__ + void SaveLinuxValues(); +#endif void SaveNetworkValues(); void SaveDisabledAddOnValues(); void SaveMiscellaneousValues(); diff --git a/src/yuzu/CMakeLists.txt b/src/yuzu/CMakeLists.txt index 93b03b917..bc667b39f 100644 --- a/src/yuzu/CMakeLists.txt +++ b/src/yuzu/CMakeLists.txt @@ -96,6 +96,9 @@ add_executable(yuzu configuration/configure_input_profile_dialog.cpp configuration/configure_input_profile_dialog.h configuration/configure_input_profile_dialog.ui + configuration/configure_linux_tab.cpp + configuration/configure_linux_tab.h + configuration/configure_linux_tab.ui configuration/configure_mouse_panning.cpp configuration/configure_mouse_panning.h configuration/configure_mouse_panning.ui diff --git a/src/yuzu/configuration/configure_audio.h b/src/yuzu/configuration/configure_audio.h index 79538e81c..82d7f6524 100644 --- a/src/yuzu/configuration/configure_audio.h +++ b/src/yuzu/configuration/configure_audio.h @@ -24,6 +24,8 @@ class Builder; } class ConfigureAudio : public ConfigurationShared::Tab { + Q_OBJECT + public: explicit ConfigureAudio(const Core::System& system_, std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group, diff --git a/src/yuzu/configuration/configure_cpu.h b/src/yuzu/configuration/configure_cpu.h index a102b4c1f..7bbeac496 100644 --- a/src/yuzu/configuration/configure_cpu.h +++ b/src/yuzu/configuration/configure_cpu.h @@ -24,6 +24,8 @@ class Builder; } class ConfigureCpu : public ConfigurationShared::Tab { + Q_OBJECT + public: explicit ConfigureCpu(const Core::System& system_, std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group, diff --git a/src/yuzu/configuration/configure_general.h b/src/yuzu/configuration/configure_general.h index 2d953f679..ada6526a6 100644 --- a/src/yuzu/configuration/configure_general.h +++ b/src/yuzu/configuration/configure_general.h @@ -25,6 +25,8 @@ class Builder; } class ConfigureGeneral : public ConfigurationShared::Tab { + Q_OBJECT + public: explicit ConfigureGeneral(const Core::System& system_, std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group, diff --git a/src/yuzu/configuration/configure_graphics.h b/src/yuzu/configuration/configure_graphics.h index 5c8286836..b92b4496b 100644 --- a/src/yuzu/configuration/configure_graphics.h +++ b/src/yuzu/configuration/configure_graphics.h @@ -43,6 +43,8 @@ class Builder; } class ConfigureGraphics : public ConfigurationShared::Tab { + Q_OBJECT + public: explicit ConfigureGraphics( const Core::System& system_, std::vector<VkDeviceInfo::Record>& records, diff --git a/src/yuzu/configuration/configure_graphics_advanced.h b/src/yuzu/configuration/configure_graphics_advanced.h index 78b5389c3..82431987e 100644 --- a/src/yuzu/configuration/configure_graphics_advanced.h +++ b/src/yuzu/configuration/configure_graphics_advanced.h @@ -21,6 +21,8 @@ class Builder; } class ConfigureGraphicsAdvanced : public ConfigurationShared::Tab { + Q_OBJECT + public: explicit ConfigureGraphicsAdvanced( const Core::System& system_, std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group, diff --git a/src/yuzu/configuration/configure_linux_tab.cpp b/src/yuzu/configuration/configure_linux_tab.cpp new file mode 100644 index 000000000..ab3d18816 --- /dev/null +++ b/src/yuzu/configuration/configure_linux_tab.cpp @@ -0,0 +1,75 @@ +// SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#include "common/settings.h" +#include "core/core.h" +#include "ui_configure_linux_tab.h" +#include "yuzu/configuration/configuration_shared.h" +#include "yuzu/configuration/configure_linux_tab.h" +#include "yuzu/configuration/shared_widget.h" + +ConfigureLinuxTab::ConfigureLinuxTab(const Core::System& system_, + std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group_, + const ConfigurationShared::Builder& builder, QWidget* parent) + : Tab(group_, parent), ui(std::make_unique<Ui::ConfigureLinuxTab>()), system{system_} { + ui->setupUi(this); + + Setup(builder); + + SetConfiguration(); +} + +ConfigureLinuxTab::~ConfigureLinuxTab() = default; + +void ConfigureLinuxTab::SetConfiguration() {} +void ConfigureLinuxTab::Setup(const ConfigurationShared::Builder& builder) { + QLayout& linux_layout = *ui->linux_widget->layout(); + + std::map<u32, QWidget*> linux_hold{}; + + std::vector<Settings::BasicSetting*> settings; + const auto push = [&](Settings::Category category) { + for (const auto setting : Settings::values.linkage.by_category[category]) { + settings.push_back(setting); + } + }; + + push(Settings::Category::Linux); + + for (auto* setting : settings) { + auto* widget = builder.BuildWidget(setting, apply_funcs); + + if (widget == nullptr) { + continue; + } + if (!widget->Valid()) { + widget->deleteLater(); + continue; + } + + linux_hold.insert({setting->Id(), widget}); + } + + for (const auto& [id, widget] : linux_hold) { + linux_layout.addWidget(widget); + } +} + +void ConfigureLinuxTab::ApplyConfiguration() { + const bool is_powered_on = system.IsPoweredOn(); + for (const auto& apply_func : apply_funcs) { + apply_func(is_powered_on); + } +} + +void ConfigureLinuxTab::changeEvent(QEvent* event) { + if (event->type() == QEvent::LanguageChange) { + RetranslateUI(); + } + + QWidget::changeEvent(event); +} + +void ConfigureLinuxTab::RetranslateUI() { + ui->retranslateUi(this); +} diff --git a/src/yuzu/configuration/configure_linux_tab.h b/src/yuzu/configuration/configure_linux_tab.h new file mode 100644 index 000000000..2f402079c --- /dev/null +++ b/src/yuzu/configuration/configure_linux_tab.h @@ -0,0 +1,44 @@ +// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project +// SPDX-License-Identifier: GPL-2.0-or-later + +#pragma once + +#include <QWidget> + +namespace Core { +class System; +} + +namespace Ui { +class ConfigureLinuxTab; +} + +namespace ConfigurationShared { +class Builder; +} + +class ConfigureLinuxTab : public ConfigurationShared::Tab { + Q_OBJECT + +public: + explicit ConfigureLinuxTab(const Core::System& system_, + std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group, + const ConfigurationShared::Builder& builder, + QWidget* parent = nullptr); + ~ConfigureLinuxTab() override; + + void ApplyConfiguration() override; + void SetConfiguration() override; + +private: + void changeEvent(QEvent* event) override; + void RetranslateUI(); + + void Setup(const ConfigurationShared::Builder& builder); + + std::unique_ptr<Ui::ConfigureLinuxTab> ui; + + const Core::System& system; + + std::vector<std::function<void(bool)>> apply_funcs{}; +}; diff --git a/src/yuzu/configuration/configure_linux_tab.ui b/src/yuzu/configuration/configure_linux_tab.ui new file mode 100644 index 000000000..f8e07f581 --- /dev/null +++ b/src/yuzu/configuration/configure_linux_tab.ui @@ -0,0 +1,53 @@ +<?xml version="1.0" encoding="UTF-8"?> +<ui version="4.0"> + <class>ConfigureLinuxTab</class> + <widget class="QWidget" name="ConfigureLinuxTab"> + <property name="accessibleName"> + <string>Linux</string> + </property> + <layout class="QVBoxLayout"> + <item> + <widget class="QGroupBox" name="LinuxGroupBox"> + <property name="title"> + <string>Linux</string> + </property> + <layout class="QVBoxLayout" name="LinuxVerticalLayout_1"> + <item> + <widget class="QWidget" name="linux_widget" native="true"> + <layout class="QVBoxLayout" name="LinuxVerticalLayout_2"> + <property name="leftMargin"> + <number>0</number> + </property> + <property name="topMargin"> + <number>0</number> + </property> + <property name="rightMargin"> + <number>0</number> + </property> + <property name="bottomMargin"> + <number>0</number> + </property> + </layout> + </widget> + </item> + </layout> + </widget> + </item> + <item> + <spacer name="verticalSpacer"> + <property name="orientation"> + <enum>Qt::Vertical</enum> + </property> + <property name="sizeHint" stdset="0"> + <size> + <width>20</width> + <height>40</height> + </size> + </property> + </spacer> + </item> + </layout> + </widget> + <resources/> + <connections/> +</ui> diff --git a/src/yuzu/configuration/configure_motion_touch.h b/src/yuzu/configuration/configure_motion_touch.h index 7dcc9318e..a5db0de51 100644 --- a/src/yuzu/configuration/configure_motion_touch.h +++ b/src/yuzu/configuration/configure_motion_touch.h @@ -26,6 +26,7 @@ class ConfigureMotionTouch; /// A dialog for touchpad calibration configuration. class CalibrationConfigurationDialog : public QDialog { Q_OBJECT + public: explicit CalibrationConfigurationDialog(QWidget* parent, const std::string& host, u16 port); ~CalibrationConfigurationDialog() override; diff --git a/src/yuzu/configuration/configure_mouse_panning.h b/src/yuzu/configuration/configure_mouse_panning.h index 08c6e1f62..f5e62ee13 100644 --- a/src/yuzu/configuration/configure_mouse_panning.h +++ b/src/yuzu/configuration/configure_mouse_panning.h @@ -16,6 +16,7 @@ class ConfigureMousePanning; class ConfigureMousePanning : public QDialog { Q_OBJECT + public: explicit ConfigureMousePanning(QWidget* parent, InputCommon::InputSubsystem* input_subsystem_, float right_stick_deadzone, float right_stick_range); diff --git a/src/yuzu/configuration/configure_per_game.cpp b/src/yuzu/configuration/configure_per_game.cpp index b274a3321..9d38ab812 100644 --- a/src/yuzu/configuration/configure_per_game.cpp +++ b/src/yuzu/configuration/configure_per_game.cpp @@ -33,6 +33,7 @@ #include "yuzu/configuration/configure_graphics.h" #include "yuzu/configuration/configure_graphics_advanced.h" #include "yuzu/configuration/configure_input_per_game.h" +#include "yuzu/configuration/configure_linux_tab.h" #include "yuzu/configuration/configure_per_game.h" #include "yuzu/configuration/configure_per_game_addons.h" #include "yuzu/configuration/configure_system.h" @@ -60,6 +61,7 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st system_, vk_device_records, [&]() { graphics_advanced_tab->ExposeComputeOption(); }, [](Settings::AspectRatio, Settings::ResolutionSetup) {}, tab_group, *builder, this); input_tab = std::make_unique<ConfigureInputPerGame>(system_, game_config.get(), this); + linux_tab = std::make_unique<ConfigureLinuxTab>(system_, tab_group, *builder, this); system_tab = std::make_unique<ConfigureSystem>(system_, tab_group, *builder, this); ui->setupUi(this); @@ -71,6 +73,10 @@ ConfigurePerGame::ConfigurePerGame(QWidget* parent, u64 title_id_, const std::st ui->tabWidget->addTab(graphics_advanced_tab.get(), tr("Adv. Graphics")); ui->tabWidget->addTab(audio_tab.get(), tr("Audio")); ui->tabWidget->addTab(input_tab.get(), tr("Input Profiles")); + // Only show Linux tab on Unix +#ifdef __unix__ + ui->tabWidget->addTab(linux_tab.get(), tr("Linux")); +#endif setFocusPolicy(Qt::ClickFocus); setWindowTitle(tr("Properties")); diff --git a/src/yuzu/configuration/configure_per_game.h b/src/yuzu/configuration/configure_per_game.h index 9daae772c..196cb32e6 100644 --- a/src/yuzu/configuration/configure_per_game.h +++ b/src/yuzu/configuration/configure_per_game.h @@ -32,6 +32,7 @@ class ConfigureCpu; class ConfigureGraphics; class ConfigureGraphicsAdvanced; class ConfigureInputPerGame; +class ConfigureLinuxTab; class ConfigureSystem; class QGraphicsScene; @@ -85,5 +86,6 @@ private: std::unique_ptr<ConfigureGraphicsAdvanced> graphics_advanced_tab; std::unique_ptr<ConfigureGraphics> graphics_tab; std::unique_ptr<ConfigureInputPerGame> input_tab; + std::unique_ptr<ConfigureLinuxTab> linux_tab; std::unique_ptr<ConfigureSystem> system_tab; }; diff --git a/src/yuzu/configuration/configure_system.h b/src/yuzu/configuration/configure_system.h index 4334211f9..a01c29dcf 100644 --- a/src/yuzu/configuration/configure_system.h +++ b/src/yuzu/configuration/configure_system.h @@ -27,6 +27,8 @@ class Builder; } class ConfigureSystem : public ConfigurationShared::Tab { + Q_OBJECT + public: explicit ConfigureSystem(Core::System& system_, std::shared_ptr<std::vector<ConfigurationShared::Tab*>> group, |