SDLU/include/structures/Color.hpp
2021-04-23 15:08:51 +02:00

169 lines
5.1 KiB
C++

/**
* @file Color.hpp
* @brief Provides utility for creating and handling colors
* @author Lauchmelder23
* @date 16.05.2020
*/
#pragma once
#include "Util.hpp"
SDLU_BEGIN
/**
* @brief A structure holding color data
*
* This struct allows for the easy passing of color data between
* objects or functions. It holds RGBA values and allows for
* arithmetical operations.
*/
struct Color
{
Uint8 r; ///< Red component
Uint8 g; ///< Green component
Uint8 b; ///< Blue component
Uint8 a; ///< Alpha component
/**
* @brief Default constructor (Black)
*/
Color();
/**
* @brief Construct color from four 8-Bit integer values
*
* @param[in] r Red component
* @param[in] g Green component
* @param[in] b Blue component
* @param[in] a Alpha component
*/
Color(Uint8 r, Uint8 g, Uint8 b, Uint8 a = 255);
/**
* @brief Construct color from a 32-Bit integer value
*
* @param[in] color The color data structured as RGBA
*/
Color(Uint32 color);
/**
* @brief Returns color data as a 32-Bit integer
*
* @return A 32-Bit containing the RGBA values
*/
Uint32 ToInt();
/**
* @brief Generate color from HSV values
*
* @return An RGBA Color object generated from HSV
*/
static Color FromHSV(Uint16 h, Uint8 s, Uint8 v);
/////////////////// DEFAULT COLORS ///////////////////
static const Color Black; ///< Default Color Black (#000000FF)
static const Color Red; ///< Default Color Red (#FF0000FF)
static const Color Green; ///< Default Color Green (#00FF00FF)
static const Color Blue; ///< Default Color Blue (#0000FFFF)
static const Color Yellow; ///< Default Color Yellow (#FFFF00FF)
static const Color Magenta; ///< Default Color Magenta (#FF00FFFF)
static const Color Cyan; ///< Default Color Cyan (#00FFFFFF)
static const Color White; ///< Default Color White (#FFFFFFFF)
static const Color Transparent; ///< Default Color Transparent (#00000000)
/////////////////// OPERATOR OVERLOADS ///////////////////
/**
* @brief Componentwise color addition
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return left + right
*/
friend Color operator+(const Color& left, const Color& right);
/**
* @brief Componentwise color subtraction
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return left - right
*/
friend Color operator-(const Color& left, const Color& right);
/**
* @brief Componentwise color multiplication
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return left * right
*/
friend Color operator*(const Color& left, const Color& right);
/**
* @brief Componentwise color division
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return left / right
*/
friend Color operator/(const Color& left, const Color& right);
/**
* @brief Componentwise color addition
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return left += right
*/
friend Color& operator+=(Color& left, const Color& right);
/**
* @brief Componentwise color subtraction
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return left -= right
*/
friend Color& operator-=(Color& left, const Color& right);
/**
* @brief Componentwise color multiplication
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return left *= right
*/
friend Color& operator*=(Color& left, const Color& right);
/**
* @brief Componentwise color division
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return left /= right
*/
friend Color& operator/=(Color& left, const Color& right);
/**
* @brief Componentwise color comparison
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return True if the respective color components are equal, False if not
*/
friend bool operator==(const Color& left, const Color& right);
/**
* @brief Componentwise color comparison
*
* @param[in] left Left operand
* @param[in] right Right operand
* @return False if the respective color components are equal, True if not
*/
friend bool operator!=(const Color& left, const Color& right);
};
SDLU_END