From 37565d5414dd1f0280dc57b96ac49c3d43c42de7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Thu, 24 Nov 2016 12:07:53 +0100 Subject: [PATCH] Math: print 8-bit colors as hex in Debug. So #ffffff00 instead of Vector(255, 255, 255, 0). Much shorter with the same information value. --- src/Magnum/CMakeLists.txt | 1 + src/Magnum/Math/Color.cpp | 58 ++++++++++++++++++++++++++++++ src/Magnum/Math/Color.h | 6 ++++ src/Magnum/Math/Test/ColorTest.cpp | 14 ++++++++ 4 files changed, 79 insertions(+) create mode 100644 src/Magnum/Math/Color.cpp diff --git a/src/Magnum/CMakeLists.txt b/src/Magnum/CMakeLists.txt index 6fdc91788..061f94ebc 100644 --- a/src/Magnum/CMakeLists.txt +++ b/src/Magnum/CMakeLists.txt @@ -229,6 +229,7 @@ endif() # Files shared between main library and math unit test library set(MagnumMath_SRCS + Math/Color.cpp Math/Functions.cpp Math/instantiation.cpp) diff --git a/src/Magnum/Math/Color.cpp b/src/Magnum/Math/Color.cpp new file mode 100644 index 000000000..56a6a725e --- /dev/null +++ b/src/Magnum/Math/Color.cpp @@ -0,0 +1,58 @@ +/* + This file is part of Magnum. + + Copyright © 2010, 2011, 2012, 2013, 2014, 2015, 2016 + Vladimír Vondruš + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#include "Color.h" + +namespace Magnum { namespace Math { + +namespace { + constexpr const char Hex[]{"0123456789abcdef"}; +} + +Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug& debug, const Color3& value) { + char out[] = "#______"; + out[1] = Hex[(value.r() >> 4) & 0xf]; + out[2] = Hex[(value.r() >> 0) & 0xf]; + out[3] = Hex[(value.g() >> 4) & 0xf]; + out[4] = Hex[(value.g() >> 0) & 0xf]; + out[5] = Hex[(value.b() >> 4) & 0xf]; + out[6] = Hex[(value.b() >> 0) & 0xf]; + return debug << out; +} + +Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug& debug, const Color4& value) { + char out[] = "#________"; + out[1] = Hex[(value.r() >> 4) & 0xf]; + out[2] = Hex[(value.r() >> 0) & 0xf]; + out[3] = Hex[(value.g() >> 4) & 0xf]; + out[4] = Hex[(value.g() >> 0) & 0xf]; + out[5] = Hex[(value.b() >> 4) & 0xf]; + out[6] = Hex[(value.b() >> 0) & 0xf]; + out[7] = Hex[(value.a() >> 4) & 0xf]; + out[8] = Hex[(value.a() >> 0) & 0xf]; + return debug << out; +} + +}} diff --git a/src/Magnum/Math/Color.h b/src/Magnum/Math/Color.h index 6269587d0..3b1555f85 100644 --- a/src/Magnum/Math/Color.h +++ b/src/Magnum/Math/Color.h @@ -615,11 +615,17 @@ template inline Corrade::Utility::Debug& operator<<(Corrade::Utility::D return debug << static_cast&>(value); } +/** @debugoperator{Magnum::Math::Color3} */ +MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug& debug, const Color3& value); + /** @debugoperator{Magnum::Math::Color4} */ template inline Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug& debug, const Color4& value) { return debug << static_cast&>(value); } +/** @debugoperator{Magnum::Math::Color4} */ +MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utility::Debug& debug, const Color4& value); + namespace Implementation { template struct TypeForSize<3, Color3> { typedef Color3 Type; }; template struct TypeForSize<3, Color4> { typedef Color3 Type; }; diff --git a/src/Magnum/Math/Test/ColorTest.cpp b/src/Magnum/Math/Test/ColorTest.cpp index 014a2cb8a..236366986 100644 --- a/src/Magnum/Math/Test/ColorTest.cpp +++ b/src/Magnum/Math/Test/ColorTest.cpp @@ -96,6 +96,7 @@ struct ColorTest: Corrade::TestSuite::Tester { void swizzleType(); void debug(); + void debugUb(); void configuration(); }; @@ -140,6 +141,7 @@ ColorTest::ColorTest() { &ColorTest::swizzleType, &ColorTest::debug, + &ColorTest::debugUb, &ColorTest::configuration}); } @@ -462,6 +464,18 @@ void ColorTest::debug() { CORRADE_COMPARE(o.str(), "Vector(0.5, 0.75, 0, 1)\n"); } +void ColorTest::debugUb() { + using namespace Magnum::Math::Literals; + + std::ostringstream o; + Debug(&o) << 0x123456_rgb << 0x789abc_rgb; + CORRADE_COMPARE(o.str(), "#123456 #789abc\n"); + + o.str({}); + Debug(&o) << 0x12345678_rgba << 0x90abcdef_rgba; + CORRADE_COMPARE(o.str(), "#12345678 #90abcdef\n"); +} + void ColorTest::configuration() { Corrade::Utility::Configuration c;