Sfoglia il codice sorgente

settings: Split enums to new file

lat9nq 3 anni fa
parent
commit
88d3de4e85
3 ha cambiato i file con 241 aggiunte e 186 eliminazioni
  1. 1 0
      src/common/CMakeLists.txt
  2. 3 186
      src/common/settings.h
  3. 237 0
      src/common/settings_enums.h

+ 1 - 0
src/common/CMakeLists.txt

@@ -110,6 +110,7 @@ add_library(common STATIC
     scratch_buffer.h
     settings.cpp
     settings.h
+    settings_enums.h
     settings_input.cpp
     settings_input.h
     socket_types.h

+ 3 - 186
src/common/settings.h

@@ -16,194 +16,11 @@
 #include <vector>
 
 #include "common/common_types.h"
+#include "common/settings_enums.h"
 #include "common/settings_input.h"
 
 namespace Settings {
 
-enum class Language : u32 {
-    Japanese,
-    EnglishAmerican,
-    French,
-    German,
-    Italian,
-    Spanish,
-    Chinese,
-    Korean,
-    Dutch,
-    Portuguese,
-    Russian,
-    Taiwanese,
-    EnglishBritish,
-    FrenchCanadian,
-    SpanishLatin,
-    ChineseSimplified,
-    ChineseTraditional,
-    PortugueseBrazilian,
-};
-
-enum class Region : u32 {
-    Japan,
-    USA,
-    Europe,
-    Australia,
-    China,
-    Korea,
-    Taiwan,
-};
-
-enum class TimeZone : u32 {
-    Auto,
-    Default,
-    CET,
-    CST6CDT,
-    Cuba,
-    EET,
-    Egypt,
-    Eire,
-    EST,
-    EST5EDT,
-    GB,
-    GBEire,
-    GMT,
-    GMTPlusZero,
-    GMTMinusZero,
-    GMTZero,
-    Greenwich,
-    Hongkong,
-    HST,
-    Iceland,
-    Iran,
-    Israel,
-    Jamaica,
-    Japan,
-    Kwajalein,
-    Libya,
-    MET,
-    MST,
-    MST7MDT,
-    Navajo,
-    NZ,
-    NZCHAT,
-    Poland,
-    Portugal,
-    PRC,
-    PST8PDT,
-    ROC,
-    ROK,
-    Singapore,
-    Turkey,
-    UCT,
-    Universal,
-    UTC,
-    W_SU,
-    WET,
-    Zulu,
-};
-
-enum class AnisotropyMode : u32 {
-    Automatic = 0,
-    Default = 1,
-    X2 = 2,
-    X4 = 3,
-    X8 = 4,
-    X16 = 5,
-};
-
-enum class AstcDecodeMode : u32 {
-    CPU = 0,
-    GPU = 1,
-    CPUAsynchronous = 2,
-};
-
-enum class VSyncMode : u32 {
-    Immediate = 0,
-    Mailbox = 1,
-    FIFO = 2,
-    FIFORelaxed = 3,
-};
-
-enum class RendererBackend : u32 {
-    OpenGL = 0,
-    Vulkan = 1,
-    Null = 2,
-};
-
-enum class ShaderBackend : u32 {
-    GLSL = 0,
-    GLASM = 1,
-    SPIRV = 2,
-};
-
-enum class GPUAccuracy : u32 {
-    Normal = 0,
-    High = 1,
-    Extreme = 2,
-    MaxEnum = 3,
-};
-
-enum class CPUAccuracy : u32 {
-    Auto = 0,
-    Accurate = 1,
-    Unsafe = 2,
-    Paranoid = 3,
-};
-
-enum class FullscreenMode : u32 {
-    Borderless = 0,
-    Exclusive = 1,
-};
-
-enum class NvdecEmulation : u32 {
-    Off = 0,
-    CPU = 1,
-    GPU = 2,
-};
-
-enum class ResolutionSetup : u32 {
-    Res1_2X = 0,
-    Res3_4X = 1,
-    Res1X = 2,
-    Res3_2X = 3,
-    Res2X = 4,
-    Res3X = 5,
-    Res4X = 6,
-    Res5X = 7,
-    Res6X = 8,
-    Res7X = 9,
-    Res8X = 10,
-};
-
-enum class ScalingFilter : u32 {
-    NearestNeighbor = 0,
-    Bilinear = 1,
-    Bicubic = 2,
-    Gaussian = 3,
-    ScaleForce = 4,
-    Fsr = 5,
-    LastFilter = Fsr,
-};
-
-enum class AntiAliasing : u32 {
-    None = 0,
-    Fxaa = 1,
-    Smaa = 2,
-    LastAA = Smaa,
-};
-
-enum class AstcRecompression : u32 {
-    Uncompressed = 0,
-    Bc1 = 1,
-    Bc3 = 2,
-};
-
-enum class AspectRatio : u32 {
-    R16_9,
-    R4_3,
-    R21_9,
-    R16_10,
-    Stretch,
-};
-
 enum class Category : u32 {
     Audio,
     Core,
@@ -278,7 +95,7 @@ public:
     virtual std::string DefaultToString() const = 0;
     virtual bool Save() const = 0;
     virtual std::type_index TypeId() const = 0;
-    virtual bool IsEnum() const = 0;
+    virtual constexpr bool IsEnum() const = 0;
     virtual bool RuntimeModfiable() const = 0;
     virtual void SetGlobal(bool global) {}
     virtual constexpr u32 Id() const = 0;
@@ -406,7 +223,7 @@ public:
         return runtime_modifiable;
     }
 
-    [[nodiscard]] bool IsEnum() const override {
+    [[nodiscard]] constexpr bool IsEnum() const override {
         return std::is_enum<Type>::value;
     }
 

+ 237 - 0
src/common/settings_enums.h

@@ -0,0 +1,237 @@
+// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#pragma once
+
+#include <map>
+#include <string>
+#include <type_traits>
+#include <typeindex>
+#include "common/common_types.h"
+
+namespace Settings {
+
+enum class AudioEngine : u32 {
+    Auto,
+    Cubeb,
+    Sdl2,
+    Null,
+};
+
+enum class AudioMode : u32 {
+    Mono,
+    Stereo,
+    Surround,
+};
+
+enum class Language : u32 {
+    Japanese,
+    EnglishAmerican,
+    French,
+    German,
+    Italian,
+    Spanish,
+    Chinese,
+    Korean,
+    Dutch,
+    Portuguese,
+    Russian,
+    Taiwanese,
+    EnglishBritish,
+    FrenchCanadian,
+    SpanishLatin,
+    ChineseSimplified,
+    ChineseTraditional,
+    PortugueseBrazilian,
+};
+
+enum class Region : u32 {
+    Japan,
+    USA,
+    Europe,
+    Australia,
+    China,
+    Korea,
+    Taiwan,
+};
+
+enum class TimeZone : u32 {
+    Auto,
+    Default,
+    CET,
+    CST6CDT,
+    Cuba,
+    EET,
+    Egypt,
+    Eire,
+    EST,
+    EST5EDT,
+    GB,
+    GBEire,
+    GMT,
+    GMTPlusZero,
+    GMTMinusZero,
+    GMTZero,
+    Greenwich,
+    Hongkong,
+    HST,
+    Iceland,
+    Iran,
+    Israel,
+    Jamaica,
+    Japan,
+    Kwajalein,
+    Libya,
+    MET,
+    MST,
+    MST7MDT,
+    Navajo,
+    NZ,
+    NZCHAT,
+    Poland,
+    Portugal,
+    PRC,
+    PST8PDT,
+    ROC,
+    ROK,
+    Singapore,
+    Turkey,
+    UCT,
+    Universal,
+    UTC,
+    W_SU,
+    WET,
+    Zulu,
+};
+
+enum class AnisotropyMode : u32 {
+    Automatic = 0,
+    Default = 1,
+    X2 = 2,
+    X4 = 3,
+    X8 = 4,
+    X16 = 5,
+};
+
+enum class AstcDecodeMode : u32 {
+    CPU = 0,
+    GPU = 1,
+    CPUAsynchronous = 2,
+};
+
+enum class AstcRecompression : u32 {
+    Uncompressed = 0,
+    Bc1 = 1,
+    Bc3 = 2,
+};
+
+enum class VSyncMode : u32 {
+    Immediate = 0,
+    Mailbox = 1,
+    FIFO = 2,
+    FIFORelaxed = 3,
+};
+
+enum class RendererBackend : u32 {
+    OpenGL = 0,
+    Vulkan = 1,
+    Null = 2,
+};
+
+enum class ShaderBackend : u32 {
+    GLSL = 0,
+    GLASM = 1,
+    SPIRV = 2,
+};
+
+enum class GPUAccuracy : u32 {
+    Normal = 0,
+    High = 1,
+    Extreme = 2,
+    MaxEnum = 3,
+};
+
+enum class CPUAccuracy : u32 {
+    Auto = 0,
+    Accurate = 1,
+    Unsafe = 2,
+    Paranoid = 3,
+};
+
+enum class FullscreenMode : u32 {
+    Borderless = 0,
+    Exclusive = 1,
+};
+
+enum class NvdecEmulation : u32 {
+    Off = 0,
+    CPU = 1,
+    GPU = 2,
+};
+
+enum class ResolutionSetup : u32 {
+    Res1_2X = 0,
+    Res3_4X = 1,
+    Res1X = 2,
+    Res3_2X = 3,
+    Res2X = 4,
+    Res3X = 5,
+    Res4X = 6,
+    Res5X = 7,
+    Res6X = 8,
+    Res7X = 9,
+    Res8X = 10,
+};
+
+enum class ScalingFilter : u32 {
+    NearestNeighbor = 0,
+    Bilinear = 1,
+    Bicubic = 2,
+    Gaussian = 3,
+    ScaleForce = 4,
+    Fsr = 5,
+    LastFilter = Fsr,
+};
+
+enum class AntiAliasing : u32 {
+    None = 0,
+    Fxaa = 1,
+    Smaa = 2,
+    LastAA = Smaa,
+};
+
+enum class AspectRatio : u32 {
+    R16_9,
+    R4_3,
+    R21_9,
+    R16_10,
+    Stretch,
+};
+
+static std::map<std::type_index, std::map<std::string, u32>> translations = {
+    {typeid(AudioEngine),
+     {
+         {"auto", static_cast<u32>(AudioEngine::Auto)},
+         {"cubeb", static_cast<u32>(AudioEngine::Cubeb)},
+         {"sdl2", static_cast<u32>(AudioEngine::Sdl2)},
+         {"null", static_cast<u32>(AudioEngine::Null)},
+     }}};
+
+static std::string empty_string{};
+
+template <typename Type>
+const std::string& TranslateEnum(Type id) {
+    auto& group = translations.at(typeid(Type));
+    for (auto& [name, value] : group) {
+        if (static_cast<Type>(value) == id) {
+            return name;
+        }
+    }
+    return empty_string;
+}
+
+template <typename Type>
+static Type ToEnum(const std::string& text) {
+    return static_cast<Type>(translations.at(typeid(Type)).at(text));
+}
+} // namespace Settings