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() * @see @ref fromXyz()
*/ */
Vector3<FloatingPointType> toXyz() const { 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) 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 constructCopy();
void convert(); void convert();
void data();
void literals(); void literals();
void colors(); void colors();
@ -125,6 +127,8 @@ ColorTest::ColorTest() {
&ColorTest::constructCopy, &ColorTest::constructCopy,
&ColorTest::convert, &ColorTest::convert,
&ColorTest::data,
&ColorTest::literals, &ColorTest::literals,
&ColorTest::colors, &ColorTest::colors,
@ -333,6 +337,25 @@ void ColorTest::convert() {
CORRADE_VERIFY(!(std::is_convertible<Color4, Vec4>::value)); 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() { void ColorTest::literals() {
using namespace Literals; using namespace Literals;

Loading…
Cancel
Save