15#include "wpi/util/StringExtras.hpp"
22constexpr double ceil_int(
double x,
double x_whole)
noexcept {
23 return (x_whole + ((x > 0) && (x > x_whole)));
26constexpr double ceil(
double x)
noexcept {
27 if (std::is_constant_evaluated()) {
28 return ((x < 0.0 ? -x : x) >= 4503599627370496.
30 :
ceil_int(x,
static_cast<double>(
static_cast<int64_t
>(x))));
779 constexpr Color(
double r,
double g,
double b)
780 :
red(roundAndClamp(r)),
781 green(roundAndClamp(g)),
782 blue(roundAndClamp(b)) {}
791 constexpr Color(
int r,
int g,
int b)
792 :
Color(r / 255.0, g / 255.0, b / 255.0) {}
805 throw std::invalid_argument(
806 fmt::format(
"Invalid color string \"{}\"", str));
811 if (str.length() != 7 || !str.starts_with(
"#") ||
812 !wpi::util::isHexDigit(str[1]) || !wpi::util::isHexDigit(str[2]) ||
813 !wpi::util::isHexDigit(str[3]) || !wpi::util::isHexDigit(str[4]) ||
814 !wpi::util::isHexDigit(str[5]) || !wpi::util::isHexDigit(str[6])) {
815 throw std::invalid_argument(
816 fmt::format(
"Invalid hex string \"{}\"", str));
819 int r = wpi::util::hexDigitValue(str[1]) * 16 +
820 wpi::util::hexDigitValue(str[2]);
821 int g = wpi::util::hexDigitValue(str[3]) * 16 +
822 wpi::util::hexDigitValue(str[4]);
823 int b = wpi::util::hexDigitValue(str[5]) * 16 +
824 wpi::util::hexDigitValue(str[6]);
826 return Color(r, g, b);
830 if (str.starts_with(
"rgb(") && str.ends_with(
")")) {
831 auto [redStr, gbStr] =
832 wpi::util::split(wpi::util::slice(str, 4, str.length() - 1),
',');
833 auto [greenStr, blueStr] = wpi::util::split(gbStr,
',');
834 if (blueStr.empty()) {
835 throw std::invalid_argument(
836 fmt::format(
"Invalid RGB string \"{}\"", str));
838 auto r = wpi::util::parse_integer<uint8_t>(wpi::util::trim(redStr), 10);
839 auto g = wpi::util::parse_integer<uint8_t>(wpi::util::trim(greenStr), 10);
840 auto b = wpi::util::parse_integer<uint8_t>(wpi::util::trim(blueStr), 10);
841 if (!r || !g || !b) {
842 throw std::invalid_argument(
843 fmt::format(
"Invalid RGB string \"{}\"", str));
845 return Color(*r, *g, *b);
848 throw std::invalid_argument(
849 fmt::format(
"Invalid color string \"{}\"", str));
868 int chroma = (s * v) >> 8;
871 int region = (h / 30) % 6;
874 int remainder =
static_cast<int>((h % 30) * (255 / 30.0));
880 int X = (chroma * remainder) >> 8;
884 return Color(v, X + m, m);
886 return Color(v - X, v, m);
888 return Color(m, v, X + m);
890 return Color(m, v - X, v);
892 return Color(X + m, m, v);
894 return Color(v, m, v - X);
904 const int r = 255.0 *
red;
905 const int g = 255.0 *
green;
906 const int b = 255.0 *
blue;
909 {
'#', wpi::util::hexdigit(r / 16), wpi::util::hexdigit(r % 16),
910 wpi::util::hexdigit(g / 16), wpi::util::hexdigit(g % 16),
911 wpi::util::hexdigit(b / 16), wpi::util::hexdigit(b % 16)}};
924 static constexpr double roundAndClamp(
double value) {
925 return std::clamp(
detail::ceil(value * (1 << 12)) / (1 << 12), 0.0, 1.0);
932inline constexpr Color
Color::kDenim{0.0823529412, 0.376470589, 0.7411764706};
Represents colors that can be used with Addressable LEDs.
Definition Color.hpp:42
static const Color kLemonChiffon
0xFFFACD.
Definition Color.hpp:380
static const Color kBlueViolet
0x8A2BE2.
Definition Color.hpp:120
static const Color kMediumSpringGreen
0x00FA9A.
Definition Color.hpp:505
static const Color kAquamarine
0x7FFFD4.
Definition Color.hpp:85
static const Color kLightSkyBlue
0x87CEFA.
Definition Color.hpp:430
static const Color kTurquoise
0x40E0D0.
Definition Color.hpp:735
static const Color kDarkViolet
0x9400D3.
Definition Color.hpp:255
static const Color kMagenta
0xFF00FF.
Definition Color.hpp:465
static const Color kLavenderBlush
0xFFF0F5.
Definition Color.hpp:370
static const Color kGold
0xFFD700.
Definition Color.hpp:310
static const Color kSienna
0xA0522D.
Definition Color.hpp:675
static const Color kCornsilk
0xFFF8DC.
Definition Color.hpp:160
static const Color kLightSteelBlue
0xB0C4DE.
Definition Color.hpp:440
static const Color kBurlywood
0xDEB887.
Definition Color.hpp:130
static const Color kLightCoral
0xF08080.
Definition Color.hpp:390
static const Color kPaleGoldenrod
0xEEE8AA.
Definition Color.hpp:580
static const Color kLightBlue
0xADD8E6.
Definition Color.hpp:385
static const Color kMediumOrchid
0xBA55D3.
Definition Color.hpp:485
static const Color kLime
0x00FF00.
Definition Color.hpp:450
static const Color kSeashell
0xFFF5EE.
Definition Color.hpp:670
static const Color kSkyBlue
0x87CEEB.
Definition Color.hpp:685
static const Color kCadetBlue
0x5F9EA0.
Definition Color.hpp:135
static const Color kBeige
0xF5F5DC.
Definition Color.hpp:95
static const Color kDeepPink
0xFF1493.
Definition Color.hpp:260
constexpr bool operator==(const Color &) const =default
static const Color kIvory
0xFFFFF0.
Definition Color.hpp:355
static const Color kLightPink
0xFFB6C1.
Definition Color.hpp:415
static const Color kLightYellow
0xFFFFE0.
Definition Color.hpp:445
static const Color kMidnightBlue
0x191970.
Definition Color.hpp:520
static const Color kOliveDrab
0x6B8E23.
Definition Color.hpp:560
static const Color kBisque
0xFFE4C4.
Definition Color.hpp:100
static const Color kDarkSeaGreen
0x8FBC8F.
Definition Color.hpp:235
static const Color kLightGreen
0x90EE90.
Definition Color.hpp:410
static const Color kPaleVioletRed
0xDB7093.
Definition Color.hpp:595
static const Color kLightSeaGreen
0x20B2AA.
Definition Color.hpp:425
static const Color kCoral
0xFF7F50.
Definition Color.hpp:150
static const Color kSaddleBrown
0x8B4513.
Definition Color.hpp:650
static const Color kGreen
0x008000.
Definition Color.hpp:325
static const Color kRed
0xFF0000.
Definition Color.hpp:635
static const Color kAzure
0xF0FFFF.
Definition Color.hpp:90
static const Color kTeal
0x008080.
Definition Color.hpp:720
static const Color kDimGray
0x696969.
Definition Color.hpp:270
static const Color kLightSlateGray
0x778899.
Definition Color.hpp:435
static const Color kFirstBlue
0x0066B3.
Definition Color.hpp:56
static const Color kDarkOrange
0xFF8C00.
Definition Color.hpp:215
static const Color kLawnGreen
0x7CFC00.
Definition Color.hpp:375
static const Color kBrown
0xA52A2A.
Definition Color.hpp:125
static const Color kGreenYellow
0xADFF2F.
Definition Color.hpp:330
static const Color kMediumPurple
0x9370DB.
Definition Color.hpp:490
static const Color kDodgerBlue
0x1E90FF.
Definition Color.hpp:275
static const Color kLightSalmon
0xFFA07A.
Definition Color.hpp:420
static const Color kHoneydew
0xF0FFF0.
Definition Color.hpp:335
static const Color kOlive
0x808000.
Definition Color.hpp:555
static const Color kGainsboro
0xDCDCDC.
Definition Color.hpp:300
static const Color kCornflowerBlue
0x6495ED.
Definition Color.hpp:155
static const Color kFuchsia
0xFF00FF.
Definition Color.hpp:295
static const Color kSlateGray
0x708090.
Definition Color.hpp:695
static const Color kDarkCyan
0x008B8B.
Definition Color.hpp:180
static const Color kIndigo
0x4B0082.
Definition Color.hpp:350
static const Color kChartreuse
0x7FFF00.
Definition Color.hpp:140
static const Color kDarkGreen
0x006400.
Definition Color.hpp:195
static const Color kChocolate
0xD2691E.
Definition Color.hpp:145
static const Color kDarkRed
0x8B0000.
Definition Color.hpp:225
static const Color kPeachPuff
0xFFDAB9.
Definition Color.hpp:605
static const Color kMediumTurquoise
0x48D1CC.
Definition Color.hpp:510
static const Color kHotPink
0xFF69B4.
Definition Color.hpp:340
static const Color kDarkGoldenrod
0xB8860B.
Definition Color.hpp:185
static const Color kDarkGray
0xA9A9A9.
Definition Color.hpp:190
double green
Green component (0-1).
Definition Color.hpp:918
static const Color kSteelBlue
0x4682B4.
Definition Color.hpp:710
static constexpr Color FromString(std::string_view str)
Makes a Color from a string.
Definition Color.hpp:803
static const Color kIndianRed
0xCD5C5C.
Definition Color.hpp:345
static const Color kPapayaWhip
0xFFEFD5.
Definition Color.hpp:600
static const Color kNavajoWhite
0xFFDEAD.
Definition Color.hpp:540
static const Color kDarkKhaki
0xBDB76B.
Definition Color.hpp:200
static const Color kOrange
0xFFA500.
Definition Color.hpp:565
static const Color kOrangeRed
0xFF4500.
Definition Color.hpp:570
static const Color kSandyBrown
0xF4A460.
Definition Color.hpp:660
static const Color kPlum
0xDDA0DD.
Definition Color.hpp:620
static const Color kPeru
0xCD853F.
Definition Color.hpp:610
static const Color kMaroon
0x800000.
Definition Color.hpp:470
static const Color kWhite
0xFFFFFF.
Definition Color.hpp:750
static const Color kDarkOrchid
0x9932CC.
Definition Color.hpp:220
static const Color kOldLace
0xFDF5E6.
Definition Color.hpp:550
static const Color kYellow
0xFFFF00.
Definition Color.hpp:760
static const Color kKhaki
0xF0E68C.
Definition Color.hpp:360
static const Color kAqua
0x00FFFF.
Definition Color.hpp:80
static const Color kPink
0xFFC0CB.
Definition Color.hpp:615
static const Color kMediumSlateBlue
0x7B68EE.
Definition Color.hpp:500
static const Color kAntiqueWhite
0xFAEBD7.
Definition Color.hpp:75
static const Color kDarkBlue
0x00008B.
Definition Color.hpp:175
static constexpr Color FromHSV(int h, int s, int v)
Creates a Color from HSV values.
Definition Color.hpp:860
static const Color kForestGreen
0x228B22.
Definition Color.hpp:290
static const Color kDarkOliveGreen
0x556B2F.
Definition Color.hpp:210
static const Color kLightGoldenrodYellow
0xFAFAD2.
Definition Color.hpp:400
static const Color kTan
0xD2B48C.
Definition Color.hpp:715
static const Color kThistle
0xD8BFD8.
Definition Color.hpp:725
static const Color kMintcream
0xF5FFFA.
Definition Color.hpp:525
static const Color kMediumSeaGreen
0x3CB371.
Definition Color.hpp:495
static const Color kAliceBlue
0xF0F8FF.
Definition Color.hpp:70
static const Color kMediumVioletRed
0xC71585.
Definition Color.hpp:515
static const Color kPaleTurquoise
0xAFEEEE.
Definition Color.hpp:590
double red
Red component (0-1).
Definition Color.hpp:915
static const Color kBlanchedAlmond
0xFFEBCD.
Definition Color.hpp:110
static const Color kLinen
0xFAF0E6.
Definition Color.hpp:460
static const Color kDeepSkyBlue
0x00BFFF.
Definition Color.hpp:265
static const Color kDarkSalmon
0xE9967A.
Definition Color.hpp:230
static const Color kDarkSlateBlue
0x483D8B.
Definition Color.hpp:240
static const Color kSeaGreen
0x2E8B57.
Definition Color.hpp:665
constexpr Color(double r, double g, double b)
Constructs a Color from doubles (0-1).
Definition Color.hpp:779
static const Color kFirebrick
0xB22222.
Definition Color.hpp:280
constexpr auto HexString() const
Return this color represented as a hex string.
Definition Color.hpp:903
double blue
Blue component (0-1).
Definition Color.hpp:921
static const Color kDarkTurquoise
0x00CED1.
Definition Color.hpp:250
static const Color kNavy
0x000080.
Definition Color.hpp:545
static const Color kSalmon
0xFA8072.
Definition Color.hpp:655
static const Color kLimeGreen
0x32CD32.
Definition Color.hpp:455
static const Color kWheat
0xF5DEB3.
Definition Color.hpp:745
static const Color kDenim
0x1560BD.
Definition Color.hpp:51
static const Color kFirstRed
0xED1C24.
Definition Color.hpp:61
static const Color kLavender
0xE6E6FA.
Definition Color.hpp:365
static const Color kYellowGreen
0x9ACD32.
Definition Color.hpp:765
static const Color kPowderBlue
0xB0E0E6.
Definition Color.hpp:625
constexpr Color()=default
Constructs a default color (black).
static const Color kDarkSlateGray
0x2F4F4F.
Definition Color.hpp:245
static const Color kPurple
0x800080.
Definition Color.hpp:630
static const Color kOrchid
0xDA70D6.
Definition Color.hpp:575
static const Color kBlack
0x000000.
Definition Color.hpp:105
static const Color kCyan
0x00FFFF.
Definition Color.hpp:170
static const Color kSnow
0xFFFAFA.
Definition Color.hpp:700
static const Color kGray
0x808080.
Definition Color.hpp:320
static const Color kRosyBrown
0xBC8F8F.
Definition Color.hpp:640
static const Color kGoldenrod
0xDAA520.
Definition Color.hpp:315
static const Color kLightCyan
0xE0FFFF.
Definition Color.hpp:395
static const Color kSilver
0xC0C0C0.
Definition Color.hpp:680
static const Color kMistyRose
0xFFE4E1.
Definition Color.hpp:530
static const Color kCrimson
0xDC143C.
Definition Color.hpp:165
static const Color kBlue
0x0000FF.
Definition Color.hpp:115
static const Color kMoccasin
0xFFE4B5.
Definition Color.hpp:535
static const Color kPaleGreen
0x98FB98.
Definition Color.hpp:585
static const Color kSlateBlue
0x6A5ACD.
Definition Color.hpp:690
static const Color kRoyalBlue
0x4169E1.
Definition Color.hpp:645
static const Color kDarkMagenta
0x8B008B.
Definition Color.hpp:205
static const Color kGhostWhite
0xF8F8FF.
Definition Color.hpp:305
static const Color kMediumBlue
0x0000CD.
Definition Color.hpp:480
constexpr Color(int r, int g, int b)
Constructs a Color from ints (0-255).
Definition Color.hpp:791
static const Color kSpringGreen
0x00FF7F.
Definition Color.hpp:705
static const Color kFloralWhite
0xFFFAF0.
Definition Color.hpp:285
static const Color kViolet
0xEE82EE.
Definition Color.hpp:740
static const Color kTomato
0xFF6347.
Definition Color.hpp:730
static const Color kLightGray
0xD3D3D3.
Definition Color.hpp:405
static const Color kWhiteSmoke
0xF5F5F5.
Definition Color.hpp:755
static const Color kMediumAquamarine
0x66CDAA.
Definition Color.hpp:475
These are wrappers over isa* function that allow them to be used in generic algorithms such as wpi::u...
Definition type_traits.hpp:71
constexpr double ceil_int(double x, double x_whole) noexcept
Definition Color.hpp:22
constexpr double ceil(double x) noexcept
Definition Color.hpp:26
Definition raw_os_ostream.hpp:19
Fixed length string (array of character) for compile time use.
Definition ct_string.hpp:29