/*
 * Copyright (C) 2020-2021 Aloysius Indrayanto
 *
 * This file is part of the eCxx library, see LICENSE file for the license details.
 */


#ifndef ECXX_CTL_GFX_COLOR_BUILT_IN_H
#define ECXX_CTL_GFX_COLOR_BUILT_IN_H


#include "ColorTypes.h"


namespace eCxx {


namespace Ext {


//
// Built-in K colors
//
namespace K {

static constexpr const KColor* const null = nullptr;

extern const KColor volcanicLava;
extern const KColor match;
extern const KColor candle;
extern const KColor highPressure;
extern const KColor incandescent;
extern const KColor warmWhite;
extern const KColor halogen;
extern const KColor metalHalide;
extern const KColor naturalWhite;
extern const KColor sunlight;
extern const KColor dayWhite;
extern const KColor cloudySky;
extern const KColor coolWhite;
extern const KColor blueSky;

} // namespace K


//
// Built-in W colors
//
namespace W {

static constexpr const WColor* const null = nullptr;

extern const WColor black;
extern const WColor white;
extern const WColor darkGray;
extern const WColor gray;

} // namespace W


//
// Built-in RGB colors
//
namespace RGB {

static constexpr const RGBColor* const null = nullptr;

extern const RGBColor black;
extern const RGBColor white;
extern const RGBColor darkGray;
extern const RGBColor gray;

extern const RGBColor darkRed;
extern const RGBColor red;
extern const RGBColor darkGreen;
extern const RGBColor green;
extern const RGBColor darkBlue;
extern const RGBColor blue;

extern const RGBColor darkYellow;
extern const RGBColor yellow;
extern const RGBColor darkMagenta;
extern const RGBColor magenta;
extern const RGBColor darkCyan;
extern const RGBColor cyan;

extern const RGBColor darkBrown;
extern const RGBColor brown;
extern const RGBColor darkOrange;
extern const RGBColor orange;
extern const RGBColor darkPurple;
extern const RGBColor purple;

extern const RGBColor darkPink;
extern const RGBColor pink;
extern const RGBColor darkSalmon;
extern const RGBColor salmon;
extern const RGBColor warmWhite;
extern const RGBColor coolWhite;

} // namespace RGB


//
// Built-in RGBW colors
//
namespace RGBW {

static constexpr const RGBWColor* const null = nullptr;

extern const RGBWColor black;
extern const RGBWColor white;
extern const RGBWColor darkGray;
extern const RGBWColor gray;

extern const RGBWColor darkRed;
extern const RGBWColor red;
extern const RGBWColor darkGreen;
extern const RGBWColor green;
extern const RGBWColor darkBlue;
extern const RGBWColor blue;

extern const RGBWColor darkYellow;
extern const RGBWColor yellow;
extern const RGBWColor darkMagenta;
extern const RGBWColor magenta;
extern const RGBWColor darkCyan;
extern const RGBWColor cyan;

extern const RGBWColor darkBrown;
extern const RGBWColor brown;
extern const RGBWColor darkOrange;
extern const RGBWColor orange;
extern const RGBWColor darkPurple;
extern const RGBWColor purple;

extern const RGBWColor darkPink;
extern const RGBWColor pink;
extern const RGBWColor darkSalmon;
extern const RGBWColor salmon;
extern const RGBWColor warmWhite;
extern const RGBWColor coolWhite;

} // namespace RGBW


//
// Built-in HSV colors
//
namespace HSV {

static constexpr const HSVColor* const null = nullptr;

extern const HSVColor black;
extern const HSVColor white;
extern const HSVColor darkGray;
extern const HSVColor gray;

extern const HSVColor darkRed;
extern const HSVColor red;
extern const HSVColor darkGreen;
extern const HSVColor green;
extern const HSVColor darkBlue;
extern const HSVColor blue;

extern const HSVColor darkYellow;
extern const HSVColor yellow;
extern const HSVColor darkMagenta;
extern const HSVColor magenta;
extern const HSVColor darkCyan;
extern const HSVColor cyan;

extern const HSVColor darkBrown;
extern const HSVColor brown;
extern const HSVColor darkOrange;
extern const HSVColor orange;
extern const HSVColor darkPurple;
extern const HSVColor purple;

extern const HSVColor darkPink;
extern const HSVColor pink;
extern const HSVColor darkSalmon;
extern const HSVColor salmon;
extern const HSVColor warmWhite;
extern const HSVColor coolWhite;

} // namespace HSV


//
// Built-in HSL colors
//
namespace HSL {

static constexpr const HSLColor* const null = nullptr;

extern const HSLColor black;
extern const HSLColor white;
extern const HSLColor darkGray;
extern const HSLColor gray;

extern const HSLColor darkRed;
extern const HSLColor red;
extern const HSLColor darkGreen;
extern const HSLColor green;
extern const HSLColor darkBlue;
extern const HSLColor blue;

extern const HSLColor darkYellow;
extern const HSLColor yellow;
extern const HSLColor darkMagenta;
extern const HSLColor magenta;
extern const HSLColor darkCyan;
extern const HSLColor cyan;

extern const HSLColor darkBrown;
extern const HSLColor brown;
extern const HSLColor darkOrange;
extern const HSLColor orange;
extern const HSLColor darkPurple;
extern const HSLColor purple;

extern const HSLColor darkPink;
extern const HSLColor pink;
extern const HSLColor darkSalmon;
extern const HSLColor salmon;
extern const HSLColor warmWhite;
extern const HSLColor coolWhite;

} // namespace HSL


} // namespace Ext


} // namespace eCxx


#endif
