/** * Copyright (c) 2006-2011 LOVE Development Team * * This software is provided 'as-is', without any express or implied * warranty. In no event will the authors be held liable for any damages * arising from the use of this software. * * Permission is granted to anyone to use this software for any purpose, * including commercial applications, and to alter it and redistribute it * freely, subject to the following restrictions: * * 1. The origin of this software must not be misrepresented; you must not * claim that you wrote the original software. If you use this software * in a product, an acknowledgment in the product documentation would be * appreciated but is not required. * 2. Altered source versions must be plainly marked as such, and must not be * misrepresented as being the original software. * 3. This notice may not be removed or altered from any source distribution. **/ #ifndef LOVE_GRAPHICS_COLOR_H #define LOVE_GRAPHICS_COLOR_H namespace love { namespace graphics { template struct ColorT { T r; T g; T b; T a; ColorT() : r(0), g(0), b(0), a(0) {} ColorT(T r_, T g_, T b_, T a_) : r(r_), g(g_), b(b_), a(a_) {} void set(T r_, T g_, T b_, T a_) { r = r_; g = g_; b = b_; a = a_; } ColorT operator+=(const ColorT& other); ColorT operator*=(T s); ColorT operator/=(T s); }; template ColorT ColorT::operator+=(const ColorT& other) { r += other.r; g += other.g; b += other.b; a += other.a; return *this; } template ColorT ColorT::operator*=(T s) { r *= s; g *= s; b *= s; a *= s; return *this; } template ColorT ColorT::operator/=(T s) { r /= s; g /= s; b /= s; a /= s; return *this; } template ColorT operator+(const ColorT& a, const ColorT& b) { ColorT tmp(a); return tmp += b; } template ColorT operator*(const ColorT& a, T s) { ColorT tmp(a); return tmp *= s; } template ColorT operator/(const ColorT& a, T s) { ColorT tmp(a); return tmp /= s; } typedef ColorT Color; typedef ColorT Colorf; } // graphics } // love #endif // LOVE_GRAPHICS_COLOR_H