extendr_api/graphics/
color.rs

1pub struct Color(i32);
2
3impl Color {
4    /// Convert to an R color.
5    pub fn to_i32(&self) -> i32 {
6        self.0
7    }
8
9    /// Generate a color from a CSS-like hex number.
10    /// eg. `Color::hex(0xF0F8FF)`
11    pub fn hex(hex: u32) -> Color {
12        let red = (hex >> 16) & 0xff;
13        let green = (hex >> 8) & 0xff;
14        let blue = hex & 0xff;
15        Color(red as i32 | (green as i32) << 8 | (blue as i32) << 16 | 0xff << 24)
16    }
17
18    /// Generate a color from a 3 digit CSS-like hex number.
19    /// eg. `Color::hex(0xF0F)`
20    pub fn hex3(hex: u32) -> Color {
21        let red = ((hex >> 8) & 0xf) * 0xff / 0x0f;
22        let green = ((hex >> 4) & 0xf) * 0xff / 0x0f;
23        let blue = (hex & 0xf) * 0xff / 0x0f;
24        Color(red as i32 | (green as i32) << 8 | (blue as i32) << 16 | 0xff << 24)
25    }
26
27    /// Generate a color from rgb components (0-255).
28    pub fn rgb(red: u8, green: u8, blue: u8) -> Color {
29        Color(red as i32 | (green as i32) << 8 | (blue as i32) << 16 | 0xff << 24)
30    }
31
32    /// Generate a color from rgba components (0-255).
33    pub fn rgba(red: u8, green: u8, blue: u8, alpha: u8) -> Color {
34        Color(red as i32 | (green as i32) << 8 | (blue as i32) << 16 | (alpha as i32) << 24)
35    }
36}
37
38pub mod predefined {
39    use super::Color;
40
41    /// <https://www.w3.org/TR/2018/REC-css-color-3-20180619/>
42    pub fn aliceblue() -> Color {
43        Color::hex(0xF0F8FF)
44    }
45    pub fn antiquewhite() -> Color {
46        Color::hex(0xFAEBD7)
47    }
48    pub fn aqua() -> Color {
49        Color::hex(0x00FFFF)
50    }
51    pub fn aquamarine() -> Color {
52        Color::hex(0x7FFFD4)
53    }
54    pub fn azure() -> Color {
55        Color::hex(0xF0FFFF)
56    }
57    pub fn beige() -> Color {
58        Color::hex(0xF5F5DC)
59    }
60    pub fn bisque() -> Color {
61        Color::hex(0xFFE4C4)
62    }
63    pub fn black() -> Color {
64        Color::hex(0x000000)
65    }
66    pub fn blanchedalmond() -> Color {
67        Color::hex(0xFFEBCD)
68    }
69    pub fn blue() -> Color {
70        Color::hex(0x0000FF)
71    }
72    pub fn blueviolet() -> Color {
73        Color::hex(0x8A2BE2)
74    }
75    pub fn brown() -> Color {
76        Color::hex(0xA52A2A)
77    }
78    pub fn burlywood() -> Color {
79        Color::hex(0xDEB887)
80    }
81    pub fn cadetblue() -> Color {
82        Color::hex(0x5F9EA0)
83    }
84    pub fn chartreuse() -> Color {
85        Color::hex(0x7FFF00)
86    }
87    pub fn chocolate() -> Color {
88        Color::hex(0xD2691E)
89    }
90    pub fn coral() -> Color {
91        Color::hex(0xFF7F50)
92    }
93    pub fn cornflowerblue() -> Color {
94        Color::hex(0x6495ED)
95    }
96    pub fn cornsilk() -> Color {
97        Color::hex(0xFFF8DC)
98    }
99    pub fn crimson() -> Color {
100        Color::hex(0xDC143C)
101    }
102    pub fn cyan() -> Color {
103        Color::hex(0x00FFFF)
104    }
105    pub fn darkblue() -> Color {
106        Color::hex(0x00008B)
107    }
108    pub fn darkcyan() -> Color {
109        Color::hex(0x008B8B)
110    }
111    pub fn darkgoldenrod() -> Color {
112        Color::hex(0xB8860B)
113    }
114    pub fn darkgray() -> Color {
115        Color::hex(0xA9A9A9)
116    }
117    pub fn darkgreen() -> Color {
118        Color::hex(0x006400)
119    }
120    pub fn darkgrey() -> Color {
121        Color::hex(0xA9A9A9)
122    }
123    pub fn darkkhaki() -> Color {
124        Color::hex(0xBDB76B)
125    }
126    pub fn darkmagenta() -> Color {
127        Color::hex(0x8B008B)
128    }
129    pub fn darkolivegreen() -> Color {
130        Color::hex(0x556B2F)
131    }
132    pub fn darkorange() -> Color {
133        Color::hex(0xFF8C00)
134    }
135    pub fn darkorchid() -> Color {
136        Color::hex(0x9932CC)
137    }
138    pub fn darkred() -> Color {
139        Color::hex(0x8B0000)
140    }
141    pub fn darksalmon() -> Color {
142        Color::hex(0xE9967A)
143    }
144    pub fn darkseagreen() -> Color {
145        Color::hex(0x8FBC8F)
146    }
147    pub fn darkslateblue() -> Color {
148        Color::hex(0x483D8B)
149    }
150    pub fn darkslategray() -> Color {
151        Color::hex(0x2F4F4F)
152    }
153    pub fn darkslategrey() -> Color {
154        Color::hex(0x2F4F4F)
155    }
156    pub fn darkturquoise() -> Color {
157        Color::hex(0x00CED1)
158    }
159    pub fn darkviolet() -> Color {
160        Color::hex(0x9400D3)
161    }
162    pub fn deeppink() -> Color {
163        Color::hex(0xFF1493)
164    }
165    pub fn deepskyblue() -> Color {
166        Color::hex(0x00BFFF)
167    }
168    pub fn dimgray() -> Color {
169        Color::hex(0x696969)
170    }
171    pub fn dimgrey() -> Color {
172        Color::hex(0x696969)
173    }
174    pub fn dodgerblue() -> Color {
175        Color::hex(0x1E90FF)
176    }
177    pub fn firebrick() -> Color {
178        Color::hex(0xB22222)
179    }
180    pub fn floralwhite() -> Color {
181        Color::hex(0xFFFAF0)
182    }
183    pub fn forestgreen() -> Color {
184        Color::hex(0x228B22)
185    }
186    pub fn fuchsia() -> Color {
187        Color::hex(0xFF00FF)
188    }
189    pub fn gainsboro() -> Color {
190        Color::hex(0xDCDCDC)
191    }
192    pub fn ghostwhite() -> Color {
193        Color::hex(0xF8F8FF)
194    }
195    pub fn gold() -> Color {
196        Color::hex(0xFFD700)
197    }
198    pub fn goldenrod() -> Color {
199        Color::hex(0xDAA520)
200    }
201    pub fn gray() -> Color {
202        Color::hex(0x808080)
203    }
204    pub fn green() -> Color {
205        Color::hex(0x008000)
206    }
207    pub fn greenyellow() -> Color {
208        Color::hex(0xADFF2F)
209    }
210    pub fn grey() -> Color {
211        Color::hex(0x808080)
212    }
213    pub fn honeydew() -> Color {
214        Color::hex(0xF0FFF0)
215    }
216    pub fn hotpink() -> Color {
217        Color::hex(0xFF69B4)
218    }
219    pub fn indianred() -> Color {
220        Color::hex(0xCD5C5C)
221    }
222    pub fn indigo() -> Color {
223        Color::hex(0x4B0082)
224    }
225    pub fn ivory() -> Color {
226        Color::hex(0xFFFFF0)
227    }
228    pub fn khaki() -> Color {
229        Color::hex(0xF0E68C)
230    }
231    pub fn lavender() -> Color {
232        Color::hex(0xE6E6FA)
233    }
234    pub fn lavenderblush() -> Color {
235        Color::hex(0xFFF0F5)
236    }
237    pub fn lawngreen() -> Color {
238        Color::hex(0x7CFC00)
239    }
240    pub fn lemonchiffon() -> Color {
241        Color::hex(0xFFFACD)
242    }
243    pub fn lightblue() -> Color {
244        Color::hex(0xADD8E6)
245    }
246    pub fn lightcoral() -> Color {
247        Color::hex(0xF08080)
248    }
249    pub fn lightcyan() -> Color {
250        Color::hex(0xE0FFFF)
251    }
252    pub fn lightgoldenrodyellow() -> Color {
253        Color::hex(0xFAFAD2)
254    }
255    pub fn lightgray() -> Color {
256        Color::hex(0xD3D3D3)
257    }
258    pub fn lightgreen() -> Color {
259        Color::hex(0x90EE90)
260    }
261    pub fn lightgrey() -> Color {
262        Color::hex(0xD3D3D3)
263    }
264    pub fn lightpink() -> Color {
265        Color::hex(0xFFB6C1)
266    }
267    pub fn lightsalmon() -> Color {
268        Color::hex(0xFFA07A)
269    }
270    pub fn lightseagreen() -> Color {
271        Color::hex(0x20B2AA)
272    }
273    pub fn lightskyblue() -> Color {
274        Color::hex(0x87CEFA)
275    }
276    pub fn lightslategray() -> Color {
277        Color::hex(0x778899)
278    }
279    pub fn lightslategrey() -> Color {
280        Color::hex(0x778899)
281    }
282    pub fn lightsteelblue() -> Color {
283        Color::hex(0xB0C4DE)
284    }
285    pub fn lightyellow() -> Color {
286        Color::hex(0xFFFFE0)
287    }
288    pub fn lime() -> Color {
289        Color::hex(0x00FF00)
290    }
291    pub fn limegreen() -> Color {
292        Color::hex(0x32CD32)
293    }
294    pub fn linen() -> Color {
295        Color::hex(0xFAF0E6)
296    }
297    pub fn magenta() -> Color {
298        Color::hex(0xFF00FF)
299    }
300    pub fn maroon() -> Color {
301        Color::hex(0x800000)
302    }
303    pub fn mediumaquamarine() -> Color {
304        Color::hex(0x66CDAA)
305    }
306    pub fn mediumblue() -> Color {
307        Color::hex(0x0000CD)
308    }
309    pub fn mediumorchid() -> Color {
310        Color::hex(0xBA55D3)
311    }
312    pub fn mediumpurple() -> Color {
313        Color::hex(0x9370DB)
314    }
315    pub fn mediumseagreen() -> Color {
316        Color::hex(0x3CB371)
317    }
318    pub fn mediumslateblue() -> Color {
319        Color::hex(0x7B68EE)
320    }
321    pub fn mediumspringgreen() -> Color {
322        Color::hex(0x00FA9A)
323    }
324    pub fn mediumturquoise() -> Color {
325        Color::hex(0x48D1CC)
326    }
327    pub fn mediumvioletred() -> Color {
328        Color::hex(0xC71585)
329    }
330    pub fn midnightblue() -> Color {
331        Color::hex(0x191970)
332    }
333    pub fn mintcream() -> Color {
334        Color::hex(0xF5FFFA)
335    }
336    pub fn mistyrose() -> Color {
337        Color::hex(0xFFE4E1)
338    }
339    pub fn moccasin() -> Color {
340        Color::hex(0xFFE4B5)
341    }
342    pub fn navajowhite() -> Color {
343        Color::hex(0xFFDEAD)
344    }
345    pub fn navy() -> Color {
346        Color::hex(0x000080)
347    }
348    pub fn oldlace() -> Color {
349        Color::hex(0xFDF5E6)
350    }
351    pub fn olive() -> Color {
352        Color::hex(0x808000)
353    }
354    pub fn olivedrab() -> Color {
355        Color::hex(0x6B8E23)
356    }
357    pub fn orange() -> Color {
358        Color::hex(0xFFA500)
359    }
360    pub fn orangered() -> Color {
361        Color::hex(0xFF4500)
362    }
363    pub fn orchid() -> Color {
364        Color::hex(0xDA70D6)
365    }
366    pub fn palegoldenrod() -> Color {
367        Color::hex(0xEEE8AA)
368    }
369    pub fn palegreen() -> Color {
370        Color::hex(0x98FB98)
371    }
372    pub fn paleturquoise() -> Color {
373        Color::hex(0xAFEEEE)
374    }
375    pub fn palevioletred() -> Color {
376        Color::hex(0xDB7093)
377    }
378    pub fn papayawhip() -> Color {
379        Color::hex(0xFFEFD5)
380    }
381    pub fn peachpuff() -> Color {
382        Color::hex(0xFFDAB9)
383    }
384    pub fn peru() -> Color {
385        Color::hex(0xCD853F)
386    }
387    pub fn pink() -> Color {
388        Color::hex(0xFFC0CB)
389    }
390    pub fn plum() -> Color {
391        Color::hex(0xDDA0DD)
392    }
393    pub fn powderblue() -> Color {
394        Color::hex(0xB0E0E6)
395    }
396    pub fn purple() -> Color {
397        Color::hex(0x800080)
398    }
399    pub fn red() -> Color {
400        Color::hex(0xFF0000)
401    }
402    pub fn rosybrown() -> Color {
403        Color::hex(0xBC8F8F)
404    }
405    pub fn royalblue() -> Color {
406        Color::hex(0x4169E1)
407    }
408    pub fn saddlebrown() -> Color {
409        Color::hex(0x8B4513)
410    }
411    pub fn salmon() -> Color {
412        Color::hex(0xFA8072)
413    }
414    pub fn sandybrown() -> Color {
415        Color::hex(0xF4A460)
416    }
417    pub fn seagreen() -> Color {
418        Color::hex(0x2E8B57)
419    }
420    pub fn seashell() -> Color {
421        Color::hex(0xFFF5EE)
422    }
423    pub fn sienna() -> Color {
424        Color::hex(0xA0522D)
425    }
426    pub fn silver() -> Color {
427        Color::hex(0xC0C0C0)
428    }
429    pub fn skyblue() -> Color {
430        Color::hex(0x87CEEB)
431    }
432    pub fn slateblue() -> Color {
433        Color::hex(0x6A5ACD)
434    }
435    pub fn slategray() -> Color {
436        Color::hex(0x708090)
437    }
438    pub fn slategrey() -> Color {
439        Color::hex(0x708090)
440    }
441    pub fn snow() -> Color {
442        Color::hex(0xFFFAFA)
443    }
444    pub fn springgreen() -> Color {
445        Color::hex(0x00FF7F)
446    }
447    pub fn steelblue() -> Color {
448        Color::hex(0x4682B4)
449    }
450    pub fn tan() -> Color {
451        Color::hex(0xD2B48C)
452    }
453    pub fn teal() -> Color {
454        Color::hex(0x008080)
455    }
456    pub fn thistle() -> Color {
457        Color::hex(0xD8BFD8)
458    }
459    pub fn tomato() -> Color {
460        Color::hex(0xFF6347)
461    }
462    pub fn turquoise() -> Color {
463        Color::hex(0x40E0D0)
464    }
465    pub fn violet() -> Color {
466        Color::hex(0xEE82EE)
467    }
468    pub fn wheat() -> Color {
469        Color::hex(0xF5DEB3)
470    }
471    pub fn white() -> Color {
472        Color::hex(0xFFFFFF)
473    }
474    pub fn whitesmoke() -> Color {
475        Color::hex(0xF5F5F5)
476    }
477    pub fn yellow() -> Color {
478        Color::hex(0xFFFF00)
479    }
480    pub fn yellowgreen() -> Color {
481        Color::hex(0x9ACD32)
482    }
483}