Skip to content
Snippets Groups Projects
Commit 0098ecb6 authored by lat9nq's avatar lat9nq
Browse files

settings: Retro-port Citra Settings work

This has yet to be PR'd on Citra, but regressions on yuzu that have
been fixed in Citra needed to appear here.
parent 85e17547
No related branches found
No related tags found
No related merge requests found
...@@ -225,6 +225,16 @@ public: ...@@ -225,6 +225,16 @@ public:
*/ */
[[nodiscard]] virtual constexpr u32 EnumIndex() const = 0; [[nodiscard]] virtual constexpr u32 EnumIndex() const = 0;
/**
* @returns True if the underlying type is a floating point storage
*/
[[nodiscard]] virtual constexpr bool IsFloatingPoint() const = 0;
/**
* @returns True if the underlying type is a integer storage
*/
[[nodiscard]] virtual constexpr bool IsIntegral() const = 0;
/* /*
* Switchable settings * Switchable settings
*/ */
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include <string> #include <string>
#include <typeindex> #include <typeindex>
#include <typeinfo> #include <typeinfo>
#include <fmt/core.h>
#include "common/common_types.h" #include "common/common_types.h"
#include "common/settings_common.h" #include "common/settings_common.h"
#include "common/settings_enums.h" #include "common/settings_enums.h"
...@@ -112,11 +113,12 @@ protected: ...@@ -112,11 +113,12 @@ protected:
return value_.has_value() ? std::to_string(*value_) : "none"; return value_.has_value() ? std::to_string(*value_) : "none";
} else if constexpr (std::is_same_v<Type, bool>) { } else if constexpr (std::is_same_v<Type, bool>) {
return value_ ? "true" : "false"; return value_ ? "true" : "false";
} else if constexpr (std::is_same_v<Type, AudioEngine>) { } else if constexpr (std::is_floating_point_v<Type>) {
// Compatibility with old AudioEngine setting being a string return fmt::format("{:f}", value_);
return CanonicalizeEnum(value_); } else if constexpr (std::is_enum_v<Type>) {
return std::to_string(static_cast<u32>(value_));
} else { } else {
return std::to_string(static_cast<u64>(value_)); return std::to_string(value_);
} }
} }
...@@ -180,13 +182,15 @@ public: ...@@ -180,13 +182,15 @@ public:
this->SetValue(static_cast<u32>(std::stoul(input))); this->SetValue(static_cast<u32>(std::stoul(input)));
} else if constexpr (std::is_same_v<Type, bool>) { } else if constexpr (std::is_same_v<Type, bool>) {
this->SetValue(input == "true"); this->SetValue(input == "true");
} else if constexpr (std::is_same_v<Type, AudioEngine>) { } else if constexpr (std::is_same_v<Type, float>) {
this->SetValue(ToEnum<Type>(input)); this->SetValue(std::stof(input));
} else { } else {
this->SetValue(static_cast<Type>(std::stoll(input))); this->SetValue(static_cast<Type>(std::stoll(input)));
} }
} catch (std::invalid_argument&) { } catch (std::invalid_argument&) {
this->SetValue(this->GetDefault()); this->SetValue(this->GetDefault());
} catch (std::out_of_range&) {
this->SetValue(this->GetDefault());
} }
} }
...@@ -215,11 +219,27 @@ public: ...@@ -215,11 +219,27 @@ public:
} }
} }
[[nodiscard]] constexpr bool IsFloatingPoint() const final {
return std::is_floating_point_v<Type>;
}
[[nodiscard]] constexpr bool IsIntegral() const final {
return std::is_integral_v<Type>;
}
[[nodiscard]] std::string MinVal() const override final { [[nodiscard]] std::string MinVal() const override final {
return this->ToString(minimum); if constexpr (std::is_arithmetic_v<Type> && !ranged) {
return this->ToString(std::numeric_limits<Type>::min());
} else {
return this->ToString(minimum);
}
} }
[[nodiscard]] std::string MaxVal() const override final { [[nodiscard]] std::string MaxVal() const override final {
return this->ToString(maximum); if constexpr (std::is_arithmetic_v<Type> && !ranged) {
return this->ToString(std::numeric_limits<Type>::max());
} else {
return this->ToString(maximum);
}
} }
[[nodiscard]] constexpr bool Ranged() const override { [[nodiscard]] constexpr bool Ranged() const override {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment