← Back to file list Raw

src/U_ConsoleColors.cpp

#include "U_ConsoleColors.h"
#include "CColorInt.h"
int ConsoleColors::Internal::GetBrightness(const CColorInt& color)
{
//CColorInt color = _color.GetIntColor();
return (color.r + color.g + color.b) / 3;
}
CConsoleColor ConsoleColors::Internal::GetDominantColor(const CColorInt& color, int brightness)
{
//CColorInt color = _color.GetIntColor();
if (brightness < 128)
{
if (color.r > color.g && color.r > color.b) { return CConsoleColor::Red; }
if (color.g > color.r && color.g > color.b) { return CConsoleColor::Green; }
if (color.b > color.r && color.b > color.g) { return CConsoleColor::Blue; }
return CConsoleColor::Black;
}
else
{
if (color.r > color.g && color.r > color.b) { return CConsoleColor::LightRed; }
if (color.g > color.r && color.g > color.b) { return CConsoleColor::LightGreen; }
if (color.b > color.r && color.b > color.g) { return CConsoleColor::LightBlue; }
return CConsoleColor::LightGray;
}
}
CConsoleColor ConsoleColors::RGBToConsoleColor(const CColor& _color)
{
CColorInt color = _color.GetIntColor();
int brightness = Internal::GetBrightness(color);
if (color.r == color.g && color.g == color.b)
{
if (brightness < 64) { return CConsoleColor::Black; }
if (brightness < 128) { return CConsoleColor::DarkGray; }
if (brightness < 192) { return CConsoleColor::LightGray; }
return CConsoleColor::White;
}
else
{
if (color.r > 128 && color.g > 128 && color.b < 128)
{
return CConsoleColor::Yellow;
}
CConsoleColor dominantColor = Internal::GetDominantColor(color, brightness);
if (dominantColor == CConsoleColor::Red)
{
if (color.g > 128 && color.b > 128) { return CConsoleColor::Magenta; }
if (color.g > 128) { return CConsoleColor::Yellow; }
return CConsoleColor::Red;
}
else if (dominantColor == CConsoleColor::Green)
{
if (color.b > 128) { return CConsoleColor::Cyan; }
return CConsoleColor::Green;
}
else if (dominantColor == CConsoleColor::Blue)
{
return CConsoleColor::Blue;
}
else if (dominantColor == CConsoleColor::LightRed)
{
if (color.g > 128 && color.b > 128) { return CConsoleColor::LightMagenta; }
if (color.g > 128) { return CConsoleColor::Yellow; }
return CConsoleColor::LightRed;
}
else if (dominantColor == CConsoleColor::LightGreen)
{
if (color.b > 128) { return CConsoleColor::LightCyan; }
return CConsoleColor::LightGreen;
}
else if (dominantColor == CConsoleColor::LightBlue)
{
return CConsoleColor::LightBlue;
}
}
return CConsoleColor::Black;
}
CColor ConsoleColors::ConsoleColorToRGB(CConsoleColor color)
{
switch (color)
{
case CConsoleColor::Black: return CColor::FromIntColor({ 0, 0, 0 });
case CConsoleColor::Blue: return CColor::FromIntColor({ 0, 0, 128 });
case CConsoleColor::Green: return CColor::FromIntColor({ 0, 128, 0 });
case CConsoleColor::Cyan: return CColor::FromIntColor({ 0, 128, 128 });
case CConsoleColor::Red: return CColor::FromIntColor({ 128, 0, 0 });
case CConsoleColor::Magenta: return CColor::FromIntColor({ 128, 0, 128 });
case CConsoleColor::Brown: return CColor::FromIntColor({ 128, 128, 0 });
case CConsoleColor::LightGray: return CColor::FromIntColor({ 192, 192, 192 });
case CConsoleColor::DarkGray: return CColor::FromIntColor({ 128, 128, 128 });
case CConsoleColor::LightBlue: return CColor::FromIntColor({ 0, 0, 255 });
case CConsoleColor::LightGreen: return CColor::FromIntColor({ 0, 255, 0 });
case CConsoleColor::LightCyan: return CColor::FromIntColor({ 0, 255, 255 });
case CConsoleColor::LightRed: return CColor::FromIntColor({ 255, 0, 0 });
case CConsoleColor::LightMagenta: return CColor::FromIntColor({ 255, 0, 255 });
case CConsoleColor::Yellow: return CColor::FromIntColor({ 255, 255, 0 });
case CConsoleColor::White: return CColor::FromIntColor({ 255, 255, 255 });
default: return CColor::FromIntColor({ 0, 0, 0 });
}
}