Statistics
| Branch: | Tag: | Revision:

amiro-os / components / Color.cpp @ b3d6a364

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
}