amiro-os / components / Color.cpp @ bc91a128
History | View | Annotate | Download (5.453 KB)
1 | 58fe0e0b | Thomas Schöpping | #include <ch.hpp> |
---|---|---|---|
2 | #include <hal.h> |
||
3 | |||
4 | #include <amiro/Color.h> |
||
5 | |||
6 | using namespace chibios_rt; |
||
7 | using namespace amiro; |
||
8 | |||
9 | Color::Color() |
||
10 | : red(0),
|
||
11 | green(0),
|
||
12 | blue(0) {
|
||
13 | } |
||
14 | |||
15 | Color::Color(const Color& color)
|
||
16 | : red(color.red), |
||
17 | green(color.green), |
||
18 | blue(color.blue) { |
||
19 | } |
||
20 | |||
21 | Color::Color(int r, int g, int b) |
||
22 | : red(r), |
||
23 | green(g), |
||
24 | blue(b) { |
||
25 | } |
||
26 | |||
27 | Color::Color(GlobalColor color) { |
||
28 | static const struct { |
||
29 | unsigned char red; |
||
30 | unsigned char green; |
||
31 | unsigned char blue; |
||
32 | } global_colors[] = { |
||
33 | { 240, 248, 255 }, |
||
34 | { 250, 235, 215 }, |
||
35 | { 0, 255, 255 }, |
||
36 | { 127, 255, 212 }, |
||
37 | { 240, 255, 255 }, |
||
38 | { 245, 245, 220 }, |
||
39 | { 255, 228, 196 }, |
||
40 | { 0, 0, 0 }, |
||
41 | { 255, 235, 205 }, |
||
42 | { 0, 0, 255 }, |
||
43 | { 138, 43, 226 }, |
||
44 | { 165, 42, 42 }, |
||
45 | { 222, 184, 135 }, |
||
46 | { 95, 158, 160 }, |
||
47 | { 127, 255, 0 }, |
||
48 | { 210, 105, 30 }, |
||
49 | { 255, 127, 80 }, |
||
50 | { 100, 149, 237 }, |
||
51 | { 255, 248, 220 }, |
||
52 | { 220, 20, 60 }, |
||
53 | { 0, 255, 255 }, |
||
54 | { 0, 0, 139 }, |
||
55 | { 0, 139, 139 }, |
||
56 | { 184, 134, 11 }, |
||
57 | { 169, 169, 169 }, |
||
58 | { 0, 100, 0 }, |
||
59 | { 169, 169, 169 }, |
||
60 | { 189, 183, 107 }, |
||
61 | { 139, 0, 139 }, |
||
62 | { 85, 107, 47 }, |
||
63 | { 255, 140, 0 }, |
||
64 | { 153, 50, 204 }, |
||
65 | { 139, 0, 0 }, |
||
66 | { 233, 150, 122 }, |
||
67 | { 143, 188, 143 }, |
||
68 | { 72, 61, 139 }, |
||
69 | { 47, 79, 79 }, |
||
70 | { 47, 79, 79 }, |
||
71 | { 0, 206, 209 }, |
||
72 | { 148, 0, 211 }, |
||
73 | { 255, 20, 147 }, |
||
74 | { 0, 191, 255 }, |
||
75 | { 105, 105, 105 }, |
||
76 | { 105, 105, 105 }, |
||
77 | { 30, 144, 255 }, |
||
78 | { 178, 34, 34 }, |
||
79 | { 255, 250, 240 }, |
||
80 | { 34, 139, 34 }, |
||
81 | { 255, 0, 255 }, |
||
82 | { 220, 220, 220 }, |
||
83 | { 248, 248, 255 }, |
||
84 | { 255, 215, 0 }, |
||
85 | { 218, 165, 32 }, |
||
86 | { 128, 128, 128 }, |
||
87 | { 128, 128, 128 }, |
||
88 | { 0, 128, 0 }, |
||
89 | { 173, 255, 47 }, |
||
90 | { 240, 255, 240 }, |
||
91 | { 255, 105, 180 }, |
||
92 | { 205, 92, 92 }, |
||
93 | { 75, 0, 130 }, |
||
94 | { 255, 255, 240 }, |
||
95 | { 240, 230, 140 }, |
||
96 | { 230, 230, 250 }, |
||
97 | { 255, 240, 245 }, |
||
98 | { 124, 252, 0 }, |
||
99 | { 255, 250, 205 }, |
||
100 | { 173, 216, 230 }, |
||
101 | { 240, 128, 128 }, |
||
102 | { 224, 255, 255 }, |
||
103 | { 250, 250, 210 }, |
||
104 | { 211, 211, 211 }, |
||
105 | { 144, 238, 144 }, |
||
106 | { 211, 211, 211 }, |
||
107 | { 255, 182, 193 }, |
||
108 | { 255, 160, 122 }, |
||
109 | { 32, 178, 170 }, |
||
110 | { 135, 206, 250 }, |
||
111 | { 119, 136, 153 }, |
||
112 | { 119, 136, 153 }, |
||
113 | { 176, 196, 222 }, |
||
114 | { 255, 255, 224 }, |
||
115 | { 0, 255, 0 }, |
||
116 | { 50, 205, 50 }, |
||
117 | { 250, 240, 230 }, |
||
118 | { 255, 0, 255 }, |
||
119 | { 128, 0, 0 }, |
||
120 | { 102, 205, 170 }, |
||
121 | { 0, 0, 205 }, |
||
122 | { 186, 85, 211 }, |
||
123 | { 147, 112, 219 }, |
||
124 | { 60, 179, 113 }, |
||
125 | { 123, 104, 238 }, |
||
126 | { 0, 250, 154 }, |
||
127 | { 72, 209, 204 }, |
||
128 | { 199, 21, 133 }, |
||
129 | { 25, 25, 112 }, |
||
130 | { 245, 255, 250 }, |
||
131 | { 255, 228, 225 }, |
||
132 | { 255, 228, 181 }, |
||
133 | { 255, 222, 173 }, |
||
134 | { 0, 0, 128 }, |
||
135 | { 253, 245, 230 }, |
||
136 | { 128, 128, 0 }, |
||
137 | { 107, 142, 35 }, |
||
138 | { 255, 165, 0 }, |
||
139 | { 255, 69, 0 }, |
||
140 | { 218, 112, 214 }, |
||
141 | { 238, 232, 170 }, |
||
142 | { 152, 251, 152 }, |
||
143 | { 175, 238, 238 }, |
||
144 | { 219, 112, 147 }, |
||
145 | { 255, 239, 213 }, |
||
146 | { 255, 218, 185 }, |
||
147 | { 205, 133, 63 }, |
||
148 | { 255, 192, 203 }, |
||
149 | { 221, 160, 221 }, |
||
150 | { 176, 224, 230 }, |
||
151 | { 128, 0, 128 }, |
||
152 | { 255, 0, 0 }, |
||
153 | { 188, 143, 143 }, |
||
154 | { 65, 105, 225 }, |
||
155 | { 139, 69, 19 }, |
||
156 | { 250, 128, 114 }, |
||
157 | { 244, 164, 96 }, |
||
158 | { 46, 139, 87 }, |
||
159 | { 255, 245, 238 }, |
||
160 | { 160, 82, 45 }, |
||
161 | { 192, 192, 192 }, |
||
162 | { 135, 206, 235 }, |
||
163 | { 106, 90, 205 }, |
||
164 | { 112, 128, 144 }, |
||
165 | { 112, 128, 144 }, |
||
166 | { 255, 250, 250 }, |
||
167 | { 0, 255, 127 }, |
||
168 | { 70, 130, 180 }, |
||
169 | { 210, 180, 140 }, |
||
170 | { 0, 128, 128 }, |
||
171 | { 216, 191, 216 }, |
||
172 | { 255, 99, 71 }, |
||
173 | { 64, 224, 208 }, |
||
174 | { 238, 130, 238 }, |
||
175 | { 245, 222, 179 }, |
||
176 | { 255, 255, 255 }, |
||
177 | { 245, 245, 245 }, |
||
178 | { 255, 255, 0 }, |
||
179 | { 154, 205, 50 }, }; |
||
180 | this->setRedGreenBlue(global_colors[color].red, global_colors[color].green,
|
||
181 | global_colors[color].blue); |
||
182 | } |
||
183 | |||
184 | Color Color::darker(int factor) {
|
||
185 | if (factor <= 0) |
||
186 | return *this; |
||
187 | else if (factor < 100) |
||
188 | return this->lighter(10000 / factor); |
||
189 | |||
190 | int red = 100 * this->red / factor; |
||
191 | int green = 100 * this->green / factor; |
||
192 | int blue = 100 * this->blue / factor; |
||
193 | |||
194 | return Color(red, green, blue);
|
||
195 | } |
||
196 | |||
197 | void Color::getRedGreenBlue(int* r, int* g, int* b) { |
||
198 | *r = this->red;
|
||
199 | *g = this->green;
|
||
200 | *b = this->blue;
|
||
201 | } |
||
202 | |||
203 | int Color::getRed() {
|
||
204 | return this->red; |
||
205 | } |
||
206 | |||
207 | int Color::getGreen() {
|
||
208 | return this->green; |
||
209 | } |
||
210 | |||
211 | int Color::getBlue() {
|
||
212 | return this->blue; |
||
213 | } |
||
214 | |||
215 | Color Color::lighter(int factor) {
|
||
216 | if (factor <= 0) |
||
217 | return *this; |
||
218 | else if (factor < 100) |
||
219 | return this->darker(10000 / factor); |
||
220 | |||
221 | int red = factor * this->red / 100; |
||
222 | int green = factor * this->green / 100; |
||
223 | int blue = factor * this->blue / 100; |
||
224 | |||
225 | red = (red < 0) ? 0 : (red > 255) ? 255 : red; |
||
226 | green = (green < 0) ? 0 : (green > 255) ? 255 : green; |
||
227 | blue = (blue < 0) ? 0 : (blue > 255) ? 255 : blue; |
||
228 | |||
229 | return Color(red, green, blue);
|
||
230 | } |
||
231 | |||
232 | void Color::setRedGreenBlue(int red, int green, int blue) { |
||
233 | this->red = red;
|
||
234 | this->green = green;
|
||
235 | this->blue = blue;
|
||
236 | } |
||
237 | |||
238 | Color& Color::operator=(Color const& color) { |
||
239 | if (this != &color) { |
||
240 | this->red = color.red;
|
||
241 | this->green = color.green;
|
||
242 | this->blue = color.blue;
|
||
243 | } |
||
244 | return *this; |
||
245 | } |
||
246 | |||
247 | Color& Color::operator=(GlobalColor color) {
|
||
248 | return operator=(Color(color)); |
||
249 | } |