46fda2a42439b0115c4ba7c158cd637dd27953ff
[mono.git] / mcs / class / System.Drawing / System.Drawing / KnownColors.cs
1 //
2 // System.Drawing.KnownColors
3 //
4 // Authors:
5 //      Gonzalo Paniagua Javier (gonzalo@ximian.com)
6 //      Peter Dennis Bartok (pbartok@novell.com)
7 //      Sebastien Pouliot  <sebastien@ximian.com>
8 //
9 // Copyright (C) 2007 Novell, Inc (http://www.novell.com)
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 namespace System.Drawing {
32
33         internal static class KnownColors {
34                 // FindColorMatch relies on the index + 1 == KnowColor match
35                 static internal uint[] ArgbValues = new uint[] {
36                         0x00000000,     /* 000 - Empty */
37                         0xFFD4D0C8,     /* 001 - ActiveBorder */
38                         0xFF0054E3,     /* 002 - ActiveCaption */
39                         0xFFFFFFFF,     /* 003 - ActiveCaptionText */
40                         0xFF808080,     /* 004 - AppWorkspace */
41                         0xFFECE9D8,     /* 005 - Control */
42                         0xFFACA899,     /* 006 - ControlDark */
43                         0xFF716F64,     /* 007 - ControlDarkDark */
44                         0xFFF1EFE2,     /* 008 - ControlLight */
45                         0xFFFFFFFF,     /* 009 - ControlLightLight */
46                         0xFF000000,     /* 010 - ControlText */
47                         0xFF004E98,     /* 011 - Desktop */
48                         0xFFACA899,     /* 012 - GrayText */
49                         0xFF316AC5,     /* 013 - Highlight */
50                         0xFFFFFFFF,     /* 014 - HighlightText */
51                         0xFF000080,     /* 015 - HotTrack */
52                         0xFFD4D0C8,     /* 016 - InactiveBorder */
53                         0xFF7A96DF,     /* 017 - InactiveCaption */
54                         0xFFD8E4F8,     /* 018 - InactiveCaptionText */
55                         0xFFFFFFE1,     /* 019 - Info */
56                         0xFF000000,     /* 020 - InfoText */
57                         0xFFFFFFFF,     /* 021 - Menu */
58                         0xFF000000,     /* 022 - MenuText */
59                         0xFFD4D0C8,     /* 023 - ScrollBar */
60                         0xFFFFFFFF,     /* 024 - Window */
61                         0xFF000000,     /* 025 - WindowFrame */
62                         0xFF000000,     /* 026 - WindowText */
63                         0x00FFFFFF,     /* 027 - Transparent */
64                         0xFFF0F8FF,     /* 028 - AliceBlue */
65                         0xFFFAEBD7,     /* 029 - AntiqueWhite */
66                         0xFF00FFFF,     /* 030 - Aqua */
67                         0xFF7FFFD4,     /* 031 - Aquamarine */
68                         0xFFF0FFFF,     /* 032 - Azure */
69                         0xFFF5F5DC,     /* 033 - Beige */
70                         0xFFFFE4C4,     /* 034 - Bisque */
71                         0xFF000000,     /* 035 - Black */
72                         0xFFFFEBCD,     /* 036 - BlanchedAlmond */
73                         0xFF0000FF,     /* 037 - Blue */
74                         0xFF8A2BE2,     /* 038 - BlueViolet */
75                         0xFFA52A2A,     /* 039 - Brown */
76                         0xFFDEB887,     /* 040 - BurlyWood */
77                         0xFF5F9EA0,     /* 041 - CadetBlue */
78                         0xFF7FFF00,     /* 042 - Chartreuse */
79                         0xFFD2691E,     /* 043 - Chocolate */
80                         0xFFFF7F50,     /* 044 - Coral */
81                         0xFF6495ED,     /* 045 - CornflowerBlue */
82                         0xFFFFF8DC,     /* 046 - Cornsilk */
83                         0xFFDC143C,     /* 047 - Crimson */
84                         0xFF00FFFF,     /* 048 - Cyan */
85                         0xFF00008B,     /* 049 - DarkBlue */
86                         0xFF008B8B,     /* 050 - DarkCyan */
87                         0xFFB8860B,     /* 051 - DarkGoldenrod */
88                         0xFFA9A9A9,     /* 052 - DarkGray */
89                         0xFF006400,     /* 053 - DarkGreen */
90                         0xFFBDB76B,     /* 054 - DarkKhaki */
91                         0xFF8B008B,     /* 055 - DarkMagenta */
92                         0xFF556B2F,     /* 056 - DarkOliveGreen */
93                         0xFFFF8C00,     /* 057 - DarkOrange */
94                         0xFF9932CC,     /* 058 - DarkOrchid */
95                         0xFF8B0000,     /* 059 - DarkRed */
96                         0xFFE9967A,     /* 060 - DarkSalmon */
97                         0xFF8FBC8B,     /* 061 - DarkSeaGreen */
98                         0xFF483D8B,     /* 062 - DarkSlateBlue */
99                         0xFF2F4F4F,     /* 063 - DarkSlateGray */
100                         0xFF00CED1,     /* 064 - DarkTurquoise */
101                         0xFF9400D3,     /* 065 - DarkViolet */
102                         0xFFFF1493,     /* 066 - DeepPink */
103                         0xFF00BFFF,     /* 067 - DeepSkyBlue */
104                         0xFF696969,     /* 068 - DimGray */
105                         0xFF1E90FF,     /* 069 - DodgerBlue */
106                         0xFFB22222,     /* 070 - Firebrick */
107                         0xFFFFFAF0,     /* 071 - FloralWhite */
108                         0xFF228B22,     /* 072 - ForestGreen */
109                         0xFFFF00FF,     /* 073 - Fuchsia */
110                         0xFFDCDCDC,     /* 074 - Gainsboro */
111                         0xFFF8F8FF,     /* 075 - GhostWhite */
112                         0xFFFFD700,     /* 076 - Gold */
113                         0xFFDAA520,     /* 077 - Goldenrod */
114                         0xFF808080,     /* 078 - Gray */
115                         0xFF008000,     /* 079 - Green */
116                         0xFFADFF2F,     /* 080 - GreenYellow */
117                         0xFFF0FFF0,     /* 081 - Honeydew */
118                         0xFFFF69B4,     /* 082 - HotPink */
119                         0xFFCD5C5C,     /* 083 - IndianRed */
120                         0xFF4B0082,     /* 084 - Indigo */
121                         0xFFFFFFF0,     /* 085 - Ivory */
122                         0xFFF0E68C,     /* 086 - Khaki */
123                         0xFFE6E6FA,     /* 087 - Lavender */
124                         0xFFFFF0F5,     /* 088 - LavenderBlush */
125                         0xFF7CFC00,     /* 089 - LawnGreen */
126                         0xFFFFFACD,     /* 090 - LemonChiffon */
127                         0xFFADD8E6,     /* 091 - LightBlue */
128                         0xFFF08080,     /* 092 - LightCoral */
129                         0xFFE0FFFF,     /* 093 - LightCyan */
130                         0xFFFAFAD2,     /* 094 - LightGoldenrodYellow */
131                         0xFFD3D3D3,     /* 095 - LightGray */
132                         0xFF90EE90,     /* 096 - LightGreen */
133                         0xFFFFB6C1,     /* 097 - LightPink */
134                         0xFFFFA07A,     /* 098 - LightSalmon */
135                         0xFF20B2AA,     /* 099 - LightSeaGreen */
136                         0xFF87CEFA,     /* 100 - LightSkyBlue */
137                         0xFF778899,     /* 101 - LightSlateGray */
138                         0xFFB0C4DE,     /* 102 - LightSteelBlue */
139                         0xFFFFFFE0,     /* 103 - LightYellow */
140                         0xFF00FF00,     /* 104 - Lime */
141                         0xFF32CD32,     /* 105 - LimeGreen */
142                         0xFFFAF0E6,     /* 106 - Linen */
143                         0xFFFF00FF,     /* 107 - Magenta */
144                         0xFF800000,     /* 108 - Maroon */
145                         0xFF66CDAA,     /* 109 - MediumAquamarine */
146                         0xFF0000CD,     /* 110 - MediumBlue */
147                         0xFFBA55D3,     /* 111 - MediumOrchid */
148                         0xFF9370DB,     /* 112 - MediumPurple */
149                         0xFF3CB371,     /* 113 - MediumSeaGreen */
150                         0xFF7B68EE,     /* 114 - MediumSlateBlue */
151                         0xFF00FA9A,     /* 115 - MediumSpringGreen */
152                         0xFF48D1CC,     /* 116 - MediumTurquoise */
153                         0xFFC71585,     /* 117 - MediumVioletRed */
154                         0xFF191970,     /* 118 - MidnightBlue */
155                         0xFFF5FFFA,     /* 119 - MintCream */
156                         0xFFFFE4E1,     /* 120 - MistyRose */
157                         0xFFFFE4B5,     /* 121 - Moccasin */
158                         0xFFFFDEAD,     /* 122 - NavajoWhite */
159                         0xFF000080,     /* 123 - Navy */
160                         0xFFFDF5E6,     /* 124 - OldLace */
161                         0xFF808000,     /* 125 - Olive */
162                         0xFF6B8E23,     /* 126 - OliveDrab */
163                         0xFFFFA500,     /* 127 - Orange */
164                         0xFFFF4500,     /* 128 - OrangeRed */
165                         0xFFDA70D6,     /* 129 - Orchid */
166                         0xFFEEE8AA,     /* 130 - PaleGoldenrod */
167                         0xFF98FB98,     /* 131 - PaleGreen */
168                         0xFFAFEEEE,     /* 132 - PaleTurquoise */
169                         0xFFDB7093,     /* 133 - PaleVioletRed */
170                         0xFFFFEFD5,     /* 134 - PapayaWhip */
171                         0xFFFFDAB9,     /* 135 - PeachPuff */
172                         0xFFCD853F,     /* 136 - Peru */
173                         0xFFFFC0CB,     /* 137 - Pink */
174                         0xFFDDA0DD,     /* 138 - Plum */
175                         0xFFB0E0E6,     /* 139 - PowderBlue */
176                         0xFF800080,     /* 140 - Purple */
177                         0xFFFF0000,     /* 141 - Red */
178                         0xFFBC8F8F,     /* 142 - RosyBrown */
179                         0xFF4169E1,     /* 143 - RoyalBlue */
180                         0xFF8B4513,     /* 144 - SaddleBrown */
181                         0xFFFA8072,     /* 145 - Salmon */
182                         0xFFF4A460,     /* 146 - SandyBrown */
183                         0xFF2E8B57,     /* 147 - SeaGreen */
184                         0xFFFFF5EE,     /* 148 - SeaShell */
185                         0xFFA0522D,     /* 149 - Sienna */
186                         0xFFC0C0C0,     /* 150 - Silver */
187                         0xFF87CEEB,     /* 151 - SkyBlue */
188                         0xFF6A5ACD,     /* 152 - SlateBlue */
189                         0xFF708090,     /* 153 - SlateGray */
190                         0xFFFFFAFA,     /* 154 - Snow */
191                         0xFF00FF7F,     /* 155 - SpringGreen */
192                         0xFF4682B4,     /* 156 - SteelBlue */
193                         0xFFD2B48C,     /* 157 - Tan */
194                         0xFF008080,     /* 158 - Teal */
195                         0xFFD8BFD8,     /* 159 - Thistle */
196                         0xFFFF6347,     /* 160 - Tomato */
197                         0xFF40E0D0,     /* 161 - Turquoise */
198                         0xFFEE82EE,     /* 162 - Violet */
199                         0xFFF5DEB3,     /* 163 - Wheat */
200                         0xFFFFFFFF,     /* 164 - White */
201                         0xFFF5F5F5,     /* 165 - WhiteSmoke */
202                         0xFFFFFF00,     /* 166 - Yellow */
203                         0xFF9ACD32,     /* 167 - YellowGreen */
204                         0xFFECE9D8,     /* 168 - ButtonFace */
205                         0xFFFFFFFF,     /* 169 - ButtonHighlight */
206                         0xFFACA899,     /* 170 - ButtonShadow */
207                         0xFF3D95FF,     /* 171 - GradientActiveCaption */
208                         0xFF9DB9EB,     /* 172 - GradientInactiveCaption */
209                         0xFFECE9D8,     /* 173 - MenuBar */
210                         0xFF316AC5,     /* 174 - MenuHighlight */
211                 };
212
213                 static KnownColors ()
214                 {
215                         if (GDIPlus.RunningOnWindows ()) {
216                                 // If we're on Windows we should behave like MS and pull the colors
217                                 RetrieveWindowsSystemColors ();
218                         }
219                         // note: Mono's SWF Theme class will call the static Update method to apply
220                         // correct system colors outside Windows
221                 }
222
223                 // Windows values are in BGR format and without alpha
224                 // so we force it to opaque (or everything will be transparent) and reverse B and R
225                 static uint GetSysColor (GetSysColorIndex index)
226                 {
227                         uint bgr = GDIPlus.Win32GetSysColor (index);
228                         return 0xFF000000 | (bgr & 0xFF) << 16 | (bgr & 0xFF00) | (bgr >> 16);
229                 }
230
231                 static void RetrieveWindowsSystemColors ()
232                 {
233                         ArgbValues [(int)KnownColor.ActiveBorder] = GetSysColor (GetSysColorIndex.COLOR_ACTIVEBORDER);
234                         ArgbValues [(int)KnownColor.ActiveCaption] = GetSysColor (GetSysColorIndex.COLOR_ACTIVECAPTION);
235                         ArgbValues [(int)KnownColor.ActiveCaptionText] = GetSysColor (GetSysColorIndex.COLOR_CAPTIONTEXT);
236                         ArgbValues [(int)KnownColor.AppWorkspace] = GetSysColor (GetSysColorIndex.COLOR_APPWORKSPACE);
237                         ArgbValues [(int)KnownColor.Control] = GetSysColor (GetSysColorIndex.COLOR_BTNFACE);
238                         ArgbValues [(int)KnownColor.ControlDark] = GetSysColor (GetSysColorIndex.COLOR_BTNSHADOW);
239                         ArgbValues [(int)KnownColor.ControlDarkDark] = GetSysColor (GetSysColorIndex.COLOR_3DDKSHADOW);
240                         ArgbValues [(int)KnownColor.ControlLight] = GetSysColor (GetSysColorIndex.COLOR_3DLIGHT);
241                         ArgbValues [(int)KnownColor.ControlLightLight] = GetSysColor (GetSysColorIndex.COLOR_BTNHIGHLIGHT);
242                         ArgbValues [(int)KnownColor.ControlText] = GetSysColor (GetSysColorIndex.COLOR_BTNTEXT);
243                         ArgbValues [(int)KnownColor.Desktop] = GetSysColor (GetSysColorIndex.COLOR_DESKTOP);
244                         ArgbValues [(int)KnownColor.GrayText] = GetSysColor (GetSysColorIndex.COLOR_GRAYTEXT);
245                         ArgbValues [(int)KnownColor.Highlight] = GetSysColor (GetSysColorIndex.COLOR_HIGHLIGHT);
246                         ArgbValues [(int)KnownColor.HighlightText] = GetSysColor (GetSysColorIndex.COLOR_HIGHLIGHTTEXT);
247                         ArgbValues [(int)KnownColor.HotTrack] = GetSysColor (GetSysColorIndex.COLOR_HOTLIGHT);
248                         ArgbValues [(int)KnownColor.InactiveBorder] = GetSysColor (GetSysColorIndex.COLOR_INACTIVEBORDER);
249                         ArgbValues [(int)KnownColor.InactiveCaption] = GetSysColor (GetSysColorIndex.COLOR_INACTIVECAPTION);
250                         ArgbValues [(int)KnownColor.InactiveCaptionText] = GetSysColor (GetSysColorIndex.COLOR_INACTIVECAPTIONTEXT);
251                         ArgbValues [(int)KnownColor.Info] = GetSysColor (GetSysColorIndex.COLOR_INFOBK);
252                         ArgbValues [(int)KnownColor.InfoText] = GetSysColor (GetSysColorIndex.COLOR_INFOTEXT);
253                         ArgbValues [(int)KnownColor.Menu] = GetSysColor (GetSysColorIndex.COLOR_MENU);
254                         ArgbValues [(int)KnownColor.MenuText] = GetSysColor (GetSysColorIndex.COLOR_MENUTEXT);
255                         ArgbValues [(int)KnownColor.ScrollBar] = GetSysColor (GetSysColorIndex.COLOR_SCROLLBAR);
256                         ArgbValues [(int)KnownColor.Window] = GetSysColor (GetSysColorIndex.COLOR_WINDOW);
257                         ArgbValues [(int)KnownColor.WindowFrame] = GetSysColor (GetSysColorIndex.COLOR_WINDOWFRAME);
258                         ArgbValues [(int)KnownColor.WindowText] = GetSysColor (GetSysColorIndex.COLOR_WINDOWTEXT);
259                         ArgbValues [(int)KnownColor.ButtonFace] = GetSysColor (GetSysColorIndex.COLOR_BTNFACE);
260                         ArgbValues [(int)KnownColor.ButtonHighlight] = GetSysColor (GetSysColorIndex.COLOR_BTNHIGHLIGHT);
261                         ArgbValues [(int)KnownColor.ButtonShadow] = GetSysColor (GetSysColorIndex.COLOR_BTNSHADOW);
262                         ArgbValues [(int)KnownColor.GradientActiveCaption] = GetSysColor (GetSysColorIndex.COLOR_GRADIENTACTIVECAPTION);
263                         ArgbValues [(int)KnownColor.GradientInactiveCaption] = GetSysColor (GetSysColorIndex.COLOR_GRADIENTINACTIVECAPTION);
264                         ArgbValues [(int)KnownColor.MenuBar] = GetSysColor (GetSysColorIndex.COLOR_MENUBAR);
265                         ArgbValues [(int)KnownColor.MenuHighlight] = GetSysColor (GetSysColorIndex.COLOR_MENUHIGHLIGHT);
266                 }
267
268                 public static Color FromKnownColor (KnownColor kc)
269                 {
270                         Color c;
271                         short n = (short)kc;
272                         if ((n <= 0) || (n >= ArgbValues.Length)) {
273                                 // This is what it returns!
274                                 c = Color.FromArgb (0, 0, 0, 0);
275                                 c.state |= (short) Color.ColorType.Named;
276                         } else {
277                                 c = new Color ();
278                                 c.state = (short) (Color.ColorType.ARGB | Color.ColorType.Known | Color.ColorType.Named);
279                                 if ((n < 27) || (n > 169))
280                                         c.state |= (short) Color.ColorType.System;
281                                 c.Value = ArgbValues [n];
282                         }
283                         c.knownColor = n;
284                         return c;
285                 }
286
287                 public static string GetName (short kc)
288                 {
289                         switch (kc) {
290                         case 1:         return "ActiveBorder";
291                         case 2:         return "ActiveCaption";
292                         case 3:         return "ActiveCaptionText";
293                         case 4:         return "AppWorkspace";
294                         case 5:         return "Control";
295                         case 6:         return "ControlDark";
296                         case 7:         return "ControlDarkDark";
297                         case 8:         return "ControlLight";
298                         case 9:         return "ControlLightLight";
299                         case 10:        return "ControlText";
300                         case 11:        return "Desktop";
301                         case 12:        return "GrayText";
302                         case 13:        return "Highlight";
303                         case 14:        return "HighlightText";
304                         case 15:        return "HotTrack";
305                         case 16:        return "InactiveBorder";
306                         case 17:        return "InactiveCaption";
307                         case 18:        return "InactiveCaptionText";
308                         case 19:        return "Info";
309                         case 20:        return "InfoText";
310                         case 21:        return "Menu";
311                         case 22:        return "MenuText";
312                         case 23:        return "ScrollBar";
313                         case 24:        return "Window";
314                         case 25:        return "WindowFrame";
315                         case 26:        return "WindowText";
316                         case 27:        return "Transparent";
317                         case 28:        return "AliceBlue";
318                         case 29:        return "AntiqueWhite";
319                         case 30:        return "Aqua";
320                         case 31:        return "Aquamarine";
321                         case 32:        return "Azure";
322                         case 33:        return "Beige";
323                         case 34:        return "Bisque";
324                         case 35:        return "Black";
325                         case 36:        return "BlanchedAlmond";
326                         case 37:        return "Blue";
327                         case 38:        return "BlueViolet";
328                         case 39:        return "Brown";
329                         case 40:        return "BurlyWood";
330                         case 41:        return "CadetBlue";
331                         case 42:        return "Chartreuse";
332                         case 43:        return "Chocolate";
333                         case 44:        return "Coral";
334                         case 45:        return "CornflowerBlue";
335                         case 46:        return "Cornsilk";
336                         case 47:        return "Crimson";
337                         case 48:        return "Cyan";
338                         case 49:        return "DarkBlue";
339                         case 50:        return "DarkCyan";
340                         case 51:        return "DarkGoldenrod";
341                         case 52:        return "DarkGray";
342                         case 53:        return "DarkGreen";
343                         case 54:        return "DarkKhaki";
344                         case 55:        return "DarkMagenta";
345                         case 56:        return "DarkOliveGreen";
346                         case 57:        return "DarkOrange";
347                         case 58:        return "DarkOrchid";
348                         case 59:        return "DarkRed";
349                         case 60:        return "DarkSalmon";
350                         case 61:        return "DarkSeaGreen";
351                         case 62:        return "DarkSlateBlue";
352                         case 63:        return "DarkSlateGray";
353                         case 64:        return "DarkTurquoise";
354                         case 65:        return "DarkViolet";
355                         case 66:        return "DeepPink";
356                         case 67:        return "DeepSkyBlue";
357                         case 68:        return "DimGray";
358                         case 69:        return "DodgerBlue";
359                         case 70:        return "Firebrick";
360                         case 71:        return "FloralWhite";
361                         case 72:        return "ForestGreen";
362                         case 73:        return "Fuchsia";
363                         case 74:        return "Gainsboro";
364                         case 75:        return "GhostWhite";
365                         case 76:        return "Gold";
366                         case 77:        return "Goldenrod";
367                         case 78:        return "Gray";
368                         case 79:        return "Green";
369                         case 80:        return "GreenYellow";
370                         case 81:        return "Honeydew";
371                         case 82:        return "HotPink";
372                         case 83:        return "IndianRed";
373                         case 84:        return "Indigo";
374                         case 85:        return "Ivory";
375                         case 86:        return "Khaki";
376                         case 87:        return "Lavender";
377                         case 88:        return "LavenderBlush";
378                         case 89:        return "LawnGreen";
379                         case 90:        return "LemonChiffon";
380                         case 91:        return "LightBlue";
381                         case 92:        return "LightCoral";
382                         case 93:        return "LightCyan";
383                         case 94:        return "LightGoldenrodYellow";
384                         case 95:        return "LightGray";
385                         case 96:        return "LightGreen";
386                         case 97:        return "LightPink";
387                         case 98:        return "LightSalmon";
388                         case 99:        return "LightSeaGreen";
389                         case 100:       return "LightSkyBlue";
390                         case 101:       return "LightSlateGray";
391                         case 102:       return "LightSteelBlue";
392                         case 103:       return "LightYellow";
393                         case 104:       return "Lime";
394                         case 105:       return "LimeGreen";
395                         case 106:       return "Linen";
396                         case 107:       return "Magenta";
397                         case 108:       return "Maroon";
398                         case 109:       return "MediumAquamarine";
399                         case 110:       return "MediumBlue";
400                         case 111:       return "MediumOrchid";
401                         case 112:       return "MediumPurple";
402                         case 113:       return "MediumSeaGreen";
403                         case 114:       return "MediumSlateBlue";
404                         case 115:       return "MediumSpringGreen";
405                         case 116:       return "MediumTurquoise";
406                         case 117:       return "MediumVioletRed";
407                         case 118:       return "MidnightBlue";
408                         case 119:       return "MintCream";
409                         case 120:       return "MistyRose";
410                         case 121:       return "Moccasin";
411                         case 122:       return "NavajoWhite";
412                         case 123:       return "Navy";
413                         case 124:       return "OldLace";
414                         case 125:       return "Olive";
415                         case 126:       return "OliveDrab";
416                         case 127:       return "Orange";
417                         case 128:       return "OrangeRed";
418                         case 129:       return "Orchid";
419                         case 130:       return "PaleGoldenrod";
420                         case 131:       return "PaleGreen";
421                         case 132:       return "PaleTurquoise";
422                         case 133:       return "PaleVioletRed";
423                         case 134:       return "PapayaWhip";
424                         case 135:       return "PeachPuff";
425                         case 136:       return "Peru";
426                         case 137:       return "Pink";
427                         case 138:       return "Plum";
428                         case 139:       return "PowderBlue";
429                         case 140:       return "Purple";
430                         case 141:       return "Red";
431                         case 142:       return "RosyBrown";
432                         case 143:       return "RoyalBlue";
433                         case 144:       return "SaddleBrown";
434                         case 145:       return "Salmon";
435                         case 146:       return "SandyBrown";
436                         case 147:       return "SeaGreen";
437                         case 148:       return "SeaShell";
438                         case 149:       return "Sienna";
439                         case 150:       return "Silver";
440                         case 151:       return "SkyBlue";
441                         case 152:       return "SlateBlue";
442                         case 153:       return "SlateGray";
443                         case 154:       return "Snow";
444                         case 155:       return "SpringGreen";
445                         case 156:       return "SteelBlue";
446                         case 157:       return "Tan";
447                         case 158:       return "Teal";
448                         case 159:       return "Thistle";
449                         case 160:       return "Tomato";
450                         case 161:       return "Turquoise";
451                         case 162:       return "Violet";
452                         case 163:       return "Wheat";
453                         case 164:       return "White";
454                         case 165:       return "WhiteSmoke";
455                         case 166:       return "Yellow";
456                         case 167:       return "YellowGreen";
457                         case 168:       return "ButtonFace";
458                         case 169:       return "ButtonHighlight";
459                         case 170:       return "ButtonShadow";
460                         case 171:       return "GradientActiveCaption";
461                         case 172:       return "GradientInactiveCaption";
462                         case 173:       return "MenuBar";
463                         case 174:       return "MenuHighlight";
464                         default:        return String.Empty;
465                         }
466                 }
467
468                 public static string GetName (KnownColor kc)
469                 {
470                         return GetName ((short)kc);
471                 }
472
473                 // FIXME: Linear scan
474                 public static Color FindColorMatch (Color c)
475                 {
476                         uint argb = (uint) c.ToArgb ();
477                         
478                         // 1-based
479                         const int first_real_color_index = (int) KnownColor.AliceBlue;
480                         const int last_real_color_index = (int) KnownColor.YellowGreen;
481                         
482                         for (int i = first_real_color_index - 1; i < last_real_color_index; i++) {
483                                 if (argb == KnownColors.ArgbValues [i])
484                                         return KnownColors.FromKnownColor ((KnownColor)i);
485                         }
486                         
487                         return Color.Empty;
488                 }
489
490                 // When this method is called, we teach any new color(s) to the Color class
491                 // NOTE: This is called (reflection) by System.Windows.Forms.Theme (this isn't dead code)
492                 public static void Update (int knownColor, int color)
493                 {
494                         ArgbValues[knownColor] = (uint)color;
495                 }
496         }
497 }