BuGUI
BUtton Grid User Interface
Loading...
Searching...
No Matches
palette.hpp
1#pragma once
2#include <bugui/concepts/color.hpp>
3
4#include <ranges>
5
6namespace bugui
7{
9template <typename T>
10struct palette
11{
12 static const constexpr auto value{T::color::palette()};
13};
14
16template <hex_color_palette T>
17class palette<T>
18{
19 static consteval auto make_rgb()
20 {
21 using namespace std;
22
23 auto arr{array<pair<array<uint8_t, 3>, uint8_t>
24 , T::color::palette().size()>{}};
25
26 for (const auto& [hex, rgb]
27 : std::views::zip(T::color::palette(), arr))
28 {
29 rgb.first[0] = hex.first >> 16; // R
30 auto remain{hex.first - ((rgb.first[0] & 0xff) << 16)};
31 rgb.first[1] = remain >> 8; // G
32 rgb.first[2] = remain - ((rgb.first[1] & 0xff) << 8); // B
33 rgb.second = hex.second; // Value
34 }
35
36 return arr;
37 }
38
39public:
40 static const constexpr auto value{make_rgb()};
41};
42
43template <typename T>
44 requires red_green_palette_empty_enum<class T::color>
45struct palette<T>
46{
47 static const constexpr auto value
48 {
49 std::array<std::pair<std::array<uint8_t, 3>, uint8_t>, 18>
50 {
51 std::pair<std::array<uint8_t, 3>, uint8_t>{{0, 0, 0}, 12} // Black
52 , std::pair<std::array<uint8_t, 3>, uint8_t>{{118, 118, 118}, 29} // GrayDark => DIM GREEN RED
53 , std::pair<std::array<uint8_t, 3>, uint8_t>{{221, 221, 221}, 46} // Graylight => HALF YELLOW ORANGE
54 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255, 255, 255}, 63} // White => FULL AMBER
55 , std::pair<std::array<uint8_t, 3>, uint8_t>{{13, 115, 204}, 45} // Blue => HALF GREEN DIM RED
56 , std::pair<std::array<uint8_t, 3>, uint8_t>{{26, 143, 255}, 44} // BlueLight => HALF GREEN
57 , std::pair<std::array<uint8_t, 3>, uint8_t>{{13, 205, 205}, 44} // Cyan => HALF GREEN
58 , std::pair<std::array<uint8_t, 3>, uint8_t>{{20, 255, 255}, 61} // CyanLight => GREEN YELLOW
59 , std::pair<std::array<uint8_t, 3>, uint8_t>{{25, 203, 0}, 60} // Green => FULL GREEN
60 , std::pair<std::array<uint8_t, 3>, uint8_t>{{35, 253, 0}, 61} // GreenLight => GREEN YELLOW
61 , std::pair<std::array<uint8_t, 3>, uint8_t>{{203, 30, 209}, 30} // Magenta => HALF RED DIM GREEN
62 , std::pair<std::array<uint8_t, 3>, uint8_t>{{253, 40, 255}, 31} // MagentaLight => RED ORANGE
63 , std::pair<std::array<uint8_t, 3>, uint8_t>{{204, 4, 3}, 15} // Red => RED
64 , std::pair<std::array<uint8_t, 3>, uint8_t>{{242, 32, 31}, 31} // RedLight => RED ORANGE
65 , std::pair<std::array<uint8_t, 3>, uint8_t>{{206, 203, 0}, 62} // Yellow => YELLOW
66 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255, 253, 0}, 63} // YellowLight => AMBER
67 , std::pair<std::array<uint8_t, 3>, uint8_t>{{102, 2, 1}, 14} // RedDim => HALF RED
68 , std::pair<std::array<uint8_t, 3>, uint8_t>{{51, 1, 0}, 13} // RedDim => RED DIM
69 }
70 };
71};
72
73template <typename T>
74 requires live_127_palette_empty_enum<class T::color>
75struct palette<T>
76{
77 static const constexpr auto value
78 {
79 std::array<std::pair<std::array<uint8_t, 3>, uint8_t>, 128>
80 {
81 std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,0 ,0}, 0}
82 , std::pair<std::array<uint8_t, 3>, uint8_t>{{30 ,30 ,30}, 1}
83 , std::pair<std::array<uint8_t, 3>, uint8_t>{{127 ,127 ,127}, 2}
84 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,255 ,255}, 3}
85 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,76 ,76}, 4}
86 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,0 ,0}, 5}
87 , std::pair<std::array<uint8_t, 3>, uint8_t>{{89 ,0 ,0}, 6}
88 , std::pair<std::array<uint8_t, 3>, uint8_t>{{25 ,0 ,0}, 7}
89 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,189 ,108}, 8}
90 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,84 ,0}, 9}
91 , std::pair<std::array<uint8_t, 3>, uint8_t>{{39 ,27 ,0}, 10}
92 , std::pair<std::array<uint8_t, 3>, uint8_t>{{89 ,29 ,0}, 11}
93 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,255 ,76}, 12}
94 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,255 ,0}, 13}
95 , std::pair<std::array<uint8_t, 3>, uint8_t>{{89 ,89 ,0}, 14}
96 , std::pair<std::array<uint8_t, 3>, uint8_t>{{25 ,25 ,0}, 15}
97 , std::pair<std::array<uint8_t, 3>, uint8_t>{{136 ,255 ,76}, 16}
98 , std::pair<std::array<uint8_t, 3>, uint8_t>{{84 ,255 ,0}, 17}
99 , std::pair<std::array<uint8_t, 3>, uint8_t>{{29 ,89 ,0}, 18}
100 , std::pair<std::array<uint8_t, 3>, uint8_t>{{20 ,43 ,0}, 19}
101 , std::pair<std::array<uint8_t, 3>, uint8_t>{{76 ,255 ,76}, 20}
102 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,255 ,0}, 21}
103 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,89 ,0}, 22}
104 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,25 ,0}, 23}
105 , std::pair<std::array<uint8_t, 3>, uint8_t>{{76 ,255 ,94}, 24}
106 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,255 ,25}, 25}
107 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,89 ,13}, 26}
108 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,25 ,2}, 27}
109 , std::pair<std::array<uint8_t, 3>, uint8_t>{{76 ,255 ,136}, 28}
110 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,255 ,85}, 29}
111 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,89 ,29}, 30}
112 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,31 ,18}, 31}
113 , std::pair<std::array<uint8_t, 3>, uint8_t>{{76 ,255 ,183}, 32}
114 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,255 ,153}, 33}
115 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,89 ,53}, 34}
116 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,25 ,18}, 35}
117 , std::pair<std::array<uint8_t, 3>, uint8_t>{{76 ,195 ,255}, 36}
118 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,169 ,255}, 37}
119 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,65 ,82}, 38}
120 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,16 ,25}, 39}
121 , std::pair<std::array<uint8_t, 3>, uint8_t>{{76 ,136 ,255}, 40}
122 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,85 ,255}, 41}
123 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,29 ,89}, 42}
124 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,8 ,25}, 43}
125 , std::pair<std::array<uint8_t, 3>, uint8_t>{{76 ,76 ,255}, 44}
126 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,0 ,255}, 45}
127 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,0 ,89}, 46}
128 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,0 ,25}, 47}
129 , std::pair<std::array<uint8_t, 3>, uint8_t>{{135 ,76 ,255}, 48}
130 , std::pair<std::array<uint8_t, 3>, uint8_t>{{84 ,0 ,255}, 49}
131 , std::pair<std::array<uint8_t, 3>, uint8_t>{{25 ,0 ,100}, 50}
132 , std::pair<std::array<uint8_t, 3>, uint8_t>{{15 ,0 ,48}, 51}
133 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,76 ,255}, 52}
134 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,0 ,255}, 53}
135 , std::pair<std::array<uint8_t, 3>, uint8_t>{{89 ,0 ,89}, 54}
136 , std::pair<std::array<uint8_t, 3>, uint8_t>{{25 ,0 ,25}, 55}
137 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,76 ,135}, 56}
138 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,0 ,84}, 57}
139 , std::pair<std::array<uint8_t, 3>, uint8_t>{{89 ,0 ,29}, 58}
140 , std::pair<std::array<uint8_t, 3>, uint8_t>{{34 ,0 ,19}, 59}
141 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,21 ,0}, 60}
142 , std::pair<std::array<uint8_t, 3>, uint8_t>{{153 ,53 ,0}, 61}
143 , std::pair<std::array<uint8_t, 3>, uint8_t>{{121 ,81 ,0}, 62}
144 , std::pair<std::array<uint8_t, 3>, uint8_t>{{67 ,100 ,0}, 63}
145 , std::pair<std::array<uint8_t, 3>, uint8_t>{{3 ,57 ,0}, 64}
146 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,87 ,53}, 65}
147 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,84 ,127}, 66}
148 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,0 ,255}, 67}
149 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,69 ,79}, 68}
150 , std::pair<std::array<uint8_t, 3>, uint8_t>{{37 ,0 ,204}, 69}
151 , std::pair<std::array<uint8_t, 3>, uint8_t>{{127 ,127 ,127}, 70}
152 , std::pair<std::array<uint8_t, 3>, uint8_t>{{32 ,32 ,32}, 71}
153 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,0 ,0}, 72}
154 , std::pair<std::array<uint8_t, 3>, uint8_t>{{189 ,255 ,45}, 73}
155 , std::pair<std::array<uint8_t, 3>, uint8_t>{{175 ,237 ,6}, 74}
156 , std::pair<std::array<uint8_t, 3>, uint8_t>{{100 ,255 ,9}, 75}
157 , std::pair<std::array<uint8_t, 3>, uint8_t>{{16 ,139 ,0}, 76}
158 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,255 ,135}, 77}
159 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,169 ,255}, 78}
160 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,42 ,255}, 79}
161 , std::pair<std::array<uint8_t, 3>, uint8_t>{{63 ,0 ,255}, 80}
162 , std::pair<std::array<uint8_t, 3>, uint8_t>{{122 ,0 ,255}, 81}
163 , std::pair<std::array<uint8_t, 3>, uint8_t>{{178 ,26 ,125}, 82}
164 , std::pair<std::array<uint8_t, 3>, uint8_t>{{64 ,33 ,0}, 83}
165 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,74 ,0}, 84}
166 , std::pair<std::array<uint8_t, 3>, uint8_t>{{136 ,225 ,6}, 85}
167 , std::pair<std::array<uint8_t, 3>, uint8_t>{{114 ,255 ,21}, 86}
168 , std::pair<std::array<uint8_t, 3>, uint8_t>{{0 ,255 ,0}, 87}
169 , std::pair<std::array<uint8_t, 3>, uint8_t>{{59 ,255 ,38}, 88}
170 , std::pair<std::array<uint8_t, 3>, uint8_t>{{89 ,255 ,113}, 89}
171 , std::pair<std::array<uint8_t, 3>, uint8_t>{{56 ,255 ,204}, 90}
172 , std::pair<std::array<uint8_t, 3>, uint8_t>{{91 ,138 ,255}, 91}
173 , std::pair<std::array<uint8_t, 3>, uint8_t>{{49 ,81 ,198}, 92}
174 , std::pair<std::array<uint8_t, 3>, uint8_t>{{135 ,127 ,233}, 93}
175 , std::pair<std::array<uint8_t, 3>, uint8_t>{{211 ,29 ,255}, 94}
176 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,0 ,93}, 95}
177 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,127 ,0}, 96}
178 , std::pair<std::array<uint8_t, 3>, uint8_t>{{185 ,176 ,0}, 97}
179 , std::pair<std::array<uint8_t, 3>, uint8_t>{{144 ,255 ,0}, 98}
180 , std::pair<std::array<uint8_t, 3>, uint8_t>{{131 ,93 ,7}, 99}
181 , std::pair<std::array<uint8_t, 3>, uint8_t>{{57 ,43 ,0}, 100}
182 , std::pair<std::array<uint8_t, 3>, uint8_t>{{20 ,76 ,16}, 101}
183 , std::pair<std::array<uint8_t, 3>, uint8_t>{{13 ,80 ,56}, 102}
184 , std::pair<std::array<uint8_t, 3>, uint8_t>{{21 ,21 ,42}, 103}
185 , std::pair<std::array<uint8_t, 3>, uint8_t>{{22 ,32 ,90}, 104}
186 , std::pair<std::array<uint8_t, 3>, uint8_t>{{105 ,60 ,28}, 105}
187 , std::pair<std::array<uint8_t, 3>, uint8_t>{{168 ,0 ,10}, 106}
188 , std::pair<std::array<uint8_t, 3>, uint8_t>{{222 ,81 ,61}, 107}
189 , std::pair<std::array<uint8_t, 3>, uint8_t>{{216 ,106 ,28}, 108}
190 , std::pair<std::array<uint8_t, 3>, uint8_t>{{255 ,225 ,38}, 109}
191 , std::pair<std::array<uint8_t, 3>, uint8_t>{{158 ,225 ,47}, 110}
192 , std::pair<std::array<uint8_t, 3>, uint8_t>{{103 ,181 ,15}, 111}
193 , std::pair<std::array<uint8_t, 3>, uint8_t>{{30 ,30 ,48}, 112}
194 , std::pair<std::array<uint8_t, 3>, uint8_t>{{220 ,255 ,107}, 113}
195 , std::pair<std::array<uint8_t, 3>, uint8_t>{{128 ,255 ,189}, 114}
196 , std::pair<std::array<uint8_t, 3>, uint8_t>{{154 ,153 ,255}, 115}
197 , std::pair<std::array<uint8_t, 3>, uint8_t>{{142 ,102 ,255}, 116}
198 , std::pair<std::array<uint8_t, 3>, uint8_t>{{64 ,64 ,64}, 117}
199 , std::pair<std::array<uint8_t, 3>, uint8_t>{{117 ,117 ,117}, 118}
200 , std::pair<std::array<uint8_t, 3>, uint8_t>{{224 ,255 ,255}, 119}
201 , std::pair<std::array<uint8_t, 3>, uint8_t>{{160 ,0 ,0}, 120}
202 , std::pair<std::array<uint8_t, 3>, uint8_t>{{53 ,0 ,0}, 121}
203 , std::pair<std::array<uint8_t, 3>, uint8_t>{{26 ,208 ,0}, 122}
204 , std::pair<std::array<uint8_t, 3>, uint8_t>{{7 ,66 ,0}, 123}
205 , std::pair<std::array<uint8_t, 3>, uint8_t>{{185 ,176 ,0}, 124}
206 , std::pair<std::array<uint8_t, 3>, uint8_t>{{63 ,49 ,0}, 125}
207 , std::pair<std::array<uint8_t, 3>, uint8_t>{{179 ,95 ,0}, 126}
208 , std::pair<std::array<uint8_t, 3>, uint8_t>{{75 ,21 ,2}, 127}
209 }
210 };
211};
212
213} // namespace bugui
Provides access to the device's colour palette.
Definition palette.hpp:11