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.master
parent
85e1754728
commit
0098ecb609
|
|
@ -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 @@
|
||||||
#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:
|
||||||
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:
|
||||||
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,12 +219,28 @@ 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 {
|
||||||
|
if constexpr (std::is_arithmetic_v<Type> && !ranged) {
|
||||||
|
return this->ToString(std::numeric_limits<Type>::min());
|
||||||
|
} else {
|
||||||
return this->ToString(minimum);
|
return this->ToString(minimum);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
[[nodiscard]] std::string MaxVal() const override final {
|
[[nodiscard]] std::string MaxVal() const override final {
|
||||||
|
if constexpr (std::is_arithmetic_v<Type> && !ranged) {
|
||||||
|
return this->ToString(std::numeric_limits<Type>::max());
|
||||||
|
} else {
|
||||||
return this->ToString(maximum);
|
return this->ToString(maximum);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
[[nodiscard]] constexpr bool Ranged() const override {
|
[[nodiscard]] constexpr bool Ranged() const override {
|
||||||
return ranged;
|
return ranged;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue