diff --git a/src/Magnum/Math/Angle.h b/src/Magnum/Math/Angle.h index c5d40cdf4..e84335d23 100644 --- a/src/Magnum/Math/Angle.h +++ b/src/Magnum/Math/Angle.h @@ -268,4 +268,38 @@ extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utili }} +namespace Corrade { namespace Utility { + +/** @configurationvalue{Magnum::Math::Deg} */ +template struct ConfigurationValue> { + ConfigurationValue() = delete; + + /** @brief Writes degrees as a number */ + static std::string toString(const Magnum::Math::Deg& value, ConfigurationValueFlags flags) { + return ConfigurationValue::toString(T(value), flags); + } + + /** @brief Reads degrees as a number */ + static Magnum::Math::Deg fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + return Magnum::Math::Deg(ConfigurationValue::fromString(stringValue, flags)); + } +}; + +/** @configurationvalue{Magnum::Math::Rad} */ +template struct ConfigurationValue> { + ConfigurationValue() = delete; + + /** @brief Writes degrees as a number */ + static std::string toString(const Magnum::Math::Rad& value, ConfigurationValueFlags flags) { + return ConfigurationValue::toString(T(value), flags); + } + + /** @brief Reads degrees as a number */ + static Magnum::Math::Rad fromString(const std::string& stringValue, ConfigurationValueFlags flags) { + return Magnum::Math::Rad(ConfigurationValue::fromString(stringValue, flags)); + } +}; + +}} + #endif diff --git a/src/Magnum/Math/Test/AngleTest.cpp b/src/Magnum/Math/Test/AngleTest.cpp index 43843e70a..aaef1c5cf 100644 --- a/src/Magnum/Math/Test/AngleTest.cpp +++ b/src/Magnum/Math/Test/AngleTest.cpp @@ -25,6 +25,7 @@ #include #include +#include #include "Magnum/Math/Angle.h" @@ -40,6 +41,8 @@ struct AngleTest: Corrade::TestSuite::Tester { void debugDeg(); void debugRad(); + void configurationDeg(); + void configurationRad(); }; typedef Math::Deg Deg; @@ -56,7 +59,9 @@ AngleTest::AngleTest() { &AngleTest::conversion, &AngleTest::debugDeg, - &AngleTest::debugRad}); + &AngleTest::debugRad, + &AngleTest::configurationDeg, + &AngleTest::configurationRad}); } void AngleTest::construct() { @@ -175,6 +180,28 @@ void AngleTest::debugRad() { CORRADE_COMPARE(o.str(), "Rad(-1.5708)\n"); } +void AngleTest::configurationDeg() { + Corrade::Utility::Configuration c; + + Deg angle{25.3f}; + std::string value("25.3"); + + c.setValue("angle", angle); + CORRADE_COMPARE(c.value("angle"), value); + CORRADE_COMPARE(c.value("angle"), angle); +} + +void AngleTest::configurationRad() { + Corrade::Utility::Configuration c; + + Rad angle{3.14159f}; + std::string value("3.14159"); + + c.setValue("angle", angle); + CORRADE_COMPARE(c.value("angle"), value); + CORRADE_COMPARE(c.value("angle"), angle); +} + }}} CORRADE_TEST_MAIN(Magnum::Math::Test::AngleTest)