neoGFX
Cross-platform C++ app/game engine
color.hpp
Go to the documentation of this file.
1 // color.hpp
2 /*
3  neogfx C++ GUI Library
4  Copyright (c) 2015 Leigh Johnston. All Rights Reserved.
5 
6  This program is free software: you can redistribute it and / or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  This program is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with this program. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 #pragma once
21 
22 #include <neogfx/neogfx.hpp>
23 #include <type_traits>
24 #include <neolib/variant.hpp>
29 
30 namespace neogfx
31 {
32  // todo: make this a template with specifiable component value_type
33  class color
34  {
35  // types
36  public:
37  typedef uint32_t argb;
38  typedef uint8_t component;
39  struct matrix : std::array<std::array<double, 5>, 5>
40  {
41  matrix() : std::array<std::array<double, 5>, 5>() {}
42  };
43  // constants
44  public:
45  static const color AliceBlue;
46  static const color AntiqueWhite;
47  static const color AntiqueWhite1;
48  static const color AntiqueWhite2;
49  static const color AntiqueWhite3;
50  static const color AntiqueWhite4;
51  static const color Aquamarine;
52  static const color Aquamarine1;
53  static const color Aquamarine2;
54  static const color Aquamarine3;
55  static const color Aquamarine4;
56  static const color Azure;
57  static const color Azure1;
58  static const color Azure2;
59  static const color Azure3;
60  static const color Azure4;
61  static const color Beige;
62  static const color Bisque;
63  static const color Bisque1;
64  static const color Bisque2;
65  static const color Bisque3;
66  static const color Bisque4;
67  static const color Black;
68  static const color BlanchedAlmond;
69  static const color Blue;
70  static const color Blue1;
71  static const color Blue2;
72  static const color Blue3;
73  static const color Blue4;
74  static const color BlueViolet;
75  static const color Brown;
76  static const color Brown1;
77  static const color Brown2;
78  static const color Brown3;
79  static const color Brown4;
80  static const color Burlywood;
81  static const color Burlywood1;
82  static const color Burlywood2;
83  static const color Burlywood3;
84  static const color Burlywood4;
85  static const color CadetBlue;
86  static const color CadetBlue1;
87  static const color CadetBlue2;
88  static const color CadetBlue3;
89  static const color CadetBlue4;
90  static const color Chartreuse;
91  static const color Chartreuse1;
92  static const color Chartreuse2;
93  static const color Chartreuse3;
94  static const color Chartreuse4;
95  static const color Chocolate;
96  static const color Chocolate1;
97  static const color Chocolate2;
98  static const color Chocolate3;
99  static const color Chocolate4;
100  static const color Coral;
101  static const color Coral1;
102  static const color Coral2;
103  static const color Coral3;
104  static const color Coral4;
105  static const color CornflowerBlue;
106  static const color Cornsilk;
107  static const color Cornsilk1;
108  static const color Cornsilk2;
109  static const color Cornsilk3;
110  static const color Cornsilk4;
111  static const color Cyan;
112  static const color Cyan1;
113  static const color Cyan2;
114  static const color Cyan3;
115  static const color Cyan4;
116  static const color DarkBlue;
117  static const color DarkCyan;
118  static const color DarkGoldenrod;
119  static const color DarkGoldenrod1;
120  static const color DarkGoldenrod2;
121  static const color DarkGoldenrod3;
122  static const color DarkGoldenrod4;
123  static const color DarkGray;
124  static const color DarkGreen;
125  static const color DarkGrey;
126  static const color DarkKhaki;
127  static const color DarkMagenta;
128  static const color DarkOliveGreen;
129  static const color DarkOliveGreen1;
130  static const color DarkOliveGreen2;
131  static const color DarkOliveGreen3;
132  static const color DarkOliveGreen4;
133  static const color DarkOrange;
134  static const color DarkOrange1;
135  static const color DarkOrange2;
136  static const color DarkOrange3;
137  static const color DarkOrange4;
138  static const color DarkOrchid;
139  static const color DarkOrchid1;
140  static const color DarkOrchid2;
141  static const color DarkOrchid3;
142  static const color DarkOrchid4;
143  static const color DarkRed;
144  static const color DarkSalmon;
145  static const color DarkSeaGreen;
146  static const color DarkSeaGreen1;
147  static const color DarkSeaGreen2;
148  static const color DarkSeaGreen3;
149  static const color DarkSeaGreen4;
150  static const color DarkSlateBlue;
151  static const color DarkSlateGray;
152  static const color DarkSlateGray1;
153  static const color DarkSlateGray2;
154  static const color DarkSlateGray3;
155  static const color DarkSlateGray4;
156  static const color DarkSlateGrey;
157  static const color DarkTurquoise;
158  static const color DarkViolet;
159  static const color DebianRed;
160  static const color DeepPink;
161  static const color DeepPink1;
162  static const color DeepPink2;
163  static const color DeepPink3;
164  static const color DeepPink4;
165  static const color DeepSkyBlue;
166  static const color DeepSkyBlue1;
167  static const color DeepSkyBlue2;
168  static const color DeepSkyBlue3;
169  static const color DeepSkyBlue4;
170  static const color DimGray;
171  static const color DimGrey;
172  static const color DodgerBlue;
173  static const color DodgerBlue1;
174  static const color DodgerBlue2;
175  static const color DodgerBlue3;
176  static const color DodgerBlue4;
177  static const color Firebrick;
178  static const color Firebrick1;
179  static const color Firebrick2;
180  static const color Firebrick3;
181  static const color Firebrick4;
182  static const color FloralWhite;
183  static const color ForestGreen;
184  static const color Gainsboro;
185  static const color GhostWhite;
186  static const color Gold;
187  static const color Gold1;
188  static const color Gold2;
189  static const color Gold3;
190  static const color Gold4;
191  static const color Goldenrod;
192  static const color Goldenrod1;
193  static const color Goldenrod2;
194  static const color Goldenrod3;
195  static const color Goldenrod4;
196  static const color Gray;
197  static const color Gray0;
198  static const color Gray1;
199  static const color Gray10;
200  static const color Gray100;
201  static const color Gray11;
202  static const color Gray12;
203  static const color Gray13;
204  static const color Gray14;
205  static const color Gray15;
206  static const color Gray16;
207  static const color Gray17;
208  static const color Gray18;
209  static const color Gray19;
210  static const color Gray2;
211  static const color Gray20;
212  static const color Gray21;
213  static const color Gray22;
214  static const color Gray23;
215  static const color Gray24;
216  static const color Gray25;
217  static const color Gray26;
218  static const color Gray27;
219  static const color Gray28;
220  static const color Gray29;
221  static const color Gray3;
222  static const color Gray30;
223  static const color Gray31;
224  static const color Gray32;
225  static const color Gray33;
226  static const color Gray34;
227  static const color Gray35;
228  static const color Gray36;
229  static const color Gray37;
230  static const color Gray38;
231  static const color Gray39;
232  static const color Gray4;
233  static const color Gray40;
234  static const color Gray41;
235  static const color Gray42;
236  static const color Gray43;
237  static const color Gray44;
238  static const color Gray45;
239  static const color Gray46;
240  static const color Gray47;
241  static const color Gray48;
242  static const color Gray49;
243  static const color Gray5;
244  static const color Gray50;
245  static const color Gray51;
246  static const color Gray52;
247  static const color Gray53;
248  static const color Gray54;
249  static const color Gray55;
250  static const color Gray56;
251  static const color Gray57;
252  static const color Gray58;
253  static const color Gray59;
254  static const color Gray6;
255  static const color Gray60;
256  static const color Gray61;
257  static const color Gray62;
258  static const color Gray63;
259  static const color Gray64;
260  static const color Gray65;
261  static const color Gray66;
262  static const color Gray67;
263  static const color Gray68;
264  static const color Gray69;
265  static const color Gray7;
266  static const color Gray70;
267  static const color Gray71;
268  static const color Gray72;
269  static const color Gray73;
270  static const color Gray74;
271  static const color Gray75;
272  static const color Gray76;
273  static const color Gray77;
274  static const color Gray78;
275  static const color Gray79;
276  static const color Gray8;
277  static const color Gray80;
278  static const color Gray81;
279  static const color Gray82;
280  static const color Gray83;
281  static const color Gray84;
282  static const color Gray85;
283  static const color Gray86;
284  static const color Gray87;
285  static const color Gray88;
286  static const color Gray89;
287  static const color Gray9;
288  static const color Gray90;
289  static const color Gray91;
290  static const color Gray92;
291  static const color Gray93;
292  static const color Gray94;
293  static const color Gray95;
294  static const color Gray96;
295  static const color Gray97;
296  static const color Gray98;
297  static const color Gray99;
298  static const color Green;
299  static const color Green1;
300  static const color Green2;
301  static const color Green3;
302  static const color Green4;
303  static const color GreenYellow;
304  static const color Grey;
305  static const color Grey0;
306  static const color Grey1;
307  static const color Grey10;
308  static const color Grey100;
309  static const color Grey11;
310  static const color Grey12;
311  static const color Grey13;
312  static const color Grey14;
313  static const color Grey15;
314  static const color Grey16;
315  static const color Grey17;
316  static const color Grey18;
317  static const color Grey19;
318  static const color Grey2;
319  static const color Grey20;
320  static const color Grey21;
321  static const color Grey22;
322  static const color Grey23;
323  static const color Grey24;
324  static const color Grey25;
325  static const color Grey26;
326  static const color Grey27;
327  static const color Grey28;
328  static const color Grey29;
329  static const color Grey3;
330  static const color Grey30;
331  static const color Grey31;
332  static const color Grey32;
333  static const color Grey33;
334  static const color Grey34;
335  static const color Grey35;
336  static const color Grey36;
337  static const color Grey37;
338  static const color Grey38;
339  static const color Grey39;
340  static const color Grey4;
341  static const color Grey40;
342  static const color Grey41;
343  static const color Grey42;
344  static const color Grey43;
345  static const color Grey44;
346  static const color Grey45;
347  static const color Grey46;
348  static const color Grey47;
349  static const color Grey48;
350  static const color Grey49;
351  static const color Grey5;
352  static const color Grey50;
353  static const color Grey51;
354  static const color Grey52;
355  static const color Grey53;
356  static const color Grey54;
357  static const color Grey55;
358  static const color Grey56;
359  static const color Grey57;
360  static const color Grey58;
361  static const color Grey59;
362  static const color Grey6;
363  static const color Grey60;
364  static const color Grey61;
365  static const color Grey62;
366  static const color Grey63;
367  static const color Grey64;
368  static const color Grey65;
369  static const color Grey66;
370  static const color Grey67;
371  static const color Grey68;
372  static const color Grey69;
373  static const color Grey7;
374  static const color Grey70;
375  static const color Grey71;
376  static const color Grey72;
377  static const color Grey73;
378  static const color Grey74;
379  static const color Grey75;
380  static const color Grey76;
381  static const color Grey77;
382  static const color Grey78;
383  static const color Grey79;
384  static const color Grey8;
385  static const color Grey80;
386  static const color Grey81;
387  static const color Grey82;
388  static const color Grey83;
389  static const color Grey84;
390  static const color Grey85;
391  static const color Grey86;
392  static const color Grey87;
393  static const color Grey88;
394  static const color Grey89;
395  static const color Grey9;
396  static const color Grey90;
397  static const color Grey91;
398  static const color Grey92;
399  static const color Grey93;
400  static const color Grey94;
401  static const color Grey95;
402  static const color Grey96;
403  static const color Grey97;
404  static const color Grey98;
405  static const color Grey99;
406  static const color Honeydew;
407  static const color Honeydew1;
408  static const color Honeydew2;
409  static const color Honeydew3;
410  static const color Honeydew4;
411  static const color HotPink;
412  static const color HotPink1;
413  static const color HotPink2;
414  static const color HotPink3;
415  static const color HotPink4;
416  static const color IndianRed;
417  static const color IndianRed1;
418  static const color IndianRed2;
419  static const color IndianRed3;
420  static const color IndianRed4;
421  static const color Ivory;
422  static const color Ivory1;
423  static const color Ivory2;
424  static const color Ivory3;
425  static const color Ivory4;
426  static const color Khaki;
427  static const color Khaki1;
428  static const color Khaki2;
429  static const color Khaki3;
430  static const color Khaki4;
431  static const color Lavender;
432  static const color LavenderBlush;
433  static const color LavenderBlush1;
434  static const color LavenderBlush2;
435  static const color LavenderBlush3;
436  static const color LavenderBlush4;
437  static const color LawnGreen;
438  static const color LemonChiffon;
439  static const color LemonChiffon1;
440  static const color LemonChiffon2;
441  static const color LemonChiffon3;
442  static const color LemonChiffon4;
443  static const color LightBlue;
444  static const color LightBlue1;
445  static const color LightBlue2;
446  static const color LightBlue3;
447  static const color LightBlue4;
448  static const color LightCoral;
449  static const color LightCyan;
450  static const color LightCyan1;
451  static const color LightCyan2;
452  static const color LightCyan3;
453  static const color LightCyan4;
454  static const color LightGoldenrod;
455  static const color LightGoldenrod1;
456  static const color LightGoldenrod2;
457  static const color LightGoldenrod3;
458  static const color LightGoldenrod4;
460  static const color LightGray;
461  static const color LightGreen;
462  static const color LightGrey;
463  static const color LightPink;
464  static const color LightPink1;
465  static const color LightPink2;
466  static const color LightPink3;
467  static const color LightPink4;
468  static const color LightSalmon;
469  static const color LightSalmon1;
470  static const color LightSalmon2;
471  static const color LightSalmon3;
472  static const color LightSalmon4;
473  static const color LightSeaGreen;
474  static const color LightSkyBlue;
475  static const color LightSkyBlue1;
476  static const color LightSkyBlue2;
477  static const color LightSkyBlue3;
478  static const color LightSkyBlue4;
479  static const color LightSlateBlue;
480  static const color LightSlateGray;
481  static const color LightSlateGrey;
482  static const color LightSteelBlue;
483  static const color LightSteelBlue1;
484  static const color LightSteelBlue2;
485  static const color LightSteelBlue3;
486  static const color LightSteelBlue4;
487  static const color LightYellow;
488  static const color LightYellow1;
489  static const color LightYellow2;
490  static const color LightYellow3;
491  static const color LightYellow4;
492  static const color LimeGreen;
493  static const color Linen;
494  static const color Magenta;
495  static const color Magenta1;
496  static const color Magenta2;
497  static const color Magenta3;
498  static const color Magenta4;
499  static const color Maroon;
500  static const color Maroon1;
501  static const color Maroon2;
502  static const color Maroon3;
503  static const color Maroon4;
504  static const color MediumAquamarine;
505  static const color MediumBlue;
506  static const color MediumOrchid;
507  static const color MediumOrchid1;
508  static const color MediumOrchid2;
509  static const color MediumOrchid3;
510  static const color MediumOrchid4;
511  static const color MediumPurple;
512  static const color MediumPurple1;
513  static const color MediumPurple2;
514  static const color MediumPurple3;
515  static const color MediumPurple4;
516  static const color MediumSeaGreen;
517  static const color MediumSlateBlue;
518  static const color MediumSpringGreen;
519  static const color MediumTurquoise;
520  static const color MediumVioletRed;
521  static const color MidnightBlue;
522  static const color MintCream;
523  static const color MistyRose;
524  static const color MistyRose1;
525  static const color MistyRose2;
526  static const color MistyRose3;
527  static const color MistyRose4;
528  static const color Moccasin;
529  static const color NavajoWhite;
530  static const color NavajoWhite1;
531  static const color NavajoWhite2;
532  static const color NavajoWhite3;
533  static const color NavajoWhite4;
534  static const color Navy;
535  static const color NavyBlue;
536  static const color OldLace;
537  static const color OliveDrab;
538  static const color OliveDrab1;
539  static const color OliveDrab2;
540  static const color OliveDrab3;
541  static const color OliveDrab4;
542  static const color Orange;
543  static const color Orange1;
544  static const color Orange2;
545  static const color Orange3;
546  static const color Orange4;
547  static const color OrangeRed;
548  static const color OrangeRed1;
549  static const color OrangeRed2;
550  static const color OrangeRed3;
551  static const color OrangeRed4;
552  static const color Orchid;
553  static const color Orchid1;
554  static const color Orchid2;
555  static const color Orchid3;
556  static const color Orchid4;
557  static const color PaleGoldenrod;
558  static const color PaleGreen;
559  static const color PaleGreen1;
560  static const color PaleGreen2;
561  static const color PaleGreen3;
562  static const color PaleGreen4;
563  static const color PaleTurquoise;
564  static const color PaleTurquoise1;
565  static const color PaleTurquoise2;
566  static const color PaleTurquoise3;
567  static const color PaleTurquoise4;
568  static const color PaleVioletRed;
569  static const color PaleVioletRed1;
570  static const color PaleVioletRed2;
571  static const color PaleVioletRed3;
572  static const color PaleVioletRed4;
573  static const color PapayaWhip;
574  static const color PeachPuff;
575  static const color PeachPuff1;
576  static const color PeachPuff2;
577  static const color PeachPuff3;
578  static const color PeachPuff4;
579  static const color Peru;
580  static const color Pink;
581  static const color Pink1;
582  static const color Pink2;
583  static const color Pink3;
584  static const color Pink4;
585  static const color Plum;
586  static const color Plum1;
587  static const color Plum2;
588  static const color Plum3;
589  static const color Plum4;
590  static const color PowderBlue;
591  static const color Purple;
592  static const color Purple1;
593  static const color Purple2;
594  static const color Purple3;
595  static const color Purple4;
596  static const color Red;
597  static const color Red1;
598  static const color Red2;
599  static const color Red3;
600  static const color Red4;
601  static const color RosyBrown;
602  static const color RosyBrown1;
603  static const color RosyBrown2;
604  static const color RosyBrown3;
605  static const color RosyBrown4;
606  static const color RoyalBlue;
607  static const color RoyalBlue1;
608  static const color RoyalBlue2;
609  static const color RoyalBlue3;
610  static const color RoyalBlue4;
611  static const color SaddleBrown;
612  static const color Salmon;
613  static const color Salmon1;
614  static const color Salmon2;
615  static const color Salmon3;
616  static const color Salmon4;
617  static const color SandyBrown;
618  static const color SeaGreen;
619  static const color SeaGreen1;
620  static const color SeaGreen2;
621  static const color SeaGreen3;
622  static const color SeaGreen4;
623  static const color Seashell;
624  static const color Seashell1;
625  static const color Seashell2;
626  static const color Seashell3;
627  static const color Seashell4;
628  static const color Sienna;
629  static const color Sienna1;
630  static const color Sienna2;
631  static const color Sienna3;
632  static const color Sienna4;
633  static const color SkyBlue;
634  static const color SkyBlue1;
635  static const color SkyBlue2;
636  static const color SkyBlue3;
637  static const color SkyBlue4;
638  static const color SlateBlue;
639  static const color SlateBlue1;
640  static const color SlateBlue2;
641  static const color SlateBlue3;
642  static const color SlateBlue4;
643  static const color SlateGray;
644  static const color SlateGray1;
645  static const color SlateGray2;
646  static const color SlateGray3;
647  static const color SlateGray4;
648  static const color SlateGrey;
649  static const color Snow;
650  static const color Snow1;
651  static const color Snow2;
652  static const color Snow3;
653  static const color Snow4;
654  static const color SpringGreen;
655  static const color SpringGreen1;
656  static const color SpringGreen2;
657  static const color SpringGreen3;
658  static const color SpringGreen4;
659  static const color SteelBlue;
660  static const color SteelBlue1;
661  static const color SteelBlue2;
662  static const color SteelBlue3;
663  static const color SteelBlue4;
664  static const color Tan;
665  static const color Tan1;
666  static const color Tan2;
667  static const color Tan3;
668  static const color Tan4;
669  static const color Thistle;
670  static const color Thistle1;
671  static const color Thistle2;
672  static const color Thistle3;
673  static const color Thistle4;
674  static const color Tomato;
675  static const color Tomato1;
676  static const color Tomato2;
677  static const color Tomato3;
678  static const color Tomato4;
679  static const color Turquoise;
680  static const color Turquoise1;
681  static const color Turquoise2;
682  static const color Turquoise3;
683  static const color Turquoise4;
684  static const color Violet;
685  static const color VioletRed;
686  static const color VioletRed1;
687  static const color VioletRed2;
688  static const color VioletRed3;
689  static const color VioletRed4;
690  static const color Wheat;
691  static const color Wheat1;
692  static const color Wheat2;
693  static const color Wheat3;
694  static const color Wheat4;
695  static const color White;
696  static const color WhiteSmoke;
697  static const color Yellow;
698  static const color Yellow1;
699  static const color Yellow2;
700  static const color Yellow3;
701  static const color Yellow4;
702  static const color YellowGreen;
703  public:
704  static const component MinComponetValue = 0x00;
705  static const component MaxComponetValue = 0xFF;
706  private:
707  static const argb AlphaShift = 24;
708  static const argb RedShift = 16;
709  static const argb GreenShift = 8;
710  static const argb BlueShift = 0;
711  // construction
712  public:
713  color();
714  color(const color& aOther);
715  explicit color(argb aValue);
716  explicit color(const vec3u32& aValue);
717  explicit color(const vec4u32& aValue);
718  explicit color(const vec3& aValue);
719  explicit color(const vec3f& aValue);
720  explicit color(const vec4& aValue);
721  explicit color(const vec4f& aValue);
722  template <typename T>
723  color(T aRed, T aGreen, T aBlue, T aAlpha = static_cast<T>(0xFF), std::enable_if_t<std::is_integral_v<T>, sfinae> = {}) :
724  color{ vec4u32{ static_cast<uint32_t>(aRed), static_cast<uint32_t>(aGreen), static_cast<uint32_t>(aBlue), static_cast<uint32_t>(aAlpha) } } {}
725  template <typename T>
726  color(T aRed, T aGreen, T aBlue, T aAlpha = static_cast<T>(1.0), std::enable_if_t<std::is_same_v<T, double>, sfinae> = {}) :
727  color{ vec4{ aRed, aGreen, aBlue, aAlpha } } {}
728  template <typename T>
729  color(T aRed, T aGreen, T aBlue, T aAlpha = static_cast<T>(1.0), std::enable_if_t<std::is_same_v<T, float>, sfinae> = {}) :
730  color{ vec4f{ aRed, aGreen, aBlue, aAlpha } } {}
731  color(const std::string& aTextValue);
732  // assignment
733  public:
734  color& operator=(const color& aOther);
735  color& operator=(argb aOther);
736  color& operator=(const vec3u32& aValue);
737  color& operator=(const vec4u32& aValue);
738  color& operator=(const vec3& aValue);
739  color& operator=(const vec3f& aValue);
740  color& operator=(const vec4& aValue);
741  color& operator=(const vec4f& aValue);
742  // operations
743  public:
744  static color from_hsl(double aHue, double aSaturation, double aLightness, double aAlpha = 1.0);
745  static color from_hsv(double aHue, double aSaturation, double aValue, double aAlpha = 1.0);
746  static std::optional<color> from_name(const std::string& aName);
747  argb value() const;
748  component alpha() const;
749  component red() const;
750  component green() const;
751  component blue() const;
752  template <typename T>
753  T alpha() const { return static_cast<T>(alpha()) / 0xFF; }
754  template <typename T>
755  T red() const { return static_cast<T>(red()) / 0xFF; }
756  template <typename T>
757  T green() const { return static_cast<T>(green()) / 0xFF; }
758  template <typename T>
759  T blue() const { return static_cast<T>(blue()) / 0xFF; }
760  template <typename T>
761  color& set_alpha(T aAlpha, std::enable_if_t<std::is_integral_v<T>, sfinae> = {})
762  {
763  *this = color{ red(), green(), blue(), static_cast<component>(aAlpha) };
764  return *this;
765  }
766  template <typename T>
767  color& set_alpha(T aAlpha, std::enable_if_t<std::is_floating_point_v<T>, sfinae> = {})
768  {
769  *this = color{ red<T>(), green<T>(), blue<T>(), aAlpha };
770  return *this;
771  }
772  color& set_red(component aNewValue);
773  color& set_green(component aNewValue);
774  color& set_blue(component aNewValue);
775  template <typename T>
776  color with_alpha(T aAlpha, std::enable_if_t<std::is_integral_v<T>, sfinae> = {}) const
777  {
778  return color{ red(), green(), blue(), static_cast<component>(aAlpha) };
779  }
780  template <typename T>
781  color with_alpha(T aAlpha, std::enable_if_t<std::is_floating_point_v<T>, sfinae> = {}) const
782  {
783  return color{ red<T>(), green<T>(), blue<T>(), aAlpha };
784  }
785  color with_red(component aNewValue) const;
786  color with_green(component aNewValue) const;
787  color with_blue(component aNewValue) const;
788  color with_combined_alpha(component aNewValue) const;
789  color with_combined_alpha(double aCoefficient) const;
790  hsl_color to_hsl() const;
791  hsv_color to_hsv() const;
792  double brightness() const;
793  double intensity() const;
794  double luma() const;
795  bool similar_intensity(const color& aOther, double aThreshold = 0.5);
796  color mid(const color& aOther) const;
797  bool light(double aThreshold = 0.50) const;
798  bool dark(double aThreshold = 0.50) const;
799  color& lighten(component aDelta);
800  color& darken(component aDelta);
801  color lighter(component aDelta) const;
802  color darker(component aDelta) const;
803  color shade(component aDelta) const;
804  color unshade(component aDelta) const;
805  color monochrome() const;
806  color same_lightness_as(const color& aOther) const;
807  color with_lightness(double aLightness) const;
808  color inverse() const;
809  color& operator+=(component aDelta);
810  color& operator-=(component aDelta);
811  color operator~() const;
812  bool operator==(const color& aOther) const;
813  bool operator!=(const color& aOther) const;
814  bool operator<(const color& aOther) const;
815  std::string to_string() const;
816  std::string to_hex_string() const;
817  vec4 to_vec4() const;
818  vec4f to_vec4f() const;
819  // attributes
820  private:
821  argb iValue;
822  };
823 
824  inline color operator+(const color& aLeft, color::component aRight)
825  {
826  color ret = aLeft;
827  ret += aRight;
828  return ret;
829  }
830 
831  inline color operator-(const color& aLeft, color::component aRight)
832  {
833  color ret = aLeft;
834  ret -= aRight;
835  return ret;
836  }
837 
838  inline color operator*(const color& aLeft, double aCoefficient)
839  {
840  return color{ aLeft.to_vec4() *= vec4 { aCoefficient, aCoefficient, aCoefficient, 1.0 } };
841  }
842 
843  template <typename Elem, typename Traits>
844  inline std::basic_ostream<Elem, Traits>& operator<<(std::basic_ostream<Elem, Traits>& aStream, const color& aColor)
845  {
846  aStream << "[A: 0x" << std::hex << (int)aColor.alpha() <<
847  ", R: 0x" << std::hex << (int)aColor.red() <<
848  ", G: 0x" << std::hex << (int)aColor.green() <<
849  ", B: 0x" << std::hex << (int)aColor.blue() << "]";
850  return aStream;
851  }
852 
853  enum class gradient_direction : uint32_t
854  {
855  Vertical,
856  Horizontal,
857  Diagonal,
858  Rectangular,
859  Radial
860  };
861 
862  enum class gradient_shape : uint32_t
863  {
864  Ellipse,
865  Circle
866  };
867 
868  enum class gradient_size : uint32_t
869  {
870  ClosestSide,
871  FarthestSide,
874  };
875 }
876 
877 template <>
878 const neolib::enum_enumerators_t<neogfx::gradient_direction> neolib::enum_enumerators_v<neogfx::gradient_direction>
879 {
885 };
886 
887 template <>
888 const neolib::enum_enumerators_t<neogfx::gradient_shape> neolib::enum_enumerators_v<neogfx::gradient_shape>
889 {
892 };
893 
894 template <>
895 const neolib::enum_enumerators_t<neogfx::gradient_size> neolib::enum_enumerators_v<neogfx::gradient_size>
896 {
901 };
902 
903 namespace neogfx
904 {
905  class gradient
906  {
907  // constants
908  public:
909  static const std::uint32_t MaxStops = 256;
910  // types
911  public:
913  typedef std::pair<double, color> color_stop;
914  typedef std::vector<color_stop> color_stop_list;
915  typedef std::pair<double, color::component> alpha_stop;
916  typedef std::vector<alpha_stop> alpha_stop_list;
917  public:
918  struct bad_position : std::logic_error { bad_position() : std::logic_error("neogfx::gradient::bad_position") {} };
919  // construction
920  public:
921  gradient();
922  gradient(const gradient& aOther);
923  explicit gradient(const color& aColor);
924  gradient(const color& aColor, gradient_direction aDirection);
925  gradient(const color& aColor1, const color& aColor2, gradient_direction aDirection = gradient_direction::Vertical);
926  gradient(const color_stop_list& aColorStops, gradient_direction aDirection = gradient_direction::Vertical);
927  gradient(const color_stop_list& aColorStops, const alpha_stop_list& aAlphaStops, gradient_direction aDirection = gradient_direction::Vertical);
928  gradient(const gradient& aOther, const color_stop_list& aColorStops, const alpha_stop_list& aAlphaStops);
929  gradient(const std::initializer_list<color>& aColors, gradient_direction aDirection = gradient_direction::Vertical);
930  // operations
931  public:
932  bool use_cache() const;
933  void set_cache_usage(bool aUseCache);
934  color_stop_list::const_iterator color_begin() const;
935  color_stop_list::const_iterator color_end() const;
936  alpha_stop_list::const_iterator alpha_begin() const;
937  alpha_stop_list::const_iterator alpha_end() const;
938  color_stop_list::iterator color_begin();
939  color_stop_list::iterator color_end();
940  alpha_stop_list::iterator alpha_begin();
941  alpha_stop_list::iterator alpha_end();
942  color_stop_list::iterator find_color_stop(double aPos, bool aToInsert = false);
943  color_stop_list::iterator find_color_stop(double aPos, double aStart, double aEnd, bool aToInsert = false);
944  alpha_stop_list::iterator find_alpha_stop(double aPos, bool aToInsert = false);
945  alpha_stop_list::iterator find_alpha_stop(double aPos, double aStart, double aEnd, bool aToInsert = false);
946  color_stop_list::iterator insert_color_stop(double aPos);
947  color_stop_list::iterator insert_color_stop(double aPos, double aStart, double aEnd);
948  alpha_stop_list::iterator insert_alpha_stop(double aPos);
949  alpha_stop_list::iterator insert_alpha_stop(double aPos, double aStart, double aEnd);
950  void erase_stop(color_stop_list::iterator aStop);
951  void erase_stop(alpha_stop_list::iterator aStop);
952  std::size_t color_stop_count() const;
953  std::size_t alpha_stop_count() const;
954  color_stop_list combined_stops() const;
955  color at(double aPos) const;
956  color at(double aPos, double aStart, double aEnd) const;
957  color color_at(double aPos) const;
958  color color_at(double aPos, double aStart, double aEnd) const;
959  color::component alpha_at(double aPos) const;
960  color::component alpha_at(double aPos, double aStart, double aEnd) const;
961  gradient reversed() const;
962  template <typename T>
963  gradient with_alpha(T aAlpha, std::enable_if_t<std::is_floating_point_v<T>, sfinae> = {})
964  {
965  return with_alpha(static_cast<color::component>(aAlpha * 0xFF));
966  }
967  gradient with_alpha(color::component aAlpha) const;
968  template <typename T>
969  gradient with_combined_alpha(T aAlpha, std::enable_if_t<std::is_floating_point_v<T>, sfinae> = {})
970  {
971  return with_combined_alpha(static_cast<color::component>(aAlpha * 0xFF));
972  }
974  gradient_direction direction() const;
975  void set_direction(gradient_direction aDirection);
976  gradient with_direction(gradient_direction aDirection) const;
977  orientation_type orientation() const;
978  void set_orientation(orientation_type aOrientation);
979  gradient with_orientation(orientation_type aOrientation) const;
980  gradient_shape shape() const;
981  void set_shape(gradient_shape aShape);
982  gradient with_shape(gradient_shape aShape) const;
983  gradient_size size() const;
984  void set_size(gradient_size aSize);
985  gradient with_size(gradient_size aSize) const;
986  const optional_vec2& exponents() const;
987  void set_exponents(const optional_vec2& aExponents);
988  gradient with_exponents(const optional_vec2& aExponents) const;
989  const optional_point& centre() const;
990  void set_centre(const optional_point& aCentre);
991  gradient with_centre(const optional_point& aCentre) const;
992  double smoothness() const;
993  void set_smoothness(double aSmoothness);
994  gradient with_smoothness(double aSmoothness) const;
995  public:
996  bool operator==(const gradient& aOther) const;
997  bool operator!=(const gradient& aOther) const;
998  bool operator<(const gradient& aOther) const;
999  public:
1000  static double normalized_position(double aPos, double aStart, double aEnd);
1001  private:
1002  const color_stop_list& color_stops() const;
1003  color_stop_list& color_stops();
1004  const alpha_stop_list& alpha_stops() const;
1005  alpha_stop_list& alpha_stops();
1006  void fix();
1007  // attributes
1008  private:
1009  bool iUseCache;
1010  color_stop_list iColorStops;
1011  alpha_stop_list iAlphaStops;
1012  gradient_direction iDirection;
1013  orientation_type iOrientation;
1014  gradient_shape iShape;
1015  gradient_size iSize;
1016  optional_vec2 iExponents;
1017  optional_point iCentre;
1018  double iSmoothness;
1019  };
1020 
1021  typedef std::optional<color> optional_color;
1022  typedef std::optional<gradient> optional_gradient;
1023 
1025  typedef std::optional<color_or_gradient> optional_color_or_gradient;
1026 }
static const color LightYellow1
Definition: color.hpp:488
static const color IndianRed4
Definition: color.hpp:420
static const color RoyalBlue3
Definition: color.hpp:609
static const color SlateGray1
Definition: color.hpp:644
static const color Grey34
Definition: color.hpp:334
static const color Maroon1
Definition: color.hpp:500
static const color Burlywood
Definition: color.hpp:80
static const color LemonChiffon4
Definition: color.hpp:442
component green() const
static const color PeachPuff
Definition: color.hpp:574
static const color Grey76
Definition: color.hpp:380
static const color DarkSeaGreen2
Definition: color.hpp:147
static const color LightBlue2
Definition: color.hpp:445
static const color Orange2
Definition: color.hpp:544
static const color Gray76
Definition: color.hpp:272
static const color CornflowerBlue
Definition: color.hpp:105
static const color Grey97
Definition: color.hpp:403
static const color Ivory2
Definition: color.hpp:423
static const color PeachPuff2
Definition: color.hpp:576
neolib::variant< corner, double > orientation_type
Definition: color.hpp:912
static const color Grey57
Definition: color.hpp:359
static const color OliveDrab2
Definition: color.hpp:539
static const color SpringGreen
Definition: color.hpp:654
static const color Cornsilk1
Definition: color.hpp:107
static const color Cornsilk3
Definition: color.hpp:109
static const color Gray77
Definition: color.hpp:273
static const color Seashell1
Definition: color.hpp:624
color & lighten(component aDelta)
static const color MistyRose1
Definition: color.hpp:524
static const color Seashell
Definition: color.hpp:623
static const color Gray41
Definition: color.hpp:234
static const color DarkOrchid3
Definition: color.hpp:141
argb value() const
static const color Wheat1
Definition: color.hpp:691
static const color Grey48
Definition: color.hpp:349
static const color Grey33
Definition: color.hpp:333
uint32_t argb
Definition: color.hpp:37
static const color Gold4
Definition: color.hpp:190
static const color Grey14
Definition: color.hpp:312
static const color Gray7
Definition: color.hpp:265
static const color Purple3
Definition: color.hpp:594
static const color BlanchedAlmond
Definition: color.hpp:68
static const color Grey61
Definition: color.hpp:364
static const color Gray2
Definition: color.hpp:210
static const color SlateGray4
Definition: color.hpp:647
static const color VioletRed2
Definition: color.hpp:687
static const color Cyan4
Definition: color.hpp:115
static const color LightSkyBlue2
Definition: color.hpp:476
static std::optional< color > from_name(const std::string &aName)
static const color Gray70
Definition: color.hpp:266
static const color Goldenrod3
Definition: color.hpp:194
static const color Khaki4
Definition: color.hpp:430
static const color LightYellow3
Definition: color.hpp:490
static const color Gray63
Definition: color.hpp:258
static const color Azure
Definition: color.hpp:56
static const color SpringGreen1
Definition: color.hpp:655
static const color Plum1
Definition: color.hpp:586
static const color Gray28
Definition: color.hpp:219
static const color Purple4
Definition: color.hpp:595
static const color LightPink4
Definition: color.hpp:467
static const color Grey77
Definition: color.hpp:381
static const color Gray61
Definition: color.hpp:256
static const color Grey71
Definition: color.hpp:375
static const color Beige
Definition: color.hpp:61
static const color Turquoise2
Definition: color.hpp:681
static const color PaleGreen
Definition: color.hpp:558
static const color MediumOrchid1
Definition: color.hpp:507
static const color Aquamarine
Definition: color.hpp:51
static const color Gray40
Definition: color.hpp:233
static const color Grey2
Definition: color.hpp:318
static const color Gray80
Definition: color.hpp:277
static const color Grey95
Definition: color.hpp:401
static const color Grey79
Definition: color.hpp:383
static const color Plum3
Definition: color.hpp:588
static const color Gray10
Definition: color.hpp:199
static const color Grey47
Definition: color.hpp:348
static const color Snow1
Definition: color.hpp:650
static const color ForestGreen
Definition: color.hpp:183
static const color Grey69
Definition: color.hpp:372
static const color MediumOrchid3
Definition: color.hpp:509
static const color OrangeRed4
Definition: color.hpp:551
static const color CadetBlue
Definition: color.hpp:85
T green() const
Definition: color.hpp:757
static const color Goldenrod2
Definition: color.hpp:193
static const color Bisque
Definition: color.hpp:62
static const color DarkSlateGray2
Definition: color.hpp:153
static const color AntiqueWhite1
Definition: color.hpp:47
static const color SkyBlue4
Definition: color.hpp:637
static const color Gray19
Definition: color.hpp:209
std::optional< color > optional_color
Definition: color.hpp:1021
static const color Gray33
Definition: color.hpp:225
color lighter(component aDelta) const
static const color Coral4
Definition: color.hpp:104
static const color BlueViolet
Definition: color.hpp:74
static const color MistyRose3
Definition: color.hpp:526
static const color DarkSeaGreen4
Definition: color.hpp:149
static const color Thistle3
Definition: color.hpp:672
static const color Orange1
Definition: color.hpp:543
static const color WhiteSmoke
Definition: color.hpp:696
static const color Pink3
Definition: color.hpp:583
color darker(component aDelta) const
static const color DarkOrchid4
Definition: color.hpp:142
static const color Grey6
Definition: color.hpp:362
static const color Grey92
Definition: color.hpp:398
static const color Gray3
Definition: color.hpp:221
static const color Cornsilk
Definition: color.hpp:106
static const color PeachPuff3
Definition: color.hpp:577
static const color Gray5
Definition: color.hpp:243
static const color Magenta
Definition: color.hpp:494
static const color Gray23
Definition: color.hpp:214
static const color Grey68
Definition: color.hpp:371
bool operator!=(const color &aOther) const
static const color DarkOrange2
Definition: color.hpp:135
static const color SeaGreen4
Definition: color.hpp:622
static const color SteelBlue2
Definition: color.hpp:661
color & set_alpha(T aAlpha, std::enable_if_t< std::is_integral_v< T >, sfinae >={})
Definition: color.hpp:761
static const color DodgerBlue2
Definition: color.hpp:174
static const color LightSkyBlue4
Definition: color.hpp:478
static const color Grey73
Definition: color.hpp:377
static const color Magenta2
Definition: color.hpp:496
static const color Gray96
Definition: color.hpp:294
static const color Gray81
Definition: color.hpp:278
static const color OliveDrab3
Definition: color.hpp:540
T red() const
Definition: color.hpp:755
static const color Grey8
Definition: color.hpp:384
static const color Cyan1
Definition: color.hpp:112
static const color Grey13
Definition: color.hpp:311
static const color Gray97
Definition: color.hpp:295
double intensity() const
color(T aRed, T aGreen, T aBlue, T aAlpha=static_cast< T >(0xFF), std::enable_if_t< std::is_integral_v< T >, sfinae >={})
Definition: color.hpp:723
static const color Wheat2
Definition: color.hpp:692
static const color OliveDrab4
Definition: color.hpp:541
static const color Salmon3
Definition: color.hpp:615
static const color Gray83
Definition: color.hpp:280
static const color Blue3
Definition: color.hpp:72
static const color Orange4
Definition: color.hpp:546
color with_blue(component aNewValue) const
gradient_direction
Definition: color.hpp:853
static const color Tomato1
Definition: color.hpp:675
static const color Sienna4
Definition: color.hpp:632
static const color Gold3
Definition: color.hpp:189
static const color DimGray
Definition: color.hpp:170
static const color Grey
Definition: color.hpp:304
static const color Pink1
Definition: color.hpp:581
static const color Gray78
Definition: color.hpp:274
static const color SlateBlue
Definition: color.hpp:638
color shade(component aDelta) const
static const color Gray88
Definition: color.hpp:285
static const color Maroon
Definition: color.hpp:499
static const color Cyan2
Definition: color.hpp:113
static const component MinComponetValue
Definition: color.hpp:704
static const color LightYellow4
Definition: color.hpp:491
static const color Grey98
Definition: color.hpp:404
static const color Gray39
Definition: color.hpp:231
static const color DodgerBlue
Definition: color.hpp:172
static const color PaleVioletRed2
Definition: color.hpp:570
static const color Pink4
Definition: color.hpp:584
static const color Grey22
Definition: color.hpp:321
static const color Goldenrod4
Definition: color.hpp:195
static const color Gray94
Definition: color.hpp:292
static const color Grey80
Definition: color.hpp:385
static const color Linen
Definition: color.hpp:493
gradient with_alpha(T aAlpha, std::enable_if_t< std::is_floating_point_v< T >, sfinae >={})
Definition: color.hpp:963
static const color Firebrick3
Definition: color.hpp:180
static const color LightPink1
Definition: color.hpp:464
static const color AliceBlue
Definition: color.hpp:45
static const color DarkOrange3
Definition: color.hpp:136
static const color Grey56
Definition: color.hpp:358
static const color DodgerBlue1
Definition: color.hpp:173
static const color Seashell2
Definition: color.hpp:625
static const color Bisque2
Definition: color.hpp:64
static const color HotPink
Definition: color.hpp:411
static const color Honeydew4
Definition: color.hpp:410
static const color Plum
Definition: color.hpp:585
static const color Seashell3
Definition: color.hpp:626
color & set_alpha(T aAlpha, std::enable_if_t< std::is_floating_point_v< T >, sfinae >={})
Definition: color.hpp:767
std::optional< vec2 > optional_vec2
Definition: numerical.hpp:352
std::pair< double, color > color_stop
Definition: color.hpp:913
static const color Gray16
Definition: color.hpp:206
static const color DarkOliveGreen2
Definition: color.hpp:130
static const color LightBlue
Definition: color.hpp:443
uint8_t component
Definition: color.hpp:38
static const color Gray50
Definition: color.hpp:244
color with_combined_alpha(component aNewValue) const
static const color Gray35
Definition: color.hpp:227
static const color SlateBlue4
Definition: color.hpp:642
static const color LightSalmon2
Definition: color.hpp:470
static const color DarkSlateGray1
Definition: color.hpp:152
static const color Red1
Definition: color.hpp:597
static const color Grey36
Definition: color.hpp:336
static const color Orange
Definition: color.hpp:542
std::vector< color_stop > color_stop_list
Definition: color.hpp:914
static const color Grey67
Definition: color.hpp:370
color unshade(component aDelta) const
color inverse() const
static const color PapayaWhip
Definition: color.hpp:573
static const color Grey4
Definition: color.hpp:340
static const color Grey66
Definition: color.hpp:369
static const color Gray
Definition: color.hpp:196
static const color Azure2
Definition: color.hpp:58
static const color PaleVioletRed4
Definition: color.hpp:572
color & operator+=(component aDelta)
static const color DeepPink
Definition: color.hpp:160
static const color Burlywood2
Definition: color.hpp:82
static const color Cyan
Definition: color.hpp:111
static const color Grey37
Definition: color.hpp:337
static const color LightSalmon3
Definition: color.hpp:471
static const color Gray27
Definition: color.hpp:218
static const color MediumPurple4
Definition: color.hpp:515
static const color DeepSkyBlue3
Definition: color.hpp:168
static const color Maroon4
Definition: color.hpp:503
static const color Gray4
Definition: color.hpp:232
static const color Grey75
Definition: color.hpp:379
static const color Gray13
Definition: color.hpp:203
static const color LightBlue4
Definition: color.hpp:447
color mid(const color &aOther) const
std::string to_hex_string() const
static const color Grey44
Definition: color.hpp:345
static const color Chocolate
Definition: color.hpp:95
color with_alpha(T aAlpha, std::enable_if_t< std::is_floating_point_v< T >, sfinae >={}) const
Definition: color.hpp:781
static const color DeepSkyBlue1
Definition: color.hpp:166
static const color RosyBrown
Definition: color.hpp:601
static const color OliveDrab
Definition: color.hpp:537
static const color DarkViolet
Definition: color.hpp:158
static const color Grey94
Definition: color.hpp:400
static const color LightCyan2
Definition: color.hpp:451
static const color Yellow2
Definition: color.hpp:699
static const color LightSkyBlue3
Definition: color.hpp:477
static const color DarkGoldenrod2
Definition: color.hpp:120
static const color Gray47
Definition: color.hpp:240
static const color Purple1
Definition: color.hpp:592
static const color Ivory1
Definition: color.hpp:422
static const color Grey3
Definition: color.hpp:329
static const color DarkOrange4
Definition: color.hpp:137
static const color Gray90
Definition: color.hpp:288
static const color Gray69
Definition: color.hpp:264
static const color Snow4
Definition: color.hpp:653
color with_red(component aNewValue) const
static const color Ivory
Definition: color.hpp:421
static const color AntiqueWhite2
Definition: color.hpp:48
static const color Tomato4
Definition: color.hpp:678
static const color Grey32
Definition: color.hpp:332
static const color Bisque4
Definition: color.hpp:66
static const color Cyan3
Definition: color.hpp:114
static const color Grey84
Definition: color.hpp:389
static const color Plum4
Definition: color.hpp:589
static const color Grey51
Definition: color.hpp:353
color(T aRed, T aGreen, T aBlue, T aAlpha=static_cast< T >(1.0), std::enable_if_t< std::is_same_v< T, float >, sfinae >={})
Definition: color.hpp:729
static const color LightCyan3
Definition: color.hpp:452
static const color AntiqueWhite3
Definition: color.hpp:49
static const color Khaki
Definition: color.hpp:426
static const color Tan3
Definition: color.hpp:667
static const color Honeydew2
Definition: color.hpp:408
static const color DeepSkyBlue4
Definition: color.hpp:169
static const color Grey99
Definition: color.hpp:405
static const color Ivory3
Definition: color.hpp:424
static const color Grey49
Definition: color.hpp:350
static const color Grey20
Definition: color.hpp:319
bool dark(double aThreshold=0.50) const
static const color Burlywood4
Definition: color.hpp:84
static const color DarkGray
Definition: color.hpp:123
static const color Grey54
Definition: color.hpp:356
static const color Grey12
Definition: color.hpp:310
hsl_color to_hsl() const
static const color Grey25
Definition: color.hpp:324
static const color DarkCyan
Definition: color.hpp:117
static const color DarkTurquoise
Definition: color.hpp:157
static const color Gray32
Definition: color.hpp:224
static const color Grey87
Definition: color.hpp:392
static const color CadetBlue1
Definition: color.hpp:86
static const color Purple2
Definition: color.hpp:593
static const color LightSteelBlue2
Definition: color.hpp:484
static const color DarkOrange
Definition: color.hpp:133
static const color LightSteelBlue3
Definition: color.hpp:485
T blue() const
Definition: color.hpp:759
static const color Grey58
Definition: color.hpp:360
static const color Thistle1
Definition: color.hpp:670
static const color DarkOliveGreen4
Definition: color.hpp:132
static const color Gray11
Definition: color.hpp:201
static const color SandyBrown
Definition: color.hpp:617
static const color Grey17
Definition: color.hpp:315
static const color MistyRose
Definition: color.hpp:523
static const color Grey62
Definition: color.hpp:365
static const color Grey38
Definition: color.hpp:338
static const color SlateGray
Definition: color.hpp:643
static const color Gray30
Definition: color.hpp:222
color operator*(const color &aLeft, double aCoefficient)
Definition: color.hpp:838
double brightness() const
static const color Grey81
Definition: color.hpp:386
static const color DimGrey
Definition: color.hpp:171
static const color LightGray
Definition: color.hpp:460
static const color LavenderBlush1
Definition: color.hpp:433
basic_size< coordinate > size
static const component MaxComponetValue
Definition: color.hpp:705
static const color PaleTurquoise1
Definition: color.hpp:564
static const color Magenta1
Definition: color.hpp:495
static const color Brown1
Definition: color.hpp:76
static const color Grey64
Definition: color.hpp:367
static const color Gray82
Definition: color.hpp:279
static const color Grey85
Definition: color.hpp:390
static const color LightGoldenrod3
Definition: color.hpp:457
static const color Grey24
Definition: color.hpp:323
static const color Gold1
Definition: color.hpp:187
static const color Red3
Definition: color.hpp:599
static const color LemonChiffon2
Definition: color.hpp:440
color & set_blue(component aNewValue)
static const color Gray93
Definition: color.hpp:291
static const color Blue2
Definition: color.hpp:71
static const color LightPink3
Definition: color.hpp:466
static const color PaleVioletRed1
Definition: color.hpp:569
static const color LemonChiffon
Definition: color.hpp:438
static const color Gray49
Definition: color.hpp:242
static const color Yellow
Definition: color.hpp:697
static const color Grey35
Definition: color.hpp:335
static const color SkyBlue2
Definition: color.hpp:635
double luma() const
static const color Snow
Definition: color.hpp:649
static const color DeepPink2
Definition: color.hpp:162
static const color HotPink1
Definition: color.hpp:412
static const color Grey96
Definition: color.hpp:402
bool operator==(const color &aOther) const
neolib::variant< color, gradient > color_or_gradient
Definition: color.hpp:1024
static const color YellowGreen
Definition: color.hpp:702
static const color LightCoral
Definition: color.hpp:448
color & operator-=(component aDelta)
static const color Black
Definition: color.hpp:67
static const color Grey28
Definition: color.hpp:327
static const color Goldenrod1
Definition: color.hpp:192
static const color Grey27
Definition: color.hpp:326
static const color VioletRed3
Definition: color.hpp:688
static const color Wheat4
Definition: color.hpp:694
static const color DodgerBlue3
Definition: color.hpp:175
static const color Azure4
Definition: color.hpp:60
static const color RosyBrown1
Definition: color.hpp:602
static const color Gray89
Definition: color.hpp:286
static const color Aquamarine3
Definition: color.hpp:54
static const color Grey18
Definition: color.hpp:316
static const color Grey7
Definition: color.hpp:373
static const color LightGrey
Definition: color.hpp:462
static const color FloralWhite
Definition: color.hpp:182
static const color Chocolate3
Definition: color.hpp:98
static const color Azure3
Definition: color.hpp:59
static const color SeaGreen3
Definition: color.hpp:621
gradient with_combined_alpha(T aAlpha, std::enable_if_t< std::is_floating_point_v< T >, sfinae >={})
Definition: color.hpp:969
static const color RosyBrown3
Definition: color.hpp:604
static const color MistyRose2
Definition: color.hpp:525
color monochrome() const
static const color Gray26
Definition: color.hpp:217
static const color LightSalmon1
Definition: color.hpp:469
static const color Grey42
Definition: color.hpp:343
static const color Wheat
Definition: color.hpp:690
static const color Green3
Definition: color.hpp:301
static const color OrangeRed3
Definition: color.hpp:550
static const color SteelBlue3
Definition: color.hpp:662
static const color Khaki2
Definition: color.hpp:428
static const color Gray52
Definition: color.hpp:246
static const color LightSteelBlue1
Definition: color.hpp:483
static const color Snow3
Definition: color.hpp:652
static const color Gray44
Definition: color.hpp:237
static const color Thistle
Definition: color.hpp:669
static const color HotPink3
Definition: color.hpp:414
static const color Gray43
Definition: color.hpp:236
static const color Grey72
Definition: color.hpp:376
component red() const
static const color Gray34
Definition: color.hpp:226
static const color Khaki3
Definition: color.hpp:429
static const color PaleTurquoise3
Definition: color.hpp:566
static const color Bisque3
Definition: color.hpp:65
static const color Gray91
Definition: color.hpp:289
static const color Gray9
Definition: color.hpp:287
static const color SpringGreen3
Definition: color.hpp:657
static color from_hsl(double aHue, double aSaturation, double aLightness, double aAlpha=1.0)
static const color Yellow4
Definition: color.hpp:701
static const color IndianRed
Definition: color.hpp:416
static const color Grey10
Definition: color.hpp:307
static const color DarkKhaki
Definition: color.hpp:126
static const color NavajoWhite4
Definition: color.hpp:533
static const color Chartreuse4
Definition: color.hpp:94
static const color Tomato2
Definition: color.hpp:676
static const color Gray85
Definition: color.hpp:282
static const color Gray57
Definition: color.hpp:251
static const color Grey5
Definition: color.hpp:351
bool similar_intensity(const color &aOther, double aThreshold=0.5)
static const color MediumPurple
Definition: color.hpp:511
static const color MediumSeaGreen
Definition: color.hpp:516
static const color Coral2
Definition: color.hpp:102
static const color Orchid2
Definition: color.hpp:554
static const color PaleGoldenrod
Definition: color.hpp:557
static const color DarkGoldenrod3
Definition: color.hpp:121
static const color LightYellow
Definition: color.hpp:487
static const color DarkOliveGreen3
Definition: color.hpp:131
static const color PaleVioletRed
Definition: color.hpp:568
static const color Gray95
Definition: color.hpp:293
static const color Grey55
Definition: color.hpp:357
static const color Tan1
Definition: color.hpp:665
static const color Gray24
Definition: color.hpp:215
static const color Pink
Definition: color.hpp:580
component blue() const
static const color Salmon
Definition: color.hpp:612
#define declare_enum_string(enumName, enumEnumerator)
Definition: i_enum.hpp:50
static const color Aquamarine4
Definition: color.hpp:55
static const color Gray75
Definition: color.hpp:271
static const color Plum2
Definition: color.hpp:587
static const color SkyBlue1
Definition: color.hpp:634
static const color DarkSeaGreen3
Definition: color.hpp:148
static const color Gray86
Definition: color.hpp:283
static const color Firebrick2
Definition: color.hpp:179
static const color DeepSkyBlue2
Definition: color.hpp:167
static const color Gray87
Definition: color.hpp:284
static const color Grey88
Definition: color.hpp:393
static const color SkyBlue
Definition: color.hpp:633
color with_lightness(double aLightness) const
static const color LavenderBlush3
Definition: color.hpp:435
static const color Goldenrod
Definition: color.hpp:191
static const color Gray71
Definition: color.hpp:267
static const color Gray36
Definition: color.hpp:228
static const color Gray79
Definition: color.hpp:275
static const color IndianRed1
Definition: color.hpp:417
static const color Burlywood3
Definition: color.hpp:83
static const color VioletRed
Definition: color.hpp:685
static const color Cornsilk2
Definition: color.hpp:108
static const color VioletRed4
Definition: color.hpp:689
static const color LightSkyBlue
Definition: color.hpp:474
static const color Gray92
Definition: color.hpp:290
gradient_size
Definition: color.hpp:868
static const color Grey41
Definition: color.hpp:342
static const color RoyalBlue2
Definition: color.hpp:608
static const color MediumOrchid
Definition: color.hpp:506
static const color Grey63
Definition: color.hpp:366
color with_green(component aNewValue) const
static const color MediumPurple2
Definition: color.hpp:513
static const color DarkGoldenrod
Definition: color.hpp:118
component alpha() const
static const color Gray48
Definition: color.hpp:241
static const color PaleTurquoise
Definition: color.hpp:563
static const color Grey53
Definition: color.hpp:355
static const color Gray42
Definition: color.hpp:235
static const color PeachPuff4
Definition: color.hpp:578
static const color LightCyan
Definition: color.hpp:449
static const color Seashell4
Definition: color.hpp:627
static const color Salmon1
Definition: color.hpp:613
static const color Green1
Definition: color.hpp:299
static const color MediumPurple3
Definition: color.hpp:514
static const color MediumAquamarine
Definition: color.hpp:504
color operator~() const
static const color Sienna
Definition: color.hpp:628
static const color Gray56
Definition: color.hpp:250
static const color Gray25
Definition: color.hpp:216
static const color Gray51
Definition: color.hpp:245
static const color NavyBlue
Definition: color.hpp:535
static const color Blue4
Definition: color.hpp:73
static const color MintCream
Definition: color.hpp:522
static const color Grey19
Definition: color.hpp:317
static const color Gray60
Definition: color.hpp:255
static const color AntiqueWhite
Definition: color.hpp:46
static const color Gray84
Definition: color.hpp:281
static const color Gray38
Definition: color.hpp:230
static const color Grey60
Definition: color.hpp:363
static const color Gold2
Definition: color.hpp:188
static const color DarkBlue
Definition: color.hpp:116
static const color Snow2
Definition: color.hpp:651
static const color LightSlateGrey
Definition: color.hpp:481
static const color SpringGreen4
Definition: color.hpp:658
static const color Grey89
Definition: color.hpp:394
static const color Grey23
Definition: color.hpp:322
static const color Turquoise
Definition: color.hpp:679
static const color DarkOrchid1
Definition: color.hpp:139
static const color Gray55
Definition: color.hpp:249
static const color Purple
Definition: color.hpp:591
static const color DarkGoldenrod1
Definition: color.hpp:119
static const color SkyBlue3
Definition: color.hpp:636
static const color Red
Definition: color.hpp:596
static const color Honeydew3
Definition: color.hpp:409
color operator+(const color &aLeft, color::component aRight)
Definition: color.hpp:824
static const color Gray14
Definition: color.hpp:204
static const color Gray45
Definition: color.hpp:238
static const color PaleGreen4
Definition: color.hpp:562
static const color Coral
Definition: color.hpp:100
static const color Grey100
Definition: color.hpp:308
static const color Brown
Definition: color.hpp:75
static const color White
Definition: color.hpp:695
static const color PaleGreen1
Definition: color.hpp:559
static const color LightBlue3
Definition: color.hpp:446
static const color LightSkyBlue1
Definition: color.hpp:475
static const color LemonChiffon1
Definition: color.hpp:439
static const color Gray18
Definition: color.hpp:208
static const color DarkGreen
Definition: color.hpp:124
static const color MistyRose4
Definition: color.hpp:527
static const color Cornsilk4
Definition: color.hpp:110
static const color Blue1
Definition: color.hpp:70
static const color DodgerBlue4
Definition: color.hpp:176
static const color Chartreuse3
Definition: color.hpp:93
static const color OliveDrab1
Definition: color.hpp:538
static const color Gray67
Definition: color.hpp:262
static const color Gray17
Definition: color.hpp:207
static const color LavenderBlush4
Definition: color.hpp:436
static const color Tomato
Definition: color.hpp:674
static const color RoyalBlue1
Definition: color.hpp:607
static const color Bisque1
Definition: color.hpp:63
color & set_green(component aNewValue)
static const color LightSlateBlue
Definition: color.hpp:479
static const color LightPink2
Definition: color.hpp:465
static const color Gray31
Definition: color.hpp:223
static const color Grey65
Definition: color.hpp:368
static const color Red4
Definition: color.hpp:600
static const color Gray99
Definition: color.hpp:297
static const color MediumSlateBlue
Definition: color.hpp:517
static const color Firebrick4
Definition: color.hpp:181
static const color Grey26
Definition: color.hpp:325
static const color Coral3
Definition: color.hpp:103
static const color Firebrick1
Definition: color.hpp:178
static const color Salmon2
Definition: color.hpp:614
static const color Honeydew1
Definition: color.hpp:407
static const color Grey31
Definition: color.hpp:331
static const color Grey78
Definition: color.hpp:382
static const color Thistle2
Definition: color.hpp:671
static const color Turquoise1
Definition: color.hpp:680
static const color LemonChiffon3
Definition: color.hpp:441
static const color Gray66
Definition: color.hpp:261
static const color Gray62
Definition: color.hpp:257
static const color Gray98
Definition: color.hpp:296
static const color LightSalmon
Definition: color.hpp:468
static const color Gray59
Definition: color.hpp:253
std::vector< alpha_stop > alpha_stop_list
Definition: color.hpp:916
static const color LightCyan4
Definition: color.hpp:453
static const color MediumVioletRed
Definition: color.hpp:520
static const color Gray73
Definition: color.hpp:269
static const color DarkSeaGreen
Definition: color.hpp:145
color & operator=(const color &aOther)
static const color Gray6
Definition: color.hpp:254
static const color DeepPink3
Definition: color.hpp:163
static const color Grey91
Definition: color.hpp:397
static const color Aquamarine2
Definition: color.hpp:53
static const color DeepSkyBlue
Definition: color.hpp:165
static const color Grey30
Definition: color.hpp:330
static const color SlateBlue3
Definition: color.hpp:641
static const color Maroon2
Definition: color.hpp:501
static const color Gray21
Definition: color.hpp:212
static const color Thistle4
Definition: color.hpp:673
static const color SteelBlue1
Definition: color.hpp:660
static const color Grey86
Definition: color.hpp:391
static const color NavajoWhite2
Definition: color.hpp:531
static const color Grey82
Definition: color.hpp:387
static const color Blue
Definition: color.hpp:69
static const color HotPink2
Definition: color.hpp:413
static const color Grey9
Definition: color.hpp:395
static const color SlateBlue1
Definition: color.hpp:639
static const color Gray53
Definition: color.hpp:247
static const color DarkOrchid2
Definition: color.hpp:140
static const color Grey1
Definition: color.hpp:306
static const color DarkSalmon
Definition: color.hpp:144
static const color Gray37
Definition: color.hpp:229
static const color DarkOrange1
Definition: color.hpp:134
static const color PaleTurquoise4
Definition: color.hpp:567
static const color GreenYellow
Definition: color.hpp:303
static const color MediumBlue
Definition: color.hpp:505
static const color Orchid4
Definition: color.hpp:556
static const color Turquoise4
Definition: color.hpp:683
static const color CadetBlue2
Definition: color.hpp:87
static const color IndianRed2
Definition: color.hpp:418
static const color LightBlue1
Definition: color.hpp:444
static const color AntiqueWhite4
Definition: color.hpp:50
static const color Azure1
Definition: color.hpp:57
static const color LightGoldenrod4
Definition: color.hpp:458
static const color PaleGreen3
Definition: color.hpp:561
static const color PowderBlue
Definition: color.hpp:590
static const color Grey90
Definition: color.hpp:396
static const color VioletRed1
Definition: color.hpp:686
static const color LightGoldenrod1
Definition: color.hpp:455
static const color Chartreuse2
Definition: color.hpp:92
static const color DarkGrey
Definition: color.hpp:125
static const color OldLace
Definition: color.hpp:536
static const color LightSeaGreen
Definition: color.hpp:473
static const color Gray15
Definition: color.hpp:205
static const color Gray100
Definition: color.hpp:200
static const color Green
Definition: color.hpp:298
static const color LightCyan1
Definition: color.hpp:450
static const color Grey74
Definition: color.hpp:378
static const color Coral1
Definition: color.hpp:101
static const color Gray68
Definition: color.hpp:263
static const color MediumOrchid4
Definition: color.hpp:510
std::string to_string() const
static const color LightGoldenrod2
Definition: color.hpp:456
static const color RoyalBlue4
Definition: color.hpp:610
color with_alpha(T aAlpha, std::enable_if_t< std::is_integral_v< T >, sfinae >={}) const
Definition: color.hpp:776
static const color Navy
Definition: color.hpp:534
static const color Chocolate4
Definition: color.hpp:99
static const color Chartreuse1
Definition: color.hpp:91
vec4f to_vec4f() const
static const color Lavender
Definition: color.hpp:431
static const color LightGoldenrodYellow
Definition: color.hpp:459
static const color DeepPink1
Definition: color.hpp:161
static const color SteelBlue4
Definition: color.hpp:663
static const color Grey0
Definition: color.hpp:305
static const color Gray20
Definition: color.hpp:211
static const color Ivory4
Definition: color.hpp:425
static const color Tan
Definition: color.hpp:664
static const color Orchid3
Definition: color.hpp:555
static const color OrangeRed2
Definition: color.hpp:549
static const color Grey50
Definition: color.hpp:352
static const color Gray65
Definition: color.hpp:260
static const color LightSlateGray
Definition: color.hpp:480
static const color DarkSlateGray
Definition: color.hpp:151
static const color MediumSpringGreen
Definition: color.hpp:518
static const color PaleGreen2
Definition: color.hpp:560
static const color MediumTurquoise
Definition: color.hpp:519
static const color DarkSlateGray3
Definition: color.hpp:154
static const color SlateGray2
Definition: color.hpp:645
gradient_shape
Definition: color.hpp:862
static const color OrangeRed1
Definition: color.hpp:548
static const color DarkSlateBlue
Definition: color.hpp:150
std::optional< color_or_gradient > optional_color_or_gradient
Definition: color.hpp:1025
static const color Grey59
Definition: color.hpp:361
static const color Yellow3
Definition: color.hpp:700
static const color Wheat3
Definition: color.hpp:693
static const color Magenta3
Definition: color.hpp:497
static const color CadetBlue3
Definition: color.hpp:88
static const color LightGoldenrod
Definition: color.hpp:454
static const color Grey70
Definition: color.hpp:374
static const color LimeGreen
Definition: color.hpp:492
static const color DarkRed
Definition: color.hpp:143
static const color Gray58
Definition: color.hpp:252
static const color Green4
Definition: color.hpp:302
static const color Gray8
Definition: color.hpp:276
static const color Gray46
Definition: color.hpp:239
static const color Orange3
Definition: color.hpp:545
static const color Maroon3
Definition: color.hpp:502
static const color LightGreen
Definition: color.hpp:461
static const color Tan2
Definition: color.hpp:666
static const color SlateGray3
Definition: color.hpp:646
static const color Chartreuse
Definition: color.hpp:90
static const color PaleTurquoise2
Definition: color.hpp:565
static const color SeaGreen2
Definition: color.hpp:620
static const color OrangeRed
Definition: color.hpp:547
static const color Orchid
Definition: color.hpp:552
static const color Turquoise3
Definition: color.hpp:682
static const color Grey11
Definition: color.hpp:309
color & darken(component aDelta)
static const color Grey15
Definition: color.hpp:313
std::optional< gradient > optional_gradient
Definition: color.hpp:1022
static const color Grey43
Definition: color.hpp:344
static const color PeachPuff1
Definition: color.hpp:575
static const color Grey40
Definition: color.hpp:341
static const color LightPink
Definition: color.hpp:463
static const color Grey39
Definition: color.hpp:339
hsv_color to_hsv() const
static const color PaleVioletRed3
Definition: color.hpp:571
static const color Yellow1
Definition: color.hpp:698
static const color RoyalBlue
Definition: color.hpp:606
color same_lightness_as(const color &aOther) const
static const color Moccasin
Definition: color.hpp:528
static const color Grey83
Definition: color.hpp:388
static const color Pink2
Definition: color.hpp:582
static const color Grey46
Definition: color.hpp:347
static const color Gray29
Definition: color.hpp:220
static const color Firebrick
Definition: color.hpp:177
static const color Red2
Definition: color.hpp:598
static const color MidnightBlue
Definition: color.hpp:521
static const color Magenta4
Definition: color.hpp:498
static const color DarkOliveGreen1
Definition: color.hpp:129
static const color Green2
Definition: color.hpp:300
static const color Brown4
Definition: color.hpp:79
static const color HotPink4
Definition: color.hpp:415
static const color LawnGreen
Definition: color.hpp:437
color & set_red(component aNewValue)
static const color DarkSeaGreen1
Definition: color.hpp:146
static const color Gray54
Definition: color.hpp:248
static const color NavajoWhite3
Definition: color.hpp:532
static const color Gray74
Definition: color.hpp:270
color(T aRed, T aGreen, T aBlue, T aAlpha=static_cast< T >(1.0), std::enable_if_t< std::is_same_v< T, double >, sfinae >={})
Definition: color.hpp:726
bool light(double aThreshold=0.50) const
static const color Gray72
Definition: color.hpp:268
static const color Chocolate2
Definition: color.hpp:97
static const color Gray12
Definition: color.hpp:202
static const color SaddleBrown
Definition: color.hpp:611
static const color DeepPink4
Definition: color.hpp:164
static const color SeaGreen
Definition: color.hpp:618
static const color DarkOliveGreen
Definition: color.hpp:128
static const color Gray0
Definition: color.hpp:197
static const color LavenderBlush
Definition: color.hpp:432
std::pair< double, color::component > alpha_stop
Definition: color.hpp:915
static const color Brown3
Definition: color.hpp:78
static const color DarkSlateGrey
Definition: color.hpp:156
static const color Tan4
Definition: color.hpp:668
static const color Burlywood1
Definition: color.hpp:81
static const color Gray64
Definition: color.hpp:259
static const color Grey45
Definition: color.hpp:346
color operator-(const color &aLeft, color::component aRight)
Definition: color.hpp:831
static const color LavenderBlush2
Definition: color.hpp:434
static const color Brown2
Definition: color.hpp:77
static const color SlateGrey
Definition: color.hpp:648
static const color Gold
Definition: color.hpp:186
static const color LightSteelBlue
Definition: color.hpp:482
static const color Orchid1
Definition: color.hpp:553
static const color CadetBlue4
Definition: color.hpp:89
static const color IndianRed3
Definition: color.hpp:419
static const color RosyBrown4
Definition: color.hpp:605
static const color Sienna2
Definition: color.hpp:630
static const color Chocolate1
Definition: color.hpp:96
T alpha() const
Definition: color.hpp:753
static const color MediumPurple1
Definition: color.hpp:512
static const color Aquamarine1
Definition: color.hpp:52
bool operator<(const color &aOther) const
static const color SeaGreen1
Definition: color.hpp:619
static const color SteelBlue
Definition: color.hpp:659
static const color Violet
Definition: color.hpp:684
static const color Grey16
Definition: color.hpp:314
static const color Peru
Definition: color.hpp:579
static const color Salmon4
Definition: color.hpp:616
static const color Grey93
Definition: color.hpp:399
static const color Gainsboro
Definition: color.hpp:184
static const color Gray1
Definition: color.hpp:198
std::optional< point > optional_point
static const color Khaki1
Definition: color.hpp:427
static const color LightSteelBlue4
Definition: color.hpp:486
static const color RosyBrown2
Definition: color.hpp:603
static const color NavajoWhite
Definition: color.hpp:529
static const color Sienna1
Definition: color.hpp:629
static const color Grey29
Definition: color.hpp:328
vec4 to_vec4() const
static const color DarkOrchid
Definition: color.hpp:138
static const color SlateBlue2
Definition: color.hpp:640
static const color Tomato3
Definition: color.hpp:677
static const color NavajoWhite1
Definition: color.hpp:530
static const color GhostWhite
Definition: color.hpp:185
static const color Honeydew
Definition: color.hpp:406
static const color DarkSlateGray4
Definition: color.hpp:155
static const color DebianRed
Definition: color.hpp:159
static const color Sienna3
Definition: color.hpp:631
static color from_hsv(double aHue, double aSaturation, double aValue, double aAlpha=1.0)
static const color Grey21
Definition: color.hpp:320
static const color DarkMagenta
Definition: color.hpp:127
static const color DarkGoldenrod4
Definition: color.hpp:122
static const color Gray22
Definition: color.hpp:213
static const color SpringGreen2
Definition: color.hpp:656
static const color LightSalmon4
Definition: color.hpp:472
static const color Grey52
Definition: color.hpp:354
static const color LightYellow2
Definition: color.hpp:489
static const color MediumOrchid2
Definition: color.hpp:508