Browse Source

Math: Color4::{xyz,rgb}() should return Color3, not Vector3.

pull/193/head
Vladimír Vondruš 9 years ago
parent
commit
8637cbdc31
  1. 11
      src/Magnum/Math/Color.h
  2. 23
      src/Magnum/Math/Test/ColorTest.cpp

11
src/Magnum/Math/Color.h

@ -947,9 +947,18 @@ class Color4: public Vector4<T> {
* @see @ref fromXyz()
*/
Vector3<FloatingPointType> toXyz() const {
return Implementation::toXyz<T>(Vector4<T>::rgb());
return Implementation::toXyz<T>(rgb());
}
/* Overloads to remove WTF-factor from return types */
#ifndef DOXYGEN_GENERATING_OUTPUT
Color3<T>& xyz() { return Color3<T>::from(Vector4<T>::data()); }
constexpr const Color3<T> xyz() const { return Vector4<T>::xyz(); }
Color3<T>& rgb() { return xyz(); }
constexpr const Color3<T> rgb() const { return xyz(); }
#endif
MAGNUM_VECTOR_SUBCLASS_IMPLEMENTATION(4, Color4)
};

23
src/Magnum/Math/Test/ColorTest.cpp

@ -79,6 +79,8 @@ struct ColorTest: Corrade::TestSuite::Tester {
void constructCopy();
void convert();
void data();
void literals();
void colors();
@ -125,6 +127,8 @@ ColorTest::ColorTest() {
&ColorTest::constructCopy,
&ColorTest::convert,
&ColorTest::data,
&ColorTest::literals,
&ColorTest::colors,
@ -333,6 +337,25 @@ void ColorTest::convert() {
CORRADE_VERIFY(!(std::is_convertible<Color4, Vec4>::value));
}
void ColorTest::data() {
Color4 c{1.0f, 2.0f, 3.0f, 4.0f};
constexpr const Color4 cc{1.0f, 2.0f, 3.0f, 4.0f};
Color3 c3a = c.rgb();
Color3 c3b = c.xyz();
constexpr Color3 cc3a{cc.rgb()};
constexpr Color3 cc3b{cc.xyz()};
CORRADE_COMPARE(c3a, (Color3{1.0f, 2.0f, 3.0f}));
CORRADE_COMPARE(c3b, (Color3{1.0f, 2.0f, 3.0f}));
CORRADE_COMPARE(cc3a, (Color3{1.0f, 2.0f, 3.0f}));
CORRADE_COMPARE(cc3b, (Color3{1.0f, 2.0f, 3.0f}));
CORRADE_VERIFY((std::is_same<decltype(c.xyz()), Color3&>::value));
CORRADE_VERIFY((std::is_same<decltype(cc.xyz()), const Color3>::value));
CORRADE_VERIFY((std::is_same<decltype(c.rgb()), Color3&>::value));
CORRADE_VERIFY((std::is_same<decltype(cc.rgb()), const Color3>::value));
}
void ColorTest::literals() {
using namespace Literals;

Loading…
Cancel
Save