1 /********************************************************************************
2 *                                                                               *
3 *                      C o l o r   N a m e   F u n c t i o n s                  *
4 *                                                                               *
5 *********************************************************************************
6 * Copyright (C) 1997,2020 by Jeroen van der Zijp.   All Rights Reserved.        *
7 *********************************************************************************
8 * This library is free software; you can redistribute it and/or modify          *
9 * it under the terms of the GNU Lesser General Public License as published by   *
10 * the Free Software Foundation; either version 3 of the License, or             *
11 * (at your option) any later version.                                           *
12 *                                                                               *
13 * This library is distributed in the hope that it will be useful,               *
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of                *
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                 *
16 * GNU Lesser General Public License for more details.                           *
17 *                                                                               *
18 * You should have received a copy of the GNU Lesser General Public License      *
19 * along with this program.  If not, see <http://www.gnu.org/licenses/>          *
20 ********************************************************************************/
21 #include "xincs.h"
22 #include "fxver.h"
23 #include "fxdefs.h"
24 #include "fxmath.h"
25 #include "fxkeys.h"
26 #include "fxascii.h"
27 #include "FXArray.h"
28 #include "FXHash.h"
29 #include "FXStream.h"
30 #include "FXString.h"
31 #include "FXColors.h"
32 
33 /*
34   Notes:
35 
36   - Color constants inside FXColors namespace so as to avoid potential name clashes
37     in application code.
38   - Added color name to FXString and vice versa.  Is more convenient.
39   - API of nameFromColor() is not safe; would prefer to pass size parameter.
40   - The old color named "None" was renamed to "Clear".  X11 defines a preprocessor
41     constant called None and namespaces can't protect against #defines [one more
42     reason we like C++].
43   - At some point, we would like faster color -> name mapping [name -> color is
44     OK, its a binary search].
45 */
46 
47 #define MAXCOLORNAME 24
48 
49 
50 using namespace FX;
51 
52 /*******************************************************************************/
53 
54 namespace FX {
55 
56 // Names of commonly used colors
57 const FXchar *const colorName[683]={
58   "AliceBlue",
59   "AntiqueWhite",
60   "AntiqueWhite1",
61   "AntiqueWhite2",
62   "AntiqueWhite3",
63   "AntiqueWhite4",
64   "Aqua",
65   "Aquamarine",
66   "Aquamarine1",
67   "Aquamarine2",
68   "Aquamarine3",
69   "Aquamarine4",
70   "Azure",
71   "Azure1",
72   "Azure2",
73   "Azure3",
74   "Azure4",
75   "Banana",
76   "Beige",
77   "Bisque",
78   "Bisque1",
79   "Bisque2",
80   "Bisque3",
81   "Bisque4",
82   "Black",
83   "BlanchedAlmond",
84   "Blue",
85   "Blue1",
86   "Blue2",
87   "Blue3",
88   "Blue4",
89   "BlueViolet",
90   "Brick",
91   "Brown",
92   "Brown1",
93   "Brown2",
94   "Brown3",
95   "Brown4",
96   "Burlywood",
97   "Burlywood1",
98   "Burlywood2",
99   "Burlywood3",
100   "Burlywood4",
101   "BurnedSienna",
102   "BurnedUmber",
103   "CadetBlue",
104   "CadetBlue1",
105   "CadetBlue2",
106   "CadetBlue3",
107   "CadetBlue4",
108   "CadmiumOrange",
109   "CadmiumRed",
110   "CadmiumYellow",
111   "Carrot",
112   "Chartreuse",
113   "Chartreuse1",
114   "Chartreuse2",
115   "Chartreuse3",
116   "Chartreuse4",
117   "Chocolate",
118   "Chocolate1",
119   "Chocolate2",
120   "Chocolate3",
121   "Chocolate4",
122   "Cobalt",
123   "CobaltGreen",
124   "ColdGrey",
125   "Coral",
126   "Coral1",
127   "Coral2",
128   "Coral3",
129   "Coral4",
130   "CornflowerBlue",
131   "Cornsilk",
132   "Cornsilk1",
133   "Cornsilk2",
134   "Cornsilk3",
135   "Cornsilk4",
136   "Crimson",
137   "Cyan",
138   "Cyan1",
139   "Cyan2",
140   "Cyan3",
141   "Cyan4",
142   "DarkBlue",
143   "DarkCyan",
144   "DarkGoldenrod",
145   "DarkGoldenrod1",
146   "DarkGoldenrod2",
147   "DarkGoldenrod3",
148   "DarkGoldenrod4",
149   "DarkGray",
150   "DarkGreen",
151   "DarkGrey",
152   "DarkKhaki",
153   "DarkMagenta",
154   "DarkOliveGreen",
155   "DarkOliveGreen1",
156   "DarkOliveGreen2",
157   "DarkOliveGreen3",
158   "DarkOliveGreen4",
159   "DarkOrange",
160   "DarkOrange1",
161   "DarkOrange2",
162   "DarkOrange3",
163   "DarkOrange4",
164   "DarkOrchid",
165   "DarkOrchid1",
166   "DarkOrchid2",
167   "DarkOrchid3",
168   "DarkOrchid4",
169   "DarkRed",
170   "DarkSalmon",
171   "DarkSeaGreen",
172   "DarkSeaGreen1",
173   "DarkSeaGreen2",
174   "DarkSeaGreen3",
175   "DarkSeaGreen4",
176   "DarkSlateBlue",
177   "DarkSlateGray",
178   "DarkSlateGray1",
179   "DarkSlateGray2",
180   "DarkSlateGray3",
181   "DarkSlateGray4",
182   "DarkSlateGrey",
183   "DarkTurquoise",
184   "DarkViolet",
185   "DeepPink",
186   "DeepPink1",
187   "DeepPink2",
188   "DeepPink3",
189   "DeepPink4",
190   "DeepSkyBlue",
191   "DeepSkyBlue1",
192   "DeepSkyBlue2",
193   "DeepSkyBlue3",
194   "DeepSkyBlue4",
195   "DimGray",
196   "DimGrey",
197   "DodgerBlue",
198   "DodgerBlue1",
199   "DodgerBlue2",
200   "DodgerBlue3",
201   "DodgerBlue4",
202   "Eggshell",
203   "EmeraldGreen",
204   "Firebrick",
205   "Firebrick1",
206   "Firebrick2",
207   "Firebrick3",
208   "Firebrick4",
209   "FloralWhite",
210   "ForestGreen",
211   "Fuchsia",
212   "Gainsboro",
213   "GhostWhite",
214   "Gold",
215   "Gold1",
216   "Gold2",
217   "Gold3",
218   "Gold4",
219   "Goldenrod",
220   "Goldenrod1",
221   "Goldenrod2",
222   "Goldenrod3",
223   "Goldenrod4",
224   "Gray",
225   "Gray0",
226   "Gray1",
227   "Gray10",
228   "Gray100",
229   "Gray11",
230   "Gray12",
231   "Gray13",
232   "Gray14",
233   "Gray15",
234   "Gray16",
235   "Gray17",
236   "Gray18",
237   "Gray19",
238   "Gray2",
239   "Gray20",
240   "Gray21",
241   "Gray22",
242   "Gray23",
243   "Gray24",
244   "Gray25",
245   "Gray26",
246   "Gray27",
247   "Gray28",
248   "Gray29",
249   "Gray3",
250   "Gray30",
251   "Gray31",
252   "Gray32",
253   "Gray33",
254   "Gray34",
255   "Gray35",
256   "Gray36",
257   "Gray37",
258   "Gray38",
259   "Gray39",
260   "Gray4",
261   "Gray40",
262   "Gray41",
263   "Gray42",
264   "Gray43",
265   "Gray44",
266   "Gray45",
267   "Gray46",
268   "Gray47",
269   "Gray48",
270   "Gray49",
271   "Gray5",
272   "Gray50",
273   "Gray51",
274   "Gray52",
275   "Gray53",
276   "Gray54",
277   "Gray55",
278   "Gray56",
279   "Gray57",
280   "Gray58",
281   "Gray59",
282   "Gray6",
283   "Gray60",
284   "Gray61",
285   "Gray62",
286   "Gray63",
287   "Gray64",
288   "Gray65",
289   "Gray66",
290   "Gray67",
291   "Gray68",
292   "Gray69",
293   "Gray7",
294   "Gray70",
295   "Gray71",
296   "Gray72",
297   "Gray73",
298   "Gray74",
299   "Gray75",
300   "Gray76",
301   "Gray77",
302   "Gray78",
303   "Gray79",
304   "Gray8",
305   "Gray80",
306   "Gray81",
307   "Gray82",
308   "Gray83",
309   "Gray84",
310   "Gray85",
311   "Gray86",
312   "Gray87",
313   "Gray88",
314   "Gray89",
315   "Gray9",
316   "Gray90",
317   "Gray91",
318   "Gray92",
319   "Gray93",
320   "Gray94",
321   "Gray95",
322   "Gray96",
323   "Gray97",
324   "Gray98",
325   "Gray99",
326   "Green",
327   "Green1",
328   "Green2",
329   "Green3",
330   "Green4",
331   "GreenYellow",
332   "Grey",
333   "Grey0",
334   "Grey1",
335   "Grey10",
336   "Grey100",
337   "Grey11",
338   "Grey12",
339   "Grey13",
340   "Grey14",
341   "Grey15",
342   "Grey16",
343   "Grey17",
344   "Grey18",
345   "Grey19",
346   "Grey2",
347   "Grey20",
348   "Grey21",
349   "Grey22",
350   "Grey23",
351   "Grey24",
352   "Grey25",
353   "Grey26",
354   "Grey27",
355   "Grey28",
356   "Grey29",
357   "Grey3",
358   "Grey30",
359   "Grey31",
360   "Grey32",
361   "Grey33",
362   "Grey34",
363   "Grey35",
364   "Grey36",
365   "Grey37",
366   "Grey38",
367   "Grey39",
368   "Grey4",
369   "Grey40",
370   "Grey41",
371   "Grey42",
372   "Grey43",
373   "Grey44",
374   "Grey45",
375   "Grey46",
376   "Grey47",
377   "Grey48",
378   "Grey49",
379   "Grey5",
380   "Grey50",
381   "Grey51",
382   "Grey52",
383   "Grey53",
384   "Grey54",
385   "Grey55",
386   "Grey56",
387   "Grey57",
388   "Grey58",
389   "Grey59",
390   "Grey6",
391   "Grey60",
392   "Grey61",
393   "Grey62",
394   "Grey63",
395   "Grey64",
396   "Grey65",
397   "Grey66",
398   "Grey67",
399   "Grey68",
400   "Grey69",
401   "Grey7",
402   "Grey70",
403   "Grey71",
404   "Grey72",
405   "Grey73",
406   "Grey74",
407   "Grey75",
408   "Grey76",
409   "Grey77",
410   "Grey78",
411   "Grey79",
412   "Grey8",
413   "Grey80",
414   "Grey81",
415   "Grey82",
416   "Grey83",
417   "Grey84",
418   "Grey85",
419   "Grey86",
420   "Grey87",
421   "Grey88",
422   "Grey89",
423   "Grey9",
424   "Grey90",
425   "Grey91",
426   "Grey92",
427   "Grey93",
428   "Grey94",
429   "Grey95",
430   "Grey96",
431   "Grey97",
432   "Grey98",
433   "Grey99",
434   "Honeydew",
435   "Honeydew1",
436   "Honeydew2",
437   "Honeydew3",
438   "Honeydew4",
439   "HotPink",
440   "HotPink1",
441   "HotPink2",
442   "HotPink3",
443   "HotPink4",
444   "IndianRed",
445   "IndianRed1",
446   "IndianRed2",
447   "IndianRed3",
448   "IndianRed4",
449   "Indigo",
450   "Ivory",
451   "Ivory1",
452   "Ivory2",
453   "Ivory3",
454   "Ivory4",
455   "Khaki",
456   "Khaki1",
457   "Khaki2",
458   "Khaki3",
459   "Khaki4",
460   "Lavender",
461   "LavenderBlush",
462   "LavenderBlush1",
463   "LavenderBlush2",
464   "LavenderBlush3",
465   "LavenderBlush4",
466   "LawnGreen",
467   "LemonChiffon",
468   "LemonChiffon1",
469   "LemonChiffon2",
470   "LemonChiffon3",
471   "LemonChiffon4",
472   "LightBlue",
473   "LightBlue1",
474   "LightBlue2",
475   "LightBlue3",
476   "LightBlue4",
477   "LightCoral",
478   "LightCyan",
479   "LightCyan1",
480   "LightCyan2",
481   "LightCyan3",
482   "LightCyan4",
483   "LightGoldenrod",
484   "LightGoldenrod1",
485   "LightGoldenrod2",
486   "LightGoldenrod3",
487   "LightGoldenrod4",
488   "LightGoldenrodYellow",
489   "LightGray",
490   "LightGreen",
491   "LightGrey",
492   "LightPink",
493   "LightPink1",
494   "LightPink2",
495   "LightPink3",
496   "LightPink4",
497   "LightSalmon",
498   "LightSalmon1",
499   "LightSalmon2",
500   "LightSalmon3",
501   "LightSalmon4",
502   "LightSeaGreen",
503   "LightSkyBlue",
504   "LightSkyBlue1",
505   "LightSkyBlue2",
506   "LightSkyBlue3",
507   "LightSkyBlue4",
508   "LightSlateBlue",
509   "LightSlateGray",
510   "LightSlateGrey",
511   "LightSteelBlue",
512   "LightSteelBlue1",
513   "LightSteelBlue2",
514   "LightSteelBlue3",
515   "LightSteelBlue4",
516   "LightYellow",
517   "LightYellow1",
518   "LightYellow2",
519   "LightYellow3",
520   "LightYellow4",
521   "Lime",
522   "LimeGreen",
523   "Linen",
524   "Magenta",
525   "Magenta1",
526   "Magenta2",
527   "Magenta3",
528   "Magenta4",
529   "Maroon",
530   "Maroon1",
531   "Maroon2",
532   "Maroon3",
533   "Maroon4",
534   "MediumAquamarine",
535   "MediumBlue",
536   "MediumOrchid",
537   "MediumOrchid1",
538   "MediumOrchid2",
539   "MediumOrchid3",
540   "MediumOrchid4",
541   "MediumPurple",
542   "MediumPurple1",
543   "MediumPurple2",
544   "MediumPurple3",
545   "MediumPurple4",
546   "MediumSeaGreen",
547   "MediumSlateBlue",
548   "MediumSpringGreen",
549   "MediumTurquoise",
550   "MediumVioletRed",
551   "MidnightBlue",
552   "MintCream",
553   "MistyRose",
554   "MistyRose1",
555   "MistyRose2",
556   "MistyRose3",
557   "MistyRose4",
558   "Moccasin",
559   "NavajoWhite",
560   "NavajoWhite1",
561   "NavajoWhite2",
562   "NavajoWhite3",
563   "NavajoWhite4",
564   "Navy",
565   "NavyBlue",
566   "None",
567   "OldLace",
568   "Olive",
569   "OliveDrab",
570   "OliveDrab1",
571   "OliveDrab2",
572   "OliveDrab3",
573   "OliveDrab4",
574   "Orange",
575   "Orange1",
576   "Orange2",
577   "Orange3",
578   "Orange4",
579   "OrangeRed",
580   "OrangeRed1",
581   "OrangeRed2",
582   "OrangeRed3",
583   "OrangeRed4",
584   "Orchid",
585   "Orchid1",
586   "Orchid2",
587   "Orchid3",
588   "Orchid4",
589   "PaleGoldenrod",
590   "PaleGreen",
591   "PaleGreen1",
592   "PaleGreen2",
593   "PaleGreen3",
594   "PaleGreen4",
595   "PaleTurquoise",
596   "PaleTurquoise1",
597   "PaleTurquoise2",
598   "PaleTurquoise3",
599   "PaleTurquoise4",
600   "PaleVioletRed",
601   "PaleVioletRed1",
602   "PaleVioletRed2",
603   "PaleVioletRed3",
604   "PaleVioletRed4",
605   "PapayaWhip",
606   "PeachPuff",
607   "PeachPuff1",
608   "PeachPuff2",
609   "PeachPuff3",
610   "PeachPuff4",
611   "Peru",
612   "Pink",
613   "Pink1",
614   "Pink2",
615   "Pink3",
616   "Pink4",
617   "Plum",
618   "Plum1",
619   "Plum2",
620   "Plum3",
621   "Plum4",
622   "PowderBlue",
623   "Purple",
624   "Purple1",
625   "Purple2",
626   "Purple3",
627   "Purple4",
628   "Raspberry",
629   "Red",
630   "Red1",
631   "Red2",
632   "Red3",
633   "Red4",
634   "RosyBrown",
635   "RosyBrown1",
636   "RosyBrown2",
637   "RosyBrown3",
638   "RosyBrown4",
639   "RoyalBlue",
640   "RoyalBlue1",
641   "RoyalBlue2",
642   "RoyalBlue3",
643   "RoyalBlue4",
644   "SaddleBrown",
645   "Salmon",
646   "Salmon1",
647   "Salmon2",
648   "Salmon3",
649   "Salmon4",
650   "SandyBrown",
651   "SeaGreen",
652   "SeaGreen1",
653   "SeaGreen2",
654   "SeaGreen3",
655   "SeaGreen4",
656   "Seashell",
657   "Seashell1",
658   "Seashell2",
659   "Seashell3",
660   "Seashell4",
661   "Sepia",
662   "Sienna",
663   "Sienna1",
664   "Sienna2",
665   "Sienna3",
666   "Sienna4",
667   "Silver",
668   "SkyBlue",
669   "SkyBlue1",
670   "SkyBlue2",
671   "SkyBlue3",
672   "SkyBlue4",
673   "SlateBlue",
674   "SlateBlue1",
675   "SlateBlue2",
676   "SlateBlue3",
677   "SlateBlue4",
678   "SlateGray",
679   "SlateGray1",
680   "SlateGray2",
681   "SlateGray3",
682   "SlateGray4",
683   "SlateGrey",
684   "Snow",
685   "Snow1",
686   "Snow2",
687   "Snow3",
688   "Snow4",
689   "SpringGreen",
690   "SpringGreen1",
691   "SpringGreen2",
692   "SpringGreen3",
693   "SpringGreen4",
694   "SteelBlue",
695   "SteelBlue1",
696   "SteelBlue2",
697   "SteelBlue3",
698   "SteelBlue4",
699   "Tan",
700   "Tan1",
701   "Tan2",
702   "Tan3",
703   "Tan4",
704   "Teal",
705   "Thistle",
706   "Thistle1",
707   "Thistle2",
708   "Thistle3",
709   "Thistle4",
710   "Tomato",
711   "Tomato1",
712   "Tomato2",
713   "Tomato3",
714   "Tomato4",
715   "Turquoise",
716   "Turquoise1",
717   "Turquoise2",
718   "Turquoise3",
719   "Turquoise4",
720   "Ultramarine",
721   "Violet",
722   "VioletRed",
723   "VioletRed1",
724   "VioletRed2",
725   "VioletRed3",
726   "VioletRed4",
727   "WarmGrey",
728   "Wheat",
729   "Wheat1",
730   "Wheat2",
731   "Wheat3",
732   "Wheat4",
733   "White",
734   "WhiteSmoke",
735   "Yellow",
736   "Yellow1",
737   "Yellow2",
738   "Yellow3",
739   "Yellow4",
740   "YellowGreen",
741   };
742 
743 
744 // Values of corresponding colors
745 const FXColor colorValue[683]={
746   FXColors::AliceBlue,
747   FXColors::AntiqueWhite,
748   FXColors::AntiqueWhite1,
749   FXColors::AntiqueWhite2,
750   FXColors::AntiqueWhite3,
751   FXColors::AntiqueWhite4,
752   FXColors::Aqua,
753   FXColors::Aquamarine,
754   FXColors::Aquamarine1,
755   FXColors::Aquamarine2,
756   FXColors::Aquamarine3,
757   FXColors::Aquamarine4,
758   FXColors::Azure,
759   FXColors::Azure1,
760   FXColors::Azure2,
761   FXColors::Azure3,
762   FXColors::Azure4,
763   FXColors::Banana,
764   FXColors::Beige,
765   FXColors::Bisque,
766   FXColors::Bisque1,
767   FXColors::Bisque2,
768   FXColors::Bisque3,
769   FXColors::Bisque4,
770   FXColors::Black,
771   FXColors::BlanchedAlmond,
772   FXColors::Blue,
773   FXColors::Blue1,
774   FXColors::Blue2,
775   FXColors::Blue3,
776   FXColors::Blue4,
777   FXColors::BlueViolet,
778   FXColors::Brick,
779   FXColors::Brown,
780   FXColors::Brown1,
781   FXColors::Brown2,
782   FXColors::Brown3,
783   FXColors::Brown4,
784   FXColors::Burlywood,
785   FXColors::Burlywood1,
786   FXColors::Burlywood2,
787   FXColors::Burlywood3,
788   FXColors::Burlywood4,
789   FXColors::BurnedSienna,
790   FXColors::BurnedUmber,
791   FXColors::CadetBlue,
792   FXColors::CadetBlue1,
793   FXColors::CadetBlue2,
794   FXColors::CadetBlue3,
795   FXColors::CadetBlue4,
796   FXColors::CadmiumOrange,
797   FXColors::CadmiumRed,
798   FXColors::CadmiumYellow,
799   FXColors::Carrot,
800   FXColors::Chartreuse,
801   FXColors::Chartreuse1,
802   FXColors::Chartreuse2,
803   FXColors::Chartreuse3,
804   FXColors::Chartreuse4,
805   FXColors::Chocolate,
806   FXColors::Chocolate1,
807   FXColors::Chocolate2,
808   FXColors::Chocolate3,
809   FXColors::Chocolate4,
810   FXColors::Cobalt,
811   FXColors::CobaltGreen,
812   FXColors::ColdGray,
813   FXColors::Coral,
814   FXColors::Coral1,
815   FXColors::Coral2,
816   FXColors::Coral3,
817   FXColors::Coral4,
818   FXColors::CornflowerBlue,
819   FXColors::Cornsilk,
820   FXColors::Cornsilk1,
821   FXColors::Cornsilk2,
822   FXColors::Cornsilk3,
823   FXColors::Cornsilk4,
824   FXColors::Crimson,
825   FXColors::Cyan,
826   FXColors::Cyan1,
827   FXColors::Cyan2,
828   FXColors::Cyan3,
829   FXColors::Cyan4,
830   FXColors::DarkBlue,
831   FXColors::DarkCyan,
832   FXColors::DarkGoldenrod,
833   FXColors::DarkGoldenrod1,
834   FXColors::DarkGoldenrod2,
835   FXColors::DarkGoldenrod3,
836   FXColors::DarkGoldenrod4,
837   FXColors::DarkGray,
838   FXColors::DarkGreen,
839   FXColors::DarkGray,
840   FXColors::DarkKhaki,
841   FXColors::DarkMagenta,
842   FXColors::DarkOliveGreen,
843   FXColors::DarkOliveGreen1,
844   FXColors::DarkOliveGreen2,
845   FXColors::DarkOliveGreen3,
846   FXColors::DarkOliveGreen4,
847   FXColors::DarkOrange,
848   FXColors::DarkOrange1,
849   FXColors::DarkOrange2,
850   FXColors::DarkOrange3,
851   FXColors::DarkOrange4,
852   FXColors::DarkOrchid,
853   FXColors::DarkOrchid1,
854   FXColors::DarkOrchid2,
855   FXColors::DarkOrchid3,
856   FXColors::DarkOrchid4,
857   FXColors::DarkRed,
858   FXColors::DarkSalmon,
859   FXColors::DarkSeaGreen,
860   FXColors::DarkSeaGreen1,
861   FXColors::DarkSeaGreen2,
862   FXColors::DarkSeaGreen3,
863   FXColors::DarkSeaGreen4,
864   FXColors::DarkSlateBlue,
865   FXColors::DarkSlateGray,
866   FXColors::DarkSlateGray1,
867   FXColors::DarkSlateGray2,
868   FXColors::DarkSlateGray3,
869   FXColors::DarkSlateGray4,
870   FXColors::DarkSlateGray,
871   FXColors::DarkTurquoise,
872   FXColors::DarkViolet,
873   FXColors::DeepPink,
874   FXColors::DeepPink1,
875   FXColors::DeepPink2,
876   FXColors::DeepPink3,
877   FXColors::DeepPink4,
878   FXColors::DeepSkyBlue,
879   FXColors::DeepSkyBlue1,
880   FXColors::DeepSkyBlue2,
881   FXColors::DeepSkyBlue3,
882   FXColors::DeepSkyBlue4,
883   FXColors::DimGray,
884   FXColors::DimGray,
885   FXColors::DodgerBlue,
886   FXColors::DodgerBlue1,
887   FXColors::DodgerBlue2,
888   FXColors::DodgerBlue3,
889   FXColors::DodgerBlue4,
890   FXColors::Eggshell,
891   FXColors::EmeraldGreen,
892   FXColors::Firebrick,
893   FXColors::Firebrick1,
894   FXColors::Firebrick2,
895   FXColors::Firebrick3,
896   FXColors::Firebrick4,
897   FXColors::FloralWhite,
898   FXColors::ForestGreen,
899   FXColors::Fuchsia,
900   FXColors::Gainsboro,
901   FXColors::GhostWhite,
902   FXColors::Gold,
903   FXColors::Gold1,
904   FXColors::Gold2,
905   FXColors::Gold3,
906   FXColors::Gold4,
907   FXColors::Goldenrod,
908   FXColors::Goldenrod1,
909   FXColors::Goldenrod2,
910   FXColors::Goldenrod3,
911   FXColors::Goldenrod4,
912   FXColors::Gray,
913   FXColors::Gray0,
914   FXColors::Gray1,
915   FXColors::Gray10,
916   FXColors::Gray100,
917   FXColors::Gray11,
918   FXColors::Gray12,
919   FXColors::Gray13,
920   FXColors::Gray14,
921   FXColors::Gray15,
922   FXColors::Gray16,
923   FXColors::Gray17,
924   FXColors::Gray18,
925   FXColors::Gray19,
926   FXColors::Gray2,
927   FXColors::Gray20,
928   FXColors::Gray21,
929   FXColors::Gray22,
930   FXColors::Gray23,
931   FXColors::Gray24,
932   FXColors::Gray25,
933   FXColors::Gray26,
934   FXColors::Gray27,
935   FXColors::Gray28,
936   FXColors::Gray29,
937   FXColors::Gray3,
938   FXColors::Gray30,
939   FXColors::Gray31,
940   FXColors::Gray32,
941   FXColors::Gray33,
942   FXColors::Gray34,
943   FXColors::Gray35,
944   FXColors::Gray36,
945   FXColors::Gray37,
946   FXColors::Gray38,
947   FXColors::Gray39,
948   FXColors::Gray4,
949   FXColors::Gray40,
950   FXColors::Gray41,
951   FXColors::Gray42,
952   FXColors::Gray43,
953   FXColors::Gray44,
954   FXColors::Gray45,
955   FXColors::Gray46,
956   FXColors::Gray47,
957   FXColors::Gray48,
958   FXColors::Gray49,
959   FXColors::Gray5,
960   FXColors::Gray50,
961   FXColors::Gray51,
962   FXColors::Gray52,
963   FXColors::Gray53,
964   FXColors::Gray54,
965   FXColors::Gray55,
966   FXColors::Gray56,
967   FXColors::Gray57,
968   FXColors::Gray58,
969   FXColors::Gray59,
970   FXColors::Gray6,
971   FXColors::Gray60,
972   FXColors::Gray61,
973   FXColors::Gray62,
974   FXColors::Gray63,
975   FXColors::Gray64,
976   FXColors::Gray65,
977   FXColors::Gray66,
978   FXColors::Gray67,
979   FXColors::Gray68,
980   FXColors::Gray69,
981   FXColors::Gray7,
982   FXColors::Gray70,
983   FXColors::Gray71,
984   FXColors::Gray72,
985   FXColors::Gray73,
986   FXColors::Gray74,
987   FXColors::Gray75,
988   FXColors::Gray76,
989   FXColors::Gray77,
990   FXColors::Gray78,
991   FXColors::Gray79,
992   FXColors::Gray8,
993   FXColors::Gray80,
994   FXColors::Gray81,
995   FXColors::Gray82,
996   FXColors::Gray83,
997   FXColors::Gray84,
998   FXColors::Gray85,
999   FXColors::Gray86,
1000   FXColors::Gray87,
1001   FXColors::Gray88,
1002   FXColors::Gray89,
1003   FXColors::Gray9,
1004   FXColors::Gray90,
1005   FXColors::Gray91,
1006   FXColors::Gray92,
1007   FXColors::Gray93,
1008   FXColors::Gray94,
1009   FXColors::Gray95,
1010   FXColors::Gray96,
1011   FXColors::Gray97,
1012   FXColors::Gray98,
1013   FXColors::Gray99,
1014   FXColors::Green,
1015   FXColors::Green1,
1016   FXColors::Green2,
1017   FXColors::Green3,
1018   FXColors::Green4,
1019   FXColors::GreenYellow,
1020   FXColors::Gray,
1021   FXColors::Gray0,
1022   FXColors::Gray1,
1023   FXColors::Gray10,
1024   FXColors::Gray100,
1025   FXColors::Gray11,
1026   FXColors::Gray12,
1027   FXColors::Gray13,
1028   FXColors::Gray14,
1029   FXColors::Gray15,
1030   FXColors::Gray16,
1031   FXColors::Gray17,
1032   FXColors::Gray18,
1033   FXColors::Gray19,
1034   FXColors::Gray2,
1035   FXColors::Gray20,
1036   FXColors::Gray21,
1037   FXColors::Gray22,
1038   FXColors::Gray23,
1039   FXColors::Gray24,
1040   FXColors::Gray25,
1041   FXColors::Gray26,
1042   FXColors::Gray27,
1043   FXColors::Gray28,
1044   FXColors::Gray29,
1045   FXColors::Gray3,
1046   FXColors::Gray30,
1047   FXColors::Gray31,
1048   FXColors::Gray32,
1049   FXColors::Gray33,
1050   FXColors::Gray34,
1051   FXColors::Gray35,
1052   FXColors::Gray36,
1053   FXColors::Gray37,
1054   FXColors::Gray38,
1055   FXColors::Gray39,
1056   FXColors::Gray4,
1057   FXColors::Gray40,
1058   FXColors::Gray41,
1059   FXColors::Gray42,
1060   FXColors::Gray43,
1061   FXColors::Gray44,
1062   FXColors::Gray45,
1063   FXColors::Gray46,
1064   FXColors::Gray47,
1065   FXColors::Gray48,
1066   FXColors::Gray49,
1067   FXColors::Gray5,
1068   FXColors::Gray50,
1069   FXColors::Gray51,
1070   FXColors::Gray52,
1071   FXColors::Gray53,
1072   FXColors::Gray54,
1073   FXColors::Gray55,
1074   FXColors::Gray56,
1075   FXColors::Gray57,
1076   FXColors::Gray58,
1077   FXColors::Gray59,
1078   FXColors::Gray6,
1079   FXColors::Gray60,
1080   FXColors::Gray61,
1081   FXColors::Gray62,
1082   FXColors::Gray63,
1083   FXColors::Gray64,
1084   FXColors::Gray65,
1085   FXColors::Gray66,
1086   FXColors::Gray67,
1087   FXColors::Gray68,
1088   FXColors::Gray69,
1089   FXColors::Gray7,
1090   FXColors::Gray70,
1091   FXColors::Gray71,
1092   FXColors::Gray72,
1093   FXColors::Gray73,
1094   FXColors::Gray74,
1095   FXColors::Gray75,
1096   FXColors::Gray76,
1097   FXColors::Gray77,
1098   FXColors::Gray78,
1099   FXColors::Gray79,
1100   FXColors::Gray8,
1101   FXColors::Gray80,
1102   FXColors::Gray81,
1103   FXColors::Gray82,
1104   FXColors::Gray83,
1105   FXColors::Gray84,
1106   FXColors::Gray85,
1107   FXColors::Gray86,
1108   FXColors::Gray87,
1109   FXColors::Gray88,
1110   FXColors::Gray89,
1111   FXColors::Gray9,
1112   FXColors::Gray90,
1113   FXColors::Gray91,
1114   FXColors::Gray92,
1115   FXColors::Gray93,
1116   FXColors::Gray94,
1117   FXColors::Gray95,
1118   FXColors::Gray96,
1119   FXColors::Gray97,
1120   FXColors::Gray98,
1121   FXColors::Gray99,
1122   FXColors::Honeydew,
1123   FXColors::Honeydew1,
1124   FXColors::Honeydew2,
1125   FXColors::Honeydew3,
1126   FXColors::Honeydew4,
1127   FXColors::HotPink,
1128   FXColors::HotPink1,
1129   FXColors::HotPink2,
1130   FXColors::HotPink3,
1131   FXColors::HotPink4,
1132   FXColors::IndianRed,
1133   FXColors::IndianRed1,
1134   FXColors::IndianRed2,
1135   FXColors::IndianRed3,
1136   FXColors::IndianRed4,
1137   FXColors::Indigo,
1138   FXColors::Ivory,
1139   FXColors::Ivory1,
1140   FXColors::Ivory2,
1141   FXColors::Ivory3,
1142   FXColors::Ivory4,
1143   FXColors::Khaki,
1144   FXColors::Khaki1,
1145   FXColors::Khaki2,
1146   FXColors::Khaki3,
1147   FXColors::Khaki4,
1148   FXColors::Lavender,
1149   FXColors::LavenderBlush,
1150   FXColors::LavenderBlush1,
1151   FXColors::LavenderBlush2,
1152   FXColors::LavenderBlush3,
1153   FXColors::LavenderBlush4,
1154   FXColors::LawnGreen,
1155   FXColors::LemonChiffon,
1156   FXColors::LemonChiffon1,
1157   FXColors::LemonChiffon2,
1158   FXColors::LemonChiffon3,
1159   FXColors::LemonChiffon4,
1160   FXColors::LightBlue,
1161   FXColors::LightBlue1,
1162   FXColors::LightBlue2,
1163   FXColors::LightBlue3,
1164   FXColors::LightBlue4,
1165   FXColors::LightCoral,
1166   FXColors::LightCyan,
1167   FXColors::LightCyan1,
1168   FXColors::LightCyan2,
1169   FXColors::LightCyan3,
1170   FXColors::LightCyan4,
1171   FXColors::LightGoldenrod,
1172   FXColors::LightGoldenrod1,
1173   FXColors::LightGoldenrod2,
1174   FXColors::LightGoldenrod3,
1175   FXColors::LightGoldenrod4,
1176   FXColors::LightGoldenrodYellow,
1177   FXColors::LightGray,
1178   FXColors::LightGreen,
1179   FXColors::LightGray,
1180   FXColors::LightPink,
1181   FXColors::LightPink1,
1182   FXColors::LightPink2,
1183   FXColors::LightPink3,
1184   FXColors::LightPink4,
1185   FXColors::LightSalmon,
1186   FXColors::LightSalmon1,
1187   FXColors::LightSalmon2,
1188   FXColors::LightSalmon3,
1189   FXColors::LightSalmon4,
1190   FXColors::LightSeaGreen,
1191   FXColors::LightSkyBlue,
1192   FXColors::LightSkyBlue1,
1193   FXColors::LightSkyBlue2,
1194   FXColors::LightSkyBlue3,
1195   FXColors::LightSkyBlue4,
1196   FXColors::LightSlateBlue,
1197   FXColors::LightSlateGray,
1198   FXColors::LightSlateGray,
1199   FXColors::LightSteelBlue,
1200   FXColors::LightSteelBlue1,
1201   FXColors::LightSteelBlue2,
1202   FXColors::LightSteelBlue3,
1203   FXColors::LightSteelBlue4,
1204   FXColors::LightYellow,
1205   FXColors::LightYellow1,
1206   FXColors::LightYellow2,
1207   FXColors::LightYellow3,
1208   FXColors::LightYellow4,
1209   FXColors::Lime,
1210   FXColors::LimeGreen,
1211   FXColors::Linen,
1212   FXColors::Magenta,
1213   FXColors::Magenta1,
1214   FXColors::Magenta2,
1215   FXColors::Magenta3,
1216   FXColors::Magenta4,
1217   FXColors::Maroon,
1218   FXColors::Maroon1,
1219   FXColors::Maroon2,
1220   FXColors::Maroon3,
1221   FXColors::Maroon4,
1222   FXColors::MediumAquamarine,
1223   FXColors::MediumBlue,
1224   FXColors::MediumOrchid,
1225   FXColors::MediumOrchid1,
1226   FXColors::MediumOrchid2,
1227   FXColors::MediumOrchid3,
1228   FXColors::MediumOrchid4,
1229   FXColors::MediumPurple,
1230   FXColors::MediumPurple1,
1231   FXColors::MediumPurple2,
1232   FXColors::MediumPurple3,
1233   FXColors::MediumPurple4,
1234   FXColors::MediumSeaGreen,
1235   FXColors::MediumSlateBlue,
1236   FXColors::MediumSpringGreen,
1237   FXColors::MediumTurquoise,
1238   FXColors::MediumVioletRed,
1239   FXColors::MidnightBlue,
1240   FXColors::MintCream,
1241   FXColors::MistyRose,
1242   FXColors::MistyRose1,
1243   FXColors::MistyRose2,
1244   FXColors::MistyRose3,
1245   FXColors::MistyRose4,
1246   FXColors::Moccasin,
1247   FXColors::NavajoWhite,
1248   FXColors::NavajoWhite1,
1249   FXColors::NavajoWhite2,
1250   FXColors::NavajoWhite3,
1251   FXColors::NavajoWhite4,
1252   FXColors::Navy,
1253   FXColors::NavyBlue,
1254   FXColors::Clear,
1255   FXColors::OldLace,
1256   FXColors::Olive,
1257   FXColors::OliveDrab,
1258   FXColors::OliveDrab1,
1259   FXColors::OliveDrab2,
1260   FXColors::OliveDrab3,
1261   FXColors::OliveDrab4,
1262   FXColors::Orange,
1263   FXColors::Orange1,
1264   FXColors::Orange2,
1265   FXColors::Orange3,
1266   FXColors::Orange4,
1267   FXColors::OrangeRed,
1268   FXColors::OrangeRed1,
1269   FXColors::OrangeRed2,
1270   FXColors::OrangeRed3,
1271   FXColors::OrangeRed4,
1272   FXColors::Orchid,
1273   FXColors::Orchid1,
1274   FXColors::Orchid2,
1275   FXColors::Orchid3,
1276   FXColors::Orchid4,
1277   FXColors::PaleGoldenrod,
1278   FXColors::PaleGreen,
1279   FXColors::PaleGreen1,
1280   FXColors::PaleGreen2,
1281   FXColors::PaleGreen3,
1282   FXColors::PaleGreen4,
1283   FXColors::PaleTurquoise,
1284   FXColors::PaleTurquoise1,
1285   FXColors::PaleTurquoise2,
1286   FXColors::PaleTurquoise3,
1287   FXColors::PaleTurquoise4,
1288   FXColors::PaleVioletRed,
1289   FXColors::PaleVioletRed1,
1290   FXColors::PaleVioletRed2,
1291   FXColors::PaleVioletRed3,
1292   FXColors::PaleVioletRed4,
1293   FXColors::PapayaWhip,
1294   FXColors::PeachPuff,
1295   FXColors::PeachPuff1,
1296   FXColors::PeachPuff2,
1297   FXColors::PeachPuff3,
1298   FXColors::PeachPuff4,
1299   FXColors::Peru,
1300   FXColors::Pink,
1301   FXColors::Pink1,
1302   FXColors::Pink2,
1303   FXColors::Pink3,
1304   FXColors::Pink4,
1305   FXColors::Plum,
1306   FXColors::Plum1,
1307   FXColors::Plum2,
1308   FXColors::Plum3,
1309   FXColors::Plum4,
1310   FXColors::PowderBlue,
1311   FXColors::Purple,
1312   FXColors::Purple1,
1313   FXColors::Purple2,
1314   FXColors::Purple3,
1315   FXColors::Purple4,
1316   FXColors::Raspberry,
1317   FXColors::Red,
1318   FXColors::Red1,
1319   FXColors::Red2,
1320   FXColors::Red3,
1321   FXColors::Red4,
1322   FXColors::RosyBrown,
1323   FXColors::RosyBrown1,
1324   FXColors::RosyBrown2,
1325   FXColors::RosyBrown3,
1326   FXColors::RosyBrown4,
1327   FXColors::RoyalBlue,
1328   FXColors::RoyalBlue1,
1329   FXColors::RoyalBlue2,
1330   FXColors::RoyalBlue3,
1331   FXColors::RoyalBlue4,
1332   FXColors::SaddleBrown,
1333   FXColors::Salmon,
1334   FXColors::Salmon1,
1335   FXColors::Salmon2,
1336   FXColors::Salmon3,
1337   FXColors::Salmon4,
1338   FXColors::SandyBrown,
1339   FXColors::SeaGreen,
1340   FXColors::SeaGreen1,
1341   FXColors::SeaGreen2,
1342   FXColors::SeaGreen3,
1343   FXColors::SeaGreen4,
1344   FXColors::Seashell,
1345   FXColors::Seashell1,
1346   FXColors::Seashell2,
1347   FXColors::Seashell3,
1348   FXColors::Seashell4,
1349   FXColors::Sepia,
1350   FXColors::Sienna,
1351   FXColors::Sienna1,
1352   FXColors::Sienna2,
1353   FXColors::Sienna3,
1354   FXColors::Sienna4,
1355   FXColors::Silver,
1356   FXColors::SkyBlue,
1357   FXColors::SkyBlue1,
1358   FXColors::SkyBlue2,
1359   FXColors::SkyBlue3,
1360   FXColors::SkyBlue4,
1361   FXColors::SlateBlue,
1362   FXColors::SlateBlue1,
1363   FXColors::SlateBlue2,
1364   FXColors::SlateBlue3,
1365   FXColors::SlateBlue4,
1366   FXColors::SlateGray,
1367   FXColors::SlateGray1,
1368   FXColors::SlateGray2,
1369   FXColors::SlateGray3,
1370   FXColors::SlateGray4,
1371   FXColors::SlateGray,
1372   FXColors::Snow,
1373   FXColors::Snow1,
1374   FXColors::Snow2,
1375   FXColors::Snow3,
1376   FXColors::Snow4,
1377   FXColors::SpringGreen,
1378   FXColors::SpringGreen1,
1379   FXColors::SpringGreen2,
1380   FXColors::SpringGreen3,
1381   FXColors::SpringGreen4,
1382   FXColors::SteelBlue,
1383   FXColors::SteelBlue1,
1384   FXColors::SteelBlue2,
1385   FXColors::SteelBlue3,
1386   FXColors::SteelBlue4,
1387   FXColors::Tan,
1388   FXColors::Tan1,
1389   FXColors::Tan2,
1390   FXColors::Tan3,
1391   FXColors::Tan4,
1392   FXColors::Teal,
1393   FXColors::Thistle,
1394   FXColors::Thistle1,
1395   FXColors::Thistle2,
1396   FXColors::Thistle3,
1397   FXColors::Thistle4,
1398   FXColors::Tomato,
1399   FXColors::Tomato1,
1400   FXColors::Tomato2,
1401   FXColors::Tomato3,
1402   FXColors::Tomato4,
1403   FXColors::Turquoise,
1404   FXColors::Turquoise1,
1405   FXColors::Turquoise2,
1406   FXColors::Turquoise3,
1407   FXColors::Turquoise4,
1408   FXColors::Ultramarine,
1409   FXColors::Violet,
1410   FXColors::VioletRed,
1411   FXColors::VioletRed1,
1412   FXColors::VioletRed2,
1413   FXColors::VioletRed3,
1414   FXColors::VioletRed4,
1415   FXColors::WarmGray,
1416   FXColors::Wheat,
1417   FXColors::Wheat1,
1418   FXColors::Wheat2,
1419   FXColors::Wheat3,
1420   FXColors::Wheat4,
1421   FXColors::White,
1422   FXColors::WhiteSmoke,
1423   FXColors::Yellow,
1424   FXColors::Yellow1,
1425   FXColors::Yellow2,
1426   FXColors::Yellow3,
1427   FXColors::Yellow4,
1428   FXColors::YellowGreen
1429   };
1430 
1431 
1432 // Furnish our own version
1433 extern FXAPI FXint __sscanf(const FXchar* string,const FXchar* format,...);
1434 extern FXAPI FXint __snprintf(FXchar* string,FXint length,const FXchar* format,...);
1435 
1436 
1437 // Get RGB value from color name
colorFromName(const FXchar * name)1438 FXColor colorFromName(const FXchar* name){
1439   FXchar temp[MAXCOLORNAME],*tail=temp,c;
1440   FXint l,h,m,eq,r,g,b,a;
1441   if(name){
1442     while((c=*name++)!='\0' && tail<&temp[MAXCOLORNAME-1]){     // Squeeze out embedded spaces
1443       if(!Ascii::isSpace(c)) *tail++=c;
1444       }
1445     *tail='\0';
1446     if(temp[0]=='#'){
1447       switch(tail-temp-1){
1448         case 3:
1449           __sscanf(temp+1,"%01x%01x%01x",&r,&g,&b);
1450           return FXRGB((r*17),(g*17),(b*17));
1451         case 4:
1452           __sscanf(temp+1,"%01x%01x%01x%01x",&r,&g,&b,&a);
1453           return FXRGBA((r*17),(g*17),(b*17),(a*17));
1454         case 6:
1455           __sscanf(temp+1,"%02x%02x%02x",&r,&g,&b);
1456           return FXRGB(r,g,b);
1457         case 8:
1458           __sscanf(temp+1,"%02x%02x%02x%02x",&r,&g,&b,&a);
1459           return FXRGBA(r,g,b,a);
1460         case 9:
1461           __sscanf(temp+1,"%03x%03x%03x",&r,&g,&b);
1462           return FXRGB((r/16),(g/16),(b/16));
1463         case 12:
1464           __sscanf(temp+1,"%04x%04x%04x",&r,&g,&b);
1465           return FXRGB((r/257),(g/257),(b/257));
1466         case 16:
1467           __sscanf(temp+1,"%04x%04x%04x%04x",&r,&g,&b,&a);
1468           return FXRGBA((r/257),(g/257),(b/257),(a/257));
1469         }
1470       }
1471     else{
1472       l=0;
1473       h=ARRAYNUMBER(colorName)-1;
1474       do{
1475         m=(h+l)>>1;
1476         eq=comparecase(temp,colorName[m]);
1477         if(eq==0) return colorValue[m];
1478         if(eq<0) h=m-1; else l=m+1;
1479         }
1480       while(h>=l);
1481       }
1482     }
1483   return FXRGBA(0,0,0,0);
1484   }
1485 
1486 
1487 // Get rgb value from color name
colorFromName(const FXString & name)1488 FXColor colorFromName(const FXString& name){
1489   return colorFromName(name.text());
1490   }
1491 
1492 
1493 // Get color name from rgb value
nameFromColor(FXchar * name,FXColor color)1494 FXchar* nameFromColor(FXchar* name,FXColor color){
1495   if(!name){ fxerror("FXColorName::nameFromColor: NULL name argument.\n"); }
1496   if(color && FXALPHAVAL(color)<255){
1497     __snprintf(name,MAXCOLORNAME,"#%02x%02x%02x%02x",FXREDVAL(color),FXGREENVAL(color),FXBLUEVAL(color),FXALPHAVAL(color));
1498     }
1499   else{
1500     for(FXuint i=0; i<ARRAYNUMBER(colorValue); i++){
1501       if(colorValue[i]==color){
1502         fxstrlcpy(name,colorName[i],MAXCOLORNAME);
1503         return name;
1504         }
1505       }
1506     __snprintf(name,MAXCOLORNAME,"#%02x%02x%02x",FXREDVAL(color),FXGREENVAL(color),FXBLUEVAL(color));
1507     }
1508   return name;
1509   }
1510 
1511 
1512 // Get color name from rgb value
nameFromColor(FXColor color)1513 FXString nameFromColor(FXColor color){
1514   FXchar temp[100];
1515   return FXString(nameFromColor(temp,color));
1516   }
1517 
1518 
1519 // Blend source color over background color
blendOverBackground(FXColor back,FXColor clr)1520 FXColor blendOverBackground(FXColor back,FXColor clr){
1521   FXint as=FXALPHAVAL(clr);
1522   FXint rb=FXREDVAL(back);
1523   FXint gb=FXGREENVAL(back);
1524   FXint bb=FXBLUEVAL(back);
1525   FXint rs=(FXREDVAL(clr)-rb)*as;
1526   FXint gs=(FXGREENVAL(clr)-gb)*as;
1527   FXint bs=(FXBLUEVAL(clr)-bb)*as;
1528   rb+=((rs+(rs>>8)+128)>>8);
1529   gb+=((gs+(gs>>8)+128)>>8);
1530   bb+=((gs+(bs>>8)+128)>>8);
1531   return FXRGB(rb,gb,bb);
1532   }
1533 
1534 
1535 // Blend source color over black background color
blendOverBlack(FXColor clr)1536 FXColor blendOverBlack(FXColor clr){
1537   FXint as=FXALPHAVAL(clr);
1538   FXint rs=FXREDVAL(clr)*as;
1539   FXint gs=FXGREENVAL(clr)*as;
1540   FXint bs=FXBLUEVAL(clr)*as;
1541   FXint rd=((rs+(rs>>8)+128)>>8);
1542   FXint gd=((gs+(gs>>8)+128)>>8);
1543   FXint bd=((bs+(bs>>8)+128)>>8);
1544   return FXRGB(rd,gd,bd);
1545   }
1546 
1547 
1548 // Blend source color over white background color
blendOverWhite(FXColor clr)1549 FXColor blendOverWhite(FXColor clr){
1550   FXint as=FXALPHAVAL(clr);
1551   FXint rs=(FXREDVAL(clr)-255)*as;
1552   FXint gs=(FXGREENVAL(clr)-255)*as;
1553   FXint bs=(FXBLUEVAL(clr)-255)*as;
1554   FXint rd=255+((rs+(rs>>8)+128)>>8);
1555   FXint gd=255+((gs+(gs>>8)+128)>>8);
1556   FXint bd=255+((bs+(bs>>8)+128)>>8);
1557   return FXRGB(rd,gd,bd);
1558   }
1559 
1560 
1561 // Blend color src toward color dst by a given percentage
makeBlendColor(FXColor src,FXColor dst,FXint percent)1562 FXColor makeBlendColor(FXColor src,FXColor dst,FXint percent){
1563   FXuint r,g,b,tnecrep=100-percent;
1564   r=(FXREDVAL(dst)*percent+FXREDVAL(src)*tnecrep+50)/100;
1565   g=(FXGREENVAL(dst)*percent+FXGREENVAL(src)*tnecrep+50)/100;
1566   b=(FXBLUEVAL(dst)*percent+FXBLUEVAL(src)*tnecrep+50)/100;
1567   return FXRGB(r,g,b);
1568   }
1569 
1570 
1571 // Get highlight color
makeHiliteColor(FXColor clr,FXint percent)1572 FXColor makeHiliteColor(FXColor clr,FXint percent){
1573   FXuint r,g,b,tnecrep=100-percent;
1574   r=(255*percent+FXREDVAL(clr)*tnecrep+50)/100;
1575   g=(255*percent+FXGREENVAL(clr)*tnecrep+50)/100;
1576   b=(255*percent+FXBLUEVAL(clr)*tnecrep+50)/100;
1577   return FXRGB(r,g,b);
1578   }
1579 
1580 
1581 // Get shadow color
makeShadowColor(FXColor clr,FXint percent)1582 FXColor makeShadowColor(FXColor clr,FXint percent){
1583   FXuint r,g,b,tnecrep=100-percent;
1584   r=(FXREDVAL(clr)*tnecrep+50)/100;
1585   g=(FXGREENVAL(clr)*tnecrep+50)/100;
1586   b=(FXBLUEVAL(clr)*tnecrep+50)/100;
1587   return FXRGB(r,g,b);
1588   }
1589 
1590 
1591 }
1592